kazim-45/milkyway
GitHub: kazim-45/milkyway
一个统一的 CTF 工具编排框架,通过模块化星球设计将安全测试工具和版本控制整合在交互式 Shell 中。
Stars: 1 | Forks: 0
```
================================================================================
███╗ ███╗██╗██╗ ██╗ ██╗██╗ ██╗██╗ ██╗ █████╗ ██╗ ██╗
████╗ ████║██║██║ ██║ ██╔╝╚██╗ ██╔╝██║ ██║██╔══██╗╚██╗ ██╔╝
██╔████╔██║██║██║ █████╔╝ ╚████╔╝ ██║ █╗ ██║███████║ ╚████╔╝
██║╚██╔╝██║██║██║ ██╔═██╗ ╚██╔╝ ██║███╗██║██╔══██║ ╚██╔╝
██║ ╚═╝ ██║██║███████╗██║ ██╗ ██║ ╚███╔███╔╝██║ ██║ ██║
╚═╝ ╚═╝╚═╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚══╝╚══╝ ╚═╝ ╚═╝ ╚═╝
The Galactic CTF Orchestrator
Modular · Versioned · AI-Powered · Planetary
================================================================================
```
# MilkyWay CTF 套件
**银河系 CTF 编排器**
[](https://python.org)
[](https://github.com/kazim-45/milkyway/releases)
[](LICENSE)
[](https://pypi.org/project/milkyway-ctf)
[](https://github.com/kazim-45/milkyway)
[](CONTRIBUTING.md)
*11 个星球 · 60 个命令 · 纯 Python 核心 · 零 "工具未找到" 错误*
## 📸 截图
以下是来自 `assets/` 目录的当前 MilkyWay 界面快照。



## 什么是 MilkyWay?
MilkyWay 是一个**模块化、版本可控的 CTF 工具包**,它将所有安全领域统一在一个交互式 Shell 中。无需再在多个终端之间切换、忘记尝试过的内容、或在比赛中途忙着安装工具。MilkyWay 为你提供一个提示符 — `mw>` — 让你从零开始到拿到 flag。
### 它解决的问题
每个 CTF 选手都深知这种痛苦:
- 花第一个小时安装 Kali、工具和字典,而不是 hacking
- 因为忘记输出内容,同一个 fuzz 工具跑了五遍
- 关闭终端后丢失了所有思路
- 队友之间重复做同样的工作
### MilkyWay 的解决方案
```
mw> 1 ← Enter Mercury (Web Security)
┌─ ☿ MERCURY — Web Security ─────────────────────────────┐
│ 1. mercury fuzz
Directory/file fuzzing │
│ 2. mercury sql SQL injection scan │
│ 3. mercury request Craft HTTP request │
│ ... │
└────────────────────────────────────────────────────────┘
[mercury] mw> 1
? Target URL: http://target.com/FUZZ
? Extensions (Enter to skip): .php,.html
$ mw mercury fuzz http://target.com/FUZZ --extensions .php,.html
▶ Task: mercury fuzz http://target.com/FUZZ…
✓ Executing mercury ✓
FOUND [200] /admin.php [12345b]
FOUND [301] /backup/ [0b]
✓ Completed | saturn recorded run #42
```
一切都被记录。每个运行都可重放。每个结果都可搜索。## 功能亮点
| 功能 | 描述 |
|---------|-------------|
| **11 个星球** | 一个工具包涵盖所有主要 CTF 领域 |
| **60 个命令** | 完全编号,可从单一 Shell 导航 |
| **星球子 Shell** | 进入一次星球,运行编号命令 — 无需重复输入 |
| **引导式参数** | 在星球中输入 `1` → 交互式提示参数 |
| **Saturn VCS** | 每个命令自动记录,可对比,可重放 |
| **纯 Python 核心** | 100% 备用实现 — 零 "工具未找到" |
| **挑战工作区** | 每个挑战的脚手架文件夹,包含 notes、solve.py、outputs |
| **AI 助手 (Pluto)** | 关键词引擎 + Ollama/OpenAI 用于工具建议 |
| **Tab 补全** | 全部 11 个星球的 146 个补全项 |
| **彩色 UI** | 每个星球颜色编码,带实时状态指示器 |
| **会话导出** | 一条命令将会话导出为可用的 Markdown 格式 |
## 11 个星球
| # | 符号 | 星球 | 领域 | 命令 |
| 1 | ☿ | Mercury | Web 安全 |
fuzz sql request headers extract scan |
| 2 | ♀ | Venus | 密码学 |
identify hash crack encode decode xor factor rsa |
| 3 | ♁ | Earth | 取证 |
info carve strings hexdump steg pcap |
| 4 | ♂ | Mars | 逆向工程 |
disassemble info symbols trace r2 |
| 5 | ♃ | Jupiter | 二进制利用 |
checksec rop template cyclic |
| 6 | ♆ | Neptune | 云与杂项 |
jwt cloud url |
| 7 | ♅ | Uranus | 移动端 / IoT |
decompile info permissions instrument adb strings ssl-bypass |
| 8 | 🌋 | Vulcan | 网络侦察与 OSINT |
portscan quickscan whois dns subdomain banner |
| 9 | 🪐 | Titan | 密码攻击 |
brute spray wordlist cewl analyze mutate |
| 10 | ♇ | Pluto | AI 助手 |
suggest analyze cheatsheet |
| 11 | ⟳ | Saturn | 版本控制 |
log diff redo status annotate export |
## 安装
### 选项 1 — pip(推荐)
```
pip install milkyway-ctf
mw
```
一条命令安装 MilkyWay **和所有 Python 安全库**:
`capstone`、`pwntools`、`ROPgadget`、`pycryptodome`、`androguard`、`dnspython`、
`PyJWT`、`paramiko`、`beautifulsoup4`、`sympy`、`pillow`、`passlib` 等。
**核心功能无需单独的 `apt install` 或 `brew install`。**
### 选项 2 — 一行脚本
```
curl -sSL https://raw.githubusercontent.com/kazim-45/milkyway/main/scripts/install.sh | bash
```
可选包含系统工具(nmap、hashcat、binutils…):
```
bash scripts/install.sh --full
```
### 选项 3 — apt(Ubuntu / Kali)
```
sudo add-apt-repository ppa:kazim-45/milkyway
sudo apt update
sudo apt install milkyway-ctf
mw
```
### 选项 4 — Docker(零依赖)
```
docker run -it --rm -v $(pwd):/workspace ghcr.io/kazim-45/milkyway
```
一切预装:所有 Python 库、nmap、hashcat、ffuf、nuclei、binutils、tshark 等。
### 选项 5 — 从源码安装
```
git clone https://github.com/kazim-45/milkyway
cd milkyway
pip install -e ".[dev]"
mw
```
## 快速开始
```
# 启动交互式shell
mw
# 进入Mercury(Web安全)- 停留直到输入b
mw> 1
[mercury] mw> 1 ← fuzz (asks for URL interactively)
[mercury] mw> 2 ← sql
[mercury] mw> b ← back to main menu
# 或直接在任意位置输入命令
mw> venus decode 'aGVsbG8=' --enc base64
mw> earth strings ./suspicious_file --grep flag
mw> jupiter cyclic 200
mw> pluto suggest "I found a base64 string in the HTTP response"
# 查看你尝试过的所有内容
mw> saturn log
mw> saturn redo 42
mw> saturn diff 12 13
# 组织你的工作
mw> challenge new pico_web1 --category web --url https://play.picoctf.org/...
cd ~/milkyway-challenges/pico_web1
mw> challenge note pico_web1 "Found SQL injection at /login"
```
## Shell 导航
MilkyWay Shell 以 SET 和 Metasploit 为模型,有一个关键改进:**你保持在星球内**,直到明确返回。
```
Main menu Planet sub-shell
────────── ────────────────
mw> 1 → [mercury] mw> 1 ← runs fuzz (prompts URL)
→ [mercury] mw> 2 ← runs sql
→ [mercury] mw> fuzz http://site.com/FUZZ ← direct
→ [mercury] mw> b ← back to main menu
mw> 2 → [venus] mw> 1 ← runs identify
→ [venus] mw> 5 ← runs decode
→ [venus] mw> 0 ← back to main menu
```
**在任何星球内:**
- `1`–`N` — 运行该编号命令(交互式参数提示)
- `b` / `back` / `0` — 返回主菜单
- `h` / `help` — 重新显示该星球的命令
- `cmd [args]` — 直接输入任何命令,无需星球前缀
- `planet cmd [args]` — 完全限定的命令也可以工作
## Saturn — Hacking 的版本控制
你运行的每个命令都会自动版本化。
SQLite 数据库位于 `~/.milkyway/global.db`(全局)和 `.milkyway/local.db`(每个挑战)。WAL 模式,并发安全。## 挑战工作区
```
mw> challenge new hackthebox_pwn1 --category pwn --url https://app.hackthebox.com/...
# 自动生成的结构:
~/milkyway-challenges/hackthebox_pwn1/
├── .milkyway/ ← Local Saturn DB + config
├── files/ ← Challenge downloads
├── solutions/
│ └── solve.py ← Pre-filled pwntools template
├── outputs/ ← Tool outputs (linked from Saturn)
├── notes.md ← Your observations
└── README.md ← Auto-generated with metadata
# 在工作时添加笔记
mw> challenge note hackthebox_pwn1 "Binary has no canary — ret2win possible"
# 导航到它
cd $(mw challenge cd hackthebox_pwn1)
```
## 纯 Python 备用实现
即使外部工具未安装,MilkyWay 也能运行**每个命令**。
| 外部工具 | MilkyWay 备用实现 |
|---------------|-------------------|
| `ffuf` | 并发 `urllib` fuzzer — 2000 路径,20 线程 |
| `sqlmap` | 基于错误 + 布尔 SQLi 探测器 — 6 个 payload 家族 |
| `curl` | 通过 `urllib.request` 的完整 HTTP 客户端 |
| `hashcat` / `john` | Python 字典破解器(MD5/SHA1/SHA256/SHA512)|
| `binwalk` | 签名扫描器 — 提取 PNG/JPEG/ZIP/PDF/ELF |
| `xxd` | 16 字节十六进制格式化器 |
| `strings` | 基于 `re` 的字节模式提取器 |
| `steghide` | JPEG/PNG 追加数据扫描器 |
| `tshark` | 基于结构的 `.pcap` 数据包读取器 |
| `objdump` | **capstone** 多架构反汇编器(pip 安装)|
| `checksec` | ELF 头解析器 — NX/PIE/RELRO/Canary/Fortify |
| `ROPgadget` | capstone 返回反向追踪 gadget 查找器 |
| `nmap` | 纯 `socket` 并发端口扫描器 |
| `whois` | 直接 WHOIS socket 查询 |
## Pluto — AI 助手
```
# 基于关键字(始终有效)
mw> pluto suggest "I found a file with no extension, might be an image"
# → earth info, earth carve, earth steg
# 使用Ollama(本地,免费)
ollama pull mistral
mw> config set pluto.backend ollama
mw> pluto suggest "RSA challenge with small e"
# 使用OpenAI
mw> config set pluto.backend openai
mw> config set pluto.openai_api_key sk-...
mw> pluto suggest "JWT token with HS256 and I have the source code"
# 快速参考表
mw> pluto cheatsheet web
mw> pluto cheatsheet crypto
mw> pluto cheatsheet forensics
```
## 配置
```
mw> config show # View all settings
mw> config set challenges_dir ~/ctf # Change challenges directory
mw> config set pluto.backend ollama # AI backend
mw> config set pluto.model mistral # Ollama model
mw> tools # Check tool availability
mw> tools --install # Show install hints for missing tools
```
配置文件位于 `~/.milkyway/config.yaml`。## 架构
```
milkyway/
├── milkyway/
│ ├── cli/
│ │ ├── main.py # Root Click CLI (1,544 lines)
│ │ └── planets/
│ │ ├── mercury.py # Web Security
│ │ ├── venus.py # Cryptography
│ │ ├── earth.py # Forensics
│ │ ├── mars.py # Reverse Engineering
│ │ ├── jupiter.py # Binary Exploitation
│ │ ├── neptune.py # Cloud & Misc
│ │ ├── uranus.py # Mobile / IoT
│ │ ├── vulcan.py # Network Recon
│ │ ├── titan.py # Password Attacks
│ │ └── pluto.py # AI Assistant
│ ├── core/
│ │ ├── db.py # Saturn SQLite engine (509 lines)
│ │ ├── runner.py # Safe subprocess wrapper
│ │ ├── challenge_manager.py # Workspace scaffolding
│ │ └── config.py # YAML config
│ ├── shell.py # Interactive shell v2.1
│ └── tui/app.py # Textual TUI dashboard
├── tests/ # pytest suite
├── debian/ # Debian packaging
├── .github/workflows/ # CI/CD (test + publish)
├── scripts/
│ ├── install.sh
│ ├── publish_pypi.sh
│ └── setup_apt_repo.sh
└── Dockerfile # Full Kali-based image
```
**技术栈:** Python 3.9+ · Click · Rich · Textual · SQLite (WAL) · capstone · pwntools
## 开发
```
# Fork + 克隆
git clone https://github.com/kazim-45/milkyway
cd milkyway
python3 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
# 功能分支工作流
git checkout -b feat/your-feature
# ... 进行更改 ...
pytest tests/ -v
git commit -m "feat(planet): describe your change"
git push origin feat/your-feature
# 在GitHub上打开PR
# 发布
git tag v2.1.0
git push origin v2.1.0 # GitHub Actions → auto-publishes to PyPI
```
完整工作流程见 [`docs/GIT_AND_RELEASE_GUIDE.md`](
**由 [Kazim](https://github.com/kazim-45) 构建 · [github.com/kazim-45/milkyway](https://github.com/kazim-45/milkyway)**
*"并非所有漫游者都迷失了方向 — 有些人只是在 fuzzing。"*
在 GitHub 上给我们加星 — 每一个星标都在帮助构建终极 CTF 工具包。
标签:AI安全, Chat Copilot, CIDR输入, CTF框架, MilkyWay, PE 加载器, Python, TGT, 夺旗比赛, 安全可观测性, 安全培训, 安全竞赛, 攻防演练, 教育平台, 无后门, 无线安全, 模块化, 版本控制, 红队训练, 网络安全, 网络安全审计, 逆向工具, 隐私保护, 靶场平台