[HACK] Smashing the stack for fun & profit

zero zeroboy at arrakis.es
Mon Dec 3 23:24:06 CET 2001



Hola a todos,

Siguiendo las recomendaciones de Roman, mando este mail sobre asm a ver si
alguien me puede (nos puede :P ) arrojar algo de luz sobre el asuntillo.
  
El caso, es q hace algún tiempo me lei el articulo (archifamoso) de Aleph sobre
el desboradmiento de buffer. Asi que decidí explotarlo seguiendo sus ejemplos.
El problema me lo encuentro a la hora de analizar el código ensamblador de un
pequeño programa para sacar un shell (lo adjunto).

[alex at doppler overflow]$ gdb shellcode
GNU gdb 19991116
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i586-mandrake-linux"...
(gdb) disassemble main
Dump of assembler code for function main:
0x80481b4 <main>:       push   %ebp
0x80481b5 <main+1>:     mov    %esp,%ebp
0x80481b7 <main+3>:     sub    $0x18,%esp
0x80481ba <main+6>:     movl   $0x806fdc8,0xfffffff8(%ebp)
0x80481c1 <main+13>:    movl   $0x0,0xfffffffc(%ebp)
0x80481c8 <main+20>:    add    $0xfffffffc,%esp
0x80481cb <main+23>:    push   $0x0
0x80481cd <main+25>:    lea    0xfffffff8(%ebp),%eax
0x80481d0 <main+28>:    push   %eax
0x80481d1 <main+29>:    mov    0xfffffff8(%ebp),%eax
0x80481d4 <main+32>:    push   %eax
0x80481d5 <main+33>:    call   0x804d1cc <__execve>
0x80481da <main+38>:    add    $0x10,%esp
0x80481dd <main+41>:    mov    %ebp,%esp
0x80481df <main+43>:    pop    %ebp
0x80481e0 <main+44>:    ret
End of assembler dump.               

Este es el desensablado del programa en cuestion. Tengo varias dudas con
respecto al susodicho. La primera de todas es cuando reserva espacio para las
variables locales, en teoria estoy definiendo un char * buffer[2]. Si mis
calculos no fallan (y los de Aleph tampoco), se supone que deberia reservar
8 bytes. De hecho en el ejemplo de Aleph : 

0x80481b7 <main+3>:     sub    $0x8,%esp

mientras que en el mio :

0x80481b7 <main+3>:     sub    $0x18,%esp

Porque guarda 24 bytes?
Mi ordenador es un PIII 650 Mhz, un i586 corriendo una Mdk 7.0
Es debido a eso?
Otra línea que tampoco entiendo es la siguiente:
0x80481c8 <main+20>:    add    $0xfffffffc,%esp

Que es lo que realmente lleva a cabo aqui el programa?

Tambien me gustaria saber donde puedo encontrar una tabla con el número de
bytes q ocupa cada instruccion, (para poder calcular los saltos).

Me gustaria mucho que me echases una mano, puesto que me interesa mucho el
tema. 
Un agradecimiento de antemano.
Alex




-------------- next part --------------
A non-text attachment was scrubbed...
Name: shellcode.c
Type: text/x-c
Size: 126 bytes
Desc: not available
URL: <https://mailman.jcea.es/pipermail/hacking/attachments/20011203/76435c9c/attachment.c>


More information about the hacking mailing list