gpt4 book ai didi

c - 如何使用格式字符串攻击覆盖变量

转载 作者:行者123 更新时间:2023-11-30 18:12:36 26 4
gpt4 key购买 nike

我正在尝试使用格式字符串攻击覆盖 C 程序中的变量。这是安全课的作业,我不是要求你帮我做作业。然而我正在努力让它发挥作用,我不明白为什么。另外,我知道还有关于此主题的其他问题,但这些帖子都无法帮助我。

我正在开发我的教授为我设置的虚拟机。该漏洞代码是他构建的,所以我不确定他是如何做到的,操作系统是 Linux 3.13.0-65-generic i686,并且 ASLR 应该已被教授禁用。我们没有收到任何有关设置环境以使这次攻击成功的指示,因为该环境完全是由教授设置的。另外,我在虚拟机上没有 sudo 权限来自己执行这些操作。

这是我的攻击目标的易受攻击的应用程序的代码:

#include <stdio.h>

#ifndef MAGICNUM
#define MAGICNUM 0x41424344
#endif

int x = 0;

void vuln() {
int y = 1;
char buf[128];

printf("This is vuln() \tx = %08x \ty = %08x\n", x, y);
printf("Enter your input: ");
scanf("%127s", buf);
printf("You entered: ");
printf(buf);
printf("\n\n");
printf("Now x = %08x and y = %08x\n", x, y);

if(x==MAGICNUM) {
printf("Success!\n");
system("/bin/sh");
}
else {
puts("Sorry, try again.");
}

return;
}

int main(int argc, char* argv[])
{
vuln();
return 0;
}

我的目标再次是使用格式字符串攻击覆盖变量 x。作业要求我用 MAGICNUM 覆盖它,但现在我只是尝试为 x 分配任意值。

使用 GDB,我发现 x 的地址是 0x0804a030

我知道我需要使用 %n 格式说明符,这些是我迄今为止尝试过的输入字符串的一些示例:

"\x30\xa0\x04\x08%08x.%08x.%08x.%08x%n"
"\x30\xa0\x04\x08%8s%n"
"\x30\xa0\x04\x08%.8%n"

所有这些输入字符串都会触发段错误,我无法弄清楚它们为什么不起作用。

任何关于我可以做什么来成功覆盖 x 的见解都会很棒。

最佳答案

我认为你需要溢出他分配的缓冲区大小。查看变量 buf[128]。 Google 有关堆栈缓冲区溢出的信息,并尝试确定如果将长度超过 127 个字符的参数传递给程序会发生什么情况。

关于c - 如何使用格式字符串攻击覆盖变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33718072/

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