iT邦幫忙

第 11 屆 iT 邦幫忙鐵人賽

DAY 28
2
Security

CTF 的三十道陰影系列 第 28

Day28: [Misc] 料理是帶給人們幸福的東西

前言

如果說 HITCON CTF team 能打進 DEF CON CTF Final 是因為 217 加入的關係,那 HITCON CTF team 的成立不能不介紹今天要提起的幕後推手 - jeffxx

Software Quality Lab

就跟少年王道漫畫的情節類似,今天要講的故事開始也有兩個主角,一個是功課優秀、才華洋溢的天才優等生,另一個是經常翹課或上課睡覺、考試經常不及格的問題學生,atdog 是當時交大資工的學霸、書卷獎的常客,而 jeffxx 擔任了後者的角色 (沒到前面描述得這麼誇張,前面是誇示漫畫情節 XD),經常在 deadline 之前才跟 atdog 求救,把作業改成自己的版本之後交出去 XD

有趣的是這個乍看之下天差地遠的組合,卻因為相同的興趣而走在一起,先是一同加入交大系計中網管小組 CSCC,後來又成為了 黃世昆 老師 帶領的軟體品質實驗室 (簡稱 SQLab,跟 SQL injection 的 SQL 沒有任何關係) 底下的專題學生,SQLab 是交大在 Security 研究赫赫有名的實驗室,也因為這樣讓 atdog 和 jeffxx 開始走上資安領域這條不歸路 (?)

  • 黃世昆 老師不僅在學術界有所成就,也具有相當程度的實作能力,是台灣最早期的 hacker 之一,不僅在資安領域上有所成就,也對台灣的 open source 圈有傑出的貢獻,在台灣電腦網路發展史上可以不時看到相關痕跡
  • 雖然 SQLab 沒有什麼招生限制,但有大部分成員也擔任系計中助教,不負責任猜測跟 黃世昆 老師當年在交大念書時是也 CSCC 成員也許有所關係 (?)

jeffxx 和 atdog 當時參與的計畫是 <互動式程式線上測試與評審平台>,這個計畫的成果就是赫赫有名 wargame.cs.nctu.edu.tw,當時排行榜上名列前茅的都是資安圈內小有名氣的人物,也經常被推薦成當時資安學習的入門練習,可見網站上的題目具有一定水準,題目許多都是由 jeffxx 所設計,要設計題目作者也要先有一定程度的水平才行,因為投入了大量心思在研究 wargame 上,推測是因為導致 jeffxx 的學業成績相對比較不理想 (?)

  • 可以在排行榜上看到 Orange XDD Orange 和 jeffxx 可以說是透過 wargame.cs 才認識的,可以說是不打不相識 (?)

  • wargame.cs 後來用於黃世昆老師開設的程式安全等課程上,由於該平台會針對註冊會員產生不同的 flag,可以一定程度遏止 share flag 的惡習

  • 現在 CTF team 的成員 seanwu, lays, lucas 等人都有挑戰過 wargame.cs,解出了除了壞掉的 openssl 以外的所有題目...XD

  • 後來 wargame.cs.nctu.edu.tw 因為硬碟壞軌停止營運了一段時間,後來由實體機轉移到 VMWare 中運行苟延殘喘了一陣子,後來因為沒有人願意接手維運,最後就忍痛關站 QQ

  • BTW,當時其實 wargame 網站非常多,wargame.cs 也不是台灣的第一個,目前能往前追朔到,最早的應該是 台灣冒險家俱樂部,不知道還有沒有更早出現的 XD

  • 目前台灣學習 pwning 最好的網站是 https://pwnable.tw,對 pwn 有興趣的看官們可以嘗試看看

後來 jeffxx 吸收了 wargame.cs 的成功和失敗之處,在程式安全的期末考嘗試舉辦 CTF 的台交賽,最後衍生呈現在 2015 年 HITCON CTF Final 的初始平台,不得不說 HITCON CTF 能有現在的成績,jeffxx 是在後面最重要的人物之一

CRAX

SQLab 成員有每年參加 HITCON 吸取新知的習慣,jeffxx 也不例外,參加之後嘗試挑戰 HITCON Wargame,於 2010 年獲得了第 7 名的成績,隔年 2011 進步到第三名,但 2010 和 2011 的冠軍都被交大 DSNS Lab 給拿下,隔年 2012 正式成立隊伍 CRAX 挑戰 HITCON wargame,終於獲得第一名的成績 XD

  • CRAX 是 software CRash analysis for Automatic eXploit generation 的縮寫,是基於 SQLab 核心的研究項目 symbolic exection 技術衍伸的自動化 exploit 產生器

