เครื่องมือนี้จะเปิดซ็อกเก็ตการฟัง รับข้อมูล จากนั้นเรียกใช้ข้อมูลนี้ผ่านสายโซ่ของโมดูลพร็อกซี หลังจากโมดูลเสร็จสิ้น ข้อมูลผลลัพธ์จะถูกส่งไปยังเซิร์ฟเวอร์เป้าหมาย ได้รับการตอบสนองและดำเนินการอีกครั้งผ่านชุดโมดูลก่อนที่จะส่งข้อมูลสุดท้ายกลับไปยังไคลเอนต์ หากต้องการสกัดกั้นข้อมูล คุณจะต้องเป็นเกตเวย์หรือทำการโจมตีแบบแทรกกลางข้อมูล ตั้งค่า iptables เพื่อให้เครือข่าย PREROUTING แก้ไขปลายทางและส่งไปยังกระบวนการพร็อกซี พร็อกซีจะส่งข้อมูลไปยังเป้าหมายที่ระบุไว้
เครื่องมือนี้ได้รับแรงบันดาลใจและบางส่วนอิงจากตัวอย่างพร็อกซี TCP ที่ใช้ในหนังสือ "Black Hat Python" ของ Justin Seitz โดย no starch press
$ ./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
คุณจะต้องระบุ TARGET_IP และ TARGET_PORT การตั้งค่าการฟังเริ่มต้นคือ 0.0.0.0:8080 เพื่อให้โปรแกรมมีประโยชน์จริง ๆ คุณจะต้องตัดสินใจว่าโมดูลใดที่คุณต้องการใช้กับการรับส่งข้อมูลขาออก (ไคลเอนต์ไปยังเซิร์ฟเวอร์) และขาเข้า (เซิร์ฟเวอร์ถึงไคลเอนต์) คุณสามารถใช้โมดูลที่แตกต่างกันสำหรับแต่ละทิศทาง ส่งผ่านรายการโมดูลเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาค เช่น -im mod1,mod4,mod2 ข้อมูลจะถูกส่งผ่านไปยังโมดูลแรก ข้อมูลที่ส่งคืนจะถูกส่งผ่านไปยังโมดูลที่สองและต่อๆ ไป เว้นแต่คุณจะใช้สวิตช์ -n/--no/chain ในกรณีนี้ทุกโมดูลจะได้รับข้อมูลต้นฉบับ คุณยังสามารถส่งตัวเลือกไปยังแต่ละโมดูลได้: -im mod1:key1=val1,mod4,mod2:key1=val1:key2=val2 หากต้องการเรียนรู้ว่าตัวเลือกใดที่คุณสามารถส่งผ่านไปยังโมดูลได้ ให้ใช้ -lo/--list-options เช่นนี้: -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 ใช้โมดูลเพื่อดูหรือแก้ไขข้อมูลที่ดักจับ หากต้องการดูการใช้งานโมดูลที่ง่ายที่สุด ให้ดูที่โมดูล textdump.py ในไดเร็กทอรี proxymodules: