Entrada

HackMyVM - Adria - Writeup

Reconocimiento

Escaneo de puertos

Para inciar hacemos un reconocimeinto de todo el rango de puertos de la máquina víctima.

nmap -p- -sS --min-rate 5000 -Pn -n 192.168.1.13 -oG allPorts

Untitled

Escaneo de servicios

Ahora una vez obtenidos los puertos que están abiertos, hacemos un escaneo con nmap para reconocer el servicio y versión de estos.

nmap -p22,80,139,445 -sCV 192.168.1.13 -oN targeted

Untitled

En base a esto podemos ver que nos encontramos ante una máquina Linux Debian probablemente, además que tiene un servicio http y un smb expuesto, por último en cuanto al ssh este es una versión más o menos reciente, asi que el vector de ataque irá por otro lado.


Ganando acceso

SMB

Primero antes de acceder a la web examino el servicio de samba para ver si existe algún recurso compartido a nivel de red disponible.

Untitled

En un principio con netexec/crackmapexec no se detecta nada, pero siempre es bueno probar con herramientas alternativas.

Untitled

Untitled

Ahora si vemos recursos disponibles y en DebianShare tenemos acceso de lectura.

Untitled

Dentro de este directorio habia un archivo zip, si lo descargamos y lo descomprimimos encontramos esto.

Untitled

Dado que cada una de las carpetas contiene muchos tipos de archivos distintos, prefiero utilizar grep -riR 'pass|password|username|user' para ver si existe alguna credencial o algo relacionado a esto.

Untitled

En la primera coincidencia encontramos las crendenciales admin:jojo1989, ya les adelanto que no es de SSH ni de SMB.

SubrionCMS

Ahora si revisamos la web encontramos que se trata de un blog que se administra con un CMS llamado Subrion.

Untitled

Si recordamos en el escaneo con nmap se detectó un robots.txt.

Untitled

Bueno si revisamos la ruta de /panel llegamos al panel de login del CMS.

Untitled

Ahora si probamos las credenciales encontradas anteriormente estas son del administrador del CMS.

Untitled

Ahora que estamos como admin, se me ocurre buscar alguna vuln relacionada a la versión de este CMS para ver si puedo ganar acceso al sistema.

Untitled

Untitled

Encontramos un CVE el cual permite subir un archivo .phar o .pht a través del apartado de subida de archivo del CMS. Si probamos este script no funcionará, asi que haré el procedimiento manual.

  1. Primero subimos un archivo con la extensión .phar o .pht el cual contenga un código malicioso que permita ejecutar comandos.

Untitled

Untitled

  1. Ahora debemos acceder a la ruta en donde se almacena este archivo, si recordamos en robots.txt habia una ruta /uploads.

    Untitled

    Untitled

    Ya con esto podemos montarnos una reverse shell.


Escalada de privilegios

Adriana

Ahora estando como el usuario www-data busco permisos, archivos, capabilites, etc. Me percato que si listamos los permisos con sudo podemos ejecutar un programa como adriana.

Untitled

Untitled

Si probramos un poco las opciones del comando, me fijo que al momento de utilizar el help se abre una vista paginada como cuando se utiliza el comando less. Por lo que con esto podemos spawnear una shell como el usuario adriana desde de este contexto.

Estando dentro de la vista páginada podemos hacer esto !/bin/bash

Untitled

Untitled

Untitled

Y ya estamos como adriana, con esto tendriamos la primera flag.

Root

Luego para la escalada a root hacemos el reconocimiento inicial de siempre y al igual que en el caso del usuario www-data, con adriana tambien podemos ejecutar un script como cualquier usuario, en nuestro caso el usuario root.

Untitled

Al parece se intenta usar rutas absolutas pero nada de eso sirve, ya que para comparar la contraseña se utilizan los corchetes dobles [[]] y estos contemplan las expresiones regulares.

1
2
3
4
5
6
7
8
9
10
11
#este caso es verdadero
if [[ "ho*" == "hola" ]];then
	echo "algo"
fi

# en cambio en el siguiente caso es un string literal y por lo tanto
# es falso
if [ "ho*" == "hola" ];then
	echo "algo"
fi

Untitled

Entonces una vez sabiendo esto podemos bypasear la comparacion, pero el zip se sigue encriptando con la contraseña del usuario root, por lo que se me ocurre bruteforcear con un script letra por letra para ir descubriendo la contraseña.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/bash
chars=( 'A' 'B' 'C' 'D' 'E' 'F' 'G' 'H' 'I' 'J' 'K' 'L' 'M' 'N' 'O' 'P' 'Q' 'R' 'S' 'T' 'U' 'V' 'W' 'X' 'Y' 'Z' 'a' 'b' 'c' 'd' 'e' 'f' 'g' 'h' 'i' 'j' 'k' 'l' 'm' 'n' 'o' 'p' 'q' 'r' 's' 't' 'u' 'v' 'w' 'x' 'y' 'z' '0' '1' '2' '3' '4' '5' '6' '7' '8' '9' )

pass=''

while true;do

	for i in "${!chars[@]}"
	do
		auth=$(echo "$pass${chars[$i]}*" | sudo /opt/backup 2>/dev/null| grep 'Authorized' && echo $pass)
		if [ $? == 0 ];then
			pass="$pass${chars[$i]}"
			echo $pass
			break
		fi
	done
done

Untitled

Ya con esto tendriamos los privilegios máximos en la máquina víctima y podriamos visualizar la flag en el directorio de root.

Esta entrada está licenciada bajo CC BY 4.0 por el autor.