LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS
Основна інформація
Якщо ви знайшли включення локального файлу, навіть якщо у вас немає сесії і session.auto_start
вимкнено. Якщо session.upload_progress.enabled
включено і ви надаєте PHP_SESSION_UPLOAD_PROGRESS
у даних multipart POST, PHP увімкне сесію для вас.
Зверніть увагу, що з PHP_SESSION_UPLOAD_PROGRESS
ви можете контролювати дані всередині сесії, тому якщо ви включите файл сесії, ви можете включити частину, яку контролюєте (наприклад, php shellcode).
Хоча більшість посібників в Інтернеті рекомендує встановити session.upload_progress.cleanup
на Off
для налагодження. За замовчуванням session.upload_progress.cleanup
в PHP все ще On
. Це означає, що ваш прогрес завантаження в сесії буде очищено якнайшвидше. Таким чином це буде Умова гонки.
The CTF
У оригінальному CTF, де цей метод коментується, не вистачило лише використати Умову гонки, але завантажений вміст також повинен був починатися з рядка @<?php
.
Через налаштування за замовчуванням session.upload_progress.prefix
, наш файл СЕСІЇ почнеться з дратуючим префіксом upload_progress_
Наприклад: upload_progress_controlledcontentbyattacker
Хитрість видалення початкового префіксу полягала в трьохкратному кодуванні базою64 навантаження і потім декодуванні його через фільтри convert.base64-decode
, це тому що при декодуванні базою64 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/
Last updated