
Piattaforma post-sfruttamento che automatizza enumerazione, escalation dei privilegi, persistenza e operazioni C2 tramite reverse/bind shell con supporto cross-platform per Linux e Windows.
pwncat è una piattaforma di post-exploitation per obiettivi Linux. È nata come un wrapper attorno a semplici bind e reverse shell e da lì è cresciuta. Semplifica le comuni operazioni di red team mentre prepara il codice dalla tua macchina attaccante, non dal bersaglio.
pwncat in precedenza supportava solo Linux, ma ultimamente c'è stato molto lavoro per supportare più piattaforme. Al momento, c'è un supporto alpha per obiettivi Windows. Consulta l'ultima documentazione per i dettagli su come usare pwncat con un obiettivo Windows.
pwncat intercetta la comunicazione grezza con una shell remota e permette all'utente di eseguire azioni automatizzate sull'host remoto, tra cui enumerazione, installazione di implant e persino escalation dei privilegi.
Dopo aver ricevuto una connessione, pwncat configurerà alcune impostazioni comuni per lavorare con shell remote.
which)pwncat sa come generare pty con alcuni metodi diversi e incrocerà i metodi con gli eseguibili precedentemente enumerati. Dopo aver generato un pty, imposterà il terminale di controllo in modalità raw, così potrai interagire in modo simile a ssh.
pwncat sincronizzerà anche le impostazioni del pty remoto (come righe, colonne, variabile d'ambiente TERM) con le tue impostazioni locali per garantire che la shell si comporti correttamente con applicazioni interattive come vim o nano.
John Hammond e io abbiamo presentato pwncat al GRIMMCon. La nostra presentazione, che si può trovare su YouTube qui. Questo video mostra una versione iniziale dell'API e dell'interfaccia. Fai riferimento alla documentazione per l'uso aggiornato e la documentazione dell'API!
La documentazione di pwncat è in fase di sviluppo su Read the Docs. Vai lì per la documentazione più recente sull'uso e lo sviluppo!
pwncat richiede Python 3.9+ su Linux
pwncat dipende solo da un ambiente di sviluppo Python funzionante su Linux. Per installare alcuni dei pacchetti richiesti con pip, probabilmente avrai bisogno del pacchetto "Python Development" della tua distribuzione. Su sistemi basati su Debian, questo è python-dev. Per Arch, i file di sviluppo sono inclusi nel repository principale di Python. Per Enterprise Linux, il pacchetto si chiama python-devel.
pwncat è pubblicato su PyPI con il nome pwncat-cs, e può essere installato con pip in questo modo:
pip install pwncat-cs
Tuttavia, si consiglia di installare pwncat da un ambiente virtuale.
python3 -m venv pwncat-env
source pwncat-env/bin/activate
pip install pwncat-cs
Per un ambiente di sviluppo, pwncat utilizza Python Poetry. Puoi clonare il repository localmente e usare poetry per configurare un ambiente di sviluppo.
# Setup pwncat inside a poetry-managed virtual environment
git clone [email protected]:calebstewart/pwncat.git
cd pwncat
poetry install
# Enter the virtual environment
poetry shell
A causa del conflitto di nome con pwncat di Cytopia, ho deciso di rinominare il pacchetto in pwncat-cs. Ciò include la ridenominazione del punto di ingresso in modo che non vi siano conflitti diretti con il progetto di Cytopia. Se stai effettuando l'aggiornamento da v0.4.*, il nome del comando ora sarà cambiato e le varianti pcat e pc sono state rimosse. Vedi le note di rilascio più recenti per maggiori dettagli.
Il vantaggio aggiuntivo di questa mossa è che il progetto ora è pubblicato su PyPI per facilitare l'installazione/aggiornamento in futuro.
pwncat ora supporta connessioni da obiettivi Windows a partire da v0.4.0a1. La piattaforma Windows utilizza una libreria C2 basata su .Net che viene caricata automaticamente. Gli obiettivi Windows dovrebbero connettersi con una shell cmd.exe o powershell.exe, e pwncat si occuperà del resto.
Le librerie che implementano il C2 sono implementate in pwncat-windows-c2. I DLL per il C2 verranno scaricati automaticamente dalla release target per te. Se non hai connettività internet sulla macchina target, puoi dire a pwncat di pre-caricare i DLL usando l'argomento --download-plugins. Se stai eseguendo una versione rilasciata di pwncat, puoi anche scaricare un tarball di tutti i plugin incorporati dalla pagina delle release.
I plugin sono memorizzati per default in ~/.local/share/pwncat, tuttavia ciò è configurabile con la configurazione plugin_path. Se scarichi il set di plugin impacchettato dalla pagina delle release, dovresti estrarlo nel percorso indicato da plugin_path.
Oltre ai DLL principali del C2, possono essere disponibili anche altri plugin. Attualmente, gli unici plugin predefiniti forniti sono il C2 e un'implementazione di BadPotato. pwncat può caricare riflessivamente binari .Net da usare come plugin per il C2. Per maggiori informazioni sui plugin C2 per Windows, consulta la documentazione.
Recentemente, l'architettura del framework pwncat è stata riprogettata per incorporare una struttura generica di "moduli". Tutte le funzionalità sono ora implementate come moduli. Ciò include enumerazione, persistenza ed escalation dei privilegi. Interagire con i moduli è simile alla maggior parte delle altre piattaforme di post-exploitation. Puoi utilizzare i familiari comandi run, search e info ed entrare nei contesti dei moduli con il comando use. Fare riferimento alla documentazione per maggiori informazioni.
L'installazione su BlackArch è semplice come:
pacman -Syu pwncat-caleb
I parametri della riga di comando per pwncat cercano di essere flessibili e accettano una varietà di sintassi di connessione comuni. Nello specifico, tenterà di accettare sintassi simili a netcat e ssh. I seguenti sono tutti validi:
# Connect to a bind shell
pwncat-cs connect://10.10.10.10:4444
pwncat-cs 10.10.10.10:4444
pwncat-cs 10.10.10.10 4444
# Listen for reverse shell
pwncat-cs bind://0.0.0.0:4444
pwncat-cs 0.0.0.0:4444
pwncat-cs :4444
pwncat-cs -lp 4444
# Connect via ssh
pwncat-cs ssh://user:[email protected]
pwncat-cs [email protected]
pwncat-cs user:[email protected]
pwncat-cs -i id_rsa [email protected]
# SSH w/ non-standard port
pwncat-cs -p 2222 [email protected]
pwncat-cs [email protected]:2222
# Reconnect utilizing installed persistence
# If reconnection fails and no protocol is specified,
# SSH is used as a fallback.
pwncat-cs reconnect://[email protected]
pwncat-cs reconnect://user@c228fc49e515628a0c13bdc4759a12bf
pwncat-cs [email protected]
pwncat-cs c228fc49e515628a0c13bdc4759a12bf
pwncat-cs 10.10.10.10
Per default, pwncat assume che la piattaforma target sia Linux. Per connettersi a una reverse o bind shell di Windows, devi passare l'argomento --platform/-m:
pwncat-cs -m windows 10.10.10.10 4444
pwncat-cs -m windows -lp 4444
Per maggiori informazioni sulla sintassi e la gestione degli argomenti, consulta le informazioni di aiuto con pwncat-cs --help o visita la documentazione.
Il metodo di installazione consigliato è un ambiente virtuale Python. Questo offre l'uso quotidiano più semplice di pwncat. Tuttavia, c'è stato interesse nell'usare pwncat da un'immagine docker, quindi ho fornito un Dockerfile che fornisce un'installazione funzionante di pwncat. Per costruire l'immagine usa:
docker build -t pwncat .
Questo costruirà l'immagine docker di pwncat con il tag "pwncat". La directory di lavoro all'interno del contenitore è /work. Il punto di ingresso per il contenitore è il binario pwncat. Può essere usato in questo modo:
# Connect to a bind shell at 10.0.0.1:4444
docker run -v "/some/directory":/work -t pwncat 10.0.0.1 4444
In questo esempio, solo i file in /some/directory sono esposti al contenitore. Ovviamente, per caricamenti/scaricamenti, il contenitore potrà vedere solo i file esposti attraverso le directory montate.
pwncat fornisce due funzionalità principali. Al suo cuore, il suo scopo è configurare automaticamente un PseudoTerminale remoto (pty) che permette l'interazione con l'host remoto molto simile a una sessione SSH completa. Quando si opera in un pty, puoi usare le caratteristiche comuni della tua shell remota come cronologia, editing di linea e applicazioni terminali grafiche.
L'altra metà di pwncat è un framework che utilizza la tua shell remota per eseguire compiti automatizzati di enumerazione, persistenza ed escalation dei privilegi. Il prompt locale di pwncat fornisce una serie di funzionalità utili per test di penetrazione standard tra cui:
pwncat offre anche la possibilità di annullare automaticamente queste "manomissioni" remoteIl framework sottostante per interagire con l'host remoto mira ad astrarre il più possibile la shell e il metodo di connessione sottostanti, consentendo ai comandi e ai plugin di interagire senza problemi con l'host remoto.
Puoi saperne di più sull'interazione con pwncat e sul framework sottostante nella documentazione. Se hai un'idea per un nuovo metodo di escalation dei privilegi o di persistenza, dai un'occhiata alla documentazione dell'API in particolare. I pull request sono benvenuti!
pwncat vorrebbe diventare un coltellino svizzero per il red team. Si spera che presto vengano aggiunte più funzionalità.
Poiché pwncat cerca di interagire in modo astratto con qualsiasi shell con dipendenze di sistema remote minime, ci sono alcuni casi limite che abbiamo trovato. Dove li troviamo, facciamo tutto il possibile per gestirli e nasconderli all'utente. Tuttavia, alcuni sono sfuggiti e sono stati osservati in natura. Quando ciò accade, pwncat farà tutto il possibile per preservare il tuo terminale, ma potresti essere accolto da output peculiari o fallimenti di comandi.
Sebbene BSD sia un kernel basato su Unix, in pratica i suoi strumenti userland sono notevolmente diversi dalle loro controparti Linux. A causa di ciò, molte delle funzionalità automatizzate di pwncat non funzioneranno o falliranno del tutto quando vengono eseguite contro un target basato su BSD. Ho cercato di catturare tutti gli errori o i casi limite, tuttavia è probabile che ci siano alcuni intoppi che non sono stati completamente testati su BSD. In ogni caso, la shell stabilizzata dovrebbe funzionare in un ambiente BSD, ma non fornisco alcuna garanzia.
Se trovo del tempo più avanti, potrei provare a stabilizzare pwncat su BSD, ma per ora il mio focus è sulle distribuzioni basate su Linux. Se desideri contribuire a far sì che pwncat si comporti meglio su BSD, sei più che benvenuto a contattarmi o semplicemente a fare un fork del repository. Come sempre, i pull request sono benvenuti!