halilkirazkaya/arsenal-ng
GitHub: halilkirazkaya/arsenal-ng
一个用 Go 编写的渗透测试命令速查启动器,内置 200 多份安全速查表,通过模糊搜索和全局变量快速填充并执行命令。
Stars: 112 | Forks: 13
arsenal-ng
🎯 用 Go 编写的现代渗透测试命令启动器!
灵感源自 arsenal,从零重写,专注于简洁性、速度和开发者体验。
## 📦 安装
### 选项 1:Go Install
```
go install -v github.com/halilkirazkaya/arsenal-ng/cmd/arsenal-ng@latest
```
### 选项 2:从源码构建
```
git clone https://github.com/halilkirazkaya/arsenal-ng.git
cd arsenal-ng
make build
./bin/arsenal-ng
```
### 别名 (可选)
您可以创建一个别名以便快速访问(例如 `a`):
**Zsh:**
```
echo "alias a='arsenal-ng'" >> ~/.zshrc
source ~/.zshrc
```
**Bash:**
```
echo "alias a='arsenal-ng'" >> ~/.bashrc
source ~/.bashrc
```
## 🖥️ 平台支持
| 平台 | 状态 | 备注 |
|----------|--------|-------|
| **Linux** | ✅ 完全支持 | 终端预填需要 6.2+ 内核配置(参见 [故障排除](#-troubleshooting)) |
| **macOS** | ✅ 完全支持 | 开箱即用,无需额外配置 |
| **Windows** | ⚠️ 仅限 WSL | 原生 (CMD/PowerShell) **不支持**。请通过 **WSL** 使用。 |
## ✨ 功能特性
| 功能 | 描述 |
|---------|-------------|
| ⚡ **即时启动** | 单一二进制文件,无依赖,毫秒级启动 |
| 🔍 **智能搜索** | 支持跨工具名称、标题、标签、描述和命令的多词模糊搜索 |
| 🎨 **语法高亮** | 命令带有颜色编码的语法高亮,可读性更强 |
| 🏷️ **彩色标签** | 每个标签基于哈希拥有一致且独特的颜色,便于快速视觉识别 |
| 📝 **简洁 YAML 格式** | 易于维护和扩展速查表 |
| 🔧 **参数系统** | 支持 `{{arg}}` 和 `{{arg\|default}}` 占位符及自动补全 |
| 🌐 **全局变量** | 一次设置,处处可用 - 变量在所有命令中自动填充 |
| 📊 **工具视图** | 在分页表格中浏览所有可用工具及其命令计数 |
| 💡 **命令提示** | 针对特殊命令(`set`、`unset`、`variables`、`tools`)的交互式提示 |
| ❓ **内置帮助** | 按 `?` 查看包含所有快捷键的全面帮助屏幕 |
| 🖥️ **终端集成** | 命令被写入终端输入缓冲区,便于执行前编辑 |
## 🚀 使用方法
### 快速开始
```
# 启动应用程序
arsenal-ng
# TUI 将打开并显示所有可用命令
# 使用方向键导航,输入以搜索,Enter 键选择
```
选中的命令将出现在您的终端输入缓冲区中,随时可以编辑和执行。
### 基本工作流
1. **搜索命令**:输入关键词(例如 `nmap scan`、`ffuf`)
2. **浏览结果**:使用方向键浏览匹配的命令
3. **选择命令**:在所需命令上按 Enter
4. **填充参数**:如果命令包含 `{{placeholders}}`,请填充它们
5. **执行**:按 Enter 将命令写入您的终端
### 示例会话
```
# 1. 启动 arsenal-ng
arsenal-ng
# 2. 设置全局变量(在搜索框中输入)
set target=10.10.10.10
# 3. 搜索 nmap 命令
nmap
# 4. 选择 "nmap - syn stealth scan"
# {{target}} 占位符会自动填充为 10.10.10.10!
# 5. 命令显示在终端中:
nmap -sS 10.10.10.10
# 6. 根据需要编辑,然后按 Enter 键执行
```
### 键盘快捷键
#### 主搜索视图
| 按键 | 动作 |
|-----|--------|
| `↑` / `↓` | 在列表中上/下导航 |
| `Ctrl+P` / `Ctrl+N` | 列表导航 (vim 风格) |
| `PgUp` / `PgDown` | 向上/向下跳转一页 |
| `Enter` | 选中所选命令或执行特殊命令 |
| `Esc` / `Ctrl+C` | 退出应用程序 |
| `?` | 显示帮助屏幕 |
| `q` | 退出 (在某些视图中) |
#### 参数输入视图
| 按键 | 动作 |
|-----|--------|
| `Tab` / `↓` | 移动到下一个参数字段 |
| `Shift+Tab` / `↑` | 移动到上一个参数字段 |
| `Enter` | 使用填充的参数执行命令 |
| `Esc` | 返回搜索视图 |
#### 工具视图
| 按键 | 动作 |
|-----|--------|
| `↑` / `↓` | 导航表格行 |
| `←` / `→` 或 `h` / `l` | 切换页面 (上一页/下一页) |
| `Enter` / `Esc` | 返回搜索视图 |
#### 帮助视图
| 按键 | 动作 |
|-----|--------|
| `Enter` / `Esc` | 返回搜索视图 |
## 🌐 全局变量
在会话中设置一次变量,即可在所有命令中复用。变量会自动预填充到命令的参数字段中。
### 特殊命令
| 命令 | 描述 |
|---------|-------------|
| `set key=value` | 设置全局变量(例如 `set ip=10.10.10.10`) |
| `unset key` | 移除全局变量 |
| `variables` | 列出所有当前设置的变量 |
| `tools` | 显示所有可用工具及其命令计数 |
| `help` | 显示全面的帮助屏幕 |
### 工作原理
1. 输入 `set ip=10.10.10.10` 并按 Enter
2. 选择任何带有 `{{ip}}` 占位符的命令
3. `ip` 字段将自动**预填充**为 `10.10.10.10`
4. 如有需要,您仍可编辑预填充的值
5. 变量在您的会话期间持续有效,直到您退出或取消设置
### 示例工作流
```
# 在会话开始时设置常用变量
set ip=10.10.10.10
set domain=corp.local
set user=administrator
# 现在选择任何命令 - 参数将自动填充!
# 之前: nmap -sV {{ip}}
# 之后: nmap -sV 10.10.10.10 (自动填充!)
# 查看所有变量
variables
# 完成后移除变量
unset ip
```
### 常用变量
| 变量 | 描述 |
|----------|-------------|
| `ip` | 目标 IP 地址 |
| `domain` | 目标域名 |
| `user` | 用户名 |
| `pass` | 密码 |
| `hash` | NTLM 哈希 |
| `url` | 目标 URL |
| `port` | 端口号 |
| `lhost` | 本地主机 (您的 IP) |
| `lport` | 本地端口 |
| `wordlist` | 字典路径 |
| `output` | 输出文件名 |
## 📄 速查文件格式
通过在 `internal/loader/cheat-files/` 中创建 YAML 文件来添加您自己的命令:
```
tool: mytool
tags: [recon, web, custom]
actions:
- title: mytool - basic scan
desc: Performs a basic scan against the target
command: "mytool scan {{target}}"
- title: mytool - scan with multiple arguments
desc: Advanced scan with IP, port, and output file
command: "mytool scan -t {{ip}} -p {{port|443}} -o {{output|scan.log}}"
```
### 参数语法
| 语法 | 描述 | 示例 |
|--------|-------------|---------|
| `{{arg}}` | 必需参数(用户必须填充) | `{{ip}}` |
| `{{arg\|default}}` | 带默认值的参数(可编辑) | `{{port\|8080}}` |
### 文件结构
- **tool**:工具名称(例如 `nmap`、`ffuf`、`gobuster`)
- **tags**:用于分类的标签数组(例如 `[recon, scan, network]`)
- **actions**:命令条目列表
- **title**:列表中显示的名称
- **desc**:可选描述(显示在信息框中)
- **command**:带有 `{{placeholders}}` 的命令模板
### 技巧
- 使用描述性标题,便于查找命令
- 添加相关标签以提高可搜索性
- 为常用选项使用默认值
- 全局变量将自动填充匹配的参数名称
## 🔧 开发
### 环境要求
- Go 1.24.0 或更高版本
- Make(可选,用于使用 Makefile)
### 从源码构建
```
git clone https://github.com/halilkirazkaya/arsenal-ng.git
cd arsenal-ng
make build
# Binary 将位于 ./bin/arsenal-ng
```
或直接使用 Go 构建:
```
go build -o bin/arsenal-ng ./cmd/arsenal-ng
```
### 添加新工具
1. 在 `internal/loader/cheat-files/` 中创建新的 YAML 文件
2. 遵循上述格式(参见 [速查文件格式](#-cheat-file-format))
3. 重新构建:`make build`
### 测试
进行更改后,重新构建并测试:
```
make build
./bin/arsenal-ng
```
### 贡献指南
- 遵循 Go 代码风格约定
- 保持 YAML 文件条理清晰且文档完善
- 为命令添加描述性标题和标签
- 在提交 PR 前测试您的更改
## ⚠️ 故障排除
### 终端预填不工作 (Linux kernel 6.2+)
`arsenal-ng` 依赖此功能来预填终端缓冲区。您有两种选项来启用此功能,两者都涉及安全权衡。
#### 选项 1:全局启用 TIOCSTI
出于安全原因,TIOCSTI ioctl 在较新的 Linux 内核中默认禁用。
```
# 临时(仅当前会话)
sudo sysctl -w dev.tty.legacy_tiocsti=1
# 永久(重启后保留)
echo "dev.tty.legacy_tiocsti=1" | sudo tee /etc/sysctl.d/99-tiocsti.conf
sudo sysctl --system
```
#### 选项 2:授予 CAP_SYS_ADMIN 权能
您可以不修改系统范围的设置,而是专门向 arsenal-ng 二进制文件授予 `CAP_SYS_ADMIN` 权能。
CAP_SYS_ADMIN 功能强大,实际上等同于 `root` 访问权限。仅在您完全了解风险的情况下使用此方法。
```
# 确保已安装 'setcap' (Debian/Kali/Ubuntu)
sudo apt-get install libcap2-bin
# 授予 binary 所需的 capability
sudo setcap "cap_sys_admin+ep" $(which arsenal-ng)
```
## 🤝 贡献
本项目是**开源**的,欢迎贡献!
### 如何贡献
- 🔧 **添加工具**:在 `internal/loader/cheat-files/` 中创建 YAML 文件并提交 PR
- 🐛 **报告错误**:开一个 Issue 详细说明问题
- 💡 **建议功能**:分享您的改进想法
- 📝 **改进文档**:帮助完善 README 和代码注释
- ⭐ **Star 本项目**:表示您的支持!
### 添加速查表
贡献的最简单方式是添加新的速查表 YAML 文件:
1. Fork 本仓库
2. 将您的 YAML 文件添加到 `internal/loader/cheat-files/`
3. 遵循现有格式和风格
4. 在本地测试您的更改
5. 提交 Pull Request
详情参见 [速查文件格式](#-cheat-file-format)。
用 ❤️ 和 Bubble Tea 制作
标签:CLI, EVTX分析, Go, RedTeam, Ruby工具, WiFi技术, 命令启动器, 威胁情报, 安全管理, 开发者工具, 开源, 攻击路径可视化, 效率工具, 日志审计, 网络安全, 网络调试, 自动化, 速查表, 隐私保护, 黑客工具