iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 22
0
Security

CTF 的三十道陰影系列 第 22

Day22: [Web] TokyoWesterns & TokyoWesterns CTF

TokyoWesterns

今天要介紹的是日本的 CTF 隊伍 TokyoWesterns,先提醒隊伍名稱 正確拼法是 Tokyo 和 Westerns 字首大寫、中間沒有空白、最後要加複數 s,可以用 TW 縮寫表示,其他的寫法都是錯的,他們的成員 icchy 曾經在 twitter 上說太多人寫錯他們的名字......XD


隊伍名稱的由來據說是因為成員大部分都住在東京的西邊,之前曾開玩笑說這樣 HITCON 的成員也可以加入他們,台灣也是在東京的西邊 XD

TokyoWesterns 是由三個日本隊伍合併而來,分別是 MMAtuat_mccCureSecure,其中比較有名氣的是 MMA,在還沒完全合併之前就有在 2015 年辦過屬於自己的 MMA CTF,2016 年 MMA CTF 開了 alias TokyoWesterns CTF 並且正式合併隊伍,算正式的出現在世人眼前被大家注意到,到目前為止是日本排名第一的 CTF 隊伍

2018 年應該算是 TokyoWesterns 成績最好的一年,拿下了幾個知名 CTF 的第一名,像是:HITB CTF QualsASIS CTF Quals 還有 WCTF 大師挑戰賽,其中難度最高的應該是 WCTF,一度 ctftime 上的成績衝到第一名,但很可惜沒有保持到最後 QQ

BTW,WCTF 是由 360 負責舉辦,特別之處是在於:

  1. 邀請制,只有國際上被主辦方認可的強隊和中國頂級的 CTF 隊伍才會被受邀參加
  2. 主辦方不出題,只負責架題目......XD 參賽隊伍每隊要出兩道題目,至少要一道非 linux 的題目,參賽隊伍要互相解對方出的題目
  3. 賽後有交流和評審制度,隊伍要上台講解自己出的題目,避免有隊伍故意出不合理且 unsolvable 的題目
  4. 獎金很多,超級多,會場也超豪華,不愧是 360 辦的 CTF 競賽
  5. 歷屆戰績:
    • WCTF 2016 年第一次舉辦,冠軍毫不意外的由 KepResolve 拿下 (PPP 和 DEFKOR 聯隊......),亞軍和季軍是 CykorHITCON
    • 2017 冠軍是 HITCON 217 ,亞軍 ToykoWesterns,季軍 Shellphish Repeat (shellphish + Eat Pwn Sleep Repeat 聯隊)
    • 2018 TokyoWesterns 奪冠,亞軍是 Dragon Sector,季軍 Cykor
      • 本屆 HITCON 和 217 都沒參加......
    • 2019 冠軍 217,亞軍是 Dragon Sector,季軍 r3kapig
  6. TokyoWesterns 的成員 icchy 在今年的 WCTF 2019 上設計了一道很精妙的 web 題 Gyotaku The Flag,雖然出了點差錯導致 unintented solution 解掉變成送分題 QQ,但在賽後的評分上,innovative 維度得到了很高的評價

TokyoWesterns 應該是國際上跟 HITCON 關係最好的一組 XD 到對方的地盤都會當地陪帶大家吃吃喝喝,也比較常交流 CTF 的非技術心得 (簡稱八卦),但就不方便在 ithome 上寫出來了....XD

0x15: WCTF 2019 Web Gyotaku The Flag

這題是上述提到今年 WCTF 個人認為最獨具匠心的一道題目,反過來利用系統保護機制來達成 side channel attack,詳細的原理可以參考這份投影片:https://westerns.tokyo/wctf2019-gtf/wctf2019-gtf-slides.pdf


簡介一下這道題目:

  • simple web archive service
  • Gyotaku 是魚拓的意思
    • like making a stamp of a web page at specific time
  • 功能是 query 任意的 url,該網站會被後端的 crawler archive 保存,但網頁不提供檢視的功能 XD
  • GET /flag 會檢查來源 ip 是 localhost 才印出 flag,否則會回 403 forbidden
  • flag 頁面可以被 POST /gyotaku 保存,但因為沒有 viewer 所以也看不到內容

unintented solution 是在 header 中加入 X-Real-IP: 127.0.0.1,由於這題是使用 go 的某個 web framework 所寫的,出題者也沒注意到竟然會吃 X-Real-IP ... 幫 QQ,附上出題者的自嘲 XD

2017: 7dcs (Crypto, Web, Reverse, Pwn) → 0 solved
2018: f (Forensics, Reverse, Web) → 1 solved
2019: Gyotaku The Flag (Web, Misc) → everyone solved

這題的環境是架在 Windows 上,並且啟用預設所有的 security feature,因此也包含 Windows Defender,會做以下的行為保護服務:

  1. 檢查檔案內容是否包含有害的 payload
  2. 更改檔案權限避免使用者誤開
    • 此步驟開始,文件由 SYSTEM 控制,一般 user 無法開啟檔案
  3. 將有害內容以 null byte 取代
  4. 刪除整個檔案

我們可以透上傳 EICAR 標準反病毒測試文件 的 payload 來觸發 Windows Defender 的保護,但要如何利用這個 feature 呢 ? 在檢測過程中或使用到內部自帶的 js engine mpengine.dll,我們可以讓他跑一段 js code 來達到 side channel attack 來 leak flag,基本概念是利用 eval("EICA"+input) 的結果判斷會不會被 Windows Defender 給偵測到,如果被偵測到就表示 input 的開頭是 R

leak flag 的 js code 如下,每個 index 需要執行 256 次來猜是什麼 byte,可以利用 binary search 加速搜尋,如果最後 mal 組出的值是 EICAR 就會觸發 Windows Defender,讓 GET /gyotaku/id 頁面變成 500 Internal Server Error,可以用此判斷是不是猜中 flag,這題還要根據 Gyotaku 的結構來把 flag 塞進 HTML body tag 裡面,具體做法就省略不提,大家可以自行參考出題者的投影片

var body = document.body.innerHTML;
var mal = "EICA";
var n = body[$idx].charCodeAt(0);
mal = mal + String.fromCharCode(n^$c);
eval(mal);

Gyotaku 這題發明了一種全新的 web 攻擊技術,就好比 House of Orange 在 binary 的利用手法一樣創新,後來這題有在 ToykoWesterns CTF 2019 重新出一次,相信之後會有更多人開始挖掘這種攻擊手法的利用思路 :D


上一篇
Day21: [Pwn] blue-lotus & BCTF
下一篇
Day23: [Pwn] 你有看過 pwn 神嗎 如果沒有現在讓你看看
系列文
CTF 的三十道陰影31

尚未有邦友留言

立即登入留言