这道题涉及到字符串逃逸(缩小) 反序列化 SSRF
打开后进行代码审计 代码很长 Copy到本地进行调试 通过调试可以看到我们输入的值会变成什么样子
示例如下 加些换行 可以更清晰
思路分析解答
根据反序列化后魔术方法的执行拿到提示的hint.php
evil类就是我们控制的点
通过evil类构造输出我们序列化的值 拿到hint.php
构造序列化的值
这里把flag改为hint 图片里我是做实验 不用管
将序列化好的值打入查看效果 这里进行本地调试查看效果 不是直接在题目靶场进行
这里可以看到我们打入的值 被字符串所包裹 无法逃逸实现类中类
分析解答如下 这里就用图片展示了
这里说一下为什么要加1位成为24位
根据我们的规则 \0\0\0变成*** 6变3 缩小一倍
而我们可以控制的点也只有username和password
根据1倍的缩小条件 这里我们只有23位 23乘2等于46 无法和6整除 最近的是48 48可以和6进行整除 48/2=24 所以这里我们加1位 可以正好补足 当然48及以上构成6的倍数的数都可以 只不过那样子 我们要补的字符就很多了 例如54 这样我们就要补4位(原先23位) 构成54/2=27位
打入即可 注意这里绕过wakeup
解码访问其中的内容
解码得到index.cgi 访问结果如下
我们发现有个get传参 bob 看看这里我们能不能可控 而且UA头里出现了curl函数 我们知道curl函数是可以扒取前端页面的
大家可以在本地的dos窗口执行curl www.baidu.com 会发现百度的前端就已经被扒取下来了
所以这里我们认为存在SSRF 看看name这个参数是不是可控 我们进行传参尝试
发现传入之后改变了
那么这里就直接file协议读文件即可 SSRF嘛 file协议
这里file前需要加空格
猜测服务端的curl函数进行执行时 是直接拼接我们的输入的值
例如 curlfile 这样执行不了 curl file 这样才可以执行ssrf