Skip to main content

Relato do Fetch the Flag CTF 2022: Potty Training

feature ctf potty training

12 de novembro de 2022

0 minutos de leitura

Obrigado por participar do Fetch com a gente! Parabéns aos milhares de participantes que se juntaram a nós no Fetch the Flag CTF. E um agradecimento especial aos Snykers que criaram, testaram e documentaram os desafios!

Este post foi escrito pelo Snyk Ambassador Mohammad-Ali A’râbi (@MohammadAliEN). Inscreva-se hoje para se tornar um Snyk Ambassador e tenha acesso exclusivo à Snyk, inclusive a CTFs antes de serem lançados.

O desafio (com um pouco de contexto histórico)

Se você participou do Fetch the Flag CTF 2022 da Snyk, conhece o desafio Potty Training. Era um desafio rápido e simples, mas que achei bem interessante. Também foi a primeira flag que capturei em uma competição de segurança!

O desafio era composto por um único arquivo PNG chamado potty.png. Quando se trata de uma imagem, é provável que haja algo escondido nela. Ocultar mensagens em imagens é uma prática tão antiga que tem nome grego: esteganografia, que significa “ocultar mensagens”. Essa talvez seja a forma mais antiga de enviar mensagens secretas, muito anterior à invenção da criptografia.

Em 480 a.C., Demarato, um grego expulso de sua terra natal, vivia na cidade persa de Susa (também chamada Shush). Ele viu o rei persa Xerxes reunir um exército para lançar um ataque surpresa contra a Grécia. Então, escreveu uma mensagem, escondeu-a em um tronco e pediu a um mensageiro que a levasse até Esparta. Os espartanos levaram algum tempo para encontrar a biblioteca Python certa e extrair a mensagem oculta, mas acabaram conseguindo. Certo, essa parte não é verdade. Os espartanos não usavam Python: descobriram a mensagem testando diferentes possibilidades e reunindo ideias de todos.

Certo, chega de história. O que quero dizer é que “esteganografia” é a palavra do dia.

A solução

Quando comecei o desafio, não pensei logo em esteganografia e abri o arquivo em editores de texto como o Vim, mas, como era de se esperar, só encontrei caracteres sem sentido. A segunda dificuldade foi encontrar a biblioteca certa para extrair a mensagem oculta. Eu já pretendia usar Python, então pesquisar no Google por esteganografia e Python me levou a este ótimo pacote Python chamado stegano.

Ao abrir a descrição, vi que, depois de instalar o pacote, também era possível usá-lo pela CLI. Então, vamos instalá-lo primeiro:

pip3 install stegano

Em seguida, vamos usar a CLI:

stegano-lsb reveal -i potty.png

O resultado é este:

       import requests
        r = requests.get('https://potty-training.c.ctf-snyk.io/')
        print(r.text)

Então, há um código Python bem sorrateiro (ou melhor, Snyky) escondido no arquivo PNG. Agora que já o extraímos, vamos colocá-lo em um arquivo Python:

stegano-lsb reveal -i potty.png > potty.py

Ajuste um pouco a indentação e execute:

python3 potty.py

O trecho de código é executado, mas gera um erro de certificado SSL, ou seja, o protocolo HTTPS não vai funcionar. Talvez você não se lembre de ver HTTP por aí, mas, como alguém que está no início dos 30 anos, lembro da época em que era possível encontrar sites HTTP. Então, vamos editar o código e trocar a URL https por http, para matar a saudade:

import requests
r = requests.get('http://potty-training.c.ctf-snyk.io/')
print(r.text)

Ao executá-lo, aparece esta mensagem incrível:

<html>
  <head>
    <title>Good puppy!</title>
  </head>
  <body>
    <h1>Good puppy! 🐕</h1>
    <p>Here's your flag 🦴</p>
    <p>SNYK{dd67edb70a28335068dd5ea9304007b69543357ff471b3144e3355bca34cb35d}</p>
    <a href="https://snyk.io/blog/snyk-international-dog-day-recap/">Snyk + Dogs = 💜</a>
  </body>
</html>

Tcharam! ? Encontramos um cachorrinho fofo e uma bela flag para capturar.

Considerações finais

Gostei muito de resolver esse desafio durante o evento CTF. Da última vez que participei de uma competição capture the flag, eu estava jogando Call of Duty 2 com meus amigos em uma lan house. Diria que capturar a flag da Snyk foi mais divertido do que capturar as bandeiras das forças da Segunda Guerra Mundial (os mapas CTF de CoD 2 são muito desequilibrados!). Já estou ansioso pelo CTF do ano que vem!

Estas foram minhas principais conclusões:

  • Existe um protocolo chamado HTTP. É antigo, mas não obsoleto.

  • A esteganografia é muito antiga, mas não obsoleta

  • Se quiser saber mais sobre a história desse tipo de desafio, leia The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography, de Simon Singh.

  • Na dúvida, use Python.

Quer saber como encontramos todas as outras flags? Acesse nossa página de soluções do Fetch the Flag para ver como fizemos.