HTTP參數污染學習


HTTP參數污染 --- HPP

參考:

  1. 參數污染漏洞(HPP)挖掘技巧及實戰案例全匯總
  2. 視頻內容

HPP,簡而言之,就是給參數賦上多個值。

比如: https://www.baidu.com/s?wd=asdqwe&wd=http參數污染
百度究竟會給出有關 asdqwe 的相關信息,還是 http參數污染 的相關信息,還是兩者兼並?事實證明,百度只取第一個關鍵詞 asdqwe,不同的服務器架構會取不同的值

原因:由於現行的HTTP標准沒有提及在遇到多個輸入值給相同的參數賦值時應該怎樣處理,而且不同的網站后端做出的處理方式是不同的,從而造成解析錯誤

下面是不同服務端所處理的方式

Web服務器 參數獲取函數 獲取到的參數
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)

推薦一個自動識別前后端框架的插件 wappalyzer,chrome、firefox、edge 都有

用處:

  1. 邏輯漏洞:
  • 任意URL跳轉
    例如:
    www.famous.website?ret_url=subdomain.famous.website ,由於后端做了限制,當我們把 ret_url 改成別的不同源的域名(如baidu.com)時會報錯
    但是我們可以利用HPP,將請求地址變成 www.famous.website?ret_url=subdomain.famous.website&ret_url=baidu.com 時,由於服務器邏輯錯誤
    使用第一個 ret_url 做校驗參數,而第二個 ret_url 參數做跳轉目的地址。於是這樣便可成功繞過限制,形成任意 URL 跳轉

  • 任意密碼重置(短信爆破)
    一般重置密碼的時候,會發送短信到用戶手機
    比如GET/POST傳遞的參數為:phone=13888888888
    我們一般會去想,能不能發送驗證碼到自己的手機,於是可以構造成: phone=13888888888,12345678901 或者 phone=13888888888;12345678901 或者 phone={13888888888,12345678901}
    等等一些情況,有時候能通過,但是有些時候會出現 號碼不合法 的情況,此時便可以考慮利用 HPP —— phone=13888888888&phone=12345678901,如果恰好服務器用第一個號碼驗證是否存在該用戶,而使用第二個號碼發送短信時,我們便可以接管該用戶

  1. 繞過 WAF
    原理:當 WAF 檢測端與服務器端webapp使用的參數不一致時,便可繞過 WAF 限制

WAF框架:

框架 取值
flask First
django Last
  • SQL注入繞過

方式1:
例如:WAF 端采用 flask 框架而服務器 webapp 端采用 PHP/Apache 框架時,由於 WAF 取第一個參數,app 取第二個參數,利用 HPP 便可繞過 WAF 檢測
www.xxx.com/search.php?id=1&id=7 union select 1,2,database()

方式2:
例如:WAF 端只檢測單個參數,而服務器 webapp 端會將所有參數合並起來檢測
www.xxx.com/search.php?id=1&id=%20union%20&id=select%201,2&id=,database() 利用拼接的方式繞過 WAF

  • XSS
    跟 SQL 注入相似,檢測過濾與實際采納的參數不一致

可能有 HPP 的地方

  1. 很多可能存在越權漏洞的地方,當做了權限驗證時,可以試一試提交多個參數
  2. 繞 WAF 的時候


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM