macOS FS Tricks
POSIX अनुमतियाँ संयोजन
डायरेक्टरी में अनुमतियाँ:
पढ़ें - आप डायरेक्टरी एंट्रीज़ को गणना कर सकते हैं
लिखें - आप फ़ाइलें हटा/लिख सकते हैं डायरेक्टरी में और आप खाली फ़ोल्डर्स को हटा सकते हैं।
लेकिन आप गैर-खाली फ़ोल्डर्स को हटा/संशोधित नहीं कर सकते जब तक आपके पास उसके लिए लिखने की अनुमति नहीं है।
आप एक फ़ोल्डर का नाम संशोधित नहीं कर सकते जब तक आप उसके मालिक नहीं हैं।
क्रियान्वित - आपको डायरेक्टरी को चलने की अनुमति है - अगर आपके पास यह अधिकार नहीं है, तो आप इसमें कोई भी फ़ाइल तक पहुंच नहीं सकते, या किसी भी सब-डायरेक्टरी में।
खतरनाक संयोजन
कैसे एक फ़ाइल/फ़ोल्डर को ओवरराइट करें जिसका मालिक root है, लेकिन:
पथ में एक माता डायरेक्टरी मालिक उपयोगकर्ता है
पथ में एक माता डायरेक्टरी मालिक एक उपयोगकर्ता समूह है जिसके लेखन अधिकार हैं
एक उपयोगकर्ता समूह को फ़ाइल के लिए लेखन की अनुमति है
पिछले किसी भी संयोजनों के साथ, एक हमलावर एक उच्चाधिकारित अर्बिट्रे राइट प्राप्त करने के लिए एक सिम/हार्ड लिंक को अंतर्निहित पथ में इंजेक्ट कर सकता है।
फ़ोल्डर रूट R+X विशेष मामला
अगर किसी डायरेक्टरी में फ़ाइलें हैं जहां केवल root को R+X एक्सेस है, तो वे किसी और के लिए पहुंचने योग्य नहीं हैं। इसलिए एक वंशावली को एक उपयोगकर्ता द्वारा पढ़ा जा सकने वाली फ़ाइल को, जिसे उस प्रतिबंध के कारण पढ़ा नहीं जा सकता, इस फ़ोल्डर से एक अलग वाले में ले जाने की एक विशेषता का उपयोग किया जा सकता है, ताकि इन फ़ाइलों को पढ़ने के लिए उन्हें अभद्र किया जा सके।
सिम्बॉलिक लिंक / हार्ड लिंक
यदि एक उच्चाधिकारित प्रक्रिया फ़ाइल में डेटा लिख रही है जो एक निम्न अधिकारित उपयोगकर्ता द्वारा नियंत्रित किया जा सकता है, या जो पहले से ही एक निम्न अधिकारित उपयोगकर्ता द्वारा बनाई गई हो सकती है। उपयोगकर्ता बस एक सिम्बॉलिक या हार्ड लिंक के माध्यम से इसे दूसरी फ़ाइल पर पॉइंट कर सकता है, और उच्चाधिकारित प्रक्रिया उस फ़ाइल पर लिखेगी।
जांचें अन्य खंडों में कि एक हमलावर कैसे उच्चाधिकार अर्बिट्रे राइट का दुरुपयोग करके अधिकारों को उन्नत कर सकता है।
.fileloc
.fileloc
एक्सटेंशन वाली फ़ाइलें अन्य एप्लिकेशन या बाइनरीज़ को पॉइंट कर सकती हैं ताकि जब वे खोले जाएं, तो एप्लिकेशन/बाइनरी वह एक्सीक्यूट किया जाए।
उदाहरण:
अनियमित एफडी
यदि आप प्रक्रिया को एक फ़ाइल या फ़ोल्डर को उच्च विशेषाधिकारों के साथ खोलने के लिए कर सकते हैं, तो आप crontab
का दुरुपयोग कर सकते हैं ताकि /etc/sudoers.d
में एक फ़ाइल को EDITOR=exploit.py
के साथ खोलें, इस प्रकार exploit.py
/etc/sudoers
के अंदर फ़ाइल को प्राप्त करेगा और इसका दुरुपयोग करेगा।
उदाहरण के लिए: https://youtu.be/f1HA5QhLQ7Y?t=21098
जांच निगरानी xattrs ट्रिक्स से बचें
हटाएं
uchg / uchange / uimmutable फ्लैग
यदि एक फ़ाइल/फ़ोल्डर में यह अपरिवर्तनीय गुण है तो उस पर xattr नहीं लगाया जा सकेगा।
defvfs माउंट
devfs माउंट xattr का समर्थन नहीं करता, अधिक जानकारी CVE-2023-32364 में मिलेगी।
लेखेंएक्सट्रिब्यूट ACL
यह ACL फ़ाइल में xattrs
जोड़ने से रोकता है।
com.apple.acl.text xattr + AppleDouble
AppleDouble फ़ाइल प्रारूप एक फ़ाइल की ACEs के साथ एक फ़ाइल की प्रतिलिपि बनाता है।
स्रोत कोड में देखा जा सकता है कि ACL पाठ प्रतिनिधित्व जो com.apple.acl.text
नामक xattr में संग्रहीत है, उसे डीकंप्रेस की गई फ़ाइल में ACL के रूप में सेट किया जाएगा। इसलिए, अगर आपने एक एप्लिकेशन को एक zip फ़ाइल में AppleDouble फ़ाइल प्रारूप के साथ संकुचित किया है जिसमें एक ACL है जो अन्य xattrs को लिखने से रोकता है... तो quarantine xattr एप्लिकेशन में सेट नहीं हुआ था:
अधिक जानकारी के लिए मूल रिपोर्ट देखें।
इसे प्रतिरूपित करने के लिए हमें पहले सही acl स्ट्रिंग प्राप्त करनी होगी:
(Note that even if this works the sandbox write the quarantine xattr before)
वास्तव में आवश्यक नहीं है लेकिन मैं उसे वहाँ छोड़ देता हूँ बस इस स्थिति में:
pagemacOS xattr-acls extra stuffकोड हस्ताक्षरों को उमकरना
बंडल में फ़ाइल _CodeSignature/CodeResources
शामिल है जिसमें हर एक फ़ाइल का हैश होता है। ध्यान दें कि CodeResources का हैश भी कृत्रिम में शामिल है, इसलिए हम उसके साथ खिलवाड़ नहीं कर सकते।
हालांकि, कुछ ऐसी फ़ाइलें हैं जिनके हस्ताक्षर की जांच नहीं की जाएगी, जिनमें plist में छोड़ नामक कुंजी है, जैसे:
आप CLI से एक संसाधन के हस्ताक्षर की गणना कर सकते हैं:
सामान्यत: macOS डिस्क को com.apple.DiskArbitrarion.diskarbitrariond
Mach सेवा के साथ माउंट करता है (जो /usr/libexec/diskarbitrationd
द्वारा प्रदान किया जाता है)। यदि LaunchDaemons plist फ़ाइल में पैरामीटर -d
जोड़ा जाए और पुनः आरंभ किया जाए, तो यह लॉग /var/log/diskarbitrationd.log
में स्टोर करेगा।
हालांकि, hdik
और hdiutil
जैसे उपकरणों का उपयोग करके com.apple.driver.DiskImages
kext के साथ सीधे संवाद किया जा सकता है।
अनियमित लेखन
आवश्यक sh स्क्रिप्ट
यदि आपका स्क्रिप्ट शैल स्क्रिप्ट के रूप में व्याख्या की जा सकती है, तो आप /etc/periodic/daily/999.local
शैल स्क्रिप्ट को अधिलेखित कर सकते हैं जो प्रतिदिन प्रेरित किया जाएगा।
आप इस स्क्रिप्ट का फर्जी निष्पादन कर सकते हैं: sudo periodic daily
डेमन्स
एक अनियमित LaunchDaemon जैसे /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
लिखें जिसमें एक प्लिस्ट है जो एक अनियमित स्क्रिप्ट को निष्पादित करता है जैसे:
सुडोएर्स फ़ाइल
यदि आपके पास अनिश्चित लेखन है, तो आप /etc/sudoers.d/
फ़ोल्डर में एक फ़ाइल बना सकते हैं जिसमें आपको सुडो अधिकार देने के लिए.
PATH फ़ाइलें
फ़ाइल /etc/paths
मुख्य स्थानों में से एक है जो PATH env चर में डेटा भरता है। आपको इसे ओवरराइट करने के लिए रूट होना चाहिए, लेकिन यदि कोई विशेषाधिकारित प्रक्रिया स्क्रिप्ट को बिना पूर्ण पथ के कमांड चला रहा है, तो आप इसे संशोधित करके हाइजैक कर सकते हैं।
आप नए फ़ोल्डर को PATH
env चर में लोड करने के लिए /etc/paths.d
में फ़ाइलें लिख सकते हैं।
अन्य उपयोगकर्ताओं के रूप में लिखने योग्य फ़ाइलें उत्पन्न करें
यह एक फ़ाइल उत्पन्न करेगा जो रूट का है और मेरे द्वारा लिखने योग्य है (यहाँ से कोड). यह भी privesc के रूप में काम कर सकता है:
POSIX साझा स्मृति
POSIX साझा स्मृति POSIX-संगत ऑपरेटिंग सिस्टम में प्रक्रियाओं को एक साझा स्मृति क्षेत्र तक पहुंचने की अनुमति देता है, जो अन्य इंटर-प्रोसेस संचार विधियों की तुलना में तेज़ संचार को सुविधाजनक बनाता है। इसमें shm_open()
का उपयोग करके एक साझा स्मृति वस्तु बनाना या खोलना, ftruncate()
का उपयोग करके इसका आकार सेट करना, और mmap()
का उपयोग करके इसे प्रक्रिया के पता स्थान में मैप करना शामिल है। प्रक्रियाएँ फिर इस स्मृति क्षेत्र से सीधे पढ़ सकती हैं और इसमें लिख सकती हैं। समकालिक पहुंच को प्रबंधित करने और डेटा का क्षति होने से रोकने के लिए समक्रमण यंत्र जैसे म्यूटेक्स या सेमाफोर अक्सर उपयोग किए जाते हैं। अंत में, प्रक्रियाएँ munmap()
और close()
के साथ साझा स्मृति को अनमैप और बंद करती हैं, और वैकल्पिक रूप से shm_unlink()
के साथ स्मृति वस्तु को हटा सकती हैं। यह प्रणाली विशेष रूप से उस पर्यावेक्षित, तेज IPC के लिए प्रभावी है जहां कई प्रक्रियाएँ साझा डेटा का त्वरित रूप से पहुंचने की आवश्यकता होती है।
macOS Guarded Descriptors
मैकओएस गार्डेड डिस्क्रिप्टर्स मैकओएस में एक सुरक्षा सुविधा है जो उपयोगकर्ता अनुप्रयोगों में फ़ाइल डिस्क्रिप्टर ऑपरेशन्स की सुरक्षा और विश्वसनीयता को बढ़ाने के लिए लायी गई है। ये गार्डेड डिस्क्रिप्टर्स फ़ाइल डिस्क्रिप्टर्स के साथ विशेष प्रतिबंध या "गार्ड" को जोड़ने का एक तरीका प्रदान करते हैं, जिन्हें कर्नेल द्वारा प्रवर्तित किया जाता है।
यह सुविधा किसी विशेष प्रकार की सुरक्षा दुर्बलताओं जैसे अनधिकृत फ़ाइल एक्सेस या रेस कंडीशन्स को रोकने के लिए विशेष रूप से उपयोगी है। ये दुर्बलताएँ उत्पन्न होती हैं जब किसी धागे द्वारा एक फ़ाइल विवरण तक पहुंच दिया जाता है एक और दुर्बल धागा उसके ऊपर पहुंच पाता है या जब एक फ़ाइल डिस्क्रिप्टर एक दुर्बल बच्चा प्रक्रिया द्वारा विरासत में दिया जाता है। इस सुविधा से संबंधित कुछ फ़ंक्शन हैं:
guarded_open_np
: गार्ड के साथ एफडी खोलेंguarded_close_np
: इसे बंद करेंchange_fdguard_np
: एक डिस्क्रिप्टर पर गार्ड फ्लैग बदलें (गार्ड सुरक्षा को हटाने के लिए भी)
संदर्भ
Last updated