Скрипт завантаження файлів на сервер

Даний сценарій працює разом з наступною HTML-формою:

Коли PHP приймає POST-запит з типом кодування "multipart / form-data", створюється тимчасовий файл з випадковим ім'ям в директорії для тимчасових файлів (тобто / var / tmp / php4vlktb). PHP також заповнює глобальний масив $ _FILES інформацією про завантаженому файлі:

У цьому простому прикладі не накладається обмежень на тип завантаження, тому зломщик може завантажити файл з шкідливим кодом PHP або .NET, що призведе до компрометації сервера. В такому випадку зломщик може просто завантажити шкідливі сценарії c99 shell або r57 shell і отримати контроль над сервером.

Однак, навіть якщо в цілях безпеки перевірка розширення файлу проводиться перед завантаженням, зломщик може також обійти її, використавши нульовий символ% 00. Все що потрібно зробити, це вибрати файл PHP для завантаження, не натискаючи на кнопку "Завантажити". Шлях до вибраного для завантаження файлу буде відображено і для * NIX-систем буде виглядати як /Users/username/exploit.php, а для Windows-систем як c: \ exploit.php. На цьому етапі потрібно вручну додати до рядка нульовий символ з будь-яким подальшим розширенням зображення, наприклад, /Users/username/exploit.php%00.jpg або c: \ exploit.php% 00.jpg.

Після натискання на кнопку "Завантажити" сервер перевірить розширення, вважатиме, що проводиться завантаження зображення і виведе повідомлення, подібне наступного: "Дякуємо за завантаження вашого зображення!". Як тільки файл буде завантажений, з'явиться можливість виконання шкідливого коду на сервері.

Іншим популярним способом захисту від виконання завантажених файлів є заборона на виконання сценаріїв в директорії завантажень за допомогою файлу .htaccess. Стандартний файл .htaccess для цієї мети повинен містити наступний код:

Код, наведений вище, використовує список заборонених розширень і не особливо безпечний сам по собі. Зломщик може просто обійти такі перевірки, завантаживши файл з назвою .htaccess, що містить код, подібний наступного:

Цей рядок вказує Apache, що необхідно виконувати файли зображень з розширенням .jpg так, як ніби це сценарії PHP. Тепер зломщик може завантажити файл з розширенням .jpg, що містить код PHP. Так як завантаження можуть перезаписувати і перезаписують існуючі, зловмисники можуть без зайвих складнощів замінити файл .htaccess своєї модифікованою версією, що дозволяє виконувати певні сценарії для подальшої компрометації сервера.

Схожі статті