MySQL-HPP绕过
MySQL-HPP
SQL注入通过HTTP参数污染绕过
简介
http参数污染即HPP(HTTP Parameter Pollution),是一种注入型漏洞,攻击者通过 在HTTP请求中插入特定的参数来发起攻击。如果web应用中存在这样的漏洞可以被攻击者利用来进行客户端或服务器端的攻击。
在sql注入的应用则是可以达到绕过sqlwaf的目的。
原理
请求服务器的服务的时候,http允许get或者post多次传同一个参数,造成覆盖从而绕过waf的效果。也就是http协议允许同样的名称的参数出现多次
不同的服务器对这个情况的处理方式不一样
例如必应搜索

从图中可以看出,对于相同的参数,必应会选择处理后面的参数
但是对于google的话,两个都会处理
提供一下常见服务对于多次出现的参数的处理情况
| Web服务器 | 参数获取函数 | 获取到的参数 |
|---|---|---|
| PHP/Apache | $_GET("par") | 最后一个 |
| JSP/Tomcat | Request.getParameter("par") | 第一个 |
| Perl(CGI)/Apache | Param("par") | 第一个 |
| Python/Apache | getvalue("par") | All(list) |
| ASP/IIS | Request.QueryString("par") | ALL(comma-delimited string) |
用处
waf绕过
攻击者可以利用上述的不一致性,将恶意代码分隔到多个参数中,WAF只能看到碎片化的的内容,而不能识别风险,但后端最终会把碎片的内容拼接成完整的payload
?id=1&id='&id=union&id=select&id=1,2,3&id=--+
或者waf只会看第一个参数的内容是否符合要求,但是后端只会处理最后一个参数
则可以构造
?id=1&id=' union select 1,2,3 -- -
假如WAF匹配到union,我们可以尝试HPP绕过
例如上传的参数传递为:
q=u&q=n&q=i&q=o&q=n&q=select 1,2,user()
这里补充一下虽然不是sql注入的内容
通过HPP绕过XSS
?comment=<scr&comment=ipt>alert(1)</scr&comment=ipt>
在后端可能会拼接成完整的xss语句