WaniCTF2023 ゆるく出た - writeup
こんにちは。calloc134です。
前回のRicercaCTFに引き続き、WaniCTF2023にも参加しました。
開始すぐに参加して、二時間くらいで四問解きました。
そのあとはweb以外にもトライしようと思ったのですが、気が抜けてしまい放置してしまいました…
とりあえず解けた問題を共有します。
IndexedDB
まず以下のような画面が表示されます。
任意のパスを指定するとリダイレクトされますが、このリダイレクトはJavascriptにて行っており、リダイレクト前のレスポンスにフラグが存在します。
Extract Service 1 & Extract Service 2
まず以下のような画面が表示されます。
任意のファイルをアップロードすると、以下のようなエラーが表示されます。
ここで、docxファイルの中身がzipファイルであるということを念頭に置きます。
そして、内部の処理ではzipファイルを展開して
word/document.xml
を読み込んでいることがわかります。
ここでは、zipファイルにシンボリックリンクを埋め込み、word/document.xml
にフラグへのシンボリックリンクを配置することで、フラグを読み取ることができます。
このzipファイルの作成にはWSLを利用しました。
以下のようなディレクトリ構成でzipを作成します。
./
├── word
└── document.xml (これが/flagへのシンボリックリンク)
その後、以下のコマンドで、シンボリックリンクを含んだzipファイルを作成します。
zip -ry TARGET.zip word/
これをアップロードしてフラグを読み取ります。
同じ手法で、Extract Service 2も解くことができます。
Certified 1
まず以下のような画面が表示されます。
エラーより、バックエンドでImageMagickを利用していることがわかります。
ここで、ImageMagickのLFIの脆弱性を探しました。
最終的に、CVE-2022-44268で攻撃が通りました。
利用したPoCは以下のものです。
以下のコマンドで、エクスプロイト画像を生成します。
python3 generate.py -f "/flag_A" -o exploit.png
このようにエクスプロイト画像を生成します。
アップロードすると以下のような画像が生成されます。
これをwgetでダウンロードした後、ファイルを解析します。
以下のコマンドを利用します。
identify -verbose (output).png
Raw profile typeに付属している16進数の値をデコードすると、フラグが得られます。
python3 -c 'print(bytes.fromhex("464c41477b3768655f736563306e645f663161395f31735f77343174316e395f6630725f793075217d0a").decode("utf-8"))'
おわりに
以上でWaniCTF2023のwriteupを終わります。
初心者でしたが、なかなか楽しく解けました。
他のwriteupも色々読んでいて、気が付かされるものばかりでした。
今後も、積極的にCTFに参加していきたいと思います。
Discussion