Heimdal 是一款基于 Python 与 Streamlit 的教育用 Web 应用动态安全扫描与被动 OSINT 侦察套件,帮助用户在一个仪表盘中完成 SQLi/XSS 漏洞检测并生成详尽的目标情报报告。
👁️ HEIMDAL — Web 应用漏洞守望塔
一个使用 Python 和 Streamlit 构建的专业级、教育用 DAST + OSINT 侦察套件。
检测漏洞、被动分析目标,并生成详尽的情报报告 —— 尽在一个仪表盘中。
功能 •
截图 •
项目结构 •
快速开始 •
API 密钥 •
实验环境 •
道德声明
## 🚀 概述
**Heimdal**(得名于看守彩虹桥的全视北欧神话神明)是一款专为**教育演示、大学本科毕业设计以及安全作品集展示**设计的双模式网络安全工具。
它将两个强大的学科融合在一个经过精心打磨的仪表盘中:
| 模式 | 描述 |
|------|-------------|
| **DAST 扫描** | 主动爬取目标 Web 应用,发现注入点,并探测 SQLi 和 XSS |
| **OSINT 侦察** | 被动聚合 DNS、WHOIS、SSL、Shodan、crt.sh、Wayback Machine 和技术指纹 —— *对目标发送零数据包* |
## ✨ 功能
### 🔴 DAST 扫描引擎
| 功能 | 详情 |
|---------|--------|
| **Web 爬虫** | 基于 BFS 的异步爬虫 —— 可爬取所有表单和 URL 参数,直到达到配置的深度限制 |
| **SQL 注入** | 基于错误 + 绕过认证的 payload,与 MySQL / PostgreSQL / MSSQL / SQLite 的错误特征进行匹配 |
| **反射型 XSS** | 检查带有唯一 UUID 标记的 payload 是否在 HTML 响应中存在原始、未转义的反射 |
| **严重性分级** | 每个漏洞被评为严重 / 高危 / 中危 / 低危 / 信息 |
| **导出** | 每次扫描运行均可导出完整的 `.txt` 压缩包 |
### 🟢 OSINT 侦察引擎
#### 🌐 身份与基础设施
- **IP 解析** + 地理定位(国家、城市、ASN、ISP、组织)
- **WHOIS** — 注册商、创建/过期日期、注册组织
- **Shodan InternetDB**(免费,无需密钥)或完整的 **Shodan API**(需密钥)
- **crt.sh 证书透明性** 日志
#### 🔍 子域名枚举(5 个来源)
Certspotter · AlienVault OTX · URLScan · HackerTarget · crt.sh
#### 📡 DNS 分析
- 记录类型:A · AAAA · MX · NS · TXT · CNAME · SOA · CAA · DNSKEY · DS
- SPF / DMARC / DNSSEC 检测及**安全徽章评分**
- 电子邮件伪造风险评估
#### 🔒 SSL / TLS 检查
- 证书链详情(Subject、Issuer、SAN)
- SHA-1 和 SHA-256 指纹
- 公钥类型及位长(RSA / ECDSA)
- 剩余天数倒计时及过期警告
- 弱算法检测(SHA-1 签名、短 RSA 密钥)
#### 🧠 技术检测(40+ 指纹)
| 类别 | 技术 |
|----------|-------------|
| Web 框架 | React, Next.js, Vue, Nuxt, Angular, Svelte, Ember |
| 后端框架 | Django, Flask, FastAPI, Express, Laravel, Symfony, Spring, ASP.NET, Rails |
| CMS | WordPress, Joomla, Drupal, Ghost, Magento, Shopify, Wix |
| Web 服务器 | Apache, Nginx, IIS, LiteSpeed, Caddy |
| JS 库 | jQuery, Bootstrap, Tailwind, Alpine.js, Chart.js |
| CDN / WAF | Cloudflare, CloudFront, Akamai, Fastly |
| 统计分析 | Google Analytics, GTM, Hotjar, Microsoft Clarity |
| 安全 | reCAPTCHA, hCaptcha, CSP, HSTS |
每次检测均包含:**图标 · 类别 · 置信度 % · 证据来源**
#### 🛡️ 安全标头分析(符合 OWASP 标准)
对 10 个关键响应标头的评级从 A+ 到 F:
`HSTS · CSP · X-Frame-Options · Permissions-Policy · Referrer-Policy · CORP · COEP · COOP · X-Content-Type-Options · CORS`
每个标头卡片显示:**当前值 · 重要性说明 · 攻击风险 · 推荐值 · OWASP 参考**
#### 🕷️ 高级爬虫
- 内部 / 外部链接、图片、JS、CSS、表单
- **电子邮箱地址**和**电话号码**提取
- **社交媒体链接**聚合
- **下载链接**检测(PDF、ZIP、DOCX、SQL 等)
- **敏感 endpoint** 标记:登录、管理面板、上传页面、API、密码重置、配置/设置
- 获取 `robots.txt` 和 `sitemap.xml`
#### 🔌 端口扫描器
- 使用异步扫描 Top-100 TCP 端口
- **风险分级**:严重 · 高危 · 中危 · 低危(基于端口规则)
- **Banner grabbing**(服务版本指纹识别)
- UI 中可按风险等级筛选
- 结果按威胁严重程度排序
#### 📂 目录暴力破解
- 用户提供字典 (`.txt`)
- 可选扩展名 fuzz (`php,asp,txt,bak`)
- **结果自动分类**:管理 · 备份 · 配置 · 敏感 · 压缩包 · PHP · HTML · JS
- UI 中自动展开管理路径
- HTTP 状态码颜色标识
#### 🕰️ Wayback Machine 集成
- 历史快照 URL 发现
- 过滤有趣的历史 endpoint
## 📸 截图
### DAST 扫描 — 目标获取
### OSINT 侦察 — 情报仪表盘
## 🗂️ 项目结构
```
heimdal/
├── src/
│ └── app.py # Streamlit dashboard — DAST + OSINT Recon tabs
│
├── backend/
│ ├── __init__.py
│ ├── models.py # VulnerabilityScanner, ScanResult, ReconResult dataclasses
│ ├── payloads.py # SQLi / XSS payload library
│ ├── scanner.py # Async DAST crawler + vulnerability scan engine
│ ├── recon.py # Passive OSINT orchestrator (asyncio.gather parallel)
│ ├── tech_detect.py # Technology fingerprinting (40+ signatures)
│ ├── header_analyzer.py # OWASP security header grading (A+ → F)
│ ├── subdomains.py # 5-source subdomain aggregator
│ ├── wayback.py # Wayback Machine CDX API wrapper
│ ├── crawler.py # HTML BFS crawler with extraction
│ ├── portscan.py # Async TCP port scanner with risk levels
│ ├── dirrec.py # Async directory brute-forcer with categorisation
│ ├── export.py # TxtExporter — per-run .txt bundle
│ └── settings.py # ~/.config/heimdal/ bootstrap
│
├── conf/
│ ├── config.json # Bundled defaults (timeouts, threads, max pages)
│ └── keys.json # API key placeholders (null by default)
│
├── assets/
│ ├── style.css # Glassmorphism dark theme
│ ├── banner.jpg # Project banner
│ └── screenshots/ # README screenshots
│
├── lab/
│ └── vulnerable_app.py # Deliberately vulnerable Flask app for testing
│
├── requirements.txt
├── CHANGELOG.md
└── README.md
```
## ⚡ 快速开始
### 1. 克隆仓库
```
git clone https://github.com/youruser/heimdal.git
cd heimdal
```
### 2. 创建虚拟环境(推荐)
```
python -m venv venv
# Windows
venv\Scripts\activate
# macOS / Linux
source venv/bin/activate
```
### 3. 安装依赖
```
pip install -r requirements.txt
```
### 4. 启动仪表盘
```
streamlit run src/app.py
```
应用将在您的默认浏览器中通过 **http://localhost:8501** 打开。
## 🧪 实验环境(可选但推荐)
Heimdal 附带了一个故意留下漏洞的 Flask 应用,用于**安全、合法的本地测试**:
```
python lab/vulnerable_app.py
```
然后将 DAST 扫描器指向:
```
http://127.0.0.1:5055/
```
该实验应用包含故意的 SQLi 和 XSS 漏洞,以展示 Heimdal 的检测能力。
## 🔑 API 密钥
Heimdal 开箱即用,**无需任何 API 密钥**,使用的是免费的公共 API。可选密钥可解锁额外的数据源:
| 密钥 | 提供商 | 用途 | 免费层? |
|-----|----------|----------|------------|
| `shodan` | Shodan.io | 完整 Host API(端口、漏洞、地理定位)| ❌ 付费 |
| `virustotal` | VirusTotal | 子域名枚举 | ✅ 是 |
| `hunter` | Hunter.io | 子域名枚举 | ✅ 是 |
| `bevigil` | BeVigil | 移动/子域名情报 | ✅ 是 |
| `netlas` | Netlas.io | 子域名枚举 | ✅ 是 |
| `zoomeye` | ZoomEye | 子域名枚举 | ✅ 是 |
| `binedge` | BinaryEdge | 子域名枚举 | ✅ 是 |
| `facebook` | Facebook CT | 证书透明性 | ✅ 是 |
| `urlscan` | URLScan.io | 子域名枚举 | ✅ 是 |
| `otx` | AlienVault OTX | 子域名 + 威胁情报 | ✅ 是 |
**如需添加密钥**,请编辑 `~/.config/heimdal/keys.json`:
```
{
"shodan": "YOUR_SHODAN_KEY_HERE",
"virustotal": "YOUR_VT_KEY_HERE"
}
```
## 🛠️ 配置
编辑 `~/.config/heimdal/config.json` 以调整扫描行为:
```
{
"max_pages": 12,
"max_forms_per_page": 8,
"request_timeout": 10,
"concurrent_requests": 10,
"port_scan_timeout": 1.0
}
```
| 参数 | 默认值 | 描述 |
|-----------|---------|-------------|
| `max_pages` | `12` | 爬虫访问的最大页面数 |
| `max_forms_per_page` | `8` | 每页测试的最大表单数 |
| `request_timeout` | `10` | HTTP 请求超时时间(秒) |
| `concurrent_requests` | `10` | 异步并发级别 |
| `port_scan_timeout` | `1.0` | 每个端口的 TCP 连接超时时间 |
## 📦 环境要求
```
streamlit>=1.32
aiohttp>=3.9
dnspython>=2.6
python-whois>=0.9
cryptography>=42
beautifulsoup4>=4.12
requests>=2.31
```
使用以下命令安装所有依赖:
```
pip install -r requirements.txt
```
## 🏗️ 架构
```
┌─────────────────────────────────────────────────────────┐
│ src/app.py (Streamlit UI) │
│ ┌─────────────┐ ┌──────────────────────┐ │
│ │ DAST Tab │ │ OSINT Recon Tab │ │
│ └──────┬──────┘ └──────────┬───────────┘ │
└──────────┼────────────────────────────── ┼─────────────┘
│ │
┌──────▼──────┐ ┌────────▼──────────┐
│ scanner.py │ │ recon.py │
│ payloads.py │ │ (asyncio.gather) │
└─────────────┘ └──┬──┬──┬──┬──┬────┘
│ │ │ │ │
┌────────────┘ │ │ │ └──────────────┐
│ ┌─────┘ │ └───────────┐ │
▼ ▼ ▼ ▼ ▼
tech_detect header_ crawler.py portscan dirrec
subdomains analyzer wayback.py .py .py
ssl/dns/ .py
whois/shodan
```
- **所有扫描/侦察逻辑均位于 `backend/` 目录** — 完全无头化,无需 Streamlit 即可测试
- **`app.py` 仅作为 UI** — 可在不触及后端逻辑的情况下替换为 CLI 或 FastAPI 接口
- **`ReconResult` dataclass** 是唯一事实来源 — 所有模块写入字段,app.py 读取字段
## ⚖️ 道德声明
```
THIS TOOL IS PROVIDED FOR EDUCATIONAL AND AUTHORIZED TESTING PURPOSES ONLY.
Only scan applications you own or have explicit written authorization to test.
Authorized targets include:
• DVWA (Damn Vulnerable Web Application)
• OWASP Juice Shop
• The bundled lab/vulnerable_app.py
• Your own web applications in a controlled environment
Unauthorized scanning of third-party systems may violate computer misuse laws
in your jurisdiction (e.g. Computer Fraud and Abuse Act, UK Computer Misuse Act).
The authors accept no liability for misuse of this software.
```
## 📄 许可证
本项目仅供**教育用途**。作者保留所有权利。
怀揣 ❤️ 为网络安全社区打造 · 大学毕业设计项目