皮卡丘靶场解题记录-PHP反序列化

1、漏洞原理总结:

要搞懂php反序列化,首先要了解两个函数,serialize()和unserialize()

函数 作用 白话
serialize() 对象 → 字符串 把对象打包成快递箱(方便传输/存储)
unserialize() 字符串 → 对象 收到快递拆箱还原成对象

同样这里也是信任了用户。这里的序列化的内容是由用户放入的,但反序列之后并没有检查内容,就直接使用了。

2、我的测试过程:

image-20260901163715189

image-20260901163743815

3、核心漏洞代码分析:

1
2
3
4
5
6
7
8
9
if(isset($_POST['o'])){
$s = $_POST['o'];
if(!@$unser = unserialize($s)){
$html.="<p>大兄弟,来点劲爆点儿的!</p>";
}else{
$html.="<p>{$unser->test}</p>";
}

}

具体漏洞前文已经说了,此处略。

payload:

1
O:1:"S":1:{s:4:"test";s:29:"<script>alert('xss')</script>";}

把其中一个标签换成xss语句,字符串长度也跟着改。

然后就能直接弹窗了。

4、实战延伸:

image-20260901164113681