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中搜索以下关键类:
-
Struts2识别:
<filter> <filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter </filter-class> </filter>StrutsPrepareAndExecuteFilter是Struts2核心过滤器- 负责拦截所有HTTP请求并进行处理
-
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.xmlstruts-default.xmlstruts-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>
关键元素说明:
-
package:
name:包名,用于逻辑分组namespace:URL命名空间,决定URL前缀extends:通常继承struts-default,包含Struts2默认配置
-
action:
name:动作名称,对应URL路径class:处理请求的Action类全限定名
-
result:
- 定义Action方法返回结果对应的视图
name:匹配Action方法的返回值- 内容:指定跳转的视图路径
3.3 路由匹配规则
Struts2的URL匹配遵循以下规则:
http://host:port/contextPath/namespace/actionName.action
contextPath:Web应用的上下文路径namespace:在struts.xml中定义的namespaceactionName:在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应用的路由结构和潜在安全问题,为深入审计奠定基础。