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

4.9 KiB

LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

{% hint style="success" %} Leer & oefen AWS-hacking:HackTricks Opleiding AWS Red Team Expert (ARTE)
Leer & oefen GCP-hacking: HackTricks Opleiding GCP Red Team Expert (GRTE)

Ondersteun HackTricks
{% endhint %}

Basiese Inligting

As jy 'n Plaaslike Lêer Insluiting gevind het selfs as jy nie 'n sessie het en session.auto_start is Off. As session.upload_progress.enabled is On en jy die PHP_SESSION_UPLOAD_PROGRESS in multipart POST data voorsien, sal PHP die sessie vir jou aktiveer.

$ 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

Merk op dat met PHP_SESSION_UPLOAD_PROGRESS jy data binne die sessie kan beheer, so as jy jou sessie lêer insluit, kan jy 'n deel insluit wat jy beheer (byvoorbeeld 'n php shellcode).

{% hint style="info" %} Alhoewel die meeste tutoriale op die internet aanbeveel om session.upload_progress.cleanup op Off te stel vir die doel van foutopsporing. Die verstekwaarde vir session.upload_progress.cleanup in PHP is steeds On. Dit beteken dat jou oplaai-vordering in die sessie so gou as moontlik skoongemaak sal word. Dit sal dus Race Condition wees. {% endhint %}

Die CTF

In die oorspronklike CTF waar hierdie tegniek gekommentaar is, was dit nie genoeg om die Race Condition te benut nie, maar die inhoud wat gelaai moes word, moes ook begin met die string @<?php.

As gevolg van die verstekinstelling van session.upload_progress.prefix, sal ons SESSIE-lêer begin met 'n irriterende voorvoegsel upload_progress_ Soos: upload_progress_controlledcontentbyattacker

Die truuk om die aanvanklike voorvoegsel te verwyder was om die lading 3 keer te base64-enkode en dit dan te dekodeer via convert.base64-decode filters, dit is omdat wanneer base64 dekodeer PHP die vreemde karakters sal verwyder, so na 3 keer sal slegs die lading gestuur deur die aanvaller oorbly (en dan kan die aanvaller die aanvanklike deel beheer).

Meer inligting in die oorspronklike skryfstuk https://blog.orange.tw/2018/10/ en finale uitbuiting https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
'n Ander skryfstuk in https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/

{% hint style="success" %} Leer & oefen AWS Hack:HackTricks Opleiding AWS Red Team Expert (ARTE)
Leer & oefen GCP Hack: HackTricks Opleiding GCP Red Team Expert (GRTE)

Ondersteun HackTricks
{% endhint %}