先廣告一下,HITCON CTF 2019 Quals 會在 10/12(六) 10:00 ~ 10/14(一) 10:00 開始,歡迎大家踴躍參加 XD
接下來幾天都會介紹 HITCON CTF team 的主力成員,還有他們曾經出過的經典題目 XD
今天要聊的人物就是在本次 30 天挑戰中已經被提到無數次的 angelboy,本章節標題是香港知名資安團隊 VXRL
中的成員對 angelboy 的評價 XD
<親愛的,熱愛的> 這部在暑假紅極一時的連續劇中,主角是 Gun 神韓商言,被譽為 CTF 中的 本座級人物,本座級人物是要對整個 CTF 圈有重大貢獻,可以寫進史冊中被永世歌頌......以上這當然是唬爛的,原作是用電競當題材,才有本座級人物這種說法 = = CTF 圈中目前沒有什麼記載進史冊的本座級人物,但如果真的要提一個本座級人物,angelboy 絕對是候選人之一 XD
從 google 搜尋有 1,020,000 次就知道 angelboy 的名氣 (誤) 因為 angelboy 也常常會撞名,但我做了一下實驗,在公用電腦上開無痕搜尋 angelboy,跳出了的第一個連結也會是 angelboy 的 blog XD
改到美國或歐洲地區第一個結果會跳出 angelboy 的 github
如果改用 angelboy
+CTF
當關鍵字搜尋,會剩下 2000 多筆結果,應該是一個合理的數字 XD
看相關搜尋更可以看出熱度
吹了這麼多,來聊一下這些年 angelboy 在 CTF 是如何從入門到 pwn 神 (?)
wannaheap
,考的是全新的 FILE structure 的利用手法,成功難倒全場隊伍,並於同年 HITCON CMT 投稿 Play with FILE Structure - Yet Another Binary Exploit Technique,又一次掀起了 CTF 圈 pwn 題的新熱潮這周末要參加 HITCON CTF 的 pwner,一定要來挑戰看看 angelboy 的題目,相信會痛與快樂並存著...(?) 如果是初學者,建議可以避開 angelboy 的 pwn 題,但其他人的題目可能也沒好到哪去就是 ..... XD
最後這張圖做個結尾,也呼應今天的標題 XD 這個梗是 Pwnie award 2019 best server-side bug 的得獎人之一 meh
在 DEVCORE conf 提到的
House of Orange 在前幾天的 Educational Heap Exploitation 有稍微提過,今天來詳細說明一下這題的利用思路,甚至被歸納為一種 heap 獨特的利用方式,詳細解法可以參考 angelboy 的 blog: http://4ngelboy.blogspot.com/2016/10/hitcon-ctf-qual-2016-house-of-orange.html
一樣是 heap 標準的選單題,保護全開,功能有四個,如下圖:
Build the house
先 allocate house
object,house 裡面再 allocate orange
object,最後 allocatename
buffer
struct orange{
int price ;
int color ;
};
struct house {
struct orange *org;
char *name ;
};
See the house
Upgrade the house
name
和 orange 的內容,但限制三次\0
,see the house 時可以 leak dataGive up
這題因為 malloc 被限制在 0x1000 以下,沒辦法利用 House of force 來分配任意的記憶體位置出來,bof 因為只能從最後被一次被分配的 name buffer 開始覆蓋,沒辦法覆蓋到 name ptr,加上程式完全沒有使用到 free
,也沒辦法讓 buffer 出現再比較上面的位置
這邊是 House of Orange 的第一個精隨,透過覆蓋 top chunk 的 size 來觸發 malloc
函式內部的 sysmalloc
,再擴展 top chunk 後 sysmalloc 會將原本大小不夠的 top chunk 透過 _int_free
放進 unsorted bin 中,能觸發 sysmalloc 的 fake size 要滿足以下條件:
need size + MINSIZE
old_top + oldsize
must be aligned a page.接著可以透過 malloc 一塊 large bin,由於搭配 See the house 的功能來 leak libc base 和 heap base,但因為覆蓋不到 name ptr,也沒有 free
可以做 fastbin attack 或 unlink 之類的攻擊,還是沒辦法進一步控制 control flow
House of Orange 第二個精隨是提出透過 unsorted bin attack 來 hijack control flow 的利用方式,unsorted bin attack 可以再任意位置上覆蓋 unsorted bin
的位置,可寫的內容不可控,因此無法用常見的 __malloc_hook
或其他 func ptr 來控制 RIP
這邊 House of Orange 提出的手法是用 unsorted bin attack 覆蓋 _IO_list_all
,這樣在使用到 stderr 時就會把 unsorted bin
的位置當成是 linked list 來使用,next 剛好會指向 smallbin ,我們可以在 smallbin 上偽造完整的 FILE structure,最後觸發 abort
來讓程式對 stderr
內的 function table 取值,最後達到控制 control flow 的目的 XD
有關透過 FILE structure hijack flow 的技術,後來被 angelboy 命名為 File-Stream Oriented Programing,詳細的利用可以參考這份投影片:https://www.slideshare.net/AngelBoy1/play-with-file-structure-yet-another-binary-exploit-technique