pwnhub 9月公開賽
作者:jambolt ?編輯:白帽子社區(qū)運(yùn)營(yíng)團(tuán)隊(duì)
? ??"白帽子社區(qū)在線CTF靶場(chǎng)BMZCTF,歡迎各位在這里練習(xí)、學(xué)習(xí),BMZCTF全身心為網(wǎng)絡(luò)安全賽手提供優(yōu)質(zhì)學(xué)習(xí)環(huán)境,鏈接(http://www.bmzclub.cn/)
"? ??
利用技巧
fastbin attack
tcachebin attack
IO_file
FSOP 利用 pwntools SigreturnFrame模塊
程序分析
程序保護(hù)情況
沙盒保護(hù)

禁止程序執(zhí)行系統(tǒng)命令,且限定使用 ARCH_x86_64指令
程序保護(hù)
程序保護(hù)全開?

libc環(huán)境
glibc-2.31
程序漏洞出現(xiàn)點(diǎn)
free調(diào)用可以越界

leave_num 的最大值可以取為8,固free 最大次數(shù)為9

全局變量 break_up_list與 chunk_list想連,發(fā)生free越界時(shí),會(huì)執(zhí)行free(break_up_list[8])既free(chunk_list[0]),可以用于構(gòu)造double free。
利用過程
1)通過largebin泄露libc基址和堆空間地址
堆空間的地址泄露 在unsortedbin中申請(qǐng) largebin 大小的chunk是,滿足 bck=fwd時(shí)會(huì)觸發(fā)執(zhí)行堆塊的 fd_nextsize和bk_nextsize 寫入 堆塊的地址


泄露libc地址

申請(qǐng)堆塊后的堆空間 寫入 'a' * 8 覆蓋堆塊fd 可以進(jìn)行l(wèi)ibc泄露,寫入 'a'*16覆蓋 fd和bk 可以泄露堆空間地址

2)構(gòu)造fastbins attack
題目中可以對(duì) break_up_list進(jìn)行越界free,先將tachebins 填滿

之后再通過越界free(chunk_list[0])來構(gòu)造double free,既
free(break_up_list[6])free(break_up_list[7])free(chunk_list[0]) #越界free

成功控制fastbins鏈表

3)通過fastbin attack 構(gòu)造tcache bin attack
申請(qǐng) 兩個(gè) 0x450的 堆塊 top_chunk被擠到 0x290 + (0x460 * 2) = 0xb50,申請(qǐng)一個(gè)0x20的chunk_list[15] 定位到了 0xb50

從unsortedbin中申請(qǐng)0x20堆塊 內(nèi)容寫上偽造的chunk_size

之后申請(qǐng)的smallbin也會(huì)從unsortedbin中申請(qǐng)
清空之前的tcachebins,剩下之前構(gòu)造的double free

再次申請(qǐng)堆塊,fastbins 進(jìn)入 tcachebins,改寫fd指針,控制tcachebins,tcache之后申請(qǐng)的空間可以改寫 chunk_list[0]

之后free chunk_list[0], chunk_list[1],使之進(jìn)入 tcachebins[0x260]中,再次申請(qǐng)0x40的堆塊可以改寫 tachebins[0x260]的鏈表


之后改寫_IO_2_1_stdin_
4)FSOP執(zhí)行觸發(fā)流程
exit() -> __run_exit_handlers() -> IO_cleanup() -> _IO_flush_all_lockp()-> _IO_str_overflow() -> malloc() -> __malloc_hook-> setcontext -> mprotect()


?通過setcontext 和 mprotect 跳轉(zhuǎn)到之后寫入的匯編代碼進(jìn)行執(zhí)行

在got表的匯編代碼中實(shí)現(xiàn)了 fd = open("flag.txt", 0)

read(fd, buf, 0x40)

write(fd, buf, 0x40)

往期精彩文章
黃金票據(jù)的制作與使用
baijiacmsV4代碼審計(jì)!
記一道有趣的“簽到”題
php代碼審計(jì)總結(jié)
技術(shù)支持:白帽子社區(qū)團(tuán)隊(duì)—?掃碼關(guān)注我們?—
