This page looks best with JavaScript enabled

Hack The Box - Bitlab

 •  ✍️ sckull

Bitlab corre GitLab, encontramos credenciales en codigo ofuscado de JavaScript para obtener acceso modificamos un repositorio. Ralizar un query a la base de datos Postgres nos permitio obtener credenciales para el movimiento lateral. Ollydbg nos permitio encontrar credenciales dentro de un ejecutable para escalar privilegios.

Informacion de la Maquina

Nombre Bitlab box_img_maker
OS

Linux

Puntos 30
Dificultad Media
IP 10.10.10.114
Maker

Frey


thek

Matrix
{
   "type":"radar",
   "data":{
      "labels":["Enumeration","Real-Life","CVE","Custom Explotation","CTF-Like"],
      "datasets":[
         {
            "label":"User Rate",  "data":[7.4, 7.4, 4.6, 5.4, 2.6],
            "backgroundColor":"rgba(75, 162, 189,0.5)",
            "borderColor":"#4ba2bd"
         },
         { 
            "label":"Maker Rate",
            "data":[10, 10, 6, 4, 0],
            "backgroundColor":"rgba(154, 204, 20,0.5)",
            "borderColor":"#9acc14"
         }
      ]
   },
    "options": {"scale": {"ticks": {"backdropColor":"rgba(0,0,0,0)"},
            "angleLines":{"color":"rgba(255, 255, 255,0.6)"},
            "gridLines":{"color":"rgba(255, 255, 255,0.6)"}
        }
    }
}

MASSCAN & NMAP

Escaneo de puerto tcp/udp, en el cual nos muestra el puerto http (80) y el puerto de ssh (22) abierto.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
root@kali:~/htb/bitlab# masscan -p1-65535,U:1-65535 10.10.10.114 --rate=1000 -e tun0

Starting masscan 1.0.5 (http://bit.ly/14GZzcT) at 2019-09-24 23:21:55 GMT
 -- forced options: -sS -Pn -n --randomize-hosts -v --send-eth
Initiating SYN Stealth Scan
Scanning 1 hosts [131070 ports/host]
Discovered open port 80/tcp on 10.10.10.114                                    
Discovered open port 22/tcp on 10.10.10.114

root@kali:~/htb/bitlab# nmap -p- --min-rate 1000 10.10.10.114
Starting Nmap 7.80 ( https://nmap.org ) at 2019-09-24 19:23 EDT
Nmap scan report for 10.10.10.114
Host is up (0.34s latency).
Not shown: 65533 filtered ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 133.40 seconds

# Nmap 7.80 scan initiated Tue Sep 24 19:26:19 2019 as: nmap -sV -sC -p22,80 -o nmap.scan 10.10.10.114
Nmap scan report for 10.10.10.114
Host is up (0.083s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 7.6p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   2048 a2:3b:b0:dd:28:91:bf:e8:f9:30:82:31:23:2f:92:18 (RSA)
|   256 e6:3b:fb:b3:7f:9a:35:a8:bd:d0:27:7b:25:d4:ed:dc (ECDSA)
|_  256 c9:54:3d:91:01:78:03:ab:16:14:6b:cc:f0:b7:3a:55 (ED25519)
80/tcp open  http    nginx
| http-robots.txt: 55 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.114/users/sign_in
|_http-trane-info: Problem with XML parsing of /evox/about
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Tue Sep 24 19:26:30 2019 -- 1 IP address (1 host up) scanned in 11.04 seconds

HTTP

Dentro del servicio de http nos muestra un panel de inicio de sesion de lo que parece gitlab.
image

Robots.txt

Dentro del archivo robots.txt encontramos diferentes rutas en las cuales la mayoria nos redirige a /users/sign_in, en la unica en la que podemos navegar es en /explore pero en esta ruta no encontramos nada interesante.

image

Al visitar distintas rutas dentro de esta pagina encontramos que en /help hay un archivo de html que al visitarlo contiene direcciones hacia otra pagina, menos la ultima que contiene codigo javascript codificado.

image

Bookmarks.html

image

Codigo javascript:

1
javascript:(function(){ var _0x4b18=["\x76\x61\x6C\x75\x65","\x75\x73\x65\x72\x5F\x6C\x6F\x67\x69\x6E","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x63\x6C\x61\x76\x65","\x75\x73\x65\x72\x5F\x70\x61\x73\x73\x77\x6F\x72\x64","\x31\x31\x64\x65\x73\x30\x30\x38\x31\x78"];document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]= _0x4b18[3];document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]= _0x4b18[5]; })()

Codigo decodificado:

1
2
3
4
5
6
javascript:(function(){
	 document["getElementById"]("user_login")["value"]= "clave";
	document["getElementById"]("user_password")["value"]= "11des0081x"";
	 
}
)()

image

GitLab Login

Utilizamos las credenciales clave:11des0081x para iniciar sesion y vemos que hay diferentes proyectos dentro de gitlab.

image

SHELL - Gitlab / Profile

Dentro de los repositorios encontramos uno que tiene como nombre Profile, dentro de este repositorio se encuentra un archivo php (index.php) en el cual podemos ver codigo que pertenece a la pagina /profile/.

index.php

image

/profile

image

Realizamos un cambio dentro del codigo de index.php y realizamos un merge para intentar modificar la pagina /profile.

index.php

image

merge
image

Podemos observar que en la pagina de profile se encuentra nuestro codigo con el texto que insertamos.

image

Ahora que sabemos que podemos modificar codigo dentro de la pagina index, vamos a intentar crear un archivo en el repositorio con una shell inversa.

hello.php
image

execInBackground

netcat

Obtenemos una shell como usuario www-data.
image

Snippet - Postgres

Dentro de gitlab tambien encontramos un snippet que contiene nombre, usuario y contraseña para una base de datos en postgres.
image

Codigo:

1
2
3
<?php
$db_connection = pg_connect("host=localhost dbname=profiles user=profiles password=profiles");
$result = pg_query($db_connection, "SELECT * FROM profiles");

Utilizamos la porcion de codigo para ejecutarlo dentro de la maquina con php, agregando una porcion de codigo para obtener el resultado del query de la tabla profiles.

1
2
3
4
5
6
<?php
$db_connection = pg_connect("host=localhost dbname=profiles user=profiles password=profiles");
$result = pg_query($db_connection, "SELECT * FROM profiles");
$arr = pg_fetch_all($result);
print_r($arr);
?>

Codigo ejecutado:
Al ejecutar el codigo nos devuelve un usuario y contraseña, la contraseña codificada en base64.
image

Credenciales:

clave:c3NoLXN0cjBuZy1wQHNz==
clave:ssh-str0ng-p@ss

SHELL - Usuario clave

Actualizamos nuestra shell al intentar ingresar con la contraseña decodificada no la aceptó, utilizamos la codificada y obtuvimos shell como usuario clave.

image

Y Nuestra flag user.txt.
image

RE - RemoteConnection.exe

Dentro de la carpeta principal del usuario clave encontramos un archivo exe, trasladamos el archivo a nuestra maquina local para poder analizar el archivo.

image

Utilizamos ollydbg en su version 2.01 agregamos nuestro ejecutable en la interfaz de olly.
image

Al correr nuestro ejecutable nos muestra un mensaje en la ventana de ejecucion del archivo (Acceso Denegado).
image

Buscamos el mensaje que nos muestra en la ventana haciendo click dentro de la ventana Search for > All References Strings.

image

Encontramos varios mensajes (strings) vemos una string que es distinta a las demas colocamos un breakpoint en el string y volvemos a ejecutar y presionar F8.

image

Vemos nuestro breakpoint.
image

Vemos la conexion con el usuario root hacia la maquina de bitlab con la contraseña.
image

Credenciales:

-ssh root@gitlab.htb -pw Qf7]8YSV.wDNF*[7d?j&eD4^"
root:Qf7]8YSV.wDNF*[7d?j&eD4^"

Utilizamos las credenciales y obtenemos una shell con el usuario root y nuestra flag root.txt.

image

Share on

Dany Sucuc
WRITTEN BY
sckull
RedTeamer & Pentester wannabe