Input Injection 2 writeup

Descripción

This program greets you and then runs a command. But can you take control of what command it executes?

Input Injection 2 solución

Lanzamos la instancia para obtener el programa, el código fuente, y un servidor y un puerto al que conectarnos con netcat.

Examinaremos en primer lugar el código fuente del archivo para ver si existe en él alguna vulnerabilidad.

codium vuln.c

A diferencia del CTF anterior, Input Injection 1, en este caso las variables se están almacenando de forma dinámica con ‘malloc‘.

char* username = malloc(28);
char* shell = malloc(28);

De nuevo, volvemos a tener el error de que, al introducir información por consola, no se comprueba el tamaño de la cadena introducida al enviarla a una variable:

scanf("%s", username);

Al tratarse de memoria dinámica, en este caso nos encontramos ante un heap overflow. De nuevo, como la variable ‘shell‘ se encuentra declarada al lado de ‘username‘, a la cual tenemos acceso con ‘scanf‘, podemos intentar sobreescribir su contenido. Para ello, dado que nos proporciona la dirección de memoria de ambas variables, introduciremos tantos bytes de información como sean necesarios, seguidos del comando que queramos que ‘system(shell);‘ ejecute. Todo este vector de ataque es posible debido a varios factores:

Al conectarnos al servidor recibiremos las direcciones de memoria de ambas variables:

La dirección de las variables está en formato hexadecimal, usaremos python para realizar la resta y ver cuántos bytes debemos introducir:

python3 -c 'print(0x403c42d0 - 0x403c42a0)'

El resultado de esta resta serán 48, por lo que introducimos 48 caracteres seguidos del comando que queramos que ejecute system(), en este caso, ‘ls’:

Sin embargo, en este caso no podremos utilizar AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcat flag.txt, dado que no aceptará espacios. Lanzaremos en su lugar una consola para poder acceder a ella e introducir espacios correctamente.

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/bin/bash

Obteniendo así la flag y completando el CTF.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *