Ін'єкція команд
Одна крапка з комою в полі форми — і сервер виконує вашу команду.
Що таке Ін'єкція команд?
Ін'єкція команд перетворює один вебзапит на виконання коду від імені самого сервера. Застосунок вклеює введені користувачем дані в рядок команди й віддає його оболонці, яка сприймає кожен спеціальний символ як синтаксис. Ви додасте крапку з комою в поле host мережевого діагностичного інструмента, виконаєте другу команду й прочитаєте файл середовища, де лежить пароль до бази даних. Потім замінете зліплений рядок на execFile , щоб host лишався одним аргументом, і побачите, чому фільтрація небезпечних символів завжди програє.
Що ви дізнаєтесь у Ін'єкція команд
- Розпізнавайте шаблон запуску команд через оболонку: будь-які дані користувача, вклеєні в рядок команди, який передається оболонці (exec, system, sh -c), — кандидат на ін'єкцію команд
- Розпізнавайте, як роздільник оболонки на кшталт крапки з комою перетворює одну команду на дві, якщо введені дані не відокремлено від оболонки
- Застосовуйте виправлення зі списком аргументів: execFile або spawn із масивом аргументів, щоб програма запускалася напряму, а символи оболонки у введених даних лишалися звичайними символами
- З'ясуйте, чому фільтрація символів на кшталт ; і | не працює: її обходять інші роздільники, кодування й підстановки
- Зменшуйте радіус ураження: дотримуйтеся принципу найменших привілеїв і не тримайте секрети у файлах, які може прочитати воркер
Ін'єкція команд — Кроки навчання
-
Діагностичний інструмент
Trelvane надає хостинг і пропонує публічний сервіс Looking Glass: вставте адресу хоста, і периферійні сервери Trelvane пінгують її та повертають необроблений вивід. Клієнтам зручно перевіряти, чи доступний їхній сервер. Перш ніж щось у ньому чіпати, Боб відкриває сервіс і дивиться, як той поводиться.
-
Сервіс запускає справжню команду
Увесь інтерес Боба до цієї сторінки зводиться до одного рядка.
-
Скористайтеся функцією
Подивіться, як сервіс працює у звичайному режимі. Пропінгуйте звичайний хост, щоб браузер записав запит, який надсилає сторінка.
-
Знайдіть запит
Запит пішов, і браузер його записав. Відкрийте вкладку «Network» і подивіться, куди сторінка його надіслала та як передається хост.
-
Підсуньте другу команду
Боб більше не чіпає форму. Він змінює записаний запит на вкладці «Network» і переписує значення host : loopback-адреса, крапка з комою, а за нею дві його власні команди. Якщо сервер збирає команду ping, вклеюючи туди значення, крапка з комою завершує ping, і команди Боба виконуються одразу за ним. У ланцюжок він ставить id , щоб дізнатися, від чийого імені працює сервер, і cat , який читає файл середовища воркера, де хостингові агенти зберігають пароль до бази даних і хмарні ключі.
-
Ключі витекли
Ping виконався, а далі йдуть рядки, яких ping ніколи не видає.
-
Перевірка знань
-
Сповіщення
Ви відповідаєте за сервіс Looking Glass у Trelvane. Уночі моніторинг зафіксував, що діагностичний воркер робить те, чого інструмент для ping робити не повинен: запускає команди оболонки й читає власний файл із секретами. Подробиці центр моніторингу безпеки надіслав вам листом.
-
Відкрийте обробник
Ендпоінт ping обслуговує файл ping.js . Відкрийте його й подивіться, як він запускає команду.
-
Знайдіть ваду
Обробник вклеює значення host у рядок команди й віддає весь рядок оболонці на виконання.
Охоплення стандартів безпеки
OWASP Top 10
- A05:2025 Injection
- A03:2021 Injection
CWE
- CWE-78 Improper Neutralization of Special Elements used in an OS Command
CIS Controls
- CIS 16 Application Software Security
NIST CSF
- PR.AT-02 Individuals in specialized roles are provided with awareness and training so that they possess the knowledge and skills to perform relevant tasks with cybersecurity risks in mind
- PR.PS Platform Security