Exploring DVWA: Процес вирішення завдання на завантаження файлів (Частина 5)

pic

Логотип DVWA

Вступ

У цій статті ми розглянемо вразливість завантаження файлів, починаючи з основ і поступово переходячи до більш складних технік, даючи чітке розуміння того, як ці вразливості можуть бути використані.

Що таке вразливість завантаження файлів?

Вразливість завантаження файлів виникає, коли веб-додаток дозволяє користувачам завантажувати файли без належної перевірки. Це може дозволити завантаження шкідливих файлів, таких як шкідливі програми чи скрипти, що можуть бути виконані на сервері, що потенційно компрометує систему.

Аналіз коду з низьким рівнем безпеки

pic

Код з низьким рівнем безпеки

Як ми бачимо в коді, коли натискається кнопка "Upload", завантажений файл переміщується в цільовий шлях без будь-якої перевірки чи валідації, залишаючи систему відкритою для вразливостей завантаження файлів.

Ми створили PHP-скрипт з зворотним шеллом, який надасть нам віддалений доступ до системи.

pic

Перегляд PHP-скрипта з зворотним шеллом

Тепер ми завантажимо його.

Як бачите, наше завантаження було успішним, і файл тепер на місці.

pic

Успішне завантаження PHP-скрипта з зворотним шеллом

Тепер перейдіть за адресою /hackable/uploads/shell.php. Після налаштування прослуховувача Netcat ми повинні отримати з'єднання з шеллом.

pic

Відкриття файлу шеллу через URL

Після налаштування прослуховувача Netcat ми повинні отримати з'єднання з шеллом.

pic

Отримання зворотного шеллу

Аналіз коду середнього рівня безпеки

pic

Код середнього рівня безпеки

Після аналізу коду я помітив перевірку валідації, де завантажений файл має бути у форматі JPEG або PNG і мати розмір не більше 100000 байтів.

Коли ми спробували завантажити наш файл з зворотним шеллом, з'явилося повідомлення, яке підтвердило, що наш аналіз був правильним.

pic

Завантажені файли повинні бути у форматі JPEG або PNG

Після роздумів я вирішив перехопити запит за допомогою Burp Suite і змінити Content-Type на image/png.

pic

Модифікація Content-Type на image/png з використанням Burp Suite

І це спрацювало, як показано нижче.

pic

Успішне завантаження файлу

Тепер давайте перейдемо до файлу shell.php і відкриємо його в браузері.

pic

Відкриття файлу шеллу в браузері

З прослуховувачем, що працює, ми успішно отримали з'єднання з шеллом.

pic

Отримання шеллу на машині жертви

Аналіз коду високого рівня безпеки

pic

Код високого рівня безпеки

Під час перегляду коду я помітив умову, яка використовує функцію substr для перевірки розширення файлу.
Це забезпечує те, що завантажений файл дійсно є JPEG, JPG або PNG.

Я також помітив використання функції getimagesize у коді, яка перевіряє, чи є файл дійсним зображенням, отримуючи його розміри та тип.

Це означає, що файли, створені за допомогою таких інструментів, як touch або nano, не матимуть розмірів зображення, і тому вони будуть відхилені.

Отже, ми використаємо exiftool для генерації детальної інформації про файл, що дозволить нам створювати файли, які виглядають як зображення, але насправді ними не є.

Ми почнемо з завантаження зображення JPEG з браузера.

pic

Завантаження зображення з браузера

Тепер, завдяки цьому посиланню на 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--------------------------------)

pic

Інжекція навантаження у зображення за допомогою ExifTool

Тепер час завантажити зображення.

Завантаження було успішним, як видно нижче.

pic

Файл успішно завантажено

Якщо ми спробуємо відкрити його, нам буде показано зображення.

pic

Відкриття файлу відображає зображення

Щоб використати інжектоване навантаження, ми використовуватимемо завдання командного інжекції, яке ми вже виконали, щоб перейменувати файл в image.php.

Команда, яку я використав:

127.0.0.1|mv ../../hackable/uploads/image.jpeg ../../hackable/uploads/image.php

Тепер час відкрити файл image.php в браузері.

pic

Відкриття файлу image.php в браузері

Тепер ми використовуватимемо image.php для виконання команди ls і виведення всіх файлів.

pic

Використання image.php для відображення файлів у директорії

Аналіз коду з неможливою безпекою

pic

Код з неможливою безпекою

Код використовує токен Anti-CSRF для запобігання атак на сайти і забезпечення того, що запити надходять з надійних джерел. MD5 хешує ім’я файлу з унікальним ID, щоб уникнути колізій. Функції imagecreatefromjpeg та imagecreatefrompng перевіряють та обробляють зображення формату JPEG та PNG. Наприкінці ми можемо помітити наявність токена Anti-CSRF, який генерується для забезпечення безпеки форми і зв’язується з сесією, що запобігає несанкціонованим діям.

Висновок

Підсумовуючи, ми пройшли кроки для вирішення завдань завантаження файлів низького, середнього та високого рівня, охоплюючи основні підходи та рішення для кожного рівня.

Перекладено з: Exploring DVWA : A Walkthrough of The File Upload Challenge (Part 5)

Leave a Reply

Your email address will not be published. Required fields are marked *