macOS Files, Folders, Binaries & Memory
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)
/Applications: स्थापित ऐप्स यहाँ होने चाहिए। सभी उपयोगकर्ता इन्हें एक्सेस कर सकेंगे।
/bin: कमांड लाइन बाइनरी
/cores: यदि मौजूद है, तो इसका उपयोग कोर डंप को स्टोर करने के लिए किया जाता है
/dev: सब कुछ एक फ़ाइल के रूप में माना जाता है इसलिए आप यहाँ हार्डवेयर उपकरण देख सकते हैं।
/etc: कॉन्फ़िगरेशन फ़ाइलें
/Library: यहाँ प्राथमिकताओं, कैश और लॉग से संबंधित कई उपनिर्देशिकाएँ और फ़ाइलें मिल सकती हैं। एक लाइब्रेरी फ़ोल्डर रूट में और प्रत्येक उपयोगकर्ता के निर्देशिका में मौजूद है।
/private: अप्रलेखित लेकिन कई उल्लेखित फ़ोल्डर निजी निर्देशिका के प्रतीकात्मक लिंक हैं।
/sbin: आवश्यक सिस्टम बाइनरी (प्रशासन से संबंधित)
/System: OS X को चलाने के लिए फ़ाइल। आपको यहाँ मुख्य रूप से केवल एप्पल विशिष्ट फ़ाइलें मिलनी चाहिए (तीसरे पक्ष की नहीं)।
/tmp: फ़ाइलें 3 दिनों के बाद हटा दी जाती हैं (यह /private/tmp का एक सॉफ्ट लिंक है)
/Users: उपयोगकर्ताओं के लिए होम निर्देशिका।
/usr: कॉन्फ़िग और सिस्टम बाइनरी
/var: लॉग फ़ाइलें
/Volumes: माउंट किए गए ड्राइव यहाँ दिखाई देंगे।
/.vol: stat a.txt
चलाने पर आपको कुछ ऐसा प्राप्त होता है 16777223 7545753 -rw-r--r-- 1 username wheel ...
जहाँ पहला नंबर उस वॉल्यूम का आईडी नंबर है जहाँ फ़ाइल मौजूद है और दूसरा इनोड नंबर है। आप इस जानकारी के माध्यम से /.vol/ के माध्यम से इस फ़ाइल की सामग्री तक पहुँच सकते हैं cat /.vol/16777223/7545753
सिस्टम ऐप्स /System/Applications
के अंतर्गत स्थित हैं
स्थापित ऐप्स आमतौर पर /Applications
या ~/Applications
में स्थापित होते हैं
ऐप्लिकेशन डेटा /Library/Application Support
में उन ऐप्स के लिए मिल सकता है जो रूट के रूप में चल रहे हैं और ~/Library/Application Support
में उपयोगकर्ता के रूप में चल रहे ऐप्स के लिए।
तीसरे पक्ष के ऐप्स डेमन जो रूट के रूप में चलने की आवश्यकता है आमतौर पर /Library/PrivilegedHelperTools/
में स्थित होते हैं
सैंडबॉक्स किए गए ऐप्स ~/Library/Containers
फ़ोल्डर में मैप किए जाते हैं। प्रत्येक ऐप का एक फ़ोल्डर होता है जिसका नाम ऐप्लिकेशन के बंडल आईडी (com.apple.Safari
) के अनुसार होता है।
कर्नेल /System/Library/Kernels/kernel
में स्थित है
एप्पल के कर्नेल एक्सटेंशन /System/Library/Extensions
में स्थित हैं
तीसरे पक्ष के कर्नेल एक्सटेंशन /Library/Extensions
में संग्रहीत होते हैं
MacOS कई स्थानों पर पासवर्ड जैसी जानकारी संग्रहीत करता है:
macOS Sensitive Locations & Interesting Daemons.dmg
: एप्पल डिस्क इमेज फ़ाइलें इंस्टॉलर्स के लिए बहुत सामान्य हैं।
.kext
: इसे एक विशिष्ट संरचना का पालन करना चाहिए और यह एक ड्राइवर का OS X संस्करण है। (यह एक बंडल है)
.plist
: जिसे प्रॉपर्टी लिस्ट के रूप में भी जाना जाता है, यह XML या बाइनरी प्रारूप में जानकारी संग्रहीत करता है।
यह XML या बाइनरी हो सकता है। बाइनरी को पढ़ा जा सकता है:
defaults read config.plist
/usr/libexec/PlistBuddy -c print config.plsit
plutil -p ~/Library/Preferences/com.apple.screensaver.plist
plutil -convert xml1 ~/Library/Preferences/com.apple.screensaver.plist -o -
plutil -convert json ~/Library/Preferences/com.apple.screensaver.plist -o -
.app
: एप्पल ऐप्स जो निर्देशिका संरचना का पालन करते हैं (यह एक बंडल है)।
.dylib
: डायनामिक लाइब्रेरी (जैसे Windows DLL फ़ाइलें)
.pkg
: ये xar (eXtensible Archive format) के समान हैं। इंस्टॉलर कमांड का उपयोग इन फ़ाइलों की सामग्री को स्थापित करने के लिए किया जा सकता है।
.DS_Store
: यह फ़ाइल प्रत्येक निर्देशिका में होती है, यह निर्देशिका के गुण और अनुकूलन को सहेजती है।
.Spotlight-V100
: यह फ़ोल्डर सिस्टम पर प्रत्येक वॉल्यूम के रूट निर्देशिका में दिखाई देता है।
.metadata_never_index
: यदि यह फ़ाइल किसी वॉल्यूम के रूट पर है तो स्पॉटलाइट उस वॉल्यूम को अनुक्रमित नहीं करेगा।
.noindex
: इस एक्सटेंशन वाली फ़ाइलें और फ़ोल्डर स्पॉटलाइट द्वारा अनुक्रमित नहीं होंगे।
.sdef
: बंडल के अंदर फ़ाइलें जो यह निर्दिष्ट करती हैं कि AppleScript से ऐप्लिकेशन के साथ कैसे इंटरैक्ट करना संभव है।
एक बंडल एक निर्देशिका है जो फाइंडर में एक ऑब्जेक्ट की तरह दिखती है (एक बंडल उदाहरण *.app
फ़ाइलें हैं)।
macOS (और iOS) पर सभी सिस्टम साझा लाइब्रेरी, जैसे फ्रेमवर्क और dylibs, को एकल फ़ाइल में संयोजित किया गया है, जिसे dyld साझा कैश कहा जाता है। इससे प्रदर्शन में सुधार हुआ, क्योंकि कोड को तेजी से लोड किया जा सकता है।
यह macOS में /System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/
में स्थित है और पुराने संस्करणों में आप /System/Library/dyld/
में साझा कैश पा सकते हैं।
iOS में आप इन्हें /System/Library/Caches/com.apple.dyld/
में पा सकते हैं।
dyld साझा कैश के समान, कर्नेल और कर्नेल एक्सटेंशन भी एक कर्नेल कैश में संकलित होते हैं, जिसे बूट समय पर लोड किया जाता है।
एकल फ़ाइल dylib साझा कैश से लाइब्रेरी निकालने के लिए, बाइनरी dyld_shared_cache_util का उपयोग करना संभव था जो आजकल काम नहीं कर सकता है लेकिन आप dyldextractor का भी उपयोग कर सकते हैं:
ध्यान दें कि भले ही dyld_shared_cache_util
उपकरण काम न करे, आप साझा dyld बाइनरी को Hopper में पास कर सकते हैं और Hopper सभी पुस्तकालयों की पहचान कर सकेगा और आपको चुनने देगा कि आप किसे जांचना चाहते हैं:
कुछ एक्सट्रैक्टर्स काम नहीं करेंगे क्योंकि dylibs को हार्ड कोडेड पते के साथ प्रीलिंक किया गया है, इसलिए वे अज्ञात पते पर कूद सकते हैं।
यह macos में Xcode में एक एमुलेटर का उपयोग करके अन्य *OS उपकरणों का साझा पुस्तकालय कैश डाउनलोड करना भी संभव है। उन्हें इस पथ में डाउनलोड किया जाएगा: ls $HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport/<version>/Symbols/System/Library/Caches/com.apple.dyld/
, जैसे: $HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64
dyld
syscall shared_region_check_np
का उपयोग करता है यह जानने के लिए कि क्या SLC मैप किया गया है (जो पता लौटाता है) और shared_region_map_and_slide_np
SLC को मैप करने के लिए।
ध्यान दें कि भले ही SLC पहले उपयोग पर स्लाइड हो, सभी प्रक्रियाएँ एक ही प्रति का उपयोग करती हैं, जो ASLR सुरक्षा को समाप्त कर देती है यदि हमलावर सिस्टम में प्रक्रियाएँ चलाने में सक्षम था। इसका वास्तव में अतीत में शोषण किया गया था और साझा क्षेत्र पेजर के साथ ठीक किया गया था।
ब्रांच पूल छोटे Mach-O dylibs हैं जो छवि मैपिंग के बीच छोटे स्थान बनाते हैं जिससे कार्यों को इंटरपोज़ करना असंभव हो जाता है।
पर्यावरण चर का उपयोग करते हुए:
DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR=</path/dir> DYLD_SHARED_CACHE_DONT_VALIDATE=1
-> यह एक नया साझा पुस्तकालय कैश लोड करने की अनुमति देगा।
DYLD_SHARED_CACHE_DIR=avoid
और वास्तविक पुस्तकालयों के साथ साझा कैश के लिए सिम्लिंक्स के साथ पुस्तकालयों को मैन्युअल रूप से बदलें (आपको उन्हें निकालने की आवश्यकता होगी)।
एक फ़ोल्डर में, पढ़ने की अनुमति सूचीबद्ध करने की अनुमति देती है, लिखने की अनुमति फ़ाइलों को हटाने और लिखने की अनुमति देती है, और निष्पादित करने की अनुमति निर्देशिका को पार करने की अनुमति देती है। इसलिए, उदाहरण के लिए, एक उपयोगकर्ता जिसके पास एक फ़ाइल पर पढ़ने की अनुमति है, उस निर्देशिका में जहां उसके पास निष्पादित करने की अनुमति नहीं है, वह फ़ाइल को नहीं पढ़ सकेगा।
कुछ ध्वज हैं जो फ़ाइलों में सेट किए जा सकते हैं जो फ़ाइल को अलग तरह से व्यवहार करने के लिए मजबूर करेंगे। आप ls -lO /path/directory
के साथ एक निर्देशिका के अंदर फ़ाइलों के ध्वज जांच सकते हैं।
uchg
: जिसे uchange ध्वज के रूप में जाना जाता है, यह फ़ाइल को बदलने या हटाने की किसी भी क्रिया को रोक देगा। इसे सेट करने के लिए: chflags uchg file.txt
रूट उपयोगकर्ता ध्वज को हटा सकता है और फ़ाइल को संशोधित कर सकता है।
restricted
: यह ध्वज फ़ाइल को SIP द्वारा संरक्षित बनाता है (आप इस ध्वज को फ़ाइल में नहीं जोड़ सकते)।
Sticky bit
: यदि एक निर्देशिका में स्टिकी बिट है, तो केवल निर्देशिका का मालिक या रूट फ़ाइलों को पुनः नामित या हटाने कर सकता है। आमतौर पर इसे /tmp निर्देशिका पर सेट किया जाता है ताकि सामान्य उपयोगकर्ता अन्य उपयोगकर्ताओं की फ़ाइलों को हटाने या स्थानांतरित करने से रोक सकें।
सभी ध्वज फ़ाइल sys/stat.h
में पाए जा सकते हैं (इसे mdfind stat.h | grep stat.h
का उपयोग करके खोजें) और हैं:
UF_SETTABLE
0x0000ffff: मालिक द्वारा बदले जाने योग्य ध्वज का मास्क।
UF_NODUMP
0x00000001: फ़ाइल को डंप न करें।
UF_IMMUTABLE
0x00000002: फ़ाइल को नहीं बदला जा सकता।
UF_APPEND
0x00000004: फ़ाइल में केवल जोड़ने के लिए लिखें।
UF_OPAQUE
0x00000008: निर्देशिका संघ के संबंध में अपारदर्शी है।
UF_COMPRESSED
0x00000020: फ़ाइल संकुचित है (कुछ फ़ाइल-प्रणालियाँ)।
UF_TRACKED
0x00000040: इस सेट के साथ फ़ाइलों के लिए हटाने/पुनः नामकरण के लिए कोई सूचनाएँ नहीं।
UF_DATAVAULT
0x00000080: पढ़ने और लिखने के लिए अधिकार की आवश्यकता है।
UF_HIDDEN
0x00008000: संकेत कि इस आइटम को GUI में प्रदर्शित नहीं किया जाना चाहिए।
SF_SUPPORTED
0x009f0000: सुपरयूजर द्वारा समर्थित ध्वज का मास्क।
SF_SETTABLE
0x3fff0000: सुपरयूजर द्वारा बदले जाने योग्य ध्वज का मास्क।
SF_SYNTHETIC
0xc0000000: सिस्टम केवल-पढ़ने वाले सिंथेटिक ध्वज का मास्क।
SF_ARCHIVED
0x00010000: फ़ाइल संग्रहित है।
SF_IMMUTABLE
0x00020000: फ़ाइल को नहीं बदला जा सकता।
SF_APPEND
0x00040000: फ़ाइल में केवल जोड़ने के लिए लिखें।
SF_RESTRICTED
0x00080000: लिखने के लिए अधिकार की आवश्यकता है।
SF_NOUNLINK
0x00100000: आइटम को हटाया, पुनः नामित या माउंट नहीं किया जा सकता।
SF_FIRMLINK
0x00800000: फ़ाइल एक फर्मलिंक है।
SF_DATALESS
0x40000000: फ़ाइल एक डाटालेस ऑब्जेक्ट है।
फ़ाइल ACLs में ACE (एक्सेस कंट्रोल एंट्रीज़) होती हैं जहां विभिन्न उपयोगकर्ताओं को अधिक सूक्ष्म अनुमतियाँ दी जा सकती हैं।
एक निर्देशिका को ये अनुमतियाँ दी जा सकती हैं: सूची
, खोज
, फाइल जोड़ें
, उप-निर्देशिका जोड़ें
, बच्चे को हटाएँ
, बच्चे को हटाएँ
।
और एक फ़ाइल के लिए: पढ़ें
, लिखें
, जोड़ें
, निष्पादित करें
।
जब फ़ाइल में ACLs होती हैं, तो आप अनुमतियों को सूचीबद्ध करते समय "+" पाएंगे जैसे:
आप फ़ाइल के ACLs को इस तरह पढ़ सकते हैं:
आप सभी फ़ाइलों को ACLs के साथ (यह बहुत धीमा है) पा सकते हैं:
Extended attributes का एक नाम और कोई भी इच्छित मान होता है, और इन्हें ls -@
का उपयोग करके देखा जा सकता है और xattr
कमांड का उपयोग करके संशोधित किया जा सकता है। कुछ सामान्य extended attributes हैं:
com.apple.resourceFork
: Resource fork संगतता। इसे filename/..namedfork/rsrc
के रूप में भी देखा जा सकता है
com.apple.quarantine
: MacOS: Gatekeeper क्वारंटाइन तंत्र (III/6)
metadata:*
: MacOS: विभिन्न मेटाडेटा, जैसे कि _backup_excludeItem
, या kMD*
com.apple.lastuseddate
(#PS): अंतिम फ़ाइल उपयोग तिथि
com.apple.FinderInfo
: MacOS: Finder जानकारी (जैसे, रंग टैग)
com.apple.TextEncoding
: ASCII टेक्स्ट फ़ाइलों के टेक्स्ट एन्कोडिंग को निर्दिष्ट करता है
com.apple.logd.metadata
: /var/db/diagnostics
में फ़ाइलों पर logd द्वारा उपयोग किया जाता है
com.apple.genstore.*
: पीढ़ीगत भंडारण (/.DocumentRevisions-V100
फ़ाइल सिस्टम की जड़ में)
com.apple.rootless
: MacOS: फ़ाइल को लेबल करने के लिए सिस्टम इंटीग्रिटी प्रोटेक्शन द्वारा उपयोग किया जाता है (III/10)
com.apple.uuidb.boot-uuid
: अद्वितीय UUID के साथ बूट युग के logd मार्किंग
com.apple.decmpfs
: MacOS: पारदर्शी फ़ाइल संकुचन (II/7)
com.apple.cprotect
: *OS: प्रति-फ़ाइल एन्क्रिप्शन डेटा (III/11)
com.apple.installd.*
: *OS: installd द्वारा उपयोग किया जाने वाला मेटाडेटा, जैसे कि installType
, uniqueInstallID
यह MacOS मशीनों में Alternate Data Streams प्राप्त करने का एक तरीका है। आप file/..namedfork/rsrc में एक फ़ाइल के अंदर com.apple.ResourceFork नामक एक extended attribute के अंदर सामग्री सहेज सकते हैं।
आप इस विस्तारित विशेषता वाले सभी फ़ाइलों को खोज सकते हैं:
विस्तारित विशेषता com.apple.decmpfs
यह संकेत करती है कि फ़ाइल एन्क्रिप्टेड रूप में संग्रहीत है, ls -l
आकार 0 की रिपोर्ट करेगा और संकुचित डेटा इस विशेषता के अंदर है। जब भी फ़ाइल को एक्सेस किया जाएगा, इसे मेमोरी में डिक्रिप्ट किया जाएगा।
इस विशेषता को ls -lO
के साथ देखा जा सकता है, जिसे संकुचित के रूप में दर्शाया गया है क्योंकि संकुचित फ़ाइलों को UF_COMPRESSED
ध्वज के साथ भी टैग किया जाता है। यदि एक संकुचित फ़ाइल को chflags nocompressed </path/to/file>
के साथ हटा दिया जाता है, तो सिस्टम को नहीं पता होगा कि फ़ाइल संकुचित थी और इसलिए यह डेटा को डिक्रिप्ट और एक्सेस नहीं कर पाएगा (यह सोचेगा कि यह वास्तव में खाली है)।
उपकरण afscexpand का उपयोग एक फ़ाइल को मजबूरन डिक्रिप्ट करने के लिए किया जा सकता है।
Mac OS बाइनरी आमतौर पर यूनिवर्सल बाइनरी के रूप में संकलित होती हैं। एक यूनिवर्सल बाइनरी एक ही फ़ाइल में कई आर्किटेक्चर का समर्थन कर सकती है।
macOS Universal binaries & Mach-O Formatडायरेक्टरी /System/Library/CoreServices/CoreTypes.bundle/Contents/Resources/System
वह स्थान है जहाँ विभिन्न फ़ाइल एक्सटेंशन से संबंधित जोखिम की जानकारी संग्रहीत होती है। यह डायरेक्टरी फ़ाइलों को विभिन्न जोखिम स्तरों में वर्गीकृत करती है, जो यह प्रभावित करती है कि Safari इन फ़ाइलों को डाउनलोड करने पर कैसे संभालता है। श्रेणियाँ इस प्रकार हैं:
LSRiskCategorySafe: इस श्रेणी में फ़ाइलें पूरी तरह से सुरक्षित मानी जाती हैं। Safari स्वचालित रूप से इन फ़ाइलों को डाउनलोड करने के बाद खोलेगा।
LSRiskCategoryNeutral: ये फ़ाइलें बिना किसी चेतावनी के आती हैं और Safari द्वारा स्वचालित रूप से नहीं खोली जाती हैं।
LSRiskCategoryUnsafeExecutable: इस श्रेणी के तहत फ़ाइलें एक चेतावनी को ट्रिगर करती हैं जो बताती है कि फ़ाइल एक एप्लिकेशन है। यह उपयोगकर्ता को सचेत करने के लिए एक सुरक्षा उपाय के रूप में कार्य करता है।
LSRiskCategoryMayContainUnsafeExecutable: यह श्रेणी उन फ़ाइलों के लिए है, जैसे कि आर्काइव, जो एक निष्पादन योग्य फ़ाइल को शामिल कर सकती हैं। Safari एक चेतावनी ट्रिगर करेगा जब तक कि यह सत्यापित नहीं कर सकता कि सभी सामग्री सुरक्षित या तटस्थ हैं।
$HOME/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
: डाउनलोड की गई फ़ाइलों के बारे में जानकारी रखता है, जैसे कि URL जहाँ से उन्हें डाउनलोड किया गया था।
/var/log/system.log
: OSX सिस्टम का मुख्य लॉग। com.apple.syslogd.plist syslogging के निष्पादन के लिए जिम्मेदार है (आप देख सकते हैं कि यह निष्क्रिय है या नहीं launchctl list
में "com.apple.syslogd" की खोज करके)।
/private/var/log/asl/*.asl
: ये Apple सिस्टम लॉग हैं जो दिलचस्प जानकारी रख सकते हैं।
$HOME/Library/Preferences/com.apple.recentitems.plist
: "Finder" के माध्यम से हाल ही में एक्सेस की गई फ़ाइलों और अनुप्रयोगों को संग्रहीत करता है।
$HOME/Library/Preferences/com.apple.loginitems.plsit
: सिस्टम स्टार्टअप पर लॉन्च करने के लिए आइटम संग्रहीत करता है।
$HOME/Library/Logs/DiskUtility.log
: DiskUtility ऐप के लिए लॉग फ़ाइल (ड्राइव के बारे में जानकारी, जिसमें USB शामिल हैं)।
/Library/Preferences/SystemConfiguration/com.apple.airport.preferences.plist
: वायरलेस एक्सेस पॉइंट के बारे में डेटा।
/private/var/db/launchd.db/com.apple.launchd/overrides.plist
: निष्क्रिय किए गए डेमन्स की सूची।
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)