好奇心の足跡

飽きっぽくすぐ他のことをしてしまうので、忘れないため・形にして頭に残すための備忘録。

setodaNote CTF writeup [Network]

これは、2021/8/21~2021/9/4の期間で開催された、setodaNote CTFの Network 分野のwriteupです。全体writeupはこちら

tech.kusuwada.com

Host (30)

あなたはある通信を保存したファイルを受け取りました。添付されたファイルを解析し、通信先の Web サーバのホスト名を特定してください。

フラグはホスト名をフラグ形式で答えてください。例えばホスト名が host.example.com であった場合、フラグは flag{host.example.com} となります。

pcapファイルが配布されます。
wireshakで開いてみて、GETしている行を見てみるとHostが書いてありました。

f:id:kusuwada:20210904224314p:plain

もしくはそのままpcapファイルをstringsコマンドで見ても出た。

$ strings host.pcap | grep Host
Host: ctf.setodanote.net

tkys_never_die (50)

うまく爆発を避けれられているといいが。爆発音とともに通信が途切れる間際、後輩からデータが送られてきました。ターゲットが重要なファイルにアクセスしたことを示す証拠だと言い残して。後輩のためにもデータを解析し、重要なファイルの内容を特定してください。

添付されたファイルを解析し、フラグを得てください。

またpcapファイルが渡されます。
strinigsコマンドでファイルを見てみると、どうやらflag.html,flag.pngといったデータをやり取りしてるみたいです。

$ strings tkys_never_die.pcap | grep flag
GET /flag.html HTTP/1.1
    <img src="./flag.png" alt="flag.png" title="The Flag">
GET /flag.png HTTP/1.1
Referer: http://ctf.setodanote.net/flag.html

wiresharkで該当ファルを開き、File > Export Objects > HTTP で抽出してみると、flagが記載されたpngが出てきました。

f:id:kusuwada:20210904224409p:plain:w400

echo_request (120)

組織内の通信を監視している部署から不審な通信データがあるので解析をしてほしいと依頼がありました。通信自体は許可されたプロトコルが使用されているようですが、、、

添付されたファイルを解析し、フラグを入手してください。

pcapファイルが配布されます。
wiresharkで開いてみると、ICMP Protocolの通信が使われていて、その行のInfoにEcho (ping) request ...と書いてあるので、このプロトコルの通信が怪しい。

このプロトコルの通信の中の、L29~ のデータを覗いてみると、66, 6c, ... とascii codeの16進表記でflとなりそうな予感。データをL29~L54(7d)まで抽出してhex -> ascii変換すると、flag{ICMP_Tunneling_T1095}になりました。

stay_in_touch (150)

あなたはある事件の調査としてある人物の通信を監視しています。どうやら誰かと連絡を取り合っているようです。通信データファイルを解析し、やりとりの内容を明らかにしてください。

添付されたファイルを解析し、フラグを入手してください。

またもやpcapファイルが配布されます。Network問だから基本パケットを解析するのかな。
今回はメールのやりとり、IMAP通信が肝のようです。

が、パケットの海を眺めても何も出てこなかった。要復習。

…というところまでが競技中。ほよたかさんのwriteup見てwiresharkの使い方を一つ覚えてから、IMAP通信の内容をUTF8で読んでいきます。

tcp.stream eq 12 みたいなクエリで通信の中身がstream単位で順を追って読みやすくなるみたい。

主要なメールを抜粋。

アカリ課長補佐

 あ、試作機のレポートが
 届いておりましたので転送しておきます。
 なかなかの性能のようです。

 パスワードは別にお送りします。


セトダ
--------------E3A9083942D9027C4375FEE4
Content-Type: application/x-zip-compressed;
 name="Report-AV-T0097.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="Report-AV-T0097.zip"

UEsDBBQAAQAAADBq8FK0Nz5zSgAAAD4AAAATAAAAUmVwb3J0LUFWLVQwMDk3LnR4dAzRMzm6
s5vAM3huF0n2GEKFrarxVD3WvzurjKz9sjA7iD6nWis0GBRcIdcyrQkqliocBi2lCUB6J0hR
UgHzDVCnVx6LnLS5LenqUEsBAj8AFAABAAAAMGrwUrQ3PnNKAAAAPgAAABMAJAAAAAAAAAAg
AAAAAAAAAFJlcG9ydC1BVi1UMDA5Ny50eHQKACAAAAAAAAEAGADNWpx++XnXARJtllL6edcB
0TOVfvl51wFQSwUGAAAAAAEAAQBlAAAAewAAAAAA
--------------E3A9083942D9027C4375FEE4--

ここでファイルが送られてきている様子。encodeがbase64とあるのでdecodeしてみます。

$ echo "UEsDBBQAAQAAADBq8FK0Nz5zSgAAAD4AAAATAAAAUmVwb3J0LUFWLVQwMDk3LnR4dAzRMzm6
> s5vAM3huF0n2GEKFrarxVD3WvzurjKz9sjA7iD6nWis0GBRcIdcyrQkqliocBi2lCUB6J0hR
> UgHzDVCnVx6LnLS5LenqUEsBAj8AFAABAAAAMGrwUrQ3PnNKAAAAPgAAABMAJAAAAAAAAAAg
> AAAAAAAAAFJlcG9ydC1BVi1UMDA5Ny50eHQKACAAAAAAAAEAGADNWpx++XnXARJtllL6edcB
> 0TOVfvl51wFQSwUGAAAAAAEAAQBlAAAAewAAAAAA" | base64 -D > report.zip

パスワードを聞かれたので、またIMAP通信の海に戻ってメールを読んでいきます。

アカリ課長補佐

お疲れ様です。
セトダです。

 先ほどのファイルのパスワードです。

  Yatagarasu-Takama-Kamuyamato2


以上です。
よろしくお願いいたします。

この通りのパスワードを入れるとzipが解凍でき、flagが書かれたテキストが出てきました👍

yes_you_can (150)

精密機械の技術者である古い友人から一通の封筒が送られてきました。中にはあなたに解析してほしいと震えた筆跡で書かれた手紙と1枚の SD カード。SD カードの中には1つのファイルが記録されていました。

添付されたファイルを解析してフラグを入手してください。

dump.logが配布されます。これは車系のCAN通信っぽいぞ!

この辺を参考にしながら環境を構築し、dumpファイルから操作を再生すると、何かわかりそう。

$ cat dump.log | canplayer

先程のICSimを動かすためにmakeする必要があるのだけど、Ubuntu 20.04 にはmakeが入ってなかったのでこちらも合わせて参考にしつつ環境構築。

やっと動かせたので動かしてみると、速度メーターがブンブン動くだけでflagっぽいものは見つからない。これは動いた軌跡を追跡したりする必要がある…?

ここで諦めて競技終了。twitterのwriteup呟きを追っかけてたところ「頻度分析」的なワードを目撃。まさか…!

上のシュミレーションでブンブン振り切れていた速度(244)を取り出してみると3388行。

(1628245600.166569) vcan0 244#000000010D
(1628245600.178027) vcan0 244#0000000147
(1628245600.188333) vcan0 244#0000000187
(1628245600.203577) vcan0 244#0000000178
...(中略)...
(1628245604.964372) vcan0 244#0000000146
(1628245604.979622) vcan0 244#000000019D
(1628245604.995033) vcan0 244#0000000123
(1628245605.005261) vcan0 244#0000006600
(1628245605.020564) vcan0 244#0000006600
(1628245605.035802) vcan0 244#0000006600
(1628245605.051115) vcan0 244#0000006600
(1628245605.061376) vcan0 244#0000006600
(1628245605.076673) vcan0 244#0000006600
(1628245605.091981) vcan0 244#0000006600
(1628245605.102269) vcan0 244#0000006600
(1628245605.117603) vcan0 244#0000006600
(1628245605.132851) vcan0 244#0000006600
(1628245605.148139) vcan0 244#0000006600
(1628245605.158304) vcan0 244#0000006600
(1628245605.173560) vcan0 244#0000006600
(1628245605.188877) vcan0 244#0000006600
(1628245605.199262) vcan0 244#0000006600
(1628245605.209569) vcan0 244#0000006600
(1628245605.224917) vcan0 244#0000006600
(1628245605.240265) vcan0 244#0000006600
(1628245605.255572) vcan0 244#0000006600
(1628245605.270817) vcan0 244#0000006600
(1628245605.286161) vcan0 244#0000006600
(1628245605.296496) vcan0 244#0000006600
(1628245605.311850) vcan0 244#0000006600
(1628245605.327179) vcan0 244#0000006600
(1628245605.337468) vcan0 244#0000006600
(1628245605.352763) vcan0 244#0000006600
(1628245605.368324) vcan0 244#0000006600
(1628245605.383689) vcan0 244#0000006600
(1628245605.399061) vcan0 244#0000006600
(1628245605.409292) vcan0 244#0000006600
(1628245605.424578) vcan0 244#0000006600
(1628245605.439889) vcan0 244#0000006600
(1628245605.455298) vcan0 244#0000006600
(1628245605.470572) vcan0 244#0000006600
(1628245605.485856) vcan0 244#0000006600
(1628245605.501116) vcan0 244#0000006600
(1628245605.511357) vcan0 244#0000006600
(1628245605.526626) vcan0 244#0000006600
(1628245605.541914) vcan0 244#0000006600
(1628245605.557199) vcan0 244#0000006600
(1628245605.567471) vcan0 244#0000006600
(1628245605.582792) vcan0 244#0000006600
(1628245605.598139) vcan0 244#0000006600
(1628245605.608330) vcan0 244#0000006600
(1628245605.623608) vcan0 244#0000006600
(1628245605.639017) vcan0 244#0000006600
(1628245605.654251) vcan0 244#0000006600
(1628245605.669543) vcan0 244#0000006600
(1628245605.684802) vcan0 244#0000006600
(1628245605.700146) vcan0 244#0000006600
(1628245605.710357) vcan0 244#0000006600
(1628245605.725632) vcan0 244#0000006600
(1628245605.740951) vcan0 244#0000006600
(1628245605.756287) vcan0 244#0000006600
(1628245605.771577) vcan0 244#0000006600
(1628245605.786807) vcan0 244#0000006600
(1628245605.802040) vcan0 244#0000006600
(1628245605.812213) vcan0 244#0000006600
(1628245605.827500) vcan0 244#0000006600
(1628245605.842743) vcan0 244#0000006600
(1628245605.858059) vcan0 244#0000006600
(1628245605.868228) vcan0 244#0000006600
(1628245605.883526) vcan0 244#0000006600
(1628245605.898878) vcan0 244#0000006600
(1628245605.914166) vcan0 244#0000006600
(1628245605.924325) vcan0 244#0000006600
(1628245605.939642) vcan0 244#0000006600
(1628245605.954993) vcan0 244#0000006600
(1628245605.970280) vcan0 244#0000006600
(1628245605.985528) vcan0 244#0000006600
(1628245606.000769) vcan0 244#0000006C00
(1628245606.016107) vcan0 244#0000006C00
(1628245606.026317) vcan0 244#0000006C00
(1628245606.041631) vcan0 244#0000006C00
(1628245606.056878) vcan0 244#0000006C00
(1628245606.072224) vcan0 244#0000006C00
(1628245606.087501) vcan0 244#0000006C00
(1628245606.102802) vcan0 244#0000006C00
(1628245606.118081) vcan0 244#0000006C00
(1628245606.128311) vcan0 244#0000006C00
(1628245606.143582) vcan0 244#0000006C00
(1628245606.158933) vcan0 244#0000006C00
(1628245606.169245) vcan0 244#0000006C00
(1628245606.184620) vcan0 244#0000006C00
(1628245606.199960) vcan0 244#0000006C00
(1628245606.210186) vcan0 244#0000006C00
(1628245606.220392) vcan0 244#0000006C00
(1628245606.235635) vcan0 244#0000006C00
(1628245606.250931) vcan0 244#0000006C00
(1628245606.266217) vcan0 244#0000006C00
(1628245606.281453) vcan0 244#0000006C00
(1628245606.296816) vcan0 244#0000006C00
(1628245606.312049) vcan0 244#0000006C00
(1628245606.322353) vcan0 244#0000006C00
(1628245606.337603) vcan0 244#0000006C00
(1628245606.352847) vcan0 244#0000006C00
(1628245606.368184) vcan0 244#0000006C00
(1628245606.378398) vcan0 244#0000006C00
(1628245606.393770) vcan0 244#0000006C00
(1628245606.409106) vcan0 244#0000006C00
(1628245606.419329) vcan0 244#0000006C00
(1628245606.434557) vcan0 244#0000006C00
(1628245606.449888) vcan0 244#0000006C00
(1628245606.465302) vcan0 244#0000006C00
(1628245606.480634) vcan0 244#0000006C00
(1628245606.495862) vcan0 244#0000006C00
(1628245606.511173) vcan0 244#0000006C00
(1628245606.521442) vcan0 244#0000006C00
(1628245606.536704) vcan0 244#0000006C00
(1628245606.552015) vcan0 244#0000006C00
(1628245606.567302) vcan0 244#0000006C00
(1628245606.582578) vcan0 244#0000006C00
(1628245606.597822) vcan0 244#0000006C00
(1628245606.613126) vcan0 244#0000006C00
(1628245606.623269) vcan0 244#0000006C00
(1628245606.638572) vcan0 244#0000006C00
(1628245606.653817) vcan0 244#0000006C00
(1628245606.669091) vcan0 244#0000006C00
(1628245606.679302) vcan0 244#0000006C00
(1628245606.694639) vcan0 244#0000006C00
(1628245606.709998) vcan0 244#0000006C00
(1628245606.720231) vcan0 244#0000006C00
(1628245606.735480) vcan0 244#0000006C00
(1628245606.750917) vcan0 244#0000006C00
(1628245606.761544) vcan0 244#0000006C00
(1628245606.776790) vcan0 244#0000006C00
(1628245606.792070) vcan0 244#0000006C00
(1628245606.802239) vcan0 244#0000006C00
(1628245606.817570) vcan0 244#0000006C00
(1628245606.832844) vcan0 244#0000006C00
(1628245606.848211) vcan0 244#0000006C00
(1628245606.863658) vcan0 244#0000006C00
(1628245606.878981) vcan0 244#0000006C00
(1628245606.894306) vcan0 244#0000006C00
(1628245606.909646) vcan0 244#0000006C00
(1628245606.924935) vcan0 244#0000006C00
(1628245606.940259) vcan0 244#0000006C00
(1628245606.955596) vcan0 244#0000006C00
(1628245606.970880) vcan0 244#0000006C00
(1628245606.986163) vcan0 244#0000006C00
(1628245606.996366) vcan0 244#0000006C00
(1628245607.011704) vcan0 244#0000006100
(1628245607.027052) vcan0 244#0000006100
(1628245607.042279) vcan0 244#0000006100
(1628245607.057530) vcan0 244#0000006100
(1628245607.072860) vcan0 244#0000006100
(1628245607.088218) vcan0 244#0000006100
(1628245607.103633) vcan0 244#0000006100
(1628245607.118876) vcan0 244#0000006100
(1628245607.134166) vcan0 244#0000006100
(1628245607.144414) vcan0 244#0000006100
(1628245607.159718) vcan0 244#0000006100
...(中略)...
(1628245625.883150) vcan0 244#0000007D00
(1628245625.893383) vcan0 244#0000007D00
(1628245625.908700) vcan0 244#0000007D00
(1628245625.924023) vcan0 244#0000007D00
(1628245625.934219) vcan0 244#0000007D00
(1628245625.949538) vcan0 244#0000007D00
(1628245625.964828) vcan0 244#0000007D00
(1628245625.980268) vcan0 244#0000007D00
(1628245625.995532) vcan0 244#0000007D00
(1628245626.010898) vcan0 244#000000011B
(1628245626.026240) vcan0 244#0000000111
(1628245626.041628) vcan0 244#00000001AB

最初の方は1xxの値がランダムに続いていて、突如生前とした数値が連続で並びだします。最初の方は66,6c,61、最後は7D…。これはAsciiCode16進表記でいうところのf,l,a...}なので、この規則正しい範囲のデータがflagになっているっぽい。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

with open('dump.log') as f:
    data = f.readlines()

flag = ""
prev = '00'
for line in data:
    line = line.strip()
    if line[26:29] == '244' and line[-2:] == '00':
        key = line[-4:-2]
        if key != prev:
            flag += chr(int(key,16))
            prev = key

print(flag)

実行結果

$ python solve.py 
flag{can_bus_hacking}

うわー!出たー!ちゃんとデータをもう少し抽出したりして傾向を確かめてみるべきであった。何ならシミュレーションや環境構築全然いらんかった…。

Digdig (200)

組織内の通信を監視している部署からマルウェア感染した端末から他にはない不審な通信が発生していたことが分かり、急ぎ解析してほしいを依頼がありました。どうやら、通信自体は組織内で許可されているプロトコルが使用されていたため外部に通信できた可能性もあり焦っているようです。

添付されたファイルを解析し、フラグを入手してください。

これはNetwork問の他のが出来ていなかったので手つかずのまま終わってしまっていたやつ。pcapファイルが配布されていて、全部で86行しか無い。全部DNS protocol。

ざっと眺めてみると、

15   18.082343   192.168.224.105 192.168.224.20  DNS 99  Standard query 0x000b A 005aa002735f69735f44414d.setodanote.net
19  18.095700   192.168.224.105 192.168.224.20  DNS 99  Standard query 0x000d A 005aa00663655f7472795f53.setodanote.net

こんな感じで、DNS queryの中身が途中からhexっぽい並びになっている。
怪しい箇所を抜き出してみると

005aa002735f69735f44414d.setodanote.net
005aa00663655f7472795f53.setodanote.net
005aa0034d595f464c41477d.setodanote.net
005aa0085f746861747d2066.setodanote.net
005aa00a6c61677b444e535f.setodanote.net
005aa00b5333637572313779.setodanote.net
005aa0076f7272795f666f72.setodanote.net
005aa00420666c6167206973.setodanote.net
005aa0096c61672069732066.setodanote.net
005aa00c5f5431303731217d.setodanote.net
005aa011797d323232323232.setodanote.net
005aa00d20666c6167206973.setodanote.net
005aa00f335f6b33795f3135.setodanote.net
005aa00e20666c61677b3768.setodanote.net
005aa001666c61677b546869.setodanote.net
005aa0105f35336375723137.setodanote.net
005aa000666c616720697320.setodanote.net
005aa00520666c61677b4e69.setodanote.net

ここから冒頭の005aa0を削ると、ちょうど18行あるところに最初が00~11(10進で17)で始まるレコードが完成する。
最初の2桁をindexにして並び替えて、hex to ascii してあげるとflagが出てきました!

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

queries = [
    '02735f69735f44414d',
    '0663655f7472795f53',
    '034d595f464c41477d',
    '085f746861747d2066',
    '0a6c61677b444e535f',
    '0b5333637572313779',
    '076f7272795f666f72',
    '0420666c6167206973',
    '096c61672069732066',
    '0c5f5431303731217d',
    '11797d323232323232',
    '0d20666c6167206973',
    '0f335f6b33795f3135',
    '0e20666c61677b3768',
    '01666c61677b546869',
    '105f35336375723137',
    '00666c616720697320',
    '0520666c61677b4e69']

flag = ''
for i in range(17):
    #print(hex(i), flag)
    for q in queries:
        if q[:2] == hex(i)[2:].zfill(2):
            flag += bytes.fromhex(q[2:]).decode()
            break
print(flag)

実行結果

$ python solve.py 
flag is flag{This_is_DAMMY_FLAG} flag is flag{Nice_try_Sorry_for_that} flag is flag{DNS_S3cur17y_T1071!} flag is flag{7h3_k3y_15_53cur17

途中のDNSから始まるやつが本物でした!
自力で解けたやん!もったいない!と思うけど、競技中はどの問題が自分に解けるかわからないもんね…。

Logger (250)

夕暮れ時、あなたの携帯が鳴動します。相手の番号は不明。非通知は拒否設定のはずと不思議に思いつつ電話に出ると「お前の秘密を知っている」と低い男の声が聞こえすぐに切れてしまいました。直後、あなたの携帯にファイルが添付された空白のメールが届きます。

添付されたファイルを解析してフラグを入手してください。

またpcapファイルが配布されます。今回は1100行。すべてUSB protocolです。

f:id:kusuwada:20211012192116p:plain:w400

leftoverの中身が大事そうなので、これが入っている通信だけを抜き出すには usb.capdata のfliterを適用してあげれば良さそう。

LeftOver capture dataの中身を全部抜き出して眺めてみるとこんな感じ。

...略
0000120000000000
0000121100000000
0000110000000000
0000000000000000
00002c0000000000
0000000000000000
0000090000000000
0000000000000000
0000120000000000
...略

5,6桁目に数値が現れていることが多いので、ここを抜き出してヒストグラムを取ってみると

{'04': 17,
 '05': 6,
 '06': 7,
 '07': 9,
 '08': 27,
 '09': 8,
 '0a': 5,
 '0b': 11,
 '0c': 17,
 '0e': 2,
 '0f': 10,
 '10': 6,
 '11': 17,
 '12': 19,
 '13': 5,
 '14': 2,
 '15': 16,
 '16': 10,
 '17': 18,
 '18': 5,
 '19': 1,
 '1a': 4,
 '1b': 1,
 '1c': 6,
 '27': 1,
 '28': 1,
 '2a': 2,
 '2c': 37,
 '2d': 2,
 '2f': 1,
 '30': 1,
 '37': 1}

04~1c, 27~という感じにカテゴライズできそう。 1c(28d) - 4(4d) = 24d, なので、アルファベットの文字数とそこそこ相関がありそう。ということで4つづらして変換できるものはアルファベットに直してみました。

#!/usr/bin/env python3
# -*- coding:utf-8 -*-

import string
from pprint import pprint

with open('packets.txt', 'r') as f:
    data = f.readlines()

arr = []
for d in data:
    c = d[4:6]
    if c != '00':
        arr.append(c)

# histgram
dic = {}
for a in arr:
    if a in dic.keys():
        dic[a] += 1
    else:
        dic[a] = 1
#pprint(dic)

# 4 shifted alphabet
cand = '****' + string.ascii_lowercase
for a in arr:
    idx = int(a,16)
    if idx < len(cand):
        print(cand[idx], end='')
    else:
        print(' ',end='')

実行結果

$ python solve.py 
one popular bbut unverified explanatin oon for the qwerty arrangement is that it wwas designed to reduce the likelihood of flag qwe keyb ard rty  internal clashhing of typebard s by placing commonly ussed combinatiioons of letters farther froom each oher inside the machine  

なんとなく…文章になってる気がする…。心の目でなら読めるぞ…。アルファベット以外をそのまま出力してみました。

one*2c*popular*2c*bbut*2c*unverified*2c*explanatin*2a*oon*2c*for*2c*the*2c*qwerty*2c*arrangement*2c*is*2c*that*2c*it*2c*wwas*2c*designed*2c*to*2c*reduce*2c*the*2c*likelihood*2c*of*2c*flag*2f*qwe*2d*keyb*27*ard*2d*rty*30**2c*internal*2c*clashhing*2c*of*2c*typebard*2a*s*2c*by*2c*placing*2c*commonly*2c*ussed*2c*combinatiioons*2c*of*2c*letters*2c*farther*2c*froom*2c*each*2c*oher*2c*inside*2c*the*2c*machine*37**28*

spaceが入りそうな2cをspaceに、flag形式から2f{,30}、flag中に出てくる27はleet文字の0っぽいな…。などなどしてみたけど、いい感じにマッピングしきれず時間終了。なんかdelete的なのとか矢印とか混じってたのかなー?

ほよたかさんのwriteupを拝見。ほう!よくあるマップとやらがあるのか!!!今度ちゃんとハリネズミ本を読んでみよう(日本においいてきてしまった)。

対応表についてはこちらが参考になりそう。

そもそもLoggerではshiftを押した・押していないの情報を保持していて、大文字や記号なんかは上の力技では情報落ちしてしまっていた。2バイト目が0,2の情報を持っているっぽい。プログラム組んでみようかと思ったけど、とっても便利なライブラリを見つけたのでこれでやってみた。

github.com

$ python UsbKeyboardDataHacker.py ../logger.pcap 
[+] Found : One<SPACE>popular<SPACE>bbut<SPACE>unverified<SPACE>explanatin<DEL>oon<SPACE>for<SPACE>the<SPACE>QWERTY<SPACE>arrangement<SPACE>is<SPACE>that<SPACE>it<SPACE>wwas<SPACE>designed<SPACE>to<SPACE>reduce<SPACE>the<SPACE>likelihood<SPACE>of<SPACE>flag{QWE_keyb0ard_RTY}<SPACE>internal<SPACE>clashhing<SPACE>of<SPACE>typebard<DEL>s<SPACE>by<SPACE>placing<SPACE>commonly<SPACE>ussed<SPACE>combinatiioons<SPACE>of<SPACE>letters<SPACE>farther<SPACE>froom<SPACE>each<SPACE>oher<SPACE>inside<SPACE>the<SPACE>machine.<RET>

わお。pcapそのまま喰わせて一瞬でflag出た!
このLoggerの読み方とパターンが知れたので、復習してよかった。

tkys_not_enough (250)

せっかく内偵中の後輩から通信データが送られてきたのに。いわく決定的な証拠を掴んだとのことですが、普段とは異なる方法で取得したデータなのか解析ツールにうまく取り込めません。後輩に聞こうにも通信データが送られた直後「やはり君だったか」という聞きなれない男の声を最後に連絡が途絶えてしまっています。あなたは何とかしてこの通信データを解析しなければなりません。

添付されたファイルを解析し、フラグを入手してください。

配布されたpcapファイル、破損しているようでwiresharkで開けない。問題文のとおりだ。

バイナリエディタで見てみると、途中にこんな箇所が。

f:id:kusuwada:20211012192142p:plain:w400

バイナリエディタでこのFFFFの部分を一旦削ってみると、少しだけ修復されてwiresharkでも開けるようになった。(が、まだ破損していると言われる)
wiresharkからの情報では不十分っぽかったので、pcapファイルを文字エンコードできる部分だけ抽出してみる。

$ strings tkys_not_enough.pcap > strings.txt

と、ちょっと通信が見えるように。
5個ほど通信がやり取りされているようで、全てtext/html。本体に時々可読部があったのでつないでみると、

  • If you've got a problem with the world, change yourself.
  • I'm kidding.

うーん。わからん。何か見方を変えないといけないのかな?
とにかく間に挟まったバイナリ部分を何とかする必要がありそう。

バイナリファイルが挟まってそう、ということでforemostコマンドで分解を試みるも何も出てこず。ならばbinwalkで…!

$ binwalk -e tkys_not_enough.pcap 

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
535234        0x82AC2         gzip compressed data, from Unix, last modified: 1970-01-01 00:00:00 (null date)
537545        0x833C9         gzip compressed data, from Unix, last modified: 1970-01-01 00:00:00 (null date)

おーなんか出てきた。
抽出したファイルに平分で直接flagが書いてありました👍

$ cat 82AC2 
I'm going to practice making origami cranes so that I can fold them for you some day, okay?


flag{netw0rk_shell_2000}

とても力技だったので、もうちょっとスマートに解ける方法はないのかな?と、ここでまたほよたかさんのwriteupをカンニング。

いつも解析対象にしているpcap capture fileのフォーマットではないらしく、windowsでコマンドで取得できるetlというフォーマットのデータらしい。詳細は上記writeupやパケットキャプチャーソフトをインストールせずにパケットキャプチャーする方法参照。

これをpcapに変換するツール

github.com

を皆さん使ってpcapにして解いているっぽかったけど、exeファイルを実行する必要があるのでwindows機かそれなりに環境を用意する必要がありそう。しかしフォーマットがちゃんと知れて良かった。writeupありがたい。