gpt4 book ai didi

c - 格式化字符串漏洞,覆盖变量

转载 作者:行者123 更新时间:2023-11-30 14:48:45 24 4
gpt4 key购买 nike

我已经用谷歌搜索并阅读了不同的论文,但找不到解决方案。

我编写了一个小c程序,我想在其中覆盖函数的参数。

void test(int test) {
printf("%x %x %x %x %x %x %x %x\n");
printf("%x %x %x %x %x %x %x %n\n");
printf("%x %x %x %x %x %x %x %x\n");
if (test == 1) {
printf("BOO\n");
} else {
printf("YEE\n");
}

}

int main() {
int a = 1;
test(a);
return 0;
}

如果我使用此设置运行程序,则其输出如下:

fff6c602 f7d61138 5658b559 0 0 fff6b698 5658b5f4 1
Segmentation fault

1 是函数的参数,我想覆盖它。但正如你所看到的,如果我使用 %n 覆盖它,程序就会崩溃,尽管我正确设置了 printf 指针。

有人知道为什么会发生这种情况吗?

最佳答案

来自man - printf(3)

%n
The number of characters written so far is stored into the integer indicated by the *int (or variant) pointer argument. No argument is converted.

现在您要做的就是向地址 0x1 写入一些内容,这肯定会导致 SIGSEGV。
如果你想覆盖函数的参数,你需要找到%n的参数指针。

关于c - 格式化字符串漏洞,覆盖变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50210358/

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