PicoCTF 2018 Writeup うさみみハリケーンで解いてみた
PicoCTF 2018 Writeup うさみみハリケーンで解いてみた
この Writeup について
普段ゲームの解析で使ってる「うさみみハリケーン」で、超初心者向け CTF にチャレンジしてみました。「CTF」 はセキュリティの技術を競う競技大会のことで、いろんなジャンルの問題を解きます。解き方が正攻法じゃないのもありますので、「出題の意図に沿った正しい解き方が知りたい」って人は、他の Writeup も読んでくださいね。CTF では問題の答えのことを「フラグ」といいます。各問題の説明の最後にある文字列がフラグです。
CTF も Writeup 書くのも初めてなので、いろんな人に助言してもらいました。ありがたや。
PicoCTF 2018 の問題は2019年1月時点でまだ公開されてますけど、約半分の問題は削除されたそうです。あと、一部の問題はファイル入れ替えがあってフラグが微妙に変更されたそうです。
PicoCTF 2018 の問題はこちらから。
補足:このWriteupは、匿名希望の方からDigital Travesiaへ提供されたものです。公開にあたり、Digital Travesia側で若干の修正や補記を行っています。
ツールの入手先
汎用プロセスメモリエディタ兼デバッガ「うさみみハリケーン」「うさみみハリケーン」の公式サイト
「うさみみハリケーン」のダウンロード・インストール・使用方法 (messiahcat氏提供)
ツールの使い方
●うさみみハリケーンと付属ツールの説明「うさみみハリケーン」の最新オンラインヘルプ
式入力演算・進数変換ソフト「UMEC」
多倍長整数演算・進数変換ソフト 「UMECappend」
汎用ファイルアナライザ「青い空を見上げればいつもそこに白い猫」(略称:青空白猫)
●使う前に読んでおいた方がよい解説
基礎用語 キャラクターコード(文字コード)
基礎用語 逆アセンブルコードリスト
ステガノグラフィーの解析について
ファームウェア解析への『うさみみハリケーン』活用について
YARAについて
PicoCTF 2018 解いてみた問題と Writeup 目次
●General Warmup 1●General Warmup 2
●General Warmup 3
●Reversing Warmup 1
●Reversing Warmup 2
●Crypto Warmup 2
●grep 1
●strings
●Reading Between the Eyes
●Recovering From the Snap
●admin panel
●assembly-0
●hex editor
●Truly an Artist
●assembly-1
●now you don't
●What's My Name?
●assembly-2
●assembly-3
●LoadSomeBits
General Warmup 1 - Points: 50
If I told you your grade was 0x41 in hexadecimal, what would it be in ASCII?「うさみみハリケーン」付属の「UMECappend」で 16進数の 0x41 を ASCII に変換するとわかる
picoCTF{A}
General Warmup 2 - Points: 50
Can you convert the number 27 (base 10) to binary (base 2)?「うさみみハリケーン」付属の「UMEC」を使うとわかる
picoCTF{11011}
General Warmup 3 - Points: 50
What is 0x3D (base 16) in decimal (base 10).「うさみみハリケーン」付属の「UMEC」を使うとわかる
picoCTF{61}
Reversing Warmup 1 - Points: 50
Throughout your journey you will have to run many programs. Can you navigate to /problems/reversing-warmup-1_0_f99f89de33522c93964bdec49fb2b838 on the shell server and run this program to retreive the flag?問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出するとわかる
「青い空を見上げればいつもそこに白い猫」の「YARAルールでスキャン」でフラグを検索( GREP )するやり方もある
全部の問題ファイルを一つのフォルダにダウンロードしてから、フォルダごとスキャンする
スキャンに使う CTF 用 YARA ルールはこんな感じ
rule CTF_Flag_Strings : CTF { strings: $Flag1 = "ctf{" nocase ascii wide $Flag2 = "flag{" nocase ascii wide $Flag3 = "f14g{" nocase ascii wide condition: any of them }
picoCTF{welc0m3_t0_r3VeRs1nG}
Reversing Warmup 2 - Points: 50
Can you decode the following string dGg0dF93NHNfczFtcEwz from base64 format to ASCII?「うさみみハリケーン」付属の「UMECappend」で base64 変換するとわかる
picoCTF{th4t_w4s_s1mpL3}
Crypto Warmup 2 - Points: 75
Cryptography doesn't have to be complicated, have you ever heard of something called rot13? cvpbPGS{guvf_vf_pelcgb!}「うさみみハリケーン」付属の「UMECappend」で rot13 変換するとわかる
picoCTF{this_is_crypto!}
grep 1 - Points: 75
Can you find the flag in file? This would be really obnoxious to look through by hand, see if you can find a faster way.問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出するとわかる
picoCTF{grep_and_you_will_find_d66382d8}
strings - Points: 100
Can you find the flag in this file without actually running it?問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出するとわかる
picoCTF{sTrIngS_sAVeS_Time_d7c8de6c}
Reading Between the Eyes - Points: 150
Stego-Saurus hid a message for you in this image, can you retreive it?問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」でステガノグラフィー解析すると画像の左上隅にデータ埋め込みが見える
画像が大きいから縮小表示したらデータ埋め込みが見えなくなっていたが、ビット0抽出分が真っ白なので埋め込みがあると判断
「青い空を見上げればいつもそこに白い猫」でステガノグラフィー解析(ビット抽出)するとわかる
picoCTF{r34d1ng_b37w33n_7h3_by73s}
Recovering From the Snap - Points: 150
There used to be a bunch of animals here, what did Dr. Xernon do to them?問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」でファイル・データ抽出(JPEG ファイル抽出して保存)するとわかる
picoCTF{th3_5n4p_happ3n3d}
admin panel - Points: 150
We captured some traffic logging into the admin panel, can you find the password?問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出するとわかる
picoCTF{n0ts3cur3_9feedfbc}
assembly-0 - Points: 150
What does asm0(0xc9,0xb0) return? Submit the flag as a hexadecimal value (starting with '0x'). NOTE: Your submission for this question will NOT be in the normal flag format.Source located in the directory at /problems/assembly-0_4_0f197369bfc00a9211504cf65ac31994.問題のアセンブリ言語ソースコードを「うさみみハリケーン」の「パラサイトルーチン作成」機能で注入して実行させればよい
「うさみみハリケーン」付属の解析練習用ソフト「UsaTest2.EXE」を起動して「うさみみハリケーン」でオープン
メニューの「デバッグ」→「パラサイトルーチン作成」、ダイアログが表示されたら「確保」ボタン
問題のソースコードは関数だけなので、引数を指定してその関数を CALL するコードを追加する
アセンブリ言語ソースコードを記述して、アセンブル後のバイナリデータをプロセスメモリに書き込む
メニューの「デバッグ」→「ブレークポイントの挿入/削除」で関数実行直後に実行ブレークポイントをセット
メニューの「デバッグ」→「選択アドレスでCreateRemoteThread関数を実行」でコード先頭から実行させる
ブレークしたらEAXレジスタに戻り値が表示される
アセンブルコードそれぞれの処理結果を見たいなら関数先頭にブレークポイント+「ブレーク時に実行一時停止」でステップ実行
これでスタックフレームから引数を取り出して戻り値に格納する実行処理フローがわかる
0xb0
hex editor - Points: 150
This cat has a secret to teach you.問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」でステガノグラフィー解析(フォーマット解析)するとわかる
picoCTF{and_thats_how_u_edit_hex_kittos_8BcA67a2}
Truly an Artist - Points: 200
Can you help us find the flag in this Meta-Material?問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」でステガノグラフィー解析(フォーマット解析)すると、
「tEXt文字列チャンク: キーワード[Artist] オフセット00003340 サイズ00000026バイト」と表示される
なので、「青い空を見上げればいつもそこに白い猫」のヘキサエディタ(日本で言うバイナリエディタ)でオフセット00003340を見るとわかる
picoCTF{look_in_image_eeea129e}
assembly-1 - Points: 200
What does asm1(0x76) return? Submit the flag as a hexadecimal value (starting with '0x'). NOTE: Your submission for this question will NOT be in the normal flag format. Source located in the directory at /problems/assembly-1_0_cfb59ef3b257335ee403035a6e42c2ed.問題のアセンブリ言語ソースコードを「うさみみハリケーン」の「パラサイトルーチン作成」機能で注入して実行させればよい
「うさみみハリケーン」付属の解析練習用ソフト「UsaTest2.EXE」を起動して「うさみみハリケーン」でオープン
メニューの「デバッグ」→「パラサイトルーチン作成」、ダイアログが表示されたら「確保」ボタン
問題のソースコードは関数だけなので、引数を指定してその関数を CALL するコードを追加する
アセンブリ言語ソースコードを記述して、アセンブル後のバイナリデータをプロセスメモリに書き込む
メニューの「デバッグ」→「ブレークポイントの挿入/削除」で関数実行直後に実行ブレークポイントをセット
メニューの「デバッグ」→「選択アドレスでCreateRemoteThread関数を実行」でコード先頭から実行させる
ブレークしてEAXレジスタの値つまり戻り値がわかる
アセンブルコードそれぞれの処理結果を見たいなら関数先頭にブレークポイント+「ブレーク時に実行一時停止」でステップ実行
0x73
now you don't - Points: 200
We heard that there is something hidden in this picture. Can you find it?問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」でステガノグラフィー解析するとわかる
picoCTF{n0w_y0u_533_m3}
What's My Name? - Points: 250
Say my name, say my name.問題のファイルを「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」で文字列抽出するとわかる
picoCTF{w4lt3r_wh1t3_33ddc9bcc77f22a319515c59736f64a2}
assembly-2 - Points: 250
What does asm2(0xe,0x21) return? Submit the flag as a hexadecimal value (starting with '0x'). NOTE: Your submission for this question will NOT be in the normal flag format.問題のアセンブリ言語ソースコードを「うさみみハリケーン」の「パラサイトルーチン作成」機能で注入して実行させればよい
「うさみみハリケーン」付属の解析練習用ソフト「UsaTest2.EXE」を起動して「うさみみハリケーン」でオープン
メニューの「デバッグ」→「パラサイトルーチン作成」、ダイアログが表示されたら「確保」ボタン
問題のソースコードは関数だけなので、引数を指定してその関数を CALL するコードを追加する
アセンブリ言語ソースコードを記述して、アセンブル後のバイナリデータをプロセスメモリに書き込む
メニューの「デバッグ」→「ブレークポイントの挿入/削除」で関数実行直後に実行ブレークポイントをセット
メニューの「デバッグ」→「選択アドレスでCreateRemoteThread関数を実行」でコード先頭から実行させる
ブレークしてEAXレジスタの値つまり戻り値がわかる
アセンブルコードそれぞれの処理結果を見たいなら関数先頭にブレークポイント+「ブレーク時に実行一時停止」でステップ実行
0x27a
assembly-3 - Points: 400
What does asm3(0xfac0f685,0xe0911505,0xaee1f319) return? Submit the flag as a hexadecimal value (starting with '0x'). NOTE: Your submission for this question will NOT be in the normal flag format.問題のアセンブリ言語ソースコードを「うさみみハリケーン」の「パラサイトルーチン作成」機能で注入して実行させればよい
「うさみみハリケーン」付属の解析練習用ソフト「UsaTest2.EXE」を起動して「うさみみハリケーン」でオープン
メニューの「デバッグ」→「パラサイトルーチン作成」、ダイアログが表示されたら「確保」ボタン
問題のソースコードは関数だけなので、引数を指定してその関数を CALL するコードを追加する
アセンブリ言語ソースコードを記述して、アセンブル後のバイナリデータをプロセスメモリに書き込む
メニューの「デバッグ」→「ブレークポイントの挿入/削除」で関数実行直後に実行ブレークポイントをセット
メニューの「デバッグ」→「選択アドレスでCreateRemoteThread関数を実行」でコード先頭から実行させる
ブレークしてEAXレジスタの値つまり戻り値がわかる
アセンブルコードそれぞれの処理結果を見たいなら関数先頭にブレークポイント+「ブレーク時に実行一時停止」でステップ実行
デバッガを使わずに、EAX レジスタの値を MessageBox 関数で表示するやり方もある
「パラサイトルーチン作成」機能で「レジスタ取得・表示」テンプレートを出力して利用する
wsprintf 関数が使う書式指定文字列を変えれば、レジスタやプロセスメモリ上の値・バイト列・文字列も表示できる
MessageBox 関数で表示したメッセージボックスは Ctrl+C キーで内容がコピーできる
0x4e1a
LoadSomeBits - Points: 550
Can you find the flag encoded inside this image?問題のファイルは「うさみみハリケーン」付属の「青い空を見上げればいつもそこに白い猫」のステガノグラフィー解析で読み込めない
「青い空を見上げればいつもそこに白い猫」のヘキサエディタで開くと BMP ヘッダがおかしいようだ
BMP ヘッダを修復するよりも PPM ヘッダに書き換える方が簡単だと判断
ヘッダから計算した色情報のサイズは1200x630x3で0x229B60バイト、ファイルのサイズが0x229B96バイトだから、ヘッダにある画像の幅と高さの数値は正しいと推定
なので、ファイルサイズから0x229B60バイト戻してオフセット0x36以降を1200x630の BGR 色情報バイナリデータとみなす
元のヘッダを PPM (P6) ヘッダに書き換えて保存
適当なグラフィックソフトで PPM 画像を上下反転してボトムアップを修正してから BMP ファイル保存
「青い空を見上げればいつもそこに白い猫」のステガノグラフィー解析で画像の左下隅にデータ埋め込みが見える
ステガノグラフィー解析(ビット抽出)で埋め込みデータを抽出する
3834B1B7A1AA233DB9BA183919B22FB4A72FBA2419AFB6199A1ABA2FB998B3B718B318B19A372A2FB118BA1AAF991C98199A9C999B1C99BE80
フラグの先頭は"pico"( ASCII で7069636F)なのでビットがズレていると推定
「うさみみハリケーン」付属の「UMECappend」でこの16進数の数値を左ビットシフトしてズレを修正するとわかる
picoCTF{st0r3d_iN_tH3_l345t_s1gn1f1c4nT_b1t5_2903593693}