* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
* खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष [**NFT**](https://opensea.io/collection/the-peass-family) संग्रह
* प्राप्त करें [**आधिकारिक PEASS और HackTricks swag**](https://peass.creator-spring.com)
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **ट्विटर** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
इस कक्षा में एक **अजीब व्यवहार होता है।** दस्तावेज़ीकरण से: "**दो होस्ट बराबर माने जाते हैं अगर दोनों होस्ट नामों को एक ही आईपी पते में रेज़ोल्व किया जा सकता है**"।\
फिर, हर बार जब भी एक URL ऑब्जेक्ट **किसी भी****फंक्शन `equals`** या **`hashCode`** को कॉल करता है, एक **DNS अनुरोध** आईपी पता प्राप्त करने के लिए **भेजा जाएगा**।
**URL** ऑब्जेक्ट से **`hashCode`** फंक्शन को कॉल करना बहुत आसान है, इसके लिए इस ऑब्जेक्ट को एक `HashMap` में डालना पर्याप्त है जो डिसीरियलाइज़ किया जाएगा। इसलिए, `HashMap` के **`readObject`** फंक्शन के अंत में यह कोड चलाया जाता है:
यह **चल रहा है**`HashMap` के भीतर हर मान के साथ `putVal` को **चलाएगा**। लेकिन, अधिक महत्वपूर्ण है `hash` को हर मान के साथ बुलाना। यह `hash` फ़ंक्शन का कोड है:
जैसा कि आप देख सकते हैं, **डीसीरियलाइज़ करते समय** एक **`HashMap`** को **डीसीरियलाइज़ किया जाता है** तो `hash` फ़ंक्शन हर ऑब्जेक्ट के साथ **चलाया जाएगा** और **`hash`** के निष्पादन के दौरान **ऑब्जेक्ट का `.hashCode()` निष्पादित होगा**। इसलिए, यदि आप एक **URL ऑब्जेक्ट** को सम्मिलित करने वाले **`HashMap`** को **डीसीरियलाइज़ करते हैं**, तो **URL ऑब्जेक्ट**`.hashCode()` को **निष्पादित करेगा**।
जैसा कि आप देख सकते हैं, जब एक `URLObject``.hashCode()` को निष्पादित करता है, तो इसे `hashCode(this)` कहा जाता है। एक जारी रखने के लिए आप इस फ़ंक्शन के कोड को देख सकते हैं:
इसलिए, इस क्लास का दुरुपयोग किया जा सकता है ताकि यह दिखा सके कि **डेसीरियलाइज़ेशन** संभव है, या यहां तक कि जानकारी को **बाहर निकाला जा सके** (आप एक कमांड निष्पादन के आउटपुट को सबडोमेन के रूप में जोड़ सकते हैं)।
आप [यसोसीरियल से URLDNS पेलोड कोड यहां](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java) पा सकते हैं। हालांकि, इसे कोड करने को समझने को सरल बनाने के लिए मैंने अपना खुद का PoC बनाया है (यसोसीरियल के आधार पर):
* मूल विचार में थी कि थी कि जीमेल कलेक्शन्स पेलोड को डीएनएस क्वेरी करने के लिए बदल दिया गया था, यह प्रस्तावित तरीके से कम सुरक्षित था, लेकिन यह पोस्ट है: [https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/](https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/)
**GadgetProbe** यह जांचने की कोशिश करेगा कि क्या कुछ **जावा कक्षाएं** सर्वर की जावा कक्षा पर मौजूद हैं, ताकि आप जान सकें कि क्या यह किसी ज्ञात शोषण के लिए **विकल्पशील** है।
**GadgetProbe** पिछले खंड के **डीएनएस पेलोड** का उपयोग करेगा, लेकिन **डीएनएस क्वेरी** चलाने से **पहले** यह एक **अनिश्चित कक्षा को डिसीरियलाइज़** करने की कोशिश करेगा। यदि **अनिश्चित कक्षा मौजूद है**, तो **डीएनएस क्वेरी** भेजी जाएगी और GadgetProbe यह नोट करेगा कि यह कक्षा मौजूद है। यदि **डीएनएस** अनुरोध कभी नहीं भेजा जाता है, तो इसका अर्थ है कि **अनिश्चित कक्षा सफलतापूर्वक डिसीरियलाइज़ नहीं हुई** है, इसलिए या तो यह मौजूद नहीं है या यह **सीरीयलाइज़ नहीं हो सकती/शोषणीय** है।
गिथब के अंदर, [**GadgetProbe के पास कुछ शब्द सूचियाँ हैं**](https://github.com/BishopFox/GadgetProbe/tree/master/wordlists) जिन्हें जावा कक्षाओं के लिए परीक्षण के लिए उपयोग किया जा सकता है।
डिफ़ॉल्ट रूप से यह सभी अनुरोधों और प्रतिक्रियाओं की जांच करता है कि क्या वे **जावा सीरीयलाइज़ के जादू बाइट्स** को ढूंढ़ रहे हैं और यदि कोई भी पाया जाता है तो एक सुरक्षा चेतावनी प्रदर्शित करेगा:
आप एक अनुरोध का चयन कर सकते हैं, उस पर दायां क्लिक करें और `Send request to DS - Manual Testing` करें।\
फिर, _डिसीरियलाइज़ेशन स्कैनर टैब_ --> _मैन्युअल परीक्षण टैब_ के अंदर आप **इंजेक्शन प्वाइंट** का चयन कर सकते हैं। और **परीक्षण शुरू** कर सकते हैं (उपयुक्त एटैक का चयन करें जो इस्तेमाल की गई कोडिंग पर निर्भर करता है)।
यह "मैन्युअल परीक्षण" कहा जाता है, लेकिन यह काफी **स्वचालित** है। यह स्वचालित रूप से जांचेगा कि क्या **डिसीरियलाइज़ेशन** किसी भी **ysoserial पेलोड** के लिए **विकल्पशील** है, वेब सर्वर पर मौजूद पुस्तकालयों की जांच करेगा और विकल्पशील वालों को हाइलाइट करेगा। **विकल्पशील पुस्तकालयों** की **जांच** करने के लिए आप जावा की **नींदें**, **सीप** द्वारा **सीप** और पहले से ही उल्लिखित करने के लिए **डीएनएस** का उपयोग करने का चयन कर सकते हैं।
* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की इच्छा है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
* खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष [**NFT संग्रह**](https://opensea.io/collection/the-peass-family)
* प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **Twitter** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**