
Un modo leggermente meno 'hackeristico' per intercettare e modificare protocolli non-HTTP tramite Burp e altri.
Un modo leggermente meno "hackish" per intercettare e modificare protocolli non HTTP tramite Burp e altri, con supporto all'intercettazione SSL e TLS. Questo strumento è pensato per ricercatori e penetration tester applicativi che eseguono valutazioni della sicurezza di client "thick".
Una versione migliorata del fantastico progetto mitm_relay.
Come parte del nostro lavoro nel dipartimento di ricerca di CyberArk Labs, avevamo bisogno di un modo per ispezionare la comunicazione SSL e TLS su TCP e avere la possibilità di modificare il contenuto dei pacchetti al volo. Esistono molti modi per farlo (ad esempio, la nota estensione Burp Suite NoPE), ma nessuno di questi funzionava per noi in alcuni casi. Alla fine ci siamo imbattuti in mitm_relay.
mitm_relay è un modo rapido e semplice per eseguire MITM di qualsiasi protocollo basato su TCP attraverso software di intercettazione HTTP esistenti, come il proxy di Burp Suite. È particolarmente utile per le valutazioni di sicurezza dei client thick. Ma non funzionava completamente per noi, quindi abbiamo dovuto personalizzarlo. Dopo molte personalizzazioni, ogni nuova modifica richiedeva molto lavoro e abbiamo finito per riscrivere tutto in modo più modulare.
Speriamo che altri trovino utile questo script e che l'aggiunta di funzionalità sia semplice.
Per iniziare, è necessario configurare gli indirizzi e le porte dei listener. Per ogni listener, è necessario configurare anche un target (indirizzo e porta). Ogni dato ricevuto dal listener verrà inserito nel corpo di una richiesta HTTP POST con l'URL che contiene "CLIENT_REQUEST". Ogni dato ricevuto dal target verrà inserito nel corpo di una richiesta HTTP POST con l'URL che contiene "SERVER_RESPONSE". Queste richieste vengono inviate a un server di intercettazione HTTP locale.
È possibile configurare un proxy HTTP e utilizzare uno strumento come burp suite come strumento di intercettazione HTTP e visualizzare i messaggi lì. In questo modo, è facile modificare i messaggi utilizzando le funzioni "Match and Replace" di Burp, le estensioni o anche manualmente (Ricorda, il meccanismo di timeout del protocollo intercettato può essere molto breve).
Un altro modo per modificare i messaggi è utilizzare uno script Python che il server di intercettazione HTTP eseguirà quando riceve messaggi.
Il corpo dei messaggi inviati al server di intercettazione HTTP verrà stampato nella shell. I messaggi verranno stampati dopo le modifiche se viene fornito lo script di modifica. Dopo tutte le modifiche, il server di intercettazione risponderà anche con il corpo della risposta HTTP.
Per decrittare la comunicazione SSL/TLS, è necessario fornire a mitm_intercept un certificato e una chiave che il client accetterà quando avvia un handshake con il listener. Se il server target richiede un certificato specifico per l'handshake, è possibile fornire un certificato e una chiave.
Un piccolo diagramma per mostrare il flusso tipico del traffico:

mitm_intercept è compatibile con versioni più recenti di Python 3 (Python 3.9) ed è anche compatibile con Windows (ad esempio, socket.MSG_DONTWAIT non esiste in Windows). Abbiamo mantenuto l'opzione di utilizzare "STARTTLS", che abbiamo chiamato modalità "Mixed". L'uso del file di log delle chiavi SSL è aggiornato (l'opzione integrata per usarlo è nuova da Python 3.8) e abbiamo aggiunto l'opzione per cambiare l'intestazione SNI. Ora, la gestione della comunicazione in entrata e in uscita è effettuata da socketserver, e tutti i dati vengono inviati a una sottoclasse di ThreadingHTTPServer che gestisce la rappresentazione e la modifica dei dati. In questo modo, è possibile vedere le modifiche applicate dallo script di modifica nella risposta (comodo per usare Burp). Inoltre, ora possiamo cambiare i cipher disponibili che lo script utilizza utilizzando il formato della lista cipher di OpenSSL
$ python -m pip install requestsusage: mitm_intercept.py [-h] [-m] -l [u|t:]<interface>:<port> [[u|t:]<interface>:<port> ...] -t
[u|t:]<addr>:<port> [[u|t:]<addr>:<port> ...] [-lc <cert_path>]
[-lk <key_path>] [-tc <cert_path>] [-tk <key_path>] [-w <interface>:<port>]
[-p <addr>:<port>] [-s <script_path>] [--sni <server_name>]
[-tv <defualt|tls12|tls11|ssl3|tls1|ssl2>] [-ci <ciphers>]
mitm_intercept version 1.6