halilkirazkaya/arsenal-ng

GitHub: halilkirazkaya/arsenal-ng

一个用 Go 编写的渗透测试命令速查启动器,内置 200 多份安全速查表,通过模糊搜索和全局变量快速填充并执行命令。

Stars: 112 | Forks: 13

arsenal-ng

Go Version Platform License
Tools Count Commands Count

🎯 用 Go 编写的现代渗透测试命令启动器!

灵感源自 arsenal,从零重写,专注于简洁性、速度和开发者体验。

Basic Search Demo

## 📦 安装 ### 选项 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` | 返回搜索视图 | #### 工具视图

Tools View Demo

| 按键 | 动作 | |-----|--------| | `↑` / `↓` | 导航表格行 | | `←` / `→` 或 `h` / `l` | 切换页面 (上一页/下一页) | | `Enter` / `Esc` | 返回搜索视图 | #### 帮助视图

Help Screen Demo

| 按键 | 动作 | |-----|--------| | `Enter` / `Esc` | 返回搜索视图 | ## 🌐 全局变量 在会话中设置一次变量,即可在所有命令中复用。变量会自动预填充到命令的参数字段中。 ### 特殊命令 | 命令 | 描述 | |---------|-------------| | `set key=value` | 设置全局变量(例如 `set ip=10.10.10.10`) | | `unset key` | 移除全局变量 | | `variables` | 列出所有当前设置的变量 | | `tools` | 显示所有可用工具及其命令计数 | | `help` | 显示全面的帮助屏幕 | ### 工作原理

Variables Demo

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技术, 命令启动器, 威胁情报, 安全管理, 开发者工具, 开源, 攻击路径可视化, 效率工具, 日志审计, 网络安全, 网络调试, 自动化, 速查表, 隐私保护, 黑客工具