01常見HTTP頭注入引數
在介紹XFF注入之前,我們先來了解下常見的存在HTTP頭注入的引數,如下圖:
User-Agent:使得伺服器能夠識別客戶使用的作業系統,瀏覽器版本等.(很多資料量大的網站中會記錄客戶使用的作業系統或瀏覽器版本等存入資料庫中)
Cookie:網站為了辨別使用者身份進行session跟蹤,並儲存在使用者本地終端上的資料(通常經過加密)
X-Forwarded-For:簡稱XFF頭,代表了HTTP的請求端真實的IP。它被認為是客戶端通過HTTP代理或者負載均衡器連線到web服務端獲取源ip地址的一個標準(通常一些網站的防注入功能會記錄請求端真實IP地址並寫入資料庫或某檔案[通過修改XXF頭可以實現偽造IP])。
Host:客戶端指定自己想訪問的WEB伺服器的域名/IP 地址和埠號。
02XFF注入的概念
XFF,是X-Forwarded-for的縮寫,屬於SQL注入的一種,該注入原理是通過修改X-Forwarded-for頭對帶入系統的dns進行sql注入,達到欺騙伺服器執行惡意的SQL命令的效果,從而可以得到網站的資料庫內容。
03XFF的危害
②網頁篡改:通過操作資料庫對特定網頁進行篡改。
④資料庫被惡意操作:資料庫伺服器被攻擊,資料庫的系統管理員帳戶被竄改。
⑤伺服器被遠端控制,被安裝後門。經由資料庫伺服器提供的作業系統支援,讓黑客得以修改或控制作業系統。
04XFF漏洞復現
1. 確定漏洞的存在
使用burpsuite工具進行抓包,並用Repeater模組對請求進行修改,分別修改X-Forwarded-For的值如下所示:
X-Forwarded-for: 127.0.0.1
X-Forwarded-for: 127.0.0.1’’
X-Forwarded-for: 127.0.0.1' and 1=1#
X-Forwarded-for: 127.0.0.1' and 1=2#
若訪問的結果如上圖所示,則說明存在SQL注入漏洞。
2. 判斷查詢欄位數量
判斷出欄位數量是4。
3. 查詢SQL語句插入位置
4. 查詢當前資料庫庫名
查詢出的當前資料庫庫名為aaa。
05
XFF注入PHP程式碼
06
防禦方式
①過濾http頭中的X-Forwarded-for header中的內容,不允許其插入敏感字元,過濾字元參考sql注入修復方案。
②過濾以下敏感字元
“net user”
“xp_cmdshell”
“add”
“exec master.dbo.xp_cmdshell”
“net localgroup administrators”
“select”
“count”
“Asc”
“char”
“mid”
“ ‘ ”
“ :”
“ " ”
“insert”
“delete from”
“drop table”
“update”
“truncate”
“from”
“ % ”