Attualmente sono interessato a imparare come fare buffer overflow. Ho fatto un bel po 'di montaggio e ho capito come funziona lo stack e come implementare un overflow del buffer in C. Tuttavia, sto attraversando un bel po' di problemi nel tentativo di ottenere GCC 4.9.1 per consentirmi di traboccare un buffer correttamente. Sto eseguendo Debian Jessie.Come testare i buffer overflow su un sistema moderno?
Here è il tutorial che sto tentando di seguire, nella sezione 2.2. Ho copiato/incollato il programma C che fornisce, e sto usando lo stesso script Perl che è, quindi tutto è esattamente lo stesso del suo caso (ad eccezione del sistema, ovviamente).
Questi sono i risultati che sto ottenendo costantemente:
~/projects/buffer-overflow$ ls
run.pl test.c
~/projects/buffer-overflow$ sudo su
[email protected]# echo "0" > /proc/sys/kernel/randomize_va_space
[email protected]# exit
exit
~/projects/buffer-overflow$ gcc -m32 -fno-stack-protector -zexecstack test.c
~/projects/buffer-overflow$ ./run.pl
Address of foo = 0x804845b
Address of bar = 0x80484a4
My stack looks like:
(nil)
0xffffd4a8
0xf7e58b2f
0xf7fb3ac0
0x8048657
0xffffd494
[email protected]
Now the stack looks like:
0xffffd718
0xffffd4a8
0xf7e58b2f
0xf7fb3ac0
0x42418657
0x46454443
Non capisco lo stretto voto. La domanda mi sembra abbastanza chiara e riguarda sicuramente la programmazione. – NPE
Hai provato a immettere una lunga stringa * prima * cercando con lo script Perl, per verificare che lo stack venga "correttamente" sovrascritto? Ogni versione di gcc introduce nuove ottimizzazioni e contromisure contro questo tipo di trucchi. Potresti provare forse con -O. – LSerni
@NPE. Anch'io sono preoccupato per questo. Sembra una domanda legittima e interessante per me. –