缺少格式字符串的 scanf 会导致什么样的漏洞?

3

如果没有指定格式字符串,使用scanf函数会存在什么样的漏洞?

例如: scanf(variable);

1个回答

3
这里的漏洞通常具有技术性质,但问题在于scanf函数将要写入的值的地址作为参数。如果您没有传递足够的参数来指定它们应该去哪里,或者给出了错误类型的参数,那么恶意攻击者可以为scanf构造格式字符串,使读入的值被写入到控制敏感信息的内存位置中。例如,函数最常见的实现方式是在堆栈上存储某个地址,该地址指示函数返回后要执行的下一条指令。如果攻击者能够以某种方式向该地址写入数据,则可以更改函数将返回到的位置。此外,如果攻击者能够从scanf中将二进制数据放入内存(例如通过向stdin提供大量数据),则理论上可以更改返回地址以跳转到该二进制数据,劫持程序并导致其执行攻击者选择的代码。这可能是恶意的,例如格式化硬盘的代码,甚至更糟糕的是窃取个人信息,向计算机添加后门等。

如果想了解如何执行通用攻击并将数据写入不应该去的地方,文章"Smashing the Stack for Fun and Profit"是一个很好的参考。虽然它没有专门涉及这种类型的问题,但在此描述的攻击类型同样可以执行。

希望这能帮到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接