TL;DR
我只是新手,Writeup 寫得很爛,單純個人筆記用,如果是想學習建議右轉 Wha13 資安大佬的 blog,應該會比這邊還要多收穫 .w. (2025/02/21 upd.)
心得
My First CTF 這次打爛了,只打出一題 Welcome 還拿首殺,超丟臉,結果回家看現場卡住的題目,直接解了兩題出來。
Pre-exam 部分,這次拿了 #137,備取 27,上暑期課程的希望有點渺茫,希望備取或備審可以進吧。
解題部分,這次最可惜的應該是 It's MyGO!!!!! 和 babyRSA 沒寫出來,其中 MyGO 可以直接用 sqlmap 解,babyRSA 問題不出在加密算法的取值上 (ex:weak e),而是它原始資料就是 ASCII Code,可以直接用原始資料加密後取蜜文反推,總之這兩題都賽後才想到解法,蠻可惜的。
這次學到最大的道理,應該是簡單的事情不要想得太複雜,還有不要有預期心態。這次很多題目一開始解就走錯路了,方向完全錯掉,浪費很多時間,還讓自己的心態崩掉。
最後,明年應該會再報一次,希望明年至少可以打 80 名以內。
6/30 更:babyRSA 懶得寫 WP 了,然後這次 Pre-exam 正取好爽。
Writeup
Misc
Quantum Nim Heist
通靈題:
先開始新遊戲,然後先移一步,之後一直 enter,然後拿走最後一顆。
Flag: AIS3{Ar3_y0u_a_N1m_ma57er_0r_a_Crypt0_ma57er?}
Three Dimensional Secret
題目給了一個 Wireshark 的封包,然後 Follow TCP String,
可以看到一個 .gcode,丟到線上解碼,就解決了。
(結果這題 MFC 沒有,哭)AIS3{b4d1y_tun3d_PriN73r}


Welcome

這題在My First CTF 那拿了個首殺,然後我就只寫出這題了,放上來主要是給大家笑笑(還有看看我到底多小丑),其他都是 AIS3 Pre-exam 的部分了。

Emoji Console
Payload:💿 🚩 😜 😶 🐍 ⭐ -> cd flag ;p :| python *
Flag: AIS3{🫵🪡🉐🤙🤙🤙👉👉🚩👈👈}
如果上面的字元跑不出來:
解法:
先全部按一遍,發現他是把表情符號轉成文字去執行指令,所以先一個一個試,發現有些表情符號可以用,例如貓(cat),CD 光碟(cd),蟒蛇(python)。
先用 🐱 🚩(cat flag),得cat: flag: Is a directory
嘗試 💿 🚩 (cd flag),沒有輸出,因為 cd 本來就不會噴東西出來
執行 🐱 🚩(cat flag),但又得cat: flag: Is a directory,所以可以得知指令應該要一次執行。
執行 🐱 ⭐ (cat *),然後他 print 那個目錄的所有檔案內容,可以得知他的完整表情符號映射表
(分割線 My First CTF 結束)
之後查詢映射表,發現其中 😜 (;p)、😶 (:|) 可以利用
構建 payload 💿 🚩 😜 😶 🐱 ⭐ -> cd flag ;p :| cat *
得到內容
#flag-printer.py
print(open('/flag','r').read())
嘗試執行該檔案 (flag-printer.py):
然後 💿 🚩 😜 😶 🐍 🚩➖🖨️ -> cd flag ;p :| python flag-printer
得到內容:python: can't open file '/app/flag/flag-printer': [Errno 2] No such file or directory
所以最後再請出星號,直接把該目錄的檔案都跑一次💿 🚩 😜 😶 🐍 ⭐ -> cd flag ;p :| python *; 前後指令執行,p : 被 | 截斷,所以最後指令等效 cd flag ; python *
輸出 AIS3{🫵🪡🉐🤙🤙🤙👉👉🚩👈👈},收工。
參考資料:
https://scist.org/blog/2020/10/27/2020%20SCIST%20Web/ - Cat Digger
Web
Evil Calculator
檢閱原始碼:
from flask import Flask, request, jsonify, render_template
app = Flask(__name__)
@app.route('/calculate', methods=['POST'])
def calculate():
data = request.json
expression = data['expression'].replace(" ","").replace("_","")
try:
result = eval(expression)
except Exception as e:
result = str(e)
return jsonify(result=str(result))
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run("0.0.0.0",5001)
看起來像是 pyjail,把 payload 用 HTTP POST 送入 /calculate 就可以被執行了
然後就是寫一個 payload,讓他 import os,之後 cat flag,結束這題,然後我就整個歪掉了。試了一堆 payload,但都沒辦法讓他順利 RCE,
要 import 被 _ 擋掉
base64 也解不了(也要 import)
16 進/ 8 進位編碼也不行
unicode 全形下引號 (_) 也不行 (懷疑 python2)
breakpoint 也沒辦法
軟體從 curl 手搓換成 burp suite 也沒辦法
My First CTF 結束,給了個提示說不一定要達成 RCE,只要能讀出 flag 就好,回家研究了一下 open() read(),然後用出 payloadopen('/flag').read()
Flag: AIS3{7RiANG13_5NAK3_I5_50_3Vi1}


It’s MyGO!!!!!
原本嘗試手動盲注,透過 UNION 的手法,執行 LOAD_FILE('/flag'),讀出 FLAG,但我注了六小時,試了一堆 payload,就是注不進去,賽後得知,原碼用兩個 SELECT 做查詢,所以用 UNION 一定碰壁,我哭死。
打 Pre-exam 時,有想試 sqlmap,但因為 timeout 他直接報錯,所以後來就沒用了,賽後 maple 大佬說有個參數可以讓她忽略 timeout ,所以想說來試試看,結果 10 分鐘就解出來了,我再哭死。
指令:sqlmap -u http://chals1.ais3.org:11454/song?id=1 –random-agent --ignore-timeouts --timeout=3 --dbms=mysql --file-read "/flag"
解釋:sqlmap -u 開頭http://chals1.ais3.org:11454/song?id=1 網址–random-agent 防一些偵測的東西 (UA)--ignore-timeouts 叫他不要管 timeout--timeout=3 伺服器三秒不回就 timeout--dbms=mysql 對面後面是 MySQL(可不加,還是可以跑,比較久而已)--file-read "/flag" 讀 flag
Flag: AIS3{CRYCHIC_Funeral_😭🎸😭🎸😭🎤😭🥁😸🎸}
參考:
https://feifei.tw/security-tool-sqlmap/
https://hackmd.io/@bttea/sqlmap_common_parameters
https://github.com/sqlmapproject/sqlmap/wiki/Usage
Reverse
The Long Print
打開 IDA,逆向了整天程式,推敲他 FLAG 怎麼做編碼運算,然後看到 Secret 好像沒有東西等等等,反正就是大崩潰,解了五六個小時都沒結果,然後看到一堆人解出來表示懷疑人生
然後注意到 sleep 感覺好像有點長,所以把它改短一點,改成 0,結果瞬間就噴完了,也沒看到 flag,改成 500,他又一樣幾乎卡死,最後改成 1,終於會慢慢噴了
但最後噴出來的 flag 會被清掉,懶得繼續研究程式了,直接螢幕錄影後,自己補齊最後一位的 }
Flag: AIS3{You_are_the_master_of_time_management!!!!?}

Scoreboard


