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
相关推荐
云水一下4 小时前
零基础玩转bWAPP靶场(六十七):Cross-Domain Policy File (Flash)
web安全·flash·bwapp
m0_695768807 小时前
CVE-2017-9442 靶场详解
网络安全
聚铭网络13 小时前
聚铭网络入选2026年度连云港市网络和数据安全应急支撑服务机构并获授牌
网络安全
@我漫长的孤独流浪14 小时前
计算机网络与信息安全
计算机网络·网络安全
白猫不黑14 小时前
CTF是什么?从零理解一场攻防竞赛
网络·web安全·计算机·网络安全·信息安全·ctf·红蓝对抗
学习3人组14 小时前
XSS跨站脚本攻击攻击案例拆解-网络安全系列
网络安全
XLYcmy15 小时前
Prompt 设计相关问题
网络安全·llm·prompt·agent·cot·漏洞检测·harness
一只鹿鹿鹿16 小时前
信息系统网络安全检查表(Word)
大数据·安全·web安全·系统安全·制造
sbjdhjd16 小时前
从“删除后重生”到认证绕过:PHP 常驻内存实验与 Cacti remote_agent 命令执行链路复盘
安全·web安全·网络安全·数据挖掘·php·网络攻击模型·安全架构
ccino .17 小时前
Docker 容器删除卡在 Removal In Progress / Dead 解决
服务器·安全·web安全·网络安全