最近安全圈曝光了很多漏洞,后续将对这些有代表性的漏洞进行分析审计。
今天先审计分析 泛微 OA RCE 漏洞
事件背景
2019年9月17日泛微OA官方更新了一个远程代码执行漏洞补丁,泛微e-cology OA系统的JAVA Beanshell接口可被未授权访问,攻击者调用该Beanshell接口,可构造特定的HTTP请求绕过泛微本身一些安全限制从而达成远程命令执行,漏洞等级严重。
漏洞信息
漏洞名称
泛微OA E-cology 远程代码执行漏洞
CVE编号
–
CNVD编号
CNVD-2019-32204
影响版本
e-cology <=9.0
威胁等级
高危
公开时间
2019年9月17日
原理分析
此次存在漏洞的是JAVA Beanshell接口,先了解下Beanshell的基础。
- BeanShell 知识(来源:https://github.com/beanshell/beanshell)
BeanShell是一个小型的,免费的,可嵌入的Java源解释器,具有使用Java编写的对象脚本语言功能。BeanShell动态执行标准Java语法,并通过通用的脚本编写便利进行扩展,例如松散的类型,命令和方法闭包(如Perl和JavaScript)。
可以交互地使用BeanShell进行Java实验和调试,以及以新方式扩展应用程序。
Beanshell可以执行print、dir、eval、exec等命令
页面如下图
2.泛微中Beanshell库jar代码静态分析
本次漏洞是因为泛微OA系统的JAVA Beanshell接口可被未授权访问,攻击者调用该Beanshell接口,执行系统命令。
先对bsh-2.0b4.jar 文件分析,利用Jadx工具反编译查看servlet.BshServlet这个类
在类中发现doGet和doPost方法,用来接收并执行提交的数据。
doPost是对doGet的二次封装
在doGet方法中看到调用evalScript方法创建一个名为obj的对象,再看evalScript这个方法中的pramString参数,最终会被interpreter.eval处理。如下图
跟进 bsh.Interpreter类的eval方法
跳转到bsh.classpath/ClassManagerImpl.class类
该类调用了bsh.commands/exec.bsh脚本,该脚本可以执行命令
漏洞复现
1.泛微OA BeanShell复现测试
把print(“hello!”)换成exec(“whoami”),就可以测试能否执行系统命令了。
Poc1:bsh.script=\u0065\u0078\u0065\u0063(“whoami”);&bsh.servlet.output=raw
如果有全局过滤器过滤了exec或eval,会有报错,如下图:
可以采用unicode编码、字符串拼接等方式绕过,见下图:
Poc2: bsh.script=\u0065\u0078\u0065\u0063(“whoami”);&bsh.servlet.output=raw
Poc3:
bsh.script=eval%00(“ex”%2b”ec(bsh.httpServletRequest.getParameter(\”command\”))”);&bsh.servlet.captureOutErr=true&bsh.servlet.output=raw&command=whoami
- 批量验证脚本
该脚本组合了常用的泛微OA web路径,加上本文讲解绕过过滤器的3个Poc
该工具仅用于测试研究使用请勿他用。
脚本地址:
免责声明
本文中提到的漏洞利用Poc和脚本仅供研究学习使用,请遵守《网络安全法》等相关法律法规。
关于领信
陕西领信未来信息科技有限公司是一家主要面向铁路、科研院所、大型企业等行业的网络安全集成和网络安全技术支持服务及相关应用的专业化信息技术企业。成立于2003年。多年来为用户提供从方案设计、工程实施到售后技术服务的全面技术支持,具有健全的运营体制和现代企业理念 , 公司成立以来,业绩显著,成功完成了多项网络安全建设项目,建立了完善的客户服务系统,赢得了广大客户的赞誉和信赖。在信息安全、网络应急服务实施过程中,领信未来已发展成为陕西省内信息安全技术领域颇具实力的企业之一
业务范围
安全服务、应急响应、渗透测试、系统集成
联系方式
电话:029-88235366
邮箱:liujj@linktrust.net