st98 の日記帳


[ctf] DoubleS1405 CTF の write-up

チーム Harekaze で DoubleS1405 CTF に参加しました。最終的にチームで 881 点を獲得し、順位は 9 位 (得点 130 チーム中) でした。うち、私は 6 問を解いて 400 点を入れました。

以下、解いた問題の write-up です。

[Misc 50] Instead of 5 billion won, I give you a cute handcuffs.

EXIF 付きの JPEG が渡されるので、撮影された場所の住所を答えろという問題でした。

私が問題を見た時点で @hiww さんが 238-1 Ui-dong, Gangbuk-gu, Seoul, South Korea という感じの場所であると特定されていました。

問題文には

(The correct answer is the address in Korea. Example: 대한민국 부산광역시 ~~구 ~~동 37-21)

とあります。Google 翻訳に投げてみるとこれは 大韓民国釜山広域市~~区~~洞37-21 であると分かります。

釜山広域市をソウル特別市 (서울특별시) に、○○区を江北区 (강북구) に、○○洞を牛耳洞 (우이동) に変えてフォーマットを合わせると正解になりました。

대한민국 서울특별시 강북구 우이동 238-1

今問題を確認したところ問題文に英語での例が記載されていたんですが、途中で修正されたんでしょうか。

[Crypto 50] Easy_Crypt

まず flag is になりそうな部分が zczk zg になっているためヴィジュネル暗号で暗号化されているとエスパーしました。

平文が the vigenere から始まるとすると鍵は onefourzerofive になります。これを使って復号するとフラグが得られました。

hello_vigenere

[Crypto 50] Crypto?

import re
s = open('Crypto.txt', 'r').read()
print ''.join(chr(int(n)) for n in re.findall(r'\[(\d+)\]', s))

[123] という感じで [] に囲まれている数字を集めて文字列にすると {R0+VGPIO_N0J_3DAKT_1I} という文字列が得られました。

これをシーザー暗号として右に 11 ずらすと c0+gratz_y0u_3olve_1t という文字列が得られました。

c0ngratz_y0u_3olve_1t

[Forensic 50] Cute

Matroska 形式の動画が与えられます。

VLC Player で再生してみると eh~!@#~!!#!@#!@!#!#@!#! という感じの字幕が表示されました。

mkvextract tracks file 2:subtitles.srt で字幕を抽出してみるとフラグが得られました。

v3r_cut3_p4Rr0t_12nt_!t?

[Forensic 100] AI Keyboard

USB キーボードでいろいろ打っている様子をキャプチャした pcap ファイルが与えられます。

HID Usage Tables を参考に 1 文字ずつ打っていた文字を調べるとフラグが得られました。

pl4y_th3_k3yb0ard

[Web 100] iterator

<?php
$directory = $_GET['dir'];
$cond = explode("=", urldecode($_SERVER['QUERY_STRING']));

if (!is_dir($cond[1])) echo 'folder does not exist.';
else {
    $directory = new DirectoryIterator($directory);
    foreach($directory as $file) {
	    echo '<!--';
        if (preg_match("/txt$/i", $file->getFilename())) echo $file->getFilename() . "<br>";
		echo '-->';
    }
}
?>

というコードの Web サービスが動いていました。

わざわざ $directory$cond を分けてチェックしているのが気になります。これは ?%3D.%3D&dir=. で回避ができました。

DirectoryIterator について調べてみると、PHP のマニュアルglob:// が使えると分かります。

あとは ?%3D.%3D&dir=glob://y0u-[n-s] ?%3D.%3D&dir=glob://y0u-[n-q] … という感じで人力で二分探索をしていくと y0u-solv3d*the*probl3m!/FLAG*e43f7b51696e3524063c54cb1f7fcdbc* というファイルがあると分かりました。

e43f7b51696e3524063c54cb1f7fcdbc
このエントリーをはてなブックマークに追加
st98.github.io / st98 の日記帳