Resolución del starting poing de Hack the Box Vaccine.
En primer lugar, vamos a comprobar si tenemos conexión con la máquina. Y si podemos averiguar el sistema operativo que utiliza mediante el ttl.
ping [Ip Víctima]
Podemos observar que tiene un ttl=63, por tanto, ya sabemos que estamos frente a una máquina Linux.
Ahora podemos escanear los puertos mediante nmap.
nmap -p- --open -T5 -n -v [Ip Víctima] -oG allPorts
Esto nos guardará los puertos abiertos en el archivo allPorts
por si posteriormente queremos revisarlos
de manera rápida accediendo al archivo guardado en nuestro directorio mediante la herramienta extractPorts
.
Puedes encontrar la descripción y la herramienta extractPorts creada por S4vitar en mi repositorio: ExtractPorts
Es este caso podemos observar los puertos 21, 22 y 80 abiertos por el protocolo TCP.
Ahora pasaremos a realizar un escaneo más exhaustivo utilizando una serie de scrips de reconocimiento:
nmap -sC -sV -v -p21,22,80 [Ip Víctima] -oN target
-sC : Lanza scrips básicos de reconocimiento.
-sV : Localiza la versión y servicio de los puertos definidos.
-p : Puertos a escanear. Ej: -p21,22,80
-oN : Reporta los resultados en formato nmap al archivo targed.
Este escaneo, al igual que el anterior, nos guardará los resultados en nuestro directorio en el archivo target
.
Para abrir este archivo podemos utilizar el comando cat
.
Algo interesante que podemos observar en el reporte de nmap es que el puerto 21/tcp permite el acceso mediante
el inicio de sesión Anonymous. Este inicio de sesión por defecto nos permite entrar con el usuario anonymous
y sin necesidad de utilizar contraseña.
También podemos observar que se encuentra un archivo disponible backup.zip
.
Aquí podemos ver que tenemos un servicio ssh activo, usando un sistema Ubuntu.
El puerto 80 tiene un servicio http activo, el cual, si nos dirigimos a firefox, podemos ver que nos redirige hasta una página de registro:
Tras probar los usuarios y contraseñas más comunes no conseguimos entrar, por tanto, seguiremos investigando.
En primer luegar, vamos a tratar de acceder como el usuario ‘anonymous’ por el puerto 80 que utiliza un servicio FTP
y descargar el archivo backup.zip
.
Para ello emplearemos el comando ftp
y especificando el usuario anonymous
, luego nos pedirá una contraseña,
como este usuario no requiere de contraseñas, simplemente presionamos Enter.
ftp [Ip Víctima]
Ahora, mediante un ls
o un dir
, vamos a tratar de ver que archivos encontramos:
En mi caso no me permite ejecutar ninguno de los dos comandos. Pero como podemos ver, nos reporta que consideremos
utilizar PASV. Para ello, debemos activar el modo passive
:
passive
Tras activar el modo passive
ya podremos utilizar el comando ls
:
Podemos ver que tenemos aquí el archvivo ‘backup.zip’. Para tratar de descargarlo utilizaremos el comando get
.
Recordar que podeis ver todos los comandos disponibles dentro se la shell de ftp utilizando el comando help
.
Para descargar el archivo.zip:
get backup.zip
Tener en cuenta que la shell está es muy inestable, en caso de error o de reportaros un Not Service
cerrar la shell
con el comando exit
y volver a iniciar la shell siguiendo todos los pasos de manera continua, ya que a los pocos
minutos, se desconecta.
Una vez descargado el archivo.zip, cerramos la shell ftp y nos dirigimos al directorio donde hemos descargado el
arhcivo backup.zip
.
Como podeís ver, tenemos los dos archivos previamente creados con nmap (allPorts y target) y nuestro archivo .zip.
Vamos a crear un directorio mediante mkdir
llamado Backup
y vamos a introducir el archivo .zip para luego tratar
de descomprimirlo.
mkdir Backup
mv backup.zip ./Backup/
Una vez dentro del nuevo directorio, aplicaremos el comando unzip
para tratar de descomprimirlo:
unzip backup.zip
Al intentar descomprimir el archivo nos pide una contraseña, como desconozco la contraseña, presionado Enter
podemos ver como nos reporta que dentro del .zip contiene dos archivos (index.php y style.css):
Como desconocemos la contraseña, vamos a utilizar la herramienta John the Ripper para tratar de descifrarla. En caso de no tener la herramienta instalada o queráis leer más sobre ella podréis encontrarlo en el siguiente enlace: John the Ripper
Nos posicionamos en el directorio donde se encuentre el archivo backup.zip:
En primer lugar, vamos a extraer el hash del archivo backup.zip
, para ello utilizaremos el comando zip2john y
guardaremos los resultados en un archivo nuevo que llamaremos hash1
:
zip2john 'backup.zip' > hash1
Como podemos ver, se nos ha generado un nuevo archivo en nuestro directorio actual con el nombre de hash1
.
Mediante cat
podemos ver su contenido, el hash extraído del archivo .zip.
cat hash1
Perfecto, ya tenemos nuestro hash listo para explotarlo, ahora mediante la herramienta John, vamos a tratar de
descifrar el hash
mediante un diccionario de fuerza bruta llamado rockyou.txt
. Rockyou.txt es un diccionario
con más de 14 millones de contraseñas, el cual se puede encontrar por internet en distintos repositorios.
Es aconsejable alojar el archivo rockyou.txt en la ruta /usr/share/wordlists/
.
Para ejecutar el ataque por diccionario con John, utilizaremos la variable --wordlist
especificando la ruta del
diccionario, y luego, también especificamos el archivo que queremos tratar de descifrar, en nuestro caso hash1
:
john --worlist=/usr/share/wordlists/rockyou.txt hash
Como podemos ver, la herramienta John enseguida nos reporta que ha procesado 1 contraseña y que no quedan más hashes que crackear.
Para poder ver la contraseña simplemente utilizamos John con la variable --show
y especificar el archivo.
john --show hash1
Ahora ya podemos copiar la contraseña y descomprimir el archivo .zip:
unzip backup.zip
Y podemos ver como ya tenemos los archivos index.php y style.css en nuestro direcctiorio:
Tras revisar el archivo index.php, podemos ver como es una copia del código fuente de la página de inicio de sesión
anterior.
Pero si nos fijamos, incluye unas líneas adicionales. Para ver el código fuente podemos abrir el archivo
index.php
mediante cat
o dirigirnos a la url http://[Ip Víctima]/index.php
(la página es visualmente es igual) y
con clic derecho sobre la página y ‘ver código fuente’.
cat index.php
El apartado que a nosotros nos interesa es el session_start
, donde nos reporta un nombre de usuario admin
y un
hash de una contraseña.
Para trabajar de manera más cómoda, crearemos un archivo llamado credentials.txt y guardaremos el usuario(admin) y el hash encontrados.
nano credentials.txt
Guardamos (Cntrl + o) y salimos (Cntrl + x).
Tenemos un hash, pero aún no sabemos en qué tipo de algoritmo está basado. Para saberlo, utilizaremos la herramienta Hashid, la cual nos reportará el tipo de algoritmo más probable que se utilizó en su día para crear ese hash a partir de una contraseña.
Podéis encontrar más información aquí: HashID
Para instalar la herramienta:
sudo apt install hashid
Para ejecutarla:
hashid [Hash Núm]
hashid 2cb42f8734ea607eefed3b70af13bbd3
Según la herramienta HashId el algoritmo de nuestro hash es un MD2, MD5 o MD4. Recordar que la aplicación nos reporta los más probables, en ocasiones el primero en reportar no es el correcto. Para contrastar esta información voy a mostraros otra herramienta que sirve para lo mismo, pero es un poco más precisa.
Está herramienta hace básicamente lo mismo que HashId, nos reporta el algoritmo del hash deseado, con la diferencia de que Hash-Identifier es algo más precisa a la hora de reportar los resusltados. Podéis encontrar más información aquí: Hash Identifier
Para instalar:
sudo apt install hash-identifier
Para ejecutarlo:
hash-identifier
Vemos como se nos despliega una interfaz gráfica donde pegaremos el hash que queremos analizar.
Una vez analizado el hash, vemos como en la parte superior nos reporta los algoritmos, en este caso MD5.
Perfecto, ya tenemos un hash y conocemos el algoritmo en el que esta basado. El siguiente paso será crackear el hash. Para ello, vamos a ver dos formas de crakear un hash, en primer lugar utilizaremos la herramienta HashCat.
HashCat es un descifrador de contraseña popular y eficaz. Mediante esta herramienta trataremos de descifrar el hash, en primer
lugar, crearemos un arhivo llamado hash2
donde guardamos el hash a descifrar.
Para crear el archivo:
echo 'Número de Hash' > hash2
En caso de no tener instalado HashCat:
sudo apt install hashcat
Ahora debemos asegurarnos que tenemos el diccionario rockyou.txt
en el direcctorio /usr/share/wordlists/
.
Podemos descargarnos o copiar el diccionario rockyou.txt
en el siguiente enlace:
https://www.kaggle.com/datasets/wjburns/common-password-list-rockyoutxt
Bien, ya lo tenemos todo preparado para ejecutar HashCat, para ello, ejecutamos el siguiente comando:
hashcat -a 0 -m 0 'Número Hash' /usr/share/wordlists/rockyou.txt
-a : Attack-mode. El 0 representa el modo Straight
.
-m : Hash-type. El 0 representa MD5. Esto lo podemos ver con el comando hashcat --help
.
hash2 : Nombre del archivo que contiene el hash que queremos descifrar.
rockyou.txt : Es un diccionario con más de 14 millones de contraseñas y hashes.
Nos indica que ha encontradoalgo y que utilizemos --show
para poder visualizarlo.
hashcat --show hash2
Como podemos ver, Hashcat descifró la contraseña: qwerty789
Ya conocemos un usuario admin
y una contraseña qwerty789
, con esta información vamos a volver a la página web donde nos
aparecia una pagina de inicio de sesión y vamos a tratar de acceder utilizando estos datos.
Genial, podemos ver como tenemos acceso como el usuaio admin
.
Tras revisar el contenido de la página, vemos como el tablero no reporta nada especial, sin embargo, nos muestra un catálogo que podría estar conectado con la base de datos.
Vamos a tratar de realizar algunas consultas y ver que ocurre:
Al verificar la URL, podemos ver que hay una variable $search
que es responsable de buscar en el catálogo.
Intentemos forzar un error en la URL a ver que nos reporta, para ello simplemente quitaremos una comilla de la URL:
Vemos como al tener una sintaxis erronea, nos repotar el siguiente mensaje:
Tras ver esto, vamos a probar si es vulnerable a una inyeccion SQL, se puede hacer manualmente, pero para facilitarnos el trabajo
usaremos una herramienta llamada Sqlmap
.
SQLmap es una herramienta de código abierto utilizada en pruebas de penetración para detectar y explotar fallas de inyección SQL. SQLmap automatiza el proceso de detección y explotación de inyección SQL. Los ataques de inyección de SQL pueden tomar el control de las bases de datos que utilizan SQL.
Viene preinstalado con Parrot OS y Kali Linux, sin embargo, puede instalarlo a través del repositorio o con el siguiente comando:
sudo apt install sqlmap
Una vez tenemos SQLmap instalado vamos a ejecutarlo. Para ello en primer lugar unicamente especificaremos la url
.
sqlmap --url "10.129.25.145/dashboard.php?search="
Como podeís ver no nos muestra nada interesante utilizando solo la URL.
Tambien nos muestra que no tenemos unas cookies de sesión definidas. Como
ya estamos registrados como el usuario admin
podemos utilizar sus credenciales de las cookies de inicio de sesión.
Para ello volvemos a firefox y mediante cntrl + shift + c
o clic derecho e Inspeccionar se nos abrirá una pestaña. Dentro de la pestaña vamos hasta
Almacenamiento
y luego Cookies
. Vemos como nos muestra un Nombre
y un Valor
, vamos a copiarlos y utilizarlos con SQLmap
.
Ahora especificaremos los datos de inicio de sesión de las cookies en el comando anterior, esto lo haremos mediante la variable --cookie
, tambien vamos a especificar mediante --batch
que automatice todo el proceso sin necesidad de que nos pregunte que tareas realizar.
Y lo más importante, lo que queremos buscar mediante el escaneo, en nuestro caso vamos a tratar de enumerar los archivos de la base detos mediante
la variable --current-db
.
sqlmap --current-db --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva" --batch
Podemos ver como nos reporta que el nombre de la base de datos es public
.
Conociendo el nombre de la base de datos, mediante sqlmap vamos a tratar de numerar las tablas de la sbase de datos public
:
sqlmap -D public --tables --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva" --batch
-D
: Indica que vamos a especificar una base de datos. En nuestro caso public
.
--tables
: Está variable nos reportará las tablas de las base de datos que hemos especificado.
Sqlmap nos muestra que dentro de la base de datos public
existe una tabla llamada cars
.
Nuevamente realizaremos otro escaneo especificando la tabla cars:
sudo sqlmap -D public -T cars --columns --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva" --batch
-T
: Indica que vamos a especificar las tablas. En nuestro caso cars
.
--columns
: Nos reporta las columnas de la tabla especificada.
Genial, vemos como nos a reportado la siguiente tabla:
Está tabla tampoco parece reportar nada innteresante así que trataremos de crear mediante Sqlmap una Shell interactiva.
Para ello utilizaremos la siguiente variable de Sqlmap:
sudo sqlmap --os-shell --url "http://10.129.25.145/dashboard.php?search=Elixir" --cookie="PHPSESSID=dcep13le13prvgcl8ub8cqgjva"
Ya tenemos nuestra shell activa, vamos a investigar un poco para ver que
archivos contiene. Primero mediante ls
vamos a ver que tenemos en el directorio en el que nos encontramos.