目录
一、什么是反序列化
序列化是将对象转化为字符串流,利于对象的保存和传输
反序列化就是将序列化后的字符串流还原回对象
二、反序列化漏洞产生原理
原理:未对用户输入的序列化字符串进行检测,导致攻击者可以控制反序列化过程,从而导致代码执行,SQL 注入,目录遍历等不可控后果。在反序列化的过程中自动触发了某些魔术方法。当进行反序列化的时候就有可能会触发对象中的一些魔术方法。
三、两个函数
serialize():将对象进行序列化
unserialize():将序列化后的值进行反序列化
四、pikachu反序列化代码审计
1.表单接收序列化后的数据进行传递
2.对输入的值进行判断
当输入的值为序列后的值时,unserialize可以对其进行反序列化,if条件判断为假,进入else
(unserialize不会触发_contsruct魔术函数)
3.反序列后的对象调用属性test,且赋值给了$html
4.输出显示$html
五、利用
1.原因
没有对输入的数据进行过滤
这里调用的属性test是外部可控的,构造对象,序列化这个对象,得到一个对应的序列化后的字符串
代码:
<?php
class S{
var $test = "1231232";
}
$a = new S();
echo serialize($a);
?>
2.输出构造对象中的test属性
3.结合xss漏洞
payload:
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}