文章是通过阅读《【独家连载】我的WafBypass之道 (SQL注入篇)》写的阅读笔记。
Waf的类型
1.云waf
云waf通常是CDN包含的waf,DNS在解析的时候要解析到cdn上面制定的IP上去。在请求URL的时候,数据包就会先经过云waf进行检测,如果通过的话再将数据包流给主机。
2.主机防护软件
如果主机上面预先安装了这种防护软件,可用于扫描和保护主机,以及监听WEB端口的流量是否有恶意的,所以这种从功能上讲较为全面。
3.硬件IPS/IDS防护、硬件waf
当向主机请求的时候,会先将流量经过此设备进行流量的清洗和拦截。如果数据包合理的话再将数据包流给主机。
根据WEB容器的特性绕过WAF
a. %绕过
asp+iis的环境里当我们请求url当中存在的单一的百分号的时候,iis+asp的环境会将其忽略,如果没有特殊要求的waf是不会将其忽略的。所有所以就导致http://www.baidu.com/news.asp?id=1 uni%on s%elect 1,2,3,4在waf的时候会被认为是正常的url(waf匹配到的是uni%on,)而asp+iis的环境会将%忽略就变成了:http://www.baidu.com/news.asp?id=1 union select 1,2,3,4
b.%u绕过
iis支持unicode的解析,当我们请求的url存在unicode编码的时候就会自动的将unicode编码转换。部分的waf不一定支持unicode编码。所以就致使该方法绕过部分的waf了。
案例(e的unicode编码是\u0065)
http://www.baidu.com/news.asp?id=1 union s\u0065lect 1,2,3,4
c.畸形协议&请求绕过
asp/asp.net
form表单其encype属性提交到http协议的concent-type有两种类型,一种是application/x-www-form-urlencoded一种是multipart/form-data.倘若form表单不填写enctype属性的话,那么默认的就是application/x-www-form-urlencoded.
php+apache
apache得协议可以自定义,PHP解析器在解析multipart请求得时候,它以逗号作为边界,只取出boundary(边界线)而普通得解释器接收整个字符串,因此如果没有
d.通用绕过
1.HPP(HTTP Parammter Polllution)参数污染
a.假设提交的参数为:id=1&id=2&id=3
b.ASP.NET+IIS会解析为:id=1,2,3
c.ASP+IIS会解析为:id=1,2,3,
d.PHP+APACHE会解析为:id=3
那么我们的bypass payload可以那么写:
2.双重编码
a.base64
b.json
3.科学记数法
union