# CTF writeup
- 姓名: 陳毅
[TOC]
## 忘記這是哪一類
### [祝賀] 新垣結衣新婚快樂 發錢
- [ ] 成功解題
> 其實也可以算是順利解開啦,但我那時候不相信 Flag 是中文就沒做嘗試了,白白丟失分數 QQ
把圖片解壓縮以後可以得到她老公的照片一張 `\|/`

然後我嘗試查看並修改 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` 就中了= =

```{"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 以外花我最多時間的題目ㄌ,中間還看到大大們的閒聊,笑死

最後,雖然沒解出來,但還是學到蠻多新知的 (包括 lazy-binding 跟怎麼寫 PWN exploit 腳本之類ㄉ),賺。
## Welcome
### Cat Slayer ᶠᵃᵏᵉ | Nekogoroshi
- [x] 成功解題
這一題就是一道密碼鎖,直接暴力解開,耶 \歡呼/