ElBecerril/ExposedCheck
GitHub: ElBecerril/ExposedCheck
一款 Python 命令行工具,帮助用户检查个人信息是否在已知数据泄露中暴露,并提供 OSINT 分析与修复指南。
Stars: 0 | Forks: 0
# ExposedCheck
```
______ __________ __
/ ____/ ______ ____ ________ ____/ / ____/ /_ ___ _____/ /__
/ __/ | |/_/ __ \/ __ \/ ___/ _ \/ __ / / / __ \/ _ \/ ___/ //_/
/ /____> /_/ / /_/ (__ ) __/ /_/ / /___/ / / / __/ /__/ ,<
/_____/_/|_/ .___/\____/____/\___/\__,_/\____/_/ /_/\___/\___/_/|_|
/_/
by El_Becerril
```
这是一款 CLI 工具,用于检查您的个人信息是否出现在已知的安全漏洞中。它可以查询多个免费 API,检测重复的个人资料,执行反向图片搜索,并生成修复指南。
## 负责任地使用
ExposedCheck 旨在让您检查**您自己**(或获得明确授权的其他人)的数据暴露情况,而不是在未经同意的情况下调查或剖析他人。特别是,`--fingerprint` 模式会查询各种服务(Spotify、WordPress、Duolingo、GitHub 等)的内部 signup/recuperation endpoint,以确定某个邮箱是否在那里注册;未经授权将其用于他人的邮箱可能构成 doxing/stalking(人肉搜索/跟踪),并违反这些平台的服务条款。反向图片搜索也会将文件上传到临时的公共托管主机(litterbox.catbox.moe,1小时后过期)——请仅上传您有权分享的照片。
## 功能
- **交互模式** - 逐步引导的菜单,不需要技术知识
- **邮箱检查** - 检测您的邮箱出现在哪些漏洞中,以及暴露了哪些数据及其风险等级
- **用户名检查** - 在漏洞和 infostealers 数据库中搜索您的用户名
- **电话检查** - 通过 BreachDirectory (RapidAPI) 提供的可选支持
- **密码检查** - 使用 k-anonymity 检查密码是否已被泄露(绝不发送完整的密码)
- **反向图片搜索** - 将您的照片上传至 Yandex、Google Lens 和 TinEye,以检测是否有人未经授权使用
- **重复资料搜索** - 扫描 25+ 平台以查找使用您的用户名的账户
- **通过用户名搜索邮箱** - 从 GitHub/GitLab 提取 OSINT + 进行漏洞检查
- **邮箱指纹识别(完整 OSINT)** - 综合分析:域名(MX/提供商)、Gravatar、漏洞、infostealers、GitHub/GitLab 活跃度、已注册的服务以及与派生用户名相关的资料
- **带有风险等级的报告** - 带有颜色的表格、infostealers 警报和可视化摘要
- **修复指南** - 操作步骤、账户删除链接、GDPR 第 17 条模板以及防范 SIM swapping 的建议
## 使用的 API
| API | 邮箱 | 用户名 | 密码 | API Key |
|-----|:-----:|:--------:|:--------:|:-------:|
| XposedOrNot | 是 | - | 是 | 否 |
| HIBP Pwned Passwords | - | - | 是 | 否 |
| LeakCheck | 是 | 是 | - | 否 |
| Hudson Rock | 是 | 是 | - | 否 |
| BreachDirectory | - | - | - | 可选(电话) |
| GitHub API | 是(搜索) | 是(commits) | - | 否 |
| GitLab API | - | 是(个人资料) | - | 否 |
| Gravatar | 是(个人资料) | - | - | 否 |
## 安装
```
git clone https://github.com/ElBecerril/ExposedCheck.git
cd ExposedCheck
./exposedcheck
```
启动器 `./exposedcheck` (Linux/macOS) 会在首次运行时准备好一切:创建虚拟
环境 `.venv`,安装依赖并生成 `.env`。之后只有在 `requirements.txt`
发生更改时才重新安装。它接受与 `main.py` 相同的 flags:
```
./exposedcheck -e correo@ejemplo.com
```
它不会在您的 shell 中激活 venv:而是使用 `.venv/bin/python` 运行,
因此该环境仅在程序运行期间存在。
所有的 API keys 都是**完全可选的**:即使没有它们,该工具也能使用公开来
源运行。基于 `.env.example` 创建一个 `.env` 文件即可启用额外功能:
```
cp .env.example .env
# 编辑 .env 并填入你拥有的 keys
```
| 变量 | 用途 | 没有它时 |
|---|---|---|
| `BREACHDIRECTORY_API_KEY` | 电话号码验证 (RapidAPI) | 电话检查将不会查询该来源 |
| `GITHUB_TOKEN` | 将 GitHub 的 OSINT 速率限制从 60 提升至 5000 次/小时 | 功能照常运行,但会更快耗尽配额 |
| `HIBP_API_KEY` | 将 HIBP 添加为第四个邮箱漏洞来源 (付费 endpoint) | 将查询 3 个来源而不是 4 个 |
`GITHUB_TOKEN` 不需要特殊的 scopes(仅读取公开数据)。
**密码**验证使用带有 k-anonymity 的 Pwned Passwords 公共 API,并且
**绝不**使用 `HIBP_API_KEY`。
## 用法
### 交互模式(推荐)
不带参数运行并跟随菜单操作:
```
python main.py
```
```
1 - Verificar email
2 - Verificar nombre de usuario
3 - Verificar numero de telefono
4 - Verificar si un password esta filtrado
5 - Busqueda inversa de imagenes (detectar uso de tus fotos)
6 - Buscar perfiles duplicados en redes sociales
7 - Verificacion completa (email + username + password)
8 - Buscar email asociado a un username
9 - Fingerprint de email (OSINT completo)
0 - Salir
```
### CLI 模式(进阶)
```
# 验证 email
python main.py -e correo@ejemplo.com
# Email + username
python main.py -e correo@ejemplo.com -u mi_usuario
# Email + 验证 password(以安全方式请求)
python main.py -e correo@ejemplo.com --check-password
# 待办:email + username + 电话
python main.py -e correo@ejemplo.com -u mi_usuario -t +521234567890
# 反向图像搜索(在浏览器中打开标签页)
python main.py --reverse-image ./mis_fotos/
python main.py --reverse-image foto.jpg
python main.py --reverse-image https://url-de-imagen.jpg
# 不打开浏览器的反向搜索(仅显示完整 URLs)
python main.py --reverse-image ./mis_fotos/ --no-open
# 在 25+ 平台上搜索重复的个人资料
python main.py --search-profiles mi_usuario
# 搜索与 username 关联的 email(OSINT + 数据泄露)
python main.py --find-email mi_usuario
# 对 email 进行完整的 Fingerprint OSINT
python main.py --fingerprint correo@ejemplo.com
# 将结果保存为 JSON 和/或 HTML(除了在控制台中显示之外)
python main.py -e correo@ejemplo.com -u mi_usuario --json resultado.json
python main.py --fingerprint correo@ejemplo.com --html reporte.html
# TUI (Textual) 界面
python main.py --tui
```
**TUI** (`--tui`) 在可导航的终端界面中涵盖了全部 8 项检查:
漏洞(邮箱/用户名/电话/密码)和 OSINT(个人资料、邮箱指纹、反向图片
搜索、邮箱查找)。选择类型,输入数值,即可查看带有风险等级的结果。
按 `s` 键通过询问路径将最后的结果保存为 JSON+HTML,按 `q` 键退出。
与 CLI 模式一样,**邮箱指纹识别**在执行前需要明确确认:
因为它会查询第三方 endpoint,所以只能在您自己的邮箱或获得所有者授权的情况下使用。
`--json` 和 `--html` 可以组合使用,并适用于任何检查。
JSON 包含元数据(`tool`、`version`、`generated_at`)以及每个检查类型对应的
`results` 块。漏洞报告包含计算出的风险等级
(`overall_risk`),包括没有任何来源响应时的 `"desconocido"`
(不会将“无漏洞”与“无法查询”混淆)。
HTML 是一个独立的页面(无外部资源),具有相同的内容以及每个部分的风险
badge。在**交互模式**下,每次验证后都会提示您保存结果
(JSON、HTML 或两者皆有),而无需使用这些 flags。
## 输出示例
```
______ __________ __
/ ____/ ______ ____ ________ ____/ / ____/ /_ ___ _____/ /__
/ __/ | |/_/ __ \/ __ \/ ___/ _ \/ __ / / / __ \/ _ \/ ___/ //_/
/ /____> /_/ / /_/ (__ ) __/ /_/ / /___/ / / / __/ /__/ ,<
/_____/_/|_/ .___/\____/____/\___/\__,_/\____/_/ /_/\___/\___/_/|_|
/_/
Verificador de Datos Filtrados en Brechas de Seguridad
by El_Becerril
╔═════════════════════════ Resultado de Verificacion ═════════════════════════╗
║ Email: correo@ejemplo.com ║
║ Brechas encontradas: 8 ║
║ !! RIESGO ALTO ║
╚═════════════════════════════════════════════════════════════════════════════╝
┌──────────────────┬───────┬──────────────────────────┬──────────┬─────────────┐
│ Brecha │ Fecha │ Datos Expuestos │ Riesgo │ Fuente │
├──────────────────┼───────┼──────────────────────────┼──────────┼─────────────┤
│ Naz.API │ 2023 │ Email, Passwords │ CRITICO │ XposedOrNot │
│ Twitter-Scraped │ 2021 │ Email, Telefono, Nombres │ CRITICO │ XposedOrNot │
│ Adobe │ 2013 │ Usernames, Passwords │ CRITICO │ XposedOrNot │
└──────────────────┴───────┴──────────────────────────┴──────────┴─────────────┘
```
## 项目结构
```
ExposedCheck/
main.py # Punto de entrada (interactivo + CLI)
config.py # Configuracion y constantes
models.py # Modelos de datos
requirements.txt # Dependencias
.env.example # Plantilla para API keys opcionales
apis/ # Proveedores de API
base.py # Clase base abstracta
xposedornot.py # Email + password (SHA3 k-anonymity)
hibp.py # Pwned Passwords (SHA-1 k-anonymity)
leakcheck.py # Email + username
hudsonrock.py # Infostealers/malware
github_osint.py # Extraccion de emails desde GitHub
gitlab_osint.py # Extraccion de emails desde GitLab
email_generator.py # Generacion y verificacion de candidatos
checkers/ # Orquestadores
email_checker.py # Verificacion de email
username_checker.py # Verificacion de username
phone_checker.py # Verificacion de telefono
password_checker.py # Verificacion de password
image_checker.py # Busqueda inversa de imagenes
profile_checker.py # Busqueda de perfiles duplicados
email_finder.py # Busqueda de email por username
email_fingerprint.py # Fingerprint OSINT completo de email
reporting/ # Reportes
console_report.py # Tablas y paneles con Rich
remediation.py # Guia GDPR, links, plantillas
```
## 依赖
- [requests](https://pypi.org/project/requests/) - HTTP 客户端
- [rich](https://pypi.org/project/rich/) - 终端可视化界面
- [python-dotenv](https://pypi.org/project/python-dotenv/) - 加载环境变量
- [dnspython](https://pypi.org/project/dnspython/) - 用于指纹识别的 MX 解析(可选,回退至 socket)
- [textual](https://pypi.org/project/textual/) - TUI 界面 (`--tui`)
## 测试
```
pip install -r requirements-dev.txt
pytest
# 严格模式:内部 bug 将被重新抛出,而不是转换为
# 错误消息。它应该同样保持绿色。
EXPOSEDCHECK_STRICT=1 pytest
```
它们涵盖了来源覆盖率(区分“无漏洞”与“无法查询”)、所有
提供商的响应解析、JSON/HTML 导出以及 TUI。测试不触碰网络(所有
提供商均被 mock 化)。
失败被分为三种类型(`apis/errors.py`):**网络**(超时、
DNS)、**解析**(响应不是有效的 JSON)和 **bug**(我们在处理
响应时的错误,此外还会带有 traceback 记录到日志中)。以前这三者
显示的方式相同,因此解析器的 bug 看起来就像是 API 崩溃。
使用 `EXPOSEDCHECK_STRICT=1` 时,bug 会被重新抛出,以便在开发过程中显现出来。
## 隐私
- 密码使用 **k-anonymity** 进行验证:仅发送 hash 的前几个字符,绝不发送完整的密码
- 图片会上传到一个**在 1 小时后过期**的临时托管服务
- 不会在外部服务器上存储任何信息
- 所有操作均在您的本地机器上执行
## 许可证
MIT
手动安装(或 Windows)
``` python -m venv .venv source .venv/bin/activate # fish: source .venv/bin/activate.fish # Windows: .venv\Scripts\activate pip install -r requirements.txt python main.py ```标签:Atomic Red Team, ESC4, OSINT, Python, Unix, 安全意识, 实时处理, 数字足迹, 数据泄露, 数据泄露检测, 无后门, 逆向工具