Перейти к содержимому
Гайды 6 мин чтения 2 просмотров

mitmproxy

Обзор mitmproxy: как перехватывать и анализировать HTTP-трафик для отладки, тестирования безопасности и разработки веб-приложений. Пошаговое руководство.

Безопасность

Mitmproxy — это открытый инструмент для перехвата, анализа, модификации и воспроизведения HTTP и HTTPS трафика, работающий как прокси-сервер.

Mitmproxy предоставляет комплексное решение для разработчиков, тестировщиков и специалистов по безопасности, позволяя им инспектировать сетевые взаимодействия между клиентом и сервером. Он функционирует как "человек посередине" (Man-in-the-Middle) для SSL/TLS соединений, дешифруя трафик на лету.

Компоненты mitmproxy

Пакет mitmproxy состоит из трех основных инструментов:
* mitmproxy: Интерактивный терминальный интерфейс для перехвата и анализа трафика. Предназначен для работы в консоли.
* mitmweb: Веб-интерфейс, предоставляющий графическое представление перехваченного трафика. Удобен для визуального анализа.
* mitmdump: Неинтерактивный инструмент командной строки, предназначенный для автоматизации и скриптования. Позволяет применять скрипты Python для модификации или анализа трафика без ручного вмешательства.

Установка mitmproxy

Установка mitmproxy обычно осуществляется через менеджер пакетов Python pip.

pip install mitmproxy

Для некоторых операционных систем могут потребоваться дополнительные зависимости или специфические шаги. Например, для macOS можно использовать Homebrew:

brew install mitmproxy

Режимы работы mitmproxy

Mitmproxy поддерживает несколько режимов работы, определяющих, как клиенты направляют на него трафик.

Обычный прокси (Regular Proxy)

В этом режиме клиент явно настраивается на использование mitmproxy как HTTP/S прокси. Это наиболее распространенный способ использования для браузеров и приложений, поддерживающих настройку прокси.

Пример запуска:

mitmproxy
# или
mitmweb

По умолчанию mitmproxy слушает порт 8080. Клиент должен быть настроен на использование localhost:8080 (или IP-адреса сервера mitmproxy) в качестве прокси.

Прозрачный прокси (Transparent Proxy)

В режиме прозрачного прокси клиенту не требуется явная настройка. Сетевой трафик перенаправляется на mitmproxy на уровне маршрутизатора или брандмауэра. Это полезно для анализа трафика мобильных устройств, IoT-устройств или приложений, которые не поддерживают настройку прокси.

Для настройки прозрачного прокси требуется конфигурация правил маршрутизации или NAT на хосте, где запущен mitmproxy.

Пример настройки для Linux (iptables):

# Включить IP-форвардинг
sysctl -w net.ipv4.ip_forward=1

# Перенаправить HTTP (порт 80) трафик на порт mitmproxy (8080)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

# Перенаправить HTTPS (порт 443) трафик на порт mitmproxy (8080)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080

# Запустить mitmproxy в прозрачном режиме
mitmproxy --mode transparent
# или
mitmweb --mode transparent

eth0 — это сетевой интерфейс, через который проходит трафик.

SOCKS Proxy

Mitmproxy также может работать как SOCKS5 прокси. Этот режим полезен для приложений, которые поддерживают SOCKS, но не HTTP/S прокси.

mitmproxy --mode socks5
# или
mitmweb --mode socks5

Настройка SSL/TLS перехвата

Для перехвата HTTPS трафика mitmproxy действует как "человек посередине", генерируя на лету поддельные SSL-сертификаты для каждого домена. Чтобы избежать ошибок безопасности в клиентах (например, "Недоверенный сертификат"), необходимо установить корневой сертификат mitmproxy в хранилище доверенных сертификатов клиента.

Процесс установки корневого сертификата:
1. Запустите mitmproxy в любом режиме (например, mitmweb).
2. На клиенте, трафик которого вы хотите перехватывать, настройте прокси на mitmproxy (если это обычный режим).
3. Откройте в браузере клиента адрес http://mitm.it/.
4. На этой странице будут доступны ссылки для скачивания и установки корневого сертификата mitmproxy для различных операционных систем и устройств. Выберите соответствующий вариант и следуйте инструкциям.

После установки сертификата клиент будет доверять сертификатам, генерируемым mitmproxy, и HTTPS трафик будет прозрачно дешифроваться и отображаться в инструменте.

Использование mitmproxy (интерактивный режим)

При запуске mitmproxy или mitmweb открывается интерфейс, отображающий список перехваченных HTTP-потоков (Flows). Каждый поток включает запрос (Request) и ответ (Response).

Основные функции и навигация:

  • Просмотр потоков: В главном окне отображается список потоков. Клавиши со стрелками используются для навигации.
  • Детализация потока: Нажатие Enter на выбранном потоке открывает детали запроса и ответа. Здесь можно просмотреть заголовки, тело, cookie и другую информацию.
  • Фильтрация: Нажатие f позволяет ввести фильтр для отображения только релевантных потоков. Синтаксис фильтров мощный и поддерживает регулярные выражения.
  • Модификация и повтор (Replay):
    • e (edit): Открыть редактор для изменения запроса или ответа перед его отправкой или сохранением.
    • r (replay): Повторить выбранный запрос. Это полезно для тестирования изменений или воспроизведения сценариев.
    • R (replay response): Повторить ответ.
  • Сохранение и загрузка:
    • s (save): Сохранить выбранные потоки в файл.
    • L (load): Загрузить потоки из файла.
  • Перехват (Intercept): Нажатие i позволяет установить правила перехвата. Потоки, соответствующие правилам, будут приостановлены, ожидая ручной модификации или продолжения.

