Ale*_* Ng 8 c security string format-string
我正在接受安全课程,需要我们在unix虚拟机上进行格式化字符串攻击.漏洞是使用命令行参数的格式字符串.
我的问题是如何将值写入格式字符串中的地址(如将shell shell代码写入函数返回地址)?
例如,我尝试将值987654写入返回地址位置0xaabbccdd.我尝试了一些字符串"AAAA_%10$x",这可以导致程序打印AAAA_41414141.
然后我用我的地址替换字母并尝试覆盖它.
\xdd\xcc\xbb\xaa_%10$x_%54321x_%n"
Run Code Online (Sandbox Code Playgroud)
但它不起作用.我看到一篇文章说我应该使用较小的数字,%54321x因为我已经写了一些字符,但我不知道我之前写过多少字符%54321x.
注意:环境有一个旧版本的gcc,所以没必要担心这个值太大了.有什么建议?谢谢.
printf如果不使用格式说明符就无法在任何地方写入%n。这就是你所缺少的。类似的东西%.987654d%n会将数字 987654 (到目前为止输出的字符数)写入第二个参数指定的地址,其中第一个参数是int. 这应该足以让您开始。