struts2 漏洞Struts2框架安全缺陷谁能帮忙说说?

struts2 漏洞  时间:2022-02-24  阅读:()

Struts2框架安全缺陷谁能帮忙说说?

/share/detail/790553 给你截取一小段,全文到上面网址自己看吧。 Struts2安全缺陷 可以看到struts2在数据流向方面,有两个重点,一个是进入(in),一个是输出(out)。而我在做漏洞挖掘的思路,也是跟着这个数据的流 程,开始分析的,下面我们就开始让数据进入。 Action属性默认值可以被覆盖缺陷: 在日常的java项目中,我们经常会遇到保存一个新的对象(比如注册一个用户),然后给这个对象赋予一些用户提交上来的属性值,在这里,只需要定义 一个对象类: public class User { private Long id=0l; private String name; private String pass; private Integer type=1; 。。。下面的get和set方法代码略 } 定义后,在action中,添加一个属性 User reguser; 用户注册的页面代码如下: <form XXXXXXX> <input name="reguser.name"> 当用户提交这个form到action中后,struts2会负责自动映射reguser.name的值到reguser的相关属性(name) 中,所以在execute这个方法中,就可以使用reguser.getName()拿到用户提交的reguser.name的值。所以我们下面的代码就 很简单了: public String execute(){ add(user); add方法,更简单了,因为我们项目中集成了hibernate,这个框架自动映射user类中的各个属性,自动组成insert语句。我们只要在 add中调用session.save(user);就可以保存用户到数据库中。 前文提到那么多“简单”两个字,难道这些过程都是安全的而他给我们仅仅带来了方便么? struts2只负责映射所有对象,他提供了form验证,也只能验证form中属性值的内容,比如email格式等,并不能约束用户提交其他属性 上来,于是这就变成了十分危险的功能。 当User中有个属性type,代表User是否管理员时(1为普通用户,2为管理员),麻烦来了,攻击者在原来的注册表单中,新加入一个 input,叫做 <input name="reguser.type"> 然后输入值是2,把这个值一起交给action。在这个流程中,这个值,当然也会被自动带到数据库中,向下处理的逻辑中,这个用户,就已经变成管理 员了。 当你看到了一个struts2或者webwork的应用,可以尝试使用属性攻击,修改当前表单,里面有所有你猜测到的属性,一并提交上来,就可能会 影响整个逻辑,达到攻击目的。文中仅仅是一个例子,事实上,在数据传递的过程中,可以任意覆盖数据的默认值,本来就是一个危险的缺陷,而struts2和 webwork这两个框架仅仅看到了它带来的好处,忽略了这方面基于安全性的考虑,仅仅关注了用户提交数据的正确性。对比在没有struts2这个功能的 时候,我们却需要在action中一个一个的把需要的变量,从用户提交的request中解出来,一个一个处理,不可能出现这种安全问题。现在它包装了这 个过程,自以为很方面,却出了严重问题。 Action中的方法被暴力猜解缺陷 前文提到,有一种方法可以让用户访问action时,不访问默认的execute方法,而是直接访问其他action中的方法,条件是在 action中,写一个public的方法。开发人员如果需要做一个登陆后,展示所有用户列表的功能,而他的一个“解耦合”的开发习惯,将在这里导致安全 缺陷。 定义一个如下的action public class Userlogin extends ActionSupport{ private String uname=""; private String upwd; private List list; //getter and setter 方法略 public String login(){ if(uname!=null&&upwd!=null&&uname.equals("kxlzx")&&upwd.equals("pass")) {//if login ess return list(); } return false; } public String list(){ list.add("kxlzx");list.add("kxlzx1");list.add("kxlzx2");list.add("kxlzx3"); return "list"; } } Userlogin中,因为list这个功能(显示所有用户列表),其实是一个通用的功能,很容易被其他地方调用,所以开发人员把它单独写成了一个 方法。 当用户登陆的时候,打开 /app/userlogin!login.action 来到了用户的登陆页面,可以看到,只有用户输入正确的用户名和密码,才能最终调用list()方法,显示结果。 但是struts2把所有public的方法都暴露了出去,导致现在用户输入了 /app/userlogin!list.action 用户访问这个链接后,struts2调用list方法,然后返回结果给用户,所以没有登陆,就显示了所有用户信息, 直接绕过了login中的登陆验证。 在没有struts2的时候,我们要在servlet的doget或者dopost方法中,写if判断等代码,才能让用户调用其他servlet中 的方法,现在看来其实这也是一种保护措施。而现在struts2为了方便开发,把所有的public方法统一映射了出去,导致开发把一个经常使用的功能, 习惯写成一个public的方法,现在居然成了严重漏洞struts2的action属性设计缺陷 再回头看看我们在action中的属性定义,你会发现,现在他们都成了漏洞,因为struts2规定属性的get和set方法,都必须是 public的。 那么我们定义了 private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } 这段代码的时候,实际上,是写了两个public的方法。 那这两个表面上没有任何实质含义的方法,会有什么安全隐患呢? 这需要和前文联系起来,前文提到,我们在struts.xml文件中,定义如下: <action name="user"> <result name="ess">user/userlist.jsp</result> <result name="addUser">user/addUser.jsp</result> <result name="added">user/added.jsp</result> <result name="false">user/false.jsp</result> </action> 这段代码含义是,UserAction中,任何一个方法执行后,如果返回的是ess这个字符串, 就会把user/userlist.jsp返回给用户。 如果返回是addUser,就会把user/addUser.jsp返回给用户。 现在UserAction是管理用户的页面,在我们的系统中,有普通管理员和超级管理员,他们的区别是普通管理员可以查看用户,但是不能添加一个用户。 所以,我们在UserAction中,写了 public String addUser(){ if(true){ //事实上这里是个超级管理员的判断,我偷懒了。 return "false"; }

MOACK:韩国服务器/双E5-2450L/8GB内存/1T硬盘/10M不限流量,$59.00/月

Moack怎么样?Moack(蘑菇主机)是一家成立于2016年的商家,据说是国人和韩国合资开办的主机商家,目前主要销售独立服务器,机房位于韩国MOACK机房,网络接入了kt/lg/kinx三条线路,目前到中国大陆的速度非常好,国内Ping值平均在45MS左右,而且商家的套餐比较便宜,针对国人有很多活动。不过目前如果购买机器如需现场处理,由于COVID-19越来越严重,MOACK办公楼里的人也被感染...

ZJI:台湾CN2/香港高主频服务器7折每月595元起,其他全场8折

ZJI原名维翔主机,是原来Wordpress圈知名主机商家,成立于2011年,2018年9月更名为ZJI,提供香港、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册业务。ZJI今年全新上架了台湾CN2线路服务器,本月针对香港高主频服务器和台湾CN2服务器提供7折优惠码,其他机房及产品提供8折优惠码,优惠后台湾CN2线路E5服务器月付595元起。台湾一型CPU:Inte...

OneTechCloud香港/日本/美国CN2 GIA月付9折季付8折,可选原生IP或高防VPS

OneTechCloud(易科云)是一家主打CN2等高端线路的VPS主机商家,成立于2019年,提供的产品包括VPS主机和独立服务器租用等,数据中心可选美国洛杉矶、中国香港、日本等,有CN2 GIA线路、AS9929、高防、原生IP等。目前商家针对全场VPS主机提供月付9折,季付8折优惠码,优惠后香港VPS最低季付64元起(≈21.3元/月),美国洛杉矶CN2 GIA线路+20Gbps防御型VPS...

struts2 漏洞为你推荐
ipad怎么分屏ipad分屏怎么用,ipad分屏使用方法元数据管理数据治理包含哪些内容?数据治理有标准吗?wmiprvse为什么会有wmiprvse.exe和wmiprvse 这两个 算不算病毒?空白代码空白名字代码qq号查询现成的qq号和密码查询rdlcordless phone是什么意思调度系统操作系统中为什么需要调度?网页微信客户端手机微信客户端怎么打开网页ruby语言Ruby是一种什么样的语言,主要用来做什么,现在有一家公司让我从java转ruby,我很犹豫?booth算法利用补码booth计算【xy】补,其中x=0.1110,y=-0.1101
虚拟主机代理 域名大全 linuxvps 三级域名网站 arvixe 安云加速器 流媒体服务器 便宜建站 60g硬盘 英文简历模板word 服务器架设 主机合租 一元域名 警告本网站美国保护 cpanel空间 稳定免费空间 美国免费空间 linux使用教程 中国电信宽带测速器 空间购买 更多