Этот инструмент открывает сокет прослушивания, получает данные, а затем пропускает эти данные через цепочку прокси-модулей. После завершения работы модулей полученные данные отправляются на целевой сервер. Ответ получен и снова пропускается через цепочку модулей перед отправкой окончательных данных обратно клиенту. Чтобы перехватить данные, вам придется либо стать шлюзом, либо провести атаку типа «человек посередине». Настройте iptables так, чтобы цепочка PREROUTING изменяла пункт назначения и отправляла его прокси-процессу. Затем прокси-сервер отправит данные в любую указанную цель.
Этот инструмент вдохновлен и частично основан на примере TCP-прокси, использованном в книге Джастина Зейтца «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: