NFS no_root_squash/no_all_squash misconfiguration PE
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
_ /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 अधिकार देना, और शिकार मशीन से उस बाइनरी को निष्पादित करना (आप यहाँ कुछ C SUID पेलोड्स पा सकते हैं)।
ध्यान दें कि यदि आप अपनी मशीन से पीड़ित मशीन तक एक टनेल बना सकते हैं, तो आप इस विशेषाधिकार वृद्धि का शोषण करने के लिए दूरस्थ संस्करण का उपयोग कर सकते हैं, आवश्यक पोर्ट्स को टनलिंग करते हुए।
यहां दी गई चाल उस स्थिति के लिए है जब फ़ाइल /etc/exports
एक IP को इंगित करती है। इस मामले में आप किसी भी स्थिति में दूरस्थ शोषण का उपयोग नहीं कर पाएंगे और आपको इस चाल का दुरुपयोग करना होगा।
शोषण के काम करने के लिए एक और आवश्यक शर्त यह है कि /etc/export
के अंदर का निर्यात insecure
ध्वज का उपयोग कर रहा होना चाहिए।
--मुझे यकीन नहीं है कि यदि /etc/export
एक IP पते को इंगित कर रहा है तो यह चाल काम करेगी--
परिदृश्य में एक स्थानीय मशीन पर एक माउंटेड NFS शेयर का शोषण करना शामिल है, NFSv3 विनिर्देशन में एक दोष का लाभ उठाते हुए जो क्लाइंट को अपने uid/gid को निर्दिष्ट करने की अनुमति देता है, संभावित रूप से अनधिकृत पहुंच सक्षम करता है। शोषण में libnfs का उपयोग शामिल है, जो NFS RPC कॉल के निर्माण की अनुमति देने वाली एक लाइब्रेरी है।
लाइब्रेरी संकलन चरणों में कर्नेल संस्करण के आधार पर समायोजन की आवश्यकता हो सकती है। इस विशेष मामले में, fallocate syscalls को टिप्पणी की गई थी। संकलन प्रक्रिया में निम्नलिखित कमांड शामिल हैं:
यह एक्सप्लॉइट एक साधारण C प्रोग्राम (pwn.c
) बनाने में शामिल है जो रूट पर विशेषाधिकार बढ़ाता है और फिर एक शेल निष्पादित करता है। प्रोग्राम को संकलित किया जाता है, और परिणामी बाइनरी (a.out
) को suid रूट के साथ शेयर पर रखा जाता है, RPC कॉल में uid को फेक करने के लिए ld_nfs.so
का उपयोग करते हुए:
एक्सप्लॉइट कोड संकलित करें:
शेयर पर एक्सप्लॉइट रखें और uid को फेक करके इसकी अनुमतियों को संशोधित करें:
रूट विशेषाधिकार प्राप्त करने के लिए एक्सप्लॉइट निष्पादित करें:
एक बार रूट एक्सेस प्राप्त होने के बाद, स्वामित्व को बदले बिना NFS शेयर के साथ इंटरैक्ट करने के लिए (निशान छोड़ने से बचने के लिए), एक Python स्क्रिप्ट (nfsh.py) का उपयोग किया जाता है। यह स्क्रिप्ट uid को उस फ़ाइल के uid से मेल खाने के लिए समायोजित करती है जिसे एक्सेस किया जा रहा है, जिससे शेयर पर फ़ाइलों के साथ इंटरैक्शन की अनुमति मिलती है बिना अनुमति समस्याओं के:
चलाएँ जैसे:
सीखें और AWS हैकिंग का अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) सीखें और GCP हैकिंग का अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)