iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 23
1
Security

CTF 的三十道陰影系列 第 23

Day23: [Pwn] 你有看過 pwn 神嗎 如果沒有現在讓你看看

前言

先廣告一下,HITCON CTF 2019 Quals 會在 10/12(六) 10:00 ~ 10/14(一) 10:00 開始,歡迎大家踴躍參加 XD
接下來幾天都會介紹 HITCON CTF team 的主力成員,還有他們曾經出過的經典題目 XD

神 黑客 天使男孩 — Angelboy

今天要聊的人物就是在本次 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 奮鬥史

吹了這麼多,來聊一下這些年 angelboy 在 CTF 是如何從入門到 pwn 神 (?)

  • 故事的起源是來自某份花了五分鐘隨便做的投影片 ... 沒錯,就是在下做的 (艸) 時間點大約是剛從 DEFCON 22 CTF 打醬油回來,當年最早的團隊覺得要開始推廣 CTF 給更多人,這樣才有足夠的戰力打倒邪惡的 PPP,當時受邀參加了 HITCON Girls 的邀請推廣 CTF,結果 angelboy 當時好像是以 HITCON 工作人員的身分幫忙打雜,也聽到了這場 talk,然後就一發不可收拾了.....
  • 後來 angelboy 就進入了 CTF 的領域,自學加上旁聽台大和交大的 CTF 課程 (計算機安全 和 程式安全),後來還亂入比了被當成期末考的台交賽 XD (之後有機會在聊聊台交賽,可以說是 HITCON CTF Final 的前身)
  • 同一時間,交大由 jeffxx, atdog, bletchley 等人成立了的 CTF 隊伍 BamfooFox,廣納台大以外的 CTF 學生一起加入隊伍,希望能跟當時已經有一定實力的 217 有抗衡之力 (但大部分的場次都被吊打 QQ),angelboy 也於加入團隊,正式邁向 pwn 神之路
  • angelboy 有個特殊能力,每次比賽都可以挑到最難的題目來做......XD 而且大部分都是 heap 題,像是 plaiddb 或是 freenote,但也因為這樣讓 angelboy 開始研究 heap exploitation,最後論文題目也是拿 heap 的研究畢業
  • 2015 年隨 HITCON CTF Team 征戰 DEFCON 23 CTF,此時已經是戰隊解 pwn 題的主要戰力
  • 2016 年開始製作各種 CTF 教材,並開始於 HITCON training、AIS3、台灣好厲駭等場合傳授 binary exploitation 的課程
  • 2016 年在 HITCON CTF 中出了一題 House of Orange,House of Orange 可以說是正式宣告 angelboy 的 pwn 題水平在 CTF 圈已經處於領先地位
    • House of Orange 對於 FILE vtable 的利用方式,讓 glibc 特別做了 harden 避免濫用 XD
  • WCTF 2017 出了一道 wannaheap,考的是全新的 FILE structure 的利用手法,成功難倒全場隊伍,並於同年 HITCON CMT 投稿 Play with FILE Structure - Yet Another Binary Exploit Technique,又一次掀起了 CTF 圈 pwn 題的新熱潮
  • 2017 年初和 lays 和我,架設 pwnable.tw 平台,讓大家有個平台和目標的學習 pwning skill
    • 其他 HITCON CTF Team 的成員幫忙提供了大量優質的題目 <(_ _)>
  • 至今持續在台大 計算機安全 的課程擔任講師,培養了一批又一批打 pwn 的人才出來,不誇張地說目前台灣和中國做 pwn 的,幾乎都是看 angelboy 教材長大的 (?)
    • 從上星期 Balsn CTF 的高質量 pwn 題就可見一般 <(_ _)>

這周末要參加 HITCON CTF 的 pwner,一定要來挑戰看看 angelboy 的題目,相信會痛與快樂並存著...(?) 如果是初學者,建議可以避開 angelboy 的 pwn 題,但其他人的題目可能也沒好到哪去就是 ..... XD

最後這張圖做個結尾,也呼應今天的標題 XD 這個梗是 Pwnie award 2019 best server-side bug 的得獎人之一 meh 在 DEVCORE conf 提到的

  • meh 也是由 angelboy 帶出來的 pwner,不過已經淡出 CTF,跑去危害世界維護世界和平了

0x16: HITCON CTF 2016 pwn 500 House of Orange

House of Orange 在前幾天的 Educational Heap Exploitation 有稍微提過,今天來詳細說明一下這題的利用思路,甚至被歸納為一種 heap 獨特的利用方式,詳細解法可以參考 angelboy 的 blog: http://4ngelboy.blogspot.com/2016/10/hitcon-ctf-qual-2016-house-of-orange.html


一樣是 heap 標準的選單題,保護全開,功能有四個,如下圖:

  1. 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 ;
      };

  2. See the house

    • 印出 house 的內容
    • 用來 leak data
  3. Upgrade the house

    • 可以修改 name 和 orange 的內容,但限制三次
    • 沒有檢查 input size 是否大於 buffer 長度,存在 heap bof 的漏洞
    • 最大可以輸入 0x1000 的 name,結尾沒有補 \0,see the house 時可以 leak data
  4. Give up

    • exit

這題因為 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 要滿足以下條件:

  1. larger than MINSIZE(0x10)
  2. smaller than need size + MINSIZE
  3. prev inuse is set
  4. 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


上一篇
Day22: [Web] TokyoWesterns & TokyoWesterns CTF
下一篇
Day24: [Web] 橘之呼吸
系列文
CTF 的三十道陰影31

尚未有邦友留言

立即登入留言