NFS no_root_squash/no_all_squash misconfiguration PE
_ /etc/exports _ फ़ाइल पढ़ें, यदि आपको कोई ऐसी डायरेक्टरी मिलती है जो no_root_squash के रूप में कॉन्फ़िगर की गई है, तो आप उसे एक क्लाइंट के रूप में एक्सेस कर सकते हैं और उस डायरेक्टरी में लिख सकते हैं जैसे कि आप मशीन के स्थानीय रूट हो।
no_root_squash: यह विकल्प मूल रूप से यह अधिकार देता है कि क्लाइंट पर रूट उपयोगकर्ता को NFS सर्वर पर फ़ाइलों तक पहुँचने की अधिकार हो। और इससे गंभीर सुरक्षा संबंधित परिणाम हो सकते हैं।
no_all_squash: यह no_root_squash विकल्प के समान है लेकिन यह गैर-रूट उपयोगकर्ताओं के लिए लागू होता है। कल्पना करें, आपके पास कोई नोबडी उपयोगकर्ता के रूप में शैल उपयोगकर्ता है; /etc/exports फ़ाइल चेक की; no_all_squash विकल्प मौजूद है; /etc/passwd फ़ाइल चेक की; गैर-रूट उपयोगकर्ता के रूप में एम्युलेट करें; उस उपयोगकर्ता के रूप में एक suid फ़ाइल बनाएं (NFS का उपयोग करके माउंट करके)। नोबडी उपयोगकर्ता के रूप में suid को एक्सीक्यूट करें और विभिन्न उपयोगकर्ता बनें।
विशेषाधिकार उन्नति
रिमोट एक्सप्लॉइट
यदि आपने इस भयंकरता को पाया है, तो आप इसे एक्सप्लॉइट कर सकते हैं:
उस डायरेक्टरी को माउंट करना एक क्लाइंट मशीन में, और रूट के रूप में माउंटेड फ़ोल्डर में /bin/bash बाइनरी कॉपी करना और इसे SUID अधिकार देना, और विक्टिम मशीन से उस बैश बाइनरी को एक्सीक्यूट करना।
उस निर्देशिका को माउंट करें एक क्लाइंट मशीन में, और रूट के रूप में कॉपी करें माउंट किए गए फ़ोल्डर में हमारा कंपाइल किया गया पेलोड जो SUID अनुमति का दुरुपयोग करेगा, उसे SUID अधिकार दें, और विक्टिम मशीन से उस बाइनरी को चलाएं (आप यहाँ कुछ सी SUID पेलोड पा सकते हैं)।
स्थानीय उत्कृष्टि
ध्यान दें कि यदि आप अपनी मशीन से पीड़ित मशीन तक एक टनल बना सकते हैं तो आप इस उत्कृष्टि उन्नयन का उपयोग कर सकते हैं जिसमें आवश्यक पोर्ट्स को टनल किया जाता है।
निम्नलिखित ट्रिक उस स्थिति के लिए है जब फ़ाइल /etc/exports
एक आईपी इंडिकेट करती है। इस मामले में आप किसी भी स्थिति में रिमोट उत्कृष्टि का उपयोग नहीं कर सकेंगे और आपको इस ट्रिक का दुरुपयोग करने की आवश्यकता होगी।
उत्कृष्टि काम करने के लिए एक और आवश्यक शर्त यह है कि /etc/export
के अंदर निर्यात असुरक्षित
ध्वज का उपयोग कर रहा हो।
--मुझे यकीन नहीं है कि यदि /etc/export
एक आईपी पता इंडिकेट कर रहा है तो यह ट्रिक काम करेगी--
मौलिक जानकारी
स्थिति में एक माउंट किए गए NFS साझा का उत्कृष्टि करने का संवाद शामिल है, NFSv3 विनिर्देश में एक दोष का उपयोग करना जिससे क्लाइंट अपना यूआईडी/जीआईडी निर्दिष्ट कर सकता है, जिससे अनधिकृत पहुंच संभव हो सकती है। उत्कृष्टि में libnfs का उपयोग होता है, जो NFS RPC कॉल्स का झूठा बनाने की अनुमति देता है।
पुस्तकालय का संकलन
पुस्तकालय के संकलन चरणों में कर्नेल संस्करण के आधार पर समायोजन की आवश्यकता हो सकती है। इस विशेष मामले में, fallocate सिसकॉल्स को टिप्पणी किया गया था। संकलन प्रक्रिया निम्नलिखित आदेशों को शामिल करती है:
शोध का अभ्यास
इस अभ्यास में एक सरल सी प्रोग्राम (pwn.c
) बनाया जाता है जो विशेषाधिकारों को रूट तक उन्नत करता है और फिर एक शैल को क्रियान्वित करता है। प्रोग्राम को कंपाइल किया जाता है, और परिणामी बाइनरी (a.out
) को suid रूट के साथ शेयर पर रखा जाता है, ld_nfs.so
का उपयोग करके RPC कॉल में uid को फर्जी किया जाता है:
अभ्यास को कंपाइल करें:
अभ्यास को शेयर पर रखें और uid को फर्जी करके इसकी अनुमतियों को संशोधित करें:
रूट विशेषाधिकार प्राप्त करने के लिए अभ्यास को क्रियान्वित करें:
बोनस: NFShell के लिए छिपीली फ़ाइल एक्सेस
एक बार रूट एक्सेस प्राप्त किया जाता है, NFS शेयर के साथ अंतरक्रिया करने के लिए (स्वामित्व को बदलने के बिना छापे छोड़ने के लिए), एक पायथन स्क्रिप्ट (nfsh.py) का उपयोग किया जाता है। यह स्क्रिप्ट उस फ़ाइल के uid को समान करने के लिए uid को समायोजित करता है, जिसका उपयोग अनुमत
इस तरह से चलाएं:
संदर्भ
Last updated