Translated ['README.md', 'generic-methodologies-and-resources/pentesting
BIN
.gitbook/assets/image (10) (2) (1).png
Normal file
After Width: | Height: | Size: 19 KiB |
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 82 KiB |
Before Width: | Height: | Size: 76 KiB After Width: | Height: | Size: 58 KiB |
Before Width: | Height: | Size: 32 KiB After Width: | Height: | Size: 358 KiB |
Before Width: | Height: | Size: 82 KiB After Width: | Height: | Size: 76 KiB |
BIN
.gitbook/assets/image (9) (1) (4).png
Normal file
After Width: | Height: | Size: 138 KiB |
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 165 KiB |
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 32 KiB |
|
@ -80,4 +80,4 @@ Obtenha acesso hoje:
|
|||
|
||||
<figure><img src=".gitbook/assets/logo.svg" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
[**WebSec**](https://websec.nl) é uma empresa profissional de segurança cibernética com sede em **Amsterdã** que ajuda a **proteger** empresas **em todo o mundo** contra as últimas ameaças
|
||||
[**WebSec**](https://websec.nl) é uma empresa profissional de segurança cibernética com sede em **Amsterdã** que ajuda a **proteger** empresas **em todo o mundo** contra as últimas
|
||||
|
|
|
@ -33,14 +33,12 @@ Para isso, usarei o [**FRRouting**](https://frrouting.org/). Este é um software
|
|||
~# nano /etc/frr/daemons
|
||||
eigrpd=yes
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (15) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Depois disso, você precisa corrigir o arquivo **vtysh.conf** adicionando uma linha responsável por salvar a configuração em um único arquivo, para que as configurações de diferentes protocolos não sejam espalhadas em arquivos diferentes **(por exemplo, eigrpd.conf, staticd.conf).** Isso é configurável opcionalmente.
|
||||
```
|
||||
~# nano /etc/frr/vtysh.conf
|
||||
service integrated-vtysh-config
|
||||
```
|
||||
A configuração do FRRouting está concluída. Agora é hora de executar o daemon FRR. E sim, precisamos habilitar o roteamento de tráfego. Por padrão, ele é desativado nas distribuições Linux.
|
||||
A configuração do FRRouting está pronta. Agora é hora de executar o daemon FRR. E sim, precisamos habilitar o roteamento de tráfego. Por padrão, ele está desativado em distribuições Linux.
|
||||
```
|
||||
~$ sudo systemctl start frr
|
||||
~$ sudo sysctl -w net.ipv4.ip_forward=1
|
||||
|
@ -53,33 +51,53 @@ O comando **vtysh** nos levará ao painel de controle do roteador FRR.
|
|||
|
||||
#### Introduction
|
||||
|
||||
EIGRP (Enhanced Interior Gateway Routing Protocol) is a Cisco proprietary routing protocol that is widely used in enterprise networks. It is an advanced distance-vector routing protocol that uses bandwidth and delay as metrics for path selection. EIGRP is a classless routing protocol that supports VLSM (Variable Length Subnet Masking) and CIDR (Classless Inter-Domain Routing).
|
||||
EIGRP (Enhanced Interior Gateway Routing Protocol) is a Cisco proprietary routing protocol that is widely used in enterprise networks. It is an advanced distance-vector routing protocol that uses Diffusing Update Algorithm (DUAL) to calculate the shortest path to a destination network. EIGRP is a classless routing protocol that supports variable-length subnet masks (VLSM) and route summarization.
|
||||
|
||||
#### EIGRP Protocol Overview
|
||||
|
||||
EIGRP uses a Diffusing Update Algorithm (DUAL) to calculate the shortest path to a destination network. EIGRP routers exchange routing information with their neighbors using multicast packets. EIGRP routers maintain a topology table that contains information about all the networks in the topology, including the metric, the next hop, and the outgoing interface.
|
||||
EIGRP uses a hierarchical network design that consists of autonomous systems (AS) and areas. An AS is a collection of networks that are under a common administrative domain. An area is a logical grouping of networks within an AS. EIGRP routers exchange routing information using multicast packets. EIGRP routers establish neighbor relationships with other routers in the same AS and exchange routing information with them. EIGRP routers use the following metrics to calculate the best path to a destination network:
|
||||
|
||||
- Bandwidth
|
||||
- Delay
|
||||
- Reliability
|
||||
- Load
|
||||
- MTU (Maximum Transmission Unit)
|
||||
|
||||
#### EIGRP Attacks
|
||||
|
||||
EIGRP is vulnerable to several attacks that can be used to disrupt network operations or to gain unauthorized access to network resources. The following are some of the most common EIGRP attacks:
|
||||
EIGRP is vulnerable to various attacks that can be used to disrupt network operations, steal sensitive information, or gain unauthorized access to network resources. The following are some of the common EIGRP attacks:
|
||||
|
||||
- **EIGRP Neighbor Spoofing**: An attacker can spoof EIGRP packets to make a router believe that it has a neighbor that does not exist. This can be used to inject false routing information into the network or to cause a denial of service (DoS) attack.
|
||||
- EIGRP Neighbor Spoofing
|
||||
- EIGRP Route Injection
|
||||
- EIGRP Route Poisoning
|
||||
- EIGRP Route Flapping
|
||||
- EIGRP Authentication Attacks
|
||||
|
||||
- **EIGRP Route Injection**: An attacker can inject false routing information into the network by sending EIGRP packets with a lower metric than the legitimate routes. This can be used to redirect traffic to a malicious destination or to cause a DoS attack.
|
||||
#### EIGRP Neighbor Spoofing
|
||||
|
||||
- **EIGRP Route Poisoning**: An attacker can send EIGRP packets with an infinite metric to poison the routing tables of EIGRP routers. This can be used to cause a DoS attack or to redirect traffic to a malicious destination.
|
||||
EIGRP routers establish neighbor relationships with other routers in the same AS to exchange routing information. An attacker can spoof EIGRP packets to impersonate a legitimate EIGRP router and establish a neighbor relationship with a target router. Once the attacker has established a neighbor relationship, they can inject false routing information into the target router and cause it to forward traffic to a malicious destination.
|
||||
|
||||
- **EIGRP Authentication Bypass**: EIGRP supports authentication to prevent unauthorized access to routing information. However, if authentication is not properly configured, an attacker can bypass it and gain access to sensitive information.
|
||||
#### EIGRP Route Injection
|
||||
|
||||
#### Conclusion
|
||||
An attacker can inject false routing information into an EIGRP router to manipulate its routing table. The attacker can use this technique to redirect traffic to a malicious destination or to cause a denial of service (DoS) attack by blackholing traffic.
|
||||
|
||||
EIGRP is a widely used routing protocol that is vulnerable to several attacks. It is important to properly configure EIGRP and to implement security measures to prevent unauthorized access to routing information.
|
||||
#### EIGRP Route Poisoning
|
||||
|
||||
EIGRP routers use the Diffusing Update Algorithm (DUAL) to calculate the shortest path to a destination network. An attacker can poison the routing table of an EIGRP router by injecting false routing information with a lower metric than the legitimate routes. This can cause the router to forward traffic to a malicious destination.
|
||||
|
||||
#### EIGRP Route Flapping
|
||||
|
||||
EIGRP routers use the reliability metric to determine the stability of a route. An attacker can cause a route to flap by injecting false routing information with varying metrics. This can cause the router to constantly recalculate the best path to a destination network and consume network resources.
|
||||
|
||||
#### EIGRP Authentication Attacks
|
||||
|
||||
EIGRP supports authentication to prevent unauthorized access to routing information. An attacker can launch an authentication attack by spoofing EIGRP packets with a valid authentication key or by brute-forcing the authentication key. Once the attacker has gained access to the routing information, they can launch other attacks to disrupt network operations or steal sensitive information.
|
||||
```
|
||||
Inguz# show version
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (3) (2) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
> **No entanto, não se esqueça de que o domínio de roteamento EIGRP pode ser protegido por autenticação. Mas ainda há uma chance de se conectar ao domínio de roteamento. Quando os pacotes hello são enviados, eles também contêm hashes criptográficos. Se você puder extrair esses hashes do dump de tráfego e redefinir a senha, poderá fazer login no domínio de roteamento com essa senha.**
|
||||
> **No entanto, não se esqueça que o domínio de roteamento EIGRP pode ser protegido por autenticação. Mas ainda há uma chance de se conectar ao domínio de roteamento. Quando os pacotes hello são enviados, eles também contêm hashes criptográficos. Se você puder extrair esses hashes do dump de tráfego e redefinir a senha, poderá fazer login no domínio de roteamento com essa senha.**
|
||||
|
||||
Vá para o modo de configuração global e inicie o processo **EIGRP**, especifique o número do sistema autônomo - **1**
|
||||
|
||||
|
@ -129,7 +147,7 @@ Argumentos do script:
|
|||
|
||||
### Buraco Negro EIGRP <a href="#5c04" id="5c04"></a>
|
||||
|
||||
A essência desse ataque é uma simples injeção de uma rota falsa que irá envenenar a tabela de roteamento. O tráfego para, digamos, a rede `10.10.100.0/24` não irá a lugar algum, causando uma negação de serviço. Esse tipo de ataque é chamado de Buraco Negro. O script [**routeinject.py**](https://github.com/in9uz/EIGRPWN/blob/main/routeinject.py) será a ferramenta usada para executá-lo. Para este exemplo, enviarei tráfego destinado ao host `172.16.100.140/32` para o buraco negro.
|
||||
A essência desse ataque é uma simples injeção de uma rota falsa que irá envenenar a tabela de roteamento. O tráfego para, digamos, a rede `10.10.100.0/24` não irá a lugar algum, causando uma negação de serviço. Tal ataque é chamado de Buraco Negro. O script [**routeinject.py**](https://github.com/in9uz/EIGRPWN/blob/main/routeinject.py) será a ferramenta usada para realizá-lo. Para este exemplo, enviarei tráfego destinado ao host `172.16.100.140/32` para o buraco negro.
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (16) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -163,19 +181,19 @@ Argumentos do script:
|
|||
* **número AS EIGRP**
|
||||
* **Endereço IP do roteador legítimo**
|
||||
|
||||
**Em nome do IP especificado, será enviada uma injeção no endereço IP EIGRP multicast, no qual os valores K são diferentes.** No meu caso, vou quebrar a vizinhança em nome do roteador GW1 **(endereço é 10.10.100.100)**.
|
||||
**Em nome do IP especificado, será enviada uma injeção no endereço IP EIGRP multicast, no qual os valores K são diferentes.** No meu caso, vou quebrar a vizinhança em nome do roteador GW1 **(o endereço é 10.10.100.100)**.
|
||||
```
|
||||
~$ sudo python3 relationshipnightmare.py --interface eth0 --as 1 --src 10.10.100.100
|
||||
```
|
||||
<figure><img src="../../.gitbook/assets/image (9) (1).png" alt=""><figcaption><p>Despejo de tráfego durante uma interrupção de vizinhança</p></figcaption></figure>
|
||||
<figure><img src="../../.gitbook/assets/image (9) (1) (4).png" alt=""><figcaption><p>Despejo de tráfego durante uma interrupção de vizinhança</p></figcaption></figure>
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (27) (1).png" alt=""><figcaption><p>O roteador GW1 desconecta e reconecta o EIGRP infinitamente</p></figcaption></figure>
|
||||
|
||||
**Um ataque DoS pode ser realizado desta maneira. Durante a operação, ocorrem interrupções e tentativas de vizinhança infinitas, paralisando parte do domínio de roteamento EIGRP.**
|
||||
|
||||
### Sobrecarga da tabela de roteamento <a href="#1d0c" id="1d0c"></a>
|
||||
### Transbordamento da tabela de roteamento <a href="#1d0c" id="1d0c"></a>
|
||||
|
||||
A essência deste ataque é provocar o envio de um grande número de rotas falsas, que vão sobrecarregar a tabela de roteamento. Isso esgota os recursos de computação do roteador, ou seja, a CPU e a RAM, uma vez que as injeções ocorrem em uma velocidade enorme. Este ataque é implementado pelo script [**routingtableoverflow.py**](https://github.com/in9uz/EIGRPWN/blob/main/routingtableoverflow.py).
|
||||
A essência deste ataque é provocar o envio de um grande número de rotas falsas, que transbordarão a tabela de roteamento. Isso esgota os recursos de computação do roteador, ou seja, a CPU e a RAM, uma vez que as injeções ocorrem em uma velocidade enorme. Este ataque é implementado pelo script [**routingtableoverflow.py**](https://github.com/in9uz/EIGRPWN/blob/main/routingtableoverflow.py).
|
||||
|
||||
<figure><img src="../../.gitbook/assets/image (3) (4).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
|
|
@ -2,11 +2,11 @@
|
|||
|
||||
Os **grupos de controle do Linux**, também conhecidos como cgroups, são um recurso do kernel do Linux que permite **limitar**, policiar e priorizar **recursos do sistema** para uma coleção de processos. Os cgroups fornecem uma maneira de **gerenciar e isolar o uso de recursos** (CPU, memória, E/S de disco, rede, etc.) de grupos de processos em um sistema. Isso pode ser útil para muitos propósitos, como limitar os recursos disponíveis para um grupo específico de processos, isolar certos tipos de cargas de trabalho de outros ou priorizar o uso de recursos do sistema entre diferentes grupos de processos.
|
||||
|
||||
Existem **duas versões de cgroups**, 1 e 2, e ambas estão atualmente em uso e podem ser configuradas simultaneamente em um sistema. A **diferença mais significativa** entre a versão 1 e a **versão 2** dos cgroups é que esta última introduziu uma nova organização hierárquica para os cgroups, onde os grupos podem ser organizados em uma estrutura semelhante a uma árvore com relacionamentos pai-filho. Isso permite um controle mais flexível e refinado sobre a alocação de recursos entre diferentes grupos de processos.
|
||||
Existem **duas versões de cgroups**, 1 e 2, e ambas estão atualmente em uso e podem ser configuradas simultaneamente em um sistema. A diferença mais **significativa** entre a versão 1 e a **versão 2** dos cgroups é que esta última introduziu uma nova organização hierárquica para os cgroups, onde os grupos podem ser organizados em uma estrutura **semelhante a uma árvore** com relacionamentos pai-filho. Isso permite um controle mais flexível e refinado sobre a alocação de recursos entre diferentes grupos de processos.
|
||||
|
||||
Além da nova organização hierárquica, a versão 2 dos cgroups também introduziu **várias outras mudanças e melhorias**, como suporte a **novos controladores de recursos**, melhor suporte para aplicativos legados e melhor desempenho.
|
||||
|
||||
Em geral, a versão 2 dos cgroups oferece mais recursos e melhor desempenho do que a versão 1, mas esta última ainda pode ser usada em determinados cenários em que a compatibilidade com sistemas mais antigos é uma preocupação.
|
||||
Em geral, os cgroups **versão 2 oferecem mais recursos e melhor desempenho** do que a versão 1, mas esta última ainda pode ser usada em determinados cenários em que a compatibilidade com sistemas mais antigos é uma preocupação.
|
||||
|
||||
Você pode listar os cgroups v1 e v2 para qualquer processo olhando para o arquivo cgroup em /proc/\<pid>. Você pode começar olhando para os cgroups do seu shell com este comando:
|
||||
```shell-session
|
||||
|
@ -23,35 +23,35 @@ $ cat /proc/self/cgroup
|
|||
1:name=systemd:/user.slice/user-1000.slice/session-2.scope
|
||||
0::/user.slice/user-1000.slice/session-2.scope
|
||||
```
|
||||
Não se preocupe se a saída for significativamente mais curta no seu sistema; isso apenas significa que você provavelmente tem apenas cgroups v2. Cada linha de saída aqui começa com um número e é um cgroup diferente. Aqui estão algumas dicas sobre como lê-lo:
|
||||
Não se preocupe se a **saída for significativamente mais curta** no seu sistema; isso apenas significa que você provavelmente **tem apenas cgroups v2**. Cada linha de saída aqui começa com um número e é um cgroup diferente. Aqui estão algumas dicas sobre como lê-lo:
|
||||
|
||||
* Os números 2-12 são para cgroups v1. Os controladores para esses são listados ao lado do número.
|
||||
* O número 1 também é para a versão 1, mas não tem um controlador. Este cgroup é apenas para fins de gerenciamento (neste caso, o systemd o configurou).
|
||||
* A última linha, número 0, é para cgroups v2. Nenhum controlador é visível aqui. Em um sistema que não possui cgroups v1, esta será a única linha de saída.
|
||||
* Os nomes são hierárquicos e parecem partes de caminhos de arquivos. Você pode ver neste exemplo que alguns dos cgroups são nomeados /user.slice e outros /user.slice/user-1000.slice/session-2.scope.
|
||||
* **Os números 2-12 são para cgroups v1**. Os **controladores** para esses são listados ao lado do número.
|
||||
* **O número 1** também é para a **versão 1**, mas não tem um controlador. Este cgroup é apenas para **fins de gerenciamento** (neste caso, o systemd o configurou).
|
||||
* A última linha, **número 0**, é para **cgroups v2**. Nenhum controlador é visível aqui. Em um sistema que não possui cgroups v1, esta será a única linha de saída.
|
||||
* **Os nomes são hierárquicos e parecem partes de caminhos de arquivo**. Você pode ver neste exemplo que alguns dos cgroups são nomeados /user.slice e outros /user.slice/user-1000.slice/session-2.scope.
|
||||
* O nome /testcgroup foi criado para mostrar que, em cgroups v1, os cgroups para um processo podem ser completamente independentes.
|
||||
* Nomes sob user.slice que incluem sessão são sessões de login, atribuídas pelo systemd. Você os verá ao olhar para os cgroups de um shell. Os cgroups para seus serviços do sistema estarão sob system.slice.
|
||||
* **Nomes sob user.slice** que incluem sessão são sessões de login, atribuídas pelo systemd. Você os verá ao olhar para os cgroups de um shell. Os **cgroups** para seus **serviços do sistema** estarão **sob system.slice**.
|
||||
|
||||
### Visualizando cgroups
|
||||
|
||||
Os cgroups são normalmente acessados através do sistema de arquivos. Isso é em contraste com a interface de chamada de sistema Unix tradicional para interagir com o kernel.\
|
||||
Para explorar a configuração de cgroups de um shell, você pode olhar no arquivo `/proc/self/cgroup` para encontrar o cgroup do shell e, em seguida, navegar até o diretório `/sys/fs/cgroup` (ou `/sys/fs/cgroup/unified`) e procurar um diretório com o mesmo nome do cgroup. Mudar para este diretório e olhar ao redor permitirá que você veja as várias configurações e informações de uso de recursos para o cgroup.
|
||||
Os cgroups são normalmente **acessados através do sistema de arquivos**. Isso é em contraste com a interface de chamada do sistema Unix tradicional para interagir com o kernel.\
|
||||
Para explorar a configuração do cgroup de um shell, você pode olhar no arquivo `/proc/self/cgroup` para encontrar o cgroup do shell e, em seguida, navegar até o diretório `/sys/fs/cgroup` (ou `/sys/fs/cgroup/unified`) e procurar um **diretório com o mesmo nome do cgroup**. Mudar para este diretório e olhar ao redor permitirá que você veja as várias **configurações e informações de uso de recursos para o cgroup**.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (10).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (10) (2).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Entre os muitos arquivos que podem estar aqui, os principais arquivos de interface do cgroup começam com `cgroup`. Comece olhando para `cgroup.procs` (usando cat está bem), que lista os processos no cgroup. Um arquivo semelhante, `cgroup.threads`, também inclui threads.
|
||||
Entre os muitos arquivos que podem estar aqui, **os principais arquivos de interface do cgroup começam com `cgroup`**. Comece olhando para `cgroup.procs` (usar cat está bem), que lista os processos no cgroup. Um arquivo semelhante, `cgroup.threads`, também inclui threads.
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (1) (1) (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
A maioria dos cgroups usados para shells tem esses dois controladores, que podem controlar a quantidade de memória usada e o número total de processos no cgroup. Para interagir com um controlador, procure os arquivos que correspondem ao prefixo do controlador. Por exemplo, se você quiser ver o número de threads em execução no cgroup, consulte pids.current:
|
||||
A maioria dos cgroups usados para shells tem esses dois controladores, que podem controlar a **quantidade de memória** usada e o **número total de processos no cgroup**. Para interagir com um controlador, procure os **arquivos que correspondem ao prefixo do controlador**. Por exemplo, se você quiser ver o número de threads em execução no cgroup, consulte pids.current:
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (3) (5).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
Um valor de max significa que este cgroup não tem limite específico, mas porque os cgroups são hierárquicos, um cgroup de volta na cadeia de subdiretórios pode limitá-lo.
|
||||
Um valor de **max significa que este cgroup não tem limite específico**, mas porque os cgroups são hierárquicos, um cgroup de volta na cadeia de subdiretórios pode limitá-lo.
|
||||
|
||||
### Manipulando e Criando cgroups
|
||||
|
||||
Para colocar um processo em um cgroup, escreva seu PID no arquivo `cgroup.procs` como root:
|
||||
Para colocar um processo em um cgroup, **escreva seu PID em seu arquivo `cgroup.procs` como root:**
|
||||
```shell-session
|
||||
# echo pid > cgroup.procs
|
||||
```
|
||||
|
@ -61,11 +61,11 @@ Assim é como as mudanças em cgroups funcionam. Por exemplo, se você quiser **
|
|||
```
|
||||
**Criar cgroups é mais complicado**. Tecnicamente, é tão fácil quanto criar um subdiretório em algum lugar na árvore de cgroups; quando você faz isso, o kernel cria automaticamente os arquivos de interface. Se um cgroup não tiver processos, você pode remover o cgroup com rmdir mesmo com os arquivos de interface presentes. O que pode te confundir são as regras que regem os cgroups, incluindo:
|
||||
|
||||
* Você só pode colocar **processos em cgroups de nível externo ("folha")**. Por exemplo, se você tiver cgroups chamados /meu-cgroup e /meu-cgroup/meu-subgrupo, você não pode colocar processos em /meu-cgroup, mas /meu-cgroup/meu-subgrupo está ok. (Uma exceção é se os cgroups não tiverem controladores, mas não vamos nos aprofundar nisso.)
|
||||
* Você só pode colocar **processos em cgroups de nível externo ("folha")**. Por exemplo, se você tiver cgroups chamados /my-cgroup e /my-cgroup/my-subgroup, você não pode colocar processos em /my-cgroup, mas /my-cgroup/my-subgroup está ok. (Uma exceção é se os cgroups não tiverem controladores, mas não vamos nos aprofundar nisso.)
|
||||
* Um cgroup **não pode ter um controlador que não esteja em seu cgroup pai**.
|
||||
* Você deve **especificar explicitamente controladores para cgroups filhos**. Você faz isso através do arquivo `cgroup.subtree_control`; por exemplo, se você quiser que um cgroup filho tenha os controladores cpu e pids, escreva +cpu +pids neste arquivo.
|
||||
|
||||
Uma exceção a essas regras é o **cgroup raiz** encontrado na parte inferior da hierarquia. Você pode **colocar processos neste cgroup**. Uma razão pela qual você pode querer fazer isso é para desvincular um processo do controle do systemd.
|
||||
Uma exceção a essas regras é o **cgroup raiz** encontrado na parte inferior da hierarquia. Você pode **colocar processos neste cgroup**. Uma razão pela qual você pode querer fazer isso é para desanexar um processo do controle do systemd.
|
||||
|
||||
Mesmo sem controladores habilitados, você pode ver o uso da CPU de um cgroup olhando para o arquivo cpu.stat:
|
||||
|
||||
|
|
|
@ -49,7 +49,7 @@ Você pode usar o script [**JamfSniper.py**](https://github.com/WithSecureLabs/J
|
|||
|
||||
Além disso, depois de encontrar as credenciais adequadas, você pode ser capaz de fazer força bruta em outros nomes de usuário com o formulário a seguir:
|
||||
|
||||
![](<../../.gitbook/assets/image (13).png>)
|
||||
![](<../../.gitbook/assets/image (6).png>)
|
||||
|
||||
#### Autenticação de dispositivo JAMF
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
|
||||
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Verifique os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
|
@ -31,7 +31,7 @@ As Extensões de Rede fornecem a capacidade de personalizar os comportamentos de
|
|||
* **Proxy de Aplicativo**: Isso é usado para criar um cliente VPN que implementa um protocolo VPN personalizado orientado a fluxo. Isso significa que ele lida com o tráfego de rede com base em conexões (ou fluxos) em vez de pacotes individuais.
|
||||
* **Túnel de Pacote**: Isso é usado para criar um cliente VPN que implementa um protocolo VPN personalizado orientado a pacote. Isso significa que ele lida com o tráfego de rede com base em pacotes individuais.
|
||||
* **Filtro de Dados**: Isso é usado para filtrar "fluxos" de rede. Ele pode monitorar ou modificar dados de rede no nível do fluxo.
|
||||
* **Filtro de Pacotes**: Isso é usado para filtrar pacotes de rede individuais. Ele pode monitorar ou modificar dados de rede no nível do pacote.
|
||||
* **Filtro de Pacote**: Isso é usado para filtrar pacotes de rede individuais. Ele pode monitorar ou modificar dados de rede no nível do pacote.
|
||||
* **Proxy DNS**: Isso é usado para criar um provedor DNS personalizado. Ele pode ser usado para monitorar ou modificar solicitações e respostas DNS.
|
||||
|
||||
## Framework de Segurança de Endpoint
|
||||
|
@ -56,7 +56,7 @@ Os eventos que o framework Endpoint Security pode monitorar são categorizados e
|
|||
|
||||
### Arquitetura do Framework de Segurança de Endpoint
|
||||
|
||||
<figure><img src="../../../.gitbook/assets/image (6).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../.gitbook/assets/image (8).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
A **comunicação do espaço do usuário** com o framework Endpoint Security ocorre por meio da classe IOUserClient. Duas subclasses diferentes são usadas, dependendo do tipo de chamador:
|
||||
|
||||
|
@ -79,7 +79,7 @@ A questão é que o aplicativo de segurança precisa ter **permissões de Acesso
|
|||
```bash
|
||||
tccutil reset All
|
||||
```
|
||||
Para **mais informações** sobre essa falha de segurança e outras relacionadas, confira a palestra [#OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI)
|
||||
Para **mais informações** sobre essa falha e outras relacionadas, confira a palestra [#OBTS v5.0: "The Achilles Heel of EndpointSecurity" - Fitzl Csaba](https://www.youtube.com/watch?v=lQO7tvNCoTI)
|
||||
|
||||
No final, isso foi corrigido dando a nova permissão **`kTCCServiceEndpointSecurityClient`** ao aplicativo de segurança gerenciado por **`tccd`** para que o `tccutil` não limpe suas permissões, impedindo-o de ser executado.
|
||||
|
||||
|
|
|
@ -46,9 +46,15 @@ Esta é uma [função pública](https://developer.apple.com/documentation/securi
|
|||
```
|
||||
Para mais informações, confira esta palestra: [https://www.youtube.com/watch?v=lTOItyjTTkw](https://www.youtube.com/watch?v=lTOItyjTTkw)
|
||||
|
||||
### Execução por montagem
|
||||
|
||||
Se um instalador escreve em `/tmp/fixedname/bla/bla`, é possível **criar uma montagem** sobre `/tmp/fixedname` sem proprietários, para que você possa **modificar qualquer arquivo durante a instalação** para abusar do processo de instalação.
|
||||
|
||||
Um exemplo disso é **CVE-2021-26089**, que conseguiu **sobrescrever um script periódico** para obter a execução como root. Para mais informações, dê uma olhada na palestra: [**OBTS v4.0: "Mount(ain) of Bugs" - Csaba Fitzl**](https://www.youtube.com/watch?v=jSYPazD4VcE)
|
||||
|
||||
## Referências
|
||||
|
||||
* [https://www.youtube.com/watch?v=iASSG0\_zobQ](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
* [**DEF CON 27 - Unpacking Pkgs A Look Inside Macos Installer Packages And Common Security Flaws**](https://www.youtube.com/watch?v=iASSG0\_zobQ)
|
||||
|
||||
<details>
|
||||
|
||||
|
@ -57,7 +63,7 @@ Para mais informações, confira esta palestra: [https://www.youtube.com/watch?v
|
|||
* Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
|
||||
* Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
|
||||
* Adquira o [**swag oficial do PEASS & HackTricks**](https://peass.creator-spring.com)
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
* **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
|
||||
* **Compartilhe suas técnicas de hacking enviando PRs para o** [**repositório hacktricks**](https://github.com/carlospolop/hacktricks) **e para o** [**repositório hacktricks-cloud**](https://github.com/carlospolop/hacktricks-cloud).
|
||||
|
||||
</details>
|
||||
|
|
|
@ -60,7 +60,7 @@ Para mais informações sobre Scripts da Apple, consulte:
|
|||
[macos-apple-scripts.md](macos-apple-scripts.md)
|
||||
{% endcontent-ref %}
|
||||
|
||||
Por exemplo, se um aplicativo tiver permissão de Automação sobre o `iTerm`, por exemplo, neste exemplo o `Terminal` tem acesso sobre o iTerm:
|
||||
Por exemplo, se um aplicativo tiver permissão de Automação sobre o `iTerm`, neste exemplo, o `Terminal` tem acesso sobre o iTerm:
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (2) (2) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
|
@ -154,25 +154,25 @@ launchctl setenv SQLITE_AUTO_TRACE 1
|
|||
```
|
||||
### Apple Remote Desktop
|
||||
|
||||
Como root, você pode habilitar este serviço e o agente ARD terá acesso total ao disco, o que pode ser abusado por um usuário para fazer uma cópia de um novo banco de dados de usuário TCC.
|
||||
Como root, você pode habilitar este serviço e o **agente ARD terá acesso total ao disco**, o que pode ser abusado por um usuário para fazer uma cópia de um novo **banco de dados de usuário TCC**.
|
||||
|
||||
## Por plugins
|
||||
|
||||
Plugins são códigos extras geralmente na forma de bibliotecas ou plist, que serão carregados pela aplicação principal e executarão sob seu contexto. Portanto, se a aplicação principal tiver acesso a arquivos restritos do TCC (por meio de permissões concedidas ou direitos), o código personalizado também terá.
|
||||
Plugins são códigos extras geralmente na forma de bibliotecas ou plist, que serão **carregados pela aplicação principal** e executarão sob seu contexto. Portanto, se a aplicação principal tiver acesso a arquivos restritos do TCC (por meio de permissões concedidas ou direitos), o **código personalizado também terá**.
|
||||
|
||||
### CVE-2020-27937 - Directory Utility
|
||||
|
||||
A aplicação `/System/Library/CoreServices/Applications/Directory Utility.app` tinha o direito `kTCCServiceSystemPolicySysAdminFiles`, carregava plugins com extensão `.daplug` e não tinha o tempo de execução endurecido.
|
||||
A aplicação `/System/Library/CoreServices/Applications/Directory Utility.app` tinha o direito **`kTCCServiceSystemPolicySysAdminFiles`**, carregava plugins com extensão **`.daplug`** e **não tinha o tempo de execução endurecido**.
|
||||
|
||||
Para tornar essa CVE uma arma, o `NFSHomeDirectory` é alterado (abusando do direito anterior) para poder assumir o banco de dados TCC dos usuários e contornar o TCC.
|
||||
Para tornar essa CVE uma arma, o **`NFSHomeDirectory`** é **alterado** (abusando do direito anterior) para poder **assumir o banco de dados TCC dos usuários** e contornar o TCC.
|
||||
|
||||
Para mais informações, consulte o [**relatório original**](https://wojciechregula.blog/post/change-home-directory-and-bypass-tcc-aka-cve-2020-27937/).
|
||||
|
||||
### CVE-2020-29621 - Coreaudiod
|
||||
|
||||
O binário `/usr/sbin/coreaudiod` tinha os direitos `com.apple.security.cs.disable-library-validation` e `com.apple.private.tcc.manager`. O primeiro permitindo a injeção de código e o segundo dando acesso para gerenciar o TCC.
|
||||
O binário **`/usr/sbin/coreaudiod`** tinha os direitos `com.apple.security.cs.disable-library-validation` e `com.apple.private.tcc.manager`. O primeiro **permitindo a injeção de código** e o segundo dando acesso para **gerenciar o TCC**.
|
||||
|
||||
Este binário permitia carregar plug-ins de terceiros da pasta `/Library/Audio/Plug-Ins/HAL`. Portanto, era possível carregar um plugin e abusar das permissões do TCC com este PoC:
|
||||
Este binário permitia carregar **plug-ins de terceiros** da pasta `/Library/Audio/Plug-Ins/HAL`. Portanto, era possível **carregar um plug-in e abusar das permissões do TCC** com este PoC:
|
||||
```objectivec
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <Security/Security.h>
|
||||
|
@ -295,7 +295,7 @@ exploit_location]; task.standardOutput = pipe;
|
|||
### CVE-2020-9771 - mount\_apfs TCC bypass e escalonamento de privilégios
|
||||
|
||||
**Qualquer usuário** (mesmo não privilegiado) pode criar e montar um snapshot do time machine e **acessar TODOS os arquivos** desse snapshot.\
|
||||
O **único privilégio** necessário é para a aplicação usada (como `Terminal`) ter **Acesso Total ao Disco** (FDA) (`kTCCServiceSystemPolicyAllfiles`) que precisa ser concedido por um administrador.
|
||||
O **único privilégio** necessário é para a aplicação usada (como o `Terminal`) ter acesso de **Acesso Total ao Disco** (FDA) (`kTCCServiceSystemPolicyAllfiles`) que precisa ser concedido por um administrador.
|
||||
|
||||
{% code overflow="wrap" %}
|
||||
```bash
|
||||
|
@ -367,7 +367,7 @@ A pasta **`/var/db/locationd/` não estava protegida da montagem de DMG**, entã
|
|||
|
||||
Em várias ocasiões, arquivos armazenam informações sensíveis como e-mails, números de telefone, mensagens... em locais não protegidos (o que conta como uma vulnerabilidade na Apple).
|
||||
|
||||
<figure><img src="../../../../.gitbook/assets/image (7).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../../../../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
## Referência
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ msf> use auxiliary/scanner/postgres/postgres_dbname_flag_injection
|
|||
```
|
||||
### **Força bruta**
|
||||
|
||||
A técnica de força bruta é uma das maneiras mais comuns de obter acesso não autorizado a um banco de dados PostgreSQL. O atacante tenta adivinhar a senha do usuário repetidamente até que a senha correta seja encontrada.
|
||||
A técnica de força bruta é usada para adivinhar senhas de usuários. O atacante tenta várias combinações de senhas até encontrar a correta. O PostgreSQL é vulnerável a ataques de força bruta, portanto, é importante usar senhas fortes e complexas.
|
||||
|
||||
### **Varredura de porta**
|
||||
|
||||
|
@ -103,39 +103,11 @@ running on host "1.2.3.4" and accepting TCP/IP connections on port 5678?
|
|||
DETAIL: server closed the connection unexpectedly This probably means
|
||||
the server terminated abnormally before or while processing the request
|
||||
```
|
||||
Descobrindo informações do PostgreSQL
|
||||
|
||||
O PostgreSQL é um sistema de gerenciamento de banco de dados relacional de código aberto. Ele é amplamente utilizado em aplicativos da web e é conhecido por sua confiabilidade e segurança. No entanto, como qualquer sistema, ele pode ter vulnerabilidades que podem ser exploradas por hackers.
|
||||
|
||||
Aqui estão algumas técnicas de pentesting que podem ser usadas para descobrir informações do PostgreSQL:
|
||||
|
||||
## Enumeração de usuários
|
||||
|
||||
A enumeração de usuários é o processo de descobrir nomes de usuários válidos em um sistema. Isso pode ser feito usando a ferramenta Metasploit. O módulo `postgresql_login` pode ser usado para tentar fazer login no PostgreSQL com uma lista de nomes de usuário e senhas.
|
||||
|
||||
## Enumeração de bancos de dados
|
||||
|
||||
A enumeração de bancos de dados é o processo de descobrir bancos de dados disponíveis em um sistema. Isso pode ser feito usando a ferramenta `psql`. O comando `\l` pode ser usado para listar todos os bancos de dados disponíveis.
|
||||
|
||||
## Enumeração de tabelas
|
||||
|
||||
A enumeração de tabelas é o processo de descobrir tabelas em um banco de dados. Isso pode ser feito usando a ferramenta `psql`. O comando `\dt` pode ser usado para listar todas as tabelas em um banco de dados.
|
||||
|
||||
## Enumeração de colunas
|
||||
|
||||
A enumeração de colunas é o processo de descobrir colunas em uma tabela. Isso pode ser feito usando a ferramenta `psql`. O comando `\d nome_da_tabela` pode ser usado para listar todas as colunas em uma tabela.
|
||||
|
||||
## Enumeração de dados
|
||||
|
||||
A enumeração de dados é o processo de descobrir dados em uma tabela. Isso pode ser feito usando a ferramenta `psql`. O comando `SELECT * FROM nome_da_tabela` pode ser usado para listar todos os dados em uma tabela.
|
||||
|
||||
## Injeção de SQL
|
||||
|
||||
A injeção de SQL é uma técnica de hacking que envolve a inserção de código SQL malicioso em um aplicativo da web para obter acesso não autorizado ao banco de dados subjacente. Isso pode ser feito usando a ferramenta `sqlmap`. O `sqlmap` é uma ferramenta automatizada de teste de penetração que pode detectar e explorar vulnerabilidades de injeção de SQL em aplicativos da web.
|
||||
Desculpe, eu não entendi. Você poderia reformular sua solicitação?
|
||||
```
|
||||
DETAIL: FATAL: password authentication failed for user "name"
|
||||
```
|
||||
* A porta está aberta ou filtrada
|
||||
* Porta está aberta ou filtrada
|
||||
```
|
||||
DETAIL: could not connect to server: Connection timed out Is the server
|
||||
running on host "1.2.3.4" and accepting TCP/IP connections on port 5678?
|
||||
|
@ -445,7 +417,7 @@ ALTER USER user_name WITH PASSWORD 'new_password';
|
|||
COPY (select '') to PROGRAM 'psql -U <super_user> -c "ALTER USER <your_username> WITH SUPERUSER;"';
|
||||
```
|
||||
{% hint style="info" %}
|
||||
Isso geralmente é possível devido às seguintes linhas no arquivo **`pg_hba.conf`**:
|
||||
Isso geralmente é possível por causa das seguintes linhas no arquivo **`pg_hba.conf`**:
|
||||
```bash
|
||||
# "local" is for Unix domain socket connections only
|
||||
local all all trust
|
||||
|
@ -569,9 +541,9 @@ WITH (create_slot = false); INSERT INTO public.test3(data) VALUES(current_user);
|
|||
```
|
||||
E então **execute comandos**:
|
||||
|
||||
<figure><img src="../.gitbook/assets/image (9).png" alt=""><figcaption></figcaption></figure>
|
||||
<figure><img src="../.gitbook/assets/image (9) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Passar Burteforce com PL/pgSQL
|
||||
### Passando Burteforce com PL/pgSQL
|
||||
|
||||
PL/pgSQL, como uma **linguagem de programação completa**, permite muito mais controle procedural do que o SQL, incluindo a **capacidade de usar loops e outras estruturas de controle**. Declarações SQL e gatilhos podem chamar funções criadas na linguagem PL/pgSQL.\
|
||||
**Você pode abusar dessa linguagem para pedir ao PostgreSQL que faça força bruta nas credenciais dos usuários.**
|
||||
|
@ -618,8 +590,8 @@ A autenticação do cliente é controlada por um arquivo de configuração frequ
|
|||
|
||||
![](https://lh4.googleusercontent.com/Ff8YbD3ppYmN2Omp-4M-0AAVhLsr4c2i7d7HUjgkE-O6NZ5zbaST1hdMPrp1AL\_xTXJalYe0HYxUk76vWJUfHZ5GuCDvIL1A-sMV44Z0CYSVgLM9ttFTDu-BhzewBGc7FeMarTLqsu\_N1ztXJg)
|
||||
|
||||
**Cada** registro **especifica** um **tipo de conexão**, um **intervalo de endereços IP do cliente** (se relevante para o tipo de conexão), um **nome de banco de dados**, um **nome de usuário** e o **método de autenticação** a ser usado para conexões que correspondam a esses parâmetros. O **primeiro registro com uma correspondência** de tipo de conexão, endereço do cliente, banco de dados solicitado e nome de usuário **é usado** para realizar a autenticação. Não há "queda" ou "backup": **se um registro é escolhido e a autenticação falha, registros subsequentes não são considerados**. Se nenhum registro corresponder, o acesso é negado.\
|
||||
Os métodos de autenticação **baseados em senha** são **md5**, **crypt** e **password**. Esses métodos operam de maneira semelhante, exceto pela forma como a senha é enviada pela conexão: respectivamente, hash MD5, criptografia crypt e texto claro. Uma limitação é que o método crypt não funciona com senhas que foram criptografadas em pg\_authid.
|
||||
**Cada** registro **especifica** um **tipo de conexão**, um **intervalo de endereços IP do cliente** (se relevante para o tipo de conexão), um **nome de banco de dados**, um **nome de usuário** e o **método de autenticação** a ser usado para conexões que correspondam a esses parâmetros. O **primeiro registro com uma correspondência** de tipo de conexão, endereço do cliente, banco de dados solicitado e nome de usuário **é usado** para realizar a autenticação. Não há "queda" ou "backup": **se um registro for escolhido e a autenticação falhar, registros subsequentes não serão considerados**. Se nenhum registro corresponder, o acesso será negado.\
|
||||
Os métodos de autenticação baseados em **senha** são **md5**, **crypt** e **password**. Esses métodos operam de maneira semelhante, exceto pela forma como a senha é enviada pela conexão: respectivamente, hash MD5, criptografia crypt e texto claro. Uma limitação é que o método crypt não funciona com senhas que foram criptografadas em pg\_authid.
|
||||
|
||||
<details>
|
||||
|
||||
|
|