Извлечение учетных данных из удаленной системы Windows

D2

Администратор
Регистрация
19 Фев 2025
Сообщения
4,380
Реакции
0
Недавно мы провели наступление, в котором хотели сбросить учетные данные с удаленного хоста. Мы получили учетные данные пользователя, имеющего права администратора на хосте-жертве, и хотели получить дополнительные учетные данные с этого хоста. Поскольку мы чувствовали, что синяя команда внимательно наблюдает за средой, это нужно было делать скрытно и желательно только с использованием собственных инструментов Windows. Именно тогда мы придумали следующий подход, чтобы получить файлы и файлы удаленной системы SYSTEM, SECURITY, SAM c помощью WMI из %SystemRoot%\System32\Config. Этот подход также можно использовать для получения файла ntds.dit от контроллера домена, чтобы получить учетные данные всей организации.

Условия

В этой статье мы сначала воспользуемся компьютером злоумышленника с ОС Windows для создания теневой копии в удаленной системе с помощью WMI, а затем воспользуемся SMB для загрузки файлов учетных данных из теневой копии. Предполагается, что порты 445/TCP (SMB) и один из портов 135/TCP ( DCOM ), 5985/TCP ( WinRM ) или 5986/TCP ( WinRM через SSL) доступны, и у нас есть административный доступ к машине-жертве. Мы будем использовать DCOM, который для связи использует порт 135/TCP. Более того, текущий экземпляр PowerShell работает как пользователь, имеющий административный доступ на хосте-жертве (DC01.mydomain.local), получающий локальные учетные данные.

Небольшое введение в WMI

WMI означает «Инструментарий управления Windows» и может использоваться для считывания управляющей информации из Windows и выполнения действий над различными компонентами, которые предоставляют интерфейс WMI. Доступ к WMI можно получить локально, используя, например, PowerShell, VBScript, wmic.exe и COM, а удаленный доступ к WMI можно получить с помощью WinRM и DCOM .

PowerShell предоставляет командлеты WMI и CIM. Общая информационная модель ( CIM ) — это открытый стандарт, разработанный Рабочей группой по распределенному управлению (DMTF), а WMI — это реализация CIM для Windows от Microsoft. В этой статье мы будем использовать командлеты CIM, но командлеты WMI будут работать одинаково хорошо.

Создание сессии

Если вы выполняете эту атаку с компьютера за пределами домена или когда вам нужно использовать другие учетные данные для аутентификации на хосте-жертве, используйте этот инструмент runas.exe для запуска PowerShell с учетными данными, которые можно использовать для аутентификации. Теперь всякий раз, когда этому экземпляру PowerShell запрашивается аутентификация в сети, он будет использовать учетные данные, предоставленные инструменту runas.exe. Альтернативно этот параметр -Credential можно использовать для командлета New-CimSession.

1695543236568.png



После запуска PowerShell мы начинаем с инициации нового сеанса CIM с удаленным хостом через DCOM и сохранения его в переменной $s. Если вместо этого вы хотите использовать WinRM, опустите параметр -SessionOption командлета New-CimSession.

1695543243572.png



Создание теневой копии

После установления сеанса мы вызываем функцию Create класса Win32_ShadowCopy WMI, предоставляя параметр Volume для создания теневой копии установочного диска Windows, который содержит файлы, которые мы хотим получить. После выполнения команда ReturnValueof 0 показывает, что создание теневой копии прошло успешно. На основе этого ShadowID мы извлекаем все детали теневой копии. Альтернативой созданию новой теневой копии может быть проверка наличия (недавних) теневых копий. В этом случае вы можете просто использовать эту теневую копию и перейти к следующим шагам. Это можно сделать, выполнив приведенный ниже командлет без параметра -Filter.

PS C:\> $r = Invoke-CimMethod -ClassName Win32_ShadowCopy -MethodName Create -Arguments @{Volume='C:\'} -CimSession $s
PS C:\> $r | fl


ReturnValue : 0
ShadowID : {B15008D8-0C63-468C-AED7-ED4DB0CFD082}
PSComputerName : DC01.mydomain.local


PS C:\> $c = Get-CimInstance -ClassName Win32_ShadowCopy -CimSession $s -Filter "ID=`"$($r.ShadowID)`""
PS C:\> $c


Caption :
Description :
InstallDate : 4/19/2020 9:34:01 PM
Name :
Status :
ClientAccessible : True
Count : 1
DeviceObject : \\?\GLOBALROOT\Device\HarddiskVolumeShadowCopy6
Differential : True
ExposedLocally : False
ExposedName :
ExposedPath :
ExposedRemotely : False
HardwareAssisted : False
ID : {B15008D8-0C63-468C-AED7-ED4DB0CFD082}
Imported : False
NoAutoRelease : True
NotSurfaced : False
NoWriters : True
OriginatingMachine : DC01.mydomain.local
Persistent : True
Plex : False
ProviderID : {B5946137-7B9F-4925-AF80-51ABD60B20D5}
ServiceMachine : DC01.mydomain.local
SetID : {083BBDBA-4517-45A2-A62E-3F52020BC47C}
State : 12
Transportable : False
VolumeName : \\?\Volume{482bdb36-8a72-40a4-9b12-912d2783ef39}\
PSComputerName : DC01.mydomain.local

Получение файлов учетных данных


Мы хотим скопировать файлы из общего ресурса SMB, не просто из общего ресурса C$, а из созданной нами конкретной теневой копии. В проводнике Windows теневые копии также называются предыдущими версиями, список которых можно просмотреть, открыв свойства определенной папки и затем перейдя на вкладку «Предыдущие версии». Эти предыдущие версии также доступны из командной строки, которая представляет собой дату в определенном формате с префиксом @-символа. На основе теневой копии, хранящейся в переменной $c, мы скомпилируем путь для копирования файлов в следующей строке PowerShell.

1695543305210.png



После составления пути скопируем необходимые файлы с помощью команды копирования на наш локальный диск (в данном случае C:\tmp). Поскольку создание теневой копии может занять некоторое время при слишком быстрой попытке скопировать файлы из пути теневой копии, это приведет к ошибке, что путь не существует. В этом случае подождите немного и повторите попытку. Альтернативно, если вы вошли в систему в интерактивном режиме, откройте «Свойства» общего ресурса C$ хоста-жертвы в проводнике Windows и нажмите «Открыть» для созданной вами теневой копии. Если вы хотите получить хэши паролей от контроллера домена, этот подход также можно использовать для удаленного получения файла ntds.dit из папки %SystemRoot%\NTDS (по умолчанию).

1695543313287.png



После того, как мы успешно получили файлы, содержащие учетные данные, мы выполним очистку созданной нами теневой копии и закроем соединение с хостом-жертвой.

1695543321065.png



Получение и взлом хэша

Теперь , когда файлы SYSTEM, SECURITY и SAM или SYSTEM и NTDS.ditfile находятся в нашей C:\tmp папке, мы можем использовать наш любимый инструмент для получения хешей. Пример такого инструмента — secretsdump.py из Impacket.

SАМ

1695543339249.png



ntds.it

1695543348363.png



Впоследствии полученные хэши можно взломать с помощью таких инструментов, как John или Hashcat, или использовать в хэш-атаке.

Обнаружение и артефакты

- Событие с кодом 7036 на хосте-жертве, указывающее, что запущена служба поставщика теневого копирования программного обеспечения Microsoft.

- Аномальные сетевые соединения RPC/DCOM и SMB между хостами, которые обычно не обмениваются данными.

Заключительные мысли

Поскольку синяя команда все чаще отслеживает активность как в сети, так и на самих машинах, красная команда все чаще склоняется к использованию собственных инструментов администрирования Windows, чтобы оставаться вне поля зрения. Эта атака показывает, что, используя WMI и SMB, вы вполне можете сделать это из PowerShell, что будет сочетаться с действиями по управлению, которые системные администраторы выполняют в сети и системах.

Переведено специально для XSS.IS
Автор перевода: yashechka
Источник: https://blog.bitsadmin.com/extracting-credentials-from-remote-windows-system
 
Сверху Снизу