LFI2RCE Via temp file uploads

Підтримка HackTricks

Перевірте повні деталі цієї техніки на https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf

PHP Завантаження файлів

Коли PHP движок отримує POST запит, що містить файли, відформатовані відповідно до RFC 1867, він генерує тимчасові файли для зберігання завантажених даних. Ці файли є критично важливими для обробки завантаження файлів у PHP скриптах. Функцію move_uploaded_file потрібно використовувати для переміщення цих тимчасових файлів до бажаного місця, якщо потрібно постійне зберігання за межами виконання скрипта. Після виконання PHP автоматично видаляє будь-які залишкові тимчасові файли.

Сигнал безпеки: Зловмисники, обізнані про місцезнаходження тимчасових файлів, можуть експлуатувати вразливість Local File Inclusion для виконання коду, отримуючи доступ до файлу під час завантаження.

Виклик для несанкціонованого доступу полягає в прогнозуванні імені тимчасового файлу, яке навмисно рандомізоване.

Експлуатація на Windows системах

На Windows PHP генерує імена тимчасових файлів, використовуючи функцію GetTempFileName, що призводить до шаблону на кшталт <path>\<pre><uuuu>.TMP. Зокрема:

  • За замовчуванням шлях зазвичай C:\Windows\Temp.

  • Префікс зазвичай "php".

  • <uuuu> представляє унікальне шістнадцяткове значення. Важливо, що через обмеження функції використовуються лише нижні 16 біт, що дозволяє отримати максимум 65,535 унікальних імен з постійним шляхом і префіксом, що робить грубу силу здійсненною.

Більше того, процес експлуатації спрощений на Windows системах. Особливість у функції FindFirstFile дозволяє використовувати шаблони в шляхах Local File Inclusion (LFI). Це дозволяє створити шлях включення, як показано нижче, для знаходження тимчасового файлу:

http://site/vuln.php?inc=c:\windows\temp\php<<

У певних ситуаціях може знадобитися більш специфічна маска (наприклад, php1<< або phpA<<). Можна систематично спробувати ці маски, щоб виявити завантажений тимчасовий файл.

Експлуатація на системах GNU/Linux

Для систем GNU/Linux випадковість у найменуванні тимчасових файлів є надійною, що робить імена ні передбачуваними, ні вразливими до атак методом перебору. Додаткові деталі можна знайти в посиланнях на документацію.

Support HackTricks

Last updated