IMLC.ME
Search…
en-US
格式化字符串攻击(Format String Attack

描述

格式化字符串攻击是指恶意用户提交的字符串数据被当成命令执行。利用此漏洞,攻击者可以执行恶意代码、读取栈信息或者导致分页错误。这会降低你应用的安全性和稳定性。
要明白该攻击,首先你要明白该攻击需要具备的元素。
  • 格式化函数需要是一个遵守 ANSI C 的函数。这些函数把原始变量转换成人类可读格式。例如 printffprintf
  • 格式化函数接受一个 ASCII Z 的字符串作为参数。字符串包含了文本和格式化参数,例如 printf ("The magic number is: %d\n", 1911)
  • 字符串格式化参数决定了如何去格式化字符串
如果没有做合适的输入校验,应该就可能受到此种攻击。在这种情况下,如果一个携带了字符串格式化参数(如 %x)的输入数据原原本本被传递到格式化函数中,在执行转换时,格式化函数会要求额外的输入数据(因为多了个 %x)。我们无法提供额外的输入数据,此时格式化函数就会去从栈中读取数据或者写入数据到栈中。
攻击者可以利用此漏洞,精心地构输入来改变格式化函数的行为,来达到停止服务或者执行任意代码的目的。如果你源代码中使用了类似的格式化函数,那么你的程序很可能就会暴露在这种攻击之下。例如,你的网页中根据用户提交的用户名,通过 printf 函数来输出网页的其他内容,那么你就可能处在格式化字符串攻击的风险之中。
原文列出了容易遭受攻击的字符串格式化函数和对应的格式化参数。并且提供了2个基于 C++ 的列子。详细内容请点击 Format string attack - OWASP
Last modified 1yr ago
Copy link
Contents
描述