DEFCON CTF 23 Quals 参加

DEFCON っていう CTF のオンライン予選に参加しました。今回は wasamusume としてではなく、 Team Enu さんに加わらせて頂きました。合宿形式でしたので、いろいろな方からアイデアをもらうことができ、楽しく有意義な時間を過ごせました。ありがとうございました。以下のページに、公式な予選参加レポートが!

WideAngle(セキュリティレポート)|NTT Com 法人のお客さま

ということで、 1 ポイントの問題ではありますが、解くことが出来たので writeup を書きます。

knockedupd (Reverse Engineering, 1 point)

You went and got it knockedup.
Download
knockedupd_71a592a753bf9dcd7d7ad5fa69b2bab3.quals.shallweplayaga.me

まず、 knockd というものがあるらしいです。これは、特定のパターンでパケットを投げると、ポートの開閉などの何らかの動作をさせることが出来るものみたいです。今回配布されているバイナリも、実行すると knockd.conf を要求してきたり、インタフェースを使おうとするので、多分同じようなことをするものだと考えました。よって、何らかのパケットを投げるとポートが開いてフラグがゲット出来るのではと考えましたが、 knockd.conf は分からないし、バイナリから情報を得るしかありません。

とりあえず、 strings すると /sbin/iptables -I KNOCKEDUPD 1 -s %IP% -p tcp –dport 10785 -j ACCEPT なんていうのを発見しましたので、パケットを投げて開くであろうポートはこれに違いないでしょう。しかし、まだ何を投げれば良いのか分かりません。

次に、デコンパイルして頂き、それを眺めました。 strings で出てきたコマンドは、確かにあります。他にも iptables とか叩きそうな感じでしたが、デコンパイラの限界なのか、読みにくいように作られているのか、僕の力でここから情報を得ることは難しかったです。ただ、 pcap_setfilter() とかいう関数を実行しているのを見つけ、このフィルタが分かれば良いんじゃないかと、なんとなく思いました。なので、とりあえず、これまでほとんど使ったことのない gdb を頑張って使ってみましたが、そう簡単にはいきません。じゃあもうメモリダンプ取ってしまえと思って、これまた普段全くやったことのないメモリダンプの取得を行い、その内容を目 grep しました。

すると、なんと (udp dst port 13102 or 18264 or 18282) とかいう文字列があるじゃないですか。怪しすぎるので、その順番通りに、 13102/udp → 18264/udp → 18282/udp パケットを投げてみました。まずはローカルで試すと、そんなチェイン無いよって言われたので、間違いなく iptables を叩いていることが分かりました。あとはリモートにも同じパケットを投げて 10785/tcp にアクセスすると、見事にフラグが手に入りました。

The flag is: Kn0ck kn0ck, Wh0 it is?

なお、メモリダンプの中には /bin/bash -c ” /sbin/iptables -I KNOCKEDUPD 1 58 -s %IP% -p tcp –dport 9889 -j ACCEPT” とか、 (udp dst port 31717 or 35314 or 39979 or 15148 or 14661) とかいう文字列もあって、先ほどと同様に 31717/udp → 35314/udp → 39979/udp → 15148/udp → 14661/udp とパケットを投げると 9889/tcp がオープンするんですが、そこに接続しても入力待ちとなるだけで、詳細は不明でした。多分別の問題なんだと思います。

以上です。


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です