- Você trabalha em uma **empresa de segurança cibernética**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe suas técnicas de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.
Descobri que o uso de `--break-on 'java.lang.String.indexOf'` torna o exploit mais **estável**. E se você tiver a chance de fazer upload de uma backdoor para o host e executá-la em vez de executar um comando, o exploit será ainda mais estável.
Normalmente, esse depurador é executado na porta 8000 e, se você estabelecer uma conexão TCP com a porta e enviar "**JDWP-Handshake**", o servidor deve responder com a mesma string.\
Além disso, você pode verificar essa string na rede para encontrar possíveis serviços JDWP.
Listando **processos**, se você encontrar a string "**jdwk**" dentro de um **processo java**, provavelmente ele tem ativo o **Java Debug Wired Protocol** e você pode ser capaz de se mover lateralmente ou até mesmo **escalar privilégios** (se executado como root).
**Java Platform Debug Architecture (JPDA)**: JDWP é um componente do sistema global de depuração Java, chamado de Java Platform Debug Architecture (JPDA)\[2]. O seguinte é um diagrama da arquitetura geral:
O Debuggee consiste em uma JVM com várias threads executando nossa aplicação de destino. Para ser remotamente depurável, a instância JVM deve ser explicitamente iniciada com a opção -Xdebug passada na linha de comando, bem como a opção -Xrunjdwp (ou -agentlib). Por exemplo, iniciar um servidor Tomcat com depuração remota habilitada ficaria assim:
Como mostrado no diagrama da arquitetura, o Java Debug Wire Protocol é o link central entre o Debugger e a instância JVM. Observações sobre o protocolo incluem:
* É um protocolo binário de rede baseado em pacotes.
* É principalmente síncrono. O depurador envia um comando sobre JDWP e espera receber uma resposta. No entanto, alguns comandos, como Eventos, não esperam uma resposta síncrona. Eles enviarão uma resposta quando condições específicas forem atendidas. Por exemplo, um BreakPoint é um Evento.
Todas essas observações fazem total sentido, uma vez que estamos falando de um protocolo de depuração. No entanto, quando um serviço desse tipo é exposto a uma rede hostil ou está voltado para a Internet, as coisas podem dar errado.\
**Handshake**: JDWP dita\[9] que a comunicação deve ser iniciada por um simples handshake. Após uma conexão TCP bem-sucedida, o Debugger (cliente) envia a string ASCII de 14 caracteres "JDWP-Handshake". O Debuggee (servidor) responde a esta mensagem enviando exatamente a mesma string. O seguinte rastreamento scapy\[3] mostra o handshake inicial de duas vias:
root:\~/tools/scapy-hg # ip addr show dev eth0 | grep “inet “ inet 192.168.2.2/24 brd 192.168.2.255 scope global eth0root:\~/tools/scapy-hg # ./run\_scapy
O exploit final utiliza essas técnicas, adiciona algumas verificações e envia sinais de suspensão / retomada para causar o mínimo de interrupção possível (é sempre melhor não quebrar a aplicação em que você está trabalhando, certo?). Ele age em dois modos:
* O modo "Padrão" é totalmente não intrusivo e simplesmente executa código Java para obter informações do sistema local (perfeito para um PoC para um cliente).
* Passando a opção "cmd" executa um comando do sistema no host remoto e, portanto, é mais intrusivo. O comando é executado com os privilégios com os quais o JVM está sendo executado.
Como o Java é projetado para ser independente de plataforma, os comandos podem ser executados em qualquer sistema operacional que o Java suporte. Bem, isso é realmente uma boa notícia para nós, pentesters: **o serviço JDWP aberto significa RCE confiável**. Até agora, tudo bem.
Na verdade, o JDWP é bastante usado no mundo das aplicações Java. No entanto, os pentesters podem não vê-lo com tanta frequência ao realizar avaliações remotas, pois os firewalls bloqueariam (e deveriam) a porta em que ele está sendo executado. Mas isso não significa que o JDWP não possa ser encontrado na natureza:
* No momento em que este artigo foi escrito, uma pesquisa rápida no ShodanHQ\[4] revelou imediatamente cerca de 40 servidores enviando o handshake JDWP:
* A varredura em massa da Internet em busca de portas específicas (tcp/8000, tcp/8080, tcp/8787, tcp/5005) revelou muitos hosts (que não podem ser relatados aqui) respondendo ao handshake inicial.
* Aplicações "Enterprise" foram encontradas na natureza executando um serviço JDWP \*por padrão\* (encontrar o número da porta real é deixado como um exercício para o leitor curioso).
Essas são apenas algumas maneiras de descobrir serviços JDWP abertos na Internet. Isso é um ótimo lembrete de que as aplicações devem passar regularmente por revisões de segurança minuciosas, os ambientes de produção devem ter qualquer funcionalidade de depuração desativada e os firewalls devem ser configurados para restringir o acesso a serviços necessários apenas para operação normal. Permitir que qualquer pessoa se conecte a um serviço JDWP é exatamente o mesmo que permitir uma conexão a um serviço gdbserver (de uma maneira mais estável). Espero que você tenha gostado de ler este artigo tanto quanto eu gostei de brincar com JDWP. Para todos os poderosos piratas, feliz JDWP pwning !!
- Você trabalha em uma **empresa de cibersegurança**? Você quer ver sua **empresa anunciada no HackTricks**? ou você quer ter acesso à **última versão do PEASS ou baixar o HackTricks em PDF**? Confira os [**PLANOS DE ASSINATURA**](https://github.com/sponsors/carlospolop)!
- Descubra [**A Família PEASS**](https://opensea.io/collection/the-peass-family), nossa coleção exclusiva de [**NFTs**](https://opensea.io/collection/the-peass-family)
- **Junte-se ao** [**💬**](https://emojipedia.org/speech-balloon/) [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga-me** no **Twitter** [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **Compartilhe seus truques de hacking enviando PRs para o [repositório hacktricks](https://github.com/carlospolop/hacktricks) e [hacktricks-cloud repo](https://github.com/carlospolop/hacktricks-cloud)**.