2019/4/19の金曜日に秋葉原の以下の勉強会に参加してきましたので記事にしていきます。
[秋葉原] 第2回ゼロから始めるCTF入門勉強会 (初心者歓迎!)第25回ゼロから始めるセキュリティ入門 勉強会
今回二回目の開催であり、CTFに興味がある方も多いようで、30名ほどの参加者がいました。
このブログでやること
発表資料やCTFの演習の問題については以下のリンクから秋葉原WeeybleのSlackに参加することで誰でも見ることができますので、興味がある方は確認してみてください。
この記事では出た問題のwrite upを書いていきます。(私の復習も兼ねています。)
Network問題
実際に演習の順番通りに解いていきます。
まずはNetworkの問題です。「Network.pcapng」というファイルが事前に配布されていますので、これをWireSharkを使用してまずは開きます。
ファイルを開くと以下のように通信の一覧が出てきます。
さて、どうしようかな~というところですが、運営側から以下のヒントが与えられていますので、これを参考に確認します。
・フラグのフォーマットはflag{****}です。
確かにそうですね。暗号化されている通信(SSL/TLS)などはWireSharkで通信内容を見ることはできませんね。
次にフラグのフォーマットですが、「flag{****}」という形式になっているということです。
通常はフィルタ機能で「tcp.port==80」などでフィルタをしていって順番に確認するのかもしれませんが、文字列の検索もWireSharkでできますので、これで確認していきます。
「編集」⇒「パケットの検索」をすると以下のように検索フォームが出てきます。
次に「文字列」を指定して「flag{」という値を入力しで検索を行います。
すると、以下のとおり「No.17586」が引っかかりますので、その内容を確認します。
以下のとおりflagを確認することができましたね!
Binary問題
続いてバイナリです。これは今までは避けていたので、頑張って取り組みます。
準備として、Ghibra(ギドラっていうのかな?)を使用します。JDKが必要とのことですので、JREしか入っていない人はJDKも事前に入れても置いてください。
まずは事前に与えられている「c.exe」をコマンドプロンプトで実行してみましょう!
>c.exe input keywords... aaaaa i forgot flag...
「c.exe」を実行すると「input keyword」と表示されますので、何も知らない状態なのでひとまず適当に「aaaaa」と入力してみました。(三行目の個所です。)
すると「i forget flag」と表示されました。keywordsが異なっているようですね。
これは正しいkeywordを探す必要がありそうですので、早速Ghibraを使用していきましょう!
Ghibraはコマンドプロンプトから「ghidraRun.bat」を動かすことで起動します。
以下がGhibraのCodeBrowserを立ち上げた際の様子です。
そしてここに「c.exe」をドラックアンドドロップすると、読み込まれた後に以下のようにアセンブリコードが表示されます。
さてここで闇雲に探すと時間がかかりそうなので、まずは先ほどコマンドプロンプトで「c.exe」を実行した際の挙動を思い出します。
「input keywords…」の後に文字列を入力し、間違っていると「i forgot flag…」と表示されました。
ここでこの辺りに答えがありそうなので、それを探します。
「Window」⇒「Defind String」を選択し、文字列の検索を行います。
Filter個所に「input keywords」を入力すると以下のように一か所だけ引っかかりますので、それを確認します。
※検索がヒットしない場合はFilterのすぐ横のボタンから「Text Filter Options」が立ち上がりますので、そちらでオプションを調整しましょう。(私の環境だと、「Starts With」でヒットするようになりました。)
上記の赤枠で囲っている上の個所に「input keywords…」が表示されていますね。
またその下の赤枠の個所にkeywordsが異なっている際に表示されるメッセージである「i forgot flag…」が表示されています。
なので、処理としてはその間でやっているっぽいですね。
「”kam0n0has1″」と表示されていますので、実際に再度「c.exe」を動かしkeywordを入力してみましょう。
>c.exe input keywords... kam0n0has1 {CTF4b:kam0n0has1_1s_cut3!}
フラグが表示されました!
Misc問題
Miscとは「パスワード探索」のことです。
「password.a.b.c.d.e.f」というファイルが配布されているので、これを解いていきます。
結構処理が長いので実際にコードに記載します。
内容としてはまずはfileコマンドでどのようなファイル形式かを確認して順番に解凍していく形です。
$ file password.a.b.c.d.e.f password.a.b.c.d.e.f: gzip compressed data, was "password.a.b.c.d.e", last modified: Mon Apr 1 05:26:16 2019, from FAT filesystem (MS-DOS, OS/2, NT) #file形式の確認:gzipファイルであることを確認 $ gunzip -c password.a.b.c.d.e.f > password.a.b.c.d.e #gunzipコマンドでpassword.a.b.c.d.e.fを解凍 $ file password.a.b.c.d.e password.a.b.c.d.e: POSIX tar archive (GNU) #file形式の確認:tarファイルであることを確認 $ tar -xvf password.a.b.c.d.e #tarコマンドでpassword.a.b.c.d.eを解凍 password.a.b.c.d $ file password.a.b.c.d password.a.b.c.d: RAR archive data, v5 #file形式の確認:rarファイルであることを確認 $ unrar e password.a.b.c.d UNRAR 5.50 freeware Copyright (c) 1993-2017 Alexander Roshal Extracting from password.a.b.c.d Extracting password.a.b.c OK All OK #rarコマンドでpassword.a.b.c.dを解凍 $ file password.a.b.c password.a.b.c: 7-zip archive data, version 0.4 #file形式の確認:7-zipファイルであることを確認 $ 7z e password.a.b.c 7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21 p7zip Version 16.02 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,64 bits,1 CPU Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz (806EA),ASM,AES-NI) Scanning the drive for archives: 1 file, 275 bytes (1 KiB) Extracting archive: password.a.b.c -- Path = password.a.b.c Type = 7z Physical Size = 275 Headers Size = 130 Method = LZMA2:12 Solid = - Blocks = 1 Everything is Ok Size: 196 Compressed: 275 #7zコマンドでpassword.a.b.cを解凍 $ file password.a.b password.a.b: LHarc 1.x/ARX archive data [lh0], with "password.a" #file形式の確認:LHAファイルであることを確認(初めて見た。。。) $ lha x password.a.b password.a - Melted : o #lhaコマンドでpassword.a.bを解凍 $ file password.a password.a: Zip archive data, at least v2.0 to extract #file形式の確認:zipファイルであることを確認 $ unzip password.a Archive: password.a [password.a] password.txt password: password incorrect--reenter: password incorrect--reenter: skipping: password.txt incorrect password #unzipコマンドで解凍の際にパスワードを求められる。適当に入力するが失敗 $ fcrackzip -u -l 4 -c a1 password.a PASSWORD FOUND!!!!: pw == 8329 #fcrackzipコマンドでパスワードの解析、オプションの内容は以下のとおり #-u:unzipで解読を確認する。 #-l:パスワード長を指定。(未指定の場合、6文字。また、-l 5-7とすることで文字長のレンジ指定可能) #-c:使用文字指定。aで小英字、Aで大英字、1で数字、!で記号などを指定可。 #パスワードは事前に4文字であること、文字種が一つであることをヒントで貰っている。英、数と一回づつやるのが面倒だったので、「a1」と入力した。
さて、ここまでで、zipファイルのパスワードが「8329」であることがわかりましたので、もう一度unzipコマンドで解凍を行います。
$ unzip password.a Archive: password.a [password.a] password.txt password: #パスワードとして先ほど表示された「8329」 extracting: password.txt #解凍完了! $ cat password.txt flag{like_peeling_onions} #catコマンドで解凍できたファイル内容を表示させることでフラグが表示される
これでフラグをゲットできました!
最後に
かなり良い勉強会でした!
初めての方でもかなり分かり易く解説がされていたという印象でした。
少し環境準備に手間取る箇所はありますが、それも当日にサポートしていたので、素晴らしいなと思いました。
終了後は勉強会参加したメンバー7名で懇親会へ!
セキュリティに興味が出た方もいて、非常にアットホームな懇親会でしたね。
第三回では、今度は問題でも作ろうかなと検討中です。(kmrrさんと相談ですね。)
私が作るのであればWeb系かなと、丁度勉強会で使用した脆弱性環境があるので、そちらを流用すればいいのではないかと・・・
CTFやってみたいけど勉強会で参加する場合に敷居が高くて・・・と思っている方は是非一度参加してみてください。かなりオススメです。
不明点や要望やこういったこともやって欲しいとの要望があれば、お問い合わせページやコメント、ツイッターからでも結構ですので、気軽にご連絡ください。
コメント