joemunene-by/ghostmap
GitHub: joemunene-by/ghostmap
ghostmap 是一款授权 Web 应用漏洞扫描器,支持认证爬取并检测反射型 XSS 和 SQL 注入,输出 SARIF/JSON 报告以集成 CI 流水线。
Stars: 0 | Forks: 0
# ghostmap
ghostmap 是一款授权的 Web 应用漏洞扫描器。它会爬取
目标 Web 应用(支持认证),对发现的注入点进行反射型
跨站脚本攻击(XSS)和 SQL 注入(SQLi)探测,并将
按严重程度排序的扫描结果报告输出为控制台表格、JSON 或 SARIF 2.1.0。
## 仅限授权使用(请先阅读)
ghostmap 会发送用于触发注入漏洞的特制请求。请仅在
您拥有或获得明确书面测试许可的系统上运行它。
在大多数司法管辖区,未经授权扫描计算机系统是非法的,
并可能面临民事和刑事处罚。您需对如何
使用此工具承担全部责任。作者不对滥用行为承担责任。默认情况下,ghostmap
会将爬取范围限制在目标域名内,遵守 robots.txt,并使用
保守的、非破坏性的 payload 集合。
## 功能
- 异步、支持认证的爬虫,可发现链接和表单,默认
强制执行同域名范围限制,遵守 robots.txt,对 URL 进行去重,
并通过深度和页面数量限制工作量,同时实行合理的速率限制。
- 基于小型 `Injector` 基类构建的两个检测器:
- 反射型 XSS(CWE-79):注入带有唯一标记的 payload,并确认
该标记在未转义的可执行上下文中被反射,从而避免
HTML 转义导致的误报。
- SQL 注入(CWE-89):通过数据库错误特征进行基于错误的检测,
以及通过真假响应差异进行基于布尔的盲注检测。可选的基于时间的探测位于一个 flag 之后。
- 输出为丰富的控制台表格(按严重程度排序)、JSON 或有效的 SARIF 2.1.0。
- 通过 `--fail-on` 进行严重程度分级控制,用于 CI 流水线(在达到或超过
选定的严重程度时以非零状态退出)。
## 安装说明
要求 Python 3.11 或更高版本。
```
git clone https://github.com/joemunene-by/ghostmap.git
cd ghostmap
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```
这将安装 `ghostmap` 命令。
## 快速开始
该仓库附带了一个经过刻意设计、包含漏洞的应用程序,供测试套件使用。您
可以搭建一个等效的本地目标并对其进行扫描,而无需触及任何
外部系统。一个包含漏洞的简易服务器(XSS、基于错误的 SQLi、
基于布尔的 SQLi)可以在 localhost 上运行,然后:
```
ghostmap scan http://127.0.0.1:8731/ --ignore-robots
```
针对此类本地目标的控制台输出示例:
```
ghostmap scan of http://127.0.0.1:8731/: 5 pages crawled, 4 injection points tested.
Findings
Severity Type Param Method CWE URL
Critical SQL Injection (error-based) id GET CWE-89 .../product
High Reflected Cross-Site Scripting q GET CWE-79 .../search
High SQL Injection (boolean-based) id GET CWE-89 .../item
```
JSON 和 SARIF:
```
ghostmap scan http://127.0.0.1:8731/ --ignore-robots --format json --output report.json
ghostmap scan http://127.0.0.1:8731/ --ignore-robots --format sarif --output report.sarif
```
仅发现(不进行探测):
```
ghostmap crawl http://127.0.0.1:8731/ --ignore-robots
```
## CLI
```
ghostmap scan [options]
ghostmap crawl [options]
ghostmap version
```
常用选项:
- `--format {console,json,sarif}`:输出格式(默认为 console)。
- `--depth N`:最大爬取深度(默认为 2)。
- `--max-pages N`:最大爬取页面数(默认为 100)。
- `--scope` / `--no-scope`:将爬取限制在同一域内(默认开启)。
- `--checks {xss,sqli,all}`:运行哪些检测器(默认为 all)。
- `--cookie name=value`、`--header Name:Value`、`--auth user:password`:
认证扫描(cookie 和 header 可重复指定)。
- `--delay SECONDS`、`--concurrency N`:速率限制和并发数。
- `--fail-on {info,low,medium,high,critical}`:如果存在达到或
超过此严重程度的发现,则以非零状态退出。
- `--ignore-robots`:忽略 robots.txt(仅在获得授权时使用)。
- `--time-based`:启用基于时间的 SQLi 探测(速度较慢)。
- `--output PATH`:将报告写入文件。
- `--insecure`:禁用 TLS 验证。
- `--verbose`:详细日志记录。
## 爬虫和检测
爬虫从起始 URL 执行广度优先遍历。它会解析锚点
和表单,规范化 URL(去除片段),除非指定了 `--no-scope`,否则保持在目标域内,
并且除非设置了 `--ignore-robots`,否则遵守 robots.txt。每个发现的查询参数和表单字段都会成为一个注入点。
对于每个注入点,选定的检测器会发送探测请求:
- XSS 检测器会注入带有针对该点唯一 token 的 payload,并且仅当
活动的、未转义的 payload 上下文被原样反射时才标记
该点。经过 HTML 编码的反射会被视为安全。
- SQLi 检测器首先查找已知的数据库错误特征(MySQL、
PostgreSQL、SQLite、MSSQL、Oracle)。如果未发现此类特征,它会比较
恒真式与矛盾式的响应,并标记稳定的布尔差异。
每个发现都会记录类型、URL、参数、方法、payload、证据、
严重程度、CWE ID 以及修复说明。
## SARIF 和代码扫描
`--format sarif` 会生成 SARIF 2.1.0 文档。这可以上传到 GitHub
代码扫描(例如通过 `github/codeql-action/upload-sarif` action),
或由任何支持 SARIF 的查看器使用,从而使扫描结果与其他
静态和动态分析结果一起显示。
## 安全提示
- 默认启用同域名范围限制;不爬取域外链接。
- 默认遵守 robots.txt。
- 默认的 payload 集是只读且非破坏性的;它从不尝试
修改、删除或删除数据。
- ghostmap 仅扫描您在命令行中提供的目标。
## 局限性和误报
ghostmap 专注于反射型 XSS 以及基于错误和基于布门的 SQLi。它
不涵盖存储型或基于 DOM 的 XSS、二阶注入、认证
或授权缺陷、CSRF、SSRF 或业务逻辑问题。基于布尔的
检测依赖于响应差异,在高度动态的页面上偶尔会出现误判,因此
请将发现结果视为需要手动验证的线索,而不是
确凿证据。在报告之前,请务必确认结果。
## 路线图
- 存储型和基于 DOM 的 XSS 检测。
- 额外的注入类别(命令注入、路径遍历、SSTI)。
- 已认证的登录序列记录和会话刷新。
- 可配置的 payload 配置文件以及路径的 allowlist/denylist。
- HTML 报告输出和更丰富的证据捕获。
## 许可证
MIT。参见 [许可证](LICENSE)。
标签:CISA项目, DOE合作, Python, SARIF, SQL注入检测, Web漏洞扫描, XSS检测, 图数据库, 文档结构分析, 无后门, 逆向工具