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检测, 图数据库, 文档结构分析, 无后门, 逆向工具