Alat ini membuka soket pendengaran, menerima data dan kemudian menjalankan data ini melalui rangkaian modul proxy. Setelah modul selesai dibuat, data yang dihasilkan dikirim ke server target. Respons diterima dan dijalankan kembali melalui rangkaian modul sebelum mengirimkan data akhir kembali ke klien. Untuk mencegat data, Anda harus menjadi gerbang atau melakukan semacam serangan man-in-the-middle. Atur iptables sehingga rantai PREROUTING akan mengubah tujuan dan mengirimkannya ke proses proxy. Proxy kemudian akan mengirimkan data tersebut ke target apa pun yang ditentukan.
Alat ini terinspirasi oleh dan sebagian didasarkan pada contoh proxy TCP yang digunakan dalam buku Justin Seitz "Black Hat Python" tanpa mesin press kanji.
$ ./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
Anda harus memberikan TARGET_IP dan TARGET_PORT, pengaturan mendengarkan default adalah 0.0.0.0:8080. Untuk membuat program ini benar-benar berguna, Anda harus memutuskan modul mana yang ingin Anda gunakan pada lalu lintas keluar (klien ke server) dan lalu lintas masuk (server ke klien). Anda dapat menggunakan modul berbeda untuk setiap arah. Berikan daftar modul sebagai daftar yang dipisahkan koma, misalnya -im mod1,mod4,mod2. Data akan diteruskan ke modul pertama, data yang dikembalikan akan diteruskan ke modul kedua dan seterusnya, kecuali Anda menggunakan saklar -n/--no/chain. Dalam hal ini, setiap modul akan menerima data asli. Anda juga dapat meneruskan opsi ke setiap modul: -im mod1:key1=val1,mod4,mod2:key1=val1:key2=val2. Untuk mempelajari opsi mana yang dapat Anda teruskan ke modul, gunakan -lo/--list-options seperti ini: -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 menggunakan modul untuk melihat atau mengubah data yang disadap. Untuk melihat implementasi modul yang mungkin paling mudah, lihat modul textdump.py di direktori proxymodules: