我在《古拉经》上读到一个答案,在那里我遇到了一个简单的问题:

char* inputString;
printf(inputString);

是个安全漏洞。
我假设inputString不仅仅是未初始化的,而是用两个语句之间的一些外部输入初始化的。
这到底是什么安全漏洞?
关于Quora的最初答案是:
If C and C++ give the best performance, why do we still code in other languages?
但它没有为这一说法提供额外的背景。

最佳答案

我假设输入字符串是从用户那里得到的字符串,而不仅仅是一个未初始化的值。
问题是用户可以
使程序崩溃:printf ("%s%s%s%s%s%s%s%s%s%s%s%s")
查看堆栈:printf ("%08x %08x %08x %08x %08x\n");
查看任何位置的内存,
甚至可以将整数写入进程内存中几乎任何位置。
这导致攻击者能够:
覆盖控制访问权限的重要程序标志
覆盖堆栈、函数指针等的返回地址
这一切都解释得很好。

10-02 10:36