某框架路由渗透
字数 1175 2025-08-22 22:47:30

DWR路由渗透测试技术详解

1. DWR路由技术概述

DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,主要帮助开发人员开发包含AJAX技术的网站。

1.1 核心配置文件

DWR框架主要依赖两个配置文件:

  1. web.xml - 配置DWR的servlet映射
  2. dwr.xml - 配置远程调用类和方法

1.2 典型web.xml配置示例

<servlet>
    <servlet-name>dwr-invoker</servlet-name>
    <servlet-class>org.directwebremoting.servlet.DwrServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>dwr-invoker</servlet-name>
    <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

1.3 Debug模式配置

<init-param>
    <param-name>debug</param-name>
    <param-value>true</param-value>
</init-param>

当debug模式启用时,访问/dwr/index.html路径可能导致类测试地址泄漏。

2. DWR路由安全风险

2.1 主要安全风险

  1. 敏感信息泄露(类测试地址、接口信息)
  2. 文件上传漏洞
  3. SQL注入漏洞
  4. 未授权访问

2.2 典型漏洞请求示例

POST /DwrProject/dwr/call/plaincall/dwrtest.findByUserId.dwr HTTP/1.1
Host: ip:port
Content-Type: text/plain
Content-Length: 227

callCount=1
windowName=
c0-scriptName=dwrtest
c0-methodName=findByUserId
c0-id=0
c0-param0=number:1
batchId=1
instanceId=0
page=%2FDwrProject%2Fdwr%2Ftest%2Fdwrtest
scriptSessionId=7viforTWTj$BVBJSxv99$V*hVgn/*YsBVgn-XOm0BUHfr

关键参数说明:

  • c0-scriptName:脚本名(对应Java类名)
  • c0-methodName:方法名
  • c0-param0:方法参数(可指定类型,如number或string)

3. DWR路由渗透测试流程

3.1 目标识别

  1. 资产测绘:使用FOFA、Shodan等搜索DWR应用
    • 搜索特征:/dwr/路径
  2. 前端代码分析:检查前端JS中是否包含dwr结尾的路由文件

3.2 接口枚举

  1. 访问/dwr/index.html(需debug模式开启)
  2. 检查前端JS中暴露的DWR接口路径

3.3 接口测试

  1. 无参数接口测试
    • 直接访问可能泄露敏感信息(如SMTP配置)
  2. 带参数接口测试
    • 尝试构造各种参数类型(number/string)
    • 测试SQL注入、命令注入等漏洞

3.4 常见漏洞类型

  1. 信息泄露
    • 数据库表结构
    • SQL查询语句
  2. SQL注入
    • 参数未正确过滤导致SQL语句拼接
  3. 未授权访问
    • 接口缺乏权限验证

4. 实战案例

4.1 数据库信息泄露案例

POST /dwr/xxx/dwrtest.findByUserId.dwr HTTP/1.1
Host: target.com
Content-Type: text/plain

callCount=1
windowName=
c0-scriptName=GlobalController
c0-methodName=getUnApprovedUnitItemResourceListById
c0-param0=string:88888
c0-param1=string:77777
c0-param2=string:666666
c0-param3=string:1999999
c0-id=0
batchId=1
instanceId=0
page=%2FDwrProject%2Fdwr%2Ftest%2Fdwrtest

4.2 SQL注入潜在风险案例

POST /dwr/xxx/dwrtest.findByUserId.dwr HTTP/1.1
Host: target.com
Content-Type: text/plain

callCount=1
windowName=
c0-scriptName=GlobalController
c0-methodName=getApprovedUnitItemResourceCountById
c0-param0=resource_module_id:1122222
c0-id=0
batchId=1
instanceId=0
page=%2FDwrProject%2Fdwr%2Ftest%2Fdwrtest

5. 防御建议

  1. 生产环境禁用debug模式
    • 设置<param-value>false</param-value>
  2. 严格权限控制
    • 对DWR接口实施身份验证
  3. 输入验证
    • 对所有参数进行严格过滤
  4. 最小化暴露
    • 仅暴露必要的类和方法
  5. 安全配置
    • 配置crossDomainSessionSecurity为true防止CSRF
    • 配置allowGetButMakeForgeryEasier为false禁用GET请求

6. 总结

DWR路由渗透测试的关键点:

  1. 识别DWR应用(通过路径特征或前端代码)
  2. 枚举可用接口(通过debug页面或前端分析)
  3. 测试接口参数(注意参数类型指定)
  4. 重点关注信息泄露和SQL注入漏洞
  5. 注意WAF绕过技术(如参数类型混淆)

通过系统化的测试方法,可以在DWR应用中发掘各类安全漏洞,特别是那些遗留的老旧系统往往存在较高的风险。

DWR路由渗透测试技术详解 1. DWR路由技术概述 DWR(Direct Web Remoting)是一个用于改善web页面与Java类交互的远程服务器端Ajax开源框架,主要帮助开发人员开发包含AJAX技术的网站。 1.1 核心配置文件 DWR框架主要依赖两个配置文件: web.xml - 配置DWR的servlet映射 dwr.xml - 配置远程调用类和方法 1.2 典型web.xml配置示例 1.3 Debug模式配置 当debug模式启用时,访问 /dwr/index.html 路径可能导致类测试地址泄漏。 2. DWR路由安全风险 2.1 主要安全风险 敏感信息泄露(类测试地址、接口信息) 文件上传漏洞 SQL注入漏洞 未授权访问 2.2 典型漏洞请求示例 关键参数说明: c0-scriptName :脚本名(对应Java类名) c0-methodName :方法名 c0-param0 :方法参数(可指定类型,如number或string) 3. DWR路由渗透测试流程 3.1 目标识别 资产测绘 :使用FOFA、Shodan等搜索DWR应用 搜索特征: /dwr/ 路径 前端代码分析 :检查前端JS中是否包含 dwr 结尾的路由文件 3.2 接口枚举 访问 /dwr/index.html (需debug模式开启) 检查前端JS中暴露的DWR接口路径 3.3 接口测试 无参数接口测试 : 直接访问可能泄露敏感信息(如SMTP配置) 带参数接口测试 : 尝试构造各种参数类型(number/string) 测试SQL注入、命令注入等漏洞 3.4 常见漏洞类型 信息泄露 : 数据库表结构 SQL查询语句 SQL注入 : 参数未正确过滤导致SQL语句拼接 未授权访问 : 接口缺乏权限验证 4. 实战案例 4.1 数据库信息泄露案例 4.2 SQL注入潜在风险案例 5. 防御建议 生产环境禁用debug模式 设置 <param-value>false</param-value> 严格权限控制 对DWR接口实施身份验证 输入验证 对所有参数进行严格过滤 最小化暴露 仅暴露必要的类和方法 安全配置 配置 crossDomainSessionSecurity 为true防止CSRF 配置 allowGetButMakeForgeryEasier 为false禁用GET请求 6. 总结 DWR路由渗透测试的关键点: 识别DWR应用(通过路径特征或前端代码) 枚举可用接口(通过debug页面或前端分析) 测试接口参数(注意参数类型指定) 重点关注信息泄露和SQL注入漏洞 注意WAF绕过技术(如参数类型混淆) 通过系统化的测试方法,可以在DWR应用中发掘各类安全漏洞,特别是那些遗留的老旧系统往往存在较高的风险。