日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CTF(pwn) 堆利用 之 unlink 介绍

發布時間:2025/3/20 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CTF(pwn) 堆利用 之 unlink 介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

unlink是鏈表中常見的操作,而我們需要利用這個過程


通過改變鏈表指針,使中間堆塊拿出來


當前的unlink會有一個對鏈表的完整性檢查的

// 由于 P 已經在雙向鏈表中,所以有兩個地方記錄其大小,所以檢查一下其大小是否一致(size檢查) if (__builtin_expect (chunksize(P) != prev_size (next_chunk(P)), 0)) \malloc_printerr ("corrupted size vs. prev_size"); \// 檢查 fd 和 bk 指針(雙向鏈表完整性檢查) if (__builtin_expect (FD->bk != P || BK->fd != P, 0)) \malloc_printerr (check_action, "corrupted double-linked list", P, AV); \// largebin 中 next_size 雙向鏈表完整性檢查 if (__builtin_expect (P->fd_nextsize->bk_nextsize != P, 0) \|| __builtin_expect (P->bk_nextsize->fd_nextsize != P, 0)) \malloc_printerr (check_action, \"corrupted double-linked list (not small)", \P, AV);

檢查其 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 介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。