Java DNS Deserialization, GadgetProbe and Java Deserialization Scanner
डीएनएस डीसीरियलाइज़ेशन पर डीएनएस अनुरोध
कक्षा java.net.URL
Serializable
को लागू करती है, इसका मतलब है कि इस कक्षा को सीरीयलाइज किया जा सकता है।
यह कक्षा में एक अजीब व्यवहार है। दस्तावेज़ से: "दो होस्ट समान माने जाते हैं अगर दोनों होस्ट नाम को एक ही आईपी पते में विश्वसनीय किया जा सकता है"। फिर, हर बार जब एक URL ऑब्ज
यह चल रहा है करने के साथ putVal
हर मान के अंदर HashMap
। लेकिन, अधिक महत्वपूर्ण है hash
को हर मान के साथ कॉल करना। यह hash
फ़ंक्शन का कोड है:
जैसा कि आप देख सकते हैं, जब एक HashMap
को डिसीरियलाइज़ किया जाता है, तो hash
फ़ंक्शन **हर ऑब्ज
जैसा कि आप देख सकते हैं, जब एक URLObject
.hashCode()
को निष्पादित करता है तो इसे hashCode(this)
कहा जाता है। इस कार्य के कोड को आप इस फ़ंक्शन के नीचे देख सकते हैं:
आप देख सकते हैं कि एक getHostAddress
डोमेन पर कार्रवाई की जाती है, एक DNS क्वेरी लॉन्च करते हुए।
इसलिए, इस क्लास का दुरुपयोग किया जा सकता है ताकि DNS क्वेरी लॉन्च किया जा सके और यह प्रदर्शित किया जा सके कि डेसीरियलाइज़ेशन संभव है, या फिर सूचना बाहर निकालने के लिए (आप एक कमांड निष्पादन के आउटपुट को सबडोमेन के रूप में जोड़ सकते हैं)।
URLDNS पेलोड कोड उदाहरण
आप URDNS पेलोड कोड ysoserial से यहां देख सकते हैं। हालांकि, इसे कोड करने के लिए समझने को सरल बनाने के लिए मैंने अपना खुद का PoC बनाया है (ysoserial के आधार पर)।
अधिक जानकारी
मूल विचार में थी कि commons collections payload को बदलकर एक DNS क्वेरी को कार्यान्वित किया गया था, यह प्रस्तावित विधि से कम विश्वसनीय था, लेकिन यह पोस्ट है: https://www.gosecure.net/blog/2017/03/22/detecting-deserialization-bugs-with-dns-exfiltration/
GadgetProbe
आप GadgetProbe को बर्प सुइट ऐप स्टोर (एक्सटेंडर) से डाउनलोड कर सकते हैं।
GadgetProbe यह जानने का प्रयास करेगा कि क्या कुछ जावा क्लासेस सर्वर के जावा क्लास पर मौजूद हैं ताकि आप यह जान सकें कि क्या यह किसी ज्ञात एक्सप्लॉइट के लिए वंर्नरबल है।
यह कैसे काम करता है
GadgetProbe पिछले खंड के DNS पेलोड का उपयोग करेगा लेकिन DNS क्वेरी चलाने से पहले यह एक अर्बिट्रेरी क्लास को डिसीरियलाइज़ करने की कोशिश करेगा। यदि अर्बिट्रेरी क्लास मौजूद है, तो DNS क्वेरी भेजी जाएगी और GadgetProbe यह नोट करेगा कि यह क्लास मौजूद है। यदि DNS अनुरोध कभी नहीं भेजा जाता है, तो इसका अर्थ है कि अर्बिट्रेरी क्लास सफलतापूर्वक डिसीरियलाइज़ नहीं हुआ था, इसका मतलब है कि या तो यह मौजूद नहीं है या यह सीरियलाइज़ नहीं है/एक्सप्लॉइटेबल है।
गिथब के अंदर, GadgetProbe के पास कुछ वर्डलिस्ट हैं जिन्हें जावा क्लासेस के लिए टेस्ट किया जाना है।
अधिक जानकारी
जावा डिसीरियलाइज़ेशन स्कैनर
यह स्कैनर बर्प एप स्टोर (एक्सटेंडर) से डाउनलोड किया जा सकता है।
पैसिव
डिफ़ॉल्ट रूप से यह सभी रिक्वेस्ट्स और रिस्पॉन्स को पैसिव रूप से जांचता है जिसमें जावा सीरीयलाइज़ड मैजिक बाइट्स खोजता है और यदि कोई भी पाया जाता है तो एक वंर्नरबिलिटी चेतावनी प्रस्तुत करेगा:
सक्रिय
मैन्युअल टेस्टिंग
आप एक रिक्वेस्ट का चयन कर सकते हैं, राइट क्लिक करें और Send request to DS - Manual Testing
करें।
फिर, डिसीरियलाइज़ेशन स्कैनर टैब --> मैन्युअल टेस्टिंग टैब के अंदर आप इन्सर्शन पॉइंट का चयन कर सकते हैं। और टेस्टिंग लॉन्च कर सकते हैं (उपयोग किए गए इन्कोडिंग के आधार पर उचित हमला चुनें)।
यद्यपि इसे "मैन्युअल टेस्टिंग" कहा जाता है, यह काफी स्वचालित है। यह स्वचालित रूप से जांचेगा कि डिसीरियलाइज़ेशन किसी ysoserial पेलोड के लिए वंर्नरबल है या नहीं, वेब सर्वर पर मौजूद पुस्तकालयों की जांच करेगा और वंर्नरबल वाले को हाइलाइट करेगा। वंर्नरबल पुस्तकालयों की जांच के लिए आप Javas Sleeps, CPU उपभोक्ति के माध्यम से sleeps, या पहले से ही उल्लिखित DNS का उपयोग कर सकते हैं।
एक्सप्लॉइटिंग
एक वंर्नरबल पुस्तकालय की पहचान करने के बाद आप रिक्वेस्ट को एक्सप्लॉइटिंग टैब में भेज सकते हैं। इस टैब में आपको फिर से इन्जेक्शन पॉइंट का चयन करना होगा, और वंर्नरबल पुस्तकालय जिसके लिए आप पेलोड बनाना चाहते हैं, और कमांड। फिर, उचित हमला बटन दबाएं।
जावा डिसीरियलाइज़ेशन DNS Exfil जानकारी
अपने पेलोड को कुछ इस प्रकार का कार्यान्वित करें:
अधिक जानकारी
Last updated