macOS FS Tricks
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)
Permissions in a directory:
read - आप directory entries को enumerate कर सकते हैं
write - आप directory में files को delete/write कर सकते हैं और आप खाली फोल्डर को delete कर सकते हैं।
लेकिन आप non-empty folders को delete/modify नहीं कर सकते जब तक कि आपके पास इसके ऊपर write permissions न हों।
आप folder का नाम modify नहीं कर सकते जब तक कि आप इसके मालिक न हों।
execute - आपको directory को traverse करने की अनुमति है - यदि आपके पास यह अधिकार नहीं है, तो आप इसके अंदर या किसी भी subdirectories में कोई files तक नहीं पहुँच सकते।
कैसे root द्वारा स्वामित्व वाली file/folder को overwrite करें, लेकिन:
पथ में एक माता-पिता directory owner उपयोगकर्ता है
पथ में एक माता-पिता directory owner एक users group है जिसमें write access है
एक users group को file पर write access है
पिछले किसी भी संयोजन के साथ, एक हमलावर inject कर सकता है एक sym/hard link अपेक्षित पथ पर एक विशेषाधिकार प्राप्त मनमाना write प्राप्त करने के लिए।
यदि एक directory में files हैं जहाँ केवल root को R+X access है, तो वे किसी और के लिए उपलब्ध नहीं हैं। इसलिए एक भेद्यता जो एक file को स्थानांतरित करने की अनुमति देती है जिसे एक उपयोगकर्ता द्वारा पढ़ा जा सकता है, जिसे उस restriction के कारण नहीं पढ़ा जा सकता, इस फोल्डर से किसी अन्य में, इन files को पढ़ने के लिए दुरुपयोग किया जा सकता है।
Example in: https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions
यदि एक विशेषाधिकार प्राप्त प्रक्रिया file में डेटा लिख रही है जिसे lower privileged user द्वारा control किया जा सकता है, या जिसे एक lower privileged user द्वारा पहले बनाया गया हो। उपयोगकर्ता बस इसे एक Symbolic या Hard link के माध्यम से दूसरे file की ओर point कर सकता है, और विशेषाधिकार प्राप्त प्रक्रिया उस file पर लिखेगी।
Check in the other sections where an attacker could abuse an arbitrary write to escalate privileges.
.fileloc
एक्सटेंशन वाली files अन्य applications या binaries की ओर इशारा कर सकती हैं ताकि जब वे खोली जाती हैं, तो application/binary वही होगी जो निष्पादित होगी।
Example:
यदि आप प्रक्रिया को उच्च विशेषाधिकारों के साथ एक फ़ाइल या फ़ोल्डर खोलने के लिए मजबूर कर सकते हैं, तो आप crontab
का दुरुपयोग करके /etc/sudoers.d
में एक फ़ाइल खोलने के लिए EDITOR=exploit.py
का उपयोग कर सकते हैं, ताकि exploit.py
को /etc/sudoers
के अंदर फ़ाइल का FD मिल सके और इसका दुरुपयोग कर सके।
उदाहरण के लिए: https://youtu.be/f1HA5QhLQ7Y?t=21098
यदि किसी फ़ाइल/फ़ोल्डर में यह अपरिवर्तनीय विशेषता है, तो उस पर xattr डालना संभव नहीं होगा।
एक devfs माउंट xattr का समर्थन नहीं करता, अधिक जानकारी के लिए CVE-2023-32364 देखें।
यह ACL फ़ाइल में xattrs
जोड़ने से रोकता है
AppleDouble फ़ाइल प्रारूप एक फ़ाइल को उसकी ACEs सहित कॉपी करता है।
स्रोत कोड में यह देखना संभव है कि xattr के अंदर संग्रहीत ACL पाठ प्रतिनिधित्व जिसे com.apple.acl.text
कहा जाता है, को डिकंप्रेस की गई फ़ाइल में ACL के रूप में सेट किया जाएगा। इसलिए, यदि आपने एक एप्लिकेशन को AppleDouble फ़ाइल प्रारूप में एक ज़िप फ़ाइल में संकुचित किया है जिसमें एक ACL है जो अन्य xattrs को इसमें लिखने से रोकता है... तो क्वारंटाइन xattr एप्लिकेशन में सेट नहीं किया गया था:
अधिक जानकारी के लिए मूल रिपोर्ट की जांच करें।
इसे दोहराने के लिए, हमें पहले सही acl स्ट्रिंग प्राप्त करने की आवश्यकता है:
(Note that even if this works the sandbox write the quarantine xattr before)
Not really needed but I leave it there just in case:
macOS xattr-acls extra stuffBundles में फ़ाइल _CodeSignature/CodeResources
होती है जिसमें bundle में हर एक file का hash होता है। ध्यान दें कि CodeResources का hash भी executables में embedded होता है, इसलिए हम इसके साथ भी छेड़छाड़ नहीं कर सकते।
हालांकि, कुछ फ़ाइलें हैं जिनके सिग्नेचर की जांच नहीं की जाएगी, इनमें plist में omit कुंजी होती है, जैसे:
यह CLI से एक संसाधन के हस्ताक्षर की गणना करना संभव है:
एक उपयोगकर्ता एक कस्टम dmg को माउंट कर सकता है जो कुछ मौजूदा फ़ोल्डरों के ऊपर भी बनाया गया है। इस तरह आप कस्टम सामग्री के साथ एक कस्टम dmg पैकेज बना सकते हैं:
आमतौर पर macOS डिस्क को com.apple.DiskArbitrarion.diskarbitrariond
Mach सेवा से जोड़ता है (जो /usr/libexec/diskarbitrationd
द्वारा प्रदान की जाती है)। यदि LaunchDaemons plist फ़ाइल में -d
पैरामीटर जोड़ा जाए और पुनः प्रारंभ किया जाए, तो यह /var/log/diskarbitrationd.log
में लॉग संग्रहीत करेगा।
हालांकि, com.apple.driver.DiskImages
kext के साथ सीधे संवाद करने के लिए hdik
और hdiutil
जैसे उपकरणों का उपयोग करना संभव है।
यदि आपकी स्क्रिप्ट को शेल स्क्रिप्ट के रूप में व्याख्यायित किया जा सकता है, तो आप /etc/periodic/daily/999.local
शेल स्क्रिप्ट को ओवरराइट कर सकते हैं, जो हर दिन ट्रिगर होगी।
आप इस स्क्रिप्ट के निष्पादन को sudo periodic daily
के साथ फेक कर सकते हैं।
एक मनमाना LaunchDaemon लिखें जैसे /Library/LaunchDaemons/xyz.hacktricks.privesc.plist
जिसमें एक plist हो जो एक मनमानी स्क्रिप्ट निष्पादित करे जैसे:
Just generate the script /Applications/Scripts/privesc.sh
with the commands you would like to run as root.
If you have arbitrary write, you could create a file inside the folder /etc/sudoers.d/
granting yourself sudo privileges.
The file /etc/paths
is one of the main places that populates the PATH env variable. You must be root to overwrite it, but if a script from privileged process is executing some command without the full path, you might be able to hijack it modifying this file.
You can also write files in /etc/paths.d
to load new folders into the PATH
env variable.
यह एक फ़ाइल उत्पन्न करेगा जो रूट की है और जिसे मैं लिख सकता हूँ (code from here). यह privesc के रूप में भी काम कर सकता है:
POSIX साझा मेमोरी POSIX-संगत ऑपरेटिंग सिस्टम में प्रक्रियाओं को एक सामान्य मेमोरी क्षेत्र तक पहुँचने की अनुमति देती है, जो अन्य इंटर-प्रोसेस संचार विधियों की तुलना में तेज़ संचार को सुविधाजनक बनाती है। इसमें shm_open()
के साथ एक साझा मेमोरी ऑब्जेक्ट बनाना या खोलना, ftruncate()
के साथ इसका आकार सेट करना, और इसे प्रक्रिया के पते की जगह में mmap()
का उपयोग करके मैप करना शामिल है। प्रक्रियाएँ फिर सीधे इस मेमोरी क्षेत्र से पढ़ और लिख सकती हैं। समवर्ती पहुँच को प्रबंधित करने और डेटा भ्रष्टाचार को रोकने के लिए, समन्वय तंत्र जैसे म्यूटेक्स या सेमाफोर का अक्सर उपयोग किया जाता है। अंततः, प्रक्रियाएँ munmap()
और close()
के साथ साझा मेमोरी को अनमैप और बंद करती हैं, और वैकल्पिक रूप से shm_unlink()
के साथ मेमोरी ऑब्जेक्ट को हटा देती हैं। यह प्रणाली विशेष रूप से उन वातावरणों में कुशल, तेज IPC के लिए प्रभावी है जहाँ कई प्रक्रियाओं को तेजी से साझा डेटा तक पहुँचने की आवश्यकता होती है।
macOSCguarded descriptors एक सुरक्षा विशेषता है जो macOS में उपयोगकर्ता अनुप्रयोगों में फाइल डिस्क्रिप्टर ऑपरेशंस की सुरक्षा और विश्वसनीयता को बढ़ाने के लिए पेश की गई है। ये संरक्षित डिस्क्रिप्टर एक विशेष तरीके से फाइल डिस्क्रिप्टर के साथ विशिष्ट प्रतिबंध या "गार्ड" को जोड़ने का एक तरीका प्रदान करते हैं, जिन्हें कर्नेल द्वारा लागू किया जाता है।
यह विशेषता कुछ प्रकार की सुरक्षा कमजोरियों जैसे अनधिकृत फ़ाइल पहुँच या रेस कंडीशंस को रोकने के लिए विशेष रूप से उपयोगी है। ये कमजोरियाँ तब होती हैं जब, उदाहरण के लिए, एक थ्रेड एक फ़ाइल विवरण को एक्सेस कर रहा है जिससे दूसरे कमजोर थ्रेड को उस पर पहुँच मिलती है या जब एक फ़ाइल डिस्क्रिप्टर को एक कमजोर चाइल्ड प्रोसेस द्वारा विरासत में लिया जाता है। इस कार्यक्षमता से संबंधित कुछ फ़ंक्शन हैं:
guarded_open_np
: एक गार्ड के साथ FD खोलें
guarded_close_np
: इसे बंद करें
change_fdguard_np
: एक डिस्क्रिप्टर पर गार्ड फ्लैग बदलें (यहां तक कि गार्ड सुरक्षा को हटाना)
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)