adguard广告拦截器_struts2拦截器_Adaway广告拦截器

跟进方法

struts2拦截器_adguard广告拦截器_Adaway广告拦截器

.().(, , m, )

这个表达式返回true则代表安全检查通过,返回false则代表安全检查没有通过。

这个地方的表达式逻辑写错了,取反则意味着当安全检查没有通过的时候返回值为true。

为true则意味着 被赋值为 false,继续跟进则发现返回值为false。

当返回false的时候,我们表达式为truestruts2拦截器,绕过了沙箱。

当这个沙箱之后,我们只需要使ess为true 允许执行静态方法。为空集合,允许调用相关的包。为空集合,允许调用任意类。即可完成任意代码执行

S2-032

S2-032漏洞是一个历史遗留问题,官方给出的是当启用动态方法调用时候,利用:参数进行远程执行代码。

要求

受影响的版本 2.3.20 - 2.3.28(2.3.20.3和2.3.24.3除外)。

这是因为S2-016的时候,保留了两个参数,分别是:和 :又没有做好过滤导致的。

我们在S2-032漏洞可以看到POC发生了变化,在绕沙箱的语句由一大串变成

#=@ognl.@S,这一句在之前的版本也适用,直接通过S覆盖掉s类,因为s类有一堆的安全限制属性,想要绕过的话,需要利用的上下文,那么一定会有疑问,为什么#=@ognl.@S可以绕过安全沙箱呢?

答案非常简单,我们可以看到在类 S其实是的一个实例,随后我们可以注意到一个比较关键的点。

adguard广告拦截器_Adaway广告拦截器_struts2拦截器

上下文是取值于S实例,而又是s的父类,所以我们在的方法上下断点

Adaway广告拦截器_struts2拦截器_adguard广告拦截器

可以看到返回的值是true,在分支判断语句的地方可以看出有一个取反的操作,所以不会执行分支下面的判断逻辑,也就不会取安全属性的值从而绕过了安全沙箱,类的作用是用于设置和获取非字段的访问程序,以允许访问, , 的类成员。

官方修复禁用动态调用方法属性,以及将:参数做了过滤

struts2拦截器_adguard广告拦截器_Adaway广告拦截器

S2-033

S2-033漏洞的问题是REST插件启用了动态方法调用导致的远程代码执行漏洞。并且在的时候没有做过滤。

struts2拦截器_Adaway广告拦截器_adguard广告拦截器

“的值在找不到,如果有小伙伴找到了可以告诉我,感谢”

同时也与一个关键的属性有关,这个属性为true则允许执行表达式,为false则不允许执行ognl表达式,那么官方针对这个漏洞进行的修复方式则是将属性设置为false,禁止执行ognl表达式,我们可以根据

Adaway广告拦截器_adguard广告拦截器_struts2拦截器

这个方法来判断是否能够执行ognl表达式,在 2.3.28版本中表达式为true。

Adaway广告拦截器_adguard广告拦截器_struts2拦截器

可以看到这个分支判断做了一个取反的操作,没有抛出这个错误,所以ognl表达式顺利执行。Btw,在进一步跟进的时候,发现程序在判断语句是否是的时候,一直返回null,而在修复后的版本,则准确的判断出了,这个条件语句是进行了两个表达式判断,需要两个表达式均为true才会报错。

struts2拦截器_adguard广告拦截器_Adaway广告拦截器

最终在方法处通过执行表达式。

官方的修复方法则是简单粗暴,将表达式设置为false,来看看修复后的版本的处理方式。那么在之后的版本修复则是用方法将进行了一个过滤。

adguard广告拦截器_struts2拦截器_Adaway广告拦截器

这个点也是没搞懂的,反正就抛出错误了。

S2-037

S2-037这个漏洞也是REST插件造成的问题,不过不需要开启动态方法执行,而且绕过了S2-033的安全机制,绕过的方法是使用三元运算符构造。出问题的类依然是。

关于这个漏洞会有一个问题,为什么不需要开启动态方法执行也可以执行远程代码。

struts2拦截器_Adaway广告拦截器_adguard广告拦截器

可以看到这里执行完方法后在下面有一个

.,同时没有判断if (lls)

官方的修复方式是使用方法过滤了

S2-045

S2-045漏洞产生的原因是 解析器执行文件上传时造成的远程代码执行,是的默认解析器。

在包装请求方法中可以看到只有-type不为null且值为/form-data的时候才会是一个上传请求。

