一、前言
在漏洞赏金(Bug Bounty)和SRC平台中,SQL注入至今仍是** payout 最高、出现频率最稳定**的漏洞类型之一。但面对成百上千个接口、数十种参数位置和千变万化的闭合方式,纯手工测试不仅效率低下,更容易漏掉那些藏在JSON body、Cookie或Order By里的"深洞"。
今天给各位师傅介绍一款零第三方依赖、纯Python标准库 的SQL注入自动化检测引擎------sqli-scanner 。它不仅能帮你快速确认注入点,还能直接产出带CVSS评分、完整HTTP PoC和sqlmap命令的Markdown报告,从发现到提数,一条命令闭环 。
二、工具定位:不只是扫描器,更是"确认制"漏洞账本
sqli-scanner 由 HackSKILL 开发,定位为红队/CTF级SQL注入探测技能 。与市面上那些"疑似注入"满天飞的工具不同,它采用确认制判定逻辑:只报"确定存在"的漏洞,不报"疑似"。
历史版本:
Sqli-Scanner SQL注入SKILL自动化挖掘SQL注入,零依赖自动化SQL注入挖掘,赏金猎人
这意味着什么?在赏金挖掘场景中,你提交的每一份报告都有扎实的证据链 ,不会被审核以"误报"打回。
实战效果

三、核心功能特点:8类自动判定,覆盖全场景
1. 八类注入自动判定(确认到即停)
sqli-scanner 内置了8类探测策略,覆盖你能遇到的所有SQL注入场景:
| 类型 | 标记 | 适用场景 |
|---|---|---|
| 报错型 | errsql |
页面回显数据库报错,直接命中91条正则 |
| 经典布尔 | orbool |
AND/OR真假判断,含登录绕过/盲注 |
| 字符型 | stringsql |
单引号闭合,布尔/联合利用 |
| 数字型 | numsql |
数值上下文,算术/布尔利用 |
| Order By | ordersql |
ORDER BY子句注入 |
| EXP布尔 | boolsql |
基于表达式溢出/除零的布尔判断 |
| 时间盲注 | timesql |
无回显场景,SLEEP延时确认 |
| 自定义 | diypoc |
自定义Payload+正则匹配 |
关键设计 :默认模式下确认到一种注入即停,避免冗余请求;如需全面评估,加 --thorough 即可测完全部类型。
2. 降误报三板斧
赏金挖掘最怕的就是"狼来了"------误报多了,SRC审核对你失去信任。sqli-scanner 从三个层面解决:
-
HTML过滤+动态内容剔除:先剥离公共前后缀,再计算响应相似度(Levenshtein/Jaccard)
-
基线复测:自动识别动态页面,不稳定场景优先用报错/时间型交叉确认
-
二次复现确认:真假条件、延时探针均执行复测,确保结果稳定
3. 全参数位置覆盖
无论是GET查询参数、POST表单、JSON body、XML、Cookie还是HTTP头,sqli-scanner 都能精准解析并探测:
bash
# GET 参数
python sqli_scan.py -u "http://target/item.php?id=1"
# POST 表单
python sqli_scan.py -u "http://target/login" --data "user=admin&pass=x"
# JSON 接口
python sqli_scan.py -u "http://target/api" --data '{"id":1}' --header "Content-Type: application/json"
# Cookie 注入
python sqli_scan.py -u "http://target/x?id=1" --cookie "uid=5" --test-cookie
4. WAF 绕过内置10种 Tamper
遇到Cloudflare、阿里云WAF、安全狗?直接上变形链:
python sqli_scan.py -u "http://target/x?id=1" --tamper randomcase,space2comment,versionedcomment
内置包括:随机大小写、空格转注释、版本号注释、URL双重编码等10种tamper,可组合使用。
5. 产出物直接可用:JSON账本 + Markdown报告
这是赏金猎人最爽的功能------扫描完直接得到一份专业报告:
-
JSON账本:增量累积,多次扫描合并去重,只记录确认漏洞
-
Markdown报告:每条漏洞含风险等级、CVSS 3.1评分、CWE分类、完整HTTP PoC、sqlmap利用命令、判定理由
你几乎可以原样复制进SRC漏洞报告,省去大量整理时间。
四、实战演示:16次扫描,10个确认漏洞
以下是一次真实靶场扫描的结果(基于工具实际输出),展示 sqli-scanner 的实战能力:
漏洞总览
| # | 目标 | 参数 | 类型 | CVSS |
|---|---|---|---|---|
| 1 | GET /user/id?id=1 |
id | 数字型 | 9.8 |
| 2 | GET /user/id-error?id=1 |
id | 数字型 | 9.8 |
| 3 | GET /user/id-time-blind?id=1 |
id | 数字型 | 9.8 |
| 4 | GET /user/name?name=admin |
name | 字符型 | 9.8 |
| 5 | GET /user/name/like?name=a |
name | 时间盲注 | 9.8 |
| 6 | GET /user/name/like/2?name=a |
name | 时间盲注 | 9.8 |
| 7 | GET /user/limit/int?limit=1 |
limit | 时间盲注 | 9.8 |
| 8 | GET /user/limit/4/orderby?orderby=username |
orderby | 时间盲注 | 9.8 |
| 9 | POST /user/post/id |
id | 数字型 | 9.8 |
| 10 | POST /user/post/name |
name | 字符型 | 9.8 |
10个漏洞,覆盖GET/POST、数字型/字符型/时间盲注、URL参数/Body参数/Order By参数。
判定逻辑示例
数字型注入(/user/id):
-
Payload
1-0-0-0→ 相似度100%(算术求值等于原值) -
Payload
1-abc→ 相似度11.6%(非数字导致报错/空结果)
判定:参数进入数值表达式而非纯数字字面量,确认数字型注入。
字符型注入(/user/name):
-
Payload
admin'→ 相似度15.9%(破坏SQL字符串) -
Payload
admin''→ 相似度15.9%(双引号闭合) -
Payload
admin'+'→ 相似度100%(字符串拼接还原)
判定:单引号可闭合SQL字符串,确认字符型注入。
时间盲注(/user/name/like):
-
Payload
a' AND SLEEP(3)-- -→ 延时3004ms -
对照
SLEEP(0)→ 立即返回1ms
判定:延时可控,无回显也能逐字符提数,确认时间盲注。
每个漏洞都附带可直接重放的完整HTTP请求 和sqlmap命令,比如:
sqlmap -u "http://192.168.0.207:8787/user/id?id=1" -p id --batch
sqlmap -u "http://192.168.0.207:8787/user/post/name" --data "name=admin" -p name --batch
五、赏金挖掘实战思路:如何用它"印钞"
思路1:批量参数收集 → 精准打击
不要对着一个URL死磕。先用爬虫/JS分析收集目标所有带参数的接口(表单、API、搜索框、筛选器),然后批量喂给 sqli-scanner:
# 多个端点累积到同一账本,最后出一份综合报告
python sqli_scan.py -u "http://target/api1?id=1" --json ledger.json -o report.md
python sqli_scan.py -u "http://target/api2" --data "user=x" --json ledger.json -o report.md
python sqli_scan.py -r captured_request3.txt --json ledger.json -o report.md
思路2:Cookie和Header别放过
很多SRC审核员自己测的时候只测URL参数,Cookie注入和X-Forwarded-For注入往往是盲区:
python sqli_scan.py -u "http://target/dashboard" --cookie "session=abc; uid=1" --test-cookie
思路3:Order By和Limit是"深水区"
报告中的 /user/limit/4/orderby?orderby=username 就是典型的Order By注入。这类注入手工构造麻烦,但 sqli-scanner 会自动探测:
-
,0/,XXXXXX报错 -
,1/,2还原
思路4:时间盲注 = 无回显的救命稻草
面对无报错、无布尔差异的"哑巴"注入点,时间盲注是最后的希望。sqli-scanner 内置了全库时间探针 (MySQL SLEEP、MSSQL WAITFOR、PostgreSQL pg_sleep、Oracle DBMS_PIPE、SQLite randomblob),且刻意不用OR SLEEP(避免按行延时卡死),正常数秒即可出结论。
思路5:WAF场景先tamper再手工
遇到403/拦截页,不要放弃。先跑tamper:
python sqli_scan.py -u "http://target/x?id=1" --tamper randomcase,space2comment
如果自动化被拦,再用 --probe 做闭合推断和假设-实验循环,结合知识库里的WAF绕过方法论手工突破。
六、安装与快速上手
环境:Python 3.7+,零依赖,无需pip安装。
# 克隆后直接使用
cd sqli-scanner
python scripts/sqli_scan.py -h
# 快速扫描示例
python scripts/sqli_scan.py -u "http://target/item.php?id=1" --json ledger.json -o report.md
作为Claude Code Skill使用 :把目录放到 ~/.claude/skills/ 下,AI会自动调用该技能进行注入分析。