hackops-academy/glacier

GitHub: hackops-academy/glacier

一款功能完整的 Web 应用安全扫描器,集拦截代理、被动/主动扫描、爬虫、Repeater 和 Fuzzer 于一体,提供原生桌面 GUI。

Stars: 1 | Forks: 0

# Glacier ### 由 HackOps Academy 制作 一款从零开始构建的 Web 应用安全扫描器 —— 拦截代理、 被动扫描器、爬虫、主动扫描器,以及原生桌面 GUI —— 隶属 HackOps Academy 旗下。 ## 功能简介 - **拦截代理** — 捕获流经其中的每一个请求/响应 (基于 [mitmproxy](https://mitmproxy.org/) 构建) - **被动扫描器** — 自动检查捕获的流量,查找缺失的安全 header、 不安全的 cookie、服务器版本泄露、冗长的错误消息以及暴露的敏感信息(API keys、JWTs、私有 密钥)—— 绝不发送额外流量,纯检查 - **爬虫** — 从起始 URL 抓取目标,跟踪同一 host 内的链接和 表单动作 - **主动扫描器** — 按需、针对单一 URL 进行测试,检测反射型 XSS、 SQL injection(基于错误、基于布尔的盲注以及基于时间的盲注)、 路径遍历 / 本地文件包含、OS 命令注入(反射型与 盲注/基于时间)以及开放重定向,采用标准的公开 检测方法。运行前需要明确的确认。 - **Repeater** — 手动请求编辑器:从零开始构造请求,或者 直接从 History 中提取一个,调整方法/headers/body,重新发送, 并比较响应。每次发送都会被记录,因此您可以跳回到任何 较早的尝试。与主动扫描器不同,它没有确认门槛 —— 它 完全且仅发送您明确键入的那一个请求,信任模型与 curl 或浏览器的开发者工具相同。 - **Fuzzer** — Intruder 风格的批量测试:在请求的任何位置(URL、header 或 body) 用字面量 `FUZZ` 标记注入点, 提供一个 wordlist,每个 payload 发送一次请求。结果会显示 在可排序的表格中(按状态码、响应长度或时间),以便 让数百个批次中那一个异常响应脱颖而出。通过 History 或 Repeater 一键即可 直接进入。受限于明确的确认和 1000 个 payload 的硬性上限,姿态与 主动扫描器相同。 - **Findings 管理** — 将多个页面中重复的问题进行去重, 分组为 findings,并跟踪 open/fixed/false-positive 状态 - **HUD** — 将所有功能整合在一起的原生 Electron 桌面 GUI ## 架构 ``` proxy (mitmproxy addon) → SQLite ← API (FastAPI) ← HUD (Electron) ↓ passive scanner (runs automatically on every captured response) spider / active scanner → triggered on demand via the API, write into the same SQLite findings table ``` 每个组件都与同一个 SQLite 数据库通信(`proxy/glacier.db`, 自动创建,已被 gitignore)。proxy 和 API 是独立的 进程,因此 API 可以在 proxy 持续在后台捕获的同时, 为 HUD 提供实时服务。 ## 快速开始 需要 Python 3.10+、Node.js 18+,以及(可选地)用于 单命令启动的 `tmux`。 ``` git clone cd glacier ./setup.sh # creates the venv, installs Python + Node dependencies ./start.sh # launches proxy, API, and HUD together in tmux panes ``` 没有 `tmux`?`start.sh` 会打印出三条命令,供您在不同的终端中手动运行。 一旦 HUD 窗口打开,输入 `http://localhost:8090` 并点击 **Connect**。 ### 使用代理 将您浏览器的 HTTP/HTTPS 代理指向 `127.0.0.1:8081`,然后 通过该代理访问一次 `http://mitm.it` 以安装并信任 mitmproxy 的 CA 证书(HTTPS 拦截所必需)。 ### 在扫描真实目标之前进行安全测试 `tools/vulnerable_test_app.py` 是一个小型刻意包含漏洞的本地 Flask 应用(包含 SQLi、XSS、路径遍历、OS 命令注入和开放 重定向 endpoints,并为每一个提供了妥善防护的“安全” endpoints 作为阴性对照)。在将其指向任何真实目标之前,使用它来确认主动扫描器是否正常 工作: ``` . venv/bin/activate python3 tools/vulnerable_test_app.py # http://127.0.0.1:5001 ``` ### 测试已认证区域 爬虫和主动扫描器都可以针对已登录的会话运行,因此 受保护的页面会被发现并测试,而不是被静默跳过。 提供两种模式,在 `/api/spider/start`、 `/api/active/scan` 和 `/api/pipeline/scan` 上作为可选的 `auth` 对象传入: **Cookie 模式** - 粘贴您已有的会话 cookie(例如手动登录后 从您的浏览器中复制的): ``` {"auth": {"mode": "cookie", "cookie_header": "session=abc123"}} ``` **表单模式** - 工具自行执行登录,并且会检测 扫描过程中的登出(会话超时等)并自动重新认证: ``` {"auth": { "mode": "form", "login_url": "https://target.example.com/login", "username": "hackops", "password": "hackops", "success_indicator": "Welcome back", "logout_indicator": "Please log in" }} ``` `success_indicator` / `logout_indicator` 是可选的,但推荐使用 — 它们让工具能够注意到在扫描过程中被登出, 并自行恢复。包含的 `tools/vulnerable_test_app.py` 具有真实的登录流程(`hackops` / `hackops`)和一个受保护的 `/account` 页面,可用于对此进行测试。 ## 项目布局 ``` proxy/ intercepting proxy addon + shared SQLite storage layer passive/ passive scan rules + engine spider/ crawler active/ active scanner (XSS / SQLi / path traversal / cmd injection / open redirect detection) auth/ authentication support (cookie or form login, session/logout handling) repeater/ manual request editor core (sender.py) fuzzer/ Intruder-style batch request engine (engine.py) api/ FastAPI server tying it all together tools/ vulnerable_test_app.py - safe local test target hud/ Electron desktop GUI ``` ## API 参考(简述) | Endpoint | Method | 用途 | |---|---|---| | `/api/sites` | GET | 捕获的 hosts | | `/api/traffic` | GET | 捕获的请求/响应 | | `/api/traffic/{id}` | GET | 单条消息详情 | | `/api/findings` | GET | 扁平的 findings 列表 | | `/api/findings/grouped` | GET | 按 host+name+risk 去重的 findings | | `/api/findings/summary` | GET | 按风险等级分类的 open findings 计数 | | `/api/findings/{id}` | PATCH | 更新单个 finding 的状态 | | `/api/findings/bulk-status` | PATCH | 一次性更新所有匹配的 findings | | `/api/spider/start` | POST | 开始爬取 | | `/api/spider/status/{job_id}` | GET | 爬取进度 | | `/api/spider/results/{job_id}` | GET | 发现的 URL | | `/api/active/scan` | POST | 对单个 URL 启动主动扫描(需要 `confirm: true`) | | `/api/active/status/{job_id}` | GET | 扫描进度/结果 | | `/api/pipeline/scan` | POST | 爬取站点并自动扫描发现的每一个带参数的 URL(需要 `confirm: true`,认证爬取/扫描可选传入 `auth`) | | `/api/pipeline/status/{job_id}` | GET | 流水线进度/结果 | | `/api/repeater/send` | POST | 发送一个手动指定的请求,记录它,并返回响应 | | `/api/repeater/history` | GET | 列出已发送的 Repeater 请求 | | `/api/repeater/{id}` | GET | 单个 Repeater 条目的完整详情(请求 + 响应) | | `/api/repeater/{id}` | DELETE | 删除单个 Repeater 条目 | | `/api/fuzz/start` | POST | 启动一次 fuzz 运行(需要 `confirm: true` + `FUZZ` 标记,上限 1000 个 payload) | | `/api/fuzz/stop/{job_id}` | POST | 取消正在运行的 fuzz 任务 | | `/api/fuzz/status/{job_id}` | GET | 进度(`completed`/`total`/`status`) | | `/api/fuzz/results/{job_id}` | GET | 结果,可通过 `sort_by`/`order` 查询参数排序 | | `/api/fuzz/result/{id}` | GET | 单个 fuzz 结果的完整详情(payload + 响应) | | `/api/fuzz/jobs` | GET | 列出过去的 fuzz 任务 | | `/api/fuzz/wordlists` | GET | 内置 wordlist 的名称和大小 | ## 许可证 Apache License 2.0 — 详见 [LICENSE](LICENSE)。
标签:CISA项目, GUI应用, MITM代理, Web安全, 加密, 抓包代理, 漏洞扫描器, 蓝队分析, 逆向工具