😎

CTF@CIT(2025-04-26)

に公開

Crypto

Rotten

ROT13で変換する。
CyberChefに打ち込めばOK。

Forensics

Brainrot Quiz!

pcapファイルが渡されるのでwiresharkで読む。
パケットの生データをバイト表記したときにbase64エンコードされたような文字列が見つかるのでこれをデコードする。

True CTF Love

メールファイルが渡される。DKIMのヘッダの中にBASE64でエンコードされた文字列が入っているので、これをデコードする。

Misc

Robots

CTFのサイトのrobots.txtを見に行くとフラグが置いてある。

Extremely Hard Challenge

問題文: The flag is very secure
フラグ: CIT{very secure}

ヒントがないということはヒントがなくても解けるということ。柔軟な発想を大事にしましょう...。

Calculator

White Space Steganographyと呼ばれるタイプのステガノグラフィ。
問題ファイルの後半に半角スペースとタブが大量に配置してあり、その中に情報が入っている。
dcodeにwhitespace languageの解読機があったのでそれを利用。
https://www.dcode.fr/whitespace-language
どうやらWhitespaceというプログラミング言語があるらしい...。

Select all squares that contain uhh...

難読化されたpowershellコードを実行させる偽ReCaptcaに似せた問題。
(本当は良くないけど)コードをあえて実行し、これによって自分のコンピュータ内に生成されたフラグファイルを見つけた。

Steganograpy

Blank Image

画像に対してzstegを使用するとフラグが出てくる。

b1: 1ビット単位で情報を取り出す
a: 出てきたビット列をASCIIでデコードする
lsb: Least Significant Bit(最下位Bit)を読む
xy: ピクセルの並び順をx→yの順に読んでいく

$ zsteg ./windows_download/image.png
b1,a,lsb,xy         .. text: "CIT{n1F0Rsm0Er40}"****

zsteg -aとすれば読んでいくときのビット数や使用するビットなどを網羅的に調べていける。

I AM Steve

画像に対してzstegを使用。
b1,a,lsb,xyの部分の出力をBASE64でデコードするとフラグの文字列が出てきた。

b1,rgb,lsb,xy       .. text: "VEhJU19pc19hX2NyYWZ0aW5nX3RhYmxl"

We lost the flag

PNGファイルが渡される。fileコマンドを使用するとdataと返ってくることからファイルが破損していると分かる。

これをhex editorで確認すると、ファイルの頭が次のようになっていることが分かる。
JFIFはJPEG File Iterchange Formatの略で、これがJPEGファイルであると考えられる。

00 c2 ba 60 46 49 46 (... JFIF)

ただし本来のJPEGファイルは先頭が次のようになるはずである。

ff d8 ff e0 46 49 46 (... JFIF)

そのためhex editorでこの部分を修正してやり、JPGファイルとして読めるようにしてやると画像としてフラグが出てくる。

Reverse Engineering

Read Only

ダウンロードしたファイルにstringsコマンドを使用したらフラグが見つかった。
多分正攻法ではない...。

Ask Nicely

ghidraを用いてデコンパイルを行った。
入力文字列が特定の内容であればフラグを出力するようになっているのを確認できたので、これを入力してフラグを得た。

bVar1 = std::operator==(local_68,
					  "pretty pretty pretty pretty pretty please with sprinkles and a cherry on top"
 );
if (bVar1) {
	pbVar2 = std::operator<<((basic_ostream *)std::cout,"Good job, I\'m so proud of you!");
	std::basic_ostream<>::operator<<((basic_ostream<> *)pbVar2,std::endl<>);
	std::__cxx11::basic_string<>::basic_string(local_48,local_68);
					/* try { // try from 00407e9b to 00407e9f has its CatchHandler @ 00407efd */
	give_flag(SUB81(local_48,0));
	std::__cxx11::basic_string<>::~basic_string(local_48);
}

Amount = 17: CIT{Y3p_vmz_n33_ROTT6N_MbOsmNY461DklsO29mxs}

OSINT

No Country for Old Keys

Anthony McConnollyさんのAPIキーを探す問題。
githubで彼の名前を探すとパブリックリポジトリが見つかる。
コミット履歴を確認すると過去に誤ってAPIキーを載せてしまい削除しているのが確認できる。

The Domain Always Resolves Twice

Anthony McConnollyさんのお気に入りのレジストラを探す問題。
彼のブログ記事を読めばIppSecというサイトが彼のお気に入りレジストラであるGoDaddyを使っているという記述あり。

Discussion