このブログは、大国魂(ITブログ) Advent Calendar 2018 の25日目です。
この記事の内容について
インフラ運用者ではあるもののセキュリティに興味があるので SECCON 2018 オンライン予選 に参加した筆者が、良質な Writeup がたくさんあるにもかかわらず自身の振り返りも兼ねて解けた問題の Writeup を書いた、というものになります。
予選終了後、便利に参照させていただいていた記事はこちらになります。
今回は CTF 参加している感が高かった Crypt の Boguscrypt について振り返ります。
Boguscrypt
問題文
Hey, Can you decrypt the file?
このファイルを decrypt できるかな?という問題です。
ファイルの中身
challenge.pcap
- その拡張子が示すとおりの pcap ファイル。Wireshark などで開いてみましょう。
dec
- file コマンドで確認すると実行ファイルということがわかります。
[root]# file dec
dec: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, not stripped
- 実行権限を付与して実行すると
key
という値の入力を求められるので適当な値を入れると、 gethostbyaddr~ というメッセージが表示されます。
[root]# ./dec
Key?:aa
gethostbyaddr: No address associated with name
flag.txt.encrypted
- file コマンドで確認すると data ファイルということがわかります。
[root]# file flag.txt.encrypted
flag.txt.encrypted: data
- 中身をそのまま見ようとすると以下のようになり、このファイルを decrypt すれば flag.txt を得られそうです。
- 名前的に、decrypt してくれるのはおそらく dec でしょう。
[root]# cat flag.txt.encrypted
PPw-;=K<CLUUYBR
SRG
_
EEg
解法
解き方
- dec を用いて flag.txt.encrypted を取り出す問題と推測できます。
- 前述のとおり dec を実行するとアドレスと関連づいた名前がないというようなメッセージが表示されます。
- 何らかの名前とアドレスを紐づけるものが必要で、それは残された pcap ファイルの中にありそうです。
- pcap ファイルの中にある DNS 通信より 127.0.0.2 に対して
cur10us4ndl0ngh0stn4m3
という名前が返されていることがわかります。 - これを hosts ファイルに記載したうえで dec を実行することで flag.txt を得られ、その中にフラグ
SECCON{This flag is encoded by bogus routine}
が記載されています。
たどり着くまでの経緯
-
Dropbox LAN sync Discovery Protocol
という通信が気になって Dropbox の脆弱性で大きなものがなかったかなど調べる。 - その他の通信についてはざっと見る程度で DNS のレコードにたどり着いたところでおっとなる。
Standard query response 0xaf5e PTR 2.0.0.127.in-addr.arpa PTR cur10us4ndl0ngh0stn4m3 NS localhost A 127.0.0.1 AAAA ::1
- /etc/hosts に
127.0.0.2 cur10us4ndl0ngh0stn4m3
レコードを追記して dec を実行したところフラグがでてきました。
[root]# ./dec
Key?:test
( gethostbyaddr~ が表示されていない)
[root]# ls
Boguscrypt.zip challenge.pcap dec flag.txt flag.txt.encrypted
[root]# cat flag.txt
SECCON{This flag is encoded by bogus routine}
問題について
pcap を扱う問題の基本の「き」のような問題でした。
この問題についてはフラグとは別方向に進んでしまうことなくすんなりと解けました。
通信量がそれほど多くなかったので Wireshark の解析機能を使いませんでしたが、より大きなファイルの場合は解析機能も使って効率よくヒントを探せるようにしておくとよさそうです。
ネットワークとOSの両方のレイヤの基本を抑えていれば解ける良問ではないかなと思います。
そういえば入力する key に何の意味があったのかまったく気にしていませんでした。。。
最後に
今回はアドベントカレンダーを書くという話と Writeup を書いてみたかったという欲望によりここ4日の投稿となりましたが、来年は予選直後ぐらいの投稿を目指して頑張ってみようと思います。
それではよいお年を!