Modifico : Ubuntu 9.04 64 bits modo de compatibilidad !
Buenas, escribo esto por un problema que me ha surgido al intentar explotar una sencilla aplicación evidentemente vulnerable... El caso es que al saber cuantos nops le tengo que meter a la pila para que vaya, me ha dado un bonito error.
Mi code (para no entenderlo xD):
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (int argc, char *argv [])
{
char buffer [8];
strcpy (buffer, argv [1]);
printf ("You said : %s", buffer);
return 0;
}
El fallo:
Citar*** stack smashing detected ***: ./code terminated
======= Backtrace: =========
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x48)[0xb77d4ef8]
/lib/tls/i686/cmov/libc.so.6(__fortify_fail+0x0)[0xb77d4eb0]
./code[0x80484b6]
[0x41414141]
======= Memory map: ========
08048000-08049000 r-xp 00000000 08:06 5267571 /home/juanra/Escritorio/code
08049000-0804a000 r--p 00000000 08:06 5267571 /home/juanra/Escritorio/code
0804a000-0804b000 rw-p 00001000 08:06 5267571 /home/juanra/Escritorio/code
09d9d000-09dbe000 rw-p 09d9d000 00:00 0 [heap]
b76d6000-b76d7000 rw-p b76d6000 00:00 0
b76d7000-b7833000 r-xp 00000000 08:06 353269 /lib/tls/i686/cmov/libc-2.9.so
b7833000-b7834000 ---p 0015c000 08:06 353269 /lib/tls/i686/cmov/libc-2.9.so
b7834000-b7836000 r--p 0015c000 08:06 353269 /lib/tls/i686/cmov/libc-2.9.so
b7836000-b7837000 rw-p 0015e000 08:06 353269 /lib/tls/i686/cmov/libc-2.9.so
b7837000-b783a000 rw-p b7837000 00:00 0
b783b000-b7848000 r-xp 00000000 08:06 335937 /lib/libgcc_s.so.1
b7848000-b7849000 r--p 0000c000 08:06 335937 /lib/libgcc_s.so.1
b7849000-b784a000 rw-p 0000d000 08:06 335937 /lib/libgcc_s.so.1
b784a000-b784d000 rw-p b784a000 00:00 0
b784d000-b784e000 r-xp b784d000 00:00 0 [vdso]
b784e000-b786a000 r-xp 00000000 08:06 335886 /lib/ld-2.9.so
b786a000-b786b000 r--p 0001b000 08:06 335886 /lib/ld-2.9.so
b786b000-b786c000 rw-p 0001c000 08:06 335886 /lib/ld-2.9.so
bfcbe000-bfcd3000 rw-p bffea000 00:00 0 [stack]
You said : AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACancelado
Se que es una proteccion de la pila xD... pero no se como desactivarla para seguir...
Alguien me puede ayudar a desactivar la proteccion de la pila?
Muchas gracias xD!
Acá el culpable sería gcc .. esto es un mecanismo de protección que tiene para detectar buffer overflows (stack smashing) ...
cuando compiles asegurate de agregar este parámetro para desactivarlo :
-fno-stack-protector
Como extra también te comento si este mecanismo se disparase y quisieses "arreglarlo" , con valgrind cazás el problema al toque ...
Otro dato es que si tenés instalada la capa de compatibilidad en este caso no importa (fijate el memory map, /lib en sistemas de 64 está enlazado simbólicamente a /lib64 que serían las librerías de 64 bits) (Retiro lo dicho, recién noto un i686 por ahí bajo /lib en un sistema de 64? ... ayy Ubuntu ... la forma rápida de verificarlo es ver si ese elf es elfclass32 o elfclass64 )
Otro dato es que esto está prácticamente implementado en modo de usuario (en una librería llamada libssp)
Edit : Te acerco dos links al respecto por si te interesa saber más :
http://en.wikipedia.org/wiki/Buffer_overflow_protection#GCC_Stack-Smashing_Protector_.28ProPolice.29
http://www.trl.ibm.com/projects/security/ssp/
Saludos.
P.S : esto no sé si iría a "Hacking Linux/Unix" o "Programación C/C++" =(
Yo tmb dude, y sobre todo ahora con la respuesta xD esk creia que era problemita del kernel (tipo protecciones, etc.)
muchisimas gracias !!!
PD1: Claro que investigare xD... Todo por aprender !
PD2: Feliz año nuevo de hace 1:03 horas!