【pwnable.kr】horcruxes - 伏地魔的7个魂器 gets栈溢出 截断 atoi转化

image-20181123143621965

本关信息

伏地魔吧自己分裂的灵魂藏在了7哥魂器中…这个描述666。本关要求我们找到所有的魂器然后ROP似乎就可以拿flag了。本关没有给源码,上IDA分析吧。本地运行前安装32位libseccomp库,apt-get install libseccomp-dev:i386

image-20181123235615061

init初始化abcdefg7个int值,保存在bss段,并计算sum。abcdefg的值生成时使用随机数做为种子再调用rand函数生成,因此随机不可预测。

image-20181123235704687

ropme函数输入abcdefg的值,就可以调用相应的打印函数。gets函数输入sum的值就可以进入输出flag的流程。由于gets存在栈溢出,因此可以劫持返回地址。

image-20181124000016124

利用思路很简单,劫持返回地址跳转输出abcdefg的值,就可以计算sum,之后把sum转化成字符串后输入给atoi即可。

注意有几个坑点:

  • gets函数遇到a newline character比如\x0a就会截断(遇到\x00 \t不会截断,gets可以读入),ropme函数起始地址是0x080A0009,不能直接跳转到ropme函数中执行代码。可以直接跳到ABCDEFG函数里面获取abcdefg的值。
  • atoi函数将int转化为字符串,如果数字超过int范围转化失败返回-1。

此外,由于0xa不能输入,find查看了stack中是有0x080a的值的,如果栈溢出溢出低位几个字节为打印flag的低位,再rop到该处应该也可以直接读flag。

exp

image-20181124001844848

image-20181124001909081

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值