Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
pyrdp — RDP монстр-посередине (mitm) и библиотека для Python с возможностью просматривать соединения в реальном времени или после события | Kitploit
Инструменты/GitHubGitHub/gosecure/pyrdp
ЭксплуатацияСетевая криминалистикаСбор информацииСетевая безопасностьАнализ вредоносных программCTFТестирование на ПроникновениеОбучение и ОбразованиеRed TeamingРеагирование на ИнцидентыРазработка Полезной НагрузкиЛаборатории и Практика
1.8k2723 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
GitHubgosecure/pyrdp

pyrdp

RDP монстр-посередине (mitm) и библиотека для Python с возможностью просматривать соединения в реальном времени или после события

РепозиторийСайт

PyRDP

Tests Black Hat Arsenal 2019 Black Hat Arsenal 2021 Black Hat Arsenal 2022

PyRDP — это инструмент и библиотека на Python для атак «Monster-in-the-Middle» (MITM) на протокол удалённого рабочего стола (RDP).

Логотип PyRDP

Он включает несколько инструментов:

  • RDP Monster-in-the-Middle
    • Регистрирует учётные данные в открытом виде или хэши NetNTLM, используемые при подключении
    • Перехватывает данные, скопированные в буфер обмена
    • Сохраняет копии файлов, переданных по сети
    • Фоново сканирует общие диски и сохраняет их локально
    • Сохраняет записи сеансов для последующего просмотра
    • Автоматически выполняет команды консоли или полезные нагрузки PowerShell при новых подключениях
  • RDP Player:
    • Просмотр активных RDP-подключений, поступающих от MITM
    • Просмотр записей RDP-сеансов
    • Перехват управления активными RDP-сеансами с сокрытием своих действий
    • Вывод списка смонтированных дисков клиента и загрузка файлов с них во время активных сеансов
  • Инструмент конвертации:
    • Конвертация записей RDP в видео для удобного распространения
    • Конвертация записей RDP в последовательность низкоуровневых событий в формате JSON
    • Конвертация PCAP-файлов в записи, видео или события JSON
    • Конвертация расшифрованных PCAP-файлов (L7 PDU) в записи, видео или события JSON
  • RDP Certificate Cloner:
    • Создание самоподписанного сертификата X509 с теми же полями, что и сертификат RDP-сервера

PyRDP был представлен в 2018 году, когда мы продемонстрировали возможность перехвата реальной угрозы. Этот инструмент разрабатывается с учётом сценариев использования как для пентеста, так и для исследования вредоносного ПО.

Плеер PyRDP, воспроизводящий RDP-сеанс

Содержание

  • Поддерживаемые системы
  • Установка
    • С помощью pipx
    • С помощью Docker-образа
  • Использование PyRDP
    • Использование PyRDP Monster-in-the-Middle
    • Использование PyRDP Player
    • Использование PyRDP Certificate Cloner
    • Использование PyRDP Convert
    • Настройка PyRDP
    • Расширенное использование
    • Особые инструкции для Docker
  • История PyRDP
  • Участие в разработке PyRDP
  • Благодарности

Поддерживаемые системы

PyRDP должен работать на Python 3.7 и выше на платформах x86-64, ARM и ARM64.

Инструмент протестирован на Python 3.7 на Linux (Ubuntu 20.04, 22.04), Raspberry Pi и Windows. На macOS не тестировался.

Установка

Рекомендуются два способа установки: через pipx или с использованием Docker-контейнеров. Установка из исходников или самостоятельная сборка Docker-контейнеров описана в документации для разработчиков.

С помощью pipx

Зависимости

Linux

Сначала убедитесь, что установлены необходимые пакеты (приведены для Ubuntu 22.04; для других дистрибутивов может потребоваться корректировка). Мы предоставляем два типа установки: полный и облегчённый. Установите зависимости в соответствии с вашим сценарием использования.```sh

Full install (GUI, convert captures to video)

sudo apt install python3 python3-pip python3-venv
build-essential python3-dev openssl
libegl1 libxcb-cursor0 libxkbcommon-x11-0 libxcb-icccm4 libxcb-keysyms1
libnotify-bin
libavcodec58 libavdevice58

Slim install (no GUI, no conversion to video possible)

sudo apt install python3 python3-pip python3-venv
build-essential python3-dev git openssl

root@kitploit:~
Это должно установить зависимости, необходимые для запуска PyRDP. Если вы решите
установить без зависимостей GUI или преобразования видео, то невозможно будет использовать
`pyrdp-player` без безголового режима (`--headless`) или `pyrdp-convert` для создания видеовыхода.

Убедитесь, что у вас установлен `pipx`. На Ubuntu 22.04:```sh
python3 -m pip install --user pipx
python3 -m pipx ensurepath
Windows

Убедитесь, что у вас установлен Python. Python из Windows Store не работал у меня на Windows 11. Мы рекомендуем установить Python через Scoop.```sh scoop install python # if not installed already scoop install pipx pipx ensurepath

root@kitploit:~
Выйдите из системы и войдите снова (чтобы обновить PATH).

##### Другие ОС

Для установки `pipx` на других операционных системах смотрите здесь: <https://github.com/pypa/pipx#install-pipx>

#### Установка

Для полного опыта PyRDP с QT GUI и возможностью конвертировать захваты в видео:```sh
pipx install pyrdp-mitm[full]

Для компактной версии, предназначенной для работы в безголовых средах (серверы, RaspberryPi):```sh pipx install pyrdp-mitm

root@kitploit:~
Вы готовы! Смотрите [инструкции по использованию](#using-pyrdp).

### Использование Docker-образа

Это самый простой способ установки, если у вас установлен и работает docker.```sh
docker pull gosecure/pyrdp:latest

В качестве альтернативы у нас есть более компактный образ без зависимостей GUI и ffmpeg. Это единственный предоставляемый образ на платформах ARM.```sh docker pull gosecure/pyrdp:latest-slim

root@kitploit:~
Вы можете найти список всех наших Docker-образов [на странице gosecure/pyrdp на DockerHub](https://hub.docker.com/r/gosecure/pyrdp/tags). Тег `latest` относится к последней выпущенной версии, а тег `devel` — это образ Docker, собранный из ветки `main`.

## Использование PyRDP

### Использование PyRDP Monster-in-the-Middle

Используйте `pyrdp-mitm <ServerIP>` или `pyrdp-mitm <ServerIP>:<ServerPort>` для запуска MITM.

Предположим, у вас есть RDP-сервер, работающий на `192.168.1.10` и прослушивающий порт 3389; тогда вы запустите:```sh
pyrdp-mitm 192.168.1.10

При первом запуске MITM будет создан каталог с именем pyrdp_output/ относительно текущего рабочего каталога. Вот пример структуры этого каталога:```sh pyrdp_output/ ├── certs │   ├── WinDev2108Eval.crt │   └── WinDev2108Eval.pem ├── files │   ├── e91c6a5eb3ca15df5a5cb4cf4ebb6f33b2d379a3a12d7d6de8c412d4323feb4c │   ├── b14b26b7d02c85e74ab4f0d847553b2fdfaf8bc616f7c3efcc4771aeddd55700 ├── filesystems │   ├── romantic_kalam_8214773 │   │   └── device1 │   │   └── clipboard | └── priv-esc.exe -> ../../../files/b14b26b7d02c85e74ab4f0d847553b2fdfaf8bc616f7c3efcc4771aeddd55700 │   └── happy_stonebraker_1992243 │   ├── device1 │   └── device2 | └── Users/User/3D Objects/desktop.ini -> ../../../../../../e91c6a5eb3ca15df5a5cb4cf4ebb6f33b2d379a3a12d7d6de8c412d4323feb4c ├── logs │   ├── crawl.json │   ├── crawl.log │   ├── mitm.json │   ├── mitm.log │   ├── mitm.log.2021-08-26 │   ├── ntlmssp.log │   ├── player.log │   └── ssl.log └── replays ├── rdp_replay_20231214_01-20-28_965_happy_stonebraker_1992243.pyrdp └── rdp_replay_20231214_00-42-24_295_romantic_kalam_8214773.pyrdp

root@kitploit:~
* `certs/` содержит сгенерированные сертификаты, сохраненные с использованием `CN` сертификата в качестве имени файла
* `files/` содержит все захваченные файлы, которые дедуплицируются путем сохранения с использованием SHA-256 хеша содержимого в качестве имени файла
* `filesystems/` содержит воссозданную файловую систему целей, классифицированную по идентификаторам сессий.
   Для экономии места при похожих сессиях файлы являются символическими ссылками на реальные файлы в `files/`.
* `logs/` содержит все различные журналы, большинство из которых в форматах JSON и plaintext:
  * `crawl`: журнал обхода файлов
  * `mitm`: основной журнал MITM
  * `ntlmssp.log`: захваченные хеши NetNTLM
  * `player.log`: журнал проигрывателя
  * `ssl.log`: главные секреты TLS, сохраненные в формате, совместимом с Wireshark
* `replays/` содержит все ранее записанные сессии PyRDP с метками времени и идентификаторами сессий в имени файла

#### Указание закрытого ключа и сертификата

Если генерация ключа не сработала или вы хотите использовать собственный ключ и сертификат, вы можете указать их с помощью аргументов `-c` и `-k`:```sh
pyrdp-mitm 192.168.1.10 -k private_key.pem -c certificate.pem
Аутентификация на уровне сети (NLA) при атаке «Злоумышленник посередине»

Аутентификация на уровне сети (NLA) — это функция безопасности, доступная начиная с Windows Vista, которая повышает безопасность RDP-соединений. NLA использует новый поставщик поддержки безопасности CredSSP и иногда упоминается под этим именем. Сервер, который требует NLA, сложнее атаковать. Можно использовать три различные стратегии:

  • Получить сертификат и закрытый ключ сервера
  • Использовать функцию перенаправления хоста
  • Перехватить хэш NetNTLMv2 клиента и взломать его
Атака «Злоумышленник посередине» при NLA

Если у нас есть доступ к сертификату и закрытому ключу сервера, мы можем успешно провести MITM-атаку на RDP, даже если NLA включена. Мы описали эту атаку в нашем блоге о выпуске версии 1.0. Инструкции по извлечению сертификата RDP и закрытого ключа доступны на нашем GitHub.

Имея сертификат и закрытый ключ, вам просто нужно установить аутентификацию на ssp, добавив это в командную строку pyrdp-mitm:```sh --auth ssp -c <certificate.pem> -k <private-key.pem>

root@kitploit:~
Это позволит перехватывать соединения с принудительным NLA.

###### Перенаправление на альтернативный хост при принудительном NLA на сервере

![Диаграмма, поясняющая перенаправление NLA](https://assets.kitploit.com/production/public/readmes/2804/e74aa87cc1cfb892b9070fe387c9530e4e99973b2d780b72f6c118abf1ec8a5b.png)

Когда PyRDP подключается к целевому RDP-серверу (1), если этот сервер требует NLA, то PyRDP (2) перенаправит соединение на другой хост по вашему выбору (3).

Например, это можно использовать для перенаправления на сервер, который, как известно, не требует NLA, или даже на виртуальную машину под контролем атакующего.

Чтобы включить эту функцию, укажите адрес и порт альтернативного хоста следующим образом:```sh
--nla-redirection-host 192.168.1.12 --nla-redirection-port 3389

Эта возможность была представлена в PyRDP 1.1.0.

Захват хэшей NetNTLMv2

Хэши NetNTLMv2 полезны для атакующего, поскольку их можно относительно легко взломать, что позволяет злоумышленникам использовать легитимный доступ к RDP или пытаться подбирать учётные данные. Начиная с версии 1.1.0, PyRDP имеет возможность захватывать хэши NetNTLMv2 клиента через соединение NLA (CredSSP), проводя переговоры и захватывая сообщения аутентификации NTLMSSP. В версии 1.2.0 эта поддержка была расширена для работы даже при отсутствии сертификата и закрытого ключа сервера, что означает, что соединение не будет успешно подвергнуто MITM-атаке. Это похоже на то, что Responder делает с RDP. Захваченный хэш NetNTLMv2 можно найти в файле журнала ntlmssp.log, и он отформатирован так, что инструменты для взлома, такие как John The Ripper или hashcat, могут его обработать.

Эта техника подробно описана в записи блога: Захват хэшей RDP NetNTLMv2: детали атаки и техническое руководство

Эта возможность совместима с --auth ssp, но несовместима с --nla-redirection-host.

Подключение к проигрывателю PyRDP

Если вы хотите просматривать живые RDP-соединения через проигрыватель PyRDP, вам нужно указать IP-адрес и порт, на котором проигрыватель прослушивает, используя аргументы -i и -d. Примечание: аргумент порта необязателен, порт по умолчанию — 3000.```sh pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 3000

root@kitploit:~
##### Подключение к PyRDP player, когда MITM запущен на сервере

Если вы запускаете MITM на сервере и все еще хотите видеть живые RDP-соединения, вам следует использовать
[SSH-туннелирование с перенаправлением удаленного порта](https://www.booleanworld.com/guide-ssh-port-forwarding-tunnelling/)
для перенаправления порта на вашем сервере на порт player'а на вашей машине. После этого вы передаете `127.0.0.1` и перенаправленный
порт в качестве аргументов MITM. Например, если порт 4000 на сервере перенаправлен на порт player'а на вашей машине,
команда будет выглядеть так:```sh
pyrdp-mitm 192.168.1.10 -i 127.0.0.1 -d 4000

Запуск полезных нагрузок при новых подключениях

PyRDP поддерживает автоматический запуск консольных команд или полезных нагрузок PowerShell при установлении новых подключений. Из-за особенностей RDP этот процесс несколько хакерский и не всегда на 100% надёжен. Вот как он работает:

  1. Ожидание аутентификации пользователя.
  2. Блокировка ввода/вывода клиента для скрытия полезной нагрузки и предотвращения помех.
  3. Отправка фальшивой последовательности Windows+R и запуск cmd.exe.
  4. Запуск полезной нагрузки как консольной команды и выход из консоли. Если настроена полезная нагрузка PowerShell, она запускается с помощью powershell -enc <PAYLOAD>.
  5. Ожидание некоторого времени для завершения полезной нагрузки.
  6. Восстановление ввода/вывода клиента.

Для этого необходимо задать 3 аргумента:

  • полезная нагрузка
  • задержка перед запуском полезной нагрузки
  • длительность полезной нагрузки
Настройка полезной нагрузки

Вы можете использовать один из следующих аргументов, чтобы задать выполняемую полезную нагрузку:

  • --payload — строка, содержащая консольные команды
  • --payload-powershell — строка, содержащая команды PowerShell
  • --payload-powershell-file — путь к скрипту PowerShell
Выбор времени запуска полезной нагрузки

На данный момент PyRDP не определяет момент входа пользователя в систему. Необходимо указать время ожидания перед запуском полезной нагрузки. После истечения этого времени он отправит фальшивые последовательности клавиш и ожидает корректного запуска полезной нагрузки. Для этого используется аргумент --payload-delay. Задержка указывается в миллисекундах. Например, если вы ожидаете, что пользователь войдёт в течение первых 5 секунд, вы бы использовали следующие аргументы:```sh --payload-delay 5000

root@kitploit:~
Это может быть сделано более точным за счёт использования некоторых сообщений, которыми обмениваются во время инициализации RDPDR.
Обратитесь к [этому вопросу](https://github.com/GoSecure/pyrdp/issues/98), если заинтересованы в улучшении этой функциональности.

##### Выбор момента возобновления нормальной активности

Поскольку нет прямого способа узнать, когда консоль завершила работу, вы должны указать PyRDP, как долго вы хотите,
чтобы ввод / вывод клиента был заблокирован. Рекомендуется устанавливать это значение равным максимальному времени, в течение которого, по вашему мнению, консоль, выполняющая вашу полезную нагрузку, будет видна. Другими словами, время, которое, как вы ожидаете, потребуется для завершения вашей полезной нагрузки.
Для установки длительности полезной нагрузки используйте аргумент `--payload-duration` с указанием времени в миллисекундах.
Например, если вы ожидаете, что выполнение полезной нагрузки займёт до 5 секунд, используйте следующий аргумент:```sh
--payload-duration 5000

Это заблокирует ввод/вывод клиента на 5 секунд, чтобы скрыть консоль и предотвратить помехи. Через 5 секунд ввод/вывод восстанавливается до нормального состояния.

Другие аргументы MITM

Запустите pyrdp-mitm --help для полного списка аргументов.

--no-downgrade

Этот аргумент полезен при использовании PyRDP в сценариях Honeypot для предотвращения сканирования отпечатков. При включении этого переключателя PyRDP не будет понижать неподдерживаемые расширения и будет пропускать трафик прозрачно. Плеер, скорее всего, не сможет успешно воспроизвести видеотрафик, но следующие поддерживаемые каналы должны оставаться доступными:

  • Запись нажатий клавиш
  • Обновления позиции мыши
  • Доступ к буферу обмена (пассивно)
  • Доступ к дискам (пассивно)

Эта функция всё ещё в разработке, и некоторые понижения версий в настоящее время неизбежны для установления соединения. Следующее в настоящее время не затрагивается этим переключателем и будет по-прежнему отключено:

  • Шифрование FIPS
  • Протоколы шифрования без TLS
  • Сжатие ClientInfo
  • Сжатие виртуальных каналов

ПРИМЕЧАНИЕ: Если возможность в конечном итоге воспроизвести полный сеанс важна, хорошим решением будет запись необработанного RDP-трафика с помощью Wireshark и сохранение главных секретов TLS. Когда PyRDP добавит поддержку дополнительных расширений, станет возможным извлечь из сырой сетевой записи действительный RDP-файл для воспроизведения.

--transparent

Сообщает PyRDP попытаться подменить исходный IP-адрес клиента, чтобы сервер видел реальный IP-адрес вместо адреса MITM. Эта опция полезна только в определенных сценариях, где MITM физически является шлюзом между клиентами и сервером и видит весь трафик. Конкретные примеры можно найти здесь.

ПРИМЕЧАНИЕ: Для этого требуются права root, работает только в Linux и требует ручной настройки брандмауэра, чтобы трафик маршрутизировался должным образом.

--no-gdi: Отключение ускоренного графического конвейера

PyRDP понижает видео до наиболее современного графического конвейера, который он поддерживает. Этот переключатель явно указывает MITM не использовать расширения Ускорение графического интерфейса для потоковой передачи видео. Преимущество этого режима заключается в значительном снижении требуемой пропускной способности для соединений с высоким разрешением.

Обратите внимание, что некоторые команды рисования GDI в настоящее время не реализованы, поскольку они, по-видимому, не используются. Если у вас есть запись, содержащая неподдерживаемую или непроверенную команду, не стесняйтесь поделиться ею с сопровождающими проекта, чтобы поддержка была добавлена по мере необходимости. (Убедитесь, что запись не содержит конфиденциальной информации)

Использование плеера PyRDP

Используйте pyrdp-player для запуска плеера.

Воспроизведение файла записи

Вы можете использовать меню для открытия нового файла записи: File > Open.

Вы также можете открыть файлы записи при запуске плеера:```sh pyrdp-player ...

root@kitploit:~
#### Прослушивание живых соединений

Плеер всегда прослушивает живые соединения. По умолчанию порт прослушивания — 3000, но его можно изменить:```sh
pyrdp-player -p <PORT>

Изменение адреса прослушивания

По умолчанию плеер принимает только соединения с локальной машины. Мы не рекомендуем открывать доступ к плееру для других машин. Если вы всё же хотите изменить адрес прослушивания, это можно сделать с помощью -b:```sh pyrdp-player -b

root@kitploit:~
#### Прочие аргументы плеера

Запустите `pyrdp-player --help` для получения полного списка аргументов.

### Использование PyRDP Certificate Cloner

ПРИМЕЧАНИЕ: Использование этого инструмента необязательно.
Начиная с версии 1.0 PyRDP генерирует сертификаты на лету точно так же, как это делает данный инструмент.

Клонер сертификатов PyRDP создает совершенно новый сертификат X509, используя значения из сертификата существующего RDP-сервера. Он подключается к RDP-серверу, загружает его сертификат, генерирует новый закрытый ключ и заменяет открытый ключ и подпись сертификата с использованием нового закрытого ключа. Это может быть использовано в пентесте, если, например, вы пытаетесь обмануть легитимного пользователя, заставив его пройти через ваш MITM. Использование сертификата, который выглядит как легитимный, может повысить ваш процент успеха.

#### Клонирование сертификата

Вы можете клонировать сертификат с помощью `pyrdp-clonecert`:```sh
pyrdp-clonecert 192.168.1.10 cert.pem -o key.pem

Параметр -o задает имя пути для создаваемого закрытого ключа.

Использование собственного закрытого ключа

Если вы хотите использовать свой собственный закрытый ключ вместо генерации нового:```sh pyrdp-clonecert 192.168.1.10 cert.pem -i input_key.pem

root@kitploit:~
#### Другие аргументы клонирования

Выполните `pyrdp-clonecert --help` для получения полного списка аргументов.

### Использование PyRDP Convert

`pyrdp-convert` — это вспомогательный скрипт, который выполняет несколько полезных преобразований из различных входных форматов в различные выходные форматы.
Скрипт с наибольшей вероятностью работает с трафиком, захваченным PyRDP, из-за неподдерживаемых функций протокола RDP, которые могут использоваться в неперехваченном соединении.

Поддерживаются следующие входные данные:

- Захват сети (PCAP) с главными секретами TLS (менее надежен)
- Захват сети (PCAP) в формате экспортированных PDU уровня 7 (более надежен)
- Файл воспроизведения, сгенерированный PyRDP

Поддерживаются следующие выходные данные:

- Видеофайл MP4
- JSON: последовательность низкоуровневых событий, сериализованных в формате JSON
- Файл воспроизведения, совместимый с `pyrdp-player`

Зашифрованные (TLS) захваты сети требуют предоставления главных секретов TLS с помощью `--secrets ssl.log`.```sh
# Export the session coming client 10.2.0.198 to a .pyrdp file.
pyrdp-convert --src 10.2.0.198 --secrets ssl.log -o path/to/output capture.pcap

# Or as an MP4 video
pyrdp-convert --src 10.2.0.198 --secrets ssl.log -o path/to/output -f mp4 capture.pcap

# List the sessions in a network trace, along with the decryptable ones.
pyrdp-convert --list-only capture.pcap

Обратите внимание, что преобразование в MP4 требует libavcodec и ffmpeg, поэтому на Windows могут потребоваться дополнительные действия.

Вручную расшифрованные сетевые трассы можно экспортировать из Wireshark, выбрав File > Export PDUs и указав OSI Layer 7.

Сначала убедитесь, что вы настроили Wireshark на загрузку секретов TLS:

Configure TLS secrets log

Затем экспортируйте PDU уровня 7 OSI:

Export OSI Layer 7

И, при необходимости, отфильтруйте трассу, оставив только интересующие сеансы, применив фильтр отображения и нажав File > Export Specified Packets...

Optionally filtering the exported trace

Теперь эту трассу можно напрямую использовать в pyrdp-convert.

Настройка PyRDP

Большая часть конфигурации PyRDP выполняется через параметры командной строки, но также можно использовать файл конфигурации для некоторых настроек, таких как конфигурация журналирования.

Файлы конфигурации по умолчанию, используемые PyRDP, находятся в mitm.default.ini и player.default.ini. Оба файла подробно документированы и могут служить основой для дальнейшей настройки.

В будущем планируется поддерживать другие аспекты конфигурации PyRDP через эти файлы.

Расширенное использование

Использование PyRDP как библиотеки

Если вы заинтересованы в экспериментах с RDP и создании собственных инструментов, перейдите в наш раздел документации для получения дополнительной информации.

Использование PyRDP с twistd

Компонент MITM PyRDP также реализован как плагин twistd. Это позволяет запускать его в режиме отладки и получать интерактивную отладочную консоль (pdb) при отправке сигнала SIGUSR2 процессу twistd. См. документацию twistd для получения дополнительной информации.

Использование PyRDP с Bettercap

Мы разработали собственный модуль Bettercap, rdp.proxy, для перехвата всех RDP-соединений в локальной сети (атака «Man-in-the-Middle»). Ознакомьтесь с этим документом для получения дополнительной информации.

Инструкции по использованию в Docker

Поскольку Docker ограничивает взаимодействие с хост-системой (файловая система и сеть), образ Docker PyRDP должен запускаться с некоторыми параметрами в зависимости от вашего сценария использования. В этом разделе описаны эти параметры.

Мы ссылаемся на публично предоставляемый образ Docker, но если вы собрали свой собственный, замените gosecure/pyrdp на имя вашего локально собранного образа.

Проброс порта прослушивания

В большинстве случаев перехвата («Monster-in-the-Middle») вам потребуется пробросить порт вашего хоста в образ Docker. Это достигается с помощью параметров --publish (-p) команды docker run.

Например, чтобы прослушивать порт 3389 (порт RDP по умолчанию) на всех интерфейсах, используйте:```sh docker run -p 3389:3389 gosecure/pyrdp pyrdp-mitm 192.168.1.10

root@kitploit:~
#### Хранение журналов и артефактов

Для постоянного хранения вывода PyRDP (журналы, файлы и т.д.) добавьте опцию `--volume` (`-v`) к предыдущей команде. В этом примере мы сохраняем файлы относительно текущего каталога в `pyrdp_output`:```sh
docker run -v $PWD/pyrdp_output:/home/pyrdp/pyrdp_output -p 3389:3389 gosecure/pyrdp pyrdp-mitm 192.168.1.10

Убедитесь, что ваш целевой каталог принадлежит пользователю с UID 1000, иначе вы получите ошибки отказа в доступе. Если вы единственный не-root пользователь в системе, обычно вашему пользователю назначается UID 1000.

Логирование IP-адреса хоста

Если вы хотите, чтобы PyRDP записывал IP-адрес хоста в свои логи, вы можете задать переменную окружения HOST_IP при использовании docker run:```sh docker run -p 3389:3389 -e HOST_IP=192.168.1.9 gosecure/pyrdp pyrdp-mitm 192.168.1.10

root@kitploit:~
#### Использование графического плеера в Docker

Для использования плеера необходимо экспортировать переменную окружения `DISPLAY` из хоста в Docker.
Это перенаправляет графический интерфейс плеера на экран хоста.
Также нужно открыть сеть хоста и запретить Qt использовать расширение разделяемой памяти X11 MIT-SHM.
Для этого добавьте опции `-e` и `--net` в команду run:```sh
docker run -e DISPLAY=$DISPLAY -e QT_X11_NO_MITSHM=1 --net=host gosecure/pyrdp pyrdp-player

Имейте в виду, что открытие сети хоста для docker может нарушить изоляцию между вашим контейнером и хостом. Если вы планируете использовать плеер, то X11 forwarding через SSH-соединение будет более безопасным способом.

Конвертация видео в Docker

Процесс конвертации видео зависит от PyAV, ffmpeg и QT, поэтому вам понадобится обычный образ docker, а не slim.

