资讯动态

sqlmap 报错 your sqlmap version is outdated 与 SQL 注入检测参数速查

发布时间:2026/10/14 14:38:55 来源:尧图企业网站定制
sqlmap 报错 your sqlmap version is outdated 与 SQL 注入检测参数速查仅供已获得书面授权的安全测试使用。sqlmap 是开源的 SQL 注入检测与数据提取工具用 Python 编写支持 MySQL、PostgreSQL、Microsoft SQL Server、Oracle、SQLite 等主流数据库。它把「判断注入点 → 识别数据库类型 → 枚举库表 → 提取数据」整条链路自动化另外提供读取目标主机文件与执行系统命令的能力。跑 sqlmap 时最常撞到的两类报错一类是版本落后的提示行一类是在 Kali 上直接用 pip 升级时报externally-managed-environment。这两个都在下面给出处置方法。报错 your sqlmap version is outdated执行任何一次扫描sqlmap 启动时都会检查自身版本落后时在输出里插一行警告[17:12:30] [INFO] testing connection to the target URL [17:12:30] [WARNING] your sqlmap version is outdated这行只是提示不影响本次扫描继续跑完。判定本地版本落后多少看--version的输出版本号sqlmap --version # 1.9.11#stable#stable表示稳定分支。sqlmap 上游稳定版 1.10 于 2026 年 1 月 1 日发布官方 wiki 的 History 页有记录此后按 1.10.x 递增。Kali 仓库里的版本通常落后于上游实测 Kali GNU/Linux Rolling 2025.4 仍是 1.9.11。报错 error: externally-managed-environment在 Kali 2024 之后的版本上直接用 pip 升级会先被 PEP 668 拦下报错原文error: externally-managed-environment × This environment is externally managed ╰─ To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install.原因是 Kali 把系统 Python 标记为「外部管理」禁止 pip 直接写入系统 site-packages避免与 apt 管理的包互相覆盖。三种处置方式按场景选# 1) 能走 apt 的优先走发行版包 sudo apt install sqlmap # 2) 需要上游新版的装进虚拟环境 python3 -m venv /opt/sqlmap-venv /opt/sqlmap-venv/bin/pip install sqlmap # 3) 明确知道风险、只在本机测试时加参数放行 pip install sqlmap --upgrade --break-system-packages第 3 种会绕开系统的保护机制可能与 apt 装的同名包冲突只在确认不会破坏系统 Python 的环境里用。想彻底避开版本管理问题直接拉开发仓库用源码跑git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev python3 sqlmap-dev/sqlmap.py --version指定目标-u URL把注入点写在参数值位置-r req.txt从原始 HTTP 请求文件读取适合 POST、带 Cookie 或 Token 的接口--forms自动解析页面表单并逐个测试--crawlN从目标 URL 爬取 N 层链接后再测-p param只测指定参数跳过其余--data手动指定 POST 数据从抓包工具把完整请求导出成 req.txt 再交给-r能保留认证头与 Cookie比手工拼-u可靠。排除爬取范围用--crawl-exclude例如排掉登出链接sqlmap -r req.txt --crawl2 --crawl-excludelogout --batch请求控制--batch所有交互提问取默认值脚本化调用必须开--random-agent每次请求使用随机 User-Agent--proxyhttp://ip:port走代理便于在抓包工具里观察流量--delayN请求间隔秒数默认 0--timeoutN单次请求超时默认 30 秒--retriesN连接失败重试次数默认 3--safe-url与--safe-freq每发 N 次注入请求就访问一次正常地址降低被 WAF 判定为异常的几率两个参数必须成对使用--csrf-token与--csrf-url面向带 CSRF Token 的表单指定 Token 的参数名与获取页面--safe-freq单独使用会直接报错源码里的判定是它必须配合--safe-url或--safe-req。同理--csrf-url、--csrf-method、--csrf-data都依赖--csrf-token且--csrf-url与--threads不能同时使用。检测强度--level 1~5决定测试哪些位置默认 1--risk 1~3决定载荷有多激进默认 1--technique启用的注入技术集合默认 BEUSTQ--dbms指定后端数据库类型跳过指纹识别--tamper加载改写脚本绕过 WAF 特征--threads最大并发 HTTP 请求数默认 1--time-sec时间盲注的判定延迟秒数默认 5--technique的字母含义B 布尔盲注Boolean-based blind、E 报错注入Error-based、U 联合查询Union query-based、S 堆叠查询Stacked queries、T 时间盲注Time-based blind、Q 内联查询Inline queries。收窄字母集能显著减少请求量例如只留--techniqueBEU。其中 T 时间盲注每条请求都要等满--time-sec秒是最慢的一类。等级与风险等级影响的是两个不同维度。--level决定测试哪些位置等级越高参与注入测试的位置越多通常从 URL 与 POST 参数扩展到 Cookie、User-Agent、Referer 等请求头--risk决定载荷有多激进风险 3 会包含 UPDATE 一类会改写数据的语句。某个等级具体覆盖哪些位置以 sqlmap 官方 wiki 的 Usage 页为准。数据提取--dbs列出数据库名--tables列出表名--columns列出字段名--dump导出表内容-D db -T table -C col限定到具体库、表、字段--count只统计行数--exclude-sysdbs排除系统库--output-dirDIR自定义输出目录--flush-session清除该目标的会话缓存--file-readFILE读取后端数据库所在主机的文件--os-shell尝试获取一个交互式系统 shell默认输出目录是~/.local/share/sqlmap/output/host/实测该目录位于/root/.local/share/sqlmap每个目标一个子目录里面保存注入载荷日志与会话缓存。导出格式默认为 CSV这一点在源码lib/core/defaults.py的dumpFormat项里可以确认。--file-read与--os-shell已经越过数据库边界进入目标主机文件系统与命令执行层面只在授权书明确写了这一层的场景使用。常用命令判断注入点并列出库名sqlmap -u https://target.example.com/item.php?id1 --batch --dbs--batch让所有交互提问取默认值不加这个参数进程会停在提问处不再往下走。测试 POST 登录接口从抓包文件读取请求sqlmap -r login.txt -p username --level3 --risk2 --dbmsmysql --batch枚举并导出指定表sqlmap -u https://target.example.com/item.php?id1 \ -D appdb -T users -C username,password --dump --batch报错注入配合绕过脚本与代理sqlmap -u https://target.example.com/item.php?id1 \ --techniqueE --tamperspace2comment --random-agent \ --proxyhttp://127.0.0.1:8080 --threads4改了参数但结果没有变化先清会话缓存sqlmap -u https://target.example.com/item.php?id1 --flush-session --batchsqlmap 会按目标缓存测试结论不清缓存会直接复用上一次的判定结果。常见运行报错连接不上目标[CRITICAL] unable to connect to the target URL. sqlmap is going to retry the request(s) [CRITICAL] all tested parameters do not appear to be injectable.第一行是网络层连不上域名解析、端口不通、被 WAF 拦第二行才是参数层面没测出注入点。两者容易混看如果只有第二行、没有第一行说明请求发出去了、响应也回来了纯粹是参数不可注入。先确认连通性再怀疑注入点curl -s -o /dev/null -w %{http_code}\n https://target.example.com/item.php?id1忘了加 --batch 卡在提问处[INFO] fetched data logged to text files under /root/.local/share/sqlmap/output/target.example.com [WARNING] the web server responded with... do you want to keep testing the others? [y/n]进程停在[y/n]这类提问上不动是没加--batch。脚本化调用时必须开这个参数否则容器里没有交互终端任务会一直挂住直到超时。--safe-freq 单独使用直接退出[CRITICAL] --safe-freq must be used together with --safe-url or --safe-req源码里的判定是这两个参数必须成对出现补上--safe-url即可。注意事项--batch会替使用者做全部决定包括在部分分支上选取风险更高的载荷。首次接触的目标建议先用默认的 level 1、risk 1确认结果后再逐级提高。提高--level与--risk会成倍增加请求量带 WAF 或限速的目标容易触发封禁也可能对业务造成压力。--threads默认是 1。提到 4 以上需要确认目标能承受时间盲注场景提高并发会互相干扰判定反而变慢。不适用边界sqlmap 不覆盖 NoSQL 注入与业务逻辑越权堆叠查询S在后端驱动只允许单条语句时不可用接口已强制参数化预编译语句时无法产出注入点。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