LFI2RCE Via temp file uploads
Last updated
Last updated
Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Перевірте повні деталі цієї техніки на https://gynvael.coldwind.pl/download.php?f=PHP_LFI_rfc1867_temporary_files.pdf
Коли 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). Це дозволяє створити шлях включення, як показано нижче, для знаходження тимчасового файлу:
У певних ситуаціях може знадобитися більш специфічна маска (наприклад, php1<<
або phpA<<
). Можна систематично спробувати ці маски, щоб виявити завантажений тимчасовий файл.
Експлуатація на системах GNU/Linux
Для систем GNU/Linux випадковість у найменуванні тимчасових файлів є надійною, що робить імена ні передбачуваними, ні вразливими до атак методом перебору. Додаткові деталі можна знайти в посиланнях на документацію.
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)