WiresharkをDockerで動かして使ってみるのが目標です。
Wireshark Docker
Dockerhubのページはここ https://hub.docker.com/r/linuxserver/wireshark ですが、githubリポジトリに推奨ビルド方法が詳しく書かれているのでそれを参考に進めていきます。
適当にディレクトリを作成したら README の docker-compose.yml を配置します。
❯❯❯ mkdir docker_wireshark_sandbox
❯❯❯ cd docker_wireshark_sandbox/
# ↓からコピペ
# https://github.com/linuxserver/docker-wireshark#docker-compose-recommended-click-here-for-more-info
❯❯❯ cat docker-compose.yml
---
version: "2.1"
services:
wireshark:
image: lscr.io/linuxserver/wireshark:latest
container_name: wireshark
cap_add:
- NET_ADMIN
security_opt:
- seccomp:unconfined #optional
network_mode: host
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- /path/to/config:/config
ports:
- 3000:3000 #optional
- 3001:3001 #optional
restart: unless-stopped
❯❯❯ docker compose pull
❯❯❯ docker compose up -d
localhost:3000
でGUIのWiresharkが起動しています。ログを表示させたいときは
❯❯❯ docker logs -f wireshark
[migrations] started
[migrations] no migrations found
───────────────────────────────────────
██╗ ███████╗██╗ ██████╗
██║ ██╔════╝██║██╔═══██╗
██║ ███████╗██║██║ ██║
██║ ╚════██║██║██║ ██║
███████╗███████║██║╚██████╔╝
╚══════╝╚══════╝╚═╝ ╚═════╝
Brought to you by linuxserver.io
───────────────────────────────────────
To support LSIO projects visit:
https://www.linuxserver.io/donate/
───────────────────────────────────────
GID/UID
───────────────────────────────────────
User UID: 1000
User GID: 1000
───────────────────────────────────────
...
こんな感じでリアルタイム閲覧できます。
使ってみる
ksnctfの8問目を解いてみます。
https://ksnctf.sweetduet.info/problem/8
配布されているq8.pcap
をコンテナに送ります。
❯❯❯ docker ps
# CONTAINER ID確認
❯❯❯ docker cp q8.pcap <CONTAINER ID>:/home/kasm-user/q8.pcap
これでGUIのOpenFileからq8.pcapを選択できるようになります。

ここからは解法です。
パケットの中に200OKしているものがあるので、Follow>TCP streamをします。

GET /~q8/ HTTP/1.1
Host: ctfq.sweetduet.info:10080
Connection: keep-alive
Authorization: Basic cTg6RkxBR181dXg3eksyTktTSDhmU0dB
User-Agent: Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.162 Safari/535.19
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ja,en-US;q=0.8,en;q=0.6
Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.3
HTTP/1.1 200 OK
Date: Sat, 26 May 2012 20:54:05 GMT
Server: Apache/2.2.15 (CentOS)
Last-Modified: Sat, 26 May 2012 12:24:46 GMT
ETag: "422da-b8-4c0ef920b3f8e"
Accept-Ranges: bytes
Content-Length: 184
Connection: close
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Q8</title>
</head>
<body>
<p>Congratulations!</p>
<p>The flag is q8's password.</p>
</body>
</html>
認証に成功するとThe flag is q8's passwordだと教えてくれるようです。Authorization: Basic cTg6RkxBR181dXg3eksyTktTSDhmU0dB これをBase64でデコードします。
❯❯❯ echo "cTg6RkxBR181dXg3eksyTktTSDhmU0dB" | base64 -d
q8:FLAG_5ux7zK2NKSH8fSGA
感想
CTF始めたての頃、あせってWindows版をインストールした経緯があります。でもCTFのときぐらいしか使わないため、もっとスマートに使えないかなあと思っていました。これ以外のツールもDockerを利用すれば簡単に使い捨てられて良いですね。