Quals: Saudi and Oman National Cyber Security CTF Writeup
- はじめに
- [Web Security 50pts] Back to basics
- [Digital Forensics 50 pts] I love images
- [Malware Reverse Engineering 100pts] I love this guy
- [General Information 50pts] Just Another Conference
- おわりに
- 他の人のWriteup
はじめに
こんにちは。cute_otterです。
2019/02/08 01:00~2019/02/10 06:00(JST)にかけて開催されたQuals: Saudi and Oman National Cyber Security CTFに、個人で参加しました。
結果は250ptsで147位(点を取った457人中)でした。
[Web Security 50pts] Back to basics
解法
ブラウザで問題サイトにアクセスし、ブラウザのディベロッパーツールを使ってHTTPレスポンスを確認すると、以下のようなAllowヘッダ*1が設定されていました。
Allow: GET, POST, HEAD,OPTIONS
これで使用できるメソッドが分かりました。
そこで、ブラウザのディベロッパーツールを使って、GETメソッドの部分をPOSTメソッドに変更してPOSTリクエストを投げると、レスポンスに以下のJavaScriptのコードが含まれていました。(読みやすくするため、一部改行しています。)
var _0x7f88=["","join","reverse","split","log","ceab068d9522dc567177de8009f323b2"]; function reverse(_0xa6e5x2){ flag= _0xa6e5x2[_0x7f88[3]](_0x7f88[0])[_0x7f88[2]]()[_0x7f88[1]](_0x7f88[0]) } console[_0x7f88[4]]= reverse; console[_0x7f88[4]](_0x7f88[5])
上記のコードを読みやすくすると以下のようになります。
var _0x7f88=["","join","reverse","split","log","ceab068d9522dc567177de8009f323b2"]; function reverse(_0xa6e5x2){ flag = _0xa6e5x2.split("").reverse().join("") } console.log = reverse reverse(_0x7f88[5])
reverse()関数内で、引数として渡されたceab068d9522dc567177de8009f323b2
をsplit("")で一文字ずつに分割し、reverse()で反転し、join("")で分割した文字を結合していることが分かりました。
このままでは、フラグが出力されないため、上記のコードにconsole.error()を追加しました。
var _0x7f88=["","join","reverse","split","log","ceab068d9522dc567177de8009f323b2"]; function reverse(_0xa6e5x2){ flag = _0xa6e5x2.split("").reverse().join("") console.error(flag) // 追加した部分 } console.log = reverse reverse(_0x7f88[5])
Node.jsを使って、上記のコードを実行しました。
$ node > var _0x7f88=["","join","reverse","split","log","ceab068d9522dc567177de8009f323b2"]; undefined > > function reverse(_0xa6e5x2){ ... flag = _0xa6e5x2.split("").reverse().join("") ... console.error(flag) // 追加した部分 ... } undefined > > console.log = reverse [Function: reverse] > > reverse(_0x7f88[5]) 2b323f9008ed771765cd2259d860baec undefined
フラグ
2b323f9008ed771765cd2259d860baec
[Digital Forensics 50 pts] I love images
解法
添付されたファイルgodot.png
の形式を確認すると、PNG image data
であることが分かりました。
画像ファイルなので、EXIFがあるだろうと思い、exiftoolを使ってEXIFを確認しました。
$ exiftool godot.png ExifTool Version Number : 11.16 File Name : godot.png Directory : . File Size : 3.5 kB File Modification Date/Time : 2019:02:08 11:13:53+09:00 File Access Date/Time : 2019:02:08 11:14:30+09:00 File Inode Change Date/Time : 2019:02:08 15:58:43+09:00 File Permissions : rwxrwx--- File Type : PNG File Type Extension : png MIME Type : image/png Image Width : 64 Image Height : 64 Bit Depth : 8 Color Type : RGB with Alpha Compression : Deflate/Inflate Filter : Adaptive Interlace : Noninterlaced Warning : [minor] Trailer data after PNG IEND chunk Image Size : 64x64 Megapixels : 0.004
Warningの部分(下から3行目)に[minor] Trailer data after PNG IEND chunk
とあります。
イメージの終端を示すIENDチャンクの後にフラグがありそうなので、xxdコマンドで確認してみます。
$ xxd godot.png (省略) 00000da0: 0000 4945 4e44 ae42 6082 495a 4745 4352 ..IEND.B`.IZGECR 00000db0: 3333 4a5a 5858 4958 3250 4e5a 5748 5358 33JZXXIX2PNZWHSX 00000dc0: 3243 4d46 5a57 4b4e 5255 5055 3d3d 3d3d 2CMFZWKNRUPU==== 00000dd0: 3d3d 0a
IENDの後に以下の文字列があることが分かりました。
IZGECR33JZXXIX2PNZWHSX2CMFZWKNRUPU======
Base64でエンコードされていると思いデコードしたもののうまくいかなかったので、Base32でデコードしたらフラグが出てきました。
$ echo IZGECR33JZXXIX2PNZWHSX2CMFZWKNRUPU====== | base32 -d FLAG{Not_Only_Base64}
フラグ
FLAG{Not_Only_Base64}
[Malware Reverse Engineering 100pts] I love this guy
解法
添付ファイルScrambledEgg.exe
のファイル形式を確認すると、PE32 executable (GUI) Intel 80386 Mono/.Net assembly, for MS Windows
であることが分かりました。
ScrambledEgg.exe
を実行すると以下のウィンドウが表示されました。
パスワードが分からないため、dnSpyを使ってファイルを調査します。
調査前に、このアプリケーションはGet Flag!!ボタンがクリックされるというイベントが起こった後にフラグが表示されるはずなので、ボタンがクリックされたというイベントがあった際に実行されるコードや入力値(パスワード)をチェックするようなコードの有無に注目することにしました。
すると、ボタンがクリックされた時に実行されると思われるコードを見つけました。
if文の部分でテキストボックスのテキストとvalueに代入された文字列を比較しているので、ここでパスワードのチェックを行っている部分だろうと推測しました。
次に、valueに代入される文字列(正規のパスワード)を調べます。
Letters配列の中身を確認すれば、valueに代入される文字列が分かりそうです。
代入される文字列はFONZY
でした。
これを入力するとフラグが表示されました。
フラグ
flag{I_LOVE_FONZY}
[General Information 50pts] Just Another Conference
問題文
famous Cybersecurity conference runs by OWASP in different locations
解法
OWASP conference
というキーワードをGoogleで検索しました。
以下のAppSecというカンファレンスのページがヒットしました。
フラグ
AppSec
おわりに
比較的簡単な問題しか解けなかったので、Mariaのような問題を解けるように頑張っていきたいです。
他の人のWriteup
Quals: Saudi and Oman National Cyber Security CTFのWriteupは以上です。