BUU-xman夏令营选排位赛_2018_main-WP

Posted on Dec 9, 2020

这道题目挺有意思的,我首次通过leave指令实现了成功的栈迁移,因为leave和

mov rsp,rbp
pop rbp

是等价的,这道题目栈上可以输入的长度只有32字节,偏移本身就要占去18字节,但是在bss段上却可以输入0x1000个字节,足够rop了。所以我们填充rbp的备份时用bss段的地址来填充,并且让程序返回到leave指令处,然后通过mov rsp,rbp就实现的栈迁移。这样就可以让程序执行bss段上的rop链了。要注意的是,栈迁移的时候不要迁移到bss段头,这样在printf泄露的时候会出现奇怪的问题(估计是printf函数对更低地址中的load段等进行了修改造成了问题),稍微往高地址迁移一点既可以成功地leak。

由于远程打不通,所以这里我就只提供个思路了。希望buu能够尽快修复。