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"; }

PIGYUN:美国联通CUVIPCUVIP限时cuvip、AS9929、GIA/韩国CN2机房限时六折

pigyun怎么样?PIGYunData成立于2019年,2021是PIGYun为用户提供稳定服务的第三年,目前商家提供香港CN2线路、韩国cn2线路、美西CUVIP-9929、GIA等线路优质VPS,基于KVM虚拟架构,商家采用魔方云平台,所有的配置都可以弹性选择,目前商家推出了七月优惠,韩国和美国所有线路都有相应的促销,六折至八折,性价比不错。点击进入:PIGYun官方网站地址PIGYUN优惠...

RAKsmart美国洛杉矶独立服务器 E3-1230 16GB内存 限时促销月$76

RAKsmart 商家我们应该较多的熟悉的,主营独立服务器和站群服务器业务。从去年开始有陆续的新增多个机房,包含韩国、日本、中国香港等。虽然他们家也有VPS主机,但是好像不是特别的重视,价格上特价的时候也是比较便宜的1.99美元月付(年中活动有促销)。不过他们的重点还是独立服务器,毕竟在这个产业中利润率较大。正如上面的Megalayer商家的美国服务器活动,这个同学有需要独立服务器,这里我一并整理...

ZJI韩国BGP+CN2服务器,440元起

ZJI又上新了!商家是原Wordpress圈知名主机商:维翔主机,成立于2011年,2018年9月启用新域名ZJI,提供中国香港、台湾、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册等业务。本次商家新上韩国BGP+CN2线路服务器,国内三网访问速度优秀,适用8折优惠码,优惠后韩国服务器最低每月440元起。韩国一型CPU:Intel 2×E5-2620 十二核二十四线...

struts2 漏洞为你推荐
showwindowvb ShowWindow 的使用方法 隐藏/显示 指定窗口 (完整代码)谢谢策略组组策略是什么,命令是什么???郭凡生慧聪网公司怎么样网关和路由器的区别网关和路由器的具体区别在哪里呀?arc是什么意思arctanx等于什么?radius认证电信或网通的RADIUS认证都记录些什么?谁能说说ISP的宽带帐号检查流程faq是什么意思fans是什么意思?系统论坛怎么进论坛cf加速器玩CF需要用加速器吗?medias请帮我详细解释一下 chronological order和in medias res
org域名 fc2最新域名 高防服务器租用 万网域名代理 softbank官网 512m evssl证书 南昌服务器托管 java空间 湖南服务器托管 好看qq空间 腾讯实名认证中心 流量计费 支付宝扫码领红包 银盘服务是什么 空间登陆首页 浙江服务器 杭州电信宽带优惠 存储服务器 netvigator 更多