格式化字符串并使用%n覆盖具有特定值的内存地址
我正在阅读并尝试学习格式化字符串漏洞。 我有一个易受攻击的函数,我理解我的格式字符串必须处理的要点。
基本上,这是我想要做的。 传入我的格式字符串,其中包含一些shellcode作为其一部分。 我还需要格式化我的字符串,以便易受攻击的函数的返回地址被替换,以便它指向我的shellcode在堆栈上。 因此,当函数返回时,它将跳转到我的shellcode并打开一个shell。
目前,我正处于可以在堆栈中看到我的shellcode的地步,并且能够写入返回地址来更改它。 问题是,我使用%n作为覆盖返回地址的方式,不确定如何让%n覆盖特定的值。 当然,%n只是将到目前为止写入的字节数打印到堆栈中的指定地址。 我已经阅读了一些关于如何操作%n来编写想要的确切地址/值的内容,但是我对如何实现这一点感到迷茫。
任何人都可以点亮一下吗?
编辑:我试过用'%500d'和'%.500d'等填充我的格式字符串以及一些n值的“%nu”(我尝试了很多更小的值),但这只是带来了分段错误。
为了澄清一些混淆,下面是我为回应评论而写的一个简单例子:
好吧,我会尽量做得更清楚些。 我有一个易受攻击的程序。 脆弱点是“printf(input);”。 我想通过传递一个格式字符串来利用这个。 现在例如,我有一个格式字符串
"x0cxdexbfxff%08x.%08x.%08x.%08x.%08x.%08x.%n"
该格式字符串在传递到易受攻击的函数时,将用写入的字节数覆盖0xffbfde0c的内存地址。 我正在寻找如何修改该格式字符串,以便通过某种方式填充%n之前写入的字节数来使%n覆盖特定值。
获得%n
写入数字的唯一方法是让printf
打印这个字符数。 要获得任何指针的值,您需要打印许多字节。
最简单的方法就像%999999s
。
此外,试图将返回值指向某个函数(也称为“返回到libc”)可能更容易,因为代码通常驻留在相对较低的地址中。
链接地址: http://www.djcxy.com/p/26997.html上一篇: Format strings and using %n to overwrite memory address with specific value
下一篇: read sms message IOS 11 get warning XPCIMDMessageStoreSendXPCMessag.