九游老哥

九游老哥

九游老哥科技

  • 基础设施清静

    基础设施清静
  • 数据清静

    数据清静
  • 云盘算清静

    云盘算清静
  • AI清静

    AI清静
  • 工业互联网清静

    工业互联网清静
  • 物联网清静

    物联网清静
  • 信息手艺应用立异

    信息手艺应用立异
  • 所有产品

    所有产品
  • 所有解决计划

    所有解决计划

基础设施清静


  • 政府

    政府
  • 运营商

    运营商
  • 金融

    金融
  • 能源

    能源
  • 交通

    交通
  • 企业

    企业
  • 科教文卫

    科教文卫

  • 九游老哥云 九游老哥云
  • 九游老哥威胁情报中心NTI 九游老哥威胁情报中心NTI
  • TechWorld手艺嘉年华 TechWorld手艺嘉年华
  • 北京九游老哥公益基金会 北京九游老哥公益基金会
  • 手艺博客 手艺博客
  • 乐成案例 乐成案例

相助同伴审查更多 >

相助同伴动态

成为相助同伴

  • 九游老哥云 九游老哥云
  • 九游老哥威胁情报中心NTI 九游老哥威胁情报中心NTI
  • TechWorld手艺嘉年华 TechWorld手艺嘉年华
  • 北京九游老哥公益基金会 北京九游老哥公益基金会
  • 手艺博客 手艺博客
  • 乐成案例 乐成案例

手艺支持审查更多 >

产品支持

  • 九游老哥云 九游老哥云
  • 九游老哥威胁情报中心NTI 九游老哥威胁情报中心NTI
  • TechWorld手艺嘉年华 TechWorld手艺嘉年华
  • 北京九游老哥公益基金会 北京九游老哥公益基金会
  • 手艺博客 手艺博客
  • 乐成案例 乐成案例

返回列表

剖析防护:Struts2 远程代码执行误差(S2-045)

2017-03-08

宣布者:九游老哥科技

误差剖析

Apache Struts2的Jakarta Multipart parser插件保存远程代码执行误差,误差编号为CNNVD-201703-152。攻击者可以在使用该插件上传文件时,修改HTTP请求头中的Content-Type值来触发该误差,导致远程执行代码。

相关链接如下:

https://cwiki.apache.org/confluence/display/WW/S2-045?from=timeline&isappinstalled=0


影响的版本

  • Struts 2.3.5 - Struts 2.3.31
  • Struts 2.5 - Struts 2.5.10


不受影响的版本

  • Struts 2.3.32
  • Struts 2.5.10.1


九游老哥威胁情报中心NTI关于Struts2误差规模漫衍图

  1. 全球漫衍图

九游老哥·(中国)俱乐部官方网站

  1. 海内漫衍图

  1. 全球排行

  1. 海内排行


误差剖析

Apache Struts2保存远程代码执行误差,攻击者可以将恶意代码通过http报文头部的Content-Type字段转达给保存误差的服务器,导致恣意代码执行误差。


  1. 误差POC

九游老哥·(中国)俱乐部官方网站


  1. 误差验证


  1. 细节剖析

It is possible to perform a RCE attack with a malicious Content-Type value. If the Content-Type value isn't valid an exception is thrown which is then used to display an error message to a user.

从官方的误差形貌我们可以知道,这个误差是由于Strus2对过失新闻处置惩罚泛起了问题,通过Content-Type这个header头,注入OGNL语言,进而执行下令。

本文的剖析是基于Struts 2.3.24版本。首先看一下POC,攻击指令通过"Content-Type"转达给保存误差的服务器,如下图所示:

九游老哥·(中国)俱乐部官方网站

在传入的参数中,通过#nike='multipart/form-data'语句使得后台判断语句content_type.contains("multipart/form-data")判断效果为true,以便攻击代码得以传入。同时将攻击代码'cat /etc/passwd'赋值给#cmd参数。接下来通过(#cmds=(#iswin?{'cmd.exe''/c'#cmd}:{'/bin/bash''-c'#cmd})来判断目的主机的操作系统类型,并选择性的举行指令赋值,最终,通过如下图代码,将攻击指令执行:

九游老哥·(中国)俱乐部官方网站

下面先看一下下令执行注入点:

在JakartaMultiPartRequest.java 的buildErrorMessage函数中,这个函数里的localizedTextUtil.findText会执行OGNL表达式,从而导致下令执行,我们先看下findtext的界说:

https://struts.apache.org/maven/struts2-core/apidocs/com/opensymphony/xwork2/util/LocalizedTextUtil.html

九游老哥·(中国)俱乐部官方网站

接下来它被JakartaMultiPartRequest.java中的parse挪用。Struts2的入口FilterDispatcher.java接下来执行doFilter函数,执行完一些过滤后进入prepareDispatcherAndWrapRequest函数,再执行dispatcher.wrapRequest进入request处置惩罚分支,下图就是prepareDispatcherAndWrapRequest的实现,该函数对要领举行了处置惩罚:

接着我们看dispatcher.wrapRequest,当Content-Type为multipart/form-data的时间会挪用MultiPartRequestWrapper这个是一个对州差别上传方法的封装,其中就包括Jakarta等传输方法:

MultiPartRequestWrapper.java封装了parse函数:

我们来看下parse函数,如下图所示:

在parse函数中,当Content-Type名堂不被识别时,泛起异常,导致OGNL表达式被执行,这就是我们剖析的最初的注入点。


补丁剖析

  • 2.5.10.1版本的修复计划:

https://github.com/apache/struts/commit/b06dd50af2a3319dd896bf5c2f4972d2b772cf2b

九游老哥·(中国)俱乐部官方网站

  • 2.3.32版本的修复计划:

https://github.com/apache/struts/commit/352306493971e7d5a756d61780d57a76eb1f519a

九游老哥·(中国)俱乐部官方网站


官方解决计划

  • 官方已经宣布了版本更新,建议用户升级到不受影响的最新版本(Struts2 2.3.32或Struts 2.5.10.1),下载链接如下所示:

Struts 2.3.32:

https://github.com/apache/struts/releases/tag/STRUTS_2_3_32

Struts 2.5.10.1:

https://github.com/apache/struts/releases/tag/STRUTS_2_5_10_1


暂时修复计划

在用户未便举行升级的情形下,作为暂时的解决计划,用户可以举行以下操作来规避危害:

  • 修改Web-INF/classes目录下的struts.xml中的设置

在Web-INF/classes目录下的struts.xml 中的struts 标签下添加;

在WEB-INF/classes/ 目录下添加 global.properties,文件内容如下

struts.messages.upload.error.InvalidContentTypeException=1

  • 设置过滤器过滤Content-Type的内容

在web应用的web.xml中设置过滤器,在过滤器中对Content-Type内容的正当性举行检测:

public void doFilter(ServletRequest request ServletResponse response FilterChain chain) throws java.io.IOException ServletException {

String contentType = request.getContentType().toLowerCase(Locale.ENGLISH);

if (contentType != null && contentType.contains("multipart/form-data") && !contentType.startsWith("multipart/form-data"))

{ response.getWriter().write("Reject!"); }

else { chain.doFilter(request response); }

}


手艺防护计划

  • 若是您不清晰是否受此误差影响:

公网资产 可使用九游老哥云 紧迫误差在线检测,检测地点如下:

http://t.cn/RipBq1c

内网资产 可以使用九游老哥科技的远程清静评估系统(RSAS V5、V6)或 Web应用误差扫描系统(WVSS) 举行检测。

          远程清静评估系统(RSAS V5)

http://update.nsfocus.com/update/listAurora/v/5

          远程清静评估系统(RSAS V6)

http://update.nsfocus.com/update/listRsasDetail/v/vulweb

          Web应用误差扫描系统(WVSS)

http://update.nsfocus.com/update/listWvss

        通过上述链接,升级至最新版本即可举行检测!


  • 使用九游老哥科技防护类产品(NIPS/NIDS/NF/WAF)举行防护:

          入侵防护系统(NIPS)

http://update.nsfocus.com/update/listIps

          入侵检测系统(NIDS)

http://update.nsfocus.com/update/listIds

          下一代防火墙系统(NF)

http://update.nsfocus.com/update/listNf

          Web应用防护系统(WAF)

http://update.nsfocus.com/update/wafIndex

          通过上述链接,升级至最新版本即可举行防护!

九游老哥科技声明

本清静通告仅用来形貌可能保存的清静问题,九游老哥科技不为此清静通告提供任何包管或允许。由于撒播、使用此清静通告所提供的信息而造成的任何直接或者间接的效果及损失,均由使用者自己认真,九游老哥科技以及清静通告作者不为此肩负任何责任。九游老哥科技拥有对此清静通告的修改息争释权。如欲转载或撒播此清静通告,必需包管此清静通告的完整性,包括版权声明等所有内容。未经九游老哥科技允许,不得恣意修改或者增减此清静通告内容,不得以任何方法将其用于商业目的。


?

您的联系方法

*姓名
*单位名称
*联系方法
*验证码 九游老哥·(中国)俱乐部官方网站
提交到邮箱

购置热线

  • 购置咨询:

    400-818-6868-1

提交项目需求

接待加入九游老哥科技,成为我们的相助同伴!
  • *请形貌您的需求
  • *最终客户名称
  • *项目名称
  • 您感兴趣的产品
  • 项目预算
您的联系方法
  • *姓名
  • *联系电话
  • *邮箱
  • *职务
  • *公司
  • *都会
  • *行业
  • *验证码 九游老哥·(中国)俱乐部官方网站
  • 提交到邮箱
九游老哥·(中国)俱乐部官方网站
九游老哥·(中国)俱乐部官方网站

服务支持

智能客服
智能客服
购置/售后手艺问题
盟管家-售后服务系统
盟管家-售后服务系统
在线提单|智能问答|知识库
支持热线
支持热线
400-818-6868
九游老哥科技社区
九游老哥科技社区
资料下载|在线问答|手艺交流
微博
微博

微博

微信
微信

微信

B站
B站

B站

抖音
抖音

抖音

视频号
视频号

视频号

服务热线

400-818-6868

服务时间

7*24小时

? 2026 NSFOCUS 九游老哥科技 www.nsfocus.com All Rights Reserved . 京公网安备 11010802021605号 京ICP备14004349号 京ICP证110355号

网站地图