Skip to content

Latest commit

Β 

History

59 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

arsenal-ng

Go Version Platform License
Tools Count Commands Count

🎯 Modern pentest command launcher written in Go!

Inspired by arsenal, rewritten from scratch with a focus on simplicity, speed and developer experience.

Basic Search Demo


Installation

Option 1: Go Install

go install -v github.com/halilkirazkaya/arsenal-ng/cmd/arsenal-ng@latest

Requires Go 1.24.0 Ensure $(go env GOPATH)/bin is in your $PATH.

Option 2: Kali Linux (APT)

Kali Linux ships arsenal-ng in its official repositories. Package tracker

sudo apt install arsenal-ng

Option 3: Build from Source Code

git clone https://github.com/halilkirazkaya/arsenal-ng.git
cd arsenal-ng
make build
./bin/arsenal-ng

Alias (Optional)

You can create an alias for quick access (e.g., a):

Zsh:

echo "alias a='arsenal-ng'" >> ~/.zshrc
source ~/.zshrc

Bash:

echo "alias a='arsenal-ng'" >> ~/.bashrc
source ~/.bashrc

Platform Support

Platform Status Notes
Linux βœ… Fully Supported Requires kernel 6.2+ configuration for terminal prefill (see Linux Configuration)
macOS βœ… Fully Supported Works out of the box, no additional configuration needed
Windows ⚠️ WSL Only Native (CMD/PowerShell) is unsupported. Use via WSL.

Linux Configuration

Terminal Prefill Not Working (Linux kernel 6.2+)

arsenal-ng relies on this feature to prefill the terminal buffer. You have two options to enable this functionality, both of which come with security trade-offs.

Option 1: Enable TIOCSTI Globally

The TIOCSTI ioctl is disabled by default in newer Linux kernels for security reasons.

# Temporary (current session only)
sudo sysctl -w dev.tty.legacy_tiocsti=1

# Permanent (survives reboot)
echo "dev.tty.legacy_tiocsti=1" | sudo tee /etc/sysctl.d/99-tiocsti.conf
sudo sysctl --system

Option 2: Grant CAP_SYS_ADMIN Capability

Instead of modifying system-wide settings, you can grant the CAP_SYS_ADMIN capability specifically to the arsenal-ng binary. CAP_SYS_ADMIN is powerful and virtually equivalent to root access. Use this method only if you fully understand the risks.

# Ensure 'setcap' is installed (Debian/Kali/Ubuntu)
sudo apt-get install libcap2-bin

# Grant the required capability to the binary
sudo setcap "cap_sys_admin+ep" $(which arsenal-ng)

Features

Feature Description
⚑ Instant Startup Single binary, no dependencies, launches in milliseconds
πŸ” Smart Search Multi-word fuzzy search across tool names, titles, tags, descriptions, and commands
🎨 Syntax Highlighting Commands are color-coded with syntax highlighting for better readability
🏷️ Colored Tags Each tag has a consistent, distinct color based on hash for quick visual identification
πŸ“ Simple YAML Format Easy to maintain and extend cheatsheets
πŸ”§ Argument System Support for {{arg}} and {{arg|default}} placeholders with auto-completion
🌐 Global Variables Set once, use everywhere - variables auto-fill in all commands
πŸ“Š Tools View Browse all available tools with command counts in a paginated table
πŸ’‘ Command Hints Interactive hints for special commands (set, unset, variables, tools)
❓ Built-in Help Press ? for comprehensive help screen with all shortcuts
πŸ–₯️ Terminal Integration Commands are written to terminal input buffer for easy editing before execution

Usage

Quick Start

# Launch the application
arsenal-ng

# The TUI will open with all available commands
# Use arrow keys to navigate, type to search, Enter to select

The selected command will appear in your terminal input buffer, ready to edit and execute.

Basic Workflow

  1. Search for a command: Type keywords (e.g., nmap scan, ffuf)
  2. Navigate results: Use arrow keys to browse matching commands
  3. Select command: Press Enter on the desired command
  4. Fill arguments: If the command has {{placeholders}}, fill them in
  5. Execute: Press Enter to write the command to your terminal

Example Session

# 1. Launch arsenal-ng
arsenal-ng

# 2. Set global variables (type in search box)
set target=10.10.10.10

# 3. Search for nmap commands
nmap

# 4. Select "nmap - syn stealth scan"
# The {{target}} placeholder is auto-filled with 10.10.10.10!

# 5. Command appears in terminal:
nmap -sS 10.10.10.10

