Postman
Úvod a kontext
Na Postman je nejzajímavější, jak se propojí Redis, Apache a SSH.
Bez pochopení této návaznosti by nedával smysl ani stabilní uživatelský přístup opřený o id_rsa.bak a id_rsa, ani závěrečná lokální enumeraci po získání shellu.
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.
nmap -p 1-65535 -T4 -A -sC -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 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 46:83:4f:f1:38:61:c0:1c:74:cb:b5:d1:4a:68:4d:77 (RSA)
| 256 2d:8d:27:d2:df:15:1a:31:53:05:fb:ff:f0:62:26:89 (ECDSA)
|_ 256 ca:7c:82:aa:5a:d3:72:ca:8b:8a:38:3a:80:41:a0:45 (ED25519)
80/tcp open http Apache httpd 2.4.29 ((Ubuntu))
|_http-favicon: Unknown favicon MD5: __CENSORED__
| http-methods:
|_ Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.29 (Ubuntu)
|_http-title: The Cyber Geek's Personal Website
6379/tcp open redis Redis key-value store 4.0.9
10000/tcp open http MiniServ 1.910 (Webmin httpd)
|_http-favicon: Unknown favicon MD5: __CENSORED__
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Vyhledání otevřených portů (2)
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.
nmap -sU -T4 -v $IP
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.
dirb http://$IP
---- Scanning URL: http://10.10.10.160/ ----
==> DIRECTORY: http://10.10.10.160/css/
==> DIRECTORY: http://10.10.10.160/fonts/
==> DIRECTORY: http://10.10.10.160/images/
+ http://10.10.10.160/index.html (CODE:200|SIZE:3844)
==> DIRECTORY: http://10.10.10.160/js/
+ http://10.10.10.160/server-status (CODE:403|SIZE:300)
==> DIRECTORY: http://10.10.10.160/upload/
---- Entering directory: http://10.10.10.160/css/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
(Use mode '-w' if you want to scan it anyway)
---- Entering directory: http://10.10.10.160/fonts/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
(Use mode '-w' if you want to scan it anyway)
---- Entering directory: http://10.10.10.160/images/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
(Use mode '-w' if you want to scan it anyway)
---- Entering directory: http://10.10.10.160/js/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
(Use mode '-w' if you want to scan it anyway)
---- Entering directory: http://10.10.10.160/upload/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.
(Use mode '-w' if you want to scan it anyway)
Analýza zjištění
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.
ssh2john /opt/id_rsa.bak => /usr/sbin/john Postman-id_rsa.john --wordlist=/usr/share/wordlists/rockyou.txt
computer2008
su Matt
Identifikace a hledání exploitu
Zjišťuji technologii a ověřuji známé zranitelnosti.
whatweb -v http://$IP
X-UA-Compatible[IE=edge], JQuery, Apache[2.4.29], Script, HTTPServer[Ubuntu Linux][Apache/2.4.29 (Ubuntu)], HTML5
Identifikace a hledání exploitu (2)
Zjišťuji technologii a ověřuji známé zranitelnosti.
whatweb -v https://postman:10000
Cookies[redirect,testing], Script, X-Frame-Options[SAMEORIGIN], HTTPServer[MiniServ/1.910], PasswordField[pass], HTML5, UncommonHeaders[auth-type,content-security-policy]
msf5 exploit(linux/http/webmin_packageup_rce)
change fce peer rhost -> vhost
__CENSORED__
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.
Následující úsek zachycuje přechod k uživatelskému přístupu a jeho ověření přes user.txt.
su Matt
cat usert.txt
517ad0ec2458ca97af8d93aac08a2f3c
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.
Následující úsek zachycuje i postup, kterým se potvrzuje privilegovaný přístup a načtení root.txt.
msf5 exploit(linux/http/webmin_packageup_rce)
change fce peer rhost -> vhost
a257741c5bed8be7778c6ed95686ddce
Shrnutí klíčových poznatků
- Klíčový posun nepřinesl samotný scan, ale interpretace toho, co znamenaly Redis, Apache a SSH.
- Uživatelský přístup dává v tomhle řetězci smysl až ve chvíli, kdy vyjde stabilní uživatelský přístup opřený o
id_rsa.bakaid_rsa. - Root/admin část nepřišla zkratkou; klíčovou roli tu hraje lokální enumerace po získání shellu a navazující lokální enumerace.
Co si odnést do praxe
- Tento řetězec začal u Redis, Apache a SSH; právě tam má obrana největší návratnost. Webová vrstva nesmí publikovat víc, než je nezbytné; vedlejší vhost, debug endpoint nebo zapomenutý soubor často odhalí skutečný vstup do řetězce.
- Foothold navázal na stabilní uživatelský přístup opřený o
id_rsa.bakaid_rsa, takže oddělení účtů a tajemství není jen teorie. Jakmile se v prostředí objeví použitelný klíč, heslo nebo token, je potřeba předpokládat okamžitý pivot na stabilní shell; obrana proto stojí na segmentaci a oddělení přístupů mezi službami. - Poslední krok stojí na lokální enumerace po získání shellu, a proto je nutné auditovat i lokální delegaci práv. Po získání shellu je rozhodující systematická lokální enumerace; i bez další CVE často rozhodne kombinace špatných oprávnění, reuse tajemství a pomocných skriptů.