elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Ingresar Registrarse
21 Marzo 2010, 19:19  


Temas destacados: Deseas probar algunas mejoras a la interfaz del foro? Prueba cake! acerca de


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderadores: Anon, berz3k)
| | |-+  Offsets en overflows
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Offsets en overflows  (Leído 3392 veces)
nitr0us

Desconectado Desconectado

Mensajes: 202


#rm -fr /


Ver Perfil WWW
Offsets en overflows
« en: 22 Agosto 2003, 22:44 »

Aun no logro entender bien esto de offsets respecto a overflows.

Digamos... por ejemplo, en los exploits ya compilados para windows sobre rpc dcom.. pues según yo, por lo que veo.... pues así simple, corren en modo ms dos, pues creo que es un exploit programado en C .

O.k. .. en varios textos sobre overflows en win32.. dicen que en cada OS de win... es dif.. el offset.. por eso te dan un mini menú para escoger que sp de win2000 tienes... o xp.. y asi.

Al ejecutar cada uno de los diferentes... pues te dice:
using return address of 0x77f92a9b ...... y en otro windows pues es otra dirección de retorno.

Y bien, como ya se sabe.... el offset es el mov.. relativo de bytes.. bla bla bla....... pues no entiendo que onda con el offset en esto de un overflow

La shellcode donde se introduce?? y ese offset que onda?, que hay en esa dirección de memoria ??

espero me respondan varios... y ROJODOS, tu que estás más metido en esto.

salu2 a todos
En línea

- nitrØus

- "My 0wnage is so fucking pure!!" -- nitrØus

[CubilFelino Security Research Labs] http://cubilfelino.sectester.net
The computer security is an art form. It's the ultimate martial art.

http://www.brainoverflow.org/
Rojodos
"If you wanna be free, you must be different"

Desconectado Desconectado

Mensajes: 3.523



Ver Perfil
Re:Offsets en overflows
« Respuesta #1 en: 23 Agosto 2003, 01:00 »

Eeerrr... antes de nada, trata de explicarte mucho mejor, porque me cuesta mucho entenderte.... :(

Un offset es un desplazamiento respecto a una direccion de memoria. Por ejemplo, kernel32.dll se carga en memoria a partir de la direccion (no me la se, esta es ficticia) 0x76890000. Es decir, en la direccion 0x76890000 EMPIEZA la DLL ( a esto se le llama DIRECCION BASE, curioso xDD). Bien, ahora tu lo que kieres es usar la funcion LoadLibraryA (que esta contenida en esa DLL). Bueno, entonces te informas y te dicen que esa FUNCION tiene como OFFSET 0x7C. Que kiere decir esto? Pues que la funcion la encuentras aki:

Dir. Base + Offset = Direccion de la Funcion
0x76890000 + 0x7C = 0x7689007C

Asi que cuando kieras llamar a LoadLibraryA en ASM, tienes que mandar sus argumentos a la pila (push eax/ebx/ecx o datos a mano..., teniendo en esos registros los argumentos, mandandolos en ORDEN INVERSO). Seria asi:

push eax;  // Argumento 2º
push ebx;  // Argumento 1º
call 0x7689007C;  // Llamada a LoadLibraryA

Esto ejecutara:

LoadLibraryA (argumento1,argumento2);

Creo que se entiende no?

Que esten en C y que funcionen en MSDOS no tiene nada que ver, informate sobre el lenguaje C :D

Los chicos de Microsoft, son la ostia de caxondos en esto de los offsets. Te explico. Segun version del sistema operativo, service packs instalados, parches, etc etc... las DIRECCIONES BASE de las DLL y los correspondientes OFFSETS de las funciones en ellas contenidas SON DISTINTOS.

Es decir:

(ejemplo, datos ficticios y puede que exagerados ;D xDD)

Win 98 --> Dir Base kernel32.dll = 0x78960000

Win 2k --> Dir Base kernel32.dll = 0x79990000

Win 2k SP1 --> Dir Base kernel32.dll = 0x80000000

Win 2k SP4 --> Dir Base kernel32.dll = 0x79880000

Win XP --> Dir Base kernel32.dll = 0x80600000

Win XP SP1 --> Dir Base kernel32.dll = 0x80500000


Como ves, si durante la shellcode queremos llamar a LoadLibraryA, pues tenemos que meter A MANO la direccion de memoria del kernel32.dll (esto se llama HARDCODEAR DIRECCIONES O OFFSETS) y luego su offset. Esto lo que hace que tengamos que hacer varias shellcodes para cada sistema explotable.

Yo me he informado, y hay bastantes tecnicas para hacer una shellcode para windows (y linux) SIN HARCODEAR DIRECCIONES, con lo que los exploits SON MULTIWINDOWS, y no hay menu para elegir SO. Pero este tema keda fuera de esta explicacion

Con la PILA (Stack) pasa lo mismo, varia segun el sistema operativo, SPs instalados, etc etc... y puede que en tu PC si que funcione la RET 0x78906789, pero en otro PC puede que no.  Por eso hay algoritmos en C que hacen un bruteforce a la RET ADDRESS, hasta que encuentran la que apunta a la shellcode.

La shellcode normalmente va como argumento del programa, argumento que se copia a un buffer mal construido, que peta :D. Luego puedes llamar a la shellcode a ese buffer petado o a donde estaba antiguamente, en los argumentos (en ARGV exactamente).

Sobre esto ultimo, hay muchos textos en la red que explican en funcionamiento de un overflow basico, buscalos :D

Ademas, me estoy cansando de escribir XDDD

Espero que te ayude :D

Salu2
« Última modificación: 23 Agosto 2003, 01:04 por Rojodos » En línea
nitr0us

Desconectado Desconectado

Mensajes: 202


#rm -fr /


Ver Perfil WWW
Re:Offsets en overflows
« Respuesta #2 en: 23 Agosto 2003, 20:43 »

Gracias he !

Ya comprendo mejor.

ahora si ya entiendo que onda con eso de DIR. BASE y pues sobre hardcodear tmb.

Gracias hee.  ;) ... ahh y .. hace tiempo vi tu primera shellcode y que estabas haciendo un programa vulnerable. Ya tienes algún programa vuln. y un exploit hecho por ti ?

