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
相关推荐
HackTwoHub8 小时前
等级保护现场测评系统重磅更新,支持 AI 接入,可录入全品类资产清单,自动化巡检核查,批量导出测评归档文件
运维·人工智能·安全·web安全·网络安全·自动化·系统安全
川石课堂软件测试8 小时前
安全测试|服务器安全加固方法
服务器·功能测试·测试工具·jmeter·mysql·web安全·单元测试
Sagittarius_A*9 小时前
Command Injection 命令注入漏洞:系统命令拼接缺陷与执行利用技术
网络·安全·web安全·dvwa·命令注入漏洞
Android洋芋10 小时前
漏洞挖掘与赏金攻略
网络·安全·web安全
数据知道11 小时前
SDN 与软件定义网络的安全边界在哪里?
网络·安全·网络安全
数据知道12 小时前
VLAN 与安全隔离:从配置错误到 VLAN Hopping 攻击
网络·安全·网络安全·智能路由器
Sagittarius_A*12 小时前
Open HTTP Redirect 开放重定向漏洞:URL 跳转校验缺陷与绕过技术
网络·安全·web安全·http·dvwa·burp suite
Whoami!21 小时前
⸢ 拾陆-Ⅰ⸥⤳ 安全数智化建设:安全运营中心(SOC)
网络安全·信息安全·soc·安全运营中心
鹿鸣天涯1 天前
kali 2026.2 2026年第二个版本发布-新增 9 款工具并优化虚拟机启动性能
安全·web安全·kali