java代码审计 | struts2框架路由详解
字数 1624 2025-08-20 18:17:31

Struts2框架路由审计详解

1. 引言

在进行Java代码审计时,了解如何分析框架路由是至关重要的基础技能。本文详细讲解在不借助工具的情况下,如何对Struts2框架进行路由审计,帮助安全研究人员理解原理而非仅依赖工具。

2. Struts2框架识别

2.1 项目结构分析

拿到一套Java Web源码后,首先观察项目结构:

  • 查看webapps目录下的子系统划分(如admin、CardSolution、emap等)
  • 重点关注WEB-INF目录,这是Java Web应用的核心配置目录

2.2 WEB-INF目录结构

WEB-INF是Java Web应用的保密目录,包含以下关键内容:

路径/文件 作用
WEB-INF/web.xml Web应用的部署描述符,包含Servlet、过滤器等配置
WEB-INF/classes/ 存放Java类文件和资源文件
WEB-INF/lib/ 存放应用依赖的JAR包

2.3 框架识别方法

web.xml中搜索以下关键类:

  1. Struts2识别

    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>
            org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
        </filter-class>
    </filter>
    
    • StrutsPrepareAndExecuteFilter是Struts2核心过滤器
    • 负责拦截所有HTTP请求并进行处理
  2. Struts1识别(较少见):

    <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
    
    • ActionServlet是Struts1.x框架的核心Servlet

3. Struts2路由分析

3.1 配置文件定位

确认使用Struts2框架后,路由定义通常在以下位置:

  • WEB-INF/classes/目录下的Struts2配置文件
  • 常见配置文件名称:
    • struts.xml
    • struts-default.xml
    • struts-plugin.xml

3.2 Struts2路由配置解析

Struts2路由配置示例:

<package name="default" namespace="/" extends="struts-default">
    <action name="login" class="com.example.LoginAction">
        <result name="success">/welcome.jsp</result>
        <result name="error">/error.jsp</result>
    </action>
</package>

关键元素说明:

  1. package

    • name:包名,用于逻辑分组
    • namespace:URL命名空间,决定URL前缀
    • extends:通常继承struts-default,包含Struts2默认配置
  2. action

    • name:动作名称,对应URL路径
    • class:处理请求的Action类全限定名
  3. result

    • 定义Action方法返回结果对应的视图
    • name:匹配Action方法的返回值
    • 内容:指定跳转的视图路径

3.3 路由匹配规则

Struts2的URL匹配遵循以下规则:

http://host:port/contextPath/namespace/actionName.action
  • contextPath:Web应用的上下文路径
  • namespace:在struts.xml中定义的namespace
  • actionName:在struts.xml中定义的action name
  • .action:默认扩展名(可配置)

4. 审计要点

4.1 关键审计位置

  1. web.xml

    • 确认框架类型
    • 检查是否有自定义过滤器或Servlet
  2. struts.xml

    • 分析所有action定义
    • 检查namespace配置
    • 查看结果映射
  3. Action类

    • 检查业务逻辑处理
    • 验证输入参数处理
    • 分析权限控制

4.2 常见安全问题

  1. 未授权访问

    • 检查action是否缺少权限控制
    • 验证namespace配置是否合理
  2. 命令注入

    • 检查Action中是否有直接执行系统命令的代码
  3. 表达式注入

    • Struts2历史漏洞(OGNL表达式注入)
  4. 不安全的直接对象引用

    • 检查参数是否直接用于数据库查询等操作

5. 审计流程总结

  1. 分析项目结构,定位WEB-INF目录
  2. 检查web.xml,确认框架类型
  3. 定位Struts2配置文件(struts.xml等)
  4. 分析package和action定义
  5. 跟踪Action类实现
  6. 验证路由访问控制
  7. 检查输入处理安全性

通过以上步骤,审计人员可以全面了解Struts2应用的路由结构和潜在安全问题,为深入审计奠定基础。

Struts2框架路由审计详解 1. 引言 在进行Java代码审计时,了解如何分析框架路由是至关重要的基础技能。本文详细讲解在不借助工具的情况下,如何对Struts2框架进行路由审计,帮助安全研究人员理解原理而非仅依赖工具。 2. Struts2框架识别 2.1 项目结构分析 拿到一套Java Web源码后,首先观察项目结构: 查看 webapps 目录下的子系统划分(如admin、CardSolution、emap等) 重点关注 WEB-INF 目录,这是Java Web应用的核心配置目录 2.2 WEB-INF目录结构 WEB-INF 是Java Web应用的保密目录,包含以下关键内容: | 路径/文件 | 作用 | |-----------|------| | WEB-INF/web.xml | Web应用的部署描述符,包含Servlet、过滤器等配置 | | WEB-INF/classes/ | 存放Java类文件和资源文件 | | WEB-INF/lib/ | 存放应用依赖的JAR包 | 2.3 框架识别方法 在 web.xml 中搜索以下关键类: Struts2识别 : StrutsPrepareAndExecuteFilter 是Struts2核心过滤器 负责拦截所有HTTP请求并进行处理 Struts1识别 (较少见): ActionServlet 是Struts1.x框架的核心Servlet 3. Struts2路由分析 3.1 配置文件定位 确认使用Struts2框架后,路由定义通常在以下位置: WEB-INF/classes/ 目录下的Struts2配置文件 常见配置文件名称: struts.xml struts-default.xml struts-plugin.xml 3.2 Struts2路由配置解析 Struts2路由配置示例: 关键元素说明: package : name :包名,用于逻辑分组 namespace :URL命名空间,决定URL前缀 extends :通常继承 struts-default ,包含Struts2默认配置 action : name :动作名称,对应URL路径 class :处理请求的Action类全限定名 result : 定义Action方法返回结果对应的视图 name :匹配Action方法的返回值 内容:指定跳转的视图路径 3.3 路由匹配规则 Struts2的URL匹配遵循以下规则: contextPath :Web应用的上下文路径 namespace :在struts.xml中定义的namespace actionName :在struts.xml中定义的action name .action :默认扩展名(可配置) 4. 审计要点 4.1 关键审计位置 web.xml : 确认框架类型 检查是否有自定义过滤器或Servlet struts.xml : 分析所有action定义 检查namespace配置 查看结果映射 Action类 : 检查业务逻辑处理 验证输入参数处理 分析权限控制 4.2 常见安全问题 未授权访问 : 检查action是否缺少权限控制 验证namespace配置是否合理 命令注入 : 检查Action中是否有直接执行系统命令的代码 表达式注入 : Struts2历史漏洞(OGNL表达式注入) 不安全的直接对象引用 : 检查参数是否直接用于数据库查询等操作 5. 审计流程总结 分析项目结构,定位WEB-INF目录 检查web.xml,确认框架类型 定位Struts2配置文件(struts.xml等) 分析package和action定义 跟踪Action类实现 验证路由访问控制 检查输入处理安全性 通过以上步骤,审计人员可以全面了解Struts2应用的路由结构和潜在安全问题,为深入审计奠定基础。