如何在格式字符串攻击中将值写入地址
我正在参加一个安全课程,它需要我们在unix虚拟机上进行格式化字符串攻击。 该漏洞是使用命令行参数的格式字符串。
我的问题是如何写入格式字符串的地址值(如写入shell函数返回地址)?
例如,我尝试将值987654写入返回地址位置0xaabbccdd。 我尝试了一些字符串,例如"AAAA_%10$x"
,这可以导致程序打印AAAA_41414141
。
然后我用我的地址替换这些字母并尝试覆盖它。
xddxccxbbxaa_%10$x_%54321x_%n"
但它不起作用。 我看到一篇文章说我应该在%54321x
使用较小的数字,因为我已经写了一些字符,但是我不知道在%54321x
之前写了多少个字符。
注意:环境中有一个旧版本的gcc,所以没必要担心这个值太大。 有什么建议么? 谢谢。
如果不使用%n
格式说明符, printf
不能写入任何地方。 这是你错过的那个。 类似于%.987654d%n
会将数字987654(到目前为止输出的字符数)写入由第二个参数指定的地址,其中第一个参数为int
。 这应该足以让你开始。
通过更改printf函数的字符串打印格式并使其将一些值写入内存中所需的地址位置,可以利用格式化字符串漏洞。 请阅读这篇博文,了解如何做到这一点
您应该指定堆栈的最小偏移量,并使用%n格式化程序(如%[offset]$n
写入
例如: %23$n
一定要通过cheking的结果正确地得到正确的地址 XDD XCC xbbxaa_%54321x_%[offset]$x
“这个可以用Python或bash脚本来完成
你应该检索地址aabbccdd
链接地址: http://www.djcxy.com/p/4587.html上一篇: How to write value into an address in format string attack