Логотип DVWA
Вступ
У цій статті ми розглянемо вразливість завантаження файлів, починаючи з основ і поступово переходячи до більш складних технік, даючи чітке розуміння того, як ці вразливості можуть бути використані.
Що таке вразливість завантаження файлів?
Вразливість завантаження файлів виникає, коли веб-додаток дозволяє користувачам завантажувати файли без належної перевірки. Це може дозволити завантаження шкідливих файлів, таких як шкідливі програми чи скрипти, що можуть бути виконані на сервері, що потенційно компрометує систему.
Аналіз коду з низьким рівнем безпеки
Код з низьким рівнем безпеки
Як ми бачимо в коді, коли натискається кнопка "Upload", завантажений файл переміщується в цільовий шлях без будь-якої перевірки чи валідації, залишаючи систему відкритою для вразливостей завантаження файлів.
Ми створили PHP-скрипт з зворотним шеллом, який надасть нам віддалений доступ до системи.
Перегляд PHP-скрипта з зворотним шеллом
Тепер ми завантажимо його.
Як бачите, наше завантаження було успішним, і файл тепер на місці.
Успішне завантаження PHP-скрипта з зворотним шеллом
Тепер перейдіть за адресою /hackable/uploads/shell.php. Після налаштування прослуховувача Netcat ми повинні отримати з'єднання з шеллом.
Відкриття файлу шеллу через URL
Після налаштування прослуховувача Netcat ми повинні отримати з'єднання з шеллом.
Отримання зворотного шеллу
Аналіз коду середнього рівня безпеки
Код середнього рівня безпеки
Після аналізу коду я помітив перевірку валідації, де завантажений файл має бути у форматі JPEG або PNG і мати розмір не більше 100000 байтів.
Коли ми спробували завантажити наш файл з зворотним шеллом, з'явилося повідомлення, яке підтвердило, що наш аналіз був правильним.
Завантажені файли повинні бути у форматі JPEG або PNG
Після роздумів я вирішив перехопити запит за допомогою Burp Suite і змінити Content-Type на image/png.
Модифікація Content-Type на image/png з використанням Burp Suite
І це спрацювало, як показано нижче.
Успішне завантаження файлу
Тепер давайте перейдемо до файлу shell.php і відкриємо його в браузері.
Відкриття файлу шеллу в браузері
З прослуховувачем, що працює, ми успішно отримали з'єднання з шеллом.
Отримання шеллу на машині жертви
Аналіз коду високого рівня безпеки
Код високого рівня безпеки
Під час перегляду коду я помітив умову, яка використовує функцію substr для перевірки розширення файлу.
Це забезпечує те, що завантажений файл дійсно є JPEG, JPG або PNG.
Я також помітив використання функції getimagesize у коді, яка перевіряє, чи є файл дійсним зображенням, отримуючи його розміри та тип.
Це означає, що файли, створені за допомогою таких інструментів, як touch або nano, не матимуть розмірів зображення, і тому вони будуть відхилені.
Отже, ми використаємо exiftool для генерації детальної інформації про файл, що дозволить нам створювати файли, які виглядають як зображення, але насправді ними не є.
Ми почнемо з завантаження зображення JPEG з браузера.
Завантаження зображення з браузера
Тепер, завдяки цьому посиланню на Github, ми зможемо вставити власне навантаження у файл зображення за допомогою exiftool.
[
php-cmd-exec-webshell/exiftool code at master · F1uffyGoat/php-cmd-exec-webshell
Оминання фільтру для завантаження php-shell з використанням exiftool і введення коду в існуюче зображення …
github.com
](https://github.com/F1uffyGoat/php-cmd-exec-webshell/blob/master/exiftool%20code?source=post_page-----7ee8066e3bfa--------------------------------)
Інжекція навантаження у зображення за допомогою ExifTool
Тепер час завантажити зображення.
Завантаження було успішним, як видно нижче.
Файл успішно завантажено
Якщо ми спробуємо відкрити його, нам буде показано зображення.
Відкриття файлу відображає зображення
Щоб використати інжектоване навантаження, ми використовуватимемо завдання командного інжекції, яке ми вже виконали, щоб перейменувати файл в image.php.
Команда, яку я використав:
127.0.0.1|mv ../../hackable/uploads/image.jpeg ../../hackable/uploads/image.php
Тепер час відкрити файл image.php в браузері.
Відкриття файлу image.php в браузері
Тепер ми використовуватимемо image.php для виконання команди ls і виведення всіх файлів.
Використання image.php для відображення файлів у директорії
Аналіз коду з неможливою безпекою
Код з неможливою безпекою
Код використовує токен Anti-CSRF для запобігання атак на сайти і забезпечення того, що запити надходять з надійних джерел. MD5 хешує ім’я файлу з унікальним ID, щоб уникнути колізій. Функції imagecreatefromjpeg та imagecreatefrompng перевіряють та обробляють зображення формату JPEG та PNG. Наприкінці ми можемо помітити наявність токена Anti-CSRF, який генерується для забезпечення безпеки форми і зв’язується з сесією, що запобігає несанкціонованим діям.
Висновок
Підсумовуючи, ми пройшли кроки для вирішення завдань завантаження файлів низького, середнього та високого рівня, охоплюючи основні підходи та рішення для кожного рівня.
Перекладено з: Exploring DVWA : A Walkthrough of The File Upload Challenge (Part 5)