Trabajando a través de un curso de explotación binario publicado por RPI hace unos años. Actualmente está en el laboratorio de ASLR y tiene algunos problemas con él (aunque no con las partes relacionadas con ASLR). Para empezar, no puedo descubrir cómo explotar, y luego lidiar con la complejidad adicional de la derivación ASLR.
Aquí está el código (que se ejecuta en Ubuntu de 32 bits):
enlace
Pienso que ya que tienen que compilar sin el canario que hay un desbordamiento para explotar. Parece que todos los tamaños se verificaron correctamente excepto el de bucle, pero también hay un comportamiento extraño que no entiendo.
Cosas que hago / no sé o he probado:
1. Si escribo 40 caracteres en el nombre de usuario, entonces el bucle for sobrescribe un byte del campo de longitud del mensaje.
2. Si el nombre de usuario es muy largo, se sobrescribe parte del campo de tweet y se omite la entrada del usuario para fgets en la línea 58 y el tweet ya no está vacío (esta es la parte que no puedo entender). En set_tweet, la memoria se pone a cero al inicio de todos modos, por lo que si había datos antiguos allí, ¿cómo no podrían borrarse?
3. Si pudiera sobrescribir más de 1 byte de la longitud del mensaje de la estructura, podría transferir más de la gran lectura al tweet e invadir esa estructura en otra memoria. La compilación de prueba con 41 en lugar de 40 en el bucle for confirma esto.