带有信息泄漏的 ASLR 旁路

信息安全 开发 C 软件 aslr
2021-08-22 01:35:19

在此处完成RPI 的现代二进制开发课程我在利用 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 中运行它,但我希望不能那样做。

1个回答

提供 16 个字符作为第一个参数,您将填满泄漏缓冲区。由于没有终止空字符的空间,后续 printf 将回显您的 16 个字符,并将继续打印堆栈上的任何内容,直到遇到终止空字符。这是你的信息泄露。然后可以相对于您泄露的地址计算 ROP 小工具的地址。