kimtetの日記

CTFのwriteupとか、勉強したこととか

SECCON 2014 横浜大会 CTF ネットワーク予選 write up 問2

そいでは問2の解説をするよ。 02フォルダの中にquestion.txtとnmaped.pcapというファイルがある。 question.txtを開くとこんな感じ。

問2

開いてるTCPポートを列挙せよ

nmaped.pcap は見たければ下からダウンロードしてね。

問題の考え方

どうやらnmaped.pcapファイルはnmapを実行したネットワークのパケットをキャプチャしたものらしい。pcapファイルはパケットキャプチャファイルとして一般的な形式なので、それ用のアプリケーションで開くことができる。あとは以下の2つをどうにかして求める。

  • 問題の対象となっている「開いているTCPポート」をもつサーバはどれか。
  • 何をもってして「開いているTCPポート」と判定するか。

対象となっているサーバは、nmap実施元がどこかに対して大量のSYNパケットを投げているはずなので、それを探す。 そして「開いているTCPポート」はnmap実施元からのSYNパケット(こんにちは!)に対してSYN ACKパケット(ようこそ!)をお返事しているはず。よって、そのようこそメッセージ(SYN ACKパケット)を抽出してその送信元のポート番号をリストすればいい。

解法

pcapファイルはパケットキャプチャソフトのWiresharkで開くことができる。 開いたら、SYNパケットを投げているnmap実施元を探るために filter: のところに以下を入力する。

tcp.flags.syn==1

f:id:kimtet:20140924002417p:plain

ざっと見て、nmap実施元が 192.168.44.131 で サーバが 192.168.44.133 なんじゃないかなというのがわかる。

次に、192.168.44.133 からのSYN ACKパケットを探すため、フィルタに以下を入力する。

ip.src == 192.168.44.133 && tcp.flags.syn==1 && tcp.flags.ack==1

f:id:kimtet:20140924002418p:plain

ちょっとたくさん出てくるし、重複しているのもあるけれど目grep(人力で抽出作業の意)でどうにかなる量なので、今回はそのまま回答!

最後力技になっちゃったのはちょっと反省。たとえば開いているポートが10000ポートとかあった場合を考えると、何らかの方法で機械的に抽出しないといけないよね。ただ、今回は回答方法が回答用紙にペンで記入だったため、人間が書ける量に制限されてて助かりました。

しかし、回答用紙に回答を記入するハッカーの大会って斬新だったわ。試しに入力して正解かどうか確かめるっていうのができないのが結構プレッシャーでした。

参考情報