php字符串逃逸
今天也是写了好多道web题,感觉bugku上的两题ssti有点坑,一直说我的pin是错的
咳咳,回到正题,写一下newphp题目,这题有关字符串反序列化逃逸
bugku-newphp - c0d1 - 博客园 (cnblogs.com)
源码
1 |
|
分析
很容易通过代码审计知道,我们要通过触发evil类来达到访问hint.php的目的
但是evil类是没有传参数据的,所以需要触发User类来传递数据
绕开wakeup函数
1 |
|
上面这段就是我们要注入的payload
用User类触发就是
得到
现在的问题就是,反序列化时字符长度固定的情况下,我们要怎么注入想要的属性
这时候我们要替换的就是”;s:8:”password”;s:41:”,总共23位
之前的read和write的方法会对字符串进行替换,而chr(0)*chr(0)s是三个字符,\0\0\0\是六个字符,
每增加一组的\0\0\0就会吞掉三个字符,即多出三个位置给后面。
我们可以在password的值上再加一个任意字符,即可凑齐24个,那么\0\0\0就是八组
那这样我们就可以尝试注入了
访问index.cgi
存在ssrf
漏洞成因
序列化的字符串在经过过滤函数不正确的处理而导致对象注入,目前看到都是因为过滤函数放在了serialize函数之后,要是放在序列化之前应该就不会产生这个问题
https://blog.csdn.net/dengyu810/article/details/103213750
再来刚才那题,我为了验证下正确性,将username里的字符变成2倍,然后通过前面要替换为23位
就用24x2得到的48位减去23位得到25位,为了避免覆盖payload我们就增添25位
记住,这里是6->3,\0的2位替换成1位的*,所以计算的时候要注意,都是以被替换成后来计算的
测试之后照样打得通
- 本文作者:4v1d
- 本文链接:http://daweitech.github.io/2021/10/28/2021/web/%E5%AD%97%E7%AC%A6%E4%B8%B2%E9%80%83%E9%80%B8/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!