Flag Hunters PicoCTF (Easy)
Contexto de la maquina
Trayectoria Flag Hunters

Descripción
Flag Hunters es un reto de explotación de scripts en Python enfocado en la identificación y explotación de una inyección de comandos lógica dentro del flujo de ejecución de un parser personalizado. El programa simula la lectura de una canción estructurada mediante etiquetas, permitiendo al usuario influir en el control de flujo mediante una entrada no validada.
Objetivo del reto
Forzar la ejecución de una sección oculta del programa (secret_intro) que contiene la flag, manipulando el flujo del parser mediante una entrada maliciosa.
Tipo de reto
Script / Aplicación
Command Injection (lógica)
Control Flow Manipulation
Habilidades y técnicas evaluadas
Análisis de código fuente en Python
Comprensión de flujos de control personalizados
Identificación de inyecciones lógicas
Explotación local y remota mediante
netcatRazonamiento sobre parsers inseguros
Análisis de vulnerabilidades

Despliegue del CTF
En la propia pagina buscaremos el CTF, dentro veremos un boton llamado Launch Instance, una ves desplegado nos aparecera here donde se encuentra el dominio junto con el puerto asociado al mismo.
El objetivo de estos CTFs es encontrar la flag final.
Command Injection

El reto nos proporciona directamente el script vulnerable, junto con su código fuente, el cual podemos descargar mediante wget una vez generada la URL correspondiente:
El enfoque será explotar primero el script en local, con el objetivo de entender completamente su funcionamiento y validar la técnica de explotación. Una vez confirmada, replicaremos el mismo ataque contra el servicio remoto del reto.
El propio desafío nos indica cómo interactuar con el servicio:
El mensaje nos da una pista clara: existe un fragmento oculto del texto que no se imprime por defecto y que contiene algo de valor (la flag). Para acceder a él, debemos analizar el código fuente y forzar su ejecución.
Explotación en local
Analizamos el script lyric-reader.py para identificar el flujo de ejecución y el contenido oculto.
lyric-reader.py
Observamos que la variable secret_intro contiene el texto oculto, y además concatena directamente el contenido del archivo flag.txt. Esta sección no se imprime durante la ejecución normal del programa, por lo que nuestro objetivo será redirigir el flujo de ejecución hacia esta parte.
Para poder probar la explotación en local, creamos un archivo flag.txt de prueba:
Identificación de la vulnerabilidad
Durante el análisis del flujo del programa, detectamos una vulnerabilidad de inyección de comandos lógicos (control flow injection) en la parte donde se procesa la entrada del usuario bajo el marcador CROWD.
Código vulnerable:
¿Por qué es vulnerable?
El input del usuario (
crowd) se concatena sin validación a una línea del script.Esa línea se almacena en
song_lines[lip].En la siguiente iteración, la línea se procesa con:
Esto permite al usuario inyectar nuevas instrucciones internas del parser utilizando el carácter ;.
Análisis del parser interno
El script interpreta las siguientes palabras clave:
REFRAIN→ Salta al estribilloRETURN X→ Salta a la línea XCROWD→ Solicita input del usuarioEND→ Finaliza la ejecución
Esto nos permite controlar el flujo si conseguimos inyectar un comando RETURN.
Flujo de explotación
Payload utilizado:
payload
Paso a paso:
El uso de RETURN 0 es clave, ya que el contenido oculto (secret_intro) se encuentra al inicio del texto.
Ejecutamos el script:
Respuesta:
Esto confirma que la explotación funciona correctamente en local y que conseguimos imprimir la sección oculta con la flag.
Explotación contra el servidor remoto
Una vez validada la técnica, replicamos exactamente el mismo proceso contra el servicio real del reto:
Respuesta:
Con esto completamos el reto, explotando una inyección de control de flujo mediante input no sanitizado, que nos permite redirigir la ejecución del parser interno y acceder a contenido oculto que no se imprime de forma normal.
flag.txt
Last updated