تفتح هذه الأداة مقبس استماع، وتستقبل البيانات ثم تقوم بتشغيل هذه البيانات من خلال سلسلة من وحدات الوكيل. بعد الانتهاء من الوحدات، يتم إرسال البيانات الناتجة إلى الخادم الهدف. يتم تلقي الاستجابة وتشغيلها مرة أخرى من خلال سلسلة من الوحدات قبل إرسال البيانات النهائية مرة أخرى إلى العميل. لاعتراض البيانات، سيتعين عليك إما أن تكون البوابة أو تقوم بنوع من هجوم الرجل في الوسط. قم بإعداد iptables بحيث تقوم سلسلة PREROUTING بتعديل الوجهة وإرسالها إلى عملية الوكيل. سيقوم الوكيل بعد ذلك بإرسال البيانات إلى أي هدف تم تحديده.
هذه الأداة مستوحاة وتعتمد جزئيًا على مثال وكيل TCP المستخدم في كتاب Justin Seitz "Black Hat Python" بواسطة 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: