CTF(pwn) 堆利用 之 unlink 介绍
unlink是鏈表中常見的操作,而我們需要利用這個過程
通過改變鏈表指針,使中間堆塊拿出來
當前的unlink會有一個對鏈表的完整性檢查的
檢查其 fd,bk 是否是指向正確的堆塊, 還有一個是size檢查
繞過上述的鏈表完整性檢查需要以下操作
要利用unlink首先要繞過前面提到的兩個檢查。繞過size檢查需要可以修改下一個chunk->prev_size。繞過fd和bk檢查需要能夠控制fd和bk。
1.第一種利用思路
利用條件
存在UAF可以修改p的fd和bk 存在一個指針指向p利用方法
通過UAF漏洞修改chunk0->fd=G_ptr-0x18,chunk0->bk=G_ptr-0x10,繞過fd和bk檢查 free下一個chunk,chunk0和chunk1合并,chunk0發生unlink,修改了G_ptr的值效果
修改G_ptr=&G_ptr-0x18。如果能夠對G_ptr指向的空間進行修改,則可能導致任意地址讀寫。
2.第二種方法思路
這種情況在做題中出現的情況比較多。因為malloc是返回的指針如果存儲在bss段或者heap中則正好滿足利用條件2。
利用條件
可以修改p的下一個chunk->pre_size和inuse位 存在一個指針指向chunk p的內容部分利用方法
偽造fake_chunk。fakechunk->size=chunk0-0x10,可以繞過size檢查。fakechunk->fd=&G_ptr-0x18,fakechunk->bk=&G_ptr-0x10,繞過fd和bk檢查。
修改下一個chunk的prev_size=chunk_size-0x10。因為fake_chunk比chunk0小0x10。
修改下一個chunk的inuse位。
free下一個堆塊chunk1。fake_chunk和chunk1合并,fakechunk發生unlink,修改了G_ptr的值。
效果
修改G_ptr=&G_ptr-0x18。如果能夠對G_ptr指向的空間進行修改,則可能導致任意地址讀寫。
這個修改是對于X64下的偏移
對于X32的話除以2
即 ptr- 0xc
ptr-0x8
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的CTF(pwn) 堆利用 之 unlink 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 强网杯2021 [强网先锋]orw
- 下一篇: CTF(pwn)堆利用 之 off by