Emojibook 2

IPv4アドレスとポート番号が与えられた。
指定のアドレスとポート番号をFirefoxのアドレスバーに入れてアクセスすると、 ログインしてノートを投稿できるサービスが動いていた。
問題文より、このサービスのソースコードはEmojibookと同じらしい。

とりあえずEmojibookと同様に{..{/flag.txt}..}を投稿してみたが、Server Errorとなった。

読み込むファイル名を決める前に{}を消す処理があるので、 ..の間に{を挟むことで、..を消す処理で消されるのを回避し、上のディレクトリのファイルを読むことができる。
例えば、{..{.{./notebook/settings.py}..}を投稿することで、settings.pyの内容を送らせることができる。

settings.pyには以下の部分があり、ファイルdb.sqlite3があることが読み取れる。

A pair of an IPv4 address and a port number was given.
Accessing to the site by putting the address and the port number to the address bar of Firefox, a service on which we can log in and submit notes was running.
Also the challenge description suggested that the source code of the service is the same as Emojibook.

Firstly I tried sending {..{/flag.txt}..} just like I did in Emojibook, resulting in Server Error.

Since { and } are removed before determining the file name to read, Putting { between .. will prevent it from being removed by removing .. and enable to refer the parent directory.
For example, we can have it send the contents of settings.py by submitting {..{.{./notebook/settings.py}..}.

settings.py has this part, which is suggesting that there is a file db.sqlite3:

DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'db.sqlite3', } }

{..{.{./db.sqlite3}..}を投稿し、ファイルdb.sqlite3の内容を得た。

TkSQLitedb.sqlite3を開いて観察すると、 他のユーザの投稿も含めた投稿一覧を見ることができたが、flagは見当たらなかった。
そこで、この投稿一覧から怪しい投稿を探した。その結果、{{.{./flag124.txt}}という投稿が見つかった。

IDの情報を使ってこの投稿を見ると、flagを含むデータが埋め込まれていた。 (他のユーザの投稿も普通に見ることができた)

I obtained the contents of db.sqlite3 by submitting {..{.{./db.sqlite3}..}.

Opening db.sqlite3 via TkSQLite and observing, I found a list of notes including notes of other users, but I didn't find the flag.
Then, I searched for interesting note from the list of notes, finding a note {{.{./flag124.txt}}.

I viewed the note using the ID, finding a data that contains the flag is embed. (I found that other users' notes were also visible without any obstacles)

ractf{dj4ng0_lfi_rce_not_unintended}

RACTF 2021