栈迁移小总结

[Black Watch 入群题]PWN

ciscn_2019_es_2

特别注意,在第二次做题发现泄露ebp地址为什么与填充大小不同,经过gdb调试后发现,当填充到ebp是,ebp里面的值恰好是ebp的地址减0x10属于偶然情况,要注意使用gdb调试,还有一点在填写system的参数binsh是填入的是地址由于我们写入的binsh与s的初始举例为4的地址差,所以buf-0x38+0x4*3。

具体的过程网上都有太多了,仅在这里记录一下我自己的感想与想法,

1.栈迁移题目其实最重要的是理解esp.ebp栈顶栈底指针的变化,leave-ret指令的调用指针很重要,其次是调用两次leave之后,栈迁移的fake地址一定是要减去4,是因为有一次ebp指令没有用处。        

2.栈迁移题目中,分两个大类一种是栈迁移至bss段,还有一种便是迁移到可输入位置之前的地址,第一种迁移至bss段,有着固定格式,直接垃圾填充+ebp填入迁移地址+gadget-leave-ret,便可迁移至我们想要的bss段,第二种有printf语句但无bss段就可以先垃圾填充至ebp再输出ebp的地址,找偏移构造rop

3.还有一点非常重要的当迁移以后地址的第一位为函数调用时,会执行pop eip所以迁移地址要减0x4。

相关文章感谢

两题看栈迁移_沫忆末忆的博客-CSDN博客

栈迁移进阶

HITCON-Training-lab6

先放上解析和地址

https://github.com/scwuaptx/HITCON-Training

[栈迁移]stackoverflow:HITCON-Training LAB6_漫小牛的博客-CSDN博客

解决这类栈迁移最最重要的便是理解bp和sp是如何由leave_ret利用来进行变化的,

记录几个重点,read函数的参数输入(标准输入,地址,大小),之后跳一个地址进行read的输入

context的应用来找到recv的put_addr接受多少。最最最重要的还是感谢学长的指点。实践调程序才是基础重中之重。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值