
Немного менее хакерский способ перехватывать и модифицировать не-HTTP протоколы через Burp и другие.
Немного менее хакерский способ перехвата и модификации не-HTTP протоколов через Burp и другие инструменты с поддержкой перехвата SSL и TLS. Этот инструмент предназначен для исследователей и пентестеров приложений, проводящих оценку безопасности толстых клиентов.
Улучшенная версия замечательного проекта mitm_relay.
В рамках нашей работы в исследовательском отделе CyberArk Labs нам понадобился способ инспектировать SSL/TLS коммуникации через TCP и иметь возможность изменять содержимое пакетов на лету. Существует множество способов (например, известное расширение Burp Suite NoPE), но в некоторых случаях ни один из них нам не подходил. В итоге мы наткнулись на mitm_relay.
mitm_relay — это быстрый и простой способ выполнять MITM любого TCP-протокола через существующее программное обеспечение для перехвата HTTP, такое как прокси Burp Suite. Это особенно полезно при оценке безопасности толстых клиентов. Но он не полностью работал у нас, поэтому мы решили его доработать. После множества изменений каждое новое усовершенствование требовало много работы, и в итоге мы переписали всё в более модульном виде.
Мы надеемся, что этот скрипт окажется полезным для других, и что добавление функционала будет простым.
Для начала необходимо настроить адреса и порты слушателей. Для каждого слушателя также нужно настроить цель (адрес и порт). Все данные, полученные от слушателя, будут обёрнуты в тело HTTP POST-запроса с URL, содержащим "CLIENT_REQUEST". Все данные, полученные от цели, будут обёрнуты в тело HTTP POST-запроса с URL, содержащим "SERVER_RESPONSE". Эти запросы отправляются на локальный HTTP-сервер перехвата.
Есть возможность настроить HTTP-прокси и использовать инструмент вроде Burp Suite в качестве средства перехвата HTTP и просматривать сообщения там. Таким образом, легко изменять сообщения с помощью функций Burp "Match and Replace", расширений или даже вручную (помните, что таймаут механизма перехватываемого протокола может быть очень коротким).
Другой способ изменения сообщений — использование Python-скрипта, который HTTP-сервер перехвата будет выполнять при получении сообщений.
Тело сообщений, отправляемых на HTTP-сервер перехвата, будет выведено на консоль. Если задан скрипт модификации, сообщения будут выведены после изменений. После всех модификаций сервер перехвата также вернёт их в виде тела HTTP-ответа.
Для расшифровки SSL/TLS трафика mitm_intercept необходимо предоставить сертификат и ключ, которые клиент примет при установке рукопожатия со слушателем. Если целевой сервер требует определённый сертификат для рукопожатия, есть возможность указать сертификат и ключ.
Небольшая схема типичного потока трафика:

mitm_intercept совместим с новыми версиями Python 3 (Python 3.9) и также совместим с Windows (например, socket.MSG_DONTWAIT отсутствует в Windows). Мы сохранили возможность использования "STARTTLS", назвав это режимом "Mixed". Использование файла журнала ключей SSL обновлено (встроенная возможность его использования появилась в Python 3.8), и мы добавили возможность изменять заголовок SNI. Теперь управление входящей и исходящей связью осуществляется через socketserver, а все данные отправляются в подкласс ThreadingHTTPServer, который отвечает за представление и модификацию данных. Благодаря этому можно видеть изменения, применённые скриптом модификации, в ответе (удобно для использования с Burp). Также теперь можно изменять доступные шифры, используемые скриптом, с помощью формата списка шифров OpenSSL.
$ python -m pip install requestsusage: mitm_intercept.py [-h] [-m] -l [u|t:]<interface>:<port> [[u|t:]<interface>:<port> ...] -t
[u|t:]<addr>:<port> [[u|t:]<addr>:<port> ...] [-lc <cert_path>]
[-lk <key_path>] [-tc <cert_path>] [-tk <key_path>] [-w <interface>:<port>]
[-p <addr>:<port>] [-s <script_path>] [--sni <server_name>]
[-tv <defualt|tls12|tls11|ssl3|tls1|ssl2>] [-ci <ciphers>]
mitm_intercept version 1.6