LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

Reading time: 3 minutes

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks

Basiese Inligting

As jy 'n Local File Inclusion gevind het selfs al het jy nie 'n sessie nie en session.auto_start is Off. As session.upload_progress.enabled is On en jy verskaf die PHP_SESSION_UPLOAD_PROGRESS in multipart POST data, sal PHP die sessie vir jou aktiveer.

bash
$ 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

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

note

Alhoewel die meeste tutorials op die Internet jou aanbeveel om session.upload_progress.cleanup op Off te stel vir foutopsporing. Die standaard session.upload_progress.cleanup in PHP is steeds On. Dit beteken jou oplaai vordering in die sessie sal so gou as moontlik skoongemaak word. So dit sal Race Condition wees.

Die CTF

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

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

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

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

tip

Leer & oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer & oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)

Ondersteun HackTricks