很多朋友对于Struts2漏洞分析系列初识Struts2和不太懂,今天就由小编来为大家分享,希望可以帮助到大家,下面一起来看看吧!
0x01 搭建
构建WEB项目,通过Maven依赖引入Struts2依赖dependency groupIdorg.apache.struts/groupId artifactIdstruts2-core/artifactId version2.0.5/version /dependency /dependencies 添加Tomcat启动环境,配置部署的WAR包,以及Struts依赖引入WAR安装Struts2 IDEA插件(方便后续配置高亮等,直接在Plugins中搜索struts2即可),在resources目录下新建struts.xml(如果安装了插件,新建的时候可以直接选择XML)配置文件-Struts Config来创建)?xml version=’1.0’encoding=’UTF-8’?DOCTYPE struts PUBLIC ‘-//Apache Software Foundation//DTD Struts Configuration 2.0//EN’ ‘http://struts.apache.org /dtds/struts-2.0.dtd’ struts /strutsAdd struts2 filterfilter filter-namestruts2/filter-name filter- classorg.apache.struts2.dispatcher.FilterDispatcher/filter-class /filter 过滤器映射过滤器- 在web.xml 中namestruts2/filter-name url-pattern/*/url-pattern /filter-mapping 欢迎文件列表欢迎文件索引.jsp/welcome-file /welcome-file-list 完成以上步骤后,一个基本的struts2环境就搭建完成了。您只需根据需要进行配置即可。完整的目录结构如下:
0x02 Struts2基本使用方式
2.0 action == struts2?
如果你在学习Struts2相关漏洞之前,尝试过当脚本小子,使用工具攻击过带有ST2-xxx漏洞的网站,你会发现大多数情况下我们都是攻击.action后缀。文档。
那么带有.action后缀的文件就一定会使用Struts2吗?答案是,至少目前是的。没有其他开源框架使用.action 作为其标志之一,除非开发人员自定义Filter。
2.1 struts.xml
struts.xml是Struts2中的重要配置,所有与Struts2相关的配置都在这里进行。
默认模板如下:
?xml version=’1.0’encoding=’UTF-8′?DOCTYPE struts PUBLIC ‘-//Apache Software Foundation//DTD Struts Configuration 2.0//EN’ ‘http://struts.apache.org/dtds/struts-2.0.dtd ‘struts/struts2.1.0包括
在一个大型系统中,不可避免地会有很多配置,并且每个配置可能只与一组模块相关联。这个时候,把它们全部写在一个xml中可能不会太臃肿。这时候就必须考虑通过包含语法来解耦。Struts2也支持这种写法,通过include引入其他xml文件。
例如,我有一个user.xml:
?xml version=’1.0’encoding=’UTF-8′?DOCTYPE struts PUBLIC ‘-//Apache Software Foundation//DTD Struts Configuration 2.0//EN’ ‘http://struts.apache.org/dtds/struts-2.0.dtd ‘struts package name=’wwfy’ extends=’struts-default’ action name=’login’ class=’wwfy.user.LoginAction’ !–省略其他Action配置–/action action name=’logout’ class=’ wwfy.user.LogoutAction’!–省略Action的其他配置–/action/package/struts.随后,我只需要通过include标签引入到struts.xml中进行配置即可:
?xml version=’1.0’encoding=’UTF-8′?DOCTYPE struts PUBLIC ‘-//Apache Software Foundation//DTD Struts Configuration 2.0//EN’ ‘http://struts.apache.org/dtds/struts-2.0.dtd ‘struts include file=’user.xml’//struts2.1.1常量
Constant标签用于设置一些内置常量的值,比如我们可能最了解的devMode。
?xml version=’1.0’encoding=’UTF-8′?DOCTYPE struts PUBLIC ‘-//Apache Software Foundation//DTD Struts Configuration 2.0//EN’ ‘http://struts.apache.org/dtds/struts-2.0.dtd ‘struts !–设置开发模式–constant name=’struts.devMode’ value=’true’/!–设置编码格式为GB2312–constant name=’struts.i18n.encoding’ value=’GB2312 ‘/!–省略其他配置信息–/struts2.1.2包
package标签管理某个模块下的所有动作,可以类比Java中的package。
财产
有必要吗
描述
姓名
是的
包名,作为其他包应用这个包的标记
延伸
不
设置此包继承其他包
名称空间
不
设置包命名空间
抽象的
不
设置为抽象包
extends:当前包的继承包。默认情况下需要继承struts-default包。
namespace:命名空间,默认为”,也可以理解为/。这时候你的默认路由就在根目录下。如果设置为/user,则当前包下的所有action都会在user目录下匹配。到达。
2.1.3 动作
action标签用来设置一个action类,这里会根据名字自动定义路由,就是我们经常看到的xxx.action。
物业名称
有必要吗
功能说明
姓名
是的
请求的操作名称
班级
不
Action处理类对应具体路径
方法
不
在Action中指定方法名
转换器
不
指定Action使用的类型转换器
name:当前操作的名称。后续的路由也是根据名字来设置的。比如这里的name是login,那么后续的路由就是login.action。
class:当前动作对应的类。该类相当于MVC中的M和C,即Model层和Controller层,因为具体的业务处理代码都体现在该类中,并且该类在后续使用中也作为Bean类使用在调度中。
method:将被调用的Action类的方法名称。如果不指定,则默认调用Action的execute方法。
2.1.4 结果
结果标签用于控制返回的视图。
物业名称
有必要吗
功能说明
姓名
不
相应的操作返回逻辑视图的名称。默认成功。
类型
不
返回结果类型,默认为dispatcher
name:设置返回值。当action类执行方法并返回对应的值时,这里会根据name属性进行匹配。如果匹配,则返回对应的视图。
result name=’success’hello.jsp/resultresult name=’error’index.jsp/result2.1.5 拦截器
Struts2中有一个拦截器的概念,它与WEB容器中的Filter类似,但又有些不同。拦截器用于在每个请求到达真正的Action之前进行一系列的预处理,并在请求结束后进行一系列的预处理。破坏行动。
Struts2内置了一系列拦截器,会根据你的Action设置相应的拦截处理操作,但是开发者仍然可以通过interceptors标签来自定义拦截器。
拦截器拦截器名称=’拦截器名称’class=’拦截器类’/拦截器堆栈名称=’拦截器堆栈名称’拦截器-ref名称=’拦截器名称’/interceptor-stack/interceptors2.1.6示例
?xml 版本=’1.0′ 编码=’UTF-8′ ?DOCTYPE struts PUBLIC ‘-//Apache Software Foundation//DTD Struts Configuration 2.1//EN’ ‘http://struts.apache.org/dtds/struts-2.1.dtd ‘ struts 包名称=’default’ extends=’struts-default’ action name=’product’ class=’com.javatpoint.Product’ result name=’success’welcome.jsp/result /action /package /struts 上面是一个最基本的例子,设置了一个名为product的action。如果以后想访问的话,其实是通过product.action来访问的。
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/126607.html
用户评论
冷青裳
终于来学习 struts 了!这篇文章写得真好,把新手也能看懂的框架介绍清楚了。期待后续文章深入讲解 struts2 的漏洞!
有12位网友表示赞同!
笑傲苍穹
之前没怎么接触Struts2,没想到会存在这么多风险啊! 这篇文章的分析很透彻,以后一定要注意使用 Struts2 时的安全问题!
有17位网友表示赞同!
羁绊你
"初识 Struts2" 还真合适,我刚开始学也没想到它会被黑,感觉有点吓人。后面的文章一定好好学习!希望你能讲解一些具体的防护措施,这样可以让我们更好地保护系统安全。
有10位网友表示赞同!
凉话刺骨
这篇文章只是入门级的内容吧? 想深入理解这些漏洞和防御机制,还需要更详细的讲解啊!期待后续文章能提供更具体的操作步骤和案例分析。
有17位网友表示赞同!
墨染天下
(个人觉得) 文章过于简略了,没有提到哪些常见的 Struts2 组件及其漏洞点。 建议结合实例进行讲解,更容易理解。
有12位网友表示赞同!
青墨断笺み
Struts2 真的有那么危险吗?我一直用它开发项目也没遇到什么问题啊!感觉这篇文章有点小耸人听闻。 我得仔细研究一下它的安全机制,看看是不是真的存在风险。
有20位网友表示赞同!
万象皆为过客
学习新技术很累人啊,这篇文章让我对 Struts2 有了初步的了解,不过漏洞分析和防护措施还需要深入学习才能掌握。希望作者能持续更新优质的内容!
有19位网友表示赞同!
矜暮
这篇介绍不错,入门很容易!但是我觉得讲解那些复杂的漏洞代码可能会让人感觉比较吃力, 比如可以增加一些图示或者动画来帮助理解吗?
有19位网友表示赞同!
封心锁爱
对小白用户来说,这篇文章写的太专业了。希望作者能像平时一样用通俗易懂的语言解释这些技术细节,这样更容易被普通人理解!
有20位网友表示赞同!
琴断朱弦
文章结构清晰,内容介绍全面了 Struts2 的基本概念和潜在安全风险。期待后续的文章深入探讨Struts 漏洞的特定案例分析和防御措施。
有16位网友表示赞同!
∞◆暯小萱◆
我很想了解哪些常见的 Struts2 应用场景以及相应的安全风险。希望作者能提供一些实际案例,这样可以更直观的感受到的漏洞带来的危害!
有12位网友表示赞同!
伪心
感谢作者分享这一系列文章!对于新手来说,入门学习 struts 真是个不错的途径,期待后续的深入讲解!
有8位网友表示赞同!
滴在键盘上的泪
Struts2 的漏洞非常常见和危险, 这篇文章提醒了我要加强安全性检查。 希望介绍一些开源工具或者框架,能够更加高效地评估 Struts2 应用的安全风险!
有9位网友表示赞同!
夏至离别
我一直觉得 Struts2 很好用,速度很快,但是现在看来安全问题确实值得重视! 希望后续文章能详细讲解如何检测和修复 Struts2 中的漏洞。
有11位网友表示赞同!
♂你那刺眼的温柔
这篇文章让我对 Struts2 的安全性有了深刻的体会!希望能够学习到一些具体的防护技巧,保护我自己开发的项目不受攻击。
有8位网友表示赞同!
伤离别
非常赞赏作者将 Struts2 漏洞分析做得如此清晰易懂! 期待后续文章更深入地探讨不同类型漏洞的修复方案和最佳实践。
有18位网友表示赞同!
又落空
这篇文章很有教育意义!很多开发者可能没有意识到 Struts2 的安全隐患, 希望更多人能够了解这些问题,提高开发安全的意识 。
有13位网友表示赞同!