格式字符串漏洞也可以用于编写其他内容顺便说一句,顺便说一句,除了C和C ++之外,是否还有其他语言有创建此类漏洞的风险?如果只有二进制文件,如何发现格式字符串漏洞?
#1 楼
有很多问题,下面是一些答案:我们如何在内存中写一些带有格式字符串漏洞的东西?
printf
格式字符串规范中使用的功能。首先,%n
是一种格式说明符,具有以下作用(根据手册页):或变体)指针参数。没有参数被转换。
现在,第二个格式字符串功能将允许我们从格式字符串中选择特定的参数。主要选择运算符是
%n
,以下代码表示我们选择了第二个参数(此处的结果将显示int *
):printf("%2$x", 1, 2, 3)
一般情况下,我们可以执行
$
以选择当前2
函数的任意参数(格式字符串参数不计算在内)。如果我们可以将字符串
printf("%<some number>$x")
传递给程序并使它显示为格式字符串,那么我们可以将值printf
写入地址AAAA%10$n
中。 br /> 我真的建议您阅读Scut(2001)的“利用格式字符串漏洞”,以全面了解这些操作。 C ++容易受到这些错误的影响吗?可以传递给函数。这本身就是一类安全问题。因此,您可能会找到其他一些语言来利用类似问题的方法。但是,您可能找不到与其他语言中的格式字符串功能完全不同的功能。
我确实考虑过Perl,Python等语言,它们都提供对格式字符串功能的类似访问。 >
首先,您必须找到
4
系列过程的调用。然后,我要说模糊测试(fuzzing)应该是找到漏洞的好方法。尤其是如果您可以伪造一些带有种子的条目,例如0x41414141
。符合printf
系列的程序。
评论
哦,酷。但是我将如何写“ 0”呢?据我了解,您必须至少打印一些内容,因此%n的计数至少为> 0?
– newbie2463465
2014年5月30日下午16:14
在“利用格式字符串漏洞”(PDF)的第15页上讨论了写入任意数据的方法。它有点长,您最好参考本文档以进一步使用此类错误。但是请注意,它们现在是一些对策,例如FORTIFY_SOURCE GCC选项。有关更多信息,请参考:格式字符串悼词(Phrack#67,2010年)。
–恐怖
2014年5月30日16:25