Maison >Opération et maintenance >Sécurité >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

WBOY
WBOYavant
2023-05-15 18:46:061586parcourir

Préface

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 le chercheur en sécurité Man YueMo de l'équipe Semmle Security Research.

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 framework 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 de l'action supérieure (Configuration d'action) ou utilise l'espace de noms générique, conduisant potentiellement à l'exécution de code à distance. De la même manière, lorsque les valeurs de valeur et d'action ne sont pas définies dans la balise url et que l'action de couche supérieure n'est pas définie ou qu'un espace de noms générique est utilisé, cela peut également conduire à l'exécution de code à distance après l'auto-exécution de l'auteur. construit, la vulnérabilité a été reproduite avec succès et la commande echo peut être exécutée. A la fin de l'article, vous avez ce que vous voulez !

Exploitation de la vulnérabilité

Les environnements. utilisées par l'auteur sont respectivement Strust2 version 2.3.20 et Strust2 2.3.34. L'exploitation de la vulnérabilité est grossièrement divisée en trois méthodes : calcul numérique et calculatrice contextuelle, écho de commande.

2.1 Calcul numérique

Le calcul numérique est relativement simple Spécifiez %{100+200} sur l'URL pour sauter et obtenir le résultat calculé

# 🎜🎜#.


Struts2-057 两个版本RCE漏洞实例分析

2.2 Calculatrice Pop-up

Le POC de la version 2.3.20 est le suivant :

#🎜 🎜 #

Struts2-057 两个版本RCE漏洞实例分析Struts2-057 两个版本RCE漏洞实例分析2.3.3 Le POC de référence de la version 4 est le suivant :



# 🎜🎜 #Struts2-057 两个版本RCE漏洞实例分析2.3 Command echoStruts2-057 两个版本RCE漏洞实例分析

Les deux versions utilisent l'objet com.opensymphony.xwork2.dispatcher.HttpServletResponse pour imprimer les données d'écho après l'exécution de la commande

Le POC de la version 2.3.20 est le suivant :

Le POC de la version 2.3.34 est le suivant :

Struts2-057 两个版本RCE漏洞实例分析
L'effet après l'attaque est comme indiqué ci-dessous# 🎜🎜#

Struts2-057 两个版本RCE漏洞实例分析

Analyse de vulnérabilité

Struts2-057 两个版本RCE漏洞实例分析Avant d'analyser la vulnérabilité, vous devez configurer le fichier struts.xml, qui est le fichier de configuration struts2. Core, la plupart du temps vous devez contrôler l'augmentation ou la diminution de la configuration ; mapper.alwaysSelectFullNamespace = true, sinon la vulnérabilité ne peut pas être déclenchée. Le but de cette configuration est de définir. si NameSpace est toujours sélectionné n'importe où avant la dernière barre oblique ; le type renvoyé par la deuxième balise de résultat sélectionne "redirectAction ou chaîne", seules les valeurs des deux options de configuration peuvent transférer ou rediriger des actions pour plus de détails sur le type, veuillez vous référer ; à la figure ci-dessous

Struts2-057 两个版本RCE漏洞实例分析 Après avoir terminé la configuration, lancez l'analyse dynamique. La vulnérabilité se trouve dans

struts2-core.jar!/org/apache/struts2/dispatcher/ServletActionRedirectResult.class

The value of this.namespace member provient de la méthode getNamespace (), puis renvoie la chaîne URI via getUriFromActionMapping(); entre la méthode setLocation#🎜🎜 #Struts2-057 两个版本RCE漏洞实例分析

Ensuite, le ServletActionResult est appelé via la méthode super.execute, et la méthode conditionalParse est suivie dans la méthode d'exécution body, et l'exécution ONGL est appelée dans cette méthode. La méthode clé est translateVariables.

Struts2-057 两个版本RCE漏洞实例分析La valeur du paramètre obtenue est transmise à la méthode translateVariables(), qui conduit finalement à l'exécution de l'expression OGNL dans OnglTextPaser.

Struts2-057 两个版本RCE漏洞实例分析

Struts2-057 两个版本RCE漏洞实例分析 Après avoir ouvert la calculatrice, la valeur de lastFinalLocation obtenue est le handle après l'exécution en cours. Cette valeur est utilisée comme adresse d'action du saut de réponse, qui apparaît dans la barre d'adresse après l'apparition. ouvrez la calculatrice dans le navigateur. URI

Struts2-057 两个版本RCE漏洞实例分析L'analyse de la calculatrice contextuelle se termine ici. Examinons ensuite l'analyse basée sur les résultats de l'écho de l'exécution de la commande. Fondamentalement, le processus est le même que ci-dessus, la seule différence est que la valeur renvoyée par lastFinalLocation est NULL, ce qui signifie qu'il n'y a pas de saut 302 après la soumission. C'est toujours l'action en cours et la valeur renvoyée est 200
.

#🎜🎜 #Struts2-057 两个版本RCE漏洞实例分析Après avoir connu le principe, mon collègue a implémenté le script de détection d'exp en utilisant python. Ce script est uniquement destiné à l'apprentissage et à la recherche ; #Struts2-057 两个版本RCE漏洞实例分析1. Mettez à niveau la version du framework vers la dernière version officielle ;

2. Pour les applications Web, essayez d'assurer la sécurité du code ;# 🎜🎜#

3. Pour le niveau de règle IDS, le code d'état renvoyé par le calcul numérique et le calculateur de bombe est 302, et le champ Location jump contient la chaîne de poignée caractéristique s'il s'agit d'un état 200 renvoyé par le code d'écho de commande, et les résultats de la commande sont ; sortie ; Struts2-057 两个版本RCE漏洞实例分析

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