elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
26 Mayo 2012, 11:40  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Seguridad
| | |-+  Desafíos - Wargames (Moderador: Kasswed)
| | | |-+  TheBlackSheep - Stack Overflow
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: TheBlackSheep - Stack Overflow  (Leído 2,375 veces)
Crack_X
Anti-War
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.320


Peace & Love


Ver Perfil WWW
TheBlackSheep - Stack Overflow
« en: 30 Enero 2005, 01:51 »

Saludos , esto va especialmente para Rojodos pero si alguien mas puede ayudar pues bienvenido. En www.bright-shadows.net hay un reto donde aparentemente hay que hacer un stack over flow para poder hacer que ejecute otra aplicacion. Solo te dan la aplicacion para que la pruebes en la pc sin el codigo pero aparantemente solo lee lo que pones en el comand line y le hace un echo y no aparenta ser vulnerable a un bof (buffer overflow) porque por mas larga que fue la cadena que le di no hizo ni cosquillas.

Debugeando con gdb encontre que en una llamada a una funcion dentro del programa hace un: call %eax , haci que pienso que de alguna manera hay que hacer un exploit con shellcode que haga que %eax llame a nuestro shellcode para que ejecute otro programa.

Alguna ayuda o idea?  :-[


En línea

Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone
heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #1 en: 6 Febrero 2005, 11:06 »

nah pon un link directo, no esperes que me ponga a buscar por esa web y me registre...................almenos sube el binario aca........


En línea

Crack_X
Anti-War
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.320


Peace & Love


Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #2 en: 6 Febrero 2005, 11:18 »

Gracias por responder heap , descubri o pienso que descubri , que no es un stack overflow es un "string format vulnerability" , puedo ver algunos offsets y puedo hacer un segmentation fault , pero no se me ocurre como hacer que corra una shellcode.
En línea

Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone
heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #3 en: 6 Febrero 2005, 11:24 »

Yeap yo tambien pense eso por lo del call %eax, ahi mismo se me ocurrio atacar el GOT :), sino sabes que es el global access table, googlealo.
En línea

heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #4 en: 6 Febrero 2005, 12:01 »

Mira knoppix@ttyp0[tbs]$ gdb ex2
GNU gdb 6.0
Copyright 2003 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 "i386-linux"...
(gdb) run %n%n%n
Starting program: /ramdisk/home/knoppix/Desktop/home/yasser/tbs/ex2 %n%n%n

Program received signal SIGSEGV, Segmentation fault.
0x4006f353 in vfprintf () from /lib/libc.so.6
(gdb)


VFPRINTF

En línea

Crack_X
Anti-War
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.320


Peace & Love


Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #5 en: 6 Febrero 2005, 12:11 »

Ahora veo mejor por donde va el asunto , corrijeme si me equivoco:

-se le añade la shellcode
-se cambia el GOT del printf para que llame a la shellcode?

Entonces me puse a buscar el offset del printf con objectdump:

Citar
[crack_x@localhost tbs]$ objdump -R ex2

ex2:     file format elf32-i386

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE
08049610 R_386_GLOB_DAT    __gmon_start__
08049608 R_386_JUMP_SLOT   __libc_start_main
0804960c R_386_JUMP_SLOT   printf

El offset del printf es 0x804960c ? Pero al buscarlo con gdb no aparece por parte la llamada a printf aunque se que esta ahi.

Segui leyendo un articulo que encontre en phrack que topa el tema de GOT http://www.phrack.org/show.php?p=56&a=5

Pero ahora estoy perdido porque aun no se bien como entrar la shellcode en el buffer y luego saber en que offset esta, cambiar el GOT del printf por la de la shellcode.

Aunque dure 3 años pasando este reto me a gustado un paquete porque e aprendido mucho , gracias heap  ;D

PD: Acabo de ver que publicaste antes que terminara de escribir, habia hecho lo mismo pero con run "%s%s%s%s" y me daba lo siguiente:

Citar
Program received signal SIGSEGV, Segmentation fault.
0x4009c06b in strlen () from /lib/i686/libc.so.6

Entonces cual GOT es que tengo que cambiar el printf() o vfprintf() ?
En línea

Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone
heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #6 en: 6 Febrero 2005, 12:12 »

Listo ya pude.....ya solo me falta ver si logro correr el shellcode, ya logre ver como explotarlo, solo intentare GOT........y sino ni idea porque este binario no lo compilaron con gcc, es muy raro no tiene destructores.....o me equivoco


knoppix@ttyp0[tbs]$ objdump -R ex2

ex2:     formato del fichero elf32-i386

DYNAMIC RELOCATION RECORDS
OFFSET   TYPE              VALUE
08049610 R_386_GLOB_DAT    __gmon_start__
08049608 R_386_JUMP_SLOT   __libc_start_main
0804960c R_386_JUMP_SLOT   printf
 :) ;)
En línea

heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #7 en: 6 Febrero 2005, 12:35 »

En verdad que esta muy bueno el reto, si algun moderador ve esto, que borre este post y le ponga chincheta :)
En línea

Crack_X
Anti-War
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.320


Peace & Love


Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #8 en: 7 Febrero 2005, 00:15 »

Volviendo al vprintf......

Citar
vprintf 0x4006be36   mov %edx,(%eax)

Si cambiamos el valor de eax podemos hacer que el call llame a donde le digamos  o no?
Debugueando un poco:
Citar
eax 0x400377f7  1073969143
$ex2 "AAAABBBB %x %x %x %x"
AAAABBBB bffff764 bffff738 400377f7 2

Tengo ententido que  "bffff764" es donde se almacena el "AAAABBBBB" y vemos que mas adelante en el stack esta el valor de %eax "400377f7" , entonces si le damos la shellcode , cambiamos el valor de %eax para que salte al buffer quizas funcione? Piensas que voy bien o me fui lejos?  :-X
En línea

Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone
heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #9 en: 7 Febrero 2005, 04:48 »

Perdona que no pueda mirar lo que haz dicho con detenimiento, estoy muy ocupado, pero lo que tienes que hacer, es escribir la direccion (%n) de la funcion siguiente a donde esta el error de formato, creo que tendria que debbugear mas, porque ese strlen (); esta muy raro, ahora ya no estoy seguro si vfprintf(); es donde esta el error, dado que strlen(); recive un puntero, y devuelve el numero de caracteres sin /00, pero en ningun momento necesita un especificador de formato, contrario a vfprintf que si.
A decir verdad tambien me extra~o no ver ningun destructor, ya que pense habia sido compilado con gcc pero .dtors no estaba en ningun lado. En todo caso hace falta mas debbuging, y disassembly, intenta localizar porque strlen falla, y intenta ver donde esta el error de formato y con la GOT localizar la siguiente funcion a ejecutar, eso por ahora, luego la explotacion es un juego de ni~os. Yo tengo que estudiar mucho esta semana pero cuando tenga un rato libre me pongo a jugarle a este reto...
En línea

HaCkZaTaN

Desconectado Desconectado

Mensajes: 109



Ver Perfil
Re: TheBlackSheep - Stack Overflow
« Respuesta #10 en: 9 Febrero 2005, 12:08 »

Ahora le sigo, tengo q comer ........

Salu2!!

Código:
root@NST:/home/h4ck# gdb ./ex2
GNU gdb 6.3
Copyright 2004 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 "i486-slackware-linux"...Using host libthread_db library "/lib/libthread_db.so.1".

(gdb) r %s%s%s%s
Starting program: /home/h4ck/ex2 %s%s%s%s

Program received signal SIGSEGV, Segmentation fault.
0x400874ab in strlen () from /lib/libc.so.6
(gdb) r %n%n%n
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/h4ck/ex2 %n%n%n

Program received signal SIGSEGV, Segmentation fault.
0x4005cb1a in vfprintf () from /lib/libc.so.6

(gdb) where
#0  0x400874ab in strlen () from /lib/libc.so.6
#1  0x4005cb1a in vfprintf () from /lib/libc.so.6
#2  0x400630f2 in printf () from /lib/libc.so.6
#3  0x080483bf in main ()

(gdb) r %hn%hn%hn
The program being debugged has been started already.
Start it from the beginning? (y or n) y
Starting program: /home/h4ck/ex2 %hn%hn%hn

Program received signal SIGSEGV, Segmentation fault.
0x4005cb03 in vfprintf () from /lib/libc.so.6
(gdb)

------------------------------------------------------------

root@NST:/home/h4ck# objdump -t ex2 | egrep "start|end"
080482e4 l     F .text  00000000              call_gmon_start
08049514 g       *ABS*  00000000              __fini_array_end
080482c0 g     F .text  00000000              _start
08049514 g       *ABS*  00000000              __fini_array_start
08049614 g       *ABS*  00000000              __bss_start
00000000       F *UND*  000000f8              __libc_start_main@@GLIBC_2.0
08049514 g       *ABS*  00000000              __init_array_end
08049514  w      .data  00000000              data_start
08049618 g       *ABS*  00000000              _end
08049514 g       *ABS*  00000000              __init_array_start
08049514 g       .data  00000000              __data_start
00000000  w      *UND*  00000000              __gmon_start__
root@NST:/home/h4ck#


root@NST:/home/h4ck# objdump -s -j .dtors ex2

ex2:     file format elf32-i386

Contents of section .dtors:
 80495f0 ffffffff 00000000                    ........
root@NST:/home/h4ck# objdump -s -j .ctors ex2

ex2:     file format elf32-i386

Contents of section .ctors:
 80495e8 ffffffff 00000000                    ........
root@NST:/home/h4ck#

root@NST:/home/h4ck# objdump -D ex2 | grep dtors
08048310 <__do_global_dtors_aux>:
 804831d:       75 2d                   jne    804834c <__do_global_dtors_aux+0x3c>
 8048328:       74 1b                   je     8048345 <__do_global_dtors_aux+0x35>
 8048343:       75 eb                   jne    8048330 <__do_global_dtors_aux+0x20>
 80484e1:       e8 2a fe ff ff          call   8048310 <__do_global_dtors_aux>
Disassembly of section .dtors:
root@NST:/home/h4ck# objdump -D ex2 | grep ctors
 8048280:       e8 1b 02 00 00          call   80484a0 <__do_global_ctors_aux>
080484a0 <__do_global_ctors_aux>:
 80484b4:       74 16                   je     80484cc <__do_global_ctors_aux+0x2c>
 80484ca:       75 f4                   jne    80484c0 <__do_global_ctors_aux+0x20>
Disassembly of section .ctors:
root@NST:/home/h4ck#

root@NST:/home/h4ck# objdump -h ex2|grep dtor
 18 .dtors        00000008  080495f0  080495f0  000005f0  2**2
root@NST:/home/h4ck# objdump -h ex2|grep ctor
 17 .ctors        00000008  080495e8  080495e8  000005e8  2**2

root@NST:/home/h4ck# objdump -d ex2 | grep printf
080482a8 <printf@plt>:
 80483a1:       e8 02 ff ff ff          call   80482a8 <printf@plt>
 80483ba:       e8 e9 fe ff ff          call   80482a8 <printf@plt>
 80483c6:       e8 dd fe ff ff          call   80482a8 <printf@plt>
root@NST:/home/h4ck#

Se me olvidaba tienen que anadir 4 bytes siempre a la dtors si la vas a sobreescribir
« Última modificación: 9 Febrero 2005, 12:44 por HaCkZaTaN » En línea

heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #11 en: 9 Febrero 2005, 12:49 »

Ea muy bien :), igual yo la cague horrible, porque nunca habia hecho con un binario, ya pude explotarlo pero solo porque dex me dio una mano y me explico varias shits, como porque strlen() hace segfault y porque vfprint() esta ahi. El format BUG esta en un
printf(argv[1]); //aca !
printf("\n");

Bueno yo no le habia puesto mucha atencion a lof formats, dado que ya desaparecieron de los code open source, ya otra cosa es auditar binarios....pero va ............... hay que hacer como taller o algo, por ahora si alguien quiere poder exploitear esto, yo decia que con GOT, pero asi esta muy feo, ya que este si tiene .dtors asi que aca esta el paper para que puedan explotarlo, es para mi el mejor, by scut:
http://www.shellcode.com.ar/docz/bof/formatstring-1.2.pdf
En línea

Crack_X
Anti-War
Ex-Staff
*
Desconectado Desconectado

Mensajes: 2.320


Peace & Love


Ver Perfil WWW
Re: TheBlackSheep - Stack Overflow
« Respuesta #12 en: 19 Febrero 2005, 05:38 »

Una duda sobre string format bugs, al poner

root@local: ./vuln %x%x%x

va enseñando las direcciones del stack anteriormente? osea... Si el stack esta haci:

1a = hola
1b = mundo
1c= extra

El primer %x enseña el 1c , el siguiente 1b  y etc.?


Saludos,
En línea

Shit loads of money spend to show us wrong from right. Say no to war


Yasser Has Things To Say
WarZone
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[SRC] STACK for C++
Programación C/C++
RHL 5 839 Último mensaje 25 Noviembre 2011, 08:37
por BlackZeroX (Astaroth)
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines