Struts2修復(fù)遠(yuǎn)程命令執(zhí)行漏洞(S2-016)

修復(fù)方案:

升級(jí)struts2版本:

產(chǎn)生影響:
文件上傳報(bào)錯(cuò):Unable to load bean org.apache.struts2.dispatcher.multipart.MultiPartRequest (cos)

修復(fù)方案:

1.將cos的jar包下載并放置WEB-INF/lib內(nèi)

2.創(chuàng)建一個(gè)org.apache.struts2.dispatcher.multipart.MultiPartRequest的實(shí)現(xiàn)類



package com.nuchina.common.util;

import java.io.File;

import java.io.IOException;

import java.util.Collections;

import java.util.Enumeration;

import java.util.List;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.StrutsConstants;

import org.apache.struts2.dispatcher.multipart.MultiPartRequest;

import com.opensymphony.xwork2.inject.Inject;

import com.oreilly.servlet.MultipartRequest;

public class CosMultiPartRequest implements MultiPartRequest {

? ? private MultipartRequest multi;

? ? private String defaultEncoding;

? ? private boolean maxSizeProvided;

? ? private int maxSize;

? ? @Inject(StrutsConstants.STRUTS_I18N_ENCODING)

? ? public void setDefaultEncoding(String defaultEncoding) {

? ? ? ? this.defaultEncoding = defaultEncoding;

? ? }

? ? @Inject(StrutsConstants.STRUTS_MULTIPART_MAXSIZE)

? ? public void setMaxSize(String maxSize) {

? ? ? ? this.maxSizeProvided = true;

? ? ? ? this.maxSize = Integer.parseInt(maxSize);

? ? }

? ? @Override

? ? public String[] getContentType(String fieldName) {

? ? ? ? return new String[] { multi.getContentType(fieldName) };

? ? }

? ? @SuppressWarnings("unchecked")

? ? @Override

? ? public List getErrors() {

? ? ? ? return Collections.EMPTY_LIST;

? ? }

? ? @Override

? ? public File[] getFile(String fieldName) {

? ? ? ? return new File[] { multi.getFile(fieldName) };

? ? }

? ? @Override

? ? public String[] getFileNames(String fieldName) {

? ? ? ? return new String[] { multi.getFile(fieldName).getName() };

? ? }

? ? @SuppressWarnings("unchecked")

? ? @Override

? ? public Enumeration<String> getFileParameterNames() {

? ? ? ? return multi.getFileNames();

? ? }

? ? @Override

? ? public String[] getFilesystemName(String name) {

? ? ? ? return new String[] { multi.getFilesystemName(name) };

? ? }

? ? @Override

? ? public String getParameter(String name) {

? ? ? ? return multi.getParameter(name);

? ? }

? ? @SuppressWarnings("unchecked")

? ? @Override

? ? public Enumeration<String> getParameterNames() {

? ? ? ? return multi.getParameterNames();

? ? }

? ? @Override

? ? public String[] getParameterValues(String name) {

? ? ? ? return multi.getParameterValues(name);

? ? }

? ? @Override

? ? public void parse(HttpServletRequest request, String saveDir) throws IOException {

? ? ? ? if (maxSizeProvided) {

? ? ? ? ? ? multi = new MultipartRequest(request, saveDir, maxSize, defaultEncoding);

? ? ? ? } else {

? ? ? ? ? ? multi = new MultipartRequest(request, saveDir, defaultEncoding);

? ? ? ? }

? ? }

@Override

public void cleanUp() {

// TODO Auto-generated method stub

}

}

---------------------

作者:雨夜星辰03

來源:CSDN

原文:https://blog.csdn.net/qwerty1994/article/details/62422697

版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!


3.添加配置

<!-- 配置cos文件上傳的解析器 -->

<bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="cos" class="com.xxxxx.common.util.CosMultiPartRequest" />

<!--避免編號(hào)為CVE-2017-5638的該漏洞,-->

<!--影響系統(tǒng)及版本:Struts 2.3.5 - Struts 2.3.31、Struts 2.5 - Struts 2.5.10-->

<constant name="struts.multipart.parser" value="cos"></constant>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一. Java基礎(chǔ)部分.................................................
    wy_sure閱讀 4,031評(píng)論 0 11
  • 本文包括: 1、Struts 2 概述2、Struts 2 快速入門3、Struts 2 的執(zhí)行流程4、配置 st...
    廖少少閱讀 3,215評(píng)論 3 13
  • Struts2遠(yuǎn)程命令執(zhí)行漏洞 關(guān)于Struts Struts是Apache基金會(huì)的一個(gè)開源項(xiàng)目,Struts通過...
    菜神一把梭閱讀 1,420評(píng)論 0 0
  • JAVA面試題 1、作用域public,private,protected,以及不寫時(shí)的區(qū)別答:區(qū)別如下:作用域 ...
    JA尐白閱讀 1,272評(píng)論 1 0
  • 一. Struts2開發(fā)步驟: 1. 引入struts的jar包。 commons-fileupload-1.2....
    l_sivan閱讀 297評(píng)論 0 1

友情鏈接更多精彩內(nèi)容