elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
12 Febrero 2012, 13:57  


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

Desconectado Desconectado

Mensajes: 204


#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

Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
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: 204


#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

nitr0us

Desconectado Desconectado

Mensajes: 204


#rm -fr /


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

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

byebye


Desconectado Desconectado

Mensajes: 5.094



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

pero que buscas un programa vulnerable?
En línea
Rojodos
Colaborador
***
Desconectado Desconectado

Mensajes: 3.535



Ver Perfil WWW
Re:Offsets en overflows
« Respuesta #5 en: 3 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: 204


#rm -fr /


Ver Perfil WWW
Re:Offsets en overflows
« Respuesta #6 en: 5 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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Herramienta Offsets locator by kox
Ingeniería Inversa
Tinkipinki 3 305 Último mensaje 19 Octubre 2011, 21:40
por .:UND3R:.
Pointers & Offsets
Ingeniería Inversa
calk9 8 1,278 Último mensaje 13 Diciembre 2011, 04:40
por calk9
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines