看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路

Editor發表於2019-09-25

看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路


KCTF Q3圓滿落幕,感謝所有戰隊的參與,激烈的戰爭結束,讓我們一起來看看賽題詳解吧。


今天為大家帶來第一題的點評及解題思路。




題目簡介



題目背景:


大地一片混沌,神明乘坐方舟穿越無邊的宇宙,降臨大陸,他創造世間最強大的力量——星鑽,誰擁有星鑽,誰就是天下的王。

然而無上的力量滋生慾望,慾望帶來戰爭。暗夜籠罩大陸,奇蹟的光芒被掩映。大陸紛爭四起,墮世之魔蠢蠢欲動,各路英雄層出不窮。

在大陸即將再度輪入黑暗之際,神明帶來了希望之光。

希望之光能夠穿透一切貪嗔痴,引導眾生到達正義與勝利。

生存或者毀滅,前路風雲變幻,抵擋不了他們的腳步。出征吧,戰士!


看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路
本題共有4878人圍觀,最終有83支團隊攻破成功。這道題是全場攻破人數最多的一道題,相對來說,這道題還是比較簡單的。


攻破此題的戰隊排名一覽:


看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路
接下來我們來對題目進行解析,破解其中的奧祕。


看雪評委周信安點評


第一題的設計思路非常簡單,作為一道簽到題,解題成功的隊伍的數量是最多的。而這道題也很好體現了新比賽規則:新規則模擬了現實世界中使用者可以拿到一組序列號,考查此時攻擊者是否能寫出序號產生器。


Q3新規則說明




A)介面


1.防守方釋出的Crackme應允許輸入使用者名稱和序列號,並提示使用者名稱和序列號是否匹配正確。例如類似的(介面僅供參考,可以是控制檯):


┍━━━━━━━━━━━━━━━━━━━━┑
│            ┌──────┐           │
│name   └──────┘           │           


│            ┌──────┐           │
│Serial   └──────┘           │
│        看雪CTF2019             │
┕━━━━━━━━━━━━━━━━━━━━┙


2.防守方在釋出CrackMe時,應向大眾公開一組使用者名稱和序列號,即 “Name/Serial ”,其中公開的這個使用者名稱“Name“,必須是該CrackMe檔案的 hash值。hash演算法指定為SHA256,使用者名稱為hash結果的前64bit的16進位制大寫文字。
例如:參賽CrackMe.exe檔案的hash結果是50be38745d82d93f3a974701e86c1cafcbc2ec83d1f1913d216079022ba7317f
則使用者名稱 “Name“應為50BE38745D82D93F
如果CrackMe不止一個檔案的話,計算hash時應包含CrackMe的所有檔案(第三方共享庫除外)。
參考hash計算工具:http://www.atool9.com/file_hash.php



B)判勝條件
1.若攻擊方找出特定使用者名稱(“KCTF”,不含引號)的序列號,經KCTF系統自動確認,將認定攻擊方獲勝;
2.若攻擊方找出特定使用者名稱(“KCTF”,不含引號) 的第二個序列號,經KCTF官方確認,將認定攻擊方獲勝,且此題多解。




出題團隊簡介



本題出題戰隊 中婭之戒 :

看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路


中婭之戒 團隊簡介:
又拜各位大佬!
Q3為大家帶來了一道速成裸奔簽到題(還因為賭贏「5min內會不會被一血」賺了一頓冰激凌。
藏在曹老闆廣告位的庇護下埋了一枚小彩蛋(不然要麻煩小編改圖還會佔某A開頭友隊的便宜。
最近是年紀輕輕打卡上班每天清晨咖啡續命縮在有限域上質疑人生再不來分屏眼睛要瞎了早睡早起熱愛生活努力成為年輕富婆包養找工作心碎弟弟的WHU密碼學方向在讀研(小)究(姑)生(娘)。
決賽見!




設計思路




看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路


本題運算流程如上圖所示:
第一步:接收使用者輸入的使用者名稱UName和序列號Serial
第二步:UName和Serial異或得到主金鑰Mk
第三步:對Mk做摘要Dig(這裡使用了MD5)
第四步:判斷Dig是否等於目標摘要值Tgt,是→驗證正確,否→驗證錯誤破解思路:
由於MD5是一個單向過程,使用相同的Mk,就可以得到相同的Dig。
根據Mk=UName⊕Serial,對於給定的Uname,Serial=Mk ⊕UName即可得到所求Serial。




解題思路




本題解題思路由看雪論壇HHHso提供:
看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路

一不小心,拿了一血,也因這個開場坐了“跛豪”【英譯:To be NO. 1】的位置半天。

直到大人們看不過眼,給他打上【簽到題】,才有後來的群起攻之。
如果真的是看重比賽得分的話,一般都會忽略簽到題,因為最終得分太低。
做題的順序一般也是先攻沒人攻破的,這樣得分率較高。
一個殘酷的事實是,某場公安部、資訊部有涉及的CTF賽事中,一些團隊攻破賽題數量上頗為可觀,可最終卻被一些只攻破一個賽題的團隊甩幾條街,這就是核心決勝策略。
亂世鬼雄,在人生前進的路上,不要給自己設限,尤其是新手,聞道有先後,術業有專攻,管它是人是鬼還是神,搞搞不就知了,開卷有益。
這有點湊字嫌疑,強扯抒情。
言歸正傳,全部攻擊記錄如下,回頭寫WriteUp,差點自己都沒看明白:-)

請輸入使用者名稱:5D78C3FDF21998AC
請輸入序列號:F3A0FD8D8DE1FEB889808A8FF2D7FDA2
 
C6 E4 CA B5 CE D2 B8 FC CF B2 BB B6 CB EF BC E1
C6 E4 CA B5 CE D2 B8 FC CF B2 BB B6 CB EF BC E1 其 實 我 更 喜 歡 孫 堅
 
 
80 00 00 00 00 00 00 00
 
DA E5 23 10 06 71 95 71 4B A2 CE E2 33 2B B8 66
 
>>> u ='KCTF'+'\x00'*12
>>> u
'KCTF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> x ='C6 E4 CA B5 CE D2 B8 FC CF B2 BB B6 CB EF BC E1'
>>> x.replace(' ','').decode('hex')
'\xc6\xe4\xca\xb5\xce\xd2\xb8\xfc\xcf\xb2\xbb\xb6\xcb\xef\xbc\xe1'
>>> xb = x.replace(' ','').decode('hex')
>>>''.join([chr(ord(u[i])^ord(xb[i]))for iin range(0x10)]).encode('hex')
'8da79ef3ced2b8fccfb2bbb6cbefbce1'
>>>''.join([chr(ord(u[i])^ord(xb[i]))for iin range(0x10)]).encode('hex').upper()
'8DA79EF3CED2B8FCCFB2BBB6CBEFBCE1'

(1)全域性變數陣列記錄輸出的使用者名稱,應當注意到,使用者名稱資訊長度是16位元組對於不夠的長的使用者名稱,通過memset補足零。

看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路

(2)接著就是全域性變數Hi_keybin記錄序列號資訊,32位元組長度。如下第一張圖,keyhex會先進行十六進位制解碼得到keybin,然後接著是第二張圖keybin再十六進位制編碼得到keybinhex,然後與keyhex比對自校驗。

看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路


看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路

(3)使用者名稱資訊(16位元組)與keybin(32位元組解碼得到16位元組)異或得到user_xor_key,然後計算user_xor_key的雜湊值,hash_of_userXORkey。

看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路

(4) 最後hash_of_userXORkey與參考ref_hash比對。

看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路

5)抓住主要矛盾
看到那幾個常量,知道是hash就行,不需要知道是SM*還是MD*,這裡只需要知道是雜湊函式就行。
由於參考hash不變,所以hash的輸入內容也不會變(當然,這是個有條件的真理,在王小云教授面前不一定成立)。
由題目提供的使用者名稱和key,我們得到hash的輸入內容為:

user_xor_key:=C6 E4 CA B5 CE D2 B8 FC CF B2 BB B6 CB EF BC E1 其 實 我 更 喜 歡 孫 堅

因為user_xor_key = userhex ^ keybin,所以user = KCTF時(補足16位元組為:'KCTF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
對應的keybin = user_xor_key ^ userhex
key = keybin.encode('hex')
這就是為何KCTF的key為8DA79EF3CED2B8FCCFB2BBB6CBEFBCE1

>>> u ='KCTF'+'\x00'*12
>>> u
'KCTF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
>>> x ='C6 E4 CA B5 CE D2 B8 FC CF B2 BB B6 CB EF BC E1'
>>> x.replace(' ','').decode('hex')
'\xc6\xe4\xca\xb5\xce\xd2\xb8\xfc\xcf\xb2\xbb\xb6\xcb\xef\xbc\xe1'
>>> xb = x.replace(' ','').decode('hex')
>>>''.join([chr(ord(u[i])^ord(xb[i]))for iin range(0x10)]).encode('hex')
'8da79ef3ced2b8fccfb2bbb6cbefbce1'
>>>''.join([chr(ord(u[i])^ord(xb[i]))for iin range(0x10)]).encode('hex').upper()
'8DA79EF3CED2B8FCCFB2BBB6CBEFBCE1'

看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路






看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路- End -



合作伙伴

看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路
看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路
上海紐盾科技股份有限公司(www.newdon.net)成立於2009年,是一家以“網路安全”為主軸,以“科技源自生活,紐盾服務社會”為核心經營理念,以網路安全產品的研發、生產、銷售、售後服務與相關安全服務為一體的專業安全公司,致力於為數字化時代背景下的使用者提供安全產品、安全服務以及等級保護等安全解決方案。






看雪.紐盾 KCTF 2019 Q3 | 第一題點評及解題思路
公眾號ID:ikanxue
官方微博:看雪安全
商務合作:wsc@kanxue.com

相關文章