🚩

WaniCTF2023 ゆるく出た - writeup

2023/05/18に公開

こんにちは。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は以下のものです。
https://github.com/Sybil-Scan/imagemagick-lfi-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に参加していきたいと思います。

GitHubで編集を提案

Discussion