# 6. Edit if needed, then press Enter to execute

Keyboard Shortcuts

Main Search View

Key Action
↑ / ↓ Navigate up/down in the list
Ctrl+P / Ctrl+N Navigate list (vim-style)
PgUp / PgDown Jump one page up/down
Enter Select highlighted command or execute special command
Esc / Ctrl+C Exit application
? Show help screen
q Quit (in some views)

Argument Input View

Key Action
Tab / ↓ Move to next argument field
Shift+Tab / ↑ Move to previous argument field
Enter Execute command with filled arguments
Esc Go back to search view

Tools View

Tools View Demo

Key Action
↑ / ↓ Navigate table rows
← / β†’ or h / l Change page (previous/next)
Enter / Esc Go back to search view

Help Views

Help Screen Demo

Key Action
Enter / Esc Go back to search view

Global Variables

Set variables once and reuse them across all commands in your session. Variables automatically pre-fill argument fields in commands.

Special Commands

Command Description
set key=value Set a global variable (e.g., set ip=10.10.10.10)
unset key Remove a global variable
variables List all currently set variables
tools Show all available tools with command counts
help Display comprehensive help screen

How it works

Variables Demo

  1. Type set ip=10.10.10.10 and press Enter
  2. Select any command with {{ip}} placeholder
  3. The ip field will be pre-filled automatically with 10.10.10.10
  4. You can still edit the pre-filled value if needed
  5. Variables persist throughout your session until you exit or unset them

Example Workflow

# Set common variables at the start of your session
set ip=10.10.10.10
set domain=corp.local
set user=administrator

# Now select any command - arguments will auto-fill!
# Before: nmap -sV {{ip}}
# After:  nmap -sV 10.10.10.10  (auto-filled!)

# View all variables
variables

# Remove a variable when done
unset ip

Common Variables

Variable Description
ip Target IP address
domain Target domain
user Username
pass Password
hash NTLM hash
url Target URL
port Port number
lhost Local host (your IP)
lport Local port
wordlist Wordlist path
output Output file name

Cheat File Format

Add your own commands by creating YAML files in internal/loader/cheat-files/:

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}}"

Argument Syntax

Syntax Description Example
{{arg}} Required argument (user must fill) {{ip}}
{{arg|default}} Argument with default value (can be edited) {{port|8080}}

File Structure

  • tool: Tool name (e.g., nmap, ffuf, gobuster)
  • tags: Array of tags for categorization (e.g., [recon, scan, network])
  • actions: List of command entries
    • title: Display name shown in the list
    • desc: Optional description (shown in info box)
    • command: Command template with {{placeholders}}

Tips

  • Use descriptive titles that make it easy to find commands
  • Add relevant tags for better searchability
  • Use default values for commonly used options
  • Global variables will auto-fill matching argument names

Development

Prerequisites

  • Go 1.24.0 or higher
  • Make (optional, for using Makefile)

Building from Source

git clone https://github.com/halilkirazkaya/arsenal-ng.git
cd arsenal-ng
make build
# Binary will be in ./bin/arsenal-ng

Or build directly with Go:

go build -o bin/arsenal-ng ./cmd/arsenal-ng

Adding New Tools

  1. Create a new YAML file in internal/loader/cheat-files/
  2. Follow the format above (see Cheat File Format)
  3. Rebuild: make build

Testing

After making changes, rebuild and test:

make build
./bin/arsenal-ng

Contributing Guidelines

  • Follow Go code style conventions
  • Keep YAML files organized and well-documented
  • Add descriptive titles and tags to commands
  • Test your changes before submitting PRs

Features

This project is open source and contributions are welcome!

How to Contribute

  • πŸ”§ Add a tool: Create a YAML file in internal/loader/cheat-files/ and submit a PR
  • πŸ› Report bugs: Open an issue with details about the problem
  • πŸ’‘ Suggest features: Share your ideas for improvements
  • πŸ“ Improve documentation: Help make the README and code comments better
  • ⭐ Star the project: Show your support!

Adding Cheat Sheets

The easiest way to contribute is by adding new cheat sheet YAML files:

  1. Fork the repository
  2. Add your YAML file(s) to internal/loader/cheat-files/
  3. Follow the existing format and style
  4. Test your changes locally
  5. Submit a pull request

See Cheat File Format for details.


Made with ❀️ and Bubble Tea

About

The classic launcher, evolved. Fast, Go-based command library equipped with 200+ cybersecurity cheat-sheets. Just install and start hacking.

Topics

Resources

Stars

706 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages