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


Tema destacado: Entra al canal IRC oficial de #elhacker.net

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

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Little Endian
« en: 2 Enero 2006, 02:19 »

Hola amigos, he leido textos de buffer overflows.
Los he entendido, pero luego al leer sobre format bugs me ha surgido una pequeña duda.

Nosotros para sobreescribir la ret en un buffer overflow, haciamos un string de tantos caracteres necesario como para llegar a ret, luego calculabamos una direccion mas o menos a los nops y la escribiamos en ese string. Cuando pasabamos como argumento ese string, la direccion que pusimos ahi se sobreescribira en RET e ira a esa direccion.
todo ok?, bueno, ahora si estoy en un x86 se usa little endian!!
Como pudo haber funcionado?, si sobrescribi ret usando la direccion al derecho!!

A ver, esta es la parte del exploit que usa Aleph1 en su tuto:
Código:
  addr = get_sp() - offset;
  printf("Using address: 0x%x ", addr);

  ptr = buff;
  addr_ptr = (long *) ptr;
  for (i = 0; i < bsize; i+=4)
    *(addr_ptr++) = addr;
Ven!, la direccion la pone "al derecho" en el string, y luego asi mismo se escribira en el RET!. No tendria que ponerse al revez?. En algunas shellcodes si ponen las direcciones al revez, pero creo que me he creado un relajo en la cabeza.

Pff, voy a dibujarles graficamente ocmo lo pienso, asi capaz es mas facil que me ayuden con mi error :) :
Cada segmento esta con las medidas reales, fijense la cantidad de caracteres entre []

 buffer
[            ][SEBP][RET ]

Bueno, luego tenemos el 'evilbuff' preparado de esta manera:

AAAAAAAAAAAAAAAAA(bffffdec) Obviamente esa direccion esta en chars medios raros.
Ej:
AAAAAAAAAAAAAAAAA1234
Donde '1' es el char correspondiente a bf, '2' a ff, etc:

Entonces corremos el programa
 buffer
[AAAAAAAAAAAA][AAAA][1234]

Ahi mismo!!, no tendria que ser 4321??

Bueno, esa la duda que me esta matando... en shellcodes ponen las direcciones al revez, en los exploits para sobreescribir la ret las ponen al derecho, en fin que mareo!!! :(.

Gracias desde ya!!! :D
En línea
/* strcpy() */


Desconectado Desconectado

Mensajes: 367


FLEMA - The Ramones - Sex Pistols


Ver Perfil WWW
Re: Little Endian
« Respuesta #1 en: 5 Enero 2006, 01:19 »

Lo que tienes que poner al reves son los offsets :)
En línea

Sigo asi
Soy feliz
yo elegí
Sexo, Drogas y PunkRock
rwt

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Little Endian
« Respuesta #2 en: 9 Enero 2006, 02:06 »

No entendi la respuesta... :S
Diganme si pense bien lo del 1234 o como es :S

gracias
En línea
/* strcpy() */


Desconectado Desconectado

Mensajes: 367


FLEMA - The Ramones - Sex Pistols


Ver Perfil WWW
Re: Little Endian
« Respuesta #3 en: 9 Enero 2006, 18:59 »

Claro, que lo que debe estar al reves no es un numero, si no el offset, que sera lo que lee al reves ...
Es decir, el microprocesador interpretara el offset al reves ...
En línea

Sigo asi
Soy feliz
yo elegí
Sexo, Drogas y PunkRock
rwt

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Little Endian
« Respuesta #4 en: 10 Enero 2006, 02:18 »

Yo dije que 1,2,3,4 eran los chars corrsepondientes a un offset!.

Ademas:
addr = get_sp() - offset;
  printf("Using address: 0x%x ", addr);

  ptr = buff;
  addr_ptr = (long *) ptr;
  for (i = 0; i < bsize; i+=4)
    *(addr_ptr++) = addr;

Ahi no se pone la dir alrevez.. :S
En línea
heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: Little Endian
« Respuesta #5 en: 10 Enero 2006, 06:22 »

Pero no vez que pone las direcciones antes de poner el shellcode ? Y luego pone EGG == esta haciendolo todo al revez, es por eso mismo, pork todo se va a invertir por el mismo procesador. EN maquinas little endian cualquier cosa que declares ya sea int a = 1; se guarda como 0x1000000000 sin necesidad de qeu el programador lo especifique, por eso no hay necesidad de especificar que la direccion es little endian si compilas en little endian.
En línea

/* strcpy() */


Desconectado Desconectado

Mensajes: 367


FLEMA - The Ramones - Sex Pistols


Ver Perfil WWW
Re: Little Endian
« Respuesta #6 en: 10 Enero 2006, 19:42 »

No es eso lo que le dije ¿?
xDDDDDDDDD
Es bueno que por lo menos se esten haciendo preguntas con respecto a estos temas y no como explotar el bug "x".
Saludos :D

/****/
Sirdarckcat:
para no crear un nuevo tema, que bueno, que porfin esta cambiando este "foro de noticias" a "foro de información" :)
por cierto, el taller de busqueda de bugs, empesara el martes (prox semana), y abrá capitulos nuevos, cada martes, jueves y sabado.
se dividira en 2 secciones, nivel web, y nivel aplicación, empezaré con nivel web, y cuando se termine ese, ya con nivel aplicación.
les recuerdo que es "requisito excluyente" saber programar en C y PHP, y es "requisito opcional" saber programar en Perl, y javascript, porque si ya sabes PHP y C, es probable que entiendas Perl y JS.

Saludos, y suerte!!
« Última modificación: 13 Enero 2006, 03:04 por Sirdarckcat » En línea

Sigo asi
Soy feliz
yo elegí
Sexo, Drogas y PunkRock
rwt

Desconectado Desconectado

Mensajes: 5


Ver Perfil
Re: Little Endian
« Respuesta #7 en: 13 Enero 2006, 01:25 »

Ah, entonce si pongo una direccion al derecho se guarda al revez en la memoria ya que el procesador asi lo hace. :)

Pero we, ahora hay otro problemilla. si el procesador la da vuleta por si solo cuando la guarda en memoria, pork en las shellcodes de winz se pone la direccion alrevez?
En línea
heap

Desconectado Desconectado

Mensajes: 272



Ver Perfil WWW
Re: Little Endian
« Respuesta #8 en: 13 Enero 2006, 06:03 »

Pork hardcodean la direccion es decir la meten en el string directamente y no como lo hace aleph1 que es por medio de la misma maquina. Si tu creas el evil string y metes las direcciones directamente en el, las metes al revez, pork el computador las va a guardar al revez, es decir hay si quedarian al derecho.
En línea

NostraTerranius

Desconectado Desconectado

Mensajes: 48


Ver Perfil
Re: Little Endian
« Respuesta #9 en: 20 Enero 2006, 00:22 »

Perdona, pero lo de usar NOPs ya se paso de temporada hace ya algunos años. El doc de Aleph1 es mitico (phrack 49 de memoria, no?  ::)) pero realmente ya no es practicamente util, salvo para conocer como funcionan los BOFs.

Antes de enrollarme como una persiana, estas intentando explotar un bug en Linux no? o en Windows?
En línea
ANELKAOS
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.049


#include<nda.h>


Ver Perfil WWW
Re: Little Endian
« Respuesta #10 en: 20 Enero 2006, 02:12 »

Hola rwt. Estoy terminando un simulador de la CPU RiSC-16 (muy básico) con organización Little Endian. Si estas interesado lo pongo bonito y lo posteo cuando termine los exámenes. Es bastante interesante porque se puede modificar para que organice los bits como Big Endian y así poder ver en ejcución las diferencias entre ambos formatos.

1Saludo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines