Дослідження DVWA: Крок за кроком через виклик включення файлів (Частина 4)

pic

Логотип DVWA

Вступ

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

Що таке включення файлів?

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

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

pic

Вихідний код з низьким рівнем безпеки

Код отримує значення з параметра сторінки в URL за допомогою методу GET і присвоює його змінній $file, яка потім завантажується та відображається на веб-сторінці. Відсутність перевірки або санітизації робить це вразливим до атак включення файлів.

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

Наприклад, атакуючий може використовувати послідовність ../../../../../../ для підйому в структурі каталогів, виходячи за межі призначеного каталогу та отримуючи доступ до вищих рівнів директорій. Це може дозволити їм дістатися до чутливих файлів, таких як /etc/passwd.

pic

Маніпулювання URL для доступу до файлу /etc/passwd

У цьому випадку ми залишаємо каталог /var/www/html, який зазвичай є кореневим каталогом веб-сервера, і переходимо до домашнього каталогу сервера. Звідти ми потрапляємо в каталог /etc і отримуємо доступ до файлу passwd, який містить чутливу інформацію про систему, використовуючи техніку подолання відносного шляху. Це приклад атаки Local File Inclusion (LFI), коли ми використовуємо вразливість для включення локальних файлів на сервері.

Як результат, вміст файлу /etc/passwd тепер відображається.

pic

Перегляд вмісту файлу /etc/passwd

Тепер давайте розглянемо Remote File Inclusion (RFI). Ця вразливість дозволяє атакуючому включати файли з віддалених серверів, що може дозволити їм виконати шкідливий код.
Ми побачимо, як це можна використовувати в нашому випадку.

Спочатку ми створимо файли test і shell.php, як показано нижче.

pic

Перегляд вмісту файлів test і shell.php

Нам потрібно відкрити простий HTTP сервер Python, щоб зробити файл доступним через мережу.

pic

Запуск HTTP сервера за допомогою Python

Після запуску HTTP сервера Python, вставте http://192.168.44.171:8000/test в параметр URL сторінки, щоб відкрити вміст файлу test.

pic

Доступ до файлу test через Python HTTP сервер

Це спрацювало, і вміст файлу тепер відображається.

pic

Перегляд вмісту файлу test на машині жертви

GET запит для файлу test також відображається у консолі python -m http.server.

pic

Перегляд отримання файлу test на Python HTTP сервері

Тепер ми протестуємо з файлом shell.php, який відкриває зворотний shell, підключаючи сервер до IP та порту атакуючого, дозволяючи віддалений контроль над сервером.

Ми введемо URL файлу shell.php в параметр сторінки, щоб активувати зворотний shell.

pic

Доступ до shell.php через Python HTTP сервер

За допомогою команди nc ми можемо слухати вхідне з'єднання з зворотного shell і взаємодіяти з сервером віддалено.

pic

Отримання shell через Netcat

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

pic

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

Після перегляду коду я помітив, що він використовує функцію str_replace для видалення http:// і https://, замінюючи їх на порожній рядок. Це дозволяє ефективно позбутися цих префіксів з будь-якого вводу. Аналогічно, ../ і ..\ також замінюються на порожній рядок.

Однак, якщо ми використовуємо …/./, то ../ в середині замінюється на порожній простір, і залишкові значення стискаються до ../, що дозволяє нам використовувати цей підхід для навігації.

..././ ---> ../

Отже, для атаки LFI ми будемо використовувати цей шлях

..././..././..././..././..././etc/passwd

pic

Навігація до /etc/passwd в URL

Як бачите, це спрацювало відмінно, і нам вдалося отримати доступ до вмісту файлу /etc/passwd.

pic

Перегляд вмісту файлу /test/passwd на машині жертви

Тепер давайте перейдемо до RFI.
Ми застосуємо ту саму техніку, вставивши http:// в URL, ось так hthttp://tp://, що безперешкодно перетворюється на http:// для обходу перевірки.

hthttp://tp:// ---> http://

pic

Доступ до файлу test через Python HTTP сервер

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

pic

Перегляд "This is an RFI Test" на машині жертви

Тепер давайте протестуємо з файлом shell.

pic

Доступ до файлу shell через Python HTTP сервер

Як бачите, це також спрацювало, і ми успішно отримали shell.

pic

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

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

pic

Вихідний код високого рівня безпеки

Після перегляду коду я виявив, що він генерує помилку, якщо файл не починається з file і не є include.php.

Щоб вирішити це, ми використаємо протокол file://, який дозволяє нам читати локальні файли з системи замість веб-сервера.

pic

Маніпулювання URL з file:// для відображення вмісту /etc/passwd

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

Висновок

Ми пройшли через виклик File Inclusion крок за кроком, починаючи з простих проблем і поступово долаючи бар'єри безпеки, підкреслюючи процес експлуатації цих вразливостей.

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

Leave a Reply

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