Loading... <!-- wp:paragraph --> <p>这道题目挺有意思的,我首次通过leave指令实现了成功的栈迁移,因为leave和</p> <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>mov rsp,rbp pop rbp</code></pre> <!-- /wp:code --> <!-- wp:paragraph --> <p>是等价的,这道题目栈上可以输入的长度只有32字节,偏移本身就要占去18字节,但是在bss段上却可以输入0x1000个字节,足够rop了。所以我们填充rbp的备份时用bss段的地址来填充,并且让程序返回到leave指令处,然后通过<code>mov rsp,rbp</code>就实现的栈迁移。这样就可以让程序执行bss段上的rop链了。要注意的是,栈迁移的时候不要迁移到bss段头,这样在printf泄露的时候会出现奇怪的问题(估计是printf函数对更低地址中的load段等进行了修改造成了问题),稍微往高地址迁移一点既可以成功地leak。</p> <!-- /wp:paragraph --> <!-- wp:paragraph --> <p>由于远程打不通,所以这里我就只提供个思路了。希望buu能够尽快修复。</p> <!-- /wp:paragraph --> 最后修改:2020 年 12 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,那听听上面我喜欢的歌吧