【问题标题】:The address of an environment variable changes every time it is checked每次检查环境变量的地址都会改变
【发布时间】:2018-12-28 12:37:46
【问题描述】:

我正在尝试学习如何使用缓冲区溢出来更改 esp 中的地址以运行 shell 代码;我已经定义了一个名为“SHELLCODE”的环境变量来存储 shell 代码的执行,但是每当我运行 getenv 函数来获取该环境变量的地址时,地址就会超时;

Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff507b9bd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff5fb4abd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff54ca5bd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff5d633bd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff50bedbd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff5d5f9bd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff5bc6ebd5
Onurcans-MacBook-Air:ArtofExploitation onurcanbektas$ ./genenv_exp SHELLCODE
SHELLCODE is at 0x7fff5589bbd5

这是什么原因?如何防止这种情况发生?

【问题讨论】:

    标签: shell buffer-overflow shellcode


    【解决方案1】:

    您的程序似乎被编译为使用 A地址 Space Laout Randomization (ASLR )。在您的程序的每次执行中,主要的内存部分(例如您的代码、全局变量、堆栈等)都被映射到一个随机的内存地址。因此,每次执行程序时,地址都会“移动”。

    我建议您检查是否可以通过将程序编译为使用固定地址来关闭程序的 ASLR。另一种选择是为您的 PC 暂时禁用 ASLR(不建议这样做,因为用户通常会忘记在之后打开它)。

    另一个我经常使用的技巧,因为它是一个练习,是手动“泄露”你想要使用的地址。在您的程序中添加一个打印行以打印所需的地址,然后才等待将溢出程序的输入。通过在地址上使您的漏洞利用参数化,您将能够利用该练习(模拟一个真实的单词案例,在该案例中您需要内存泄漏才能进行攻击)。

    例如(取自scout的测试模块):

    printf("The buffer is at address: %p\n", buffer);
    printf("Press ENTER to continue\n");
    fgetc(stdin);
    

    【讨论】:

    • 非常感谢您的建议;我猜最后一个选项看起来很适合我的情况。
    猜你喜欢
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    相关资源
    最近更新 更多