4.9 Deserialization
php 方面反序列化参考:https://www.cnblogs.com/20175211lyz/p/11403397.html
简介
是什么?
序列化是指将对象转化为字节流或者字符串,方便存储或运输。序列化后的信息包含:对象的类型、对象属性类型、对象属性对应的值。而反序列化是序列化的逆操作。
不安全的反序列化是指用户可以控制要进行反序列化的数据。注入恶意对象、触发恶意操作。所以有时又称对象注入(object injection)。
攻击点在于:
- 修改反序列化对象的数据或数据类型,以更改程序逻辑。
- 如果存在魔术方法,则可以尝试利用魔术方法中的敏感操作。
序列化使用场景
在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便减轻内存压力或便于长期保存。
比如最常见的是Web服务器中的Session对象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
例子: 淘宝每年都会有定时抢购的活动,很多用户会提前登录等待,长时间不进行操作,一致保存在内存中,而到达指定时刻,几十万用户并发访问,就可能会有几十万个session,内存可能吃不消。这时就需要进行对象的活化、钝化,让其在闲置的时候离开内存,将信息保存至硬盘,等要用的时候,就重新加载进内存。
摘自网络
如何攻击
通常是白盒审计,因为不知道代码细节的话,几乎无法攻击成功。
黑盒时如果发现对方使用某些框架,则可以尝试对搜素这些框架已有反序列化利用链。工具 phpggc 、 ysoserial
白盒审计思路:
-
识别哪些可控输入最终会被反序列化。
某些是框架的调用链。
-
尝试进行利用。
读懂程序逻辑,通过构建代码构造恶意 反序列化数据
如果发现使用了已存在 调用链利用的框架、插件之类,则直接使用相应的利用工具。
防御
在进行反序列化之前,对数据进行过滤、检查。
不同语言特性 & 检测 & 利用
php
serialize()、 unserialize()
调用链payload 工具 phpggc
反序列化特性
结合语言特性,例如 php 种 phar:// ,其读取 phar 文件,phar 文件是一种打包格式,其文件种的 metadata 区域的数据以 序列化形式存储。当通过该协议进行读取文件时,这部分数据会自动执行反序列化。
php >= 7.2 反序列化的时候对访问类别不敏感,但如果不指定全部的属性,就会出错。
不同属性的类变量序列化后数据的格式不同。
- public变量
直接变量名反序列化出来 - protected变量
\x00 + * + \x00 + 变量名
可以用S:5:"\00*\00op"
来代替s:5:"?*?op"
- private变量
\x00 + 类名 + \x00 + 变量名
魔术方法
魔术方法(magic method )是 php 类中一组特殊的方法,在特定情况下会被隐性调用。
跟序列化相关:
__sleep __serialize #在序列化之前调用
__wakeup __unserialize #在反序列化之前调用
# 当同时定义 __sleep __serialize 时,后者将生效, __wakeup 与 __unserialize 也一样
在反序列化漏洞挖掘中常见的可能用到的魔术方法:
__destruct # 当反序列化创建的对象被销毁,则调用这个方法。
__toString # 当对象被当作字符串时,会被调用
__invoke # 当对象被当作函数时,会被调用
__call # 当调用对象中不可访问的函数时,会被调用
__set # 给不可访问属性赋值时, 会被调用。
__get # 读不可访问属性的值时, 会被调用。
__isset # 对不可访问属性调用 isset() 或 empty() 时,会被调用。
__unset # 对不可访问属性调用 unset() 时,会被调用。
漏洞
CVE-2016-7124 (php < 5.6.25 | < 7.0.10)可以绕过 反序列化过程中 __wakeup() 方法的执行。
其它
burp 的被动审计功能会自动标记出http 请求数据中的序列化数据,但如果数据被多重编码,则失效
暂未研究的
等到后面碰到了再研究,感兴趣请查阅 https://book.hacktricks.xyz/pentesting-web/deserialization
java
https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet
java 序列化的数据通常是以特殊的头部作为起始,HEX aced ,Base64 rO0
python
https://zhuanlan.zhihu.com/p/89132768