Muy buenas! Acabo de encontrar en un programa un buffer overflow algo gracioso:
Se leen todos los bytes de un archivo y se guardan en un buffer en la dirección 0x088399C8. Hasta ahí todo bien. Luego se comprueban cuáles de todos esos bytes están en el rango 'A'-'Z' y si es así, se meten en un segundo buffer de caracteres en el stack. Si rellenamos el archivo con muchos bytes 'A'-'Z', este segundo buffer peta y acabamos con varios registros modificados, incluido el EIP.
El problema es cómo desviar la ejecución a la dirección que me interesa si solo soy capaz de meter bytes de la 'A' a la 'Z' en el EIP, es decir, solo puedo lograr cosas como 0x41414141, 0x41424344, 0x534E4F50, ... En el EAX o ECX creo que aún podría hacer un apaño para que cogiese un valor arbitrario.
¿Alguna idea de por donde seguir? ¿Es esto una limitación imposible de saltar al diseñar un exploit?
Tan solo bastaría lograr de alguna manera un salto a 0x088399C8 para lograr la queridísima "ejecución de código arbitrario", por desgracia 0x08, 0x83, 0x99 y 0xC8 no son "letras mayúsculas".