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 !
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.
Le calcul numérique est relativement simple Spécifiez %{100+200} sur l'URL pour sauter et obtenir le résultat calculé
# 🎜🎜#.2.3.3 Le POC de référence de la version 4 est le suivant :
# 🎜🎜 #2.3 Command echo
Le POC de la version 2.3.34 est le suivant :
L'effet après l'attaque est comme indiqué ci-dessous# 🎜🎜#
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
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#🎜🎜 #
La valeur du paramètre obtenue est transmise à la méthode translateVariables(), qui conduit finalement à l'exécution de l'expression OGNL dans OnglTextPaser.
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
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
.
#🎜🎜 #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 ; #1. Mettez à niveau la version du framework vers la dernière version officielle ;
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 ;
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!