Вам нужно подключить том (-v) для обмена файлами с контейнером. Здесь мы сопоставляем нашу локальную директорию с /shared/ в контейнере.```sh docker run -e QT_QPA_PLATFORM=offscreen -v $PWD/:/shared gosecure/pyrdp pyrdp-convert -f mp4 <filename-relative-to-volume-in-/shared/> -o /shared/

root@kitploit:~
Переменная окружения `QT_QPA_PLATFORM=offscreen` требуется [из-за ошибки, описанной здесь](https://github.com/GoSecure/pyrdp/issues/428). Она сообщает QT, что отсутствие графического окружения является корректным.

## История PyRDP

* [Вводный пост в блоге](https://www.gosecure.net/blog/2018/12/19/rdp-man-in-the-middle-smile-youre-on-camera), в котором мы [продемонстрировали, что можем поймать реального злоумышленника в действии](https://www.youtube.com/watch?v=eB7RC9FmL6Q)
* [Доклад на NorthSec 2019](https://docs.google.com/presentation/d/1avcn8Sh2b3IE7AA0G9l7Cj5F1pxqizUm98IbXUo2cvY/edit#slide=id.g404b70030f_0_581), где были продемонстрированы два демо:
  * [Первое демо](https://youtu.be/5JztJzi-m48): логирование учётных данных, кража буфера обмена, просмотр файлов на стороне клиента и перехват сеанса
  * [Второе демо](https://youtu.be/bU67tj1RkMA): выполнение полезных нагрузок cmd или powershell при успешной аутентификации клиента
* [Логотип PyRDP](https://github.com/gosecure/pyrdp/blob/HEAD/docs/pyrdp-logo.png) распространяется по лицензии CC-BY-SA 4.0.
* [Слайды BlackHat USA Arsenal 2019](https://docs.google.com/presentation/d/17P_l2n-hgCehQ5eTWilru4IXXHnGIRTj4ftoW4BiX5A/edit?usp=sharing)
* [Слайды DerbyCon 2019](https://docs.google.com/presentation/d/1UAiN2EZwDcmBjLe_t5HXB0LzbNclU3nnigC-XM4neIU/edit?usp=sharing) ([Видео](https://www.youtube.com/watch?v=zgt3N6Nrnss))
* [Блог: PyRDP на автопилоте](https://www.gosecure.net/blog/2020/02/26/pyrdp-on-autopilot-unattended-credential-harvesting-and-client-side-file-stealing/)
* [Блог: PyRDP 1.0](https://www.gosecure.net/blog/2020/10/20/announcing-pyrdp-1-0/)
* [Демо-лаборатории DefCon 2020](https://www.youtube.com/watch?v=1q2Eo3x3u0g)
* [Блог: Захват хэшей RDP NetNTLMv2: детали атаки и техническое руководство](https://www.gosecure.net/blog/2022/01/17/capturing-rdp-netntlmv2-hashes-attack-details-and-a-technical-how-to-guide/)
* [Слайды BlackHat USA Arsenal 2021](https://gosecure.github.io/presentations/2021-08-05_blackhat-usa/BlackHat-USA-21-Arsenal-PyRDP-OlivierBilodeau.pdf)
* [Презентация: Я наблюдал, как вы бросаете кости: непревзойдённый мониторинг RDP раскрывает тактику злоумышленников](http://i.blackhat.com/BH-US-23/Presentations/US-23-Bilodeau-I-Watched-You-Roll-the-Die-Unparalleled-RDP-Monitoring.pdf) на BlackHat USA 2023

## Вклад в PyRDP

См. наши [руководство по внесению вклада](https://github.com/gosecure/pyrdp/blob/HEAD/CONTRIBUTING.md).

## Благодарности

PyRDP использует код из следующего программного обеспечения с открытым исходным кодом:

- [RC4-Python](https://github.com/bozhu/RC4-Python) для реализации RC4.
- [rdesktop](https://github.com/rdesktop/rdesktop) для декомпрессии растровых изображений.
- [rdpy](https://github.com/citronneur/rdpy) для ключей RC4, привязок декомпрессии растровых изображений и базового GUI-кода для плеера PyRDP.
- [FreeRDP](https://github.com/FreeRDP/FreeRDP) для перечисления скан-кодов.
Скачать инструмент