一道综合RCE,考察的东西还是挺多的。
这里所需要的知识首先是php伪协议文件包含,然后是一种大小写替换正则表达式的绕过。
可以先看看这个,加强理论知识理解,事半功倍。
来吧捏麻麻的,开工!
来自:
[BJDCTF2020]ZJCTF,不过如此
前面跟bugku welcome to bugkuctf有点像。
打开界面就是源码审计:
传text和file,然后file不能有flag,按难度来看确实不可能这么简单。
下面有个文件包含,应该是要看next.php。
这里有php://input和php://outpu的解释:
https://blog.csdn.net/qq_27682041/article/details/73326435
强推这个php://filter的妙用解释:
https://blog.csdn.net/wy_97/article/details/77432002
这里第一个是用php://input传text,然后可以用post方法传这个"I have a dream"
第二个使用php://filter读文件的功能,也就是前面加个read的事,php://filter/read=convert.base64-encode/resource=next.php
因为涉及POST传参,总体payload可以放bp整(按道理来说hackbar应该也行,但是我的运行不了....):
接下来直接丢赛博厨子解码,得到源码:
这里就是大小写替换的正则表达式了,原理在上面连接,建议先看。
这里我直接用payload了:
/next.php?\S*=${getFlag()}&cmd=system("ls"); /next.php?\S*=${getFlag()}&cmd=system("ls /"); /next.php?\S*=${getFlag()}&cmd=system("cat /flag");
(注意一定要在next.php后面传哦)
主要就是原理问题。明白原理就很简单了。