這應該是 CRAX 這個名詞第一次出現在大眾眼前,並且在首次出現就獲得第一名的成績 XD 隔年 2013 也獲得冠軍,然後就接手舉辦 HITCON CTF ...... QQ 當時有人疑問為什麼交大怎麼多出一隊 CRAX,還問是不是有八卦......XD 其實就只是不同 Lab 各自挑戰而已,沒有八卦 (?)

  • 與 DSNS 算是良性競爭,畢竟同一個學校而且又是資安 lab,會有想要贏過對方的狼性 (X)
  • BTW,CRAX 每年也有挑戰金盾獎,成績最好的一次應該是在 2012 年由 jeffxx, Lance, lion 拿到的第四名

後來就如前面的故事所述,在 Orange, jeffxx, seanwu 等人的牽線之下,集合當時台灣最強戰力 Orange + 217 + CRAX 挑戰並成功打進 DEF CON CTF Final 之後,隔年其餘部分成員要畢業投入職場,剩下的成員 (jeffxx, atdog, ddaa) 與 DSNS (bletchley) 聯合成立 BambooFox,目前呈現一個單飛不解散的狀態......(?)

HITCON CTF Team 成員有以下也是 CRAX 的成員:

  • jeffxx
    • 今天故事的主角,wargame.cs 的催生者
    • 歷屆程式安全助教,
    • 專業 Misc 通靈, 也會有辦法作 web 和 reverse 的題目
      • 也有能力幫忙解 pwn 題,但通常 pwn 題都被其他人搶去做
      • 在某次還在載題目,angelboy 就解掉之後那次之後,就很少主動看 pwn 題了... XD
  • atdog
    • 同為 wargame.cs 的催生者,後來跑去台大念研究所
    • 開啟名為 217 的 CTF 潘朵拉盒子的始作俑者之一
    • Wargame 時期打 web 的題目居多,後來開始打 pwn
      • 開始打 pwn 之後經常是 angelboy 的 heap 題苦痛好夥伴......
      • 但由於寫 script 速度飛快,經常兼任工具人的角色
    • HITCON CTF team 的歌神
  • dm4
    • 跟 atdog 在台大研究所認識
    • 開啟名為 217 的 CTF 潘朵拉盒子的始作俑者之二
    • Wargame 時期打 web 居多,後來工作後比較少打 CTF,轉職成最強工具人
      • DEF CON CTF Final 會被徵召幫隊伍寫各種 script 或工具 XD
  • lucas
    • CRAX 最早畢業投入職場的成員,但偶爾會出現幫大家解題
      • 如果發現沒人要做的 revere 難題,突然被解掉,就知道是 lucas 出現了
    • 主要打 reverse,對 Windows 系統非常熟悉
    • 長年定居微軟百大駭客
    • 台灣最早破關 flare-on 挑戰的人
  • ddaa
    • 剛接觸 CTF 就被拉進 CRAX,在 2013 HITCON Wargame 躺分奪冠...XD
  • Lays
  • angelboy

料理是帶給人們幸福的東西

一個團隊最重要的就是凝聚力,而最能把大家凝聚在一起的東西就是 食物,因此 HITCON CTF Team 往往會在 CTF 結束之後舉辦 大食團 (Orange: 感謝 jeffxx 賜與我美好的一餐),但大食團只能在結束時凝聚團隊意識,但我們需要能在 CTF 進行中提升大家的戰鬥力,因此我們需要新的職業出現 - 廚師

......可惜不是 Alan,是我們本文的主角 jeffxx,經過有如遠月集訓般刻苦修練後,jeffxx 已經精通 steak overflow 的技能,讓大家在一面於 CTF 奮戰之際,在需要補充能量時吃到最美味的食物,以便大家更高效率的解出 flag

以下提供 jeffxx 今天在 HITCON CTF 後勤團隊準備的晚餐,深夜時段請斟酌觀看:

0x1a: NCTU Wargame [Real] BBS iotc

這題在我接手 wargame.cs 之前,有壞掉好一陣子過......XD 當時還沒有 docker 這種好東西可以使用,這題環境我記得是要透過在題目主機上透過 chroot 跑一個 maple BBS 起來......,但隨著題目主機 FreeBSD 升級之後,chroot 的功能也就噴掉了 G__G


先來回顧一下這題的題目敘述:

按下start 後, 將會在特定 IP 與 port (詳見 start 之後取得之資訊)開啟 bbs 服務
ITOC maple bbs 曾經存在有一嚴重漏洞可讓使用者執行任意程式
請用 guest 登入此 bbs 並找出漏洞, 利用此漏洞執行 /checkin 獲得通關金鑰

在 /home/wargame/bbs 有 bbs 的部份程式碼

雖然題目說是 部分程式碼,但其實給了一大包 maple BBS 的外部功能......QQ 像是寄信到其他 BBS 站、小遊戲 之類的,不太可能每行程式碼都看一遍 XD 這邊必須先從敘述的 可讓使用者執行任意程式 猜到這題是考 cmd injection 才有辦法繼續往下做,再檢查過所有呼叫 system 的程式碼之後,可以發現 game/cdict.c 在實作查詢線上字典的功能時,存在 cmd injection 的問題,程式碼如下:

void
main_cdict()
{
	char word[32], fpath[50], cmd[256];
	while (vget(b_lines, 0, "請輸入想查詢的中/英文(可用 Regular Expression):", word, 30, DOECHO))
	{
		if (strchr(word, '\''))
			continue;
		if (strchr(word, '\"'))
			continue;
		if (strchr(word, '`'))
			continue;
		if (strchr(word, ';'))
			continue;
		if (strchr(word, '|'))
			continue;
		if (strchr(word, '$'))
			continue;
		if (word[strlen(word) - 1] == '\\')
			strcat(word, "\\");
		sprintf(fpath, "tmp/%s-%d.21cent", cuser.userid, (int)getpid());
		sprintf(cmd, "%-24s\033[1;37;44m 21st Century Dictionary 線上字典 \033[m\n%s", "", MSG_SEPERATOR);
		f_cat(fpath, cmd);
		sprintf(cmd, "cdict5 %s &gt;&gt; %s", word, fpath);
		system(cmd);
		more(fpath, NULL);
		unlink(fpath);
	}
}

雖然有對要查詢的單字用黑名單過濾了一些常見的 cmd injection 字元 ', ", ``, ;, | ,$,但顯然有漏,可以讓我們截斷前面的 cdict5, 隨便舉幾種方式:

  1. apple && cat flag

    透過 && 截斷,但前面指令執行成功之後才會執行我們插入的 command

  2. \ncat flag

    透過換行來截斷前面的 command,要 input 能接收換行字元才能使用,這題用 vget 應該可以...吧 XD

  3. <(cat flag)

    這招要 bash 才能使用,原理跟 cat flag 一樣,不過預設 shell 是 sh 應該無法在這題使用

話說回來,看標題有 [Real] 這應該是 maple BBS 上曾經真實存在過的問題 (?) 但我翻了一下目前 iotc bbs 可取得的 source code 找不到 game/cdict.c,只有發現 dictd.c,看來這題是當年某個站自己改出來的漏洞吧 (?)

  • 當年一堆赤裸裸的 cmd injection,那真是個美好的年代 (誤)

上一篇
Day27: [Forensic] 他們轉生變成 CTFer 這檔事
下一篇
Day29: [Pwn] 剩下的,就是你們的事了
系列文
CTF 的三十道陰影31

2 則留言

0
sixwings
iT邦新手 5 級 ‧ 2019-10-14 11:05:18

是萬惡的宵夜文!可惡肚子餓了

0xddaa iT邦新手 5 級‧ 2019-10-15 19:30:46 檢舉

原本想說要不要把食物放第一張讓大家轉貼 (逃

0
fdgkhdkgh
iT邦新手 5 級 ‧ 2019-10-17 02:09:19

學長太神了< _ _ >
一想到自己只會一點點pwn,就覺得讓SQLab的名字蒙羞了

pwnable.tw好玩XDDD

0xddaa iT邦新手 5 級‧ 2019-10-17 05:24:53 檢舉

用蒙羞太誇張了啦...XD
我也只是剛好有 jeffxx 帶著入門,不然憑我自己可能也玩不出什麼成就 QQ 沒有成功傳承下去實在抱歉,不過有以後有要幫忙可以聯繫我們,lab 的 FB 社團應該大家都會看 XD

我要留言

立即登入留言