--- image: https://i.imgur.com/msUlGRr.jpg --- QQ ㄋㄟㄋㄟ好打到咩噗CTF - 中科 write-up === [TOC] ---- # 中科 - Web ---- ## admin 1. 打開頁面會出現 `Forbidden page!` ![](https://i.imgur.com/YjbeSlf.png) 2. 在添加 `X-Forwarded-For: 127.0.0.1` HTTP 標頭後會來到一個登入頁面 ![](https://i.imgur.com/ee9S49l.png) 3. 嘗試使用 admin 搭配 [常見密碼](https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/10-million-password-list-top-100.txt) 暴力破解,能用 `admin:12345678` 成功登入並拿到 flag ![](https://i.imgur.com/CZXTvRm.png) ``` HTTP/1.1 200 OK Date: Thu, 14 Jan 2021 11:15:13 GMT Server: Apache/2.4.38 (Debian) X-Powered-By: PHP/7.4.13 Content-Length: 37 Connection: close Content-Type: text/html; charset=UTF-8 <h2>SWCTF{4R3_Y0U_4_R34L_4DM1N?}</h2> ``` ---- # 中科 - Misc ---- ## disseminate 1. 題意是找出文章中不一樣的地方,打開txt後發現文章內有些許錯字 ![](https://i.imgur.com/2J5hakk.png) 2. 將第一句拿去餵google,可找到原始文章 ![](https://i.imgur.com/1KTqkwL.png) 3. 使用工具比較與原文不同之處,拼湊錯字後即可得到flag ![](https://i.imgur.com/beoST7D.png) ``` flag: SWCTF{Googlehelpme!} ``` ---- ## матрёшка_1 1. 將題目解壓縮後,可以看到flag0-flag4資料夾,此結構共重複出現六層,而最後一層有txt文件 ![](https://i.imgur.com/SAdElmD.png) 2. 原則上這題是希望利用script來解題,不過好像出現許多偏方XD,這邊使用python語法來當作範例 ```python #資料夾 dirlist = ['flag0\\','flag1\\','flag2\\','flag3\\','flag4\\'] #檔案名稱 filelist = ['flag0.txt','flag1.txt','flag2.txt','flag3.txt','flag4.txt'] #使用迴圈拼湊路徑 for d1 in dirlist: for d2 in dirlist: for d3 in dirlist: for d4 in dirlist: for d5 in dirlist: for d6 in dirlist: for fname in filelist: s = d1+d2+d3+d4+d5+d6+fname f = open(s) flag = f.read() if(len(flag)>0): print(flag) f.close() ``` 3. 這題沒有做太多混淆,假flag檔案全都是空的,只要每個內容點開找也能解出來 ![](https://i.imgur.com/OiA0DkH.png) ``` flag: SWCTF{SH4D0W_CL0N3_JUT5U!!!} ``` ---- ## матрёшка_2 1. 題目為層層包裹的壓縮檔,也是利用script進行解題,這邊一樣用python當範例 (要慢慢點開也是能解出來啦 ```python import os import shutil import zipfile filename = "матрёшка.zip" #建立暫存資料夾以利作業 temp_dir = 'temp\\' os.mkdir(temp_dir) while(True): #解壓縮至temp zipf = zipfile.ZipFile(filename, 'r') zipf.extractall(path=temp_dir) zipf.close() #確認是否還有為解開之檔案 並將目標移出temp if(os.path.exists(temp_dir+filename)): shutil.move(temp_dir+filename,filename) else: break ``` 2. 待程式執行結束於temp資料夾中解出flag.jpg ![](https://i.imgur.com/HmNBZC2.png) 3. 最後使用base64工具解開即可獲得flag ![](https://i.imgur.com/rvktAL5.png) ``` flag: SWCTF{ZIP_FILE_1S_SUCK!!} ``` ---- # 中科 - Crypto ---- ## code 1. 打開txt後會看到一大串binary,拿遠一點看可以發現有QRcode的回字特徵 ![](https://i.imgur.com/jCIxYDP.png) 2. 將1替換成黑色方塊( █ ),0替換成全形空白(   ),可以拿到完整的QRcode ![](https://i.imgur.com/cmPRzkE.png) 3. 掃描後得到字串"FJPGS{DEEDEEDDDDEEEDEEDE}",但還不是真正的flag,使用凱薩密碼可解開 ``` flag: SWCTF{QRRQRRQQQQRRRQRRQR} ``` ---- # 中科 - Reverse ---- ## func 1. 於 x64dbg 中打開,並執行到入口點 (40147A) 後中斷 2. `右鍵 -> 搜尋 -> 目前範圍 -> 字串引用` 可找到一些有趣字串 ![](https://i.imgur.com/aCmxD1w.png) 3. 點兩下 "Nothing!\n" 跳轉到引用該字串的指令處 (40111C) 4. 反白至函數的起始位置 (401110) 5. 按下 G 可繪製邏輯圖,發現有個明顯分支 ![](https://i.imgur.com/1TVyD9P.png) 6. 於邏輯圖中分支前的 je 指令下斷點 (鍵盤 F2) 7. 切換回 CPU 分頁,繼續執行程式 (鍵盤 F9) 8. 直到程式中斷於剛剛的 je 處,x64dbg 會繪製 je 準備跳到哪 (40112B),並提示跳轉未實現 ![](https://i.imgur.com/LqtjwgO.png) 9. 於 40112B 選擇 `右鍵 -> 將此處設為新的執行點` 以強制跳轉 ![](https://i.imgur.com/gqtDwp4.png) 10. 按下執行到返回 (鍵盤 Ctrl + F9) 後程式會解密並顯示 flag ![](https://i.imgur.com/CDdOWig.png) --- ## password 1. 於 x64dbg 中打開,並執行到入口點 (4014EA) 後中斷 2. `右鍵 -> 搜尋 -> 目前範圍 -> 字串引用` 可找到一些有趣字串 ![](https://i.imgur.com/hxseSnd.png) 3. 點兩下 "Enter the password: " 跳轉到引用該字串的指令處 (401045) 4. 按下 G 可繪製邏輯圖,發現下面有個明顯分支 ![](https://i.imgur.com/viPBh3I.png) 5. 於邏輯圖中分支前的 je 指令下斷點 (鍵盤 F2) 6. 切換回 CPU 分頁,繼續執行程式 (鍵盤 F9) 並輸入任意密碼 7. 直到程式中斷於剛剛的 je 處,x64dbg 會繪製 je 準備跳到哪 (401089),並提示跳轉未實現 ![](https://i.imgur.com/Oag32hF.png) 8. 於 401089 選擇 `右鍵 -> 將此處設為新的執行點` 以強制跳轉 ![](https://i.imgur.com/fUVqw9f.png) 9. 按下執行到返回 (鍵盤 Ctrl + F9) 後程式會解密並顯示 flag ![](https://i.imgur.com/YCChrTC.png)