关于struts2.3.4项目跨站执行脚本以及远程执行漏洞修复概要
2015-05-22 09:47
267 查看
因为近期负责的几个银行系统软件,需要交付客户,因此客户专门请了安全公司对系统进行了安全评测,结果发现了诸如跨站执行脚本,远程执行漏洞以及弱口令等问题。
下面记录下本次解决的过程以便后续
1、首先从最简单的开始处理,服务器的弱口令问题,首先根据安全工具提供的测试描述中发现应用服务器中存在一个匿名用户,默认是不需要密码的,经过分析发现服务器使用了FTP协议,
而使用ftp协议默认会产生一个匿名用户,因此解决方案是删除该匿名用户。
2、再次就是解决跨站执行脚本的漏洞,首先在网上各种资料查找,彻底的了解了什么是跨站脚本漏洞以及产生的原因,也终于明白了为什么我们的项目会存在问题,主要是在JSP中存在直接将输入内容回显到页面中,并且未对输入内容做任何检查。
知道问题原因当然就开始修改了,鉴于对安全这块了解不深,自己写的过滤器也非常简单,仅能过滤一些情况还是会存在风险,因此在网上找了一个专门安全大拿写的针对java过滤xss的处理类(xss-html-filter-xss-html-filter-1.5)。有了这个利器
就开始将它融入到我们系统中了,因为目前系统已经处理交付阶段,不便于一个类一个类进行调整,因此预想统一使用了过滤器过滤输入内容。当然这里有遇到一些问题
因为HttpServletRequest类中没有提供重新设置paramter值的方法(项目中多使用getParamter获取参数),所以想到了使用装饰模式,即封装getParamter方法(其实getAttribute等一些方法也封装了;ps:只针对String类型处理),在返回值时过滤输入值,这里继承了httpservletrequestwrapper类,
然后再注册一个filter,经过验证确实达到了过滤输入字符串的目的。
3、最后解决的是远程漏洞执行,这个主要是因为项目本身使用了struts2,并且版本是比较低的2.3.4,网上很多都有描述低版本的存在风险,因此从官网下载了最新的2.3.24,然后就是各种替换jar包。
替换完后启动项目又发现报错,说需要使用新的filter,原来老的FilterDispatch已经建议不使用了,struts2建议使用新的StrutsPrepareAndExecuteFilter。配置上最新的filter类后启动没有问题呢,但是
有报错“There is no Action mapped for namespace[/] and action name [login] associated with context path [/login]”,解决此问题只需要通过在struts.xml根节点中添加如下节点<constant name="struts.enable.DynamicMethodInvocation" value="true"/><constant name="struts.convention.action.mapallmatches" value="true" /> 阅读更多
下面记录下本次解决的过程以便后续
1、首先从最简单的开始处理,服务器的弱口令问题,首先根据安全工具提供的测试描述中发现应用服务器中存在一个匿名用户,默认是不需要密码的,经过分析发现服务器使用了FTP协议,
而使用ftp协议默认会产生一个匿名用户,因此解决方案是删除该匿名用户。
2、再次就是解决跨站执行脚本的漏洞,首先在网上各种资料查找,彻底的了解了什么是跨站脚本漏洞以及产生的原因,也终于明白了为什么我们的项目会存在问题,主要是在JSP中存在直接将输入内容回显到页面中,并且未对输入内容做任何检查。
知道问题原因当然就开始修改了,鉴于对安全这块了解不深,自己写的过滤器也非常简单,仅能过滤一些情况还是会存在风险,因此在网上找了一个专门安全大拿写的针对java过滤xss的处理类(xss-html-filter-xss-html-filter-1.5)。有了这个利器
就开始将它融入到我们系统中了,因为目前系统已经处理交付阶段,不便于一个类一个类进行调整,因此预想统一使用了过滤器过滤输入内容。当然这里有遇到一些问题
因为HttpServletRequest类中没有提供重新设置paramter值的方法(项目中多使用getParamter获取参数),所以想到了使用装饰模式,即封装getParamter方法(其实getAttribute等一些方法也封装了;ps:只针对String类型处理),在返回值时过滤输入值,这里继承了httpservletrequestwrapper类,
然后再注册一个filter,经过验证确实达到了过滤输入字符串的目的。
3、最后解决的是远程漏洞执行,这个主要是因为项目本身使用了struts2,并且版本是比较低的2.3.4,网上很多都有描述低版本的存在风险,因此从官网下载了最新的2.3.24,然后就是各种替换jar包。
替换完后启动项目又发现报错,说需要使用新的filter,原来老的FilterDispatch已经建议不使用了,struts2建议使用新的StrutsPrepareAndExecuteFilter。配置上最新的filter类后启动没有问题呢,但是
有报错“There is no Action mapped for namespace[/] and action name [login] associated with context path [/login]”,解决此问题只需要通过在struts.xml根节点中添加如下节点<constant name="struts.enable.DynamicMethodInvocation" value="true"/><constant name="struts.convention.action.mapallmatches" value="true" /> 阅读更多
相关文章推荐
- struts2.2以前版本远程执行任意代码漏洞修复方案
- ElasticSearch Groovy脚本远程代码执行漏洞检测脚本和修复方案
- Git中的远程代码执行漏洞已被修复 多个工具受影响
- Fastjson 爆出远程代码执行高危漏洞,更新版本已修复
- ElasticSearch Groovy脚本远程代码执行漏洞
- 关于MS12-020 3389 0day exp 远程桌面执行代码漏洞的文章
- 关于发布的CVE-2013-2251漏洞,strust远程代码执行漏洞
- Struts 2最新0day破坏性漏洞(远程任意代码执行)等的重现方法
- struts 跨站点脚本漏洞
- Apache Struts 跨站脚本漏洞
- asp 网站 XSS跨站脚本漏洞如何修复
- jsp页面中的跨站脚本漏洞修复
- Struts2再爆远程命令执行漏洞!Struts2-048 Poc Shell及防御修复方案抢先看!
- Memcached远程代码执行漏洞预警与检测修复
- Struts 2最新0day破坏性漏洞(远程任意代码执行)等的重现方法
- 跨站脚本执行漏洞利用技巧两则
- 【漏洞公告】CVE-2017-9791:Struts(S2-048)远程命令执行漏洞
- XSS跨站脚本漏洞修复建议- 如何防御CSS CrossSiteScript 跨站脚本攻击
- PHP-CGI远程任意代码执行漏洞(CVE-2012-1823)修复方案
- 跨站脚本执行漏洞详解与防护