PHP反序列化漏洞

PHP反序列化漏洞

  • PHP类与对象
    • 对象
  • Magic函数
  • PHP序列化与反序列化
    • 不同类型的序列化
    • pubilc与private
    • 反序列化
  • 反序列化漏洞的出现
  • CTF题目分析
    • PHP反序列+文件包含
    • 攻防世界
  • Typecho反序列化漏洞
  • PHP反序列化漏洞防御

PHP类与对象

一个共享相同结构和行为的对象的集合

对象

类的实例
PHP反序列化漏洞_第1张图片

Magic函数

PHP反序列化漏洞_第2张图片PHP反序列化漏洞_第3张图片

PHP反序列化漏洞_第4张图片
PHP反序列化漏洞_第5张图片

PHP序列化与反序列化

序列化:把对象转化为可传输的字节序列过程称为序列化,可以在任何地方
反序列化:把字节序列还原为对象的过程称为反序列化。

PHP反序列化漏洞_第6张图片

不同类型的序列化

PHP反序列化漏洞_第7张图片

布尔值:b:value
整数型:i:value
字符串型:s:length:“value”
数组型:a:< length>:{key,value paris};
对象型:O:
NULL型:N:

PHP反序列化漏洞_第8张图片PHP反序列化漏洞_第9张图片

常量不会被序列化

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

pubilc与private

私有对象的调用,会与类名进行拼接
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

反序列化

【1】如果传递的字符串不可以序列化,则返回FALSE
【2】如果对象没有预定义,反序列化得到的对象是_PHP_Incomplete_Class
PHP反序列化漏洞_第10张图片
在这里插入图片描述PHP反序列化漏洞_第11张图片
PHP反序列化漏洞_第12张图片

反序列化漏洞的出现

【1】unserialize函数的参数可控,比如通过GET请求传参(漏洞触发点)
【2】脚本中定义了有Magic方法,方法里面有向PHP文件做都写数据或者执行命令的操作,比如_destruct()、unlink()
【3】读写的内容需要有对象中的成员变量的值,比如filename
PHP反序列化漏洞_第13张图片

CTF题目分析

PHP反序列+文件包含

目录扫描,寻找参数上传点
PHP反序列化漏洞_第14张图片
通过husins构造,让DLNU的序列逃逸,成功修改a[1]=flag.php,a[2]=admin
PHP反序列化漏洞_第15张图片include,文件包含啊。通过文件协议读取试试,重新构造序列
http://121.199.3.139:9002/?a=husinshusinshusinshusins&b=111flag.php%22;s:1:%221%22;s:52:%22php://filter/convert.base64-encode/resource=flag.php%22;s:1:%222%22;s:5:%22admin%22;}

PHP反序列化漏洞_第16张图片
刚base64读取的,base64解码得到flag

PHP反序列化漏洞_第17张图片

攻防世界

PHP反序列化漏洞_第18张图片

PHP反序列化漏洞_第19张图片

Typecho反序列化漏洞

Typecho反序列化漏洞

PHP反序列化漏洞防御

【1】 鉴权,反序列化接口进行鉴权,仅允许后台管理员等特许人员才可调用
【2】白名单,限制反序列化的类
【3】 RASP(Runtime application self-protection,运行时应用自我保护)检测

你可能感兴趣的:(网络安全,php,安全,web安全)