通过RPI 这里的现代二进制开发课程。我在利用ASLR的例子中遇到了麻烦,ASLR应该使用内存泄漏来获取堆栈的信息,然后计算系统调用的偏移量。下面是代码:
#include <stdio.h>
#include <string.h>
/* gcc -pie -fPIE -fno-stack-protector -o aslr_leak2 ./aslr_leak2.c */
int main(int argc, char * argv[])
{
char leaky[16];
if(argc < 2)
{
printf("Please provide two arguments.\n");
return 1;
}
memcpy(leaky, argv[1], 16);
printf("Leaky buffer: %s\n", leaky);
printf("another round? : ");
fgets(leaky, 64, stdin);
return 0;
}看起来不像一个格式字符串漏洞来获取内存泄漏,所以我不知道它应该如何工作。如果我的理解是正确的,我应该从第一个打印中获得一些信息,这有助于我覆盖返回指针来创建ROP小工具。是的,如果我愿意的话,我可以在GDB内部运行这个程序,但是我希望能够不这样做。
发布于 2017-08-15 08:28:54
提供16个字符作为第一个参数,您将填充泄漏缓冲区。由于没有终止空空间,随后的printf将回显16个字符,并将继续打印堆栈上的任何内容,直到遇到终止空字符为止。这是你的信息泄露。然后,可以根据泄露的地址/es计算ROP小部件的地址。
https://security.stackexchange.com/questions/167495
复制相似问题