在不指定格式字符串的情况下执行扫描是什么样的漏洞



在不指定格式字符串的情况下执行扫描是什么类型的漏洞?

例: scanf(variable);

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

有关如何执行通用攻击的更多信息,这些攻击通过将数据写入不应该去的地方来起作用,文章"粉碎堆栈以获得乐趣和利润"是一个很好的参考。 它没有专门解决此类问题,但此处描述的各种攻击也可以类似地执行。

希望这有帮助!

最新更新