LFI2RCE via PHP_SESSION_UPLOAD_PROGRESS

Reading time: 3 minutes

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin

Temel Bilgiler

Eğer bir Yerel Dosya Dahil Etme bulduysanız, hatta bir oturumunuz yoksa ve session.auto_start Kapalı ise. Eğer session.upload_progress.enabled Açık ise ve multipart POST verilerinde PHP_SESSION_UPLOAD_PROGRESS sağlarsanız, PHP sizin için oturumu etkinleştirecektir.

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

Not edin ki PHP_SESSION_UPLOAD_PROGRESS ile oturum içindeki verileri kontrol edebilirsiniz, bu nedenle oturum dosyanızı dahil ederseniz kontrol ettiğiniz bir kısmı (örneğin bir php shellcode) dahil edebilirsiniz.

note

İnternetteki çoğu eğitim, hata ayıklama amacıyla session.upload_progress.cleanupOff olarak ayarlamanızı öneriyor. PHP'deki varsayılan session.upload_progress.cleanup hala On'dur. Bu, oturumdaki yükleme ilerlemenizin mümkün olan en kısa sürede temizleneceği anlamına gelir. Bu nedenle bu bir Race Condition olacaktır.

CTF

Bu tekniğin yorumlandığı orijinal CTF 'de Race Condition'ı istismar etmek yeterli değildi, yüklenen içeriğin de @<?php dizesi ile başlaması gerekiyordu.

session.upload_progress.prefix'in varsayılan ayarı nedeniyle, OTURUM dosyamız rahatsız edici bir ön ekle başlayacaktır upload_progress_ Şöyle: upload_progress_controlledcontentbyattacker

Başlangıç ön ekini kaldırmanın hilesi, payload'ı 3 kez base64 encode etmek ve ardından convert.base64-decode filtreleri aracılığıyla decode etmektir, çünkü base64 decode ederken PHP garip karakterleri kaldıracaktır, bu nedenle 3 kez sadece saldırgan tarafından gönderilen payload kalacaktır (ve ardından saldırgan başlangıç kısmını kontrol edebilir).

Daha fazla bilgi için orijinal yazıya https://blog.orange.tw/2018/10/ ve son istismar için https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
Başka bir yazı için https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/

tip

AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)

HackTricks'i Destekleyin