* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें**, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** पर 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) को **फॉलो करें**.
* **HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके अपनी हैकिंग ट्रिक्स शेयर करें.
</details>
## डिसेरियलाइजेशन पर DNS अनुरोध
क्लास `java.net.URL``Serializable` को लागू करता है, इसका मतलब है कि इस क्लास को सीरियलाइज किया जा सकता है।
इस क्लास में एक **विचित्र व्यवहार** होता है। दस्तावेज़ीकरण से: "**दो होस्ट्स को समान माना जाता है यदि दोनों होस्ट नामों को एक ही IP पते में हल किया जा सकता है**"।\
तब, हर बार जब एक URL ऑब्जेक्ट **किसी भी****`equals`** या **`hashCode`** फंक्शन को **कॉल** करता है, तो IP पता प्राप्त करने के लिए एक **DNS अनुरोध****भेजा** जाएगा।
एक **URL** ऑब्जेक्ट से **`hashCode`** फंक्शन को **कॉल** करना काफी आसान है, इसे एक `HashMap` में डालना पर्याप्त है जिसे डीसीरियलाइज़ किया जा रहा है। यह इसलिए है क्योंकि `HashMap` के **`readObject`** फंक्शन के **अंत** में यह कोड निष्पादित किया जाता है:
जैसा कि आप देख सकते हैं, **जब डिसीरियलाइजिंग** एक **`HashMap`** फंक्शन `hash` हर ऑब्जेक्ट के साथ **निष्पादित होने वाला है** और **`hash`** निष्पादन के **दौरान** ऑब्जेक्ट का `.hashCode()`**निष्पादित होगा**। इसलिए, अगर आप एक **`HashMap`** **डिसीरियलाइज** करते हैं जिसमें एक **URL** ऑब्जेक्ट होता है, तो **URL ऑब्जेक्ट**`.hashCode()`**निष्पादित करेगा**।
जैसा कि आप देख सकते हैं, जब एक `URLObject``.hashCode()` को निष्पादित करता है, तो इसे `hashCode(this)` कहा जाता है। आगे आप इस फंक्शन का कोड देख सकते हैं:
इसलिए, इस क्लास का **दुरुपयोग** किया जा सकता है ताकि **DNS query लॉन्च** की जा सके यह **प्रदर्शित** करने के लिए कि **deserialization** संभव है, या यहां तक कि **जानकारी का बाहर निकालना** (आप कमांड निष्पादन के आउटपुट को सबडोमेन के रूप में जोड़ सकते हैं)।
आप [ysoserial से URDNS पेलोड कोड यहाँ पा सकते हैं](https://github.com/frohoff/ysoserial/blob/master/src/main/java/ysoserial/payloads/URLDNS.java)। हालांकि, इसे कोड करने का तरीका समझने के लिए आसान बनाने के लिए मैंने अपना खुद का PoC बनाया है (ysoserial से प्राप्त एक के आधार पर):
* मूल विचार में कॉमन्स कलेक्शन्स पेलोड को DNS क्वेरी करने के लिए बदला गया था, यह प्रस्तावित विधि से कम विश्वसनीय था, लेकिन यह पोस्ट है: [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** यह पता लगाने की कोशिश करेगा कि कुछ **Java classes मौजूद हैं** या नहीं सर्वर के Java class पर ताकि आप जान सकें **कि** यह **vulnerable** है या नहीं किसी ज्ञात एक्सप्लॉइट के लिए।
**GadgetProbe** पिछले अनुभाग के समान **DNS payload** का उपयोग करेगा लेकिन **DNS क्वेरी चलाने से पहले** यह **किसी मनमानी क्लास को डिसीरियलाइज करने की कोशिश करेगा**। अगर **मनमानी क्लास मौजूद है**, तो **DNS क्वेरी****भेजी जाएगी** और GadgetProbe नोट करेगा कि यह क्लास मौजूद है। अगर **DNS** अनुरोध **कभी नहीं भेजा जाता**, इसका मतलब है कि **मनमानी क्लास को सफलतापूर्वक डिसीरियलाइज नहीं किया गया** इसलिए या तो यह मौजूद नहीं है या यह **सीरियलाइज़ेबल/एक्सप्लॉइटेबल नहीं है**।
Github के अंदर, [**GadgetProbe में कुछ वर्डलिस्ट्स हैं**](https://github.com/BishopFox/GadgetProbe/tree/master/wordlists) जिनमें Java क्लासेस हैं जिन्हें परीक्षण के लिए रखा गया है।
डिफ़ॉल्ट रूप से यह सभी अनुरोधों और प्रतिक्रियाओं की **पैसिव रूप से जांच करता है****देख** रहा है **Java serialized magic bytes** के लिए और अगर कोई मिलता है तो एक वल्नरेबिलिटी चेतावनी प्रस्तुत करेगा:
आप एक अनुरोध का चयन कर सकते हैं, राइट क्लिक करें और `Send request to DS - Manual Testing`।\
फिर, _Deserialization Scanner Tab_ --> _Manual testing tab_ के अंदर आप **insertion point** का चयन कर सकते हैं। और **परीक्षण शुरू करें** (उपयोग की जा रही एन्कोडिंग के आधार पर उपयुक्त अटैक का चयन करें)।
भले ही इसे "मैनुअल परीक्षण" कहा जाता है, यह काफी **स्वचालित** है। यह स्वचालित रूप से जांच करेगा कि **डिसीरियलाइजेशन****vulnerable** है या नहीं **किसी ysoserial payload** के लिए वेब सर्वर पर मौजूद लाइब्रेरीज की जांच करके और वल्नरेबल वालों को हाइलाइट करेगा। **वल्नरेबल लाइब्रेरीज** की जांच करने के लिए आप **Java Sleeps**, **sleeps** के माध्यम से **CPU** की खपत, या **DNS** का उपयोग करके लॉन्च करने का चयन कर सकते हैं जैसा कि पहले उल्लेख किया गया है।
एक बार जब आपने एक वल्नरेबल लाइब्रेरी की पहचान कर ली है तो आप अनुरोध को _Exploiting Tab_ में भेज सकते हैं।\
इस टैब में आपको फिर से **injection point** का **चयन** करना होगा, और **वल्नरेबल लाइब्रेरी** लिखनी होगी जिसके लिए आप पेलोड बनाना चाहते हैं, और **कमांड**। फिर, उपयुक्त **Attack** बटन दबाएं।
<summary><strong>AWS हैकिंग सीखें शून्य से लेकर हीरो तक</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा एक्सक्लूसिव [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram group**](https://t.me/peass) में या **Twitter** 🐦 पर **मुझे फॉलो** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **HackTricks** के [**github repos**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) में PRs सबमिट करके अपनी हैकिंग ट्रिक्स शेयर करें।