owned this note
owned this note
Published
Linked with GitHub
# NCtfU Official Writeup | HITCON-2020
###### tags: `HITCON` `nctfu`
[TOC]
## 0x0: 故事背景

<img src="https://i.imgur.com/FqtCyro.jpg" width=49%> <img src="https://i.imgur.com/IAfZUH9.jpg" width=49%>
## 0x1: Crypto
- 筆記本最後一頁,會找到一推看不懂的密文,以及一張 6 x 6 的 table。

- 稍微觀察一下,會發現這些數字都是介於 0 ~ 5 之間,因此推測應該是跟 row 和 column 的 index 有關。
- `"hao.kang."` 似乎是一部分解開的明文,或許可以從這邊推敲看看加密的邏輯。
- 假設每組數字代表的是 `(row)(col)`,那麼 `05 10 32` 就會得到 `x e 8`。
- 假設每組數字代表的是 `(col)(row)`,那麼對應下來則是 `s l z`。
- 全部轉成 ascii code,會得到:
```
"hao" -> 104, 97, 111
"xe8" -> 120, 101, 56 (X)
"slz" -> 115, 108, 122 (O)
```
- 觀察字母之間的間距,會發現 `"hao"` 平移 `+11` 後會變成 `"slz"`。
- 用 `"kang"` 驗證一下,會發現這個推論是對的:
```
"kang" -> 107, 97, 110, 103
"vlyr" -> 118, 108, 121, 114
```
- 打星星的部分似乎是重點,直接對應下來,會得到:
```
140.115.59.92.azce.8000
=> IP = 140.115.59.92
PORT = 8000
```
- 好像滿多人卡在這邊,因為中間夾了一串 `"azce"`,直接連會連不上。
> 這部分我們可能設計得不太好,因為凱撒加密預設是只處理英文的部分,不處理數字。因此,最後就變成了英文做 rotation 但數字不做,確實滿令人困惑的 :sweat_smile:
> 然後還有一個雷點,就是某人一開始寫明文訊息寫得很開心,一不小心就生出長度為 93 的密文了XDD 還好有學長們幫忙 debug :pray:
## 0x2: Web
- 發現了一個登入頁,但沒有帳密。

- 跑一下 dirsearch,就發現有 `robots.txt`。

- 訪問 `robots.txt` 後,就得到一行字:
```
Disallow: /53cR37
```
- 把 `53cR37` 載下來後,得到一組帳密 `artis / cut3`。

- 登入了以後,就可以看到聊天紀錄了。不過最後兩則訊息卻 `[已被刪除]`。

- 如果按右上角的藍色 Profile,會進到 "artis" 的個人頁面。
- 如果是點聊天室中 "小辣椒" 的名字,則會進到 "小辣椒" 的個人頁。


- 從上面可以發現,只有 `小辣椒` 是 Admin 帳戶類型。
- 如果用 `小辣椒` 的身份登入的話,好像就有機會看到被刪除的訊息了(?
- 看一下 HTML,會發現 LOG IN 按鈕是連到 `login.php`。

- 直接連 `login.php`,就得到 source code 了!:open_mouth:

- 稍微研究一下,會發現 `$sql` 那行有 injection 漏洞。
- 前提是不能撈太多,只能撈出一行來。
- 如果用 `小辣椒' -- `,那麼整句就會變成:
```sql
SELECT ... WHERE username='小辣椒' -- ' and password=''
```
- 這樣一來,就只會撈出一行來了。
> 這邊還有一個小雷點,就是 token 在還沒解開前好像就會跳出來XD 看來是測的不夠周全~

<br>
> 進階挑戰:使用 UNION 在網址列撈資料
> - 因為個人頁面的網址列是 `?name=artis`,因此或許會有 SQLI 漏洞 :thinking_face:
>
> - 使用 `artis' UNION SELECT 1,2,3,4,5,6 -- '` 可以得知 query 結果的寬度 = 6。
> 
>
> - 透過 INFORMATION_SCHEMA,可以得知訊息是 message 表當中的 msg 欄位。
> - 使用 `artis' UNION SELECT 1,2,3,4,5,msg FROM message -- '` 即可撈到資料。
> 
## 0x3: Pwn (Misc ?)
> [name=Yen]
* 接續上一關拿到的網址,進來會看到只有一個input

* 隨便輸入一點東西,會看到BOW的字樣,其實就是要玩家輸入BufferOverflow的垃圾padding

* 例如說,輸入60字會拿到**N**

* 最後全拿完會拿到**NCtfU**

* 輸入進去就可以到下一關了XD

## 0x4: Stego
> [name=Artis24106]
- 由上一關最後的網址 `https://drive.google.com/file/d/1OC5I9xM1KojHpYTuJKw-icUcFHL1p6UY/view` 可以得到圖片 `qrcode.png`

- 用手機掃描或是使用線上工具(如 `https://zxing.org/w/decode`)可以得到 qrcode 訊息 `There is something 'in' the picture. Hint1: strings`

- 提示1為 `strings`。它是一個指令,會把檔案中的 printable characters 印出來。
- 於是使用 `strings qrcode.png` 可以在最下面看到 `Hint2: zsteg`
```
...
go{^
VY-Z
@HXi
i+1U
bzEO
y`be
7``O
IEND
Hint2: zsteg
```
- 提示2為 `zsteg`。它是一個圖片隱寫檢測工具([連結](https://ctf-wiki.github.io/ctf-wiki/misc/picture/png-zh/)),可以找出由[LSB](https://ctf-wiki.github.io/ctf-wiki/misc/picture/png-zh/)隱寫在圖片內的資訊。
- 使用 `zsteg qrcode.png` 得到最終的網址

- 原來是一場生日派對啊!!

## 0xA: Scoreboard

