
Aplicação cliente-servidor deliberadamente vulnerável para aprendizado de testes de penetração em clientes thick não HTTP. Inclui desafios de SQL injection, RCE, ataques XML, buffer over-read e vulnerabilidades de controle de acesso.
A Aplicação Vulnerável Cliente-Servidor (VuCSA) foi criada para aprender/apresentar como realizar testes de penetração em aplicações cliente-servidor não HTTP. É escrita em Java (com interface gráfica JavaFX).
Atualmente, a aplicação vulnerável contém os seguintes desafios:
Se quiser saber como resolver estes desafios, consulte o site do PETEP, que descreve como usar a ferramenta open-source PETEP para explorá-los.
Dica 1: Antes de começar a hackear, não se esqueça de verificar a estrutura de dados das mensagens abaixo. Ao modificar o tráfego de rede, provavelmente terá que considerar a estrutura, especialmente os bytes de comprimento do payload.
Dica 2: A maioria dos desafios pode ser explorada através da modificação do tráfego de rede. Portanto, é recomendado usar um proxy TCP ou hooks de processo para os testes.
Dica 3: Alguns desafios possuem validação de entrada e restrições, o que é comum em thick clients, mas isso não significa que o servidor use a mesma validação.
Neste desafio, o seu objetivo é manipular o tráfego de rede entre o cliente e o servidor de forma que leve a um buffer over-read.
O desafio de execução de comandos representa uma vulnerabilidade de execução de comandos muito simples. O objetivo é executar um comando malicioso no servidor.
O desafio de injeção SQL contém um campo de pesquisa vulnerável a injeção SQL, mas como notará em breve, a entrada não permite inserir os caracteres necessários.
O desafio de enumeração é baseado num formulário de login simulado que não está protegido contra enumeração. Conseguirá encontrar todos os 5 utilizadores e adivinhar as suas palavras-passe?
Neste desafio, pode encontrar várias vulnerabilidades XML:
O desafio de controlo de acesso horizontal representa um leitor de documentos que permite ao utilizador ver os seus próprios documentos e ler o seu conteúdo. O objetivo é encontrar 5 documentos de outros utilizadores.
O desafio de controlo de acesso vertical é baseado num painel de utilizador simulado, que mostra informações básicas do utilizador. O objetivo é encontrar uma funcionalidade de administrador oculta e verificar se é possível usá-la como um utilizador Convidado.
A vulnerabilidade de RCE por desserialização utiliza desserialização/serialização Java para transmitir dados através da rede. A aplicação contém dois caminhos que pode usar para alcançar execução remota de código através da vulnerável desserialização Java.
Pode encontrar ambos os caminhos examinando o ficheiro JAR do servidor ou consultando o código fonte.
O objetivo é criar exploits para ambos os caminhos e executar um comando malicioso no servidor.
Dica: Pode usar o JAR do servidor como biblioteca para facilitar a criação do exploit.
Precisa de Java 11 ou versão mais recente para executar o VuCSA.
Nota: Para Mac com arquitetura ARM64 (chips M1, M2), use a build especial para Java 17.
Para executar o servidor e o cliente vulneráveis, pode usar um dos lançamentos no GitHub ou executar o gradle assemble, que cria pacotes de distribuição (para Windows e Unix). Estes pacotes contêm scripts sh/bat que executarão o servidor e o cliente usando a JVM:
# Linux / Mac
chmod +x client.sh server.sh
./client.sh
./server.sh
# Windows
client.bat
server.bat
Nota: Estes scripts de execução contêm variáveis úteis, incluindo o caminho para o executável Java. Pode precisar de alterá-lo se não o tiver no PATH ou se usar várias versões de Java.
A configuração do servidor é criada automaticamente se não existir
e depois é carregada a partir de server.json no mesmo diretório onde o servidor está a ser executado:
{
"network": {
"serverHost": "0.0.0.0",
"serverPort": 8765
}
}
A configuração do cliente pode ser especificada na aplicação em execução.
O projeto está dividido em três módulos:
As mensagens transmitidas entre servidor e cliente têm o seguinte formato simples:
[tipo][alvo][comprimento][payload]
32b 32b 32b ???
Estas quatro partes têm o seguinte significado:
Para enviar payloads personalizados, pode ter que atualizar o comprimento do payload. Caso contrário, não funcionará corretamente. No tutorial, é desenvolvido um script automático para corrigir automaticamente os bytes de comprimento do payload.
A Aplicação Vulnerável Cliente-Servidor (VuCSA) contém múltiplas vulnerabilidades, que podem ser exploradas de várias formas. O guia oficial para explorar estas vulnerabilidades usa o proxy de testes de penetração open-source (consultar Metodologia PETEP).
Na metodologia PETEP, todo o processo de exploração dos desafios é explicado, incluindo payloads úteis.