# CTF writeup - 姓名: 陳毅 [TOC] ## 忘記這是哪一類 ### [祝賀] 新垣結衣新婚快樂 發錢 - [ ] 成功解題 > 其實也可以算是順利解開啦,但我那時候不相信 Flag 是中文就沒做嘗試了,白白丟失分數 QQ 把圖片解壓縮以後可以得到她老公的照片一張 `\|/` ![](https://i.imgur.com/hoJpC8H.png) 然後我嘗試查看並修改 hex (長寬, RGB 等等)都沒得到什麼線索我就放棄ㄌ ## Reverse ### COVID-19 - [ ] 成功解題 task 是一個 elf 檔案,執行會顯示: ```c= @@ @@ @ @@ @@@@@@@@@@@@ @@ @ @ @@@@............,,,,,,,,,,,,,@@@@ @ @@ @...............,,,,,,,,,,,,,,,,@ @@ @@ @..AIS3{ },,,,@ @@ @@ @..............,,,,,,,,,,,,,,,@ @@ @@ @.............,,,,,,,,,,,,,,@ @@ @@ @............,,,,,,,,,,,,,@ @@ @@@@..........,,,,,,,,,,,@@@@ @@.........,,,,,,,,,@@ @@@@@@@@@@ ``` 用 IDA 做分析的話好像是要猜他ㄉ Flag 吧,但是我猜不到 RRRR 然後我就沒頭緒ㄌ ## Crypto ### ReSident evil villAge - [x] 成功解題 標準的 [Padding Oracle attack](https://zh.wikipedia.org/wiki/%E5%AF%86%E6%96%87%E5%A1%AB%E5%A1%9E%E6%94%BB%E5%87%BB) 。 ## Web ### HaaS - [x] 成功解題 - 題目網址 `http://quiz.ais3.org:7122/haas` 不能訪問,後來發現 `http://quiz.ais3.org:7122` 有一個 Form 。 - 試過 n 百種排列組合以後,我發現輸入 `127.0.0.1` 時,網站會提示我不要攻擊 Server 。 - 既然 `127.0.0.1` 不行,就試試 `localhost` 吧! - 後來發現使用 `localhost` 沒反應,我猜測後端有對 `server` 進行保護,所以改用 `localhOst` 就中了= = ![](https://i.imgur.com/Xu2sc0y.png) ```{"msg":"Failed","detail":{"text":"AIS3{V3rY_v3rY_V3ry_345Y_55rF}","expected":"4454","actual":200}}``` ### Copy and paste - [x] 成功解題 一開始我嘗試查看 source code 發現了一段程式碼: ``` const f14g = fetch("f14g.php").then((response) => response.text()); const FLAG = await f14g; ``` 打開瀏覽器訪問 `http://quiz.ais3.org:13377/f14g.php` 會拿到一段奇怪的文字: ``` 0hp3{r633Y63Y33636YY636Y3YEVVhVEVkVVs_E9Q4Q99QQ9QQ94JQ4499QQ9Q49Q4Q9Q499Q49Q99Q49Q4444QQQ44Qjy_vVXg} ``` 第一時間我是想到或許是對 ASCII 碼做 SHIFT ,結果當然不是 XD 後來跑去解其他題 (也沒解開: ) )才突然想到,我可以把網頁內容縮放阿! 然後就拿到 Flag ㄌ: ``` AIS3{Re33Ee3E33e3eEEe3eE3El11I1l1i11y_lo0O0oo00o00oOC0OOoo00o0Oo0O0o0Ooo0Oo0oo0Oo0OOOO000OO0ng_f1aG} ``` > 眼睛好痛 = = ### ⲩⲉⲧ ⲁⲛⲟⲧⲏⲉꞅ 𝓵ⲟ𝓰ⲓⲛ ⲣⲁ𝓰ⲉ - [ ] 成功解題 浪費一堆時間,但沒啥頭緒 = = Source code: ```python= from flask import Flask, request, make_response, redirect, session, render_template, send_file import os import json app = Flask(__name__) app.secret_key = os.urandom(32) FLAG = os.environ.get('FLAG', 'AIS3{TEST_FLAG}') users_db = { 'guest': 'guest', 'admin': os.environ.get('PASSWORD', 'S3CR3T_P455W0RD') } @app.route("/") def index(): def valid_user(user): return users_db.get(user['username']) == user['password'] if 'user_data' not in session: return render_template("login.html", message="Login Please :D") user = json.loads(session['user_data']) if valid_user(user): if user['showflag'] == True and user['username'] != 'guest': return FLAG else: return render_template("welcome.html", username=user['username']) return render_template("login.html", message="Verify Failed :(") @app.route("/login", methods=['POST']) def login(): data = '{"showflag": false, "username": "%s", "password": "%s"}' % ( request.form["username"], request.form['password'] ) session['user_data'] = data return redirect("/") @app.route("/logout") def logout(): session.clear() return redirect("/") @app.route("/sauce") def sauce(): return send_file(__file__, mimetype="text/plain") if __name__ == '__main__': app.run(threaded=True, debug=True) ``` ## PWN ### Writeme - [ ] 成功解題 這題提供的 .elf 是利用 Dynamic linking 的方式做連結時,其函式位址會在執行週期才確定。 ```c= #include <stdlib.h> #include <stdio.h> int main() { setvbuf(stdin, 0, 2, 0); setvbuf(stdout, 0, 2, 0); void *systemgot = 0x404028; void *scanfgot = 0x404040; //void *systemgot = (void *)((long long)(*(int *)(systemptr+2))+(long long)(systemptr+6)); *(long long *)systemgot = (long long)0x0; printf("Address: "); void *addr; long long v; scanf("%ld",&addr); printf("Value: "); scanf("%ld",&v); *(long long *)addr = (long long)v; *(long long *)scanfgot = (long long)0x0; printf("OK! Shell for you :)\n"); system("/bin/sh"); return 0; } ``` 主要就是指向 `systemgot` 的 address 被抹掉了,所以要想辦法接回來,我在這邊有嘗試輸入: ``` Address: 404028 -> 4210728 Value: 404088 -> 4210824 ``` 至於 `404088` 是利用 IDA 看 .got.plt 時發現的,不過好像是錯ㄉ,執行程式以後會成功印出 `OK! Shell for you :)` 但沒有任何反應。 接著,我又不死心的用 GDB 做動態分析才知道原來他要的可能是 `system` 的實際地址 (因為產生 SIGNAL 了),我真的是 PWN 菜雞,解不開 QwQ 這一題是除了 HaaS 以外花我最多時間的題目ㄌ,中間還看到大大們的閒聊,笑死 ![](https://i.imgur.com/dfO0g0U.png) 最後,雖然沒解出來,但還是學到蠻多新知的 (包括 lazy-binding 跟怎麼寫 PWN exploit 腳本之類ㄉ),賺。 ## Welcome ### Cat Slayer ᶠᵃᵏᵉ | Nekogoroshi - [x] 成功解題 這一題就是一道密碼鎖,直接暴力解開,耶 \歡呼/