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
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
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.
$ 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
- Kyk na die subskripsie planne!
- Sluit aan by die 💬 Discord groep of die telegram groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.