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
- Controleer die inskrywingsplanne!
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacking-truuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.
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
- Kontroleer die inskrywingsplanne!
- Sluit aan by die 💬 Discord-groep of die telegram-groep of volg ons op Twitter 🐦 @hacktricks_live.
- Deel hacktruuks deur PR's in te dien by die HackTricks en HackTricks Cloud github-opslag.