sql注入之參數(shù)污染繞waf

hpp參數(shù)污染了解

HPP是HTTP Parameter Pollution的縮寫(xiě)。

這個(gè)漏洞由S. di Paola 與L. Caret Toni在2009年的OWASP上首次公布。這也是一種注入型的漏洞,攻擊者通過(guò)在HTTP請(qǐng)求中插入特定的參數(shù)來(lái)發(fā)起攻擊。如果Web應(yīng)用中存在這樣的漏洞,可以被攻擊者利用來(lái)進(jìn)行客戶端或者服務(wù)器端的攻擊。

通過(guò)hpp參數(shù)污染可以達(dá)到繞過(guò)sqlwaf,上傳waf來(lái)進(jìn)行攻擊。

hpp參數(shù)污染原理

在跟服務(wù)器交互的過(guò)程中,http允許 get 或者post多次傳同一參數(shù)值,造成覆蓋達(dá)到一些繞過(guò)waf的效果。

????GET /foo?par1=val1&par2=val2 HTTP/1.1

????User-Agent: Mozilla/5.0

????Host: Host

????Accept: */*

如上面的http請(qǐng)求,一般同一參數(shù)名字只能傳參一次,但是http協(xié)議中允許同樣名稱(chēng)的參數(shù)出現(xiàn)多次。

但是不同的服務(wù)器處理方式會(huì)不一樣,比如:

必應(yīng)

我們輸入了兩次q參數(shù),第一次為aa第二次為bb被覆蓋了,

谷歌

輸入兩個(gè)q參數(shù)可以看到都被加載到了瀏覽器搜索中。沒(méi)有覆蓋

如果同時(shí)提供2個(gè)搜索的關(guān)鍵字參數(shù)給Google,那么Google會(huì)對(duì)2個(gè)參數(shù)都進(jìn)行查詢(xún);但是必應(yīng)則不一樣,它只會(huì)處理后面一個(gè)參數(shù)。下面這個(gè)表簡(jiǎn)單列舉了一些常見(jiàn)的Web服務(wù)器對(duì)同樣名稱(chēng)的參數(shù)出現(xiàn)多次的處理方式:

????Web服務(wù)器? ? ? ? ? ? ? ? 參數(shù)獲取函數(shù)???????????????????????????????????獲取到的參數(shù)

????PHP/Apache???????????????$_GET(“par”)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Last

????JSP/Tomcat? ? ? ? ? ? ? ? ?Request.getParameter(“par”)? ? ? ? First

????Perl(CGI)/Apache???????Param(“par”)? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? First

????Python/Apache???????????getvalue(“par”)???????????????????????????????All (List)

????ASP/IIS???????????????????????Request.QueryString(“par”)???????????All (comma-delimited string)

參數(shù)污染實(shí)例

waf繞過(guò)

這種服務(wù)器的解析方式本身沒(méi)有什么缺陷,但是如果配合一些waf規(guī)則以及其他規(guī)則,則有可能造成一些危害,根據(jù)waf解析的先后規(guī)則則有可能繞過(guò)waf設(shè)置的原意。

????$sql = "select * from admin where id=1";

????$sql=$sql."".$_POST['bbs'];

????echo $sql;

????$pattern='/^.*union.*$/';

????if(preg_match($pattern, $sql))

????{echo "注入測(cè)試???";}

在特定情況下 bbs=u&bbs=n&bbs=i&bbs=o&bbs=n&bbs=select 1,user(),3

可以繞過(guò)一些waf,在CTF中也有出現(xiàn)。

將參數(shù)分離寫(xiě)入,waf在輸入之后就開(kāi)始攔截,在后端又拼接成完整的union,根據(jù)一些特定服務(wù)器就可以繞過(guò)waf進(jìn)行注入。

文件上傳

先看一個(gè)上傳數(shù)據(jù)包。

????POST /upload.php HTTP/1.1

????Host: 192.168.1.100

????User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0

????Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

????Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

????Accept-Encoding: gzip, deflate

????Referer: http://192.168.1.100/

????Cookie:yunsuo_session_verify=1a9c7117538a7a9bce39a4695ff3f0cc; safedog-flow-item=

????X-Forwarded-For: 1.1.1.1

????CLIENT_IP: 2.2.2.2

????Connection: keep-alive

????Upgrade-Insecure-Requests: 1

????Content-Type:multipart/form-data; boundary=---------------------------440470572354

????Content-Length: 1089


-----------------------------440470572354

????Content-Disposition: form-data; name="file"; filename="n.php"

????Content-Type: application/octet-stream

????<?php

????Phpinfo();

?????>

-----------------------------440470572354

????Content-Disposition: form-data; name="submit"

????Submit

-----------------------------440470572354--

Content-Type:multipart/form-data; 指代的是這個(gè)數(shù)據(jù)是來(lái)自表單提交的

某些WAF是通過(guò)Content-Type識(shí)別是否是文件上傳數(shù)據(jù)包。假設(shè)我們將Content-Type更改,數(shù)據(jù)包也是正常提交過(guò)去的。這個(gè)就完成了一次bypass。

還有的時(shí)候就是Content-Disposition: form-data;,也有某些WAF是根據(jù)Content-Disposition匹配filename的,用于驗(yàn)證黑名單。我們經(jīng)過(guò)混淆大小寫(xiě)也是可以bypass的。(http://www.secpulse.com/archives/56523.html)

攔截:




在HPP中最典型的的例子就是“雙文件上傳”。

就是在協(xié)議中,提交兩個(gè)相同的值,達(dá)到欺騙WAF一次匹配的目的。在這里提點(diǎn)一下http協(xié)議中參數(shù)名與參數(shù)值的結(jié)構(gòu)。

可以看到filename參數(shù)寫(xiě)了兩次,可能繞過(guò)一些上傳限制。


xss

當(dāng)然這種特性有時(shí)候也可以測(cè)試xss漏洞,原理一樣。暫不測(cè)試。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容