Redeemer Machine

Machine name: Redeemer

Address: https://app.hackthebox.com/starting-point

Introdução

Bancos de dados são coleções de informações organizadas que podem ser facilmente acessadas, gerenciadas e atualizadas. Em muitos ambientes, os sistemas de banco de dados são extremamente importantes, pois comunicam informações relacionadas a transações de vendas, inventário de produtos, perfis de clientes e atividades de marketing.

Existem diferentes tipos de bancos de dados, e um deles é o Redis, que é um banco de dados que funciona “em memória”. Bancos de dados em memória são aqueles que dependem essencialmente da memória primária para armazenamento de dados (ou seja, o banco de dados é gerenciado na RAM do sistema), em contraste com os bancos de dados que armazenam dados no disco ou SSDs. Como a memória primária é significativamente mais rápida do que a memória secundária, o tempo de recuperação de dados em bancos de dados “em memória” é muito pequeno, oferecendo tempos de resposta muito rápidos e eficientes.

Bancos de dados em memória como o Redis são tipicamente usados para armazenar em cache dados que são frequentemente solicitados para uma recuperação rápida. Por exemplo, se houver um site que retorna preços na página inicial, o site pode ser programado para primeiro verificar se os preços necessários estão no Redis e, caso contrário, verificar no banco de dados tradicional (como MySQL ou MongoDB). Quando o valor é carregado do banco de dados, ele é armazenado no Redis por um curto período de tempo (segundos, minutos ou horas), para lidar com solicitações semelhantes que chegam durante esse intervalo. Para sites com muito tráfego, essa configuração permite uma recuperação muito mais rápida para a maioria das solicitações, mantendo um armazenamento estável de longo prazo no banco de dados principal.

Este laboratório foca na enumeração de um servidor Redis remotamente e em como realizar o download do banco de dados para recuperar a flag. Durante esse processo, aprendemos sobre o uso da ferramenta de linha de comando redis-cli, que ajuda a interagir com o serviço Redis. Também exploramos alguns comandos básicos do redis-cli, usados para interagir com o servidor Redis e o banco de dados de chave-valor.

Enumeração

Para verificar a conectividade e a disponibilidade do alvo, podemos executar o comando ping com o endereço IP da máquina de destino. Após duas respostas bem-sucedidas, podemos interromper o comando ping, pois estamos satisfeitos com a qualidade da conexão. Nem sempre é necessário executar os comandos por um longo tempo. Às vezes, obter um trecho do resultado ou uma visão geral, em vez de um relatório detalhado, é mais eficiente em termos de tempo do que a alternativa.

Imediatamente após, podemos realizar uma varredura preliminar do alvo. Usando o nmap com a opção de detecção de versão de serviço apropriada, escaneamos o endereço IP em busca de portas e serviços abertos.

Ao executarmos o nmap sem informarmos as portas que eram para serem escaneadas, ele scaneia as mil portas mais utilizadas. Como nada foi encontrado, vamos solicitar para que ele escaneie todas as 65.535 portas possíveis. Você irá percebe o que scan irá demorar muito mais. Mas seja paciente…

nmap -sV -p- 10.129.136.187 –stats-every=5s

Podemos inferir a partir do resultado da varredura que apenas uma porta está aberta na máquina alvo, ou seja, a porta 6379, que está executando um servidor Redis. Utilizei o parâmetro –stats-every=5s, para que sejamos informados da progressão do escaneamento a cada 5 segundos.

O que é o Redis?

O Redis (REmote DIctionary Server) é um sistema de armazenamento de dados NoSQL, open-source, avançado e baseado em pares chave-valor. Ele é usado como banco de dados, cache e corretor de mensagens. No Redis, os dados são armazenados no formato de dicionário, com chaves associadas a valores, o que permite um acesso rápido e eficiente às informações frequentemente requisitadas.

A principal aplicação do Redis é o armazenamento temporário de dados que precisam ser acessados rapidamente, como o cache de resultados de consultas ou dados que são frequentemente requisitados, reduzindo a carga sobre bancos de dados principais e melhorando o desempenho. Por exemplo, um site pode usar o Redis para armazenar temporariamente os preços de produtos, permitindo um acesso mais rápido nas próximas requisições.

Apesar de ser um banco de dados em memória, o Redis oferece persistência, salvando periodicamente os dados em disco para garantir a durabilidade, equilibrando acesso rápido e consistência. Isso torna o Redis especialmente útil em aplicativos de alto desempenho, onde a velocidade e a confiabilidade são essenciais.

O servidor

O Redis funciona como um software do lado do servidor, portanto, sua funcionalidade principal está no seu componente de servidor. O servidor fica ouvindo por conexões de clientes, seja programaticamente ou por meio da interface de linha de comando.

CLI

A interface de linha de comando (CLI) é uma ferramenta poderosa que fornece acesso completo aos dados e funcionalidades do Redis. Se você estiver desenvolvendo um software ou ferramenta que precise interagir com o Redis, a CLI permite manipular o banco de dados e executar diversos comandos diretamente no servidor.

O Banco de Dados

O banco de dados do Redis é armazenado na memória RAM do servidor para permitir um acesso rápido aos dados. O Redis também grava o conteúdo do banco de dados no disco em intervalos variados, garantindo sua persistência e criando um backup caso ocorra alguma falha no sistema.

Instalando o redis-cli

Agora, para podermos interagir remotamente com o servidor Redis, precisamos baixar a ferramenta redis-cli. Ela pode ser baixada utilizando o seguinte comando:

sudo apt install redis-tools

Alternativamente, também podemos nos conectar ao servidor Redis utilizando a ferramenta netcat, mas neste caso, usaremos o redis-cli, pois ele oferece uma maneira mais conveniente de interagir com o servidor Redis.

Enumerando o Servidor Redis

Após instalar com sucesso a ferramenta redis-cli, vamos visualizar sua página de ajuda. Para isso, basta digitar o comando abaixo no terminal:

redis-cli –help

No nosso caso, precisaremos usar o seguinte switch para especificar o host ao qual queremos nos conectar:

redis-cli -h <host>

Substitua <host> pelo endereço IP ou nome do host do servidor Redis que você deseja acessar. Isso irá conectar o redis-cli ao servidor Redis remoto para que possamos começar a interagir com o banco de dados.

Após uma conexão bem-sucedida com o servidor Redis, devemos conseguir ver um prompt no terminal, como mostrado na imagem acima. Um dos comandos básicos de enumeração do Redis é o “info”, que retorna informações e estatísticas sobre o servidor Redis. Como a saída desse comando é bastante longa, eu cortei as informações menos relevantes.

A seção “keyspace” fornece estatísticas sobre o dicionário principal de cada banco de dados. As estatísticas incluem o número de chaves e o número de chaves com expiração. No nosso caso, na seção “Keyspace”, podemos ver que existe apenas um banco de dados com o índice 0. Vamos selecionar esse banco de dados lógico do Redis usando o comando select, seguido do número do índice do banco de dados que precisa ser selecionado.

Além disso, podemos listar todas as chaves presentes no banco de dados usando o comando:

keys *

Esse comando retornará todas as chaves armazenadas no banco de dados selecionado.

Finalmente, podemos visualizar os valores armazenados para uma chave correspondente usando o comando get, seguido pela chave:

get <key>

Question 01: Which TCP port is open on the machine?

Primeiramente, precisamos verificar quais portas estão abertas e o que está sendo executado em cada uma delas, utilizando a ferramenta Nmap:

nmap -sV -T5 -p- 10.129.224.175

Question 02: Which service is running on the port that is open on the machine?

redis

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

In-memory Database

Question 04: 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

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

-h

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

info

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

Para se conectar ao banco de dados, utilize o comando abaixo:

Para obter a versão do redis, vamos usar o comando info:

5.0.7

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

select

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

Para ver todas as chaves, use o comando keys:

keys *

4

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

Keys *

Question 11: Submit the flag

Para visualizar o conteúdo da flag, use o comando get <flag_name>

get flag

03e1d2b376c37ab3f5319922053953eb

Rolar para cima