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

百纵科技:美国独立服务器租用/高配置;E52670/32G内存/512G SSD/4IP/50M带宽,999元/月

百纵科技怎么样?百纵科技国人商家,ISP ICP 电信增值许可证的正规公司,近期上线美国C3机房洛杉矶独立服务器,大带宽/高配置多ip站群服务器。百纵科技拥有专业技术售后团队,机器支持自动化,自助安装系统 重启,开机交付时间 30分钟内交付!美国洛杉矶高防服务器配置特点: 硬件配置高 线路稳定 洛杉矶C3机房等级T4 平价销售,支持免费测试,美国独服适合做站,满意付款。点击进入:百纵科技官方网站地...

Buyvm:VPS/块存储补货1Gbps不限流量/$2起/月

BuyVM测评,BuyVM怎么样?BuyVM好不好?BuyVM,2010年成立的国外老牌稳定商家,Frantech Solutions旗下,主要提供基于KVM的VPS服务器,数据中心有拉斯维加斯、纽约、卢森堡,付费可选强大的DDOS防护(月付3美金),特色是1Gbps不限流量,稳定商家,而且卢森堡不限版权。1G或以上内存可以安装Windows 2012 64bit,无需任何费用,所有型号包括免费的...

麻花云-香港CN2云服务器,安徽BGP线路,安徽移动大带宽!全系6折!

一、麻花云官网点击直达麻花云官方网站二、活动方案优惠码:专属优惠码:F1B07B 享受85折优惠。点击访问活动链接最新活动 :五一狂欢 惠战到底 香港云主机 1.9折起香港特价体验云主机CN2 云服务器最新上线KVM架构,,默认40G SSD,+10G自带一个IPv4,免费10Gbps防御,CPU内存带宽价格购买1核1G1M19元首月链接2核2G 2M92元/3个月链接2核4G3M112元/3个月...

struts2 漏洞为你推荐
soapui下载SoapUi怎么安装策略组电脑组策略详解最开放的浏览器我国最出名的十种浏览器slideshare幻灯片的占位符的作用是?弹幕播放器看过的剧有一个弹幕出来的是什么播放器layoutsubviewsios有没有类似tablayout的控件系统论坛怎么进论坛清除电脑垃圾怎么删除电脑垃圾?medias请帮我详细解释一下 chronological order和in medias res图片存储怎么把存图片存储另一种方式?
视频空间租用 3322动态域名 Vultr 搬瓦工官网 wdcp godaddy域名优惠码 线路工具 最好看的qq空间 权嘉云 刀片式服务器 免费吧 tna官网 免费申请个人网站 美国网站服务器 主机返佣 工信部icp备案查询 后门 买空间网 umax 好看的空间 更多