Использование mitmdump (скриптовый режим)

mitmdump позволяет автоматизировать задачи анализа и модификации трафика с помощью скриптов Python. Скрипты могут перехватывать события (например, request, response, error) и программно взаимодействовать с объектами Flow, Request и Response.

Пример скрипта для mitmdump

Создайте файл my_script.py:

from mitmproxy import http
from mitmproxy import ctx

def request(flow: http.HTTPFlow):
    """
    Вызывается для каждого запроса.
    """
    # Изменить User-Agent для всех запросов
    if "User-Agent" in flow.request.headers:
        flow.request.headers["User-Agent"] = "Custom-Mitmproxy-Agent/1.0 (Python Script)"

    # Блокировать запросы к определенному домену
    if "example.com" in flow.request.pretty_host:
        flow.response = http.Response.make(
            403, b"Blocked by mitmproxy script",
            {"Content-Type": "text/plain"}
        )
        ctx.log.info(f"Blocked request to {flow.request.pretty_url}")

def response(flow: http.HTTPFlow):
    """
    Вызывается для каждого ответа.
    """
    # Модифицировать HTML-тело ответа
    if flow.response and "content-type" in flow.response.headers and "text/html" in flow.response.headers["content-type"]:
        if flow.response.content:
            try:
                # Декодируем, модифицируем, кодируем обратно
                content = flow.response.content.decode('utf-8', errors='ignore')
                modified_content = content.replace("</body>", "<p>Injected by mitmproxy script!</p></body>")
                flow.response.content = modified_content.encode('utf-8')
                ctx.log.info(f"Injected content into {flow.request.pretty_url}")
            except UnicodeDecodeError:
                ctx.log.warn(f"Could not decode content for {flow.request.pretty_url}")

def http_connect(flow: http.HTTPFlow):
    """
    Вызывается при установке HTTPS CONNECT туннеля.
    """
    ctx.log.info(f"CONNECT to {flow.request.pretty_url}")

Запуск mitmdump со скриптом:

mitmdump -s my_script.py

Все проходящие запросы и ответы будут обрабатываться в соответствии с логикой, определенной в my_script.py.

Фильтрация трафика

Mitmproxy предлагает мощный механизм фильтрации, позволяющий сосредоточиться на конкретных потоках. Фильтры можно применять как в интерактивном режиме (mitmproxy, mitmweb) через команду f, так и при запуске mitmdump с опцией -f.

Синтаксис фильтров:
Фильтры представляют собой выражения, которые могут включать регулярные выражения и специальные ключевые слова:

  • ~q: Фильтр по запросу.
  • ~s: Фильтр по ответу.
  • ~h <header>: Фильтр по заголовку.
  • ~b <body_regex>: Фильтр по телу запроса или ответа.
  • ~m <method>: Фильтр по HTTP-методу.
  • ~d <domain>: Фильтр по домену.
  • ~u <url_regex>: Фильтр по URL.
  • ~c <code>: Фильтр по статусному коду ответа.

Примеры использования фильтров:
* mitmproxy -f "google.com": Отобразить трафик только для домена google.com.
* mitmproxy -f "~q GET": Отобразить только запросы с методом GET.
* mitmproxy -f "~s ~c 200": Отобразить ответы со статусным кодом 200 OK.
* mitmproxy -f "~u api/v1": Отобразить запросы, содержащие api/v1 в URL.
* mitmdump -f "~b json": Запустить mitmdump, обрабатывая только потоки, тело которых содержит "json".
* mitmweb -f "~q ~m POST ~u /login": Отобразить только POST-запросы к URL, содержащим /login.

Фильтры можно комбинировать, используя пробелы в качестве логического И. Например: ~q ~m POST ~u /api

Продвинутые возможности

Map Local / Map Remote

Mitmproxy позволяет перенаправлять запросы на локальные файлы или другие удаленные серверы. Это полезно для тестирования изменений без развертывания на реальном сервере.

Map Local (перенаправление на локальный файл):

mitmproxy --map-local "/api/data=./local_data.json"

Запросы к /api/data будут получать содержимое из local_data.json.

Map Remote (перенаправление на другой удаленный сервер):

mitmproxy --map-remote "example.com=new-example.com"

Запросы, предназначенные для example.com, будут перенаправляться на new-example.com.

Addons (Дополнения)

Mitmproxy имеет модульную архитектуру, позволяющую создавать собственные дополнения (addons) на Python. Дополнения могут реализовывать сложную логику, такую как запись трафика в базу данных, интеграция с другими инструментами или выполнение пользовательских проверок безопасности. Скрипты, используемые с mitmdump, по сути, являются простыми дополнениями.

Сравнение mitmproxy с аналогами

Инструмент Тип интерфейса Лицензия/Цена Основные ОС Основное применение
mitmproxy CLI (mitmproxy), Web (mitmweb) Open Source Cross-platform Анализ, модификация, автоматизация, скриптование
Fiddler GUI Freeware / Commercial Windows Отладка HTTP/S трафика, веб-разработка
Burp Suite GUI Freeware / Commercial Cross-platform Тестирование безопасности веб-приложений
Charles Proxy GUI Commercial Cross-platform Отладка HTTP/S трафика, мобильная разработка

Mitmproxy выделяется своей гибкостью, открытым исходным кодом и мощными возможностями скриптования, что делает его предпочтительным выбором для автоматизированных задач и интеграции в CI/CD процессы.

Обновлено: 04.03.2026
Назад к категории

Попробуйте наши прокси

20,000+ прокси в 100+ странах мира