LFI2RCE Via temp file uploads
Перевірте повні деталі цієї техніки за посиланням https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf
Завантаження файлів PHP
Коли движок PHP отримує POST-запит, що містить файли у форматі згідно з RFC 1867, він генерує тимчасові файли для зберігання завантажених даних. Ці файли є важливими для обробки завантаження файлів у сценаріях PHP. Функцію move_uploaded_file
слід використовувати для переміщення цих тимчасових файлів до бажаного місця, якщо потрібне постійне зберігання поза виконанням сценарію. Після виконання PHP автоматично видаляє будь-які залишкові тимчасові файли.
Попередження про безпеку: Атакувальники, які знають місце розташування тимчасових файлів, можуть використовувати уразливість локального включення файлів для виконання коду, отримуючи доступ до файлу під час завантаження.
Виклик для несанкціонованого доступу полягає в передбаченні імені тимчасового файлу, яке спеціально рандомізоване.
Експлуатація на системах Windows
На Windows PHP генерує імена тимчасових файлів за допомогою функції GetTempFileName
, що призводить до шаблону типу <шлях>\<префікс><uuuu>.TMP
. Зокрема:
Типовий шлях зазвичай
C:\Windows\Temp
.Префікс зазвичай "php".
<uuuu>
представляє унікальне шістнадцяткове значення. Критично, через обмеження функції використовуються лише менші 16 біт, що дозволяє максимум 65 535 унікальних імен з постійним шляхом і префіксом, що робить можливим перебір.
Більше того, процес експлуатації спрощений на системах Windows. Особливість у функції FindFirstFile
дозволяє використовувати маски в шляхах локального включення файлів (LFI). Це дозволяє створити шлях включення на зразок наступного для пошуку тимчасового файлу:
У певних ситуаціях може знадобитися більш конкретна маска (наприклад, php1<<
або phpA<<
). Можна систематично спробувати ці маски, щоб виявити завантажений тимчасовий файл.
Експлуатація на системах GNU/Linux
Для систем GNU/Linux випадковість у назвах тимчасових файлів є надійною, що робить їх непередбачуваними та несприятливими для атак методом перебору. Додаткові деталі можна знайти у зазначеній документації.
Last updated