💧對于堆溢出,有很多漏洞可以和它打配合,可以說是堆里面很常見的漏洞,常見的有off_by_null,House系列(后續(xù)學習到了會繼續(xù)更新這個系列),unlink,等等。 今天來看一個,堆溢出修改指針,導致libc泄露以及通過指針來修改got表的題目。 題目連接我放下面了,對堆有興趣
?堆溢出漏洞是一種常見的漏洞,存在多種配合漏洞,如off_by_null、House系列、unlink等。本文將探討堆溢出修改指針,導致libc泄露以及通過指針來修改got表的題目。
題目鏈接?:
https://pan.baidu.com/s/1_j2gw22PQHK-PiC8HUcVvg?pwd=d2wt
提取碼:d2wt
本題目為32位,got表可以修改。在堆題目中,保護全開的情況很常見,需要關注保護措施。若got表可以修改,可嘗試修改free或malloc的got表。若無法修改got表,可以考慮__free_hook和__malloc_hook。
32位ida靜態(tài)分析顯示有一些功能函數(shù),其中add函數(shù)申請了兩個chunk,第一個大小為輸入的值,第二個為固定的0x80大小。輸入的name保存到了第二個chunk,同時將第一個chunk的指針放到了第二個chunk的數(shù)據(jù)里。
update函數(shù)對輸入的chunk的判斷依據(jù)大小是name chunk和輸入數(shù)據(jù)chunk之間的距離,若先申請一些chunk將它們隔開,則可實現(xiàn)較大的堆溢出。
delete函數(shù)將chunk1和chunk2都進行了釋放。
show函數(shù)可以進行name和text的打印。
?思路:申請chunk時首先到bin里查找,若無則從Topchunk切割一塊。若申請的大小超過0x20000,則不是mmap分配。釋放時若兩塊chunk物理相鄰,則會合并。通過申請和釋放chunk,可以實現(xiàn)堆溢出。
指針修改之前:
修改之后:
chunk1的指針換成了free_got表地址,打印chunk1時可進行泄露,之后修改chunk1即可修改free_got表為system,最后釋放chunk2(/bin/sh)即可獲得shell。
exp:
;丶铱纯聪盗谐掷m(xù)更新..........
小編推薦閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權,請發(fā)郵件[email protected]
湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2025 haote.com 好特網(wǎng)