Translated ['src/linux-hardening/privilege-escalation/nfs-no_root_squash

This commit is contained in:
Translator 2025-02-05 09:39:08 +00:00
parent 5493fe3e3a
commit e8dcc1b5ad
2 changed files with 33 additions and 23 deletions

View File

@ -2,18 +2,18 @@
# Squashing Basic Info # Squashing Basic Info
NFS आमतौर पर (विशेष रूप से लिनक्स में) क्लाइंट द्वारा फ़ाइलों तक पहुँचने के लिए निर्दिष्ट `uid` और `gid` पर भरोसा करेगा (यदि kerberos का उपयोग नहीं किया गया है)। हालाँकि, कुछ कॉन्फ़िगरेशन हैं जो सर्वर में सेट किए जा सकते हैं ताकि **इस व्यवहार को बदल सकें**: NFS आमतौर पर (विशेष रूप से लिनक्स में) क्लाइंट द्वारा फ़ाइलों तक पहुँचने के लिए निर्दिष्ट `uid` और `gid` पर भरोसा करेगा (यदि kerberos का उपयोग नहीं किया गया है)। हालाँकि, कुछ कॉन्फ़िगरेशन हैं जो सर्वर में **इस व्यवहार को बदलने** के लिएेट िए जा सकत हैं:
- **`all_squash`**: यह सभी पहुँच को **`nobody`** (65534 unsigned / -2 signed) पर मैप करके दबा देता है। इसलिए, हर कोई `nobody` है और कोई उपयोगकर्ता उपयोग नहीं किया जाता है। - **`all_squash`**: यह सभी पहुँच को **`nobody`** (65534 unsigned / -2 signed) पर मैप करके दबा देता है। इसलिए, हर कोई `nobody` है और कोई उपयोगकर्ता उपयोग नहीं किया जाता है।
- **`root_squash`/`no_all_squash`**: यह लिनक्स पर डिफ़ॉल्ट है और **केवल uid 0 (root) के साथ पहुँच को दबाता है**। इसलिए, कोई भी `UID` और `GID` पर भरोसा किया जाता है लेकिन `0` को `nobody` में दबा दिया जाता है (इसलिए कोई रूट अनुकरण संभव नहीं है)। - **`root_squash`/`no_all_squash`**: यह लिनक्स पर डिफ़ॉल्ट है और **केवल uid 0 (root) के साथ पहुँच को दबाता है**। इसलिए, कोई भी `UID` और `GID` पर भरोसा किया जाता है लेकिन `0` को `nobody` में दबा दिया जाता है (इसलिए कोई रूट अनुकरण संभव नहीं है)।
- **``no_root_squash`**: यदि यह कॉन्फ़िगरेशन सक्षम है तो यह रूट उपयोगकर्ता को भी नहीं दबाता है। इसका मतलब है कि यदि आप इस कॉन्फ़िगरेशन के साथ एक निर्देशिका को माउंट करते हैं, तो आप इसे रूट के रूप में एक्सेस कर सकते हैं। - **``no_root_squash`**: यदि यह कॉन्फ़िगरेशन सक्षम है तो यह रूट उपयोगकर्ता को भी नहीं दबाता है। इसका मतलब है कि यदि आप इस कॉन्फ़िगरेशन के साथ एक निर्देशिका को माउंट करते हैं, तो आप इसे रूट के रूप में एक्सेस कर सकते हैं।
**/etc/exports** फ़ाइल में, यदि आप किसी निर्देशिका को **no_root_squash** के रूप में कॉन्फ़िगर किया हुआ पाते हैं, तो आप **एक क्लाइंट के रूप में** इसे **एक्सेस** कर सकते हैं और उस निर्देशिका के अंदर **लिख सकते हैं** जैसे कि आप मशीन के स्थानीय **रूट** थे। **/etc/exports** फ़ाइल में, यदि आप किसी निर्देशिका को **no_root_squash** के रूप में कॉन्फ़िगर करते हुए पाते हैं, तो आप **एक क्लाइंट के रूप में** इसे **एक्सेस** कर सकते हैं और उस निर्देशिका के अंदर **लिख सकते हैं** **जैसे** कि आप मशीन के स्थानीय **रूट** थे।
**NFS** के बारे में अधिक जानकारी के लिए देखें: **NFS** के बारे में अधिक जानकारी के लिए देखें:
{{#ref}} {{#ref}}
/network-services-pentesting/nfs-service-pentesting.md ../../network-services-pentesting/nfs-service-pentesting.md
{{#endref}} {{#endref}}
# Privilege Escalation # Privilege Escalation
@ -21,7 +21,7 @@ NFS आमतौर पर (विशेष रूप से लिनक्स
## Remote Exploit ## Remote Exploit
Option 1 using bash: Option 1 using bash:
- **क्लाइंट मशीन में उस निर्देशिका को माउंट करना**, और **रूट के रूप में** माउंट की गई फ़ोल्डर के अंदर **/bin/bash** बाइनरी को कॉपी करना और इसे **SUID** अधिकार देना, और **पीड़ित** मशीन से उस बाश बाइनरी को निष्पादित करना। - **क्लाइंट मशीन में उस निर्देशिका को माउंट करना**, और **रूट के रूप में** माउंट किए गए फ़ोल्डर के अंदर **/bin/bash** बाइनरी को कॉपी करना और इसे **SUID** अधिकार देना, और **शिकार** मशीन से उस बाश बाइनरी को निष्पादित करना।
- ध्यान दें कि NFS शेयर के अंदर रूट होने के लिए, **`no_root_squash`** को सर्वर में कॉन्फ़िगर किया जाना चाहिए। - ध्यान दें कि NFS शेयर के अंदर रूट होने के लिए, **`no_root_squash`** को सर्वर में कॉन्फ़िगर किया जाना चाहिए।
- हालाँकि, यदि सक्षम नहीं किया गया है, तो आप बाइनरी को NFS शेयर में कॉपी करके और इसे उस उपयोगकर्ता के रूप में SUID अनुमति देकर अन्य उपयोगकर्ता में वृद्धि कर सकते हैं, जिसे आप बढ़ाना चाहते हैं। - हालाँकि, यदि सक्षम नहीं किया गया है, तो आप बाइनरी को NFS शेयर में कॉपी करके और इसे उस उपयोगकर्ता के रूप में SUID अनुमति देकर अन्य उपयोगकर्ता में वृद्धि कर सकते हैं, जिसे आप बढ़ाना चाहते हैं।
```bash ```bash
@ -37,7 +37,7 @@ cd <SHAREDD_FOLDER>
./bash -p #ROOT shell ./bash -p #ROOT shell
``` ```
विकल्प 2 c संकलित कोड का उपयोग करते हुए: विकल्प 2 c संकलित कोड का उपयोग करते हुए:
- **क्लाइंट मशीन में उस निर्देशिका को माउंट करना**, और **रूट के रूप में** माउंट की गई फ़ोल्डर के अंदर हमारे संकलित पेलोड को कॉपी करना जो SUID अनुमति का दुरुपयोग करेगा, इसे **SUID** अधिकार देा, और **शिकार** मशीन से उस बाइनरी को **निष्पादित** करेगा (आप यहाँ कुछ[ C SUID पेलोड्स](payloads-to-execute.md#c) पा सकते हैं)। - **क्लाइंट मशीन में उस निर्देशिका को माउंट करना**, और **रूट के रूप में** माउंट की गई फ़ोल्डर के अंदर हमारे संकलित पेलोड को कॉपी करना जो SUID अनुमति का दुरुपयोग करेगा, इसे **SUID** अधिकार देा, और **शिकार** मशीन से उस बाइनरी को **निष्पादित करना** (आप यहाँ कुछ [C SUID पेलोड्स](payloads-to-execute.md#c) पा सकते हैं)।
- पहले की तरह ही प्रतिबंध। - पहले की तरह ही प्रतिबंध।
```bash ```bash
#Attacker, as root user #Attacker, as root user
@ -55,14 +55,14 @@ cd <SHAREDD_FOLDER>
## Local Exploit ## Local Exploit
> [!NOTE] > [!NOTE]
> ध्यान दें कि यदि आप अपने मशीन से पीड़ित मशीन तक **एक टनल बना सकते हैं, तो आप इस विशेषाधिकार वृद्धि का शोषण करने के लिए रिमोट संस्करण का उपयोग कर सकते हैं, आवश्यक पोर्ट्स को टनल करते हुए**।\ > ध्यान दें कि यदि आप अपने मशीन से पीड़ित मशीन तक एक **टनल बना सकते हैं, तो आप इस विशेषाधिकार वृद्धि का शोषण करने के लिए रिमोट संस्करण का उपयोग कर सकते हैं, आवश्यक पोर्ट्स को टनल करते हुए**।\
> निम्नलिखित ट्रिक उस स्थिति के लिए है जब फ़ाइल `/etc/exports` **एक IP को इंगित करती है**। इस मामले में आप **किसी भी स्थिति में** **रिमोट शोषण** का उपयोग नहीं कर पाएंगे और आपको **इस ट्रिक का दुरुपयोग करना होगा**।\ > निम्नलिखित ट्रिक उस स्थिति में है जब फ़ाइल `/etc/exports` **एक IP को इंगित करती है**। इस मामले में आप **किसी भी स्थिति में** **रिमोट शोषण** का उपयोग नहीं कर पाएंगे और आपको **इस ट्रिक का दुरुपयोग करना होगा**।\
> शोषण के काम करने के लिए एक और आवश्यक आवश्यकता है कि **`/etc/export` के अंदर का निर्यात** **`insecure` फ्लैग का उपयोग कर रहा हो**।\ > शोषण के काम करने के लिए एक और आवश्यक आवश्यकता है कि **`/etc/export` के अंदर का निर्यात** **`insecure` फ्लैग का उपयोग कर रहा हो**।\
> --_मुझे यकीन नहीं है कि यदि `/etc/export` एक IP पते को इंगित कर रहा है तो यह ट्रिक काम करेगी_-- > --_मुझे यकीन नहीं है कि यदि `/etc/export` एक IP पते को इंगित कर रहा है तो यह ट्रिक काम करेगी_--
## Basic Information ## Basic Information
परिदृश्य में एक स्थानीय मशीन पर एक माउंटेड NFS शेयर का शोषण करना शामिल है, NFSv3 विनिर्देशन में एक दोष का लाभ उठाते हुए जो क्लाइंट को अपने uid/gid को निर्दिष्ट करने की अनुमति देता है, संभावित रूप से अनधिकृत पहुंच सक्षम करता है। शोषण में [libnfs](https://github.com/sahlberg/libnfs) का उपयोग शामिल है, जो NFS RPC कॉल के forging की अनुमति देने वाली एक लाइब्रेरी है। परिदृश्य में एक स्थानीय मशीन पर एक माउंटेड NFS शेयर का शोषण करना शामिल है, NFSv3 विनिर्देशन में एक दोष का लाभ उठाते हुए जो क्लाइंट को अपने uid/gid को निर्दिष्ट करने की अनुमति देता है, संभावित रूप से अनधिकृत पहुंच सक्षम करता है। शोषण में [libnfs](https://github.com/sahlberg/libnfs) का उपयोग शामिल है, जो NFS RPC कॉल के निर्माण की अनुमति देने वाली एक लाइब्रेरी है।
### Compiling the Library ### Compiling the Library
@ -75,7 +75,7 @@ gcc -fPIC -shared -o ld_nfs.so examples/ld_nfs.c -ldl -lnfs -I./include/ -L./lib
``` ```
### एक्सप्लॉइट करना ### एक्सप्लॉइट करना
एक्सप्लॉइट में एक सरल C प्रोग्राम (`pwn.c`) बनाना शामिल है जो रूट के लिए विशेषाधिकार बढ़ाता है और फिर एक शेल निष्पादित करता है। प्रोग्राम को संकलित किया जाता है, और परिणामी बाइनरी (`a.out`) को suid रूट के साथ शेयर पर रखा जाता है, RPC कॉल में uid को फेक करने के लिए `ld_nfs.so` का उपयोग करते हुए: एक्सप्लॉइट में एक साधारण C प्रोग्राम (`pwn.c`) बनाना शामिल है जो रूट के लिए विशेषाधिकार बढ़ाता है और फिर एक शेल निष्पादित करता है। प्रोग्राम को संकलित किया जाता है, और परिणामी बाइनरी (`a.out`) को suid रूट के साथ शेयर पर रखा जाता है, RPC कॉल में uid को फेक करने के लिए `ld_nfs.so` का उपयोग करते हुए:
1. **एक्सप्लॉइट कोड को संकलित करें:** 1. **एक्सप्लॉइट कोड को संकलित करें:**
```bash ```bash
@ -97,7 +97,7 @@ LD_NFS_UID=0 LD_LIBRARY_PATH=./lib/.libs/ LD_PRELOAD=./ld_nfs.so chmod u+s nfs:/
``` ```
## Bonus: NFShell for Stealthy File Access ## Bonus: NFShell for Stealthy File Access
एक बार जब रूट एक्सेस प्राप्त हो जाता है, NFS शेयर के साथ इंटरैक्ट करने के लिए बिना स्वामित्व बदले (निशान छोड़ने से बचने के लिए), एक Python स्क्रिप्ट (nfsh.py) का उपयोग किया जाता है। यह स्क्रिप्ट uid को उस फ़ाइल के uid से मेल खाने के लिए समायोजित करती है जिसे एक्सेस किया जा रहा है, जिससे शेयर पर फ़ाइलों के साथ इंटरैक्शन की अनुमति मिलती है बिना अनुमति समस्याओं के: एक बार जब रूट एक्सेस प्राप्त हो जाता है, NFS शेयर के साथ बातचीत करने के लिए बिना स्वामित्व बदले (निशान छोड़ने से बचने के लिए), एक Python स्क्रिप्ट (nfsh.py) का उपयोग किया जाता है। यह स्क्रिप्ट uid को उस फ़ाइल के uid से मेल खाने के लिए समायोजित करती है जिसे एक्सेस किया जा रहा है, जिससे शेयर पर फ़ाइलों के साथ बातचीत करने की अनुमति मिलती है बिना अनुमति समस्याओं के:
```python ```python
#!/usr/bin/env python #!/usr/bin/env python
# script from https://www.errno.fr/nfs_privesc.html # script from https://www.errno.fr/nfs_privesc.html

View File

@ -12,9 +12,9 @@
``` ```
### Authentication ### Authentication
इस प्रोटोकॉल का एक महत्वपूर्ण पहलू इसकी सामान्य कमी है **authentication** या **authorization mechanisms** में। इसके बजाय, authorization **file system information** पर निर्भर करता है, जिसमें सर्वर को **client-provided user information** को file system के आवश्यक **authorization format** में सटीक रूप से अनुवादित करने का कार्य सौंपा गया है, जो मुख्य रूप से **UNIX syntax** का पालन करता है। इस प्रोटोकॉल का एक महत्वपूर्ण पहलू इसकी सामान्य कमी है **authentication** या **authorization mechanisms** में। इसके बजाय, authorization **file system information** पर निर्भर करता है, जिसमें सर्वर को **client-provided user information** को फ़ाइल प्रणाली के आवश्यक **authorization format** में सटीक रूप से अनुवादित करने का कार्य सौंपा गया है, जो मुख्य रूप से **UNIX syntax** का पालन करता है।
Authentication आमतौर पर **UNIX `UID`/`GID` पहचानकर्ताओं और समूह सदस्यताओं** पर निर्भर करता है। हालाँकि, एक चुनौती उत्पन्न होती है क्योंकि **`UID`/`GID` मैपिंग** में संभावित असंगति के कारण क्लाइंट और सर्वर के बीच, सर्वर द्वारा अतिरिक्त सत्यापन के लिए कोई स्थान नहीं छोड़ता। इसके अलावा, ये विवरण क्लाइंट द्वारा भेजे जाते हैं और सर्वर द्वारा विश्वसनीय होते हैं, इसलिए एक धोखेबाज़ क्लाइंट संभावित रूप से **अधिक विशेषाधिकार प्राप्त `uid` और `gid` भेजकर किसी अन्य उपयोगकर्ता का **impersonate** कर सकता है। Authentication सामान्यतः **UNIX `UID`/`GID` पहचानकर्ताओं और समूह सदस्यताओं** पर निर्भर करता है। हालाँकि, एक चुनौती उत्पन्न होती है क्योंकि **`UID`/`GID` मैपिंग** में संभावित असंगति के कारण क्लाइंट और सर्वर के बीच, जिससे सर्वर द्वारा अतिरिक्त सत्यापन के लिए कोई स्थान नहीं बचता। इसके अलावा, ये विवरण क्लाइंट द्वारा भेजे जाते हैं और सर्वर द्वारा विश्वसनीय होते हैं, इसलिए एक धोखेबाज़ क्लाइंट संभावित रूप से **अधिक विशेषाधिकार प्राप्त `uid` और `gid` भेजकर किसी अन्य उपयोगकर्ता का **impersonate** कर सकता है।
**हालांकि, ध्यान दें कि डिफ़ॉल्ट रूप से NFS का उपयोग करके `UID` 0 (root) का impersonate करना संभव नहीं है। इस पर अधिक जानकारी squashing अनुभाग में है।** **हालांकि, ध्यान दें कि डिफ़ॉल्ट रूप से NFS का उपयोग करके `UID` 0 (root) का impersonate करना संभव नहीं है। इस पर अधिक जानकारी squashing अनुभाग में है।**
@ -25,7 +25,7 @@ Authentication आमतौर पर **UNIX `UID`/`GID` पहचानकर
/PATH/TO/EXPORT      CLIENT1(OPTIONS1) CLIENT2(OPTIONS2) ... /PATH/TO/EXPORT      CLIENT1(OPTIONS1) CLIENT2(OPTIONS2) ...
/media/disk/share   192.168.2.123(rw,sec=krb5p:krb5i) /media/disk/share   192.168.2.123(rw,sec=krb5p:krb5i)
``` ```
As you can see, यह एक विशिष्ट **IP** या **hostname** को साझा करने के लिए कॉन्फ़िगर करने की अनुमति देता है। केवल वही पता साझा करने तक पहुँच सकेगा। As you can see, यह एक विशिष्ट **IP** या **hostname** को शेयर तक पहुँचने के लिए कॉन्फ़िगर करने की अनुमति देता है। केवल वही पता शेयर तक पहुँच सकेगा।
### Versions ### Versions
@ -33,7 +33,7 @@ As you can see, यह एक विशिष्ट **IP** या **hostname**
- **NFSv3**: कई सुधारों के साथ पेश किया गया, NFSv3 ने अपने पूर्ववर्ती पर विस्तार किया, जिसमें परिवर्तनशील फ़ाइल आकारों का समर्थन और बेहतर त्रुटि रिपोर्टिंग तंत्र प्रदान किया। इसके विकास के बावजूद, इसे NFSv2 क्लाइंट के साथ पूर्ण पूर्ववर्ती संगतता में सीमाओं का सामना करना पड़ा। - **NFSv3**: कई सुधारों के साथ पेश किया गया, NFSv3 ने अपने पूर्ववर्ती पर विस्तार किया, जिसमें परिवर्तनशील फ़ाइल आकारों का समर्थन और बेहतर त्रुटि रिपोर्टिंग तंत्र प्रदान किया। इसके विकास के बावजूद, इसे NFSv2 क्लाइंट के साथ पूर्ण पूर्ववर्ती संगतता में सीमाओं का सामना करना पड़ा।
- **NFSv4**: NFS श्रृंखला में एक महत्वपूर्ण संस्करण, NFSv4 ने नेटवर्क के बीच फ़ाइल साझा करने क आधुनिक बनाने के लिए डिज़ाइन की गई सुविधाओं का एक सेट पेश किया। उल्लेखनीय सुधारों में **उच्च सुरक्षा** के लिए Kerberos का एकीकरण, फ़ायरवॉल को पार करने और पोर्टमैपर्स की आवश्यकता के बिना इंटरनेट पर संचालन करने की क्षमता, एक्सेस कंट्रोल सूचियों (ACLs) का समर्थन, और स्थिति-आधारित संचालन का परिचय शामिल है। इसके प्रदर्शन में सुधार और स्थिति-आधारित प्रोटोकॉल को अपनाने ने NFSv4 को नेटवर्क फ़ाइल साझा करने की तकनीकों में एक महत्वपूर्ण प्रगति के रूप में अलग किया। - **NFSv4**: NFS श्रृंखला में एक महत्वपूर्ण संस्करण, NFSv4 ने नेटवर्क के बीच फ़ाइल साझा करने के लिए आधुनिक बनाने के लिए डिज़ाइन की गई सुविधाओं का एक सेट पेश किया। उल्लेखनीय सुधारों में **उच्च सुरक्षा** के लिए Kerberos का एकीकरण, फ़ायरवॉल को पार करने और पोर्टमैपर्स की आवश्यकता के बिना इंटरनेट पर संचालन करने की क्षमता, एक्सेस कंट्रोल सूचियों (ACLs) का समर्थन, और स्थिति-आधारित संचालन का परिचय शामिल है। इसके प्रदर्शन में सुधार और स्थिति-आधारित प्रोटोकॉल को अपनाने ने NFSv4 को नेटवर्क फ़ाइल साझा करने की तकनीकों में एक महत्वपूर्ण प्रगति के रूप में अलग किया।
- ध्यान दें कि लिनक्स होस्ट NFS में kerberos प्रमाणीकरण का समर्थन करना बहुत अजीब है। - ध्यान दें कि लिनक्स होस्ट NFS में kerberos प्रमाणीकरण का समर्थन करना बहुत अजीब है।
NFS के प्रत्येक संस्करण को नेटवर्क वातावरण की विकसित आवश्यकताओं को संबोधित करने के इरादे से विकसित किया गया है, सुरक्षा, संगतता और प्रदर्शन को क्रमिक रूप से बढ़ाते हुए। NFS के प्रत्येक संस्करण को नेटवर्क वातावरण की विकसित आवश्यकताओं को संबोधित करने के इरादे से विकसित किया गया है, सुरक्षा, संगतता और प्रदर्शन को क्रमिक रूप से बढ़ाते हुए।
@ -48,15 +48,15 @@ NFS के प्रत्येक संस्करण को नेटवर
### Subtree check ### Subtree check
केवल लिनक्स पर उपलब्ध। man(5) exports कहता है: "यदि फ़ाइल सिस्टम का एक उपनिर्देशिका निर्यातित है, लेकिन पूरा फ़ाइल सिस्टम नहीं है, तो जब भी एक NFS अनुरोध आता है, सर्वर को यह जांचना चाहिए कि न केवल एक्सेस की गई फ़ाइल उपयुक्त फ़ाइल सिस्टम में है (जो आसान है) बल्कि यह निर्यातित पेड़ में भी है (जो कठिन है)। इस जांच को उप-ट्री जांच कहा जाता है।" केवल लिनक्स पर उपलब्ध। man(5) exports कहता है: "यदि फ़ाइल सिस्टम का एक उपनिर्देशिका निर्यातित है, लेकिन पूरा फ़ाइल सिस्टम नहीं है, तो जब भी एक NFS अनुरोध आता है, सर्वर को यह जांचना चाहिए कि न केवल एक्सेस की गई फ़ाइल उपयुक्त फ़ाइल सिस्टम में है (जो आसान है) बल्कि यह निर्यातित पेड़ में भी है (जो कठिन है)। इस जांच को उप-निर्देशिका जांच कहा जाता है।"
लिनक्स में **`subtree_check` सुविधा डिफ़ॉल्ट रूप से अक्षम है** लिनक्स में **`subtree_check` फीचर डिफ़ॉल्ट रूप से अक्षम** है।
## Enumeration ## Enumeration
### Showmount ### Showmount
इसका उपयोग **NFSv3 सर्वर से जानकारी प्राप्त करने** के लिए किया जा सकता है, जैसे **निर्यातों** की सूची, कौन इन निर्यातों तक **पहुँचने के लिए अधिकृत है**, और कौन से क्लाइंट जुड़े हुए हैं (जो गलत हो सकता है यदि कोई क्लाइंट बिना सर्वर को बताए डिस्कनेक्ट हो जाता है)। इसका उपयोग **NFSv3 सर्वर से जानकारी प्राप्त करने** के लिए किया जा सकता है, जैसे **निर्यातों** की सूची, कौन इन निर्यातों तक **पहुँचने के लिए अधिकृत** है, और कौन से क्लाइंट जुड़े हुए हैं (जो गलत हो सकता है यदि कोई क्लाइंट बिना सर्वर को बताए डिस्कनेक्ट हो जाता है)।
**NFSv4 क्लाइंट सीधे /export** तक पहुँचते हैं और वहाँ से निर्यातों तक पहुँचने की कोशिश करते हैं, यदि यह अमान्य या किसी कारण से अनधिकृत है तो विफल हो जाते हैं। **NFSv4 क्लाइंट सीधे /export** तक पहुँचते हैं और वहाँ से निर्यातों तक पहुँचने की कोशिश करते हैं, यदि यह अमान्य या किसी कारण से अनधिकृत है तो विफल हो जाते हैं।
यदि `showmount` जैसे उपकरण या Metasploit मॉड्यूल NFS पोर्ट से जानकारी नहीं दिखाते हैं, तो यह संभावित रूप से एक NFSv4 सर्वर है जो संस्करण 3 का समर्थन नहीं करता है। यदि `showmount` जैसे उपकरण या Metasploit मॉड्यूल NFS पोर्ट से जानकारी नहीं दिखाते हैं, तो यह संभावित रूप से एक NFSv4 सर्वर है जो संस्करण 3 का समर्थन नहीं करता है।
@ -75,7 +75,7 @@ scanner/nfs/nfsmount #Scan NFS mounts and list permissions
``` ```
### nfs_analyze ### nfs_analyze
यह उपकरण [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) NFS सर्वर से बहुत सारे डेटा प्राप्त करने के लिए उपयोग किया जा सकता है जैसे **mounts**, समर्थित NFS संस्करण, जुड़े IP, और यहां तक कि यह भी कि क्या **exports से अन्य फ़ोल्डरों में भागना संभव है** या **यदि `no_root_squash` सक्षम है** यह उपकरण [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) NFS सर्वर से बहुत सारे डेटा प्राप्त करने के लिए उपयोग किया जा सकता है जैसे कि **mounts**, समर्थित NFS संस्करण, जुड़े हुए IP, और यहां तक कि यह भी कि क्या **exports से अन्य फ़ोल्डरों में भागना संभव है** या **यदि `no_root_squash` सक्षम है**
## Mounting ## Mounting
@ -84,7 +84,7 @@ scanner/nfs/nfsmount #Scan NFS mounts and list permissions
```bash ```bash
showmount -e <IP> showmount -e <IP>
``` ```
फिर इसे माउंट करें: फिर इसे इस प्रकार माउंट करें:
```bash ```bash
mount -t nfs [-o vers=2] <ip>:<remote_folder> <local_folder> -o nolock mount -t nfs [-o vers=2] <ip>:<remote_folder> <local_folder> -o nolock
``` ```
@ -99,17 +99,17 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
### UID और GID पर भरोसा करना ### UID और GID पर भरोसा करना
बिल्कुल, यहाँ एकमात्र समस्या यह है कि डिफ़ॉल्ट रूप से रूट (`UID` 0) का अनुकरण करना संभव नहीं है। हालाँकि, किसी अन्य उपयोगकर्ता का अनुकरण करना संभव है या यदि `no_root_squash` सक्षम है तो आप रूट का भी अनुकरण कर सकते हैं। बिल्कुल, यहाँ एकमात्र समस्या यह है कि डिफ़ॉल्ट रूप से रूट (`UID` 0) का अनुकरण करना संभव नहीं है। हालाँकि, आप किसी अन्य उपयोगकर्ता का अनुकरण कर सकते हैं या यदि `no_root_squash` सक्षम है तो आप रूट का भी अनुकरण कर सकते हैं।
- यदि आप एक फ़ोल्डर माउंट करते हैं जिसमें **फाइलें या फ़ोल्डर केवल कुछ उपयोगकर्ता द्वारा पहुँच योग्य हैं** (द्वारा **UID**)। आप **स्थानीय रूप से** उस **UID** के साथ एक उपयोगकर्ता बना सकते हैं और उस **उपयोगकर्ता** का उपयोग करके आप फ़ाइल/फ़ोल्डर तक **पहुँच** सकते हैं। - यदि आप एक फ़ोल्डर माउंट करते हैं जिसमें **फाइलें या फ़ोल्डर केवल कुछ उपयोगकर्ता द्वारा पहुँच योग्य हैं** (द्वारा **UID**)। आप **स्थानीय रूप से** उस **UID** के साथ एक उपयोगकर्ता बना सकते हैं और उस **उपयोगकर्ता** का उपयोग करके आप फ़ाइल/फ़ोल्डर तक **पहुँच** सकते हैं।
- टूल **`fuse_nfs`** [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) से हमेशा आवश्यक UID और GID फ़ाइलों तक पहुँचने के लिए भेजेगा। - टूल **`fuse_nfs`** [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) हमेशा फ़ाइलों तक पहुँचने के लिए आवश्यक UID और GID भेजेगा।
### SUID विशेषाधिकार वृद्धि ### SUID विशेषाधिकार वृद्धि
पृष्ठ की जाँच करें: पृष्ठ की जाँच करें:
{{#ref}} {{#ref}}
/linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md ../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md
{{#endref}} {{#endref}}
### निर्यातों से भागना ### निर्यातों से भागना
@ -120,7 +120,17 @@ mount -t nfs [-o vers=2] 10.12.0.150:/backup /mnt/new_back -o nolock
उदाहरण के लिए, यदि एक NFS सर्वर `/srv/` निर्यात कर रहा है और `/var/` उसी फ़ाइल सिस्टम में है, तो `/var/log/` से लॉग पढ़ना या `/var/www/` में एक वेबशेल स्टोर करना संभव है। उदाहरण के लिए, यदि एक NFS सर्वर `/srv/` निर्यात कर रहा है और `/var/` उसी फ़ाइल सिस्टम में है, तो `/var/log/` से लॉग पढ़ना या `/var/www/` में एक वेबशेल स्टोर करना संभव है।
इसके अलावा, ध्यान दें कि डिफ़ॉल्ट रूप से केवल रूट (0) उपयोगकर्ता को अनुकरण से सुरक्षित रखा गया है (Squash अनुभाग की जाँच करें)। हालाँकि, यदि एक फ़ाइल **रूट द्वारा स्वामित्व में है लेकिन समूह 0 नहीं है, तो इसे पहुँच पाना संभव है**। उदाहरण के लिए, फ़ाइल `/etc/shadow` इसके अलावा, ध्यान दें कि डिफ़ॉल्ट रूप से केवल रूट (0) उपयोगकर्ता को अनुकरण से सुरक्षित रखा गया है (Squash अनुभाग की जाँच करें)। हालाँकि, यदि एक फ़ाइल **रूट द्वारा स्वामित्व में है लेकिन समूह 0 नहीं है, तो इसे पहुँच पाना संभव है**। उदाहरण के लिए, फ़ाइल `/etc/shadow` रूट द्वारा स्वामित्व में है लेकिन समूह `shadow` है (डेबियन पर gid 42)। इसलिए, इसे डिफ़ॉल्ट रूप से पढ़ना संभव है!
टूल **`nfs_analyze`** [https://github.com/hvs-consulting/nfs-security-tooling](https://github.com/hvs-consulting/nfs-security-tooling) इस हमले का समर्थन करने के लिए बनाया गया है जो फ़ाइल सिस्टम ext4, xfs, btrfs के संस्करण 3 के खिलाफ है (यह v4 में भी संभव होना चाहिए)।
### NSFShell
फ़ाइलों तक पहुँच प्राप्त करने के लिए UID और GID को आसानी से सूचीबद्ध, माउंट और बदलने के लिए आप [nfsshell](https://github.com/NetDirect/nfsshell) का उपयोग कर सकते हैं।
[अच्छा NFSShell ट्यूटोरियल।](https://www.pentestpartners.com/security-blog/using-nfsshell-to-compromise-older-environments/)
## कॉन्फ़िग फ़ाइलें
``` ```
/etc/exports /etc/exports
/etc/lib/nfs/etab /etc/lib/nfs/etab