neur0sp1cy/TSK
GitHub: neur0sp1cy/TSK
TSK 是一个用于管理和部署 HAK5 设备及普通 USB 闪存盘 payload 的开源 Web 平台,适用于授权安全测试实验室。
Stars: 2 | Forks: 0
 |
TSK | The Skeleton Key
DEF CON 34 Edition
|
一个用于构建和部署 USB / HID payload 的免费、开源平台。包含一个 Web UI,用于 payload 浏览、设备刷写、SnarfSnarf exfil 生成、lure 构建和 phone-home catch。
这是 **The Skeleton Key**(2018 年 TUI 体系的延续)的现代 Web 重构版。GitHub 仓库:**[neur0sp1cy/TSK](https://github.com/neur0sp1cy/TSK)**。
**作者 [Neur0Sp1cy](https://github.com/neur0sp1cy)**
**联系方式:** [neur0sp1cy@proton.me](mailto:neur0sp1cy@proton.me) - 如有问题、疑虑和评论。
## 合法与授权使用
TSK **仅用于授权的安全测试** - 私人实验室、由您控制的 VM,或在您拥有**书面许可**可以部署 payload 并进行评估的环境中。
**请勿**将此项目用于您不拥有或未获授权测试的系统。我们不支持任何滥用、骚扰和非法活动,相关责任完全由您个人承担。
完整政策:**[SECURITY.md](SECURITY.md)**(授权使用、漏洞报告、免责声明)。
## 功能
- **Web UI** - 浏览 HAK5 payload 仓库,预览、编辑并刷写至受支持的设备;支持折叠分类和带有状态持久化功能的包折叠面板
- **USB Dropper** - 构建 exfil 脚本(PowerShell / Bash)、lure 包(LNK, README, `.desktop`),并刷写至普通 USB 闪存盘
- **SnarfSnarf (SNARF modal)** - 可视化 exfil 构建器,支持 phone-home 或存储于设备本地输出;保存的脚本会显示在 **EXFILS** 下,lure 包显示在 **LURES** 下,手动编写的文件显示在 **MY PAYLOADS**(`+ NEW`)下
- **CATCH** - 用于接收 phone-home 上传的实时接收器,支持预览和 ZIP 导出
- **LAN Turtle** - 浏览器内的 SSH 终端
- **主题** - 六种 UI 主题(从默认到 flat);在命令栏使用 `theme
`
- **教程** - 位于 `/tutorial` 的应用内任务
有关实验室设置和详细的 USB 测试场景,请参阅 [TESTING.md](TESTING.md)。
**发布前检查清单:** [RELEASE_ROADMAP.md](RELEASE_ROADMAP.md)(时间表、细节完善、上线)。
**发布说明:** [CHANGELOG.md](CHANGELOG.md)
**完整功能检查清单:** [TESTING_CHECKLIST.md](TESTING_CHECKLIST.md)(在发布前对每个功能进行通过/失败测试)。
**应用内教程:** 打开 [/tutorial](http://127.0.0.1:1337/tutorial)(或 `http://:1337/tutorial`),包含涵盖所有设备工作流程的七个引导任务。也可以从 Help modal(`H`)中访问。
## 环境要求
| 要求 | 说明 |
|-------------|--------|
| Python 3.8+ | 推荐 3.10+ |
| [uv](https://docs.astral.sh/uv/) | 推荐用于安装依赖 |
| 普通 USB 闪存盘 | FAT32 或 exFAT,可写入(不能是 Bunny/Ducky 卷) |
| 同一局域网 | phone-home 所需;受害机器必须能够连接到 `LHOST:LPORT`(默认为 **1337**) |
| java | 仅用于 Rubber Ducky 编码 |
| ssh | 仅用于 LAN Turtle 操作 |
依赖项会通过 `uv sync` 自动安装(FastAPI、uvicorn、bcrypt、jinja2、pylnk3、paramiko)。
## 快速开始
```
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/neur0sp1cy/TSK
cd TSK
uv sync
uv run python server.py
```
在浏览器中打开 **http://127.0.0.1:1337**(或在 Linux 上运行 `./run_web.sh`)。
**趣味命令**(命令栏):`quote` · `joke` · `hack the planet` · `defcon` · `play`/`pause`/`next`(将音轨拖放到 `web/static/music/` 目录中) · `present` 用于演示布局。按 **H** 键查看完整列表。
要启用 HTTPS(从局域网内其他机器访问时推荐):
```
uv run python server.py --ssl
```
自签名证书会在 `ssl/tsk.crt` 处生成一次,并在每次重启时重复使用。您的浏览器在首次访问时会显示安全警告 - 点击 **Advanced(高级)**,然后点击 **Proceed(继续)** 以接受它。Phone-home snarf 脚本使用纯 HTTP,因此不受影响。
### Windows
```
git clone https://github.com/neur0sp1cy/TSK
cd TSK
uv sync
uv run python server.py
# 或者:uv run python server.py --ssl
```
### 首次登录
1. 在登录界面点击 **NEW** 并注册一个操作员账号(密码至少 8 个字符)。
2. 打开 **CONFIG**(SYSTEM 下的 **C** 磁贴)并将 **LHOST** 设置为您的局域网 IP(使用局域网 IP 助手)。
3. 除非您更改了服务器端口,否则将 **LPORT** 设置为 `1337`。
4. 可选:打开 **/tutorial** 查看“任务 1”的详细步骤,或按 **H** 键并点击 **OPEN TUTORIAL**。
各操作员配置:`users//config.json`
已保存的 USB payload:`users//payloads/usb/`(exfil 脚本,`packages//` lure 包)
克隆的仓库:`repos/`
Phone-home 上传:`snarfed//`(按操作员隔离)
会话认证:需要注册/登录;API 使用 `X-TSK-Token` 请求头。密码至少 8 个字符。
## Web UI
| 区域 | 用途 |
|------|---------|
| 左侧导航 | **SYSTEM** 磁贴(About, Help, Config, Repos, Operator) + **DEVICES** 卡片 |
| 中间区域 | 所选设备的 payload 列表(展开/折叠分类和包);USB 会在页眉处显示 **+ NEW**、**SNARF** 和 LHOST 标签 |
| Modals | CONFIG, REPOS, OPERATOR, SNARF (USB), About, Help |
| 右侧面板 | 预览、USB 闪存盘扫描、FLASH / EDIT / SAVE |
| 底部栏 | 命令行(`set lhost`、`clone ducky`、`devices` 等) |
| **H** | Help modal(操作员指南) |
| **A** | About modal |
### 键盘快捷键
| 按键 | 操作 |
|-----|--------|
| `D` `B` `U` `L` | 跳转至设备(Ducky, Bunny, USB, Turtle) |
| `C` `R` `O` `A` `H` | Config, Repos, Operator, About, Help |
| `S` | SNARF 构建器(仅限 USB Dropper) |
| `f` / `Ctrl+Enter` | 刷写 (Flash) |
| `e` | 编辑 payload |
| `Esc` | 关闭 modals |
## 支持的设备
| 设备 | 刷写方法 |
|--------|----------------|
| USB Dropper | Web UI:将脚本和 lure 包刷写至普通 USB 闪存盘 |
| Rubber Ducky (OG) | `encoder.jar` → SD 卡 |
| Bash Bunny (OG) | 大容量存储 → switch1 / switch2 |
| LAN Turtle (OG) | SSH/SCP 推送 |
| Teensy 3.2 / 4.0 | 通过 `teensy_loader_cli` 刷入已编译的 `.hex`(当存在内置 sketch 时侧边栏会显示;刷写需要在 `.ino` 旁边有 `.hex` 文件) |
从 REPOS modal(侧边栏 **R**)克隆 HAK5 库:`clone ducky`、`clone bunny`、`clone turtle`、`clone all`。
## 项目结构
```
TSK/
├── server.py # Web server (start here)
├── web/index.html # Web UI
├── web/tutorial.html # In-app tutorial missions
├── web/static/ # Icons, branding, music drop folder
├── dropper/ # SnarfSnarf, lure builder, receiver
├── flash.py # Flash engine
├── config.py # Auth and per-operator config
├── repos.py # Repo clone and indexing
├── users/ # Operator data
├── repos/ # Cloned payload libraries
├── snarfed/ # Phone-home catches (per-operator subdirs)
├── TESTING.md # Lab testing guide
├── TESTING_CHECKLIST.md
├── RELEASE_ROADMAP.md
├── SECURITY.md # Authorized use and disclosure
├── archive/tui/ # Archived TUI notes (removed; web UI only)
└── pyproject.toml
```
### Bug 报告与支持
- **Bug:** [GitHub Issues](https://github.com/neur0sp1cy/TSK/issues)(请使用 bug 报告模板)
- **复现帮助:** [TESTING_CHECKLIST.md](TESTING_CHECKLIST.md) - 请注明您当前所处的章节
- **TSK 的安全问题:** 参阅 [SECURITY.md](SECURITY.md)(负责任的漏洞披露,请勿在公开 issues 中披露漏洞利用细节)
- **问题 / 疑虑:** [neur0sp1cy@proton.me](mailto:neur0sp1cy@proton.me)
- **预期:** 尽力提供支持;请保持建设性 - 我们致力于消灭 bug,但不会容忍辱骂
**启用 Issues:** 在 GitHub 上,打开 **neur0sp1cy/TSK** → **Settings** → **General** → **Features** → 勾选启用 **Issues** → **Save**。新的 issues 将使用 `.github/ISSUE_TEMPLATE/` 中的 bug 报告模板。
*构思于拉斯维加斯闷热且霓虹闪烁的灯光之下。*标签:HID攻击, USB闪存设备, Web管理界面, 后端开发, 搜索语句(dork), 数据窃取, 逆向工具