我正在尝试使用格式字符串攻击覆盖 ac 程序中的变量。这是安全课的家庭作业,我并不是要你为我做作业。但是我正在努力让它发挥作用,我不明白为什么。另外,我知道还有关于这个主题的其他问题,但这些帖子都无法帮助我。
我正在使用我的教授为我设置的虚拟机。易受攻击的代码是由他构建的,所以我不确定他是如何做到的,操作系统是 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 的见解都会很棒。