File Upload та Path Traversal: повний гайд по атаках та захисту
File Upload Vulnerabilities та Path Traversal — це критичні уразливості веб-додатків, які дозволяють атакуючим завантажувати шкідливі файли на сервер або отримувати доступ до системних файлів поза дозволеними каталогами. Ці уразливості часто призводять до повного контролю над сервером, викрадення даних або встановлення бекдорів.
Розуміння механізмів роботи цих атак, можливих наслідків та способів захисту є критично важливим для веб-розробників, тестувальників та спеціалістів з кібербезпеки.
1. File Upload Vulnerabilities
Уразливість завантаження файлів виникає, коли веб-додаток дозволяє користувачам завантажувати файли, але не обмежує типи, розміри або перевірку вмісту. Це дозволяє атакуючим завантажувати шкідливі скрипти, веб-шелли або інші небезпечні файли.
Наслідки:
- Виконання шкідливих скриптів на сервері
- Повний контроль над веб-сервером
- Витік конфіденційних даних
- Розповсюдження шкідливого ПЗ серед користувачів
2. Основні вектори атак через File Upload
- Завантаження PHP, ASP, JSP скриптів
- Використання подвійного розширення:
image.php.jpg - Завантаження файлів з небезпечними MIME-типами
- Використання обходу перевірки шляхів
- Перезапис критичних файлів на сервері (якщо немає обмежень)
3. Приклади File Upload
PHP приклад уразливого коду:
<?php $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["file"]["name"]); move_uploaded_file($_FILES["file"]["tmp_name"], $target_file); ?>
Якщо перевірка MIME або розширення не проводиться, зловмисник може завантажити shell.php і виконати його через браузер.
4. Path Traversal (Directory Traversal)
Path Traversal — атака, що дозволяє доступ до файлів і каталогів поза дозволеною директорією веб-додатка. Використовується шлях «../» або аналогічні методи для обходу обмежень.
Наслідки:
- Читання конфіденційних файлів: /etc/passwd, конфігураційні файли
- Виконання критичних файлів на сервері
- Витік даних користувачів
- Підготовка до подальших атак, включаючи RCE
5. Приклади Path Traversal
HTTP-запит:
GET /download.php?file=../../../../etc/passwd
Якщо сервер не перевіряє шляхи файлів, атакуючий отримає вміст /etc/passwd або інших критичних файлів.
6. Комбінації File Upload та Path Traversal
Часто ці дві уразливості використовуються разом. Атакуючий може завантажити скрипт у тимчасову директорію, а потім використати Path Traversal для його активації або доступу до критичних системних файлів.
7. Інструменти для тестування
- Burp Suite — для аналізу завантаження файлів та перевірки обходу шляхів
- OWASP ZAP — автоматизоване сканування веб-уразливостей
- Commix — перевірка командних ін’єкцій через шляхи файлів
- FuzzDB — база для тестування Path Traversal та File Upload
8. Методи захисту File Upload
- Обмеження допустимих типів файлів (MIME та розширення)
- Перевірка реального вмісту файлу, а не тільки розширення
- Обмеження розміру файлу
- Зберігання файлів поза кореневою директорією веб-сервера
- Використання унікальних імен файлів
- Відключення виконання скриптів у директорії завантажень
- Регулярне оновлення серверного ПЗ та бібліотек
9. Методи захисту Path Traversal
- Санітизація введених шляхів файлів
- Використання абсолютних шляхів з перевіркою
- Обмеження доступу до критичних директорій
- Валідація та нормалізація шляхів
- Регулярні перевірки безпеки та сканування уразливостей
10. Реальні кейси
- Adobe ColdFusion Path Traversal (2013) — масові компрометації через недосконалу обробку шляхів
- WordPress File Upload (2015) — атаки через плагіни, дозволяли завантажувати PHP скрипти
- Joomla File Upload (2016) — плагін дозволяв обходити MIME перевірку, встановлюючи бекдори
- Drupalgeddon (2018) — комбінація RCE та Path Traversal через віддалене завантаження файлів
11. Висновок
File Upload та Path Traversal — небезпечні вектори атак, які часто використовуються разом для повного контролю над сервером.
Системний підхід до перевірки вводу, обмеження доступу, використання безпечних практик зберігання файлів та регулярне тестування дозволяють мінімізувати ризики та захистити користувачів від атак.