LFI2RCE tramite PHP_SESSION_UPLOAD_PROGRESS
Reading time: 3 minutes
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.
Informazioni di base
Se hai trovato un Local File Inclusion anche se non hai una sessione e session.auto_start
è Off
. Se session.upload_progress.enabled
è On
e fornisci il PHP_SESSION_UPLOAD_PROGRESS
nei dati multipart POST, PHP abiliterà la sessione per te.
$ 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
Nota che con PHP_SESSION_UPLOAD_PROGRESS
puoi controllare i dati all'interno della sessione, quindi se includi il tuo file di sessione puoi includere una parte che controlli (un php shellcode per esempio).
note
Anche se la maggior parte dei tutorial su Internet ti consiglia di impostare session.upload_progress.cleanup
su Off
per scopi di debug. L'impostazione predefinita di session.upload_progress.cleanup
in PHP è ancora On
. Ciò significa che il tuo progresso di upload nella sessione verrà pulito il prima possibile. Quindi questo sarà un Race Condition.
Il CTF
Nel CTF originale dove questa tecnica è commentata, non era sufficiente sfruttare il Race Condition, ma il contenuto caricato doveva anche iniziare con la stringa @<?php
.
A causa dell'impostazione predefinita di session.upload_progress.prefix
, il nostro file di SESSION inizierà con un prefisso fastidioso upload_progress_
Come: upload_progress_controlledcontentbyattacker
Il trucco per rimuovere il prefisso iniziale era di base64codificare il payload 3 volte e poi decodificarlo tramite i filtri convert.base64-decode
, questo perché quando PHP decodifica in base64 rimuoverà i caratteri strani, quindi dopo 3 volte solo il payload inviato dall'attaccante rimarrà (e poi l'attaccante può controllare la parte iniziale).
Ulteriori informazioni nel writeup originale https://blog.orange.tw/2018/10/ e exploit finale https://github.com/orangetw/My-CTF-Web-Challenges/blob/master/hitcon-ctf-2018/one-line-php-challenge/exp_for_php.py
Un altro writeup in https://spyclub.tech/2018/12/21/one-line-and-return-of-one-line-php-writeup/
tip
Impara e pratica l'Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Impara e pratica l'Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Supporta HackTricks
- Controlla i piani di abbonamento!
- Unisciti al 💬 gruppo Discord o al gruppo telegram o seguici su Twitter 🐦 @hacktricks_live.
- Condividi trucchi di hacking inviando PR ai HackTricks e HackTricks Cloud repos di github.