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

String 在不指定格式字符串的情况下执行scanf是什么样的漏洞?,string,security,format,scanf,String,Security,Format,Scanf,在不指定格式字符串的情况下执行scanf是什么样的漏洞 例如: scanf(变量)此处的漏洞通常是技术性的,但问题是scanf函数将读取的值写入的地址作为参数。如果您没有向函数传递足够的参数来指定它们应该去哪里,或者您提供了错误类型的参数,那么恶意攻击者可以为scanf创建一个格式字符串,以便将读入的值写入内存中控制敏感信息的位置。例如,实现函数的最常见方式是将函数返回后下一个要执行的指令的地址存储在堆栈的某个位置。如果攻击者能够以某种方式将数据写入此地址,则可以更改函数返回的位置。此外,如果攻

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

例如:
scanf(变量)

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

有关如何通过将数据写入不该写入的位置来执行一般攻击的更多信息,本文是一篇很好的参考资料。它没有专门解决这类问题,但这里描述的攻击类型也可以类似地执行

希望这有帮助