Redeemer

Created by 0xnotkyo

hackthebox.com - © HACKTHEBOX

Os: Linux

Difficulty: Very Easy

0. Introducción

Redeemer es la cuarta de las máquinas de Starting Point en HackTheBox. Es una máquina Linux en la que está corriendo el servicio de Redis el cual tendremos que comprometer para llegar a obtener la flag. Además, durante la explotación de la máquina tendremos que ir respondiendo a preguntas que tienen la función de guiar en la resolución de estas máquinas.

1. Ping

Para comenzar, hacemos ping a la dirección IP del objetivo para verificar si nuestros paquetes llegan a su destino.

Como estamos recibiendo paquetes desde el ordenador de destino, sabemos que la conexión está establecida correctamente.

  • TTL = 63 → Este valor (cercano a 64) indica que nos encontramos ante una máquina Linux.

2. Reconocimiento con NMAP

Ejecutaremos la instrucción básica de reconocimiento con los parámetros que se explican a continuación:

🔴🟡🟢

nmap -p- -sS --min-rate 5000 -n -Pn -vvv --open 10.129.13.111 -oG allPorts
Parámetro
Función

-p-

Indicamos que queremos analizar el rango completo de puertos. Del 1 al 65535

-sS

Especificación del tipo de escaneo. En este caso SYN Scan es rápido y a la vez sigiloso ya que no termina de establecer la conexión y puede pasar desapercibido en los logs de conexión

--min-rate 5000

Acelera el proceso de escaneo ya que no tramita paquetes cuya velocidad sea inferior a 5000 paquetes por segundo. Esto puede hacer menos sigiloso el escaneo pero más rápido

-n

Indica que no queremos aplicar resolución DNS. Más velocidad de escaneo

-Pn

Escaneo de puertos incluso si el host no responde a los ping. Ignora si el host está o no online

-vvv

Triple verbose para que los resultados que vaya obteniendo los vaya mostrando por pantalla sin necesidad de acabar el escaneo

--open

Un puerto principalmente puede estar Abierto, Cerrado o Filtrado. En un principio nos centraremos en aquellos que están Abiertos.

-oG allPorts

Salida del resultado en un fichero llamado allPorts en formato "grepable" lo cuál aportará ventajas a la hora de tratarlo posteriormente.

El resultado del comando ejecutado sería el siguiente:

Podemos ver que el puerto 6379/tcp está abierto y ejecutando el servicio redis.

  • Puerto 6379 = Redis → El servicio Redis es un motor de base de datos en memoria, basado en el almacenamiento en tablas de hashes pero que opcionalmente puede ser usada como una base de datos durable y persistente.

3. Puertos abiertos (versiones)

Sobre los puertos abiertos detectados en la máquina víctima, ejecutaremos un escaneo con Nmap enfocado a idenfiticar las versiones de los servicios que se están ejecutando en ellos.

🔴🟡🟢

nmap -scV -p6379 10.129.13.111 -oN targeted
Parámetro
Función

-scV (también se puede poner como -sC -sV)

Realiza un escaneo en busca de versiones comparando con una base de datos de servicios conocidos

-p6379

Indica que se analizará en este caso únicamente el puerto 6379

-oN targeted

Salida del resultado en un fichero llamado targeted en formato normal de NMAP

El resultado del comando ejecutado sería el siguiente:

Este escaneo ha aportado información sustanciosa para la consecución de la máquina:

  • Redis key-value store 5.0.7 → Esta sería la versión de Redis de la máquina víctima. Lo tendremos en cuenta más adelante tanto para la resolución de las preguntas como en la búsqueda de posibles vulnerabilidades.

A continuación, comenzaremos a responder las preguntas que nos indica la plataforma:

Task 1:

Which TCP port is open on the machine?

6379

Task 2:

Which service is running on the port that is open on the machine?

Redis

Task 3:

What type of database is Redis? Choose from the following options: (i) In-memory Database, (ii) Traditional Database

In-memory Database

Task 4:

Which command-line utility is used to interact with the Redis server? Enter the program name you would enter into the terminal without any arguments.

redis-cli

Task 5:

Which flag is used with the Redis command-line utility to specify the hostname?

-h

Task 6:

Once connected to a Redis server, which command is used to obtain the information and statistics about the Redis server?

info

Task 7:

What is the version of the Redis server being used on the target machine?

5.0.7

4. Intrusión

Sabiendo que la máquina víctima tiene el servicio Redis trataremos de conectarnos a él. Para ello ejecutaremos:

🔴🟡🟢

redis-cli -h 10.129.13.111

Uno de los comandos más básicos y útiles para obtener información en Redis es info. Este comando devuelve un resumen detallado con datos y estadísticas sobre el estado del servidor Redis.

Dado que la salida del comando puede ser muy extensa, normalmente se omiten las secciones quie no son tan relevantes para centrarse solo en la información más útil.

La sección Keyspace muestra datos estadísticos sobre el contenido principal de cada base de datos. En ella se indica cuántas claves hay y cuántas de esas claves tienen una fecha de expiración configurada.

En nuestro caso específico, dentro de esa sección se observa que solo hay una base de datos disponible, identificada con el índice 0.

Para acceder a esa base de datos, usamos el comando select seguido del número del índice correspondiente:

Con el comando keys * podemos listar todas las keys (claves) disponibles. Como podemos ver, aparece una key que despierta el interés llamada flag y podemos traerla mediante el comando get flag.

Ya tenemos toda la información necesaria para completar el resto de preguntas:

Task 8:

Which command is used to select the desired database in Redis?

select

Task 9:

How many keys are present inside the database with index 0?

4

Task 10:

Which command is used to obtain all the keys in a database?

keys *

~Happy Hacking

Última actualización