免费发布信息
当前位置:APP交易 > 热点资讯 > app交易 >  Java代码审计之Struts2-004(四)

Java代码审计之Struts2-004(四)

发表时间:2021-07-09 17:11:05  来源:红帽社区  浏览:次   【】【】【
红帽社区是一个垂直网络安全社区,融合“红帽先锋”正能量精神,每日分享最新安全资讯,提供安全问答、靶场、众测、漏洞库等功能,是网络安全爱好者学习、交流的优质社区。

本系列文章将详细分析 Java 流行框架 Struts2 的历史漏洞,今后关于 Struts2 新的漏洞分析,也将更新于 Struts2-Vuln 项目上。该系列仅是笔者初学 Java代码审计 的一些记录,也希望能够帮助到想学习 Java代码审计 的朋友 。如有任何问题,欢迎 issue 。分析文章均来自 个人博客 ,转载请注明出处。

漏洞概要

Struts2-004是一个目录遍历漏洞。

影响版本: Struts 2.0.0 - 2.0.11.2、Struts 2.1.0 - 2.1.2 。更多详情可参考官方通告:https://cwiki.apache.org/confluence/display/WW/S2-004

漏洞环境

Apache Tomcat/6.0.10+struts-2.0.8

下载地址:http://archive.apache.org/dist/struts/binaries/struts-2.0.8-all.zip

https://archive.apache.org/dist/tomcat/tomcat-6/v6.0.10/bin/apache-tomcat-6.0.10.zip

漏洞分析

本次漏洞,主要问题出现在 FilterDispatcher 类对静态资源文件的处理。当请求资源文件路径以 /struts 开头时,就会调用 findStaticResource 方法寻找资源。

跟进 findStaticResource 方法,我们发现如果文件后缀不为 .class ,则调用 findInputStream 来读取文件内容,而且文件路径会进行一次 URLdecode ,但是这里没有对文件名进行任何过滤,这也导致了路径穿越问题。

例如,访问:http://localhost:8081/struts2_004/struts/..%252f

漏洞修复

下图右边为官方修复后的代码(左图struts-core-2.0.8,右图为struts-core-2.0.12),可以明显看到修复代码使用 URL.getFile() 获取文件的真实路径,然后在用 endWith 来判断后缀,二者结合可以有效解决路径穿越问题。

参考

https://cwiki.apache.org/confluence/display/WW/S2-004


责任编辑:
声明:本平台发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。

德品

1377 678 6470