HTTP參數污染攻擊

服務器兩層架構

​ 服務器端有兩個部分:第一部分爲tomcat爲引擎的jsp型服務器,第二部分爲apache爲引擎的php服務器,真正提供web服務器的是php服務器。工作流程爲:client訪問服務器能直接訪問到tomcat服務器,然後tomcat服務器再向apache服務器請求數據。

在這裏插入圖片描述

HTTP參數處理

​ 在與服務器進行交互的過程中,客戶端往往會在GET/POST請求中帶上參數。通常在一個請求中,同名參數只會出現一次,但是在HTTP協議中是允許同名參數多次出現的。

​ 以上圖服務器爲例假設請求爲index.php?id=1&id=2,客戶端請求首先通過tomcat解析第一個參數,接下來tomcat去請求apache服務器,而apache解析最後一個參數。實際提供服務的是apache服務器,因此返回客戶端的是id=2。

下表爲數服務器對參數解析的:

web服務器 參數獲取函數 獲取到的參數
PHP/Apache $_GET(“par”) Last
JSP/Tmocat 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)

HTTP參數污染

如果一個網站只在tomcat服務器處做數據過濾和處理,我們可以利用解析參數的不同,對WAF檢測進行繞過。

攻擊payload:index.php?id=-1' union select 1,database(),3--+

union select…會被tomcat服務器識別爲惡意攻擊並攔截,而如果payload如下:

攻擊payload:index.php?id=1&id=-1' union select 1,database(),3--+

n select 1,database(),3–+```

tomcat服務器檢測第一個參數後發現無異常,提交給apache服務器。成功繞過WAF攔截

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章