Desbordamiento de búfer de pila: ¿Está cambiando el orden de las variables del compilador, impidiéndome sobrescribir el EIP correctamente?

0

Estoy aprendiendo sobre el desbordamiento de búfer de pila. Un poco de información sobre mi objetivo: una computadora x86 little endian intel, con un objetivo compilado con el compilador TCC sin protecciones de ningún tipo que se ejecuten en Windows XP.

Tengo éxito cuando envié un código de shell de ~ 15 bytes para atacar mi propio servidor TCP doméstico. (Diseñado por mi mismo). El búfer atacado tiene una longitud de 20 bytes.

Tomé precauciones para enviar bytes de basura para rellenar espacios y anular EBP, y adjuntar una dirección codificada al revés a little endian.

Pero cuando envié el mismo código de shell, pero para atacar un búfer más grande por encima de 20-30 bytes, falla, saltando a un addr desconocido.

¿El compilador está cambiando el orden de las variables de la pila? Tengo que escribir primero el búfer pequeño, y después un búfer más grande. He cambiado con una proporción constante los dos para poder ajustar shellcode.

¿Está cambiando el orden del compilador, poniendo EIP o EBP en otro lugar de la pila? He deshabilitado las protecciones del compilador de TCC y he protegido la protección del sistema como DEP y ASLR.

Puedo proporcionar más información si es necesario, incluidos fragmentos de código cortos, si me los solicita.

EDIT 1:

Aquí está mi código de servidor TCP de destino en un sitio similar a pastebin:

enlace

Aquí mi exploit:

enlace

EDIT 2:

¿Puede el aligment afectar mi exploit? No tengo muchas habilidades en esta área. He elegido valores multiplicados de 4 (32 bits). Creo que no podría afectar, ¿alguien me puede aclarar?

EDIT 3: he descubierto que un código de shell ligeramente modificado no funciona, pero un más pequeño lo hace. FASM.

ESTO NO FUNCIONA:

use32

mov eax, 0xDEADBEEF
mov ebx, 0xDEADBEEF
mov ecx, 0xDEADBEEF
mov edx, 0xDEADBEEF
int3

ESTE TRABAJO:

mov eax, 0xDEADBEEF
mov ebx, 0xDEADBEEF
mov ecx, 0xDEADBEEF
int3

¿Por qué el primero, no funciona? He llenado el resto del espacio en el búfer con basura. No parece tener bytes nulos.

    
pregunta Dean Winchester 04.01.2015 - 00:15
fuente

0 respuestas

Lea otras preguntas en las etiquetas