一个针对 Grafana 的命令行漏洞扫描器。它识别已安装的 Grafana 版本,运行一组版本感知的 CVE 检查,审计常见配置弱点,将结果存储在本地数据库中,并可通过一个小型 Web 仪表板展示。
该工具向 Grafana 实例发送请求,并针对某些检查尝试已知的利用路径(路径遍历、SQL 注入、SSRF)。仅在您拥有或已获得书面许可的系统上运行。未经授权的扫描可能违反您所在司法管辖区的计算机滥用法律。
requestsflask(仅在使用 --serve 时需要)pip install -r requirements.txt
# 扫描单个目标
python scanner.py -u https://grafana.example.com
# 从文件扫描 URL 列表
python scanner.py -f targets.txt -o report
# 在混合 URL 列表中检测 Grafana 实例,然后扫描它们
python scanner.py --auto-search urls.txt -o discovery
# 将结果持久化到数据库并在仪表板中查看
python scanner.py -f targets.txt --db vulndb.json
python scanner.py --serve --db vulndb.json
| 选项 | 描述 |
|---|---|
-u, --url | 扫描单个目标 URL |
-f, --file | 扫描文件中每行列出的目标 |
--auto-search FILE | 在 URL 列表中检测 Grafana,然后扫描检测到的实例 |
-o, --output BASE | JSON/HTML/CSV 报告文件的基础名称 |
--timeout N | 每个请求的超时时间(秒),默认为 10 |
--threads N | 并发扫描线程数,默认为 5 |
--db FILE | 启用指定路径的 JSON 漏洞数据库 |
--serve [PORT] | 启动 Flask Web 仪表板,默认端口 8080 |
--host | 仪表板绑定的地址,默认为 127.0.0.1 |
--dashboard-token TOKEN | 要求在所有仪表板路由上使用此 Bearer 令牌 |
--auth-token | 用于扫描经过身份验证的端点的 Bearer 令牌 |
--auth-user / --auth-pass | 用于扫描的基本身份验证 |
--no-ssl-verify | 禁用 TLS 证书验证(打印警告) |
-v, --verbose | 打印每个检查的详细信息 |
--no-banner | 隐藏启动标题 |
--no-ssl-verify;这样做会打印警告,因为否则凭证可能会被拦截。--dashboard-token,否则仪表板无需身份验证。 当仪表板绑定到非本地接口时,必须设置令牌。所有更改状态的请求还需要 CSRF 令牌。使用 -o,扫描器会写入 BASE.json、BASE.html 和 BASE.csv。HTML 报告会中和可能来自恶意目标响应的 javascript:/data:/vbscript: URI。
使用 --db,发现结果存储在原子写入的 JSON 文件中:保留先前状态的 .bak 副本,而解析失败的文件会被移动到 .corrupt-<timestamp>,而不是被静默丢弃。
扫描器运行版本感知的 CVE 检查以及配置审计(安全标头、CORS、匿名访问、自助注册、插件分析、暴露的指标)。完整的 CVE 列表和检测方法说明位于 docs/vulnerabilities.md。
scanner.py — 引擎、检查项、数据库、Web 仪表板、CLIdocs/usage.md — 扫描模式和工作流程docs/vulnerabilities.md — CVE 参考docs/architecture.md — 内部结构和数据流tests/ — 测试套件make test # run the test suite
make lint # ruff + flake8
CI 流水线在 Python 3.9–3.12 上运行测试和 linter,并构建 Docker 镜像。
MIT。参见 LICENSE。