Dieses Tool öffnet einen Listening-Socket, empfängt Daten und leitet diese Daten dann über eine Kette von Proxy-Modulen. Nachdem die Module fertig sind, werden die resultierenden Daten an den Zielserver gesendet. Die Antwort wird empfangen und durchläuft erneut eine Modulkette, bevor die endgültigen Daten an den Client zurückgesendet werden. Um die Daten abzufangen, müssen Sie entweder das Gateway sein oder eine Art Man-in-the-Middle-Angriff durchführen. Richten Sie iptables so ein, dass die PREROUTING-Kette das Ziel ändert und an den Proxy-Prozess sendet. Der Proxy sendet die Daten dann an das angegebene Ziel weiter.
Dieses Tool ist von dem TCP-Proxy-Beispiel inspiriert und basiert teilweise darauf, das in Justin Seitz‘ Buch „Black Hat Python“ von no starch press verwendet wird.
$ ./tcpproxy.py -h
usage: tcpproxy.py [-h] [-ti TARGET_IP] [-tp TARGET_PORT] [-li LISTEN_IP]
[-lp LISTEN_PORT] [-pi PROXY_IP] [-pp PROXY_PORT]
[-pt {SOCKS4,SOCKS5,HTTP}] [-om OUT_MODULES]
[-im IN_MODULES] [-v] [-n] [-l LOGFILE] [--list]
[-lo HELP_MODULES] [-s] [-sc SERVER_CERTIFICATE]
[-sk SERVER_KEY] [-cc CLIENT_CERTIFICATE] [-ck CLIENT_KEY]
Simple TCP proxy for data interception and modification. Select modules to
handle the intercepted traffic.
optional arguments:
-h, --help show this help message and exit
-ti TARGET_IP, --targetip TARGET_IP
remote target IP or host name
-tp TARGET_PORT, --targetport TARGET_PORT
remote target port
-li LISTEN_IP, --listenip LISTEN_IP
IP address/host name to listen for incoming data
-lp LISTEN_PORT, --listenport LISTEN_PORT
port to listen on
-pi PROXY_IP, --proxy-ip PROXY_IP
IP address/host name of proxy
-pp PROXY_PORT, --proxy-port PROXY_PORT
proxy port
-pt {SOCKS4,SOCKS5,HTTP}, --proxy-type {SOCKS4,SOCKS5,HTTP}
proxy type. Options are SOCKS5 (default), SOCKS4, HTTP
-om OUT_MODULES, --outmodules OUT_MODULES
comma-separated list of modules to modify data before
sending to remote target.
-im IN_MODULES, --inmodules IN_MODULES
comma-separated list of modules to modify data
received from the remote target.
-v, --verbose More verbose output of status information
-n, --no-chain Don't send output from one module to the next one
-l LOGFILE, --log LOGFILE
Log all data to a file before modules are run.
--list list available modules
-lo HELP_MODULES, --list-options HELP_MODULES
Print help of selected module
-s, --ssl detect SSL/TLS as well as STARTTLS
-sc SERVER_CERTIFICATE, --server-certificate SERVER_CERTIFICATE
server certificate in PEM format (default: mitm.pem)
-sk SERVER_KEY, --server-key SERVER_KEY
server key in PEM format (default: mitm.pem)
-cc CLIENT_CERTIFICATE, --client-certificate CLIENT_CERTIFICATE
client certificate in PEM format in case client
authentication is required by the target
-ck CLIENT_KEY, --client-key CLIENT_KEY
client key in PEM format in case client authentication
is required by the target
Sie müssen TARGET_IP und TARGET_PORT angeben, die Standard-Abhöreinstellungen sind 0.0.0.0:8080. Damit das Programm tatsächlich nützlich ist, müssen Sie entscheiden, welche Module Sie für den ausgehenden (Client-zu-Server) und eingehenden (Server-zu-Client) Datenverkehr verwenden möchten. Sie können für jede Richtung unterschiedliche Module verwenden. Übergeben Sie die Liste der Module als durch Kommas getrennte Liste, z. B. -im mod1,mod4,mod2. Die Daten werden an das erste Modul übergeben, die zurückgegebenen Daten werden an das zweite Modul übergeben und so weiter, es sei denn, Sie verwenden den Schalter -n/--no/chain. In diesem Fall erhält jedes Modul die Originaldaten. Sie können auch Optionen an jedes Modul übergeben: -im mod1:key1=val1,mod4,mod2:key1=val1:key2=val2. Um zu erfahren, welche Optionen Sie an ein Modul übergeben können, verwenden Sie -lo/--list-options wie folgt: -lo mod1,mod2,mod4
$ ./tcpproxy.py --list
digestdowngrade - Find HTTP Digest Authentication and replace it with a Basic Auth
hexdump - Print a hexdump of the received data
http_ok - Prepend HTTP response header
http_post - Prepend HTTP header
http_strip - Remove HTTP header from data
log - Log data in the module chain. Use in addition to general logging (-l/--log).
removegzip - Replace gzip in the list of accepted encodings in a HTTP request with booo.
replace - Replace text on the fly by using regular expressions in a file or as module parameters
hexreplace - Replace hex data in tcp packets
size - Print the size of the data passed to the module
size404 - Change HTTP responses of a certain size to 404.
textdump - Simply print the received data as text
Tcpproxy.py verwendet Module, um die abgefangenen Daten anzuzeigen oder zu ändern. Um die möglicherweise einfachste Implementierung eines Moduls zu sehen, werfen Sie einen Blick auf das Modul textdump.py im Proxymodules-Verzeichnis: