IPv4アドレスとポート番号が与えられた。
指定のアドレスとポート番号を
問題文より、このサービスのソースコードは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
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
:
{..{.{./db.sqlite3}..}
を投稿し、ファイルdb.sqlite3
の内容を得た。
db.sqlite3
を開いて観察すると、
他のユーザの投稿も含めた投稿一覧を見ることができたが、flagは見当たらなかった。
そこで、この投稿一覧から怪しい投稿を探した。その結果、{{.{./flag124.txt}}
という投稿が見つかった。
IDの情報を使ってこの投稿を見ると、flagを含むデータが埋め込まれていた。 (他のユーザの投稿も普通に見ることができた)
I obtained the contents of db.sqlite3
by submitting {..{.{./db.sqlite3}..}
.
Opening db.sqlite3
via
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)