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

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

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

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

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

Категории

Все категории
Loading categories
rdpscan — Быстрый сканер уязвимости CVE-2019-0708 "BlueKeep". | Kitploit
Инструменты/GitHubGitHub/robertdavidgraham/rdpscan
Сканеры уязвимостейЭксплуатацияСетевая безопасность
GitHubrobertdavidgraham/rdpscan

rdpscan

Быстрый сканер уязвимости CVE-2019-0708 "BlueKeep".

Репозиторий
9212377 лет назадПроверено Kitploit

Популярное

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

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

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

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

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

Windows download macOS download Linux download Follow Build

rdpscan для уязвимости CVE-2019-0708 Bluekeep

Это быстрый и грязный сканер для уязвимости CVE-2019-0708 в Microsoft Remote Desktop. Прямо сейчас около 900 000 машин в общедоступном Интернете уязвимы для этой уязвимости, поэтому вскоре можно ожидать червя, похожего на WannaCry и notPetya. Поэтому сканируйте свои сети и исправляйте (или, по крайней мере, включайте NLA) на уязвимых системах.

Это инструмент командной строки. Вы можете скачать исходный код и скомпилировать его самостоятельно, или скачать один из предварительно скомпилированных бинарников для Windows или macOS по ссылке выше.

Этот инструмент полностью основан на патче rdesktop из https://github.com/zerosum0x0/CVE-2019-0708. Я просто обрезал код, чтобы его можно было легко скомпилировать на macOS и Windows, а также добавил возможность сканирования нескольких целей.

Статус

Этот инструмент появился всего несколько дней назад и является экспериментальным. Однако я тестирую его, сканируя весь Интернет (с помощью masscan), так что я довольно быстро решаю множество проблем. Вы можете связаться со мной в Twitter (@erratarob) для помощи/комментариев.

  • 2019-05-38 - Улучшены описания результатов вывода, а также документация о том, что они означают (см. ниже).
  • 2019-05-27 - Выпущены бинарники для Windows и macOS (нажмите на значки выше).
  • 2019-05-26 - Исправление проблем с сетью в Windows
  • 2019-05-25 - Linux и macOS работают хорошо, в Windows есть несколько сетевых ошибок
  • 2019-05-24 - Работает на Linux и macOS, в Windows есть несколько ошибок компиляции
  • 2019-05-23 - В настоящее время работает на macOS в XCode

Основное использование

Для сканирования сети запустите его следующим образом:

root@kitploit:~
rdpscan 192.168.1.1-192.168.1.255

Это выдает один из 3 результатов для каждого адреса:

  • SAFE - если цель определена как исправленная или по крайней мере требующая CredSSP/NLA
  • VULNERABLE - если цель подтверждена как уязвимая
  • UNKNOWN - если цель не отвечает или произошла какая-то ошибка протокола

Когда по целевому IP-адресу ничего нет, старые версии печатали сообщение "UNKNOWN - connection timed out". При сканировании больших сетей это создает перегрузку информации о системах, которые вас не интересуют. Поэтому новая версия по умолчанию не выводит эту информацию, если вы не добавите -v (подробный) в командной строке.

Вы можете увеличить скорость сканирования больших сетей, увеличив количество рабочих процессов:

root@kitploit:~
rdpscan --workers 10000 10.0.0.0/8

Однако на моем компьютере он выдает только около 1500 рабочих процессов из-за системных ограничений, независимо от того, насколько высоко я устанавливаю этот параметр.

Вы можете еще больше увеличить скорость, используя это в сочетании с masscan, как описано во втором разделе ниже.

Интерпретация результатов

Есть три общих ответа:

  • SAFE - означает, что цель, вероятно, исправлена или иным образом не уязвима для ошибки.
  • VULNERABLE: означает, что мы подтвердили, что цель уязвима для этой ошибки, и когда появится червь, она, скорее всего, будет заражена.
  • UNKNOWN: означает, что мы не можем подтвердить ни то, ни другое, обычно потому, что цель не отвечает или не запущен RDP, что составляет подавляющее большинство ответов. Кроме того, когда цели исчерпали ресурсы или испытывают проблемы с сетью, мы получим много таких ответов. Наконец, ошибки протокола также являются причиной многих ответов. Хотя три основных ответа - SAFE, VULNERABLE и UNKNOWN, они содержат дополнительный текст, объясняющий диагноз. В этом разделе описываются различные строки, которые вы увидите.

SAFE

Есть три основные причины, по которым мы считаем цель безопасной:

  • SAFE - Target appears patched (Цель выглядит исправленной) Это происходит, когда цель не отвечает на запускающий запрос. Это означает, что это система Windows, которая была исправлена, или система, которая изначально не была уязвимой, например Windows 10 или Unix.
  • SAFE - CredSSP/NLA required (Требуется CredSSP/NLA) Это означает, что цель сначала требует аутентификации уровня сети (NLA) перед установкой RDP-соединения. Инструмент не может пройти этот этап без легитимных учетных данных, поэтому не может определить, была ли цель исправлена. Однако хакеры также не могут пройти этот этап для эксплуатации уязвимых систем, так что вы, вероятно, в безопасности. Однако, когда появятся эксплойты, инсайдеры с действительными именами пользователей/паролями смогут эксплуатировать систему, если она не исправлена.
  • SAFE - not RDP (Не RDP) Это означает, что система не является RDP, но имеет другую службу, которая использует тот же порт и выдает ответ, явно не являющийся RDP. Распространенные примеры: HTTP и SSH. Обратите внимание, что вместо идентифицируемого протокола сервер может ответить пакетом RST или FIN. Они идентифицируются как UNKNOWN, а не SAFE.

VULNERABLE

Это означает, что мы подтвердили, что система уязвима для ошибки.

  • VULNERABLE - got appid (Получен appid) Есть только один ответ, когда система уязвима, - этот.

UNKNOWN

Существует бесчисленное множество вариаций для UNKNOWN

  • UNKNOWN - no connection - timeout (Нет соединения - тайм-аут) Это наиболее распространенный ответ; происходит, когда целевой IP-адрес вообще не отвечает. На самом деле, это настолько часто, что при сканировании больших диапазонов адресов это обычно опускается. Вам нужно добавить флаг -v (подробный), чтобы включить его.
  • UNKNOWN - no connection - refused (RST) (Нет соединения - отказ (RST)) Это второй по распространенности ответ; происходит, когда цель существует и отвечает на сетевой трафик, но не запущен RDP и отклоняет соединение TCP-пакетом RST.
  • UNKNOWN - RDP protocol error - receive timeout (Ошибка протокола RDP - тайм-аут приема) Это третий по распространенности ответ; происходит, когда мы успешно установили RDP-соединение, но затем сервер перестает отвечать. Это связано с сетевыми ошибками и перегрузкой целевой системы по какой-то причине. Это также могут быть сетевые ошибки на вашей стороне, например, когда вы находитесь за NAT и перегружаете его слишком большим количеством соединений.
  • UNKNOWN - no connection - connection closed (Нет соединения - соединение закрыто) Это означает, что мы установили соединение (TCP SYN-ACK), но затем оно сразу же закрывается (с помощью RST или FIN). Есть много причин, по которым это может произойти, которые мы не можем различить:
    • Запущен RDP, но по какой-то причине соединение закрывается, возможно, из-за нехватки ресурсов.
    • Это не RDP, и запрос RDP, который мы отправляем, ему не нравится, поэтому вместо того, чтобы отправить нам информативное сообщение об ошибке (которое вызвало бы SAFE - not RDP), он резко закрывает соединение.
    • Некоторое промежуточное устройство, например IPS, брандмауэр или NAT, закрыло соединение, потому что идентифицировало его как враждебное или исчерпало ресурсы.
    • Какая-то другая причина, которую я не определил; при сканировании Интернета происходит много странного.
  • UNKNOWN - no connection - host unreachable (ICMP error) (Нет соединения - хост недоступен (ошибка ICMP)) Удаленная сеть сообщает, что хост недоступен или не работает. Попробуйте позже, если вы считаете, что этот хост должен быть активен.
  • UNKNOWN - no connection - network unreachable (ICMP error) (Нет соединения - сеть недоступна (ошибка ICMP)) На удаленном конце произошла (временная) сетевая ошибка. Попробуйте позже, если вы считаете, что эта сеть должна работать.
  • UNKNOWN - RDP protocol error (Ошибка протокола RDP) Это означает, что произошло какое-то искажение в протоколе RDP, либо потому, что удаленная сторона реализует его неправильно (не система Windows), либо из-за того, что она плохо обрабатывает временную сетевую ошибку, либо по другой причине.
  • UNKNOWN - SSL protocol error (Ошибка протокола SSL) Начиная с Windows Vista, RDP использует протокол STARTTLS для работы через SSL. У этого уровня есть свои проблемы, как указано выше, включая плохую обработку нижележащих сетевых ошибок или попытку связи с системами, имеющими некоторую несовместимость. Если вы получаете здесь очень длинное сообщение об ошибке (например, SSL3_GET_RECORD:wrong version), это потому, что на другой стороне есть ошибка в SSL или в вашей собственной библиотеке SSL, которую вы используете.

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

Этот инструмент rdpscan довольно медленный, сканирует всего несколько сотен целей в секунду. Вы можете вместо этого использовать masscan для ускорения. Инструмент masscan примерно в 1000 раз быстрее, но предоставляет только ограниченную информацию о цели.

Шаги следующие:

  • Сначала отсканируйте диапазоны адресов с помощью masscan, чтобы быстро найти хосты, которые отвечают на порту 3389 (или любом другом используемом порту).
  • Затем передайте вывод masscan в rdpscan, чтобы он сканировал только те цели, которые, как мы знаем, активны.

Простой способ запуска - просто объединить их в командной строке:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 | rdpscan --file -

Я делаю это в два этапа:

root@kitploit:~
masscan 10.0.0.0/8 -p3389 > ips.txt
rdpscan --file ips.txt --workers 10000 >results.txt

Сборка

Самая сложная часть - установка библиотек OpenSSL без конфликтов с другими версиями в системе. Вот несколько примеров для версий Linux, на которых я тестировал, но названия пакетов постоянно меняются от одного дистрибутива к другому. Также есть много опций для API, совместимого с OpenSSL, таких как BoringSSL и LibreSSL.

root@kitploit:~
$ sudo apt install libssl-dev
$ sudo yum install openssl-devel

После решения этой проблемы просто скомпилируйте все файлы .c вместе:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -o rdpscan

Я поместил Makefile в каталог, который это делает, так что вы, вероятно, можете сделать просто:

root@kitploit:~
$ make

Код написан на C, поэтому требуется установленный компилятор C, например, выполнив:

root@kitploit:~
$ sudo apt install build-essential

Распространенные ошибки сборки

В этом разделе описаны наиболее очевидные ошибки сборки.

root@kitploit:~
ssl.h:24:25: fatal error: openssl/rc4.h: No such file or directory

Это означает, что у вас либо не установлены заголовочные файлы OpenSSL, либо они не находятся в пути. Помните, что даже если у вас установлены бинарные файлы OpenSSL, это не означает, что у вас установлены средства разработки. Вам нужны и заголовки, и библиотеки.

Чтобы установить这些东西 в Debian, выполните:

root@kitploit:~
$ sudo apt install libssl-dev

Чтобы исправить проблему с путями, добавьте флаг компиляции -I/usr/local/include или что-то подобное.

Пример проблемы линковки:

root@kitploit:~
Undefined symbols for architecture x86_64:
"_OPENSSL_init_ssl", referenced from:
    _tcp_tls_connect in tcp-fac73c.o
"_RSA_get0_key", referenced from:
    _rdssl_rkey_get_exp_mod in ssl-d5fdf5.o
"_SSL_CTX_set_options", referenced from:
    _tcp_tls_connect in tcp-fac73c.o
"_X509_get_X509_PUBKEY", referenced from:
    _rdssl_cert_to_rkey in ssl-d5fdf5.o

Я получаю это на macOS, потому что есть несколько версий OpenSSL. Я исправляю это, жестко прописывая пути:

root@kitploit:~
$ gcc *.c -lssl -lcrypto -I/usr/local/include -L/usr/local/lib -o rdpscan

Согласно комментариям других, следующая командная строка может сработать на macOS, если вы использовали Homebrew для установки. Однако я все еще получаю ошибки линковки выше, потому что установил другие компоненты OpenSSL, которые конфликтуют.

root@kitploit:~
gcc $(brew --prefix)/opt/openssl/lib/libssl.a $(brew --prefix)/opt/openssl/lib/libcrypto.a -o rdpscan *.c

Запуск

В разделе выше даны краткие советы по запуску программы. В этом разделе приведена более подробная справка.

Для сканирования одной цели просто передайте ее адрес:

root@kitploit:~
./rdpscan 192.168.10.101

Вы можете передавать адреса IPv6 и DNS-имена. Вы можете передавать несколько целей. Пример:

root@kitploit:~
./rdpscan 192.168.10.101 exchange.example.com 2001:0db8:85a3::1

Вы также можете сканировать диапазоны адресов, используя IPv4-адреса begin-end или CIDR-спецификацию IPv4. Диапазоны IPv6 не поддерживаются, так как они слишком велики.

root@kitploit:~
./rdpscan 10.0.0.1-10.0.0.25 192.168.0.0/16

По умолчанию он сканирует только 100 целей одновременно. Вы можете увеличить это число с помощью параметра --workers. Однако, как бы высоко вы ни установили этот параметр, на практике вы получите максимум от 500 до 1500 одновременно работающих рабочих процессов в зависимости от вашей системы.

root@kitploit:~
./rdpscan --workers 1000 10.0.0.0/24

Вместо указания целей в командной строке вы можете загрузить их из файла с помощью хорошо названного параметра --file:

root@kitploit:~
./rdpscan --file ips.txt

Формат файла: один адрес, имя или диапазон на строку. Он также может потреблять текст, сгенерированный masscan. Лишние пробелы обрезаются, пустые строки игнорируются, а любые строки комментариев игнорируются. Комментарий - это строка, начинающаяся с символа # или символов //.

Вывод отправляется в stdout с указанием статуса VULNERABLE, SAFE или UNKNOWN. Для каждого могут быть дополнительные причины. Эти причины описаны выше.

root@kitploit:~
211.101.37.250 - SAFE - CredSSP/NLA required
185.11.124.79 - SAFE - not RDP - SSH response seen
125.121.137.42 - UNKNOWN - no connection - refused (RST)
40.117.191.215 - SAFE - CredSSP/NLA required
121.204.186.182 - SAFE - CredSSP/NLA required
99.8.11.148 - SAFE - CredSSP/NLA required
121.204.186.114 - SAFE - CredSSP/NLA required
49.50.145.236 - SAFE - CredSSP/NLA required
106.12.74.155 - VULNERABLE - got appid
222.84.253.26 - SAFE - CredSSP/NLA required
144.35.133.109 - UNKNOWN - RDP protocol error - receive timeout
199.212.226.196 - UNKNOWN - RDP protocol error - receive timeout
183.134.58.152 - UNKNOWN - no connection - refused (RST)
83.162.246.149 - VULNERABLE - got appid

Вы можете обработать это с помощью дополнительных команд unix, таких как grep и cut. Чтобы получить список только уязвимых машин:

root@kitploit:~
./rdpscan 10.0.0.0/8 | grep 'VULN' | cut -f1 -d'-'

Параметр -dddd означает диагностическую информацию, и чем больше d вы добавите, тем больше деталей будет напечатано. Это отправляется в stderr, а не в stdout, чтобы вы могли разделить потоки. В bash это делается так:

root@kitploit:~
./rdpscan --file myips.txt -ddd 2> diag.txt 1> results.txt

Диагностическая информация

Добавление параметра -d выводит диагностическую информацию о соединениях в stderr.

root@kitploit:~
./rdpscan 62.15.34.157 -d

[+] [62.15.34.157]:3389 - connecting...
[+] [62.15.34.157]:3389 - connected from [10.1.10.133]:49211
[+] [62.15.34.157]:3389 - SSL connection
[+] [62.15.34.157]:3389 - version = v4.8
[+] [62.15.34.157]:3389 - Sending MS_T120 check packet
[-] [62.15.34.157]:3389 - Max sends reached, waiting...
62.15.34.157    - SAFE - Target appears patched

На macOS/Linux вы можете перенаправить stdout и stderr отдельно в разные файлы обычным способом:

root@kitploit:~
./rdpscan --file ips.txt 2> diag.txt 1> results.txt

SOCKS5 и Tor для развлечения

Инструмент включает поддержку SOCKS5:

root@kitploit:~
./rdpscan --file ips.txt --socks5 localhost --socks5port 9050

Это усугубляет проблемы с соединением, поэтому вы получаете гораздо больше результатов "UNKNOWN".

Статическая линковка OpenSSL

Для выпуска бинарников Windows и macOS, прикрепленных как релизы к этому проекту, я статически линкую OpenSSL, чтобы его не нужно было включать отдельно, и программы просто работали. В этом разделе описаны некоторые заметки о том, как это сделать, особенно потому, что описание на собственной странице OpenSSL кажется устаревшим.

Оба этих шага начинаются с загрузки исходного кода OpenSSL и размещения его рядом с каталогом rdpscan:

root@kitploit:~
git clone https://github.com/openssl/openssl

Windows

Для Windows сначала нужно установить какую-нибудь версию Perl. Я использую версию от ActiveState.

Затем вам понадобится специальный «ассемблер». Я использую рекомендованный под названием NASM).

Затем вам понадобится компилятор. Я использую VisualStudio 2010. Вы можете скачать последнюю версию «Visual Studio Community Edition» (2019) вместо этого от Microsoft.

Теперь вам нужно построить make-файл. Для этого перейдите в каталог OpenSSL и запустите программу Perl Configure:

root@kitploit:~
perl Configure VC-WIN32

Я выбрал 32-битную версию для Windows, потому что существует много старых версий Windows, и я хочу сделать программу максимально совместимой со старыми версиями.

Я хочу полностью статическую сборку, включая C runtime. Для этого я открыл полученный make-файл в редакторе и изменил флаг компиляции C с /MD (означает использование DLL) на /MT. Там же я добавил следующее в CPPFLAGS: -D_WIN32_WINNT=0x501, что ограничивает OpenSSL функциями, работающими на Windows XP и Server 2003. В противном случае вы получите ошибки, что bcrypt.dll не найден, если запускаете на старых системах.

Теперь вам нужно убедиться, что все находится в вашем пути. Я скопировал nasm.exe в каталог в PATH. Для Visual Studio 2010 я запустил программу vcvars32.bat, чтобы установить переменные пути для компилятора.

После этого в командной строке я ввел:

root@kitploit:~
nmake

Это создает библиотеки. Статические - это libssl_static.lib и libcrypto_static.lib, которые я использую для линковки с rdpscan.

macOS

Прежде всего, вам нужно установить компилятор. Я использую Developer Tools от Apple, устанавливая XCode и компилятор. Думаю, вы можете использовать Homebrew для установки gcc вместо этого.

Затем перейдите в исходный каталог OpenSSL и создайте make-файл:

root@kitploit:~
perl Configure darwin64-x86_64-cc

Теперь просто соберите его:

root@kitploit:~
make depend
make

На этом этапе создаются как динамические (.dylib), так и статические (.lib) библиотеки. Я удалил динамические библиотеки, чтобы по умолчанию использовались статические.

Теперь в rdpscan просто соберите make-файл для macOS:

root@kitploit:~
make -f Makefile.macos

Это скомпилирует все исходные файлы rdpscan, а затем свяжет их с библиотеками OpenSSL в каталоге ../openssl, которые вы только что собрали.

Это должно создать исполняемый файл размером около 3 мегабайт. Если вместо этого вы получили только 200-килобайтный исполняемый файл, значит, вы ошиблись и связались с динамическими библиотеками.

Скачать инструмент