【TryHackMe】Advent of Cyber3 (2021)を続けてみた Day7


Welcome to Advent of Cyber 2021

クリスマスまでの25日間、毎日基本的な知識を学び、初心者向けの新しいセキュリティ演習を行うことで、サイバーセキュリティを始めることができます。

day7

今回は、NoSQLに関してです。

NoSQLとは

NoSQLデータベースは、高速なクエリ、開発者にとっての使いやすさ、容易なスケール、柔軟なデータ構造といった強力な機能を備えているため、最近ではビッグデータやIoTデバイスによく使われています。
NoSQLデータベースには、MongoDB、Couchbase、RavenDBなど、さまざまなタイプのものが対象となります。しかし、このタスクでは、無料で人気のあるドキュメントストア型NoSQLデータベースであるMongoDBデータベースに焦点を当てます。
リレーショナルデータベース(MySQLやMSSQLなど)と同様に、MongoDBはデータベース、テーブル、フィールドで構成されていますが、以下のように名前が異なります。

  • Collections : MySQLやMSSQLのテーブルやビューに似ています。
  • Documents : MySQLやMSSQLの行やレコードに似ています。
  • Fields : MySQLやMSSQLのカラムに似ています。

対象へssh接続する。thm:tryhackme

┌──(kali㉿kali)-[~]
└─$ ssh [email protected] -p 2222
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 5.4.0-1059-aws x86_64)
...(略)
thm@mongo-server:~$

Mongoデータベースに接続します。

thm@mongo-server:~$ mongo
MongoDB shell version v5.0.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c98de9c0-c849-46ce-873a-d03a7e1685f8") }
MongoDB server version: 5.0.3
================
...(略)
        To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>

show databasesコマンドを使用し、すべてのデータベースを表示します。

> show databases
admin   0.000GB
config  0.000GB
flagdb  0.000GB
local   0.000GB

flagdbが怪しい。。データベースに接続する場合は、useコマンドを使用します。
flagCollというcollectionsが見つかった。

> use flagdb
switched to db flagdb
> show collections
flagColl

ここにアクセスする。flagを発見。

> db.flagColl.find()
{ "_id" : ObjectId("618806af0afbc09bdf42bd6a"), "flag" : "THM{8814a5e6662a9763f7df23ee59d944f9}" }

続いて、http://10.10.158.73/loginへアクセス。

NoSQLインジェクションを利用する前に、インジェクションで多用されるMongoDBの演算子について知っておく必要があります。

$eq - 特定の値に等しいレコードにマッチします。
$ne - 特定の値に一致しないレコードにマッチします。
$gt - 特定の値よりも大きいレコードにマッチします。
$where - Javascriptの条件に基づいてレコードにマッチします
$exists - 特定のフィールドを持つレコードにマッチします。
$regex - 特定の正規表現を満たすレコードにマッチします。

使用例としては次のようになります。
例1)username=adminで、全roleを表示
http://example.thm.labs/search?username=admin&role[$ne]=user
例2)全usernameで、role=userを表示
http://example.thm.labs/search?username[$ne]=admin&role=user

さて、この知識を基にBurpにて管理者ログインの試行します。
http://10.10.158.73/login

username=adminpasswordが分からないので$neを使用します。


ログイン成功。Flag!を発見。
(Flag: THM{b6b304f5d5834a4d089b570840b467a8})

次に、Searchにてユーザーを検索する。
http://10.10.158.73/search?username=admin&role=user

このURLを次の様に変更します。
10.10.158.73/search?username[$ne]=admin&role=guest

同じ方法で、mcskidyのデータを取得します。
10.10.158.73/search?username=mcskidy&role[$ne]=guest

Answer

Interact with the MongoDB server to find the flag. What is the flag?
THM{8814a5e6662a9763f7df23ee59d944f9}
We discussed how to bypass login pages as an admin. Can you log into the application that Grinch Enterprise controls as admin and retrieve the flag? Use the knowledge given in AoC3 day 4 to setup and run Burp Suite proxy to intercept the HTTP request for the login page. Then modify the POST parameter.
THM{b6b304f5d5834a4d089b570840b467a8}
Once you are logged in, use the gift search page to list all usernames that have guest roles. What is the flag?
THM{2ec099f2d602cc4968c5267970be1326}
Use the gift search page to perform NoSQL injection and retrieve the mcskidy record. What is the details record?
ID:6184f516ef6da50433f100f4:mcskidy:admin