
解决php提权的时候因系统禁用函数导致无法执行命令的情况
bypass_disablefunc.php में तीन GET विकल्प हैं: cmd, outpath और sopath।
विकल्प बहुत सरल हैं,
cmd आपका दुर्भावनापूर्ण कमांड है,
outpath कमांड आउटपुट फ़ाइल का पथ है (पठनीय और लिखने योग्य),
sopath हमारे shared object bypass_disablefunc_x64.so का पूर्ण पथ है। उदाहरण के लिए:
पहला cmd पैरामीटर है, जो निष्पादित किए जाने वाले सिस्टम कमांड को दर्शाता है (जैसे pwd);
दूसरा outpath पैरामीटर है, जो कमांड निष्पादन के आउटपुट परिणाम को सहेजने के लिए फ़ाइल पथ है (जैसे / tmp / xx), ताकि इसे पृष्ठ पर प्रदर्शित किया जा सके। इसके अलावा, इस पैरामीटर के बारे में आपको ध्यान देना चाहिए कि web के पास पढ़ने-लिखने की अनुमति है या नहीं, web क्रॉस-डायरेक्टरी एक्सेस कर सकता है या नहीं, फ़ाइल ओवरराइट और डिलीट हो जाएगी आदि;
तीसरा sopath पैरामीटर है, जो सिस्टम फ़ंक्शन को हाईजैक करने वाले shared object का पूर्ण पथ निर्दिष्ट करता है (जैसे /var/www/bypass_disablefunc_x64.so)। इसके अलावा, इस पैरामीटर के बारे में आपको ध्यान देना चाहिए कि क्या web उस तक क्रॉस-डायरेक्टरी एक्सेस कर सकता है।
इसके अलावा, bypass_disablefunc.php कमांड और आउटपुट पथ को जोड़कर एक पूर्ण कमांड लाइन बनाता है, इसलिए आपको cmd पैरामीटर में रीडायरेक्ट करने की आवश्यकता नहीं है।
bypass_disablefunc_x64.so कमांड निष्पादित करने के लिए shared object है, जिसे कमांड gcc -shared -fPIC bypass_disablefunc.c -o bypass_disablefunc_x64.so द्वारा bypass_disablefunc.c से संकलित किया जाता है।
यदि लक्ष्य x86 आर्किटेक्चर है, तो bypass_disablefunc_x86.so को पुनः संकलित करने के लिए -m32 विकल्प जोड़ना आवश्यक है।
bypass_disablefunc.php और bypass_disablefunc_x64.so को लक्ष्य तक पहुँचाने का तरीका खोजें। तीनों GET पैरामीटर सही ढंग से निर्दिष्ट करने के बाद, bypass_disablefunc.php disable_functions को बायपास कर सकता है।
ज्ञात समस्याएँ:
1)विभिन्न लक्ष्य वातावरणों में shared object को पुनः संकलित करने की आवश्यकता हो सकती है। इस प्रोजेक्ट में bypass_disablefunc_x64.so को debian, x64 पर संकलित किया गया है; गैर-debian प्रणालियों पर पुनः संकलन की आवश्यकता हो सकती है; 2)bypass_disablefunc.php को outpath द्वारा निर्दिष्ट पथ पर पढ़ने-लिखने की अनुमति होनी चाहिए। यदि लक्ष्य पर SELinux सक्षम है, तो यह web खाते को फ़ाइल लिखने से रोक सकता है। उदाहरण के लिए, यदि आप apache के रूप में id चलाते हैं, तो आउटपुट uid=48(apache) gid=48(apache) groups=48(apache) context=system_u:system_r:httpd_t:s0 होगा। अंत में लिखा context=system_u:system_r:httpd_t:s0 देखा? यही SELinux ही खलल डाल रहा है।