<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) देखें!
**ViewState** ASP.NET में पृष्ठ और नियंत्रण डेटा को वेब पृष्ठों के बीच बनाए रखने के लिए डिफ़ॉल्ट तंत्र के रूप में काम करता है। पृष्ठ के HTML का रेंडरिंग करते समय, पृष्ठ की वर्तमान स्थिति और पोस्टबैक के दौरान संरक्षित करने वाले मान base64-संकेतित स्ट्रिंग में संज्ञात होते हैं। ये स्ट्रिंग्स फिर छुपे ViewState फ़ील्ड में रखे जाते हैं।
- MAC की सक्षमता को `EnableViewStateMac` विशेषता को सत्य पर सेट करके प्राप्त किया जाता है। यह ViewState डेटा के लिए पूर्णता सत्यापन प्रदान करता है।
- **Base64 + एन्क्रिप्टेड**:
- एन्क्रिप्शन उस समय लागू होता है जब `ViewStateEncryptionMode` विशेषता को सत्य पर सेट किया जाता है, जिससे ViewState डेटा की गोपनीयता सुनिश्चित होती है।
## परीक्षण मामले
छवि एक तालिका है जो .NET फ्रेमवर्क संस्करण पर आधारित ASP.NET में ViewState के लिए विभिन्न विन्यासों का विवरण देती है। यहाँ सामग्री का सारांश है:
1.**किसी भी .NET संस्करण के लिए**, जब MAC और एन्क्रिप्शन निष्क्रिय होते हैं, तो MachineKey की आवश्यकता नहीं होती है, और इसलिए इसे पहचानने के लिए कोई उपयुक्त विधि नहीं होती है।
2.**4.5 संस्करण से नीचे के संस्करणों के लिए**, यदि MAC सक्षम है लेकिन एन्क्रिप्शन नहीं है, तो MachineKey की आवश्यकता होती है। MachineKey को पहचानने की विधि को "Blacklist3r" कहा जाता है।
3.**4.5 संस्करण से नीचे के संस्करणों के लिए**, चाहे MAC सक्षम हो या न हो, यदि एन्क्रिप्शन सक्षम है, तो MachineKey की आवश्यकता होती है। MachineKey को पहचानने का कार्य "Blacklist3r - भविष्य विकास" के लिए है।
4.**4.5 संस्करण और ऊपर के संस्करणों के लिए**, MAC और एन्क्रिप्शन के सभी संयोजन (चाहे दोनों सत्य हों, या एक सत्य हो और दूसरा असत्य हो) के लिए MachineKey की आवश्यकता होती है। MachineKey को "Blacklist3r" का उपयोग करके पहचाना जा सकता है।
आप BurpSuite के साथ इस पैरामीटर को समाहित करने वाला अनुरोध कैप्चर करके देख सकते हैं कि ViewState को MAC से सुरक्षित किया गया है या नहीं। यदि Mac पैरामीटर को सुरक्षित करने के लिए उपयोग नहीं किया जाता है, तो आप [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) का उपयोग करके इसे उत्पीड़ित कर सकते हैं।
### परीक्षण मामला 1.5 – परीक्षण मामला 1 की तरह लेकिन सर्वर द्वारा ViewState कुकी नहीं भेजी जाती है
डेवलपर ViewState को HTTP अनुरोध का हिस्सा नहीं बनने दे सकते हैं (उपयोगकर्ता को यह कुकी नहीं मिलेगी)।\
कोई यह मान सकता है कि अगर ViewState मौजूद नहीं है, तो उनका कार्यान्वयन ViewState डेसीरियलाइजेशन के साथ किसी भी संभावित सुरक्षा दोषों से सुरक्षित है।\
हालांकि, ऐसा नहीं है। यदि हम अनुरोध शरीर में ViewState पैरामीटर जोड़ते हैं और ysoserial का उपयोग करके बनाए गए हमारे सीरीयलाइज़ किए गए पेलोड को भेजते हैं, तो हम फिर भी कोड क्रियान्वयन हासिल कर सकते हैं जैसा कि मामला 1 में दिखाया गया है।
आप [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) का उपयोग करके कुंजी को खोजने की कोशिश कर सकते हैं।
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) एक औजार है जो जाने वाले मशीन कुंजियों की पहचान कर सकता है। यह Python में लिखा गया है, इसलिए Blacklist3r की तरह, यह Windows डिपेंडेंसी नहीं है। .NET viewstates के लिए, "python blacklist3r" उपयोग करने का सबसे तेज तरीका है।
व्यूस्टेट परमीटर के वंशानुक्रमण के साथ विकल्प खोजने के लिए, `badsecrets` [**BBOT**](exploiting-\_\_viewstate-parameter.md) मॉड्यूल का उपयोग किया जा सकता है:
इसमें यह नहीं पता चलता कि पैरामीटर 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 मान्यता त्रुटि लौटाएगा और शोषण विफल हो जाएगा।
आप [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper)का उपयोग करके उपयोग की जा रही कुंजी खोजने का प्रयास कर सकते हैं:
[यहाँ से अधिक विस्तृत विवरण के लिए IISDirPath और TargetPagePath का संदर्भ देखें](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 डीसीरियलाइज़ेशन वलनरेबिलिटी का सफल शोषण एक हमलावादी नियंत्रित सर्वर को बाहरी अनुरोध में ले जाएगा, जिसमें उपयोगकर्ता नाम शामिल है। इस प्रकार का शोषण एक प्रमाण के संदर्भ में प्रदर्शित किया जाता है जिसे "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET" शीर्षक संसाधन के माध्यम से पाया जा सकता है। शोषण प्रक्रिया काम कैसे करती है और MachineKey की पहचान के लिए Blacklist3r जैसे उपकरणों का उपयोग कैसे करें के बारे में अधिक विवरण के लिए आप [PoC of Successful Exploitation](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC) की पेशकश की गई जानकारी की समीक्षा कर सकते हैं।
**ViewStateUserKey** गुणा CSRF हमले के खिलाफ **रक्षा** के लिए उपयोग किया जा सकता है। यदि ऐसी कुंजी को अनुप्रयोग में परिभाषित किया गया है और हम कोशिश करते हैं कि हम उस परियोजना में **ViewState** पेलोड उत्पन्न करें जिसे अब तक चर्चित विधियों के साथ, तो पेलोड अनुप्रयोग द्वारा प्रसंस्कृत नहीं किया जाएगा।\
आपको सही ढंग से पेलोड बनाने के लिए एक और पैरामीटर का उपयोग करना होगा:
सभी परीक्षण मामलों के लिए, यदि ViewState YSoSerial.Net payload **सफलतापूर्वक** काम करता है तो सर्वर “**500 आंतरिक सर्वर त्रुटि**” के साथ प्रतिक्रिया देता है जिसमें प्रतिक्रिया सामग्री “**इस पृष्ठ के लिए राज्य सूचना अमान्य है और यह भ्रष्ट हो सकती है**” होती है और हम OOB अनुरोध प्राप्त करते हैं।
अधिक जानकारी के लिए [यहाँ देखें]([**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/))
यदि आप **हैकिंग करियर** में रुचि रखते हैं और अहैकेबल को हैक करना चाहते हैं - **हम नियुक्ति कर रहे हैं!** (_चुस्त पोलिश लिखने और बोलने की आवश्यकता है_).
<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) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm)** पर फॉलो करें।**
* **अपने हैकिंग ट्रिक्स साझा करें** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos को PR जमा करके।