Ophiuchi
Úvod a kontext
Na Ophiuchi je nejzajímavější, jak se propojí Tomcat a jeho administrační vrstva, Apache a SSH.
Bez pochopení této návaznosti by nedával smysl ani SSH s nalezenými přihlašovacími údaji, ani závěrečná příliš široká sudo oprávnění.
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 $IP | grep ^[0-9] | cut -d "/" -f 1 | tr "\n" "," | sed s/,$//);echo $ports;nmap -p $ports -A -sC -sV -v $IP
PORT STATE SERVICE VERSION
Detailní analýza služeb
V dalším kroku si zpřesňuji verze služeb a jejich charakteristiky, protože právě z těchto detailů obvykle vzniká rozhodnutí, zda pokračovat přes web, SSH nebo jinou vrstvu.
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 6d:fc:68:e2:da:5e:80:df:bc:d0:45:f5:29:db:04:ee (RSA)
| 256 7a:c9:83:7e:13:cb:c3:f9:59:1e:53:21:ab:19:76:ab (ECDSA)
|_ 256 17:6b:c3:a8:fc:5d:36:08:a1:40:89:d2:f4:0a:c6:46 (ED25519)
8080/tcp open http Apache Tomcat 9.0.38
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Parse YAML
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
[12:59:37] 401 - 2KB - /host-manager
[13:01:41] 401 - 2KB - /manager
[13:03:11] 200 - 5B - /test/test.txt
/test (Status: 302) [Size: 0] [--> /test/]
/manager (Status: 302) [Size: 0] [--> /manager/]
/yaml (Status: 302) [Size: 0] [--> /yaml/]
https://swapneildash.medium.com/snakeyaml-deserilization-exploited-b4a2c5ac0858
Získání přístupu
Přihlášení na cíl (2)
Jakmile mám pověření nebo jednorázový shell, snažím se přejít na stabilní a reprodukovatelný přístup, aby bylo možné bezpečně pokračovat v interní enumeraci.
ssh admin@$IP
whythereisalimit
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.
cat user.txt
__CENSORED__
Eskalace oprávnění
Průzkum možností eskalace
Hledám chybné konfigurace a cesty k vyšším oprávněním.
sudo -l
mkdir /tmp/a
scp admin@$IP:/opt/wasm-functions/main.wasm main.wasm
https://webassembly.github.io/wabt/demo/wasm2wat/
0 => 1
https://webassembly.github.io/wabt/demo/wat2wasm/
scp test.wasm admin@$IP:/tmp/a/main.wasm
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.
cat root.txt
__CENSORED__
Shrnutí klíčových poznatků
- První skutečně užitečný závěr plynul z toho, jak do sebe zapadly Tomcat a jeho administrační vrstva, Apache a SSH.
- User fáze se opírala o SSH s nalezenými přihlašovacími údaji, takže přístup byl reprodukovatelný a ne jen jednorázový.
- Finální kontrolu nad systémem otevřela až mechanika typu příliš široká
sudooprávnění.
Co si odnést do praxe
- První obranná lekce míří na Tomcat a jeho administrační vrstva, Apache a SSH. Tomcat manager, uživatelské role a soubory jako
tomcat-users.xmlnesmějí být čitelné z webu ani z LFI; deployment rozhraní je z obranného pohledu přímo vstup pro RCE. - Druhá lekce je o tom, jak rychle se ze zjištění stane SSH s nalezenými přihlašovacími údaji. Hesla a klíče je potřeba oddělovat mezi službami; jakmile stejné přihlašovací údaje fungují i na SSH, z lokálního úniku je plnohodnotný systémový přístup.
- Třetí lekce připomíná riziko, které v praxi představuje příliš široká
sudooprávnění. Širokásudooprávnění je potřeba pravidelně revidovat; wrapper, install helper nebo diagnostický příkaz často udělá z běžného účtu roota.