Adaway广告拦截器_adguard广告拦截器_struts2拦截器

漏洞产生的类还是est类,当-type报错的时候会执行ognl表达式,看看为什么会这样。

adguard广告拦截器_Adaway广告拦截器_struts2拦截器

然后会看到,在数据处理出错的时候,会走处理错误流程,catch流程,我们可以看到在catch流程调用了方法。看看方法的实现。

Adaway广告拦截器_struts2拦截器_adguard广告拦截器

方法执行ognl表达式,跟入

struts2拦截器_adguard广告拦截器_Adaway广告拦截器

然后我们进入方法看看它的内部实现。

Adaway广告拦截器_adguard广告拦截器_struts2拦截器

报错信息被转换成对象然后调用方法的方法去执行ognl表达式

官方修复的方式是

adguard广告拦截器_struts2拦截器_Adaway广告拦截器

去掉了e.方法。

S2-048

S2-048漏洞问题出现在---2.3.32.jar 插件,这个插件的作用是可以让能够兼容的代码

方法主要是实现的国际化的一个方法,比如说邮件,可能发给多个客户,每个客户的语种不一样,不可能针对每一个语种做一个模版,所以就有了方法。

入口点在的方法,的方法是调用类的方法实现的。

struts2拦截器_Adaway广告拦截器_adguard广告拦截器

这里直接取了原始值,导致了漏洞的产生

执行完后,到达第一个sink点,取值用户可控

adguard广告拦截器_Adaway广告拦截器_struts2拦截器

代码最终进入的方法执行ognl表达式

struts2拦截器_Adaway广告拦截器_adguard广告拦截器

官方的修复是建议使用资源建传值。

S2-052

S2-052漏洞是 REST插件的组件存在反序列化漏洞,使用组件对XML格式的数据包进行反序列化操作时,未对数据内容进行有效验证,存在安全隐患,可被远程攻击。

查看-rest--2.3.33.jar的-.xml发现拦截器or。

很多不同类型的数据都交给不同的进行处理,我们注意到这里xml的数据是交给处理的。

的作用是处理与特定内容类型的对象之间的内容传输。

根据这个漏洞,我们主要查看一下类,这类主要是是将xml转换成对象,对象转换成xml的,也就是比较专业的词汇叫““和”“”。

我们分别在or拦截器和处下断点。

Adaway广告拦截器_struts2拦截器_adguard广告拦截器

它会先获取-type,这也是我们的poc中要修改-type为/xml才可以执行代码的原因,因为只有设置为/xml,你的数据流才会到处执行。

adguard广告拦截器_Adaway广告拦截器_struts2拦截器

这里其实是有一个分发的操作,根据你的-type类型分发给不同的进行处理,你设置/xml就是分给处理。

这里是调用 进行一个对象转换。

关于““和”“” 参考

官方的修复引入了一些接口,接口为每个操作类定义类限制。

以及升级,我们会看到增加了一些限制类

针对xml序列化做了限制

struts2拦截器_Adaway广告拦截器_adguard广告拦截器

Adaway广告拦截器_adguard广告拦截器_struts2拦截器

S2-057

S2-057这个漏洞的产生原因是space为true导致的,

没什么有意思的地方,唯一有意思的是POC的构造,在利用045的POC测试的时候,会发现这个问题。

你是取不到值栈的,这是为什么呢?

首先是045的取值栈方法,在045包括之前的时候我们在类有几个字段

struts2拦截器_adguard广告拦截器_Adaway广告拦截器

这就是为什么之前的漏洞poc都会有这样的表示标识存在,这个是一个安全沙箱,关于poc的讲解我会在文章里详细写明,包括置空三个属性的值struts2拦截器,这样就可以执行任意代码了,调用任意包了等等

它可以利用的硬编码直接访问上下文,但是在2.3.34版本删除了这三个属性

struts2拦截器_adguard广告拦截器_Adaway广告拦截器

那么在使用045的poc的时候,会发现值栈返回为空,这是因为无法使用#,#去获取访问对象了

使用域来取值栈,可以看到是可以取到值栈的。

struts2拦截器_adguard广告拦截器_Adaway广告拦截器

域下有.对象,可以通过这个获取值栈,达到命令执行的目的。

官方的修复是升级到 版本2.3.35或2.5.17。


限时特惠:
本站持续每日更新海量各大内部创业课程,一年会员仅需要98元,全站资源免费下载
点击查看详情

站长微信:Jiucxh

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注