struts框架下的TPN系统代码审计分析
字数 1488 2025-08-29 22:41:01
Struts框架下的TPN系统代码审计分析
1. 初始审计准备
1.1 文件结构分析
- 首先检查项目结构,重点关注以下文件:
web.xml:Web应用部署描述文件pom.xml:Maven项目配置文件- 各种XML配置文件
- 检查关键目录:
/webapps/ROOT/WEB-INF/lib/:存放依赖的JAR包/WEB-INF/classes/:存放编译后的类文件
1.2 框架识别
- 在
/webapps/ROOT/WEB-INF/lib/目录下发现struts2-core-2.1.8.1.jar - 确认使用Struts2框架,版本为2.1.8.1
2. 漏洞验证
2.1 版本漏洞检查
- 通过Maven官网验证该版本漏洞情况:
- 访问:https://mvnrepository.com/artifact/org.apache.struts/struts2-core
- 确认2.1.8.1版本存在大量已知漏洞
2.2 安全配置检查
检查Struts2的安全配置是否到位:
-
动态方法调用检查
- 搜索
DynamicMethodInvocation关键字 - 发现三个XML文件包含该配置
- 唯一设置为
false的是演示文件,实际未禁用动态方法调用
- 搜索
-
OGNL表达式限制检查
- 搜索
<global-allowed-methods>配置 - 未发现相关限制配置
- 满足Struts漏洞利用前提条件
- 搜索
3. 路由映射分析
3.1 struts.xml配置分析
- 定义命名空间:
/lan - 关键action配置示例:
<action name="admin_*" class="adminAction" method="{1}">admin_*:通配符匹配以admin_开头的请求class="adminAction":后端处理类method="{1}":动态调用方法,{1}匹配通配符部分
3.2 可用接口分析
-
adminAction类方法
- 可用的测试方法:
admin_loginadmin_getLisence- 其他方法均可尝试
- 可用的测试方法:
-
hostPolicyAction类方法
- 通过
hostPolicy_*接口 - 可测试方法:
getArpSwit
- 通过
4. 漏洞利用
4.1 RCE(远程代码执行)漏洞
- 利用条件:
- Struts2版本存在漏洞
- 未禁用动态方法调用
- 未限制OGNL表达式
- 利用方法:
- 通过上述分析的接口进行命令执行测试
4.2 源码泄露
- 发现压缩文件:
ROOT.bz2login.bz2(不在网站根目录,无法直接访问)
- 直接FUZZ
ROOT.bz2文件可下载 - 解压后获取网站完整源码
4.3 信息泄露
-
FTP密码泄露
- 发现FTP凭据但端口为22
- 资产测绘未发现可用信息
-
用户信息泄露
- 通过
web.xml发现/userDownload接口 - 分析
UserBatchDownloadServlet类:- 实现文件下载功能
- 直接访问可下载
userlist文件 - 包含大量用户名密码等敏感信息
- 通过
5. 防御建议
-
框架层面
- 升级Struts2到最新安全版本
- 禁用动态方法调用:
<constant name="struts.enable.DynamicMethodInvocation" value="false"/> - 限制OGNL表达式:
<global-allowed-methods>execute,input,back,cancel,browse</global-allowed-methods>
-
应用层面
- 删除不必要的测试文件和备份文件
- 对敏感信息进行加密存储
- 实现严格的访问控制
-
安全配置
- 禁用目录列表
- 限制敏感文件的访问权限
- 定期进行安全审计和渗透测试
6. 审计总结
本次审计发现的主要问题:
- 使用存在已知漏洞的Struts2版本
- 缺乏基本的安全配置(动态方法调用和OGNL限制)
- 存在源码泄露风险
- 敏感信息未加密存储
- 存在用户信息泄露漏洞
修复优先级建议:
- 立即升级Struts2框架
- 删除或保护备份文件
- 加密存储敏感信息
- 实施严格的安全配置