LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
compress.zlib://
e PHP_STREAM_PREFER_STDIO
Un file aperto utilizzando il protocollo compress.zlib://
con il flag PHP_STREAM_PREFER_STDIO
può continuare a scrivere dati che arrivano alla connessione successivamente nello stesso file.
Questo significa che una chiamata come:
Invierà una richiesta chiedendo http://attacker.com/file, quindi il server potrebbe rispondere alla richiesta con una risposta HTTP valida, mantenere la connessione aperta e inviare dati extra qualche tempo dopo che verranno anch'essi scritti nel file.
Puoi vedere queste informazioni in questa parte del codice php-src in main/streams/cast.c:
Questo CTF è stato risolto utilizzando il trucco precedente.
L'attaccante farà in modo che il server vittima apra una connessione leggendo un file dal server dell'attaccante utilizzando il protocollo compress.zlib
.
Mentre questa connessione esiste, l'attaccante esfiltrerà il percorso del file temporaneo creato (è stato rivelato dal server).
Mentre la connessione è ancora aperta, l'attaccante sfrutterà un LFI caricando il file temporaneo che controlla.
Tuttavia, c'è un controllo nel server web che impedisce il caricamento di file che contengono <?
. Pertanto, l'attaccante sfrutterà una Condizione di Gara. Nella connessione che è ancora aperta, l'attaccante invierà il payload PHP DOPO che il webserver ha controllato se il file contiene i caratteri vietati ma PRIMA che carichi il suo contenuto.
Per ulteriori informazioni, controlla la descrizione della Condizione di Gara e il CTF in https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)