hacktricks/pentesting-web/file-inclusion/via-php_session_upload_progress.md

6.2 KiB
Raw Blame History

LFI2RCE через PHP_SESSION_UPLOAD_PROGRESS

{% hint style="success" %} Вивчайте та практикуйте Хакінг AWS: Навчання HackTricks AWS Red Team Expert (ARTE)
Вивчайте та практикуйте Хакінг GCP: Навчання HackTricks GCP Red Team Expert (GRTE)

Підтримайте HackTricks
{% endhint %}

Основна інформація

Якщо ви знайшли Включення локального файлу (LFI) навіть якщо у вас немає сесії і session.auto_start вимкнено. Якщо session.upload_progress.enabled включено і ви надаєте PHP_SESSION_UPLOAD_PROGRESS у даних multipart POST, PHP увімкне сесію для вас.

$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -d 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'
$ ls -a /var/lib/php/sessions/
. ..
$ curl http://127.0.0.1/ -H 'Cookie: PHPSESSID=iamorange' -F 'PHP_SESSION_UPLOAD_PROGRESS=blahblahblah'  -F 'file=@/etc/passwd'
$ ls -a /var/lib/php/sessions/
. .. sess_iamorange

In the last example the session will contain the string blahblahblah

За допомогою PHP_SESSION_UPLOAD_PROGRESS ви можете контролювати дані всередині сесії, тому якщо ви включите файл сесії, ви можете включити частину, яку контролюєте (наприклад, php shellcode).

{% hint style="info" %} Хоча більшість посібників в Інтернеті рекомендує встановити session.upload_progress.cleanup на Off для налагодження. За замовчуванням session.upload_progress.cleanup в PHP все ще On. Це означає, що ваш прогрес завантаження в сесії буде очищено якнайшвидше. Тому це буде Умова гонки. {% endhint %}

Змагання

У оригінальному CTF, де цей метод коментується, не вистачило використати Умову гонки, але завантажений вміст також повинен був починатися з рядка @<?php.

Через налаштування за замовчуванням session.upload_progress.prefix, наш файл СЕСІЇ почнеться з дратуючим префіксом upload_progress_ Наприклад: upload_progress_controlledcontentbyattacker

Хитрість видалення початкового префіксу полягала в трьохкратному кодуванні payload за допомогою base64 та потім декодуванні його через фільтри convert.base64-decode, це тому, що при декодуванні base64 PHP видалятиме дивні символи, тому після 3 разів лише пейлоад, надісланий зловмисником, залишиться (і тоді зловмисник може контролювати початкову частину).

Додаткова інформація в оригінальному описі https://blog.orange.tw/2018/10/ та остаточний експлойт https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
Інший опис в https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/

{% hint style="success" %} Вивчайте та практикуйте взлом AWS:Навчання AWS Red Team Expert (ARTE) від HackTricks
Вивчайте та практикуйте взлом GCP: Навчання GCP Red Team Expert (GRTE) від HackTricks

Підтримайте HackTricks
{% endhint %}