nitic ctf 2 公式解説(nanigasi_san)
お疲れさまでした。nanigasi_san作問の問題のフラグと解説です。
僕は「初めてCTFに出る人」および「競プロから来た人」向けに作問しました。
ほかの人の作った問題の解説はここにあります
お布施
↓僕のBASEとかお菓子になります。↓
Kyash
解説
Excel(☆1)[Misc]
zipを展開するとBook1.xlsx
があります。
問題文に「どこかのセルにフラグが書いてあります」とあるので、それを探します。
想定解
Ctrl+F
で「nitic_ctf」で検索すると出ます。
nitic_ctf{plz_find_me}
image_conv(☆2)[Misc]
after_image.png
をみるとうっすらnitic_ctf{
, }
と書いてあるのが見えます。肝心のフラグの中身が薄すぎて見えないので、根性でコントラストを上げることで見えるようになります。温情でギリ肉眼でも見えるくらいになってるので、コントラストの上げ方がわからなかったら頑張ってください。
モニターの設定がFPS用とかになってるとマジではっきり見えちゃってたのでコンテスト中にちょっと見づらくしました。
想定解
from PIL import Image from PIL import ImageEnhance img1 = Image.open("image_conv/after_flag.png") i2 = ImageEnhance.Contrast(img1) img2 = i2.enhance(1000) img2.show()
nitic_ctf{high_contrast}
ord_xor(☆3)[Crypto]
xor(c, n)
はx=[0, n-1]の数をループしてord(c)にxorしていく関数です。
flagのi文字目はxor(flag[i], i)されていますが、xorの性質として二回同じ数でxorするともとに戻るので逆操作をすればよいです。
想定解
with open("./flag") as f: flag = f.read() def xor(c: str, n: int) -> str: temp = ord(c) if (n + 1) % 2 == 0: temp ^= n return chr(temp) dec_flag = "" for i in range(len(flag)): dec_flag += xor(flag[i], i) print(dec_flag)
nitic_ctf{ord_xor}
問題名をフラグにするな
tanitu_kanji(☆3)[Crypto]
変換先テーブルが二つ用意されており、あるFORMAT
に従ってフラグが変換されていきます。
復号処理自体は変換を逆にするだけなので、FORMATが分かれば復号できます。
FORMAT
の長さは10だということがわかっているので、210通りを全て全探索してフラグが出ます。この手法はbit全探索と呼ばれます。
想定解
alphabets = "abcdefghijklmnopqrstuvwxyz0123456789{}_" after1 = "fl38ztrx6q027k9e5su}dwp{o_bynhm14aicjgv" after2 = "rho5b3k17pi_eytm2f94ujxsdvgcwl{}a086znq" def deconv(s: str, table: str) -> str: res = "" for c in s: i = table.index(c) res += alphabets[i] return res for i in range(2**10): flag = "l0d0pipdave0dia244im6fsp8x" format = "" for j in range(10): format += str((i >> j) & 1) format = format[::-1] for f in format: if f == "1": flag = deconv(flag, after1) else: flag = deconv(flag, after2) if "nitic_ctf" in flag: print(flag)
nitic_ctf{bit_full_search}
解法をフラグにするな
web_meta(☆1)[Meta]
htmlをブラウザで開くとフラグが見当たりません。F12を押して開発者ツールを開くことでmetaタグ(表示に関係ない情報)が見れるようになり、そこにフラグが書かれています!
Atom結構いいですよ フラグはnitic_ctf{You_can_see_dev_too1!}
caesar_cipher(☆1)[Crypto]
アルファベットを後ろに三文字ずらすシーザー暗号なので、前に三文字動かすことで復号できます。
これは紙でも解けますね フラグはnitic_ctf{caesar}
CTFの話
道路さんが「今年はやらないんすか?」っていうのでノリで第二回が開催されました。今回はSatoooon君が作問に入ってくれたので色んな層が楽しめるCTFになったんじゃないでしょうか。
普通にCTFしてる人が増えたおかげで教育的な普通の問題が生えました。
— nanigasi_san (@nanigasi_3) September 5, 2021
前回はカナブンとドラゴンみたいな感じだったけど今回はカナブンと犬とライオンとドラゴン#nitic_ctf_2
Twitterでもはなしていましたが前回は難易度分布が終わっていましたからね。
とはいえ反省もあって、RevとかPwnの低難度が少ないこと、告知が開催二日前だったことなどがありますが、まぁ全体的にはいい感じになったと思います。
第三回をやる予定はないんですがどうせやると思います。俺のTwitterをフォローするのはアレなので、偶然告知が流れてくることを祈っていてください。
では~。