概要
先日行われた、setodaNoteCTFに参加してきました。
本記事は、その際のWriteUpとなります。
本CTFは、開催期間が他のCTFと比べて2週間と長く、(筆者が)初体験となるOSINTのCTFがあり、他の分野も初学者~上級者まで楽しめる(?)レベルであったり、一部の問題がストーリー仕立てになってたりして、とても楽しめました。
楽しすぎて寝る時間削りまくってたら怒られました
関係者の皆々様、ありがとうございました。
結果は180/592th, 2920points、残念ながらバッジは1つも取得出来ず・・・・
※各分野の問題を全問クリアするともらえる称号みたいなもの。なお、全バッチを入手すると全クリのバッチがもらえる。
解けた問題については自分の解答を、解けなかった問題に関しては自分なりの解答への道筋を記載しておきます。
環境
Windows + Kalilinux
プログラムはすべてPython3
解けた問題
Misc
welcome(20points)
これはチュートリアル用の設問です。本 CTF では Linux ターミナルが利用できます。以下の URL からログインし、ターミナル上に存在するファイル welcome.txt の内容を確認し、フラグを獲得してください。
https://ctf.setodanote.net/webshell
※ログインに必要なユーザ名とパスワードは、本 CTF にご登録いただいているものと同じです。
※利用の必要がある設問の説明文には上記のリンクが記載されています。
本CTFはLinuxターミナルが提供されているが、
CTFを取り組んだ時間帯からしばらくメンテしてたので、解くのが後回しに。
よくあるウェルカム問題。
指示の通り自ユーザーでログインして、直下にあるフラグを見るだけ。
flag{Enjoy_y0ur_time_here!}
morse_one(30points)
友人から「秘密のメッセージを送るね」とあるテキストファイルが送られてきました。
どうやらそのままでは読めないようです。
添付されたファイルを解析し、秘密のメッセージを見つけ出してください。
フラグは得られた文字列を flag{} で囲んで答えてください。
フラグに英字が含まれている場合はすべて大文字で答えてください。
例えば得られた文字列が Flag の場合は flag{FLAG} となります。
配布されたファイルは、以下のような内容でした。
DDDBSDDSBDDDSDBDSBBBSDBBDSDBDDSDSBDDB
3文字しか使用されておらず、ある程度の規則性がありそう。
問題のタイトルをヒントにモールス信号変換器にて復号した所、フラグを入手。(Sを区切り文字に設定。)
flag{VIBROPLEX}
Hash(50points)
ちくしょう、なんてことだ。
知り合いから預かっていたファイルをゴミ箱に放り込みやがった。
まだ中身の確認もしていなかったのにだ。
問い詰める必要はあるだろうが、いまはとにかくファイルを取り戻すことが先決だ。
優先順位を間違えてはいけない。
とくにかくゴミ箱からファイルを取り戻さなくては。
・・・なんだぁこいつは、ファイル名が書き換えられてしまっているじゃあないか。
なんて野郎だクソっこれじゃほかのファイルと見分けがつかないじゃあないか。
なんて日なんだ今日はよぉ。
しかしまったくもって腹立たしいことは確かだが、まだ焦るのは早すぎるよなぁ。
ぜんぜん焦る必要はねぇ。
なぜならこっちにはファイルと共に受け取ったこのハッシュ値があるんだからよぉ・・・
添付ファイルを解析し、以下のハッシュ値を持つファイル見つけ出してください。
フラグはそのファイルに記載されている文字列を組み合わせたものとなります。
aff02d6ad353ebf547f3b1f8ecd21efd7931e356f3930ab5ee502a391c5802d7
8428f87e4dbbf1e95dba566b2095d989f5068a5465ebce96dcdf0b487edb8ecb
e82f6ff15ddc9d67fc28c4b2c575adf7252d6e829af55c2b7ac1615b304d8962
添付ファイルを確認すると、テキストファイルが100個ありました。
問題文に記載されているハッシュから、sha256が使われてそう。
grepしても良かったけど、ファイルハッシュ値オンラインチェッカーにて、ファイルを一気にチェックしました。
後はファイルのハッシュ値が一致するそれぞれの内容を繋げて、フラグを入手。
flag{hardest_logic_puzzle}
F(80points)
友人のプログラマーからあるテキストデータを受け取りました。
中身はあるプログラミング言語で書かれたプログラムだというのですが、、、
以下のテキストデータを解析し、フラグを得てください。
+++++++[->++++++++++>+++++++++++>+++++++++>++++++++++<<<<]>.>-.>++.>+.>++++++++[>++++<-]>.>+++++[->+++++++++++++++++++++>+++++++++++++++++++++++<<]>.>.>++++++++[>++++<-]>.>++++++++++[->++++++++++>++++++++++>++++++++++>++++++++++>++++++++++++<<<<<]>++.>++++++++.>---.>+++.>+++.>++++++++[>++++++++<-]>++++.>+++++++++++[>++++++++++>++++++++++<<-]>+.>.>++++[>++++++++++<-]>-.>+++[->+++++[->++++++++<]<]>>----.>++++++++++[->++++++++++>+++++++++>++++++++++++>++++++++++>+++++++++<<<<<]>-----.>-----.>-----.>+.>+++++.>++++++++++++++++++++[>++++++>+++++>+++++>+++++>+++>++<<<<<<-]>----.>++++.>+.>-----.>++++++++++.>+++++.>++++++++++[->+++++++++>+++++++++++>+++++++++++>++++++++++<<<<]>---.>+.>++++.>.>+++[->+++++++++++<]>..>+++++[->+++++[->+++++<]<]>>.
ご存じ、brainF〇ckのご登場。
BrainFuckインタープリタ:いで庵にて実行。
実行結果は以下の通りで、そのままフラグを入手。
FLAG is flag{Don't_Use_the_F-Word!!}
magic_number(80points)
添付されたファイルから以下が示す3つのファイルを探してください。
[89 50 4e 47]
[52 61 72 21]
[ff d8 ff e0]
フラグは該当するファイル名を以下の順番にアンダースコアでつないで回答してください。
flag{[89 50 4e 47]_[52 61 72 21]_[ff d8 ff e0]}
例えばファイル名がそれぞれ以下の場合は flag{aaa_bbb_ccc} と答えてください。
[89 50 4e 47] = aaa.txt
[52 61 72 21] = bbb.exe
[ff d8 ff e0] = ccc.zip
配布された圧縮ファイルの中には、色んな拡張子のファイルが1つずつ配置されてる。
題意より、単純にマジックナンバーの拡張子のファイルを探すだけ。
問題分の各マジックナンバーは以下の通り。
[89 50 4e 47] → PNG
[52 61 72 21] → RAR
[ff d8 ff e0] → JPEG
なので、対応するファイル名を繋いでフラグを入手。
flag{post_rar_light}
Nothing(120points)
あなたは友人のプログラマーからあるテキストファイルを渡されました。
中身を確認しますが画面には何も表示されません。
何も書かれていないのか、いや、よく見ると、、、
添付されたファイルを解析してフラグを得てください。
配布されたファイルの中身を見ると、改行とスペースのみで構成されている。
BrainF〇ckに続き、難解言語のWhiteSpaceで書かれている模様。
Whitespace – Try It Onlineにて実行した結果から、フラグを入手。
FLAG is flag{And_Then_There_Were_None}
Redacted(150points)
あなたの友人のジャーナリストは極秘ファイルの入手に成功しました。
ですが重要な部分が黒塗りにされてしまっているようです。
このままでは真実が闇に葬り去られてしまいます。
あなたは極秘ファイルの解析を依頼されました。
添付されたファイルを解析し、真実を明らかにしてください。
配布ファイル確認するとPDFファイルがありました。とりあえずAdobe Acrobat Readerで開くと、フラグのありそうな箇所は黒塗りにされていました。PDFの黒塗りを除去するツールが必要かと思いましたが、とりあえずでLibreOfficeで開いて黒塗りを動かせないか試したら正解でした。
flag{weather_balloon}
Network
Host(30points)
あなたはある通信を保存したファイルを受け取りました。
添付されたファイルを解析し、通信先の Web サーバのホスト名を特定してください。
フラグはホスト名をフラグ形式で答えてください。
例えばホスト名が host.example.com であった場合、フラグは flag{host.example.com} となります。
コピペをミスしまくって、正答率が下がる原因となった問題。
配布されたpcapファイルをWiresharkで開いたら、http通信が1つだけ。
この通信のHTTPリクエストヘッダーのHostフィールドからホスト名をフラグとして送信。
flag{ctf.setodanote.net}
tkys_never_die(50points)
うまく爆発を避けれられているといいが。
爆発音とともに通信が途切れる間際、後輩からデータが送られてきました。
ターゲットが重要なファイルにアクセスしたことを示す証拠だと言い残して。
後輩のためにもデータを解析し、重要なファイルの内容を特定してください。
添付されたファイルを解析し、フラグを得てください。
配布されたpcapをWiresharkで見てみると、No.18辺りでHTTP通信しているのを発見。
HTTP Streamから、flag.pngを受信しているHTTP通信だと判明。
WiresharkのFile > Export Objects > HTTP
からファイルをエクスポートすると、flag.pngとflag.htmlにFLAGが記載されていました。
flag{a_treasure_trove}
echo_request(120points)
組織内の通信を監視している部署から不審な通信データがあるので解析をしてほしいと依頼がありました。
通信自体は許可されたプロトコルが使用されているようですが、、、
添付されたファイルを解析し、フラグを入手してください。
配布されたpcapファイルをWiresharkで開いて確認すると、ICMPのping送信が目立ちました。
問題のタイトルにもあるので、疑って見てみると、データ部のNo.29~No.54に1文字ずつフラグがあるのを目視で確認できました。
flag{ICMP_Tunneling_T1095}
Web
Body(30points)
作成中のサイトに機密情報が含まれてしまっているようです。
サイトにアクセスして機密情報を見つけ出してください。
以下のサイトにアクセスして隠されたフラグを見つけてください。
https://ctf.setodanote.net/web001/
問題文に記載されているサイトのHTMLコードの中に、コメントアウトされているフラグを発見。
<!-- *** flag{Section_9} *** -->
Header(50points)
作成中のサイトを管理しているサーバに問題があり、機密情報が漏洩しているようです。
サイトにアクセスして機密情報を特定してください。
以下のサイトにアクセスして隠されたフラグを見つけてください。
https://ctf.setodanote.net/web002/
問題文章のサイトにアクセスしてHederを確認したら、フラグがありました。
Chromeの開発者ツール:F12 > Network > HeaderやBurpで確認できます。
x-setodanotectf-flag: flag{Just_a_whisper}
puni_puni(80points)
近所の子供から「ぷにぷにこーどあげるね」と1枚の紙を手渡されました。
見ると子供の字とは思えない正確な書体で英数字がびっしりと書き込まれています。
これはいったい。そう聞こうとしましたが、
紙に意識を取られた一瞬のうちにその子供はいなくなっていました。
紙に書かれた文字列を解析し、フラグを入手してください。
フラグは得られた文字列を flag{} で囲んで答えてください。
例えば flag が得られた場合は flag{flag} と入力します。
xn--q6jaaaaaa08db0x8nc9t1b8fsviei84atb4i0lc
xn--q6jaaaaa03dpd4mb3jc5rpa0g9jpk07acadc.
xn--q6jylla3va3j6c8138a8eptvb303cxv4ft3o4ue63a
xn--v8ja6aj2a3cri3ag4a2r6cx2a1rkk1272c7j4ajd4bmf0kjhg6rb.
xn--q6j6gav1a0b2e1bh1ac2cl29ad7728kdjen6cz80dju6bqexchl9gel8b.
xn--
をキーワードにググってみると、Punycodeなるものに行きついた。
日本語JPドメイン名のPunycode変換・逆変換や、日本語ドメイン変換(Punycode変換) / IDNドメインのエンコード・デコード | ラッコツールズ🔧で変換してみると・・・・
フラグは、さん、さん、ピー、ユー、エヌ、ワイ、
シー、オー、ディー、イー、よん、よん、です
カタカナ表記は半角英小文字に、
ひらがな表記は半角数字にしたものがフラグです
なお、読点は区切り文字なので取り除いてください
となったので、指示にしたがってフラグを入力。
というか何者だよこの近所の子供・・・・・レベルたっけぇ子供やな
flag{33punycode44}
tkys_royale(120points)
んー、このサイトには重大な脆弱性があります。
そう切り出してきた相手の姿にあなたは言葉が出ません。
それは音信不通となっていた後輩の生き写し。
聞きたいことが山ほどありますが、まずはサイトの脆弱性を修正しなければなりません。
サイトを解析し、脆弱性を特定してください。
以下のサイトにアクセスしてフラグを得てください。
https://ctf.setodanote.net/web005/
問題文のサイトにアクセスすると、ログインフォームだけのあるページが表示される。
わざと適当なID,Passでログインを失敗させてみると、SQLエラーが画面に表示されてる。
しかも、親切にもSQL文も表示されてる。
とりあえず定番のSQLiの' OR 1=1#
を入力してみると、フラグが入手できました。
flag{SQLi_with_b1rds_in_a_b34utiful_landscape}
Mx.Flag(150points)
旗から手紙が届きました。
親愛なる貴方へ
こうして貴方に手紙を送るのは初めてですね。
実はとてもうまく隠れることができたので、嬉しくなりこのような手紙を送ることにしました。
どうか私を見つけてくれますか?
旗
以下のサイトにアクセスしてフラグを得てください。
https://ctf.setodanote.net/web007/
Burpで問題文のサイトの通信を確認したら、https://ctf.setodanote.net/web007/images/favicon.png
のレスポンスにコメントアウトしてありました。
// flag{Mr_Flag_hiding_in_the_favicon}
OSINT
tkys_with_love(30points)
だいぶ元気なようだ。
長期休暇中の後輩からメッセージが届きました。
「どこにいると思います?コールサイン C6DF6 の上ですよ!!」
どうやら何か乗り物に乗っているようです。後輩が何に乗っているのか特定してください。
フラグは後輩がいるという乗り物の正式名称を flag{} で囲んで答えてください。
名称に空白が含まれている場合はアンダースコアでつないで回答してください。
例えば This is a FLAG が名称である場合は flag{This_is_a_FLAG} のように答えてください。
問題文中のコールサイン C6DF6
でググってみるとシンフォニーオブザシーズ / Symphony of the Seas - idyllicoceanを発見。どうやら、Symphony of the Seasが船名のようなのでフラグとして提出。
flag{Symphony_of_the_Seas}
Dorks(50points)
あなたは組織が所有するドメインに関係するサイトの中で login.php が不用意に公開されていないかを Google を使って確認するように依頼を受けました。login.php が利用されているかどうかは、ある5文字の検索演算子をひとつ使えば調査することができそうです。
Google で login.php を URL に含むページを検索するための検索語句を検索演算子を含めてすべて小文字 でフラグ形式にして答えてください。
例えばファイルタイプを限定する filetype の検索演算子で pdf を検索するための検索語句を答える場合は flag{filetype:pdf} となります。
知識問題。
Google Dorksのinurlです。BugHuntの下調べとかに使う知識だから知ってた。
ちなみにDorks結果はこちら
flag{inurl:login.php}
filters_op(50points)
Twitter アカウント @cas_nisc が2017年5月15日にツイートした注意喚起に付与されている英字のハッシュタグをフラグ形式で答えてください。
例えば付与されていたのが「#HashTag」であればフラグは flag{#HashTag} となります。
Twitterの検索機能に関する問題。
特定ユーザーで検索するfrom
、特定日以降の期間を特定してツイートを検索'since'、特定日以前の期間を特定してツイートを検索 util
を組み合わせて、from:cas_nisc since:2017-5-14 until:2017-5-16
で検索してヒットした対象のハッシュタグは#WannaCrypt
。
よって、フラグは以下の通り。
flag{#WannaCrypt}
MAC(50points)
友人が簡単な暗号を作ったから意見を聞かせてほしいと言ってきました。
公開情報に基づき解くことができるといいます。
あなたは暗号文を解いてみることにしました。
00:03:93 = A
00:01:A9 = B
04:2A:E2 = C
上記の通り変換されるとき、以下の文字列はどうなるか。
flag{2C:C2:60_FC:EC:DA_00:02:B3_AC:44:F2_FC:4E:A4}
暗号文を解きフラグを得てください。
題意より、MACアドレス検索をするのかな?と見当をつけて、MACアドレス検索でA,B,Cについて検索してみると、見事に頭文字と一致していました。
よって、暗号文についてもそれぞれのMACアドレスで検索をかけて対応させると、以下の通りとなりました。
flag{O_U_I_Y_A}
Ropeway(120points)
休暇中の同僚から写真が送られてきました。
あるロープウェイから撮られた写真とのこと。
そしてもし写真から撮影場所が特定できたらいい地酒をお土産に買ってくれると言います。
あなたは仕掛中の仕事を脇に置き、写真の解析を始めました。
添付されたファイルを解析し、ロープウェイ名称を英小文字のフラグ形式で答えてください。
例えばロープウェイの名前が「瀬戸田ロープウェイ」の場合、フラグは flag{setoda} となります。
配布された画像でGoogle画像検索をしてみると、浜名湖オルゴールミュージアムの「かんざんじロープウェイ大草山」に行きつきました。
flag{kanzanji}
Crypto
base64(50points)
組織に入ったばかりの新人からチャットが来ました。
ですが普通の文字列ではなく暗号文になっているようです。どうやら新人は暇なようです。
以下の文字列を解読して、フラグを獲得してください。
ZmxhZ3tJdCdzX2NhbGxlZF9iYXNlNjQhfQ==
base64でデコードするだけ。
デコードはCyberCheffくんにお願いしました。
いや、新人が暇でも注意するとかさぁ・・・・
flag{It's_called_base64!}
ROT13(50points)
組織でも指折りの経験豊富なベテランからチャットが来ました。
ですが普通の文字列ではなく暗号文になっているようです。
どうやらこのベテランも暇なようです。
以下の文字列を解読して、フラグを獲得してください。
synt{Rira_lbh_Oehghf?}
これも、ROT13でデコードするだけ。
ベテランこそ遊んでないでさぁ・・・・
flag{Even_you_Brutus?}
pui_pui(80points)
組織の局長からチャットが来ました。
ですが普通の文字列ではなく暗号文になっているようです。
どうやらこの組織には暇人しかいないようです。
以下の文字列を変換して、フラグを獲得してください。
\x41\x3a\x44\x6f\x20\x79\x6f\x75\x20\x6b\x6e\x6f\x77\x20\x4d\x6f\x6c\x63\x61\x72\x3f\x0a\x0a\x42\x3a\x4f\x66\x20\x63\x6f\x75\x72\x73\x65\x21\x20\x49\x20\x6c\x6f\x76\x65\x20\x74\x68\x65\x20\x73\x63\x65\x6e\x65\x20\x77\x68\x65\x72\x65\x20\x68\x65\x20\x73\x69\x6e\x6b\x73\x20\x69\x6e\x74\x6f\x20\x74\x68\x65\x20\x62\x6c\x61\x73\x74\x20\x66\x75\x72\x6e\x61\x63\x65\x20\x77\x68\x69\x6c\x65\x20\x67\x69\x76\x69\x6e\x67\x20\x74\x68\x65\x20\x74\x68\x75\x6d\x62\x73\x20\x75\x70\x2e\x0a\x0a\x41\x3a\x2e\x2e\x2e\x20\x57\x68\x61\x74\x3f\x0a\x0a\x42\x3a\x62\x74\x77\x2c\x20\x74\x68\x65\x20\x66\x6c\x61\x67\x20\x69\x73\x20\x66\x6c\x61\x67\x7b\x48\x61\x76\x65\x5f\x79\x6f\x75\x5f\x65\x76\x65\x72\x5f\x68\x65\x61\x72\x64\x5f\x6f\x66\x5f\x48\x65\x78\x64\x75\x6d\x70\x3f\x7d\x2e\x0a
とりあえず、このままじゃ見え辛いのでバイナリファイル化。
echo -en "\x41\x3a\x44\x6f\x20\x79\x6f\x75\x20\x6b\x6e\x6f\x77\x20\x4d\x6f\x6c\x63\x61\x72\x3f\x0a\x0a\x42\x3a\x4f\x66\x20\x63\x6f\x75\x72\x73\x65\x21\x20\x49\x20\x6c\x6f\x76\x65\x20\x74\x68\x65\x20\x73\x63\x65\x6e\x65\x20\x77\x68\x65\x72\x65\x20\x68\x65\x20\x73\x69\x6e\x6b\x73\x20\x69\x6e\x74\x6f\x20\x74\x68\x65\x20\x62\x6c\x61\x73\x74\x20\x66\x75\x72\x6e\x61\x63\x65\x20\x77\x68\x69\x6c\x65\x20\x67\x69\x76\x69\x6e\x67\x20\x74\x68\x65\x20\x74\x68\x75\x6d\x62\x73\x20\x75\x70\x2e\x0a\x0a\x41\x3a\x2e\x2e\x2e\x20\x57\x68\x61\x74\x3f\x0a\x0a\x42\x3a\x62\x74\x77\x2c\x20\x74\x68\x65\x20\x66\x6c\x61\x67\x20\x69\x73\x20\x66\x6c\x61\x67\x7b\x48\x61\x76\x65\x5f\x79\x6f\x75\x5f\x65\x76\x65\x72\x5f\x68\x65\x61\x72\x64\x5f\x6f\x66\x5f\x48\x65\x78\x64\x75\x6d\x70\x3f\x7d\x2e\x0a" > fuga.bin
xxd -g1 fuga.bin
バイナリファイルの内容を見てみると、ASCIIでフラグが書いてある。
00000000: 41 3a 44 6f 20 79 6f 75 20 6b 6e 6f 77 20 4d 6f A:Do you know Mo
00000010: 6c 63 61 72 3f 0a 0a 42 3a 4f 66 20 63 6f 75 72 lcar?..B:Of cour
00000020: 73 65 21 20 49 20 6c 6f 76 65 20 74 68 65 20 73 se! I love the s
00000030: 63 65 6e 65 20 77 68 65 72 65 20 68 65 20 73 69 cene where he si
00000040: 6e 6b 73 20 69 6e 74 6f 20 74 68 65 20 62 6c 61 nks into the bla
00000050: 73 74 20 66 75 72 6e 61 63 65 20 77 68 69 6c 65 st furnace while
00000060: 20 67 69 76 69 6e 67 20 74 68 65 20 74 68 75 6d giving the thum
00000070: 62 73 20 75 70 2e 0a 0a 41 3a 2e 2e 2e 20 57 68 bs up...A:... Wh
00000080: 61 74 3f 0a 0a 42 3a 62 74 77 2c 20 74 68 65 20 at?..B:btw, the
00000090: 66 6c 61 67 20 69 73 20 66 6c 61 67 7b 48 61 76 flag is flag{Hav
000000a0: 65 5f 79 6f 75 5f 65 76 65 72 5f 68 65 61 72 64 e_you_ever_heard
000000b0: 5f 6f 66 5f 48 65 78 64 75 6d 70 3f 7d 2e 0a _of_Hexdump?}..
モルカーの話してるのに、シュワちゃんの話してるのジワる。
flag{Have_you_ever_heard_of_Hexdump?}
vul_rsa_01(200points)
あなたは組織の定期研修に参加しています。
教官から RSA 暗号の禁止事項くらいは覚えておくようにと課題が出題されました。
どうやら暗号文 c を解くことができればそれだけ早く帰れるようです。
以下の RSA 暗号を解読してフラグを入手してください。
c: 39119617768257067256541748412833564043113729163757164299687579984124653789492591457335
n: 13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257
e: 65537
問題文のnの桁数が89桁しかない。
factordb.comを使えば、一瞬で答えを返してくれます。
結果は、p:3058517013146002381763962882964790715736519
,q:4372642466716249946441875327733923056149624303
となりました。
必要な情報は揃ってるので、あとは復号するだけ。
from Crypto.Util.number import *
c=39119617768257067256541748412833564043113729163757164299687579984124653789492591457335
n=13373801376856352919495636794117610920860037770702465464324474778341963699665011787021257
e= 65537
p=3058517013146002381763962882964790715736519
q=4372642466716249946441875327733923056149624303
# n = p * q
phi = (p-1) * (q-1)
d = inverse(e,phi)
print(long_to_bytes(pow(c,d,n)).decode())
flag{weak_rsa_can_be_decrypted!}
vul_rsa_02(250points)
あなたは引き続き組織の定期研修に参加しています。
教官は昨日と同じ人物です。
「早く帰れると言ったな。あれは嘘だ」昨日の信じられない光景が脳裏に蘇ります。
RSA 暗号の禁止事項くらいは覚えておくようにと再び RSA 暗号の課題が出題されました。
もはや誰も信じていませんがどうやら暗号文 c を解くことができればそれだけ早く帰れるようです。
以下の RSA 暗号を解読してフラグを入手してください。
c: 227982950403746746755552239763357058548502617805036635512868420433061892121830106966643649614593055827188324989309580260616202575703840597661315505385258421941843741681
n: 314346410651148884346780415550080886403387714336281086088147022485674797846237037974025946383115524274834695323732173639559408484919557273975110018517586435379414584423
e: 66936921908603214280018123951718024245768729741801173248810116559480507532472797061229726239246069153844944427944092809221289396952390359710880636835981794334459051137
与えられたnは制限時間中に素因数分解ができなさそう。
しかし、よく見てみると、与えられたeの値がものすごく大きい事が分かる。(通常は65537を使う)
つまり、相対的に秘密鍵dの値がべらぼうに小さい事を意味する。
よって、Wiener's Attackを使い、公開鍵からdを復元できる。
便利なツールがありました。GitHub - orisano/owiener: A Python3 implementation of the Wiener attack on RSA
こちらを使わせていただきました。
実行し、フラグが入手できました。
flag{197_Michael_J_Wiener_673}
Rev
Helloworld(50points)
気が付くと椅子に座っていた。簡単なテストから始めよう。
ガラスを隔てて真正面に白衣の女が立っている。
君が優秀であることを示してくれ。
声は天井のスピーカーから聞こえてくるようだ。
心配はいらない。そばにある端末が起動する。どちらにしてもすぐに済む。
添付されたファイルを解析してフラグを得てください。
ファイルは「infected」というパスワード付き ZIP になっています。
配布ファイルをGhidraくんに渡してコードを見てみると、簡素でシンプルなコードだっため、引数にflag
を渡すだけだとすぐに分かりました。
flag{free_fair_and_secure_cyberspace}
ELF(80points)
監獄というより研究室のような施設だった。
見る角度が大切なんだ。ガラスで隔てたられた部屋を白衣の男が歩いている。
すべてを疑ってみることから始める。
そばにある端末の電源が入る。
手を動かして検証するというのは実に大事なことだ。
添付されたファイルを解析してフラグを入手してください。
配布されたファイルをfile
コマンドで表層解析してみると、このファイルは「データ」らしい。
それにしては、実行ファイルのような感じのファイルだな・・・・
とりあえず、ファイルのマジックナンバーをELFの7F 45 4C 46
に書き換えて実行してみたら、フラグを吐き出してくれました。
バイオハザードでも始まるのかしら・・・?
flag{run_makiba}
Passcode(120points)
その部屋はまぶしいほどの明かりで照らされていた。ここからが本番だ。
白衣の人物が書類に目を落としながらつぶやくように話している。
結果がすべてという訳ではないが。そばにある端末が起動する。いい結果を期待している。
添付されたファイルを解析してフラグを得てください。
Ghidra様の力を借りまくりました。
Ghidra初心者&リバースは未熟で右も左も分からないため、WriteUp書くのが難しいですが・・・
とりあえず、通常動作させた際に標準出力に出てきた文字列を16進数表示で、Ghidraで検索。
↓
ヒットした辺りを中心に、Graph Viewから処理を追った
という流れで解析した所、入力内容と20150109
を比較している事が分かりました。
入力すると、フラグを吐き出してくれました。
Flag is : flag{20150109}
Forensics
paint_flag(50points)
要調査対象者の端末からあるファイルを押収することに成功しました。
どうやら外部の協力者に機密データを送ろうとしたようです。
組織内の監視網をかいくぐるため
、一見すると機密データが含まれていなかのように加工がされているようです。
ファイルを解析して機密データを取得してください。
添付されたファイルを解析し、フラグを入手してください。
とりあえず、配布されたファイルを見てみると、docxファイルの模様。
しかし、貼り付けられている画像でフラグの書いてある画像がなんかぶり潰されてる。
docxファイルの実態は、圧縮されたファイルであるので、
とりあえず解凍してみる。
paint_flag\word\media
にこのファイルの画像が配置されており、配置されている画像の中にフラグを発見。
flag{What_m4tters_is_inside;)}
Deletedfile(80points)
そのファイルを削除した瞬間にそれが誤りであることをあなたは悟ります。
どうやら重要なファイルが削除されてしまったようです。
あなたはディスクのイメージファイルの入手に成功しました。
削除されてしまったファイルを復元し、窮地を脱してください。
添付されたファイルを解析し、フラグを得てください。
配布されたファイルをマウントしようとしたけど、壊れてるっぽいのでforemostで復元。
復元したファイルに対してgrepをしたけど、文字列としてflagはヒットせず。
jpgファイルでフラグの画像を発見。
一緒に、「I know that I know nothing.」というカッコいい言葉が書かれた画像も復元されてました。BLEACHのポエムでありそう。
flag{nosce_te_ipsum}
browser_db(100points)
調査対象者のパソコンから Web ブラウザの情報を取得しました。
ファイルを解析して調査対象者が怪しい行動をしていないか調査するのが今回のあなたの仕事です。
添付されたファイルを解析し、フラグを得てください。
kali linuxのSQLiteブラウザじゃフォーマットエラーで見れないため、Google Chromeの拡張機能である「SQLiteビューア」を使いました。
moz_plase
テーブルを見てみると、duckduckgoブラウザでフラグ名で検索している履歴を発見。
https://duckduckgo.com/?q=flag%7Bgoosegoosego%7D&t=ffab&ia=images
よってフラグは、以下の通り。
flag{goosegoosego}
Programing
終了数十分前になってから解き始めようとしないでもろて。
ZZZIPPP(80point)
あなたはあるファイルの解析作業を依頼されました。
何重にも入れ子になった箱のようなファイルのようで、
その中に組織にとって重要な機密情報が入っているようです。
添付されたファイルを解析してフラグを入手してください。
配布された圧縮ファイルは、なんと1000重に圧縮されたファイルでした。
圧縮ファイル自体は特殊ではないため、再帰的に解凍していくコードを組みました。
# -*- coding: utf-8 -*-
import os
import sys
import zipfile
import glob
#### How to use it ###
#
# Specify the path of the directory
# where the compressed file is located as the first argument and execute.
#
####
def unzip(filename):
with zipfile.ZipFile(filename, "r") as zf:
zf.extractall(path=os.path.dirname(filename))
delete_zip(filename)
def delete_zip(zip_file):
os.remove(zip_file)
def walk_in_dir(dir_path):
for f in glob.glob(os.path.join(dir_path, "**/*.zip"), recursive=True):
unzip(f)
for dirname in (d for d in os.listdir(dir_path)):
if os.path.isdir(os.path.join(dir_path, dirname)) or zipfile.is_zipfile(os.path.join(dir_path, dirname)):
walk_in_dir(os.path.join(dir_path))
if __name__ == "__main__":
args = sys.argv
try:
if(os.path.isdir(args[1])):
print("debu11:os.path.isdir(args[1]) = ", os.path.isdir(args[1]))
walk_in_dir(args[1])
else:
unzip(os.path.join(args[1]))
name, _ = os.path.splitext(args[1])
# If there is still a folder
# with the same name as the original compressed file
if (os.path.isdir(name)):
walk_in_dir(name)
except IndexError:
print('IndexError: Usage "python %s ZIPFILE_NAME" or "python %s DIR_NAME"' % (args[0], args[0]))
except IOError:
print('IOError: Couldn\'t open "%s"' % args[1])
特に問題なくフラグを吐き出してくれました。
flag{loop-zip-1989-zip-loop}
echo_me(120points)
山登りが趣味だという同僚が疲れた様子で話しかけてきます。
山でヤッホーと声を出せば、いつでもヤッホーと返ってくる。
そんなあたりまえを支えるやまびこさんの気持ちって、どんな感じなんでしょうね。
その眼には若干の狂気が宿っているようにも思えました。
あなたは同僚を狂気から救うため、解析作業を手伝うことにしました。
以下にアクセスしてフラグを得てください。
nc 10.1.1.10 12020
この設問では Linux ターミナルを使用します。
https://ctf.setodanote.net/webshell/
上記に接続すると、echo me!
のあとに数字の文字列が続く。
その後、入力から一致した文字列を渡すと、次の文字列が渡される模様。
ただし、どうやらかなり制限時間が短いので、人間の手では不可能。
==========
echo me: 34923214
==========
34923214
Correct!
(省略)
==========
echo me: 68792799
==========
6879299
Incorrect! Nice try!
以下、上記を満たすプログラムを記載。
import socket
import re
import sys
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('10.1.1.10', 12020))
while True:
receivedata = s.recv(1024).decode('utf-8')
splitreceivedata = receivedata.split("\n")
result = re.sub(r"\D", "", receivedata)
senddata = str(result)
if senddata.isdecimal():
print("[+]senddata=",senddata)
s.sendall((senddata+"\n").encode("utf-8"))
if receivedata.find('flag')!=-1:
print("[---]END[---]")
print("Flag is ", receivedata)
break
上記プログラムを実行することで、無事フラグを獲得。
[+]senddata= 27836014
[+]senddata= 16740921
[+]senddata= 16836156
[+]senddata= 17086824
[+]senddata= 17760112
[---]END[---]
Flag is Correct!
flag{Hellow_yamabiko_Yoo-hoo!}
EZZZIPPP(150points)
あなたは再びあるファイルの解析作業を依頼されました。
何重にも入れ子になった箱のようなファイルですが、今度は鍵までかかっているようです。
ファイルを解析し中に封じ込められている機密情報を取得してください。
ファイルを解析してフラグを入手してください。
配布されたファイルを試しに解凍してみると、1問目と同じように多重に圧縮されている。
ただし、pass.txtが追加で解凍されており、そのファイルの中の文字列を次の階層のzipにパスワードとして渡すことで、さらに解凍できる・・・・
という構造になっていると推察できる。
# -*- coding: utf-8 -*-
import os
import sys
import zipfile
import glob
#### How to use it ###
#
# Specify the path of the directory
# where the compressed file is located as the first argument and execute.
#
####
def unzip(filename):
dir_path = os.path.dirname(filename)
lines = ""
with open(os.path.join(dir_path, "pass.txt"), 'r') as f:
lines = f.readlines()
with zipfile.ZipFile(filename, "r") as zf:
zf.extractall(path=dir_name, pwd=pwd)
delete_zip(filename)
def delete_zip(zip_file):
os.remove(zip_file)
def walk_in_dir(dir_path):
for f in glob.glob(os.path.join(dir_path, "**/*.zip"), recursive=True):
unzip(f)
for dirname in (d for d in os.listdir(dir_path)):
if os.path.isdir(os.path.join(dir_path, dirname)) or zipfile.is_zipfile(os.path.join(dir_path, dirname)):
walk_in_dir(os.path.join(dir_path))
if __name__ == "__main__":
args = sys.argv
try:
if(os.path.isdir(args[1])):
print("debu11:os.path.isdir(args[1]) = ", os.path.isdir(args[1]))
walk_in_dir(args[1])
else:
unzip(os.path.join(args[1]))
name, _ = os.path.splitext(args[1])
# If there is still a folder
# with the same name as the original compressed file
if (os.path.isdir(name)):
walk_in_dir(name)
except IndexError:
print('IndexError: Usage "python %s ZIPFILE_NAME" or "python %s DIR_NAME"' % (args[0], args[0]))
except IOError:
print('IOError: Couldn\'t open "%s"' % args[1])
コードに無駄があるせいか、解凍が終わるまで少し時間がかかります。
夕飯食べてる間に、解凍が終わってました。
flag{bdf574f15645df736df13daef06128b8}
解けなかった問題
解けた途中までの私の考え道筋を備忘録、他の方の解き方を参考として記載しておきます。
Misc
Stegano(100points)
友人からある画像が送られてきました。何かが写りこんでいるらしいのですが。
添付されたファイルを解析してフラグを入手してください。
まずは、とりあえずstepic
を実行したが、収穫なし。
stepic --decode --image-in=stegano.png --out=output.txt
画像を目を凝らしてみると、中央部分に何となく文字が見える。
うさみみハリケーンの青空のステガノグラフィー解析してみると、画面の左上と中央部にフラグの文字列を発見。しかしながら、最後までフラグの後ろ部分の文字列を発見できず。
後ほどよくよく画像を見てみたら、青色ビット4抽出の設定で、画面右下側に小さく書いてありました・・・・・人の姿か何かだと思って見逃してたかな・・・・?
サイゼリアの間違い探しかな・・・・?(負け惜しみ)
morse_zero(100points)
友人から「マジの秘密のメッセージを送るね」とあるテキストファイルが送られてきました。
どうやらマジでそのままでは読めないようです。
添付されたファイルを解析し、マジの秘密のメッセージを見つけ出してください。
フラグは得られた文字列を flag{} で囲んで答えてください。
フラグに英字が含まれている場合はすべて大文字で答えてください。
例えば得られた文字列が Flag の場合は flag{FLAG} となります。
配布されたファイルの内容は以下のようになりますが、全く取っ掛かりが掴めませんでした。
ZZZZZZZZZZZZZZZ
どうやら、このファイルゼロ幅のスペースが混在してるらしいです。
どうやって気付いたんだろ・・・・?
躓いたらバイナリを見るクセを付けた方がいいのかな。
ransom_note(100points)
あなたの元に緊急の対応依頼が飛び込んできました。
重要なファイルがランサムウェアによって暗号化されてしまった。
なんとか助けてほしい。
電話越しに状況を聞き取りつつ、1枚の画像が送られてきました。
端末のディスプレイを写したもののようです。
「No More Ransom Project の出番だな。」その画像を見た上司がつぶやきます。
今回のあなたの仕事はランサムウェアによって暗号化されてしまったファイルを復元することです。
添付されたファイルを解析し、フラグを得てください。
配布ファイルには被害にあったマシンの写真、脅迫文、暗号化されたであろうファイルがありました。
しかしながら、こちらも取っ掛かりが掴めず・・・・
他の方のWriteUpを読む限り、ランサムウェアの特定ツールを使うみたいです。
i_knew_it(120points)
「このアセンブリ、見た瞬間あなただと分かりましたよ。」
ある暗号方式の名称がフラグになっています。
添付ファイルからその暗号方式の名称を特定し、フラグ形式で回答してください。
フラグに英字が含まれている場合は、すべて大文字で答えてください。
例えば This_is_FLAG が得られた場合は flag{THIS_IS_FLAG} となります。
見た瞬間どころか、いくら読んでも分かりませんでした。
他の方は見た瞬間分かるらしい・・・・ぐぬぬぬぬ
参考:アセンブリで書かれたRC4は見た瞬間分かるか - yasulib memo
strong_password(250points)
あなたの同僚は部署内で利用されているパスワード規則に疑問を抱いているようです。
脆弱なパスワードが生成されてしまうのではないかと。
これを確かめるべく同僚は、過去実際にこの規則に従い作成されていたパスワード付きzipのコピーをあなたに送付し、
その解析を依頼しました。
添付されたファイルを解析し、フラグを入手してください。
なお、ファイルはコピーであり更新日時が実際にパスワード設定された日時とは異なる点に注意してください。
配布されたPDF資料からパスワードは以下の形式である事が分かりました。
いや、ダメでしょこんなパスワードで運用しちゃ・・・・
[案件コード] + [記号1(6種)] + [年月日] + [記号2(6種)]
上記からパスワードの解析対象はかなり限られるから、hashcat使えば解けるかな・・・・?
と思いましたがhashcatの使い方を完全に忘れて、答えが全然出ませんでした。
配布されたzipファイルのハッシュ値を計算し、そのハッシュに対して以下のコマンドを実施してましたが、一向に処理が終わりませんでした・・・・
hashcat -a 3 -m 0 hash.txt -1 '?l?u' -2 '@#$%!-' '?1?1?1?2?d?d?d?d?d?d?d?d?2'
zip2jouhn使って、hashcatで使える形式に変換するの完全に忘れてました・・・・
以下のWriteUpが、hashcatの使い方をとても丁寧に解説されてて分かり易いです。
Network
stay_in_touch(150points)
あなたはある事件の調査としてある人物の通信を監視しています。
どうやら誰かと連絡を取り合っているようです。
通信データファイルを解析し、やりとりの内容を明らかにしてください。
添付されたファイルを解析し、フラグを入手してください。
配布ファイルのpcapファイルをWiresharkで開いて確認すると、IMAPプロトコルでメールを受信しているようです。ExportObject > IMF
にてメールをエクスポート。
すると、以下のzipファイルを見付けましたが・・・・ここで、どうやって復元すればよいか分からず、手が止まってしまいました。
--------------E3A9083942D9027C4375FEE4
Content-Type: application/x-zip-compressed;
name="Report-AV-T0097.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="Report-AV-T0097.zip"
UEsDBBQAAQAAADBq8FK0Nz5zSgAAAD4AAAATAAAAUmVwb3J0LUFWLVQwMDk3LnR4dAzRMzm6
s5vAM3huF0n2GEKFrarxVD3WvzurjKz9sjA7iD6nWis0GBRcIdcyrQkqliocBi2lCUB6J0hR
UgHzDVCnVx6LnLS5LenqUEsBAj8AFAABAAAAMGrwUrQ3PnNKAAAAPgAAABMAJAAAAAAAAAAg
AAAAAAAAAFJlcG9ydC1BVi1UMDA5Ny50eHQKACAAAAAAAAEAGADNWpx++XnXARJtllL6edcB
0TOVfvl51wFQSwUGAAAAAAEAAQBlAAAAewAAAAAA
--------------E3A9083942D9027C4375FEE4--
冷静に見直せば、Content-Transfer-Encoding: base64
てあるから、Base64でデコードすればよかった・・・・・・
このzipファイルにはパスワードがかかっており、そのパスワードは先述したエクスポートしたIMFファイルから確認できました。
このzipファイルさえデコード出来れてれば回答できていた様子ぐぬぬぬぬ
yes_you_can(150points)
精密機械の技術者である古い友人から一通の封筒が送られてきました。
中にはあなたに解析してほしいと震えた筆跡で書かれた手紙と1枚の SD カード。
SD カードの中には1つのファイルが記録されていました。
添付されたファイルを解析してフラグを入手してください。
添付されたファイルは、以下のような内容となっていました。
(1628245600.155918) vcan0 095#800007F400000017
(1628245600.157006) vcan0 1A4#000000080000003E
(1628245600.157018) vcan0 1AA#7FFF00000000673F
(1628245600.157020) vcan0 1B0#000F0000000175
(略)
形式から類推して、CAN(car area network)であることにはすぐに気付きましたが、それ以上何をどうすれば良いか分からず。
Tan90909090氏とnmantani氏のWriteUpを読んでみると、なんとWireSharkで読み込めるファイルなんだそうです!!!
固定観念にとらわれ過ぎてたかなぁ・・・
fatsheep氏のWriteUpでは、CANの環境をLinuxに構築して詳しくログを解析されていました。
Digdig(200points)
組織内の通信を監視している部署からマルウェア感染した端末から他にはない不審な通信が発生していたことが分かり、
急ぎ解析してほしいを依頼がありました。
どうやら、通信自体は組織内で許可されているプロトコルが使用されていたため外部に通信できた可能性もあり焦っているようです。
添付されたファイルを解析し、フラグを入手してください。
こちらについては、右も左も分からず仕舞いでした・・・・
nmantani氏のWriteUpがとても参考になりました。
Logger(250points)
夕暮れ時、あなたの携帯が鳴動します。相手の番号は不明。
非通知は拒否設定のはずと不思議に思いつつ電話に出ると「お前の秘密を知っている」と低い男の声が聞こえすぐに切れてしまいました。
直後、あなたの携帯にファイルが添付された空白のメールが届きます。
添付されたファイルを解析してフラグを入手してください。
こちらも早々に諦めてしまった問題です。
Tan90909090氏のWriteUpでの解析の流れが読みやすく、理解しやすく思います。
tkys_not_enough(250points)
せっかく内偵中の後輩から通信データが送られてきたのに。
いわく決定的な証拠を掴んだとのことですが、普段とは異なる方法で取得したデータなのか解析ツールにうまく取り込めません。
後輩に聞こうにも通信データが送られた直後「やはり君だったか」という聞きなれない男の声を最後に連絡が途絶えてしまっています。
あなたは何とかしてこの通信データを解析しなければなりません。
添付されたファイルを解析し、フラグを入手してください。
pcapファイルが配布されていましたが、Wiresharkで開けず、問題文のごとく「うまく取り込めません!!!」状態になって諦めてしまいました。
他の方のWriteUpを読むと、NetTrace.etl
という文字が見付けられたかどうかが肝となっている模様。
以下のページたちを参考に、netshコマンドで採取したパケットファイルを、Wiresharkで開けるように変換する必要がある。
Microsoft 公開のツール:etl2pcapng
netsh コマンドで採取したパケットキャプチャーファイルを、Wireshark で開けるファイル形式に変換する Microsoft 公開のツール:etl2pcapng
Web
Mistake(100points)
作成中のサイトに不備があると外部から指摘を受けています。
どうやら機密情報が漏れてしまっているようです。
サイトにアクセスして機密情報を特定してください。
以下のサイトにアクセスして隠されたフラグを見つけてください。
http://ctf.setodanote.net/web003/
とりあえず、まずはソースを読んでみると以下の記述を発見。
flag{
<!-- Webserver directory index? -->
}
タイトルと上記の記述からディレクトリリスティングを疑いましたが、.git
などいくつか確認て見つからなかったので調べる方向性が違うのか・・・・・?と延々悩んでいました。
他の方のWriteUpを読んでみると、どうやらassets
やimages
にアクセスでき、フラグはimages
フォルダに配置されていたようです。
う~ん・・・・怪しそうなら、脆弱性診断する時みたく考え得るフォルダ名ファイル名全部でファジングした方が良いのかなぁ・・・・・
サーバーに負荷かけちゃダメだったから、BurpのIntruderとか使わなかったんだよなぁ・・・・
おまけ
解けなくて迷走していた時にこのサイトのjsのバージョン確認したら、以下の脆弱性のあるjsバージョンでした。
- CVE-2020-11023
- CVE-2020-11022
Estimated(120points)
組織の関連サイトを監視している部署から「どうやら局長ブログで機密情報が漏洩しているようだ」と連絡が入りました。
一部SNSで言及されているものの、幸いにしてまだ広まってはいないようです。
なんとか穏便にすませたい上司に配慮し、被害を最小にすべくサイトを調査し漏洩している機密情報を特定してください。
以下のサイトにアクセスしてフラグを得てください。
https://ctf.setodanote.net/web006/
該当のサイトへ行くと、どうやらブログページ。
特段変わった点はないが、このブログページの検索機能でSQLiができないか検証。
しかし、有効なSQLiが見付からず時間切れ・・・・・
他の方々のWriteUpを見るに、画像ファイルから命名規則を類推して、投稿画像のリンクに直接アクセスするようです。
お詫び:昨日の記事について
昨日の記事について、掲載していた画像に公開すべきではない情報が含まれていたため当該記事を削除いたしました。
皆様にはご心配、ご迷惑をおかけしてしまい申し訳ありません。
であるので、欲しい情報がある記事は2021/06/02
のもの。
ソースのimg
タグから、例えば2021/07/10
の画像はhttps://ctf.setodanote.net/web006/images/20210710001b.jpg
に配置されてる。
よって、欲しい画像はhttps://ctf.setodanote.net/web006/images/20210602001b.jpg
に格納されていると推測できる。
実際にアクセスしてみると、何やらフラグを入力している時の写真の模様。このフラグを入力する事で正解となる。
Redirect(150points)
組織の関連サイトを監視している部署から「どうやら会長ブログが何らか侵害を受けてしまっているようだ」と連絡が入りました。
再現方法が不明なものの、一部の訪問者から不審なサイトに飛ばされてしまうという指摘がされているようです。
上司は休暇で不在ですが特に支障はありません。
被害を最小にすべくサイトを調査し侵害状況を把握してください。
以下のサイトにアクセスしてフラグを見つけ出してください。
https://ctf.setodanote.net/web004/
全く取っ掛かりが掴めず、断念しました・・・・
どうやら、curlでRedirect追跡するようです。
考えの流れとしては、一部の人が飛ばされるならjs→main.jsに難読化されたコードがある。
という感じです。
OSINT
tkys_eys_only(50points)
送られてきたデータが端末に表示されます。
後輩の活躍により、監視対象者が操作していた端末画面の取得に成功しました。
映し出された画面はある組織の所在地に関する情報を含んでいます。
画像を解析し、所在地に最も関係する組織名を特定してください。
添付されたファイルを解析し、所在地に最も関係する組織の名称を英語表記で答えてください。
名称にスペースがある場合はアンダースコアに置換しフラグ形式で回答してください。
例えば組織名が International Criminal Police Organization だった場合は
flag{International_Criminal_Police_Organization} となります。
ハマりにハマって、抜け出せませんでした・・・・
配布画像は次の通りです。
この画像の40.75N 73.98W (Elev.49ft)
が正解の場所だと判断。
Googleマップでその位置を入力してみるとモーガン図書館が出てきたのでひたすら関連したフラグを提出してみましたが、不正解の嵐・・・・結局、打開策が見付かりませんでした。
この画像をよくよく見なおしてみると、URLのクエリー文字列の経度緯度がかなり細かい桁数まで指定されていました。
この正確な経度緯度が示す場所が、正解の場所となるようです。
MITRE(100points)
識別子があることを知っておくことは共通の認識をもつために必要なことでしょう。
ですが、すべての識別子を覚える必要はないと思います。
そういう理由で私はこの課題に必要性を感じません。
そう説得したが教官は首を縦に振ってはくれなかった。
そして、私はこれからこの文字列を解読しなければならない。
T1495T1152T1155T1144 T1130T1518 flag{T1170T1118T1099T1496T1212_T1531T1080T1127T1020T1081T1208_T1112T1098T1199T1159T1183T1220_T1111T1147T1220}
フラグに英字が含まれる場合はすべて大文字で答えてください。
ひたすらMTIRE
で検索しましたが、全然分からず仕舞いでした。
MTIRE
と問題文中のいずれかの識別子で検索すると、MITRE Techniques Referenceがヒットしました。
こちらのIDと一致するものの頭文字のようです。
ATT&CKって、攻撃のテクニックやナレッジって感じなのかな?
参考:MITRE ATT&CK について知ろう!! - Qiita
N-th_prime(220points)
電車の中で誰かの会話が聞こえてきます。
「巨大な素数の秘密を知っているか兄者」
「知っているとも弟者。巨大な素数は秘密を守る要なのさ」
「兄者、1番目の素数は?」
「2 だ」
「2番目の素数は?」
「3 だ」
「数え上げて 72057594037927936 番目の素数は?」
「・・・」
「兄者マテッ!ときに落ち着けって!」
数え上げて 72057594037927936 番目の素数をフラグ形式で答えてください。
例えば 11 だった場合は flag{11} と答えてください。
なんとか自力で計算できないか試行錯誤したけど、ダメでした・・・・
kusano_k さんの writeupより、以下でご家庭のマシンでも計算できるとの事です。
しゅごい・・・・
$ ./primecount 72057594037927936 --nth-prime --threads=4
2991614170035124397
Tan90909090 さんの writeupでは、OSINTで答えが載っている箇所を特定してました。想定解答はこんな感じなのかな・・・・
identify_the_source(250points)
組織はある攻撃者グループの動向を調査しています。
あなたは旧知の情報提供者からその攻撃者グループが攻撃に利用しようとしているというファイルを入手することに成功しました。
情報提供者はファイルの配布元URLの情報も持っているようですが、
そちらの情報を入手するためには高額な対価が必要となりそうです。
あなたが自由にできる予算は限られています。
巧みな話術でどうやらあるマルウェア解析サイトから取得した情報であるようだというところまでは聞き出せました。
組織はあなたに配布元URLを特定し、
攻撃を未然に防ぐとともに攻撃者グループに関する重要な情報が含まれていないか調査するよう指示を出しました。
添付されたファイルを解析して関連する配布URLを特定、調査し、フラグを入手してください。
とりあえずハッシュ値でVirus Totalで検索をしてみたけど、特に有益な情報を得られませんでした。
$ sha256sum tsuru
64f10be20a97f7d25fd23d48e563cc391c54882c97d1c232832ea6beb61ca1da
参考
- VirusTotal, ANY.RUNなどのオンライン検査サービス利用における注意点 - セキュリティ猫の備忘録
- nmantani氏のWriteUp
- Tan90909090氏のWriteUp
- takahoyo氏(ほよたか氏(@takahoyo))のWriteUp
secret_operation(300points)
あなたと同僚は敵対組織が秘密裏に進めているオペレーションの調査を命じられました。
「どうやら事を起こそうとしているようだ。」
調査開始からしばらく経った頃、同僚からある画像が届きました。
それはかなり不鮮明だったものの、どこかの Web ページを写したと思われる画像データでした。
詳細を確認しようと同僚と連絡をとろうとしましたが返信はなく、
同僚からの連絡はそれを最後に途絶えてしまいました。
画像の Web ページを調査し敵対組織が秘密裏に進めているオペレーションを明らかにしなければ。
添付されたファイルを解析し、フラグを得てください。
配布された画像は以下の通り。
画像に表示されているURLhttps://green-pond-97ff.setodanote.net/
の魚拓を探してみたが、見付けることができず。
上記URLに直接アクセスしてみると、アクセス元の国・地域・タイムゾーンが表示されていました。
これ以上先に進めずギブアップ。
他の方々のWriteUpを読むと、
- ロシア経由で上記URLにアクセス
- 表示されたツイッターアカウント(敵対組織?)を調査すると、PNGにZIPを埋め込む手法がいいねされている。
- 2021/07/04の画像から、埋め込まれているファイルを抽出
- Twitter の調査の結果より、BIO/right_next_to_you を使ってログイン
すごい・・・・これが本物のOSINTOか・・・・・カッコいい・・・・
普段全然触れないから、新鮮で楽しかったです!
参考
Crypto
tkys_secret_service(120points)
分担が一区切りし拠点に立ち寄っていた後輩から、あなたが3か月前に送ってきたチャットが結局なんだったのか解けないでいると話しかけられました。そういえば暇だったから意味もなく秘匿回線で内偵中の後輩に暗号文を送っていたことを思い出します。
以下の文字列を解析してフラグを入手してください。
Gur cevgrsgbvh vp Pvhgevyyrq Hhsynmmbpbrq Vhpvezngbvh (PHV) ermbqrhg bh hvhprqreny mlmgrzm nhq vetnhbfngbvhm bm vp cnenzvahg bzcvegnhsr gv prqreny ntrhsbrm nhq snh qbersgyl bzcnsg gur nobybgl vp gur prqreny tvirehzrhg gv massrmmpayyl svhqasg bgm rmmrhgbny zbmmbvhm nhq pahsgbvhm. Gubm caoybsngbvh cevibqrm ntrhsbrm jbgu ersvzzrhqrq mrsaebgl erdaberzrhgm pve cevgrsgbht gur svhpbqrhgbnybgl vp PHV jurh gur bhpvezngbvh bm ermbqrhg bh hvhprqreny mlmgrzm nhq vetnhbfngbvhm; jurh gur hvhprqreny vetnhbfngbvh bm hvg svyyrsgbht ve znbhgnbhbht bhpvezngbvh vh orunyp vp n prqreny ntrhsl ve ambht ve vcrengbht n mlmgrz vh orunyp vp nh ntrhsl; nhq jurer gurer ner hv mcrsbpbs mnprtaneqbht erdaberzrhgm pve cevgrsgbht gur svhpbqrhgbnybgl vp Synt bm pynt{cabcab_sne_vp_zvy} PHV cermseborq ol gur naguvebfbht ynj, ertayngbvh, ve tvirehzrhgjbqr cvybsl pve gur PHV sngrtvel ybmgrq bh gur PHV Ertbmgel. Gur erdaberzrhgm nccyl gv nyy svzcvhrhgm vp hvhprqreny mlmgrzm nhq vetnhbfngbvhm gung cevsrmm, mgver, nhq/ve genhmzbg PHV, ve gung cevibqr cevgrsgbvh pve masu svzcvhrhgm. Gur mrsaebgl erdaberzrhgm ner bhgrhqrq pve amr ol prqreny ntrhsbrm bh svhgensgany irubsyrm ve vgure nterrzrhgm rmgnoybmurq orgjrrh guvmr ntrhsbrm nhq hvhprqreny vetnhbfngbvhm.
シーザー暗号だと思い込んで延々と悩んでましたが、換字式暗号でした。。。
とても便利なサイトがあるようです。
quipqiup - cryptoquip and cryptogram solver
lets_bake(150points)
あなたはシェフ帽の人物からレシピを受け取りました。どうやら組織からの秘密のメッセージのようです。レシピを解読し、秘密のメッセージを入手してください。
Input:
NzRmNDRiMWE0Y2M2ZGNiNzc3NTMyNTcwZjk0MTE4NTMyNTcxZjE1YTE1NTJkY2M0
Recipe:
RnJvbV9CYXNlNjQoJ0EtWmEtejAtOSsvPScsdHJ1ZSkN]b2[sRnJvbV9IZXgoJ05vbmUnKQ0=]b2[sRm9yaygnJScsJ18nLGZhbHNlKQ0=]b2[sUkM0KHsnb3B0aW9uJzonVVRGOCcsJ3N0cmluZyc6J2NoZWYnfSwnTGF0aW4xJywnTGF0aW4xJyk=
未回答。
タイトルからCyberCheffを使うであろう事までは予想できましたが、うまくデコード出来ず時間切れ。
takahoyo氏(ほよたか氏(@takahoyo))のWriteUpが、レシピの作成の流れが分かり易く解説されてました。
どうやら、]b2[
で区切られたBase64の文字列であるかに気付けるかがポイントのようでした。
WEARECIA(300points)
家に帰ると黒い封筒が郵便受けに入っていました。
封筒の中身は英字が羅列されたメモが一枚。
青銅色の紙に白いインクで書かれており右下には同じインクで WEARECIA と記載されています。
どうやら暗号文のようです。暗号文を解析してメッセージを受け取る必要がありそうです。
以下の暗号文を解読し、隠されたメッセージを見つけてください。
フラグは得られたメッセージを flag{} で囲んで回答してください。
EMUFPHZLRFAXYUSDJKZLDKRNSHGNFIVJYQTQUXQBQVYUVLLTREVJYQTMKYRDMFDRCDNKFRHHMKVLLTGBMFDUTMALDUMKYQTGLWLWCM
こちらも未回答。
大文字だけで何となく特定パターンがありそうな気がしたのヴィジュネル暗号かと思ったが、有益な情報が得られず。
他の方々のWriteUp曰く、WEARECIA
はWe are CIA
の事らしい。
CIA Crypt
で検索すると、Kryptos
という暗号がヒットするようです。
全く気付けなかった・・・・
参考
Rev
要復習
Passcode2(150points)
予想以上の結果だった。今日もガラス越しに対象が目を覚ます。
ここまでうまくいったことはかつてない。端末に今日のデータを送信する。
今度こそうまくいくかもしれない。
添付されたファイルを解析してフラグを得てください。
完全未着手
to_analyze(200points)
あの施設はなんだったのだろう。ふとした瞬間に思い出す。
「秘密情報が含まれているファイルを入手した。
特定の環境で実行した場合のみ情報が表示される仕組みのようだが条件が特定できない。
解析してみてくれないか。」
同僚から連絡が入る。
端末を開き受信データを確認する。今日の解析対象が画面に表示される。
添付されたファイルを解析してフラグを入手してください。
ファイルは「infected」というパスワード付き ZIP になっています。
完全に未着手。
どうやら.NETで作られたファイルのようなので、ILSpyやdnSpyでコードがデコンパイルできる。
難読化解除ツールも動作したみたいです。
参考
- nmantani氏のWriteUp
-
takahoyo氏(ほよたか氏(@takahoyo))のWriteUp
では、ディレクトリ名をデコードするスクリプトを作成されてました。
Forensics
Mail(50points)
あなたはメールデータの調査を依頼されました。
組織内の要員が規定に反して組織内のデータを個人利用のクラウドサービスにバックアップとしてコピーしていたもののようです。
メールデータに機密情報が含まれていないか、調査してください。
添付されたファイルを解析し、フラグを得てください。
配布された圧縮ファイルを解凍すると、大量のmsfファイルがあった。
msfはThunderbirdで使われる形式なので、Thnderbirdをインストールして各msfファイルを見てみると、Sent-1
がkimitu.zip
を添付して送ってるのが分かる。(他の方は、ファイルサイズから当たりをつけていた模様。)
しかしながら、kimitu.zip
の解凍方法が分からず断念。
よくよく見直してみると、Sent-1
にContent-Transfer-Encoding: base64
とバッチリ書いてありました。
後は、Base64でデコードしてunzipするだけ。
CyberCheffくんにおまかせするなどすれば、フラグが画像が入手できる。
Timeline(100points)
君はタイムラインを知っているかね。
ベンチに腰かけた老紳士がこちらに向かって話しかけてきます。
あまり使われてはいないようだがね。
老紳士はそう話を続けながら正面に向き直りため息をつきます。
だが、完全に消えてしまう前にどんなアーティファクトであったか確かめてみてもいいとは思わんかね。
そういって老紳士は1枚のディスクを私に手渡すと、静かに去っていきました。
どうやらディスクを解析する必要があるようです。
添付のファイルを解析し、フラグを入手してください。
タイムライン解析。
昔やった気がするけど、記憶の彼方に・・・・
ActivitiesCache.db
のテーブルの中身を読んでいけば良いかと思ったが、後回しにして時間切れまで未着手。
takahoyo氏(ほよたか氏(@takahoyo))のWriteUpが、一番分かり易くかつフォレンジック調査っぽく纏められていました。
このDBをパースしてくれるツール、およびその結果を見やすく表示してくれる専用のツールがあるらしい。
MFT(100points)
内部告発によりある要員が極秘情報をファイルサーバからダウンロードしていることが判明しました。
組織は要員の身柄を抑え、端末から証拠となるデータを抽出しました。
今回のあなたの仕事は、端末から抽出したデータを解析し、ダウンロードされた極秘情報のファイル名を特定することです。
組織からは極秘情報のダウンロードされた日時が 2021-07-18 18:30頃 であることと、
ファイルサイズが 465030 であることのみが伝えられています。
添付ファイルを解析し、極秘情報のファイル名を特定してください。
例えばファイル名が file.txt の場合は flag{file.txt} と回答してください。
配布されたファイルを解凍すると、C_$MFT
が得られました。
とりあえず、binwalkで抽出してみようと思ってしまったのが運の尽き・・・・抽出条件をいじっても、処理が終わる気配がなく、断念。
一応、実行したコマンドを忘備録として載せておきます。
binwalk -D='.*' --size=47000 C_\$MFT
こちらの問題についても、Timeline(100points)
と同じくtakahoyo氏(ほよたか氏(@takahoyo))のWriteUpが、一番分かり易くかつフォレンジック調査っぽく纏められていました。
MFTについても、パースしてくれるツール、見やすく表示してくれる便利なツールがあるようです。
ファイルサイズや、タイムスタンプでフィルタがかけれるようです。すごい。
tkys_another_day(100points)
無事でいてくれているだろうか。
あなたは後輩の端末に残されていたある画像ファイルが気になっています。
作成された日付は音信不通となる前日。
ファイルは作りかけなのか、断片的な情報しか表示されません。
もしかすると後輩の消息についての重要な手がかりが隠されているのではないか。
あなたはファイルを詳しく解析することにしました。
添付されたファイルを解析し、フラグを入手してください。
とりあえず、binwalkでファイル抽出してみたが、有益な情報が得られず詰まってしまった。
binwalk -D='.*' tkys_another_day.png
他の方々のWriteUoを読んでみると、ファイルタイプがAPNGである事に気付けると個別のPNGが抽出できるみたい。
さらに、なんとMacPCでは特別な事をしなくてもフラグが見える状態らしい。ぐぬぬぬぬ。
TITLE(120points)
仕事を終えて帰宅の途につくあなた。
人通りの少ない住宅街を通り過ぎ、自宅のマンションにたどり着きます。
ちょうど部屋のドアの前に立った時に手に持っていた携帯が鳴りメールを受信したことを伝えます。
件名:これが最後の警告だ
そのメールには画像が添付されていました。
添付されたファイルを解析し、フラグを得てください。
配布された画像ファイルをexiftoolしても、画像そのものを眺めたり色々したが、有益な情報が得られず断念。
正解への道筋は以下。
- 画像の高さを変更
- 右下にチラっと見えているQEコード(全く気付かなかった・・・)を復元
参考
CSIRT_asks_you_01(150points)
組織内のインシデント対応部署から急ぎ解析してほしいとの依頼が舞い込みました。
不正侵入が確認された端末の Windows イベントログの調査で、
状況把握のために侵害に関する詳細な日時を確認してほしいということのようです。
今回のあなたの仕事は送られてきたファイルを解析し、
不正な方法によってネットワーク経由のログインが成功したことを示している最初の記録日時(TimeCreated SystemTime) と Event ID を特定することです。
フラグは UTC での記録日時 を yyyy/mm/dd_hh:mm:ss 形式にし、
最後に Event ID をアンダースコアでつなげた形で答えてください。
例えば 記録日時 が 2020/01/10 7:05:13.9234567Z 、Event ID が 1234 の場合は flag{2020/01/10_07:05:13_1234} となります。
記録日時は UTC+0 で回答することに注意してください。
未回答。
配布されたファイルはWindowsのSecurityイベントログファイル。
とりあえず、WIndowsマシンで開いてみたが、ログが凄まじい数のため、どう解析すれば良いか分からず手詰まり。
以下のWriteUpの解説がとてもスマートでした。
-
fatsheep氏のWriteUp ・・・ Splunkにイベントログを取り込んで解析されていました。
-
takahoyo氏(ほよたか氏(@takahoyo))のWriteUp ・・・ イベントログをパースするツールである
EvtxECmd
を使用し、結果をTimeline Explorer
でログを読んでいってます。
unallocated_space(150points)
「こりゃ今夜は帰れそうにないな」同僚がそう言いながらハードディスクやUSBメモリが大量に詰まった箱をどさっとデスクに置きます。
すべてある組織で使用されていたもので本来は破壊処理されるはずが、
不正に利益を得ようとした人物が仲介したことにより、
破壊処理されずに中古市場に出回ってしまったもののようです。
今日が記念日だという同僚を早く帰すため、あなたはディスクの解析調査を手伝うことにしました。
復元可能なデータがないか確認してください。
添付されたファイルを解析し、フラグを入手してください。
未回答。
Foremostをかけたけど、有益な情報が得られず。
参考
7Zipで開けるのは驚きました。
Forensic問題ではとりあえず、7Zipに突っ込んでみるようにするのが良いようです。
丁寧にカービングの手順を解説されてました。
CSIRT_asks_you_02(200points)
組織内のインシデント対応部署から引き続き急ぎ解析してほしいとの依頼を受けています。
一つ目の解析依頼(CSIRT_asks_you_01)の結果と別の証拠などから、
あるアカウントのパスワードが脆弱である可能性が示唆されています。
添付されたファイルを解析し、そのパスワードを特定してください。
フラグはアカウント名とパスワード(平文)をアンダースコアでつないで回答してください。
例えばアカウント名が user 、パスワードが pass の場合は flag{user_pass} と回答します。
他の方々のWriteUpを読むと、様々な方法で回答されてました。
以下は、Windows PWDUMP toolsを使用して解析されてました。
以下は、Mimikatzを使って、配布されたSYSTEMとSAMファイルからパスワードハッシュをダンプ。
ダンプしたハッシュjohn the Ripperでクラックする流れ。スマートです。
以下は、Impacketのsecretsdump.py(SECYRITY, SAM, SYSTEMレジストリからCredential情報を引っこ抜いてくれる)というツールで解析されてました。ペンテストでよく使うらしい。
Programing
deep_thought(250points)
回答が間に合いませんでした。時間配分ぇ・・・・
計算勝負をしましょう。普段は寡黙に働き続けているサーバが不意に話しかけてきました。
あなたは珍しいこともあるものだと思いつつも、そのサーバからの挑戦を受けることにしました。
以下にアクセスしてフラグを得てください。
nc 10.1.1.10 12010
この設問では Linux ターミナルを使用します。
https://ctf.setodanote.net/webshell/
ncで接続すると、どうやら表示された四則演算を入力すれば良い模様。
どこかで似たようなCTFの問題があった気がする。と思って探した手見たら、SECCON4Bの過去問にありました。
SECCON Beginners CTF 2018 - てけいさんえくすとりーむず - こんとろーるしーこんとろーるぶい
四則演算部分を抽出して、evalで計算して送信すれば良さそう。
Pwn
要復習。
表層解析と静的解析までしかできてない。
tkys_let_die(100points)
同上
1989(200points)
同上。
FSBでアドレスが見れる事、フラグの存在するアドレスを見に行けるように書き換える事は分かったけど、エクスプロイトコードの完成までに至れなかった。
Shellcode(300points)
同上
所感
終了数分前に駆け込みでProgramingを2問回答できたのは良いけど、結局Pwnが1問も回答できなかった・・・・
時間配分もだけど、他の分野に比べてPwnやRevが貧弱なのを何とかしたい。
あと、WEBのMistakeが分からなくて何故か延々とSQLiについて調べてたら、面白い記事も見つけました。Lord of the SQLI の writeup もしくは walkthrough - 好奇心の足跡
想定解とは違うけど、MacPCならすぐ解けたり、情報が得やすい問題もいくつかあったな・・・・
MacPCも用意した方がいいのかな・・・
参考URL、使用ツール一覧
- 箇条書き
- モールス信号変換器
- ファイルハッシュ値オンラインチェッカー
- Brainfuck - Wikipedia
- BrainFuckインタープリタ:いで庵
- WhiteSpaceの実行環境 - Whitespace ? Try It Online
- Wireshark
- Punycode:wiki
- 日本語JPドメイン名のPunycode変換・逆変換
- 日本語ドメイン変換(Punycode変換) / IDNドメインのエンコード・デコード | ラッコツールズ??
- GoogleDorks
- MACアドレス検索
- CyberCheff
- factordb.com - 今回のCTFで使用したように、90桁程度の数の素因数分解なら一瞬で結果を返してくれます。
- GitHub - orisano/owiener: A Python3 implementation of the Wiener attack on RSA
- Forensics入門(CTF)
- SQLiteビューア - GoogleChromeの拡張機能。
- ランサムウェアの特定 - The No More Ransom Project
(ランサムウェアの特定ツール) - アセンブリで書かれたRC4は見た瞬間分かるか - yasulib memo
- quipqiup - cryptoquip and cryptogram solver