开篇碎碎念
近期的进度应该已经进入堆题的学习阶段了,但是我还没有完整做过一道栈迁移的题。倍感惭愧,正好前几天赛博的比赛nameless✌出了一道栈迁移,可惜当时时间很紧。我的想法是现学堆题的知识,然后把ez_heap整出来,但是我太菜了就把大把的时间花费在了理解堆管理器上,到结束也没做出来。也就没心思看这道栈迁移了,不过回头看来,这道题应该是当时可以拿下的。
题目
题目给了execve的地址,可以直接拿来利用。在main函数里有一次read用来布置目标栈
vul函数里有一次read用来劫持rbp、rsp
利用ROPgadget可以找到pop rsi r15和pop rdi,用来布置栈
利用栈迁移时需要用到两条关键的汇编指令:
leave 相当于 mov esp,ebp;pop ebp
ret 相当于 pop eip
我们需要做的就是劫持rbp,将其覆盖为我们想要迁移的位置,再使用leave这条指令,将rbp传入rsp,从而使劫持程序,让其返回到我们布置好的栈上。
这是布置好的bss段和buf
调试的时候可以看到一些关键的覆盖
exp
直接从nameless✌那里抄来的exp,懒狗懒得自己写了
1 | from pwn import * |
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !