HTTP參數污染學習

HTTP參數污染 --- HPP

參考:php

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

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

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

緣由:因爲現行的HTTP標準沒有說起在遇到多個輸入值給相同的參數賦值時應該怎樣處理,並且不一樣的網站後端作出的處理方式是不一樣的,從而形成解析錯誤chrome

下面是不一樣服務端所處理的方式django

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 都有flask

用處:後端

  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框架:app

框架 取值
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 的時候
相關文章
相關標籤/搜索