内容简介:首先廖大神在自己的博客里提到了通过
首先廖大神在自己的博客里提到了通过
com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
,可以构造无视jdk版本限制的payload,本着学习的心态搞一搞,看看为啥会这样。
0x02 深入
从 这篇文章 中看到,构造方法可以参考这个CVE-2017-17485。
先看看这个漏洞的payload。
再看看如何利用这个漏洞,我们发现这个漏洞利用方式是通过 org.springframework.context.support.FileSystemXmlApplicationContext
这个方法去加载恶意xml文件,而在上面的xml文件中通过spel表达式可以触发相关payload。
回到本次 weblogic 上, weblogic 也有这个相关构造函数,所以我们可以使用这个payload先试试,测试过程中发现无法使用,深究一下看一下代码,我们发现 weblogic 解析 xml 文件的类 com.bea.core.repackaged.springframework.beans.factory.support.BeanDefinitionValueResolver
我在这里打一个断点,这样进入
com.bea.core.repackaged.springframework.context.support.FileSystemXmlApplicationContext
之后的操作就很明显。
这个地方和 CVE-2017-17485 的payload触发位置相比,少了一个表达式解析方法
Object valueObject=evaluate(TypedStringValue)
也就是说这里xml没办法通过雷神对 #{ pb.start() } 开始针对 pb 这个 bean 进行操作。所以说这里需要调整理一下 payload ,我调整后的结果如下所示。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd "> <bean id="pb" class="java.lang.ProcessBuilder" init-method="start"> <constructor-arg value="calc.exe" /> </bean> </beans>
关于在spring 容器初始化 bean 和销毁前所做的操作定义方式有三种:
第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作
第二种是:通过在xml中定义init-method 和 destory-method方法
第三种是: 通过bean实现InitializingBean和 DisposableBean接口
CVE-2017-17485这个漏洞的触发 payload 用的是 spel 表达式的方法注册 bean ,而我们这里由于缺少相关解析文件无法使用 spel 表达式,这里可以使用 init-method 方法来解决这里这个问题,可以先看一个例子
测试程序如下:
public class TestInitMethod{ public void testInit(){ System.out.println("test init-method"); } }
配置文件如下:
//spring.xml <bean id="testInitMethod" class="com.TestInitMethod" init-method="testInit"></bean>
Main主程序如下:
public class Main { public static void main(String[] args){ ClassPathXmlApplicationContext context1 = new ClassPathXmlApplicationContext("spring.xml"); } }
打印如下结果:
test init-method
这里为什么没办法支持 spel ,我的想法可能是因为 spring 版本过低,所以没办法支持spel表达式。
当然FileSystemXmlApplicationContext
是继承
AbstractXmlApplicationContext
而 ClassPathXmlApplicationContext
也是继承 AbstractXmlApplicationContext
。
所以理论上这个类也可以,试试看,OK确实也可以。
0x03 后话
由于最近工作繁忙,导致学习时间极度拉下来,这个方法已经能够命令执行了,就不继续构造下一步payload,大家可以试试。这个方法也有缺陷,如果服务器无法主动发起请求的情况,也是没办法达到效果的,这个weblogic还是有很多地方可以学习的。
0x04 Reference
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
人人都是产品经理
苏杰 / 电子工业出版社 / 2012-6 / 45.00元
本书为《人人都是产品经理》的升级版,是写给“1到3岁的产品经理”的书,适合刚入门的产品经理、产品规划师、需求分析师,以及对做产品感兴趣的学生,用户体验、市场运营、技术部门的朋友们,特别是互联网、软件行业。作为一名“4岁的产品经理”,作者讲述了过去3年的经历与体会,与前辈们的书不同,本书就像你走到作者身边,说“嗨,哥们!晚上有空吃个饭吗,随便聊聊做产品的事吧”,然后作者说“好啊”。 书名叫“......一起来看看 《人人都是产品经理》 这本书的介绍吧!
在线进制转换器
各进制数互转换器
Markdown 在线编辑器
Markdown 在线编辑器