Los he entendido, pero luego al leer sobre format bugs me ha surgido una pequeña duda.
Nosotros para sobreescribir la ret en un buffer overflow, haciamos un string de tantos caracteres necesario como para llegar a ret, luego calculabamos una direccion mas o menos a los nops y la escribiamos en ese string. Cuando pasabamos como argumento ese string, la direccion que pusimos ahi se sobreescribira en RET e ira a esa direccion.
todo ok?, bueno, ahora si estoy en un x86 se usa little endian!!
Como pudo haber funcionado?, si sobrescribi ret usando la direccion al derecho!!
A ver, esta es la parte del exploit que usa Aleph1 en su tuto:
Código:
addr = get_sp() - offset;
printf("Using address: 0x%x ", addr);
ptr = buff;
addr_ptr = (long *) ptr;
for (i = 0; i < bsize; i+=4)
*(addr_ptr++) = addr;
Ven!, la direccion la pone "al derecho" en el string, y luego asi mismo se escribira en el RET!. No tendria que ponerse al revez?. En algunas shellcodes si ponen las direcciones al revez, pero creo que me he creado un relajo en la cabeza.printf("Using address: 0x%x ", addr);
ptr = buff;
addr_ptr = (long *) ptr;
for (i = 0; i < bsize; i+=4)
*(addr_ptr++) = addr;
Pff, voy a dibujarles graficamente ocmo lo pienso, asi capaz es mas facil que me ayuden con mi error
:Cada segmento esta con las medidas reales, fijense la cantidad de caracteres entre []
buffer
[ ][SEBP][RET ]
Bueno, luego tenemos el 'evilbuff' preparado de esta manera:
AAAAAAAAAAAAAAAAA(bffffdec) Obviamente esa direccion esta en chars medios raros.
Ej:
AAAAAAAAAAAAAAAAA1234
Donde '1' es el char correspondiente a bf, '2' a ff, etc:
Entonces corremos el programa
buffer
[AAAAAAAAAAAA][AAAA][1234]
Ahi mismo!!, no tendria que ser 4321??
Bueno, esa la duda que me esta matando... en shellcodes ponen las direcciones al revez, en los exploits para sobreescribir la ret las ponen al derecho, en fin que mareo!!!
.Gracias desde ya!!!











Autor


En línea



) pero realmente ya no es practicamente util, salvo para conocer como funcionan los BOFs.


