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


+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Dónde alojar mi shellcode
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Dónde alojar mi shellcode  (Leído 2,474 veces)
cloder

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Dónde alojar mi shellcode
« en: 10 Noviembre 2009, 23:34 »

Hola:

Llevo un tiempo documentandome sobre los ataques de cadenas de formato y BoF con la intención de realizar un trabajo para la universidad en la que estudio.
Estoy trabajando con una Red Hat 7.2 de 2002, para inyectar código suelo usar el entorno ya que puedo predecir con exactitud en qué dirección de memoria estará alojado el shellcode dentro del espacio de memoria del proceso vulnerable.
En las distribuciones actuales de Linux esto no ocurre ya que el extremo superior de la memoria de un proceso no tiene por qué ser siempre el mismo.
Mi pregunta es clara, ¿Dónde puedo alojar mi shellcode en los sistemas linux actuales?

Muchas gracias.
En línea
TRICKY
The "Tricky" ..
Colaborador
***
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil
Re: Dónde alojar mi shellcode
« Respuesta #1 en: 11 Noviembre 2009, 02:37 »

Que tal.

Puede ser que te refieras a ASLR ( Address Space Layout Randomization ) por el cual las posiciones de cierta data en la memoria no son fijas como la shellcode que se ejecuta en la RET ADDR (en el stack) del proceso atacado ( o el heap.. ). 

Se ha estado hablando sobre esto, y de hecho aqui tienes un paper en Espa*ol para que le eches un vistazo si quieres:

http://www.set-ezine.org/index.php?num=38&art=6#top


Saludos.
En línea

"La envidia es una declaración de inferioridad"
Napoleón.
cloder

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Dónde alojar mi shellcode
« Respuesta #2 en: 11 Noviembre 2009, 13:52 »

Hola averno:

Muchas gracias por la información! ;-)

Conoces algún otro lugar, aparte del entorno, donde tuviera suficiente espacio como para alojar mi shellcode.

Otra pregunta:
Conoces algún otro lugar, aparte de los que voy a citar, donde alojar la dirección de salto:
GOT, DTORS, EIP.

Muchas gracias por todo, me ha sido de mucha ayuda tu información para poder continuar trabajando.
En línea
TRICKY
The "Tricky" ..
Colaborador
***
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil
Re: Dónde alojar mi shellcode
« Respuesta #3 en: 11 Noviembre 2009, 19:36 »

Que tal :)

Bueno, yo en cuestiones de Bof y de ultimas ando escaso, pero donde alojar tu shell.. pues en el stack en el caso de un Bof. Ahora, como te puse con ASLR cambian las posiciones en memoria del stack por ejemplo en el que se encuentra determinda zona de memoria reservada por x aplicacion.

Donde almacenar la shellcode ? Pues imagino que en memoria! :)
Imagino que te refieres a usar execve() y demas para ejecutar el Bof, pero lo importante es dar con tu shellcode en memoria. Almacenarla en EIP por ejemplo, te serviria a la hora de que RET se ejecutase ??
No se como digo, pero lo importante es encontrar tu shellcode a fin de cuentas; shellcode que esta en el buffer que le mandamos a la aplicacion con el shellcode que usa execve() como manera de ejecutar la shell ( xjm, /bin/sh ).

Es decir, la shellcode no se guarda en el parametro que apunta al array de punteros para execve(), sino que execve() se encuentra dentro de esa shellcode normlamente. Lo que hay que hacer es que EIP apunte, ya sea con jumps y calls, hacia nuestra shellcode.

EIP apunta a la proxima instruccion a ejecutar. No se como vas a almacenar algo en un registro como EIP?
Lo que se suele hacer es usar instrucciones NOP ( No operation, 0x90 intel ) justo antes de la shellcode para que a final de cuentas EIP termine ejecutando nuestra shellcode. Pero no entiendo muy bien como es eso de almacenar en EIP la shellcode ? EIP tiene que apuntar a nuestro buffer y al ret addr que le demos..

Lo que creo hay que hacer es que EIP apunte, tras el tocho de NOPs por ejemplo, hacia nuestra shellcode asi sobrescribiendo RET.

Lo del entorno como dije lo dices por execve() ? execve() se usa por y para varias cosas creo. Pero que ocurre en tu caso, que tienes poco espacio para almacenar NOPs, shellcode y ret addr??
Es lo que asumo, ya que si no temes por espacio puedes guardar tu shellcode en el buffer simplemente.
Por que guardarla en otro sitio?? ( si como digo, no temes por espacio ).

Saludos :)
En línea

"La envidia es una declaración de inferioridad"
Napoleón.
cloder

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Dónde alojar mi shellcode
« Respuesta #4 en: 12 Noviembre 2009, 00:09 »

Hola averno: :D

Ante todo, muchas gracias por responder tan rápido a mis dudas.

Creo que me has entendido mal, cuando hablaba de GOT, DTORS, EIP me referia a lugares donde alojar la dirección de salto hacia el shellcode, no el shellcode en si mismo.
Tanto la GOT como los DTORS y el registro EIP almacenan direcciones hacia las que se saltará, bien cuando se llame a una función dada (GOT) o cuando vaya a acabar la ejecución del programa (DTORS) o cuando queramos regresar a la rutina invocadora (EIP).

Quería saber si alguien conoce algún otro lugar donde poder alojar la dirección de salto hacia nuestro shellcode.

Muchas gracias  ;-) Da gusto ver la participación en este foro.
En línea
TRICKY
The "Tricky" ..
Colaborador
***
Desconectado Desconectado

Mensajes: 1.587


Ver Perfil
Re: Dónde alojar mi shellcode
« Respuesta #5 en: 12 Noviembre 2009, 01:37 »


Que tal?!

Ah! Ya decia yo :)
Pues a parte de esos registros, no se..
Pero estas ahora si en el sitio correcto.

Asi pues espero que te puedan ayudar mas que yo en esto por estos lares.
Una pregunta.. sabes lo de ASLR y sabras que a la hora de encontrar la base del stack va a ser mas dificil que antes ( cuando no habia esta proteccion ).

Te estas preocupando de sobreescribir otro registro para evadir ASLR??
Si no, por que ?

Saludos  :)
En línea

"La envidia es una declaración de inferioridad"
Napoleón.
Ivanchuk


Desconectado Desconectado

Mensajes: 458


LLVM


Ver Perfil WWW
Re: Dónde alojar mi shellcode
« Respuesta #6 en: 13 Noviembre 2009, 06:50 »

Holas cloder,

Acabo de leer este link http://www.milw0rm.com/papers/219 y el que paso averno, que por cierto esta genial esa ezine, y capaz que ese link aporte algo. Fijate que hay una libreria que tiene direccion estática dentro del espacio de direcciones virtuales.
Que eso de GOT y DTORS? registros x86 no creo que sean...
O sea, igual como dijo averno, si encontras un opcode del tipo jmp esp, o como sea para ir hasta la pila, no necesitas saber la direccion, o sea que poco te interesa el ASLR.
Para mi que el problema lo tendrias cuando controlas registros con el crasheo y no encontras un jmp esp. Ponele que tenes que hacer un call registro o pop registro-call registro, cosas asi, donde tenes que saber la direccion concreta.
Te salvaria sino el ret2libc, llamando a system() por ejemplo. Lo probare, pero creo que inclusive estas librerias dinamicas te varian. Igual nomas te sirve cuando tenes algun proceso suid, para escalar privilegios, nada de shell remota o cosas asi (eso creo). Seguro alguien mas expermientado puede comentar algo sobre este metodo.
Podrias aclarar un poco mas lo de GOT y DTORS?.

Un saludo.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
Ivanchuk


Desconectado Desconectado

Mensajes: 458


LLVM


Ver Perfil WWW
Re: Dónde alojar mi shellcode
« Respuesta #7 en: 13 Noviembre 2009, 20:56 »

Acabo de ver en un ubuntu que tenia instalado con el kernel 2.6.22-14, super viejo pero bue es lo que hay :P, y pasa lo siguiente:
Código:
ivanchuk@ivanchuk:~/vmware-tools-distrib$ ldd /bin/ls
        linux-gate.so.1 =>  (0xffffe000)
        librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7f2d000)
        libacl.so.1 => /lib/libacl.so.1 (0xb7f26000)
        libselinux.so.1 => /lib/libselinux.so.1 (0xb7f0f000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7dc5000)
        libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7dad000)
        /lib/ld-linux.so.2 (0xb7f42000)
        libattr.so.1 => /lib/libattr.so.1 (0xb7da9000)
        libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7da5000)
        libsepol.so.1 => /lib/libsepol.so.1 (0xb7d64000)

ivanchuk@ivanchuk:~/vmware-tools-distrib$ ldd /bin/ls
        linux-gate.so.1 =>  (0xffffe000)
        librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7f01000)
        libacl.so.1 => /lib/libacl.so.1 (0xb7efa000)
        libselinux.so.1 => /lib/libselinux.so.1 (0xb7ee3000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d99000)
        libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7d81000)
        /lib/ld-linux.so.2 (0xb7f16000)
        libattr.so.1 => /lib/libattr.so.1 (0xb7d7d000)
        libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb7d79000)
        libsepol.so.1 => /lib/libsepol.so.1 (0xb7d38000)
linux-gate.so.1 tiene siempre direccion estatica mientras que el resto de las librerias toman valores aleatorios. De esa lib podes sacar un jmp esp.

Un saludo.
En línea

Sólo quien practica lo absurdo puede lograr lo imposible.

Join us @ http://foro.h-sec.org
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
duda alojar web en ftp
Desarrollo Web
CrÄsH 5 922 Último mensaje 27 Marzo 2011, 19:57
por Nakp
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines