githubEditar

GoodGames

https://app.hackthebox.com/machines/GoodGames

Sumário

A avaliação de segurança da infraestrutura do GoodGames revelou uma cadeia crítica de vulnerabilidades, iniciando com uma Injeção de SQL (SQLi) não autenticada na aplicação web pública. Essa falha permitiu a extração de credenciais administrativas, levando a uma vulnerabilidade secundária de Injeção de Template no Lado do Servidor (SSTI) dentro de um portal de gerenciamento interno. A exploração do SSTI resultou em Execução Remota de Código (RCE) como usuário root dentro de um ambiente de container. Finalmente, uma configuração incorreta na estratégia de montagem de volumes do Docker, combinada com a reutilização de credenciais, permitiu uma fuga do container (breakout) para o sistema host, resultando no comprometimento administrativo total do servidor.

Cadeia de Ataque (Kill Chain)

1

Reconhecimento

Varredura Ativa (T1595arrow-up-right) foi utilizada para identificar portas abertas e versões de serviços.

2

Acesso Inicial

A exploração de uma aplicação voltada para a internet (T1190arrow-up-right) via Injeção de SQL garantiu acesso ao portal web.

3

Execução

Um interpretador de comandos e scripts (T1059arrow-up-right) foi alavancado via SSTI para executar uma reverse shell baseada em Python.

4

Persistência

Contas válidas (T1078arrow-up-right) foram utilizadas para acesso SSH ao host após a descoberta de reutilização de credenciais.

5

Descoberta

A descoberta de arquivos e diretórios (T1083arrow-up-right) identificou os pontos de montagem de volume compartilhado e o usuário augustus.

6

Movimentação Lateral

Serviços remotos (T1021.004arrow-up-right) via SSH permitiram a movimentação do container para o host.

7

Escalação de Privilégios

O abuso de executáveis SUID/SGID (T1548.001arrow-up-right) através do volume compartilhado do Docker permitiu a elevação de privilégios para root no host.


Reconhecimento

A interação inicial com o alvo começou com uma verificação de conectividade e descoberta de serviços para definir a superfície de ataque.

Descoberta de Host

#attack/T1018

Uma requisição de eco ICMP foi enviada para o IP alvo 10.10.11.130. O TTL retornado de 63 sugere que o host é provavelmente um sistema baseado em Linux.

attacker> ping -c 1 10.10.11.130
PING 10.10.11.130 (10.10.11.130) 56(84) bytes of data.
64 bytes from 10.10.11.130: icmp_seq=1 ttl=63 time=167 ms

--- 10.10.11.130 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 167.227/167.227/167.227/0.000 ms

Enumeração de Rede

#attack/T1046 #attack/T1595

Uma varredura completa de portas TCP foi conduzida usando rustscan para identificar portas abertas e versões de serviços.

A varredura revelou uma única porta aberta (80) executando um servidor web Apache. Notavelmente, o cabeçalho http-server-header indica que o backend é alimentado por Werkzeug 2.0.2 e Python 3.9.2, o que é característico de uma aplicação web baseada em Flask. O serviço também vazou um hostname: goodgames.htb.

O hostname identificado foi adicionado ao arquivo local /etc/hosts para permitir o roteamento correto do virtual host.


Exploração Web

Uma varredura secundária usando whatweb confirmou a presença do Python 3.9.2 e do framework Werkzeug. A aplicação utiliza Bootstrap e JQuery em seu frontend.

A página inicial apresenta uma interface de comunidade e loja de jogos. Uma função de login foi identificada, fornecendo um ponto de entrada potencial para ataques baseados em autenticação.

Bypass de Autenticação (SQL Injection)

#attack/T1190 #owasp/A05_2025

Durante a avaliação do endpoint /login, uma vulnerabilidade de Injeção de SQL (SQLi) foi identificada no parâmetro email. Ao enviar uma tautologia, foi possível burlar o mecanismo de autenticação.

triangle-exclamation

Descoberta: Injeção de SQL (Bypass de Autenticação)

A seguinte requisição POST demonstra a exploração da vulnerabilidade:

O servidor respondeu com um 200 OK e configurou um cookie de sessão, indicando um bypass bem-sucedido como o usuário administrativo.

circle-check

Acesso Autenticado

Ao fazer o login, um ícone "Admin Panel" tornou-se visível. Inspecionar o link revelou um novo subdomínio interno: http://internal-administration.goodgames.htb/.

Este subdomínio foi adicionado ao arquivo /etc/hosts para posterior enumeração.

Enumeração do Admin Interno

#attack/T1083 #attack/T1592

Ao obter acesso autenticado ao site principal, uma interface administrativa foi descoberta em http://internal-administration.goodgames.htb/. Este portal parece ser uma aplicação Flask separada usada para gerenciamento de backend.

Exfiltração de Banco de Dados via SQL Injection

#attack/T1190 #owasp/A05_2025

A vulnerabilidade de Injeção de SQL identificada anteriormente no endpoint /login do goodgames.htb foi alavancada para realizar a exfiltração de dados. Como a aplicação retorna comprimentos de resposta diferentes com base no sucesso da consulta, uma abordagem baseada em UNION foi utilizada para extrair informações sensíveis do banco de dados backend.

triangle-exclamation

Descoberta: Injeção de SQL (Exfiltração de Dados)

1. Enumeração de Colunas

O número de colunas na consulta atual foi determinado usando a cláusula ORDER BY. Uma resposta indicando um login bem-sucedido foi recebida com ORDER BY 4, enquanto ORDER BY 5 resultou em um erro, confirmando uma estrutura de 4 colunas.

2. Identificando Pontos de Reflexão

Uma instrução UNION SELECT foi usada para identificar qual coluna reflete dados de volta para a interface do usuário. A quarta coluna foi identificada como sendo renderizada dentro da mensagem "Welcome" na página de login bem-sucedido.

Antes do dump do banco de dados, um teste rápido de Injeção de Template no Lado do Servidor (SSTI) foi realizado injetando {{7*7}}. No entanto, o payload foi refletido literalmente, sugerindo que a entrada não está sendo processada pelo motor de template Jinja2 neste ponto de reflexão específico.

3. Mapeamento do Esquema do Banco de Dados

Com o ponto de reflexão confirmado, o ambiente do banco de dados foi enumerado. O sistema foi identificado como MySQL 8.0.27, rodando com o usuário main_admin@localhost em um banco de dados chamado main.

Posterior enumeração das tabelas e colunas no information_schema identificou uma tabela user contendo credenciais sensíveis.

4. Extração e Quebra de Credenciais

#attack/T1110_002 #attack/T1212

As colunas email, name e password foram extraídas da tabela user, revelando uma credencial.

O hash administrativo (2b22337f218b2d82dfc3b6f77e7cb8ec) foi identificado como um hash MD5 padrão. Um ataque de força bruta offline foi realizado usando John the Ripper e a wordlist rockyou.txt.

circle-check

Credenciais Obtidas


Execução

Injeção de Template no Lado do Servidor (SSTI)

#attack/T1190 #owasp/A05_2025

Com as credenciais administrativas admin:superadministrator recuperadas do banco de dados principal, obteve-se acesso à interface de gerenciamento interna em http://internal-administration.goodgames.htb.

Ao acessar o sistema de forma autenticada, a página "Settings" foi identificada como um vetor potencial para vulnerabilidades baseadas em entrada. Especificamente, o campo responsável por atualizar o nome do usuário refletia a entrada de volta no cabeçalho do perfil do usuário.

alt text

O teste para Injeção de Template no Lado do Servidor (SSTI) foi realizado enviando a expressão matemática {{7*7}}. A aplicação renderizou o resultado 49 na visualização do perfil, confirmando que o motor de template de backend — identificado como Jinja2 — estava executando código dentro dos delimitadores de chaves duplas.

triangle-exclamation

Descoberta: SSTI para RCE

RCE e Descoberta de Ambiente

Para confirmar a Execução Remota de Código (RCE), um payload direcionado ao método os.popen foi utilizado. A execução do comando id revelou que a aplicação estava rodando com privilégios de root.

Acesso Inicial

#attack/T1059_004

Para estabelecer uma sessão interativa mais estável, um payload de reverse shell foi injetado através da vulnerabilidade SSTI após verificar a conectividade de saída via curl.

Um listener na máquina do atacante recebeu a conexão de entrada:

circle-check

Shell Root no Container

O shell foi estabilizado usando técnicas padrão de TTY para permitir a navegação adequada de comandos e manipulação de sinais.

A enumeração do diretório /home revelou um usuário chamado augustus. Embora a sessão atual fosse de root, a flag de usuário foi localizada dentro deste diretório home.


Movimentação Lateral

Fuga de Container e Descoberta de Host

#attack/T1611

Enquanto operava como root dentro do container Docker, uma discrepância foi notada: o diretório /home/augustus existia apesar do usuário augustus não estar presente no arquivo /etc/passwd do container. A investigação dos pontos de montagem confirmou que este diretório é um volume compartilhado montado a partir da partição física do host (/dev/sda1).

A interface de rede do container (eth0) mostrava um endereço IP 172.19.0.2. Com base em configurações padrão de gateway do Docker, assumiu-se que o host seria o 172.19.0.1. Uma verificação de conectividade confirmou isso.

Uma varredura de portas interna foi realizada do container para o host usando uma técnica de escaneamento TCP nativa em Bash, revelando que o host possuía SSH (Porta 22) e HTTP (Porta 80) abertos.

Estabelecendo Acesso ao Host (Reutilização de Credenciais)

#attack/T1110 #attack/T1078 #attack/T1021_004

Um ataque de reutilização de credenciais foi tentado usando a senha superadministrator (recuperada anteriormente via SQL Injection) para o usuário augustus identificado através do diretório home compartilhado.

triangle-exclamation

Descoberta: Reutilização de Credenciais SSH

A autenticação foi bem-sucedida, fornecendo um shell no sistema host.


Escalação de Privilégios

Abuso de SUID via Volume Compartilhado

#attack/T1548_001 #attack/T1611

O volume compartilhado em /home/augustus fornece uma ponte entre o contexto root do container e o contexto augustus do host. Como o usuário root do container tem controle total sobre os arquivos neste diretório compartilhado, é possível criar um binário SUID no host manipulando o arquivo a partir do container.

triangle-exclamation

Descoberta: Escalação de Privilégios via Volume Compartilhado (SUID)

1. Preparando o Binário (Host)

Na máquina host, o binário padrão do Bash foi copiado para o diretório home.

2. Escalando Privilégios (Container)

Retornando à sessão do container, o usuário root modificou as permissões do binário localizado no volume compartilhado. Ao alterar o proprietário para root e aplicar o bit SUID, o binário tornou-se um vetor para escalação de privilégios no host.

3. Execução (Host)

De volta à sessão SSH do host, o usuário augustus executou o binário modificado com a flag -p para preservar o ID de usuário efetivo (EUID) de root.

circle-check

Acesso Root Obtido

A flag de root foi recuperada do diretório home administrativo:

Atualizado