Skip to main content

Writeup de Fetch the Flag CTF 2022: Potty Training

feature ctf potty training

11 de noviembre de 2022

0 minutos de lectura

¡Gracias por jugar Fetch con nosotros! Felicitaciones a los miles de jugadores que participaron en Fetch the Flag CTF. Y muchas gracias a los Snykers que crearon, probaron y documentaron los desafíos.

Esta publicación fue escrita por Mohammad-Ali A’râbi, embajador de Snyk (@MohammadAliEN). Regístrate hoy para convertirte en embajador de Snyk y obtén acceso exclusivo a Snyk, incluidos los CTF antes de que estén disponibles.

El desafío (con algo de contexto histórico)

Si participaste en el Fetch the Flag CTF 2022 de Snyk, conoces el desafío Potty Training. Era un desafío rápido y sencillo que me pareció bastante interesante. ¡También fue la primera bandera que conseguí o capturé en una competencia de seguridad!

Así que el desafío solo incluía un archivo PNG llamado potty.png. Cuando se trata de una imagen, lo más probable es que haya algo oculto en ella. Ocultar mensajes dentro de páginas es una práctica tan antigua que tiene un nombre griego: esteganografía, que significa «ocultar mensajes». Probablemente sea la práctica más antigua de enviar mensajes secretos, de mucho antes de que se inventara la criptografía.

En el año 480 a. C., Demarato, un griego expulsado de su patria, vivía en la ciudad persa de Susa (también llamada Shush). Fue testigo de cómo el rey persa Jerjes reunía un ejército para lanzar un ataque sorpresa contra Grecia. Entonces escribió un mensaje, lo ocultó en un tronco y dejó que un mensajero lo llevara a Esparta. A los espartanos les toma un tiempo encontrar la biblioteca de Python adecuada para extraer el mensaje oculto, pero finalmente lo logran. Bueno, esa parte no es cierta. Los espartanos no usaban Python; descubrieron el mensaje probando distintas cosas y sumando las ideas de todos.

Bien, suficiente historia. A lo que voy es que «esteganografía» es la palabra del día.

La solución

Cuando empecé el desafío, no pensé en la esteganografía y revisé el archivo con editores de texto como Vim, pero, como era de esperarse, todo era ininteligible. La segunda parte difícil fue encontrar la biblioteca adecuada para extraer el mensaje oculto. De todos modos pensaba usar Python, así que buscar en Google los términos esteganografía y Python me llevó a este excelente paquete de Python llamado stegano.

Al revisar la descripción, dice que después de instalar el paquete también se puede usar con la CLI. Así que primero vamos a instalarlo:

pip3 install stegano

Y después, lo usamos con la CLI:

stegano-lsb reveal -i potty.png

El resultado es el siguiente:

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

Así que hay algo de código Python astuto (o, mejor dicho, Snyky) oculto dentro del archivo PNG. Ahora que lo extrajimos, guardémoslo en un archivo Python:

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

Corrige un poco la sangría y ejecútalo:

python3 potty.py

El fragmento se ejecuta, pero arroja un error de certificado SSL, lo que significa que el protocolo HTTPS no funcionará. Quizás no recuerdes haber visto HTTP en la web, pero, como tengo poco más de 30 años, recuerdo cuando podías encontrar sitios web HTTP. Así que editemos el código y cambiemos la URL https por http, por los viejos tiempos:

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

Y al ejecutarlo, aparece este increíble mensaje:

<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>

¡Y listo! ? Obtenemos un buen perrito y una bonita bandera para capturar.

Palabras finales

Disfruté mucho resolviendo este desafío en el evento CTF. La última vez que participé en una competencia de captura de banderas, jugaba Call of Duty 2 con mis amigos en un local de videojuegos. Diría que capturar la bandera de Snyk fue más divertido que capturar las banderas de las fuerzas de la Segunda Guerra Mundial (¡los mapas CTF de CoD 2 están muy desequilibrados!). ¡Ya espero con ganas el CTF del próximo año!

Estas son las principales conclusiones que me llevo:

  • Existe un protocolo llamado HTTP. Es antiguo, pero no está obsoleto.

  • La esteganografía es muy antigua, pero no está obsoleta

  • Si te interesa aprender más sobre la historia de este tipo de desafíos, lee The Code Book: The Science of Secrecy from Ancient Egypt to Quantum Cryptography, de Simon Singh.

  • Si tienes dudas, usa Python.

¿Quieres saber cómo encontramos todas las demás banderas? Visita nuestra página de soluciones de Fetch the Flag para ver cómo lo hicieron.

Leer más

illustration hero ai
Blog

PHP corrige dos vulnerabilidades críticas de RCE sin autenticación (CVE-2026-109618, CVE-2026-109619): actualiza ahora

Dos fallas críticas en el ciclo de solicitudes de PHP pueden permitir la ejecución remota de código sin autenticación. Actualiza a una versión corregida o instala una corrección retroportada por un proveedor para las versiones anteriores.

blog feature ai lilac
Blog

Convierte tu backlog de vulnerabilidades en pull requests con la remediación agéntica

Evo Remediation Agent ya está disponible en Open Preview e incorpora la resolución automatizada de dependencias a Evo Agentic AppSec. Ahora, los equipos de AppSec pueden ejecutar campañas de remediación continuas

AI Background min crop
Blog

La IA activa todos los riesgos que has aceptado: siete ideas del panel de seguridad de IA sin filtros

La IA hace que los ataques sean más baratos y rápidos, y deja al descubierto riesgos que las organizaciones ya enfrentan. Cuatro líderes de seguridad explican por qué la defensa a velocidad de máquina y la corrección más rápida son esenciales.