[转]杂谈如何绕过WAF(Web应用防火墙)



技术分享:杂谈如何绕过WAF(Web应用防火墙)


0×01开场白

这个议题呢,主要是教大家一个思路,而不是把现成准备好的代码放给大家。

可能在大家眼中WAF(Web应用防火墙)就是“不要脸”的代名词。如果没有他,我们的“世界”可能会更加美好。但是事与愿违。没有它,你让各大网站怎么活。但是呢,我是站在你们的这一边的,所以,今天我们就来谈谈如何绕过WAF吧。之所以叫做“杂谈”,是因为我在本次演讲里,会涉及到webkit、nginx&apache等。下面正式开始:)

0×02直视WAF:

作为第一节,我先为大家简单的说下一些绕过WAF的方法。

一:大小写转换法:

看字面就知道是什么意思了,就是把大写的小写,小写的大写。比如:

SQL:sEleCt vERsIoN();
‍‍XSS:

出现原因:在waf里,使用的正则不完善或者是没有用大小写转换函数

二:干扰字符污染法:

空字符、空格、TAB换行、注释、特殊的函数等等都可以。比如下面的:

SQL:sEleCt+1-1+vERsIoN   /*!*/       ();`yohehe‍‍
‍‍SQL2:select/*!*/`version`();

XSS:下面一节会仔细的介绍

出现原因:利用网站使用的语言函数特性来绕过waf的规则或者使用会无视的字符

三:字符编码法:

就是对一些字符进行编码,常见的SQL编码有unicode、HEX、URL、ascll、base64等,XSS编码有:HTML、URL、ASCII、JS编码、base64等等

SQL:load_file(0x633A2F77696E646F77732F6D792E696E69)
‍‍‍‍XSS:%20src%3D"http%3A%2F%2F0300.0250.0000.0001"><%2Fscript>

出现原因:利用浏览器上的进制转换或者语言编码规则来绕过waf

四:拼凑法:

如果过滤了某些字符串,我们可以在他们两边加上“原有字符串”的一部分。

SQL:selselectect verversionsion();
‍‍‍‍XSS:rip>

出现原因:利用waf的不完整性,只验证一次字符串或者过滤的字符串并不完整。

本节是告诉大家,waf总会有自己缺陷的,任何事物都不可能完美。

0×03站在webkit角度来说绕过WAF:

可能这时会有人问到,说绕过WAF,怎么跑到webkit上去了。嗯,你没有看错,我也没有疯。之说以站在webkit角度来讲绕过WAF,是因为各个代码的功能是由浏览器来解析的。那浏览器中谁又负责解析呢?那就是webkit, 既然要说到webkit,那就不得不提webkit下的解析器——词法分析器,因为我们在绕过的时候,就是利用解析器中的词法分析器来完成。

就比如一个简单的绕过WAF的XSS代码: