【发布时间】:2013-10-10 14:16:08
【问题描述】:
我正在阅读并尝试了解格式字符串漏洞。我有一个易受攻击的函数,并且我了解我对格式字符串的处理要点。
基本上,这就是我想做的。传入我的格式字符串,其中包含一些 shellcode 作为它的一部分。我还需要格式化我的字符串,以便替换易受攻击函数的返回地址,使其指向我在堆栈上的 shellcode。因此,当函数返回时,它会跳转到我在堆栈上的 shellcode 并打开一个 shell。
目前,我可以在堆栈上看到我的 shellcode,并且可以写入返回地址来更改它。问题是,我使用 %n 作为覆盖返回地址的方式,但不确定如何让 %n 用特定值覆盖。当然, %n 只是打印到目前为止写入堆栈上指定地址的字节数。我已经阅读了几篇关于如何操纵 %n 以写入所需的确切地址/值的内容,但我不知道如何做到这一点。
谁能解释一下?
编辑: 我尝试用诸如“%500d”和“%.500d”之类的东西填充我的格式字符串,以及一些 n 值的“%nu”。(我也尝试过更小的值)但这只会带来分段错误。
为了消除一些困惑,这是我为回应评论而写的一个简单示例:
好的,我会尽量说清楚一点。我有一个易受攻击的程序。漏洞点是“printf(input);”。我想通过传入格式字符串来利用它。现在例如,我有一个格式字符串
"\x0c\xde\xbf\xff%08x.%08x.%08x.%08x.%08x.%08x.%n"
这个格式字符串,当传递给易受攻击的函数时,会用写入的字节数覆盖内存地址 0xffbfde0c。我正在寻找如何修改该格式字符串,以便通过以某种方式填充 %n 之前写入的字节数来使 %n 覆盖特定值。
【问题讨论】:
-
你有什么问题?
-
我的问题是如何使用 %n (在我的格式字符串中)打印我想要的任何值(读取:地址)。
-
%n用于格式字符串漏洞,用于覆盖内存而不是读取内存。使用%x转储内存。 -
抱歉,我的措辞可能不正确。我正在尝试使用 %n 覆盖内存。我只是想弄清楚如何用 %n 控制新值。基本上,我想使用 %n 用特定值覆盖内存。
标签: c security format-string