車輪の再開発ブログ

Python & CTF Beginner!

picoCTF 2022 Torrent Analyze writeup

コンテスト中に解けなかった問題の復習です。

問題

SOS, someone is torrenting on our network. One of your colleagues has been using torrent to download some files on the company’s network. Can you identify the file(s) that were downloaded? The file name will be the flag, like picoCTF{filename}. Captured traffic.

ヒント

Download and open the file with a packet analyzer like Wireshark.

You may want to enable BitTorrent protocol (BT-DHT, etc.) on Wireshark. Analyze -> Enabled Protocols

Try to understand peers, leechers and seeds. Article

Articleのリンク What are seeds, peers and leechers in Torrents' language?

The file name ends with .iso

解法

まず、DeepLに問題文の翻訳をお願いします。

SOS、誰かが私たちのネットワーク上でtorrentしています。あなたの同僚の一人が、会社のネットワーク上でtorrentを使用していくつかのファイルをダウンロードしています。ダウンロードされたファイルを特定できますか?ファイル名はpicoCTF{filename}のようなフラグになります。捕捉されたトラフィック

そもそも、torrentってなんだろうと思ったので、少しググって知識を仕入れる。

ヒントにあった peers, leechers, seedsの記事を読む。 DeepL翻訳を貼っておく。

シードとは、クライアントでトレントファイル(あなたがダウンロードしようとしているのと同じファイルとします)を開いている人のことで、あなたと彼らの唯一の違いは、彼らはすでにダウンロードした完全なファイルを持っていて、今「シード」していること、つまり、ピアとファイルを共有しているが、他の人からファイルのどの部分もダウンロードしていないことです。

ふむふむ。

リーチャーとは、ダウンロードとアップロードを同時に行っている人のことを指します。ユーザーがすでに持っているファイルの共有を開始し、他のユーザーがすでにアップロードしたもの、またはトレントファイルをアップロードしている最中のものをダウンロードすると、そのユーザーはリーチャーになります。

むむむ。

ピアとは、スウォームでファイルのダウンロードとアップロードの両方を行う人のことです。ファイルは断片的にダウンロードされます。ダウンロードしたファイルをアップロードすると、自動的にアップロードが始まります。

あんまり分からないけど、flagを得るには、pcapのファイルから、torrentが使われているファイル名を特定するということらしい。

全然、わからないので、他の人のwriteupを読む。

もう一つ、このpcapファイルの中にファイル名を見つけることはできません。これは少し難しいです。トレントについて読めば、遅かれ早かれ、トレントファイルのSHA1合計であるinfo_hashという用語に行き着くことでしょう。それを調査してみましょう!

とのこと。pcapファイルには、flagになるファイル名は含まれていないので、info_hashを見つけるのが先になると。なるほど。けど、Wiresharkプロトコルのところに、BT-DHT なんて現れない・・・。kusuwada先生のwriteupを参考にすると・・・

さっきもUDPしかヒットしなかったし、BT-DHTとその下の bittorrent_dht_udpをポチッと有効にしてみました。

これで、とりあえず、ProtocolにBT-DHTが表示されるようになりました。

これで、あとは、1つ目のwriteupに書かれているように、 info_hash を見つけて、ググれば・・・ https://www.google.com/search?q=e2467cbf021192c241367b892230dc1e05c0580e ubuntuのisoがヒットします。

これを、フラグとして提出すればOK!