Peak Hill es una maquina de TryHackMe, encontramos un fichero dentro del cual descubrimos credenciales las cuales estaban como un objeto, utilizamos Python para extraerlas y acceder por SSH. Decompilamos un archivo de Python y obtuvimos credenciales utilizando la libreria de Crypto lo que nos dio acceso al siguiente usuario. Finalmente encontramos un binario en el cual enviamos un objeto creado con Python y la libreria cPickle para ejecutar bash y obtener una shell como root.
Room
Titulo | Peak Hill |
---|---|
Descripción | Exercises in Python library abuse and some exploitation techniques |
Puntos | 210 |
Dificultad | Media |
Maker |
NMAP
Escaneo de puertos tcp, nmap nos muestra el puerto ftp (21, 20) y el puerto ssh (22) abiertos.
|
|
FTP
Ingresamos con las credenciales de anonymous (anonymous:anonymous) en donde encontramos dos archivos.
|
|
PICKLE - .CREDS
En el servicio FTP encontramos dos archivos uno de ellos solo era un archivo de prueba, el otro tenia un mensaje en binario, utilizamos CyberCheff para ver el mensaje. En el mensaje vemos strings relacionados con SSH, intentamos decodificar con otros tipos de codificaciones y cifrado pero no logramos obtener nada.
En la descripcion de la maquina encontramos que la maquina incluye ejercicios de Python además de eso encontramos dos veces la imagen de un pepinillo que puede hacer referencia a la libreria de Pickle
. Descargamos el archivo decodificado y utilizando Python logramos obtener el contenido, donde vemos tuplas con valores de ssh_user
y ssh_pass
.
|
|
Utilizamos un script para poder ordenar los datos segun el numero, basta con imprimir los diccionarios.
|
|
GHERKIN - USER
Utilizamos las credenciales que obtuvimos, en el servicio ssh y logramos obtener una shell.
DILL - USER
En el directorio principal del usuario encontramos un archivo .pyc
el cual trasladamos a nuestra maquina para obtener el codigo fuente utilizando uncompyle6.
El codigo fuente o script real nos muestra que es un servidor con su puerto y una funcion en donde se pueden ejecutar comandos, pero es necesario ingresar credenciales, tambien vemos las credenciales las cuales estan “convertidas a numeros”.
|
|
Revisamos si este script se estaba ejecutando en la maquina y vemos en proceso el script el cual lo ejecuta Dill
.
Utilizamos las misma libreria (Crypto.Util.number
) para obtener las credenciales reales.
|
|
Nos conectamos al puerto y utilizamos las credenciales, logramos ejecutar comandos. Intentamos autenticarnos en la sesion de SSH que teniamos pero al parecer no es la misma contraseña.
Tambien logramos obtener nuestra flag user.txt
.
En la carpeta principal de Dill
encontramos su clave privada para poder ingresar por medio del servicio SSH.
PRIVILEGE ESCALATION
Hacemos una pequeña enumeracion con sudo -l -l
y vemos que tenemos permisos root (sudo) para ejecutar el archivo /opt/peak_hill_farm/peak_hill_farm
. Al ejecutar dicho archivo nos pide algo, al ingresar cualquier cosa nos devuelve un error, despues de multiples intentos nos devolvio el mensaje failed to decode base64
.
Ingresamos un mensaje codificado pero no lo aceptó, intentamos mover el archivo a nuestra maquina pero no nos deja copiar o mover el archivo.
En el script nos habla de Peak Hill Farm
tal vez se refiera nuevamente a pickle, como el archivo que encontramos en el servicio de FTP. Creamos un payload que nos va permitir ejecutar bash
para obtener una shell root. Ver Pickle RCE
|
|
Logramos obtener una shell root.
Por alguna razon no logramos realizarle un cat
al la flag root.txt por lo que agregamos clave de ssh al archivo authorized_keys
para poder ingresar por este servicio y lograr leer nuestra flag.
Al parecer el archivo tiene dos espacios a los lados (del nombre).