Java DNS Deserialization, GadgetProbe and Java Deserialization Scanner
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
क्लास java.net.URL
Serializable
को लागू करता है, इसका मतलब है कि यह क्लास सीरियलाइज किया जा सकता है।
यह क्लास का अजीब व्यवहार है। दस्तावेज़ से: “दो होस्ट को समान माना जाता है यदि दोनों होस्ट नामों को समान IP पतों में हल किया जा सके।”
फिर, हर बार जब एक URL ऑब्जेक्ट equals
या hashCode
में से किसी भी फ़ंक्शन को कॉल करता है, तो IP पता प्राप्त करने के लिए एक DNS अनुरोध भेजा जाएगा।
hashCode
फ़ंक्शन को एक URL ऑब्जेक्ट से कॉल करना काफी आसान है, बस इस ऑब्जेक्ट को एक HashMap
में डालना है जो कि डेसिरियलाइज़ किया जाने वाला है। इसका कारण यह है कि HashMap
के readObject
फ़ंक्शन के अंत में यह कोड निष्पादित होता है:
यह चल रहा है putVal
को HashMap
के अंदर हर मान के साथ निष्पादित करने के लिए। लेकिन, अधिक प्रासंगिक है hash
को हर मान के साथ कॉल करना। यह hash
फ़ंक्शन का कोड है:
जैसा कि आप देख सकते हैं, जब डीसिरियलाइज़िंग एक HashMap
तो फ़ंक्शन hash
हर ऑब्जेक्ट के साथ निष्पादित होने जा रहा है और hash
निष्पादन के दौरान यह ऑब्जेक्ट का .hashCode()
निष्पादित होने जा रहा है। इसलिए, यदि आप एक HashMap
जिसमें एक URL ऑब्जेक्ट है, डीसिरियलाइज़ करते हैं, तो URL ऑब्जेक्ट .hashCode()
निष्पादित करेगा।
अब, चलिए URLObject.hashCode()
के कोड पर नज़र डालते हैं:
जैसा कि आप देख सकते हैं, जब एक URLObject
.hashCode()
को निष्पादित करता है, तो इसे hashCode(this)
कहा जाता है। एक निरंतरता में, आप इस फ़ंक्शन का कोड देख सकते हैं:
आप देख सकते हैं कि एक getHostAddress
डोमेन पर निष्पादित किया गया है, DNS क्वेरी लॉन्च कर रहा है।
इसलिए, इस क्लास का दुरुपयोग किया जा सकता है ताकि DNS क्वेरी लॉन्च की जा सके और दर्शाना किया जा सके कि डिसेरियलाइजेशन संभव है, या यहां तक कि जानकारी निकालने के लिए (आप एक कमांड निष्पादन के आउटपुट को उपडोमेन के रूप में जोड़ सकते हैं)।
आप ysoserial से URDNS पेलोड कोड यहाँ पा सकते हैं। हालाँकि, इसे कोड करना समझने में आसान बनाने के लिए मैंने अपना खुद का PoC बनाया (जो ysoserial से आधारित है):
मूल विचार में कॉमन कलेक्शंस पेलोड को DNS क्वेरी करने के लिए बदला गया था, यह प्रस्तावित विधि की तुलना में कम विश्वसनीय था, लेकिन यह पोस्ट है: https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/
आप GadgetProbe को Burp Suite App Store (Extender) से डाउनलोड कर सकते हैं।
GadgetProbe यह पता लगाने की कोशिश करेगा कि क्या कुछ Java क्लासेस मौजूद हैं सर्वर की Java क्लास पर ताकि आप जान सकें क्या यह किसी ज्ञात एक्सप्लॉइट के लिए संवेदनशील है।
GadgetProbe पिछले अनुभाग के समान DNS पेलोड का उपयोग करेगा लेकिन DNS क्वेरी चलाने से पहले यह एक मनमानी क्लास को डेसिरियलाइज करने की कोशिश करेगा। यदि मनमानी क्लास मौजूद है, तो DNS क्वेरी भेजी जाएगी और GadgetProbe नोट करेगा कि यह क्लास मौजूद है। यदि DNS अनुरोध कभी नहीं भेजा गया, तो इसका मतलब है कि मनमानी क्लास को सफलतापूर्वक डेसिरियलाइज नहीं किया गया इसलिए या तो यह मौजूद नहीं है या यह डेसिरियलाइज करने योग्य/एक्सप्लॉइटेबल नहीं है।
गिटहब के अंदर, GadgetProbe में कुछ वर्डलिस्ट हैं जिनमें परीक्षण के लिए Java क्लासेस हैं।
यह स्कैनर Burp App Store (Extender) से डाउनलोड किया जा सकता है। एक्सटेंशन में पैसिव और सक्रिय क्षमताएँ हैं।
डिफ़ॉल्ट रूप से यह पैसिवली सभी अनुरोधों और प्रतिक्रियाओं की जांच करता है Java सीरियलाइज्ड मैजिक बाइट्स की तलाश में और यदि कोई पाया जाता है तो एक संवेदनशीलता चेतावनी प्रस्तुत करेगा:
मैनुअल परीक्षण
आप एक अनुरोध का चयन कर सकते हैं, राइट-क्लिक करें और Send request to DS - Manual Testing
चुनें।
फिर, Deserialization Scanner Tab --> Manual testing tab के अंदर आप इंसर्शन पॉइंट का चयन कर सकते हैं। और परीक्षण शुरू करें (उपयुक्त हमले का चयन करें जो उपयोग की गई एन्कोडिंग के आधार पर हो)।
हालांकि इसे "मैनुअल परीक्षण" कहा जाता है, यह काफी स्वचालित है। यह स्वचालित रूप से जांच करेगा कि डेसिरियलाइजेशन किसी भी ysoserial पेलोड के लिए संवेदनशील है या नहीं, वेब सर्वर पर मौजूद पुस्तकालयों की जांच करके और संवेदनशील वाले को हाइलाइट करेगा। संवेदनशील पुस्तकालयों की जांच करने के लिए आप Javas Sleeps, CPU खपत के माध्यम से sleeps, या पहले उल्लेखित DNS का उपयोग करने का चयन कर सकते हैं।
एक्सप्लॉइटिंग
एक बार जब आप एक संवेदनशील पुस्तकालय की पहचान कर लेते हैं, तो आप अनुरोध को Exploiting Tab में भेज सकते हैं। इस टैब में आपको फिर से इंजेक्शन पॉइंट का चयन करना होगा, और विकृत पुस्तकालय लिखना होगा जिसके लिए आप एक पेलोड बनाना चाहते हैं, और कमांड। फिर, बस उपयुक्त हमला बटन दबाएं।
अपने पेलोड को कुछ इस तरह निष्पादित करें:
AWS हैकिंग सीखें और अभ्यास करें:HackTricks Training AWS Red Team Expert (ARTE) GCP हैकिंग सीखें और अभ्यास करें: HackTricks Training GCP Red Team Expert (GRTE)