
PoC of CVE-2025-22652
WordPress 플러그인
구성 요소 이름 Payment Forms for Paystack
취약한 버전 <= 4.0.1
구성 요소 슬러그 payment-forms-for-paystack
구성 요소 링크 https://wordpress.org/plugins/payment-forms-for-paystack/
취약점 클래스 A3: 인젝션
취약점 유형 SQL 인젝션
관리자
Payment Forms for Paystack 플러그인 버전 4.0.1 이하에서, 결제 양식의 결제 목록을 볼 때 URL 매개변수 order에 대한 충분하지 않은 입력 검증 및 이스케이프 처리로 인해 SQL 인젝션 취약점이 존재합니다. 이를 통해 관리자 권한을 가진 공격자는 대상 사이트 데이터베이스의 모든 정보를 추출할 수 있습니다.
이 취약점은 직접적인 데이터 쿼리를 허용하지 않지만, 시간 기반 SQL 인젝션 기법을 사용하여 데이터를 추출할 수 있습니다.
Payment Forms for Paystack 플러그인 버전 4.0.1 이하가 설치된 WordPress 사이트를 준비합니다.
조회를 수행하려면 Paystack 양식을 추가해야 하므로, Paystack 양식 추가 메뉴(wp-admin/post-new.php?post_type=paystack_form)에서 양식을 추가합니다.

양식을 추가한 후, 쇼트코드를 확인할 수 있으며, 아래 URL의 URL 매개변수 form에 해당 쇼트코드의 속성 ID를 삽입한 후 접속합니다.
http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=<삽입 지점>&orderby=&order=,+(select+sleep(5)+from+dual+where+1=1)
예를 들어, [pff-paystack id="13"]인 경우, http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=13&orderby=&order=,+(select+sleep(5)+from+dual+where+1=1)에 접속합니다.

결과적으로 URL 매개변수 order에 삽입된 SQL 인젝션 페이로드의 조건절 where 1=1이 항상 참이므로, sleep(5) 함수가 실행되어 응답이 5초 후에 오는 것을 확인할 수 있습니다.
취약점이 발생하는 URL을 요청하면 /wp-content/plugins/payment-forms-for-paystack/includes/classes/class-helpers.php 파일의 get_payments_by_id 함수가 호출됩니다.
이때 URL 매개변수 order가 입력 검증이나 이스케이프 처리 없이 SQL 쿼리에 직접 삽입되어 데이터베이스에서 실행됩니다.

따라서 URL 매개변수 order에 SQL 인젝션 페이로드 , (select sleep(5) from dual where 1=1)가 삽입되면 아래와 같은 SQL 쿼리가 실행됩니다. 이때 페이로드의 조건절이 참인지 거짓인지에 따라 응답 시간에 차이가 발생하며, 이 시간 차이를 이용하여 데이터베이스에서 데이터를 추출할 수 있습니다.
SELECT * FROM %i WHERE post_id = %d AND paid = %s ORDER BY %i , (select sleep(5) from dual where 1=1)
PoC 코드를 편집기에서 열고 WordPress 사이트 주소와 관리자 자격 증명을 입력합니다.

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


반면, order에 삽입된 SQL 인젝션 페이로드의 조건절을 where 1=2로 변경하면 응답이 즉시 오는 것을 확인할 수 있습니다.
http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=<삽입 지점>&orderby=&order=,+(select+sleep(5)+from+dual+where+1=2)
예를 들어, [pff-paystack id="13"]인 경우, http://localhost:8080/wp-admin/edit.php?post_type=paystack_form&page=submissions&form=13&orderby=&order=,+(select+sleep(5)+from+dual+where+1=2)에 접속합니다.
