Input Injection 1 writeup

Descripción
A friendly program wants to greet you… but its goodbye might say more than it should. Can you convince it to reveal the flag?
Input Injection 1 solución
Una vez que lancemos la instancia podremos descargar tanto el programa como el código fuente del mismo. Abriremos el archivo con el código fuente para poder ver cómo obtener la flag:
codium vuln.c

En este código podemos ver un conjunto de malas prácticas que dan lugar a un buffer overflow y un RCE.
- En primer lugar, podemos introducir por terminal en la variable ‘name‘ 200 bytes (199 caracteres + \0).
- Sin embargo, para despedirse, el programa copia en la variable ‘buffer,’ de 10 bytes, toda la información introducida en ‘name‘.
- Dado que el array ‘buffer‘ y ‘c‘ han sido declarados uno tras otro y que strcpy no comprueba tamaños antes de realizar la copia de información, si se han introducido más de 10 bytes de información, la información sobrante sobreescribirá la memoria adyacente a ‘buffer‘. En este caso, el espacio de memoria de ‘c‘ (aunque en determinados casos esto puede no ser correcto debido a como el compilador organiza las variables).
- Por último, al ser ejecutada con ‘system‘ la variable c, ejecutará como si en una terminal de Linux se tratase, todos los bytes que introduzcamos a partir del décimo.
Prepararemos el payload, para ello, introduciremos 10 letras aleatorias seguidas del comando que ejecute la función system. Primero ejecutaremos un ‘ls‘ para listar el contenido del servidor
aaaaaaaaaals

Podemos ver el archivo ‘flag.txt‘, recuperaremos ahora su contenido:
aaaaaaaaaacat flag.txt

Obteniendo así la flag ‘picoCTF{0v3rfl0w_c0mm4nd_a9259e7a}’ y finalizando este CTF.
Consultor de ciberseguridad especializado en continuidad de negocio y respuesta ante incidentes. Interesado en analizar tecnologías desde una perspectiva de seguridad y descubrir su comportamiento real.
