LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS
Osnovne informacije
Ako ste pronašli Lokalno uključivanje fajlova (LFI) čak i ako nemate sesiju i session.auto_start
je Off
. Ako je session.upload_progress.enabled
On
i pružite PHP_SESSION_UPLOAD_PROGRESS
u multipart POST podacima, PHP će omogućiti sesiju za vas.
Napomena je da sa PHP_SESSION_UPLOAD_PROGRESS
možete kontrolisati podatke unutar sesije, tako da ako uključite svoj sesijski fajl, možete uključiti deo koji kontrolišete (na primer, php shellcode).
Iako većina tutorijala na internetu preporučuje da postavite session.upload_progress.cleanup
na Off
u svrhu debagovanja, podrazumevana vrednost session.upload_progress.cleanup
u PHP-u je i dalje On
. To znači da će se vaš napredak pri otpremanju u sesiji očistiti što je pre moguće. Dakle, ovo će biti trka stanja.
CTF
U originalnom CTF-u gde je ova tehnika komentarisana, nije bilo dovoljno iskoristiti trku stanja, već je učitani sadržaj takođe trebao da počne sa stringom @<?php
.
Zbog podrazumevane postavke session.upload_progress.prefix
, naš SESIJSKI fajl će početi sa dosadnim prefiksom upload_progress_
kao što je: upload_progress_controlledcontentbyattacker
Trika za uklanjanje početnog prefiksa bila je base64 enkodiranje payloada 3 puta i zatim dekodiranje putem filtera convert.base64-decode
, to je zato što će PHP prilikom base64 dekodiranja ukloniti čudne karaktere, tako da će posle 3 puta samo payload poslat od strane napadača ostati (a zatim napadač može kontrolisati početni deo).
Više informacija u originalnom writeup-u https://blog.orange.tw/2018/10/ i konačni exploit https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py Još jedan writeup na https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/
Last updated