ぴよこのーと

ぴよぴよな技術者のノートです(´・ω・`)

CTF for Girlsの第7回ワークショップに参加しました WriteUp⑤

今回は、中級問題2の復習をします。

5_[中級問題2]

通信の痕跡からflagを見つけよう!

pcapファイルの中身を確認します。

DNSプロトコルがたくさんあります!
172.168.0.2(クライアント)が172.168.0.1(DNSサーバ)にリクエストを投げているようです。

f:id:ukri021:20170625181815j:plain

例えば、No1のパケットでは、typeがTXTなので、"1.c4g17"に設定されたTXTレコードは何?(nslookup -q=txt 1.c4g17)と問い合わせて、
No2のパケットでそのような名前はありませんと返ってきているみたいです。

f:id:ukri021:20170625201141j:plain

DNS(Domain Name System)とは

IPアドレスとホスト名をマッピングして相互解決するための仕組みです。
ドメインDNS情報をゾーン情報と呼びます。そして、ゾーン情報は「資源レコード」と呼ばれる1行単位の情報が集まってできています。資源レコードには、ドメイン名と対応する登録情報、登録レコードの「タイプ」が記録されています。
例えば、ドメイン名にIPアドレスが対応づけられているなら、タイプは「A」(Addressの略)となります。

主なレコードのタイプです。
f:id:ukri021:20170625200445j:plain

TXTレコードは、送信メールアドレスの他者によるなりすましなどを防ぐためにも使われるようです。その場合は、SPFレコードとも呼ばれます。


【参考】
DNSの仕組みと運用(1):DNSの仕組みの基本を理解しよう - @IT

なりすましメール撲滅に向けたSPF(Sender Policy Framework)導入の手引き:IPA 独立行政法人 情報処理推進機構


データ返ってきているパケットはないか確認したところ、No204のパケットでflagが返ってきていました(*'▽'*)

f:id:ukri021:20170625203335j:plain

CTF for Girlsの第7回ワークショップに参加しました WriteUp④

今回は、中級問題1の復習をします。

4_[中級問題1]

quiz2_1.pcapファイルからflagを見つけてください!


pcapファイルが与えられるので中身を確認します。
全体像を把握するために、「統計」→「プロトコル階層」で統計情報を確認します。
今回は、ICMPが怪しそうです。
f:id:ukri021:20170625152517j:plain

なので、「フィルタとして適用」→「選択済み」でフィルタリングします。
f:id:ukri021:20170625152525j:plain

f:id:ukri021:20170625152534j:plain

ICMP(intrnet control message protocol)とは

ICMPはIPによる通信をサポートするプロトコルです。
pingコマンドやtracerouteコマンドで利用されています。
ICMPでは、エラーの内容や通信状態を知らせる情報をメッセージに書き込み、そのメッセージをIPパケットで運びます。
f:id:ukri021:20170625161629j:plain
ICMPでは、タイプとコードを組み合わせることで、エラーや問合せのメッセージが
細かく伝わるようになっています。

f:id:ukri021:20170625171030j:plain

【参考】
日経NETWORK編 (2014)『図解でわかるネットワークプロトコル日経BP社 p. 129を参考に作成.

見てみると、エコー要求とエコー応答が繰り返されているようですが、データサイズの違うパケットがあり、その中にFLAGが隠されていました(*'▽'*)

f:id:ukri021:20170625172406j:plain

CTF for Girlsの第7回ワークショップに参加しました WriteUp③

今回は、初級問題3の復習をします。

3_[初級問題3]

サーバが本当に受け取ったものは?

pcapngファイルが与えられるので、Wiresharkで開き、中身を確認します。
今回は、パケットがたくさんあります。
f:id:ukri021:20170624210152j:plain

なので、全体像をつかむために、「統計」→「プロトコル階層」でプロトコルの使用状況を確認してみます。
f:id:ukri021:20170624214407j:plain

なんとなく、Telnetが怪しそうです。
f:id:ukri021:20170624212848j:plain

ちなみに、pcapファイルの中で怪しいプロトコルを見つけるときは、
以下2つの観点で探すとよいそうです。
 ①平文なプロトコル・・・TELNETFTP、HTTPなど
 ②割合が少ないプロトコル

セッションを確認したいパケットの1つを選択し、「追跡」→「TCPストリーム」でセッションを確認していきます。
ちなみにPacket Detailペインの「Stream index」でセッションの番号が確認できます。
f:id:ukri021:20170624220700j:plain

右下の「ストリーム」でセッションを移動できます。
1回目のセッション
パスワードを3回間違えて入力し、セッションが強制終了されています。
f:id:ukri021:20170624220756j:plain

2回目のセッション
2回目のログインで成功しています。。が、このままではFLAGではありません。
f:id:ukri021:20170624231304j:plain

Telnetでは、キーボードから1文字入力するごとに1文字ずつ8bitに変換され、その1文字(8bit)がTCPセグメントのペイロード部に格納され、リモートホストへ送信されます。
また、文字情報以外にもBackspaceやTabといった特殊なキーをキーボードから押したという情報もリモートホストへ伝えられます。
【参考】
http://www.7key.jp/nw/technology/protocol/telnet.html


1パケットずつ入力文字を確認していくと、No350のパケットで送信されているデータは「\b」のため「.」の部分は、バックスペースです。
f:id:ukri021:20170624230547j:plain

つまり、「m」を入力した後に、バックスペースで文字を消しているようです。
f:id:ukri021:20170624232018j:plain

ふむふむ(´・ω・`)

3回目のセッション
でも大丈夫、最後に間違えずにパスワードを入力してくれているセッションがありました(*'▽'*)
f:id:ukri021:20170624233443j:plain

CTF for Girlsの第7回ワークショップに参加しました WriteUp②

今回は初級問題2の復習をします。

2_[初級問題2]

flagのパスワードを見つけ出せるかな?

今度もpcapngファイルが与えられるので、Wiresharkで開き、中身を確認します。

192.168.32.128と192.168.32.129の通信のようです。
No.8のパケットでクライアント(192.168.32.128)がHTTP GETリクエストを投げましたが、
No.10のパケットでWebサーバ(192.168.32.129)からHTTP 401Unauthorized(このリソースのアクセスには適切な認証が必要)が返ってきて失敗していることがわかります。

f:id:ukri021:20170624183356j:plain

ここでステータスコード401Unauthorizedは、認証に失敗したことを示すエラーコードです。
WWW-Authenticateヘッダにより、サーバが提供する認証方式を知ることができます。

Packet Detailsペインで、レスポンスの詳細を確認してみます。
このサーバは、Basic認証をサポートしていることがわかります。
ちなみに「relm」はサーバ上でこのリソースが属しているURL空間の名前だそうです。

f:id:ukri021:20170624193843j:plain

Basic認証

Basic認証は、ユーザ名とパスワードによる認証方式です。
ユーザ名とパスワードは、Authorizationヘッダに入れてリクエストごとに送信します。
Authorizationヘッダの内容は、認証方式(Basic)に続けてユーザ名とパスワードを「:」で連結しBase64エンコードした文字列です。
ちなみに、Base64エンコーディングは、簡単にデコード可能です。
つまり、ユーザ名とパスワードが平文でネットワーク上を流れているのと同じなので、Basic認証を使う場合には、それが許される程度のセキュリティ強度でよいのか、SSL/TLS通信にし通信路上で暗号化するのかを検討する必要があります。

【参考】
www.amazon.co.jp


さらにみていくと、2回目のリクエストで、Http 200OKが返ってきていることがわかります。
f:id:ukri021:20170624200056j:plain
認証情報を入力して、認証を突破したのでしょうか?
中身を見てみると、Authorizationヘッダの中に認証方式(Basic)に続けて、Base64エンコードされた文字列が入っていることがわかります。
f:id:ukri021:20170624200104j:plain

デコードは、Wiresharkがしてくれています。
ユーザ名「flag」のパスワードが答えでした(*'▽'*)
f:id:ukri021:20170624201044j:plain


ちなみに、セッションを確認したいパケットの上で右クリック→「追跡」→「TCPストリーム」を選択すると、コネクション切断までの通信ログを表示することができます。
また、必ずしもセッションの最初のパケットを指定しなくても大丈夫です。
どれか1つのパケットを指定すれば、同じIPアドレスTCPポートを持つパケットが自動的に抽出されます。
複数のセッションが存在する場合には、セッション毎に表示してくれます。
f:id:ukri021:20170624214202j:plain
f:id:ukri021:20170624203329j:plain

CTF for Girlsの第7回ワークショップに参加しました WriteUp①

CTF for girlsの第7回ワークショップに参加してきました。
CTF4G - CTF for Girls

ワークショップでは、はじめにネットワークの講義があり、そのあとに演習問題を解きました。
ワークショップの中で詳しい解説がありましたが、復習もかねてWriteUpを書きたいと思います。
pcapファイルやpcapngファイル(パケットが記録されたファイル)が与えられ、そこからflagを見つける形式でした。


今回は、初級問題1の復習をします。

1_[初級問題1]

Webページからダウンロードした画像を見つけ出そう!

pcapngファイルが与えられるので、Wiresharkで開き、中身を確認します。

192.168.32.192と192.168.32.55の通信のようです。
No.20のパケットでクライアント(192.168.32.129)がGETメソッドで、jpeg形式のファイルを要求し、
No.35のパケットでWebサーバ(192.168.32.55)がjpeg形式のファイルを返していることがわかります。

f:id:ukri021:20170624180905j:plain

そこで、Wiresharkの機能を利用し画像を保存します。
「ファイル」→「オブジェクトをエクスポート」でデータ部分の保存ができます。
今回の通信プロトコルはHTTPなので、HTTPを選択すると、
f:id:ukri021:20170624214158j:plain

jpeg形式のファイルが見つかったので、保存します!
f:id:ukri021:20170624174858j:plain

保存した画像の中に、Flagが隠されていました(*'▽'*)
f:id:ukri021:20170624175818j:plain