LFI2RCE via phpinfo()
Щоб експлуатувати цю вразливість, вам потрібно: вразливість LFI, сторінка, де відображається phpinfo(), "file_uploads = on" і сервер повинен мати можливість записувати в директорію "/tmp".
https://www.insomniasec.com/downloads/publications/phpinfolfi.py
Tutorial HTB: https://www.youtube.com/watch?v=rs4zEwONzzk&t=600s
Вам потрібно виправити експлойт (змінити => на =>). Для цього ви можете зробити:
Вам також потрібно змінити payload на початку експлойту (наприклад, для php-rev-shell), REQ1 (це має вказувати на сторінку phpinfo і містити заповнення, тобто: REQ1="""POST /install.php?mode=phpinfo&a="""+padding+""" HTTP/1.1), та LFIREQ (це має вказувати на вразливість LFI, тобто: LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r -- Перевірте подвійну "%" під час експлуатації нульового символу)
Теорія
Якщо завантаження дозволено в PHP і ви намагаєтеся завантажити файл, цей файл зберігається в тимчасовому каталозі, поки сервер не закінчить обробку запиту, потім цей тимчасовий файл видаляється.
Отже, якщо ви знайшли вразливість LFI на веб-сервері, ви можете спробувати вгадати назву тимчасового файлу, що створюється, і експлуатувати RCE, отримуючи доступ до тимчасового файлу до його видалення.
У Windows файли зазвичай зберігаються в C:\Windows\temp\php
У linux назва файлу зазвичай випадкова і розташована в /tmp. Оскільки назва випадкова, потрібно витягти звідкись назву тимчасового файлу і отримати до нього доступ до його видалення. Це можна зробити, прочитавши значення змінної $_FILES всередині вмісту функції "phpconfig()".
phpinfo()
PHP використовує буфер 4096B, і коли він повний, він надсилається клієнту. Потім клієнт може надіслати багато великих запитів (використовуючи великі заголовки) завантажуючи php зворотний shell, чекати на першу частину phpinfo(), що повертається (де вказується назва тимчасового файлу) і намагатися отримати доступ до тимчасового файлу до того, як php сервер видалить файл, експлуатуючи вразливість LFI.
Скрипт Python для спроби брутфорсити назву (якщо довжина = 6)
Last updated