Sono principiante negli exploit. Quindi ho scritto un programma semplice in C
#include <stdio.h>
void func(){
printf("asd");
}
main(){
char buf[100];
scanf("%s", &buf);
}
Il mio obiettivo è eseguire func () e stampare asd. Con 116 'A ho finito di scrivere l'EIP ma quando cambio gli ultimi 4 A con l'indirizzo di memoria della funzione (in ordine inverso) ed eseguo di nuovo il programma l'EIP è qualcosa di completamente diverso. Ecco i dettagli del modulo GDB:
Starting program: /root/Documents/C/overflow/stack
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Program received signal SIGSEGV, Segmentation fault.
0x41414141 in ?? ()
(gdb) info registers
eax 0x1 1
ecx 0x1 1
edx 0xb7fbd354 -1208233132
ebx 0xb7fbbff4 -1208238092
esp 0xbffff4d0 0xbffff4d0
ebp 0x41414141 0x41414141
esi 0x0 0
edi 0x0 0
eip 0x41414141 0x41414141
Con indirizzo della funzione:
(gdb) disas func
Dump of assembler code for function func:
0x0804846c <+0>: push %ebp
0x0804846d <+1>: mov %esp,%ebp
0x0804846f <+3>: sub $0x18,%esp
0x08048472 <+6>: movl $0x8048530,(%esp)
0x08048479 <+13>: call 0x8048340 <printf@plt>
0x0804847e <+18>: leave
0x0804847f <+19>: ret
Starting program: /root/Documents/C/overflow/stack
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x6c\x84\x04\x08
Program received signal SIGSEGV, Segmentation fault.
0x6336785c in ?? ()
Se aggiungo più A alla stringa, EIP inizia a traboccare con A di nuovo intendo
Adding 1 A EIP = 0x36785c41
Adding 2 A's EIP = 0x785c4141
Adding 3 A's EIP = 0x78414141
Adding 4 A's EIP = 0x41414141
Sto usando Linux, non ho rimosso o modificato nulla nel kernel, quindi non ci sono protezioni. Inoltre non ho disabilitato alcuna funzione su gcc, e il compilatore è gcc = D.
Qualsiasi aiuto è benvenuto. Grazie in anticipo.