SolomonSmith-dev/DossierForge

GitHub: SolomonSmith-dev/DossierForge

基于 Flask 的多用户 OSINT 档案构建 SaaS,将 WHOIS、端口扫描和社交媒体侦察整合到带审计追踪的结构化目标档案中,解决安全团队初期侦察信息零散难以管理的问题。

Stars: 0 | Forks: 0

# DossierForge ![CI](https://static.pigsec.cn/wp-content/uploads/repos/cas/ad/ad5834178f7599af9fdda11629d49cae07f2997beec49821b2920eff5bfd50e7.svg) ![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg) ![Python](https://img.shields.io/badge/python-3.8+-blue.svg) 一个基于 Flask 的多用户 OSINT 档案 SaaS,用于聚合关于特定目标的侦察数据。注册账号,为每个目标创建档案,并运行 WHOIS 查询、nmap 端口扫描以及社交媒体/电子邮件搜索。所有内容都会以结构化的、基于用户的档案形式存储,以供查阅。创建每个档案都需要经过授权使用声明,并且每一个侦察动作都会被写入审计追踪记录中。 ## 问题 安全研究人员和渗透测试人员在执行任何任务时,都会在第一个小时用于运行相同的五个工具,将输出结果粘贴到笔记文件中,并在同时处理多个任务时努力理清目标背景。DossierForge 将这些整合到一个 Flask 应用中:选择一个目标,启动你需要的模块,然后在一个针对特定目标的档案中查阅所有收集到的工件。 ## 功能 - 多用户账号:注册、登录,并保持各用户档案相互隔离 - 协作:以查看者(只读)或编辑者(可运行侦察)的身份将档案分享给团队成员 - 组织:创建团队工作区,管理成员(管理员/成员),并以特定角色与整个团队共享档案 - 邀请:在协作者/组织成员创建账号前通过电子邮件邀请他们;可通过注册或邀请链接领取 - 授权使用声明:创建档案需要确认授权;声明和范围将被记录 - 审计追踪:每个档案动作和侦察运行都会按档案单独记录日志 - WHOIS 查询:域名注册数据、注册商、域名服务器、到期时间 - nmap 扫描:包含服务检测和开放端口摘要的端口扫描 - OSINT 模块:社交媒体搜索、电子邮件枚举、数据泄露检查、GitHub 信息 - 异步扫描:侦察任务将作为持久化的 `ScanJob` 行排队;进程内轮询器会认领它们(支持重启后恢复),并提供实时的扫描任务状态面板 - 笔记与标签:附加调查员笔记并使用标签对档案进行分类 - 搜索:从仪表板按名称、组织或标签筛选档案 - 档案管理:通过 Web UI 创建、编辑元数据、浏览、导出和删除目标配置文件 - 报告:将档案(包含笔记和标签)导出为 Markdown 报告或原始 JSON ## 技术栈 - Python 3.8+,Flask(`create_app()` 中的应用工厂) - Flask-Login(认证),Flask-SQLAlchemy(ORM),Flask-Migrate(Alembic) - 数据库:开发环境下使用 SQLite(`instance/dossierforge.db`),通过 `DATABASE_URL` 支持 Postgres - Schema 由 `migrations/` 目录下的 Alembic 迁移管理(启动时自动应用) - `python-whois`,`nmap`(系统二进制文件),`requests` - Jinja2 模板;侦察工件存储在磁盘上的 `instance/dossier_data//` 目录中 - 生产环境使用 gunicorn 提供服务 ## 快速开始 需要 Python 3.8+ 并在系统上安装 `nmap` 二进制文件(`brew install nmap` 或 `apt install nmap`)。 ``` git clone https://github.com/SolomonSmith-dev/DossierForge cd DossierForge python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt cp .env.example .env # 编辑 .env:至少设置 SECRET_KEY ``` ### 环境变量 | 变量 | 必需 | 描述 | |---|---|---| | `SECRET_KEY` | 是 | 用于签名 Flask 会话的随机字符串 | | `DATABASE_URL` | 否 | SQLAlchemy 数据库 URL(默认为 `instance/` 下的 SQLite。使用 `postgresql://...` 连接 Postgres) | | `DOSSIER_DATA_DIR` | 否 | 侦察工件的存储目录(默认为 `instance/dossier_data`) | | `SCAN_JOBS_EAGER` | 否 | 如果为 `true`,则内联运行扫描,而不是通过持久化的数据库轮询器执行(测试中使用此项) | | `SCAN_WORKER_ENABLED` | 否 | 如果为 `false`,则不启动后台轮询器(任务将保持 `queued` 状态直到被处理) | | `SCAN_WORKER_POLL_SECONDS` | 否 | 持久化扫描 worker 的轮询间隔(默认为 `0.5`) | | `GITHUB_TOKEN` | 否 | 用于提高 API 速率限制的 GitHub PAT(在 GitHub 查询中使用) | | `NMAP_PATH` | 否 | 如果 `nmap` 不在 `$PATH` 中,则指定其绝对路径 | 有关模板,请参阅 `.env.example`。 ### 运行 ``` # 从 .env 加载环境变量并启动开发服务器 set -a . ./.env set +a python app.py # 或者使用辅助脚本(遵守你当前活动的 virtualenv) bash start_app.sh ``` 在浏览器中打开 `http://localhost:5001`。数据库将在启动时通过 Alembic 迁移(`migrations/`)自动创建/升级。Schema 变更: ``` # 编辑 models.py 后: SKIP_DB_UPGRADE=1 flask --app "app:create_app" db migrate -m "describe change" flask --app "app:create_app" db upgrade ``` 在生产环境中,使用 gunicorn 为应用工厂提供服务: ``` gunicorn "app:create_app()" --bind 0.0.0.0:5001 ``` ## 用法 1. 注册账号(或登录)。档案对您的账号是私有的。 2. 创建新档案。输入目标名称、别名和组织,并确认授权使用声明(带有可选的范围/参考)。 3. 针对目标运行模块(WHOIS、nmap、OSINT)。每个模块都会将其结果附加到档案中,并在审计追踪中记录一条日志。 4. 在档案概览页面查看汇总结果和审计追踪。 ## 模块 | 模块 | 功能描述 | |---|---| | `modules/whois.py` | WHOIS 查询与摘要提取 | | `modules/nmap.py` | 端口扫描、服务检测、开放端口列表 | | `modules/osint.py` | 社交媒体搜索、电子邮件搜索、数据泄露检查、GitHub 信息 | ## 项目结构 ``` . ├── app.py # Flask app factory, auth, routes ├── models.py # SQLAlchemy models (User, Dossier, AuditLog) ├── modules/ # WHOIS, nmap, OSINT recon modules ├── templates/ # Jinja2 templates (base, auth, dossier views) ├── instance/ # SQLite DB + recon artifacts (gitignored) ├── tests/ ├── start_app.sh ├── requirements.txt └── README.md ``` ## 路线图 - [x] 具有基于用户隔离的多用户账号 - [x] 档案的 Markdown/JSON 导出 - [x] 支持 Postgres 的后端(`DATABASE_URL`) - [x] 具有查看者/编辑者角色的档案共享 - [x] 调查员笔记、标签和仪表板搜索 - [x] 用于长时间运行扫描的后台任务队列 - [x] 组织/团队级档案 - [x] 数据库迁移(Alembic / Flask-Migrate) - [x] 面向组织/共享的待处理电子邮件邀请 - [ ] 用于多 worker 部署的持久化任务队列(Celery/RQ + Redis) - [ ] 基于组织的按席位计费 ## 许可证 MIT。请参阅 `LICENSE`。 ## 作者 Solomon Smith. solomonsmithdev@gmail.com
标签:ESC4, Flask, GitHub, HTTPX, OSINT, SaaS, 多用户系统, 实时处理, 测试用例, 逆向工具