* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **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)** का पालन करें**.
* **अपने हैकिंग ट्रिक्स को** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **में PR जमा करके अपना योगदान दें।**
**ViewState** एक विधि है जिसका एएसपी.नेट फ्रेमवर्क डिफ़ॉल्ट रूप से उपयोग करता है वेब पेज के बीच पेज और नियंत्रण मानों को **संरक्षित करने के लिए**। जब पेज के लिए HTML रेंडर किया जाता है, पेज की वर्तमान स्थिति और पोस्टबैक के दौरान रखे जाने वाले मानों को base64-कोड किए गए स्ट्रिंग में संकलित किया जाता है और ViewState छिपे हुए फ़ील्ड या फ़ील्ड में आउटपुट किया जाता है।\
ViewState सूचना के लिए निम्नलिखित गुणों या गुणों का उपयोग किया जा सकता है:
आप ViewState को MAC से सुरक्षित होने की पहचान करने के लिए इस पैरामीटर को समेत करने वाला एक अनुरोध को BurpSuite के साथ कैप्चर करके पहचानने का प्रयास कर सकते हैं:
यदि Mac पैरामीटर को सुरक्षित करने के लिए उपयोग नहीं किया जाता है, तो आप [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) का उपयोग करके इसे शोषण कर सकते हैं।
डेवलपर्स ViewState को एक HTTP अनुरोध का हिस्सा नहीं बनाने के लिए हटा सकते हैं (उपयोगकर्ता को यह कुकी प्राप्त नहीं होगी)।
हम मान सकते हैं कि यदि ViewState मौजूद नहीं है, तो उनका अमलन किया गया है ViewState डेसीरियलाइज़ेशन के संबंध में किसी भी संभावित सुरक्षा खतरे से सुरक्षित है।
हालांकि, ऐसा नहीं है। यदि हम अनुरोध बॉडी में ViewState पैरामीटर जोड़ते हैं और ysoserial का उपयोग करके बनाए गए हमारे सीरीकलाइज़ किए गए पेलोड को भेजते हैं, तो हम अभी भी कोड निष्पादन प्राप्त कर सकते हैं जैसा कि मामला 1 में दिखाया गया है।
इस बार पैरामीटर MAC सुरक्षित है, इसलिए हम हमला सफलतापूर्वक करने के लिए पहले उपयोग किए गए कुंजी की आवश्यकता होगी। इस मामले में, BurpSuite हमें बताएगा कि पैरामीटर MAC सुरक्षित है:
आप [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) का उपयोग करके उपयोग किए गए कुंजी को खोजने का प्रयास कर सकते हैं।
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) एक और उपकरण है जो ज्ञात मशीन कुंजी की पहचान कर सकता है। यह Python में लिखा गया है, इसलिए Blacklist3r की तरह यहां कोई Windows आवश्यकता नहीं है। .NET व्यूस्टेट के लिए, एक "python blacklist3r" उपयोग करने का सबसे तेज़ तरीका है।
जब `_VIEWSTATEGENERATOR` पैरामीटर **सर्वर द्वारा भेजा नहीं जाता है**, तब आपको `--generator` पैरामीटर **प्रदान करने की आवश्यकता नहीं होती है लेकिन ये पैरामीटर**:
इस मामले में, Burp नहीं पता लगाता है कि क्या पैरामीटर MAC के साथ सुरक्षित है क्योंकि यह मान्यता नहीं देता है। फिर, संभावित रूप से मानक को एन्क्रिप्ट किया गया है और आपको विकल्पतः संक्रमित करने के लिए अपने पेलोड को एन्क्रिप्ट करने के लिए **मशीन कुंजी की आवश्यकता होगी**।
**.NET 4.5 से पहले**, ASP.NET **अप्राकृत** \_`__VIEWSTATE`\_पैरामीटर को **स्वीकार** कर सकता है **यदि**`ViewStateEncryptionMode`**को**_**हमेशा**_**सेट किया गया है**। ASP.NET **केवल** अनुरोध में **`__VIEWSTATEENCRYPTED`** पैरामीटर की **उपस्थिति की जांच करता है**। **यदि कोई इस पैरामीटर को हटा देता है और अनएन्क्रिप्टेड पेलोड भेजता है, तो यह फिर भी प्रोसेस होगा।**
इसलिए, यदि मशीन कुंजी ज्ञात है (उदाहरण के लिए, एक निर्देशिका विभाजन मुद्दे के माध्यम से), [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) मामले 2 में उपयोग किया जा सकता है, ViewState डिसीरियलाइज़ेशन संरचना के उपयोग से RCE को करने के लिए।
* ViewState डिसीरियलाइज़ेशन संरचना को उपयोग करने के लिए अनुरोध से `__VIEWSTATEENCRYPTED` पैरामीटर को हटा दें, अन्यथा यह एक Viewstate MAC मान्यता त्रुटि लौटाएगा और उत्पादन विफल हो जाएगा जैसा कि चित्र में दिखाया गया है:
जैसा कि पिछले मामले में था, बर्प नहीं पहचानता कि क्या अनुरोध MAC सुरक्षित है क्योंकि **मान्यता एन्क्रिप्टेड होती है।** इसलिए, एक **मान्य पेलोड भेजने के लिए हमलावर को कुंजी की आवश्यकता होती है।**
आप [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) का उपयोग करके उपयोग हो रही कुंजी को खोजने का प्रयास कर सकते हैं:
आईआईएसडीआरपाठ और टार्गेटपेजपाठ के लिए अधिक विस्तृत विवरण के लिए [यहां देखें](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/)
एक मान्य मशीन कुंजी की पहचान करने के बाद, **अगला कदम है** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) **का उपयोग करके एक सीरीकृत पेलोड उत्पन्न करना**
यदि आपके पास `__VIEWSTATEGENERATOR` की मान है, तो आप उस मान के साथ `--generator` पैरामीटर का उपयोग करने की कोशिश कर सकते हैं और `--path` और `--apppath` पैरामीटर को छोड़ सकते हैं।
यदि ViewState डेसीरियलाइज़ेशन कमजोरी सफलतापूर्वक उपयोगिता कर रही है, तो हमलावार संचालित सर्वर को उपयोगकर्ता नाम समेत एक आउट ऑफ बैंड अनुरोध प्राप्त होगा। [सफल उपयोग का PoC](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)
**ViewStateUserKey** गुणक का उपयोग **CSRF हमले** के खिलाफ सुरक्षा के लिए किया जा सकता है। यदि ऐसी कोई कुंजी एप्लिकेशन में परिभाषित की गई है और हम पहले से चर्चित विधियों का उपयोग करके ViewState पेलोड उत्पन्न करने की कोशिश करते हैं, तो **पेलोड एप्लिकेशन द्वारा प्रसंस्कृत नहीं किया जाएगा**।\
आपको सही ढंग से पेलोड बनाने के लिए एक और पैरामीटर का उपयोग करना होगा:
सभी परीक्षण मामलों के लिए, यदि ViewState YSoSerial.Net पेलोड सफलतापूर्वक काम करता है तो सर्वर "500 आंतरिक सर्वर त्रुटि" के साथ प्रतिक्रिया देता है जिसमें प्रतिक्रिया सामग्री "यह पृष्ठ के लिए राज्य सूचना अमान्य है और यह क्षतिग्रस्त हो सकती है" होती है और हमें आउट ऑफ बैंड अनुरोध प्राप्त होता है जैसा कि नीचे दिखाया गया है:
* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने की आवश्यकता** है? [**SUBSCRIPTION PLANS**](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)**.**