NoSQL

WebページのURLと、サーバのファイル一式が与えられた。
Webページにはログインフォームがあった。

web-nosql/app/routes/login.js を見ると、ログインの判定は mongodbfindOne 関数を用いて行っていることがわかった。
そこで、「mongodb findone」でググると、以下のページが見つかった。

An URL of a web page and the files for the server were given.
The web page had a login form.

Reading web-nosql/app/routes/login.js, I found the checking for logging in using a function findOne for mongodb.
I googled "mongodb findone" and found this page:

[Mongo] findメソッドのいろいろな使い方(MySQLと比較) - YoheiM .NET

まず、Firefoxの開発者ツールのネットワークタブを開き、ログインフォームに適当なUsernameとPasswordを入れて送信した。
次に、このページの「検索条件を指定する(非等価比較)」を参考に、送られた /login へのリクエストを以下のように「編集して再送信」した。

すると、 / へリダイレクトされ、そこからまた /login にリダイレクトされた。
この後、ログインフォームの左上「NoSQL Challenge」のリンクをクリックすると、flagが表示された。

Firstly, I opened the Network tab in the developer tool in Firefox, and sent a login request from the form using some random Username and Password.
Then, referring "検索条件を指定する(非等価比較)" in this page, I modified the request for /login via "Edit and Resend" in this way:

Sending this request resulted in a redirection to /, and then redirected to /login.
After that, I clicked the "NoSQL Challenge" link in the left top of the login form. As a result, the flag appeared.

FLAG{n0_sql_1nj3ction}

WaniCTF 2021