Ah y nunca había escuchado sobre esos algoritmos en C que te buscan a fuerza la dir. de retorno .... y por lo de overflows básicos me he leido varios textos (más de undersec.. de w00w00 ... y otros por ahi, como el clásico smash the stack for fun & profit  ;)  :D ).. y pues cada vez me voy aclarando más sobre este tema.. mientras tanto pues ando poniendome las pilas (stacks  ;D ) en prog. en C.

Ahh oye, y para la creación de exploits ..... pues muchos van en C , pero es mejor C++ vd... cual recomiendas rojodos ?? C o C++ .. para programar y a la vez hacer exploits .

Ahh y gracias por todo.. y sorry por hacerte escribir tanto, pero ps vale la pena brother !

salu2 a todos !
En línea

- nitrØus

- "My 0wnage is so fucking pure!!" -- nitrØus

[CubilFelino Security Research Labs] http://cubilfelino.sectester.net
The computer security is an art form. It's the ultimate martial art.

http://www.brainoverflow.org/
nitr0us

Desconectado Desconectado

Mensajes: 202


#rm -fr /


Ver Perfil WWW
Re:Offsets en overflows
« Respuesta #3 en: 02 Septiembre 2003, 18:21 »

no se olviden de este post please... rojodos.. sobre tus programas vuln ??
En línea

- nitrØus

- "My 0wnage is so fucking pure!!" -- nitrØus

[CubilFelino Security Research Labs] http://cubilfelino.sectester.net
The computer security is an art form. It's the ultimate martial art.

http://www.brainoverflow.org/
byebye

Desconectado Desconectado

Mensajes: 5.104



Ver Perfil
Re:Offsets en overflows
« Respuesta #4 en: 02 Septiembre 2003, 18:30 »

pero que buscas un programa vulnerable?
En línea
Rojodos
"If you wanna be free, you must be different"

Desconectado Desconectado

Mensajes: 3.523



Ver Perfil
Re:Offsets en overflows
« Respuesta #5 en: 03 Septiembre 2003, 00:25 »

Ostias, no habia visto tu respuesta, sorry  :-X

1- No, no he hecho ningun exploit para un programa "real" vulnerable, solo para los que yo me fabrico para practicar. El que tu has visto en el post de "Mi primera shellcode para un exploit" y el del reto de "Integer Overflow".

2- Es mucho, mucho, mejor el C (por algo lo usan todos, en vez de el C++). Pero un exploit se puede hacer en cualkier lenguaje (ASM, C++, Perl, Phyton, Java, VB --> Solo contra windows, etc...). Usas el que te sea mas facil de comprender, el que mas domines.

El C es casi un standard en Internet, es el mas conocido, portable, y muy sencillo. Por eso se usa.

Salu2
En línea
nitr0us

Desconectado Desconectado

Mensajes: 202


#rm -fr /


Ver Perfil WWW
Re:Offsets en overflows
« Respuesta #6 en: 05 Septiembre 2003, 17:09 »

Gracias !

Ya he hecho algunos programillas en C.... me gustó mucho eso de (char argc...argv[]...

ahora entiendo como es que funcionan todos esos programas que te dicen.. modo de uso:
archivo.exe [-option] [argumento1] [argumento2]

.. ya me aclara mejor

Gracias.. bye bayer  ;)
En línea

- nitrØus

- "My 0wnage is so fucking pure!!" -- nitrØus

[CubilFelino Security Research Labs] http://cubilfelino.sectester.net
The computer security is an art form. It's the ultimate martial art.

http://www.brainoverflow.org/
Páginas: [1] Ir Arriba Imprimir 
Ir a:  





Consolas     La Web de Goku     MilW0rm     MundoDivx

Hispabyte     Truzone     TodoReviews     ZonaPhotoshop

Yashira.org    Videojuegos    indetectables.net    Seguridad Informatica Colombia    Indejuegos    Internet móvil

Noticias Informatica    Seguridad Informática    ADSL    eNYe Sec    Seguridad Wireless    Underground México    Biblioteca de Seguridad

Todas las webs afiliadas están libres de publicidad engañosa.

Powered by SMF 1.1.11 | SMF © 2006-2008, Simple Machines LLC