<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong><ahref="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert) के साथ</strong></a><strong>!</strong></summary>
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@hacktricks_live**](https://twitter.com/hacktricks_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks और HackTricks Cloud** github repos में PRs सबमिट करके।
**सिरियलाइजेशन** को एक विधि के रूप में समझा जाता है जिसमें एक ऑब्जेक्ट को एक ऐसे प्रारूप में परिवर्तित करना शामिल है जो संरक्षित किया जा सकता है, जिसका उद्देश्य या तो ऑब्ज
यदि आप परिणामों की दिशा देखते हैं तो आप देख सकते हैं कि फ़ंक्शन **`__wakeup`** और **`__destruct`** को जब ऑब्जेक्ट को डीसीरियलाइज़ किया जाता है, तो वे कॉल किए जाते हैं। ध्यान दें कि कई ट्यूटोरियल में आपको मिलेगा कि **`__toString`** फ़ंक्शन को किसी विशेषता को प्रिंट करने की कोशिश करने पर कॉल किया जाता है, लेकिन ऐसा लगता है कि **अब यह हो नहीं रहा है**।
आप यहाँ **PHP उदाहरण** को पढ़ सकते हैं: [https://www.notsosecure.com/remote-code-execution-via-php-unserialize/](https://www.notsosecure.com/remote-code-execution-via-php-unserialize/), यहाँ [https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf](https://www.exploit-db.com/docs/english/44756-deserialization-vulnerability.pdf) या यहाँ [https://securitycafe.ro/2015/01/05/understanding-php-object-injection/](https://securitycafe.ro/2015/01/05/understanding-php-object-injection/)
[**PHPGGC**](https://github.com/ambionics/phpggc) आपको PHP डिसीरियलाइजेशन का दुरुपयोग करने के लिए payloads उत्पन्न करने में मदद कर सकता है।\
ध्यान दें कि कई मामलों में आपको एप्लिकेशन के स्रोत कोड में डिसीरियलाइजेशन का दुरुपयोग करने का कोई तरीका नहीं मिलेगा लेकिन आप **बाहरी PHP एक्सटेंशन के कोड का दुरुपयोग कर सकते हैं**।\
तो, अगर संभव हो तो, सर्वर का `phpinfo()` जांचें और **इंटरनेट पर खोजें** (और **PHPGGC** के **गैजेट्स** पर भी) कुछ संभावित गैजेट जिनका आप दुरुपयोग कर सकते हैं।
अगर आपने एक LFI पाया है जो केवल फ़ाइल पढ़ रहा है और उसके भीतर PHP कोड को नहीं चला रहा है, उदाहरण के लिए _**file\_get\_contents(), fopen(), file() या file\_exists(), md5\_file(), filemtime() या filesize()**_ की तरह के फ़ंक्शनों का उपयोग करके। तो आप **phar** प्रोटोकॉल का उपयोग करके **एक फ़ाइल** पढ़ते समय हो रही **डिसीरियलाइजेशन** का दुरुपयोग करने की कोशिश कर सकते हैं।\
निम्नलिखित पृष्ठ उन python पुस्तकालयों में **असुरक्षित डेसीरियलाइजेशन का दुरुपयोग करने** की तकनीक प्रस्तुत करता है और एक उपकरण के साथ समाप्त होता है जिसका उपयोग **Pickle, PyYAML, jsonpickle और ruamel.yaml** के लिए RCE डेसीरियलाइजेशन पेलोड उत्पन्न करने के लिए किया जा सकता है:
JS **PHP या Python की तरह "जादू" फ़ंक्शन नहीं** है जो केवल एक ऑब्जेक्ट बनाने के लिए निष्पादित किए जाएंगे। लेकिन इसमें कुछ **फ़ंक्शन** हैं जो **सीधे नहीं कहते हुए भी अक्सर उपयोग किए जाते हैं** जैसे **`toString`**, **`valueOf`**, **`toJSON`**।\
डेसीरियलाइजेशन का दुरुपयोग करते समय आप इन फ़ंक्शनों को **कंप्रोमाइज** कर सकते हैं ताकि अन्य कोड को निष्पादित किया जा सके (प्रोटोटाइप पोल्यूशन का दुरुपयोग करना संभावित है)।
एक और **"जादू" तरीका एक फ़ंक्शन को सीधे नहीं बुलाए जाने के लिए** एक ऑब्जेक्ट को **कंप्रोमाइज** करना है जो एक असिंक फ़ंक्शन द्वारा वापस दिया जाता है (प्रमिस)। क्योंकि, अगर आप उस **वापसी ऑब्ज
जैसा पहले इंडिकेट किया गया था, यह लाइब्रेरी `_$$ND_FUNC$$_` के बाद कोड प्राप्त करेगी और `eval` का उपयोग करके **इसे चलाएगी**। इसलिए, **कोड स्वत: चलाने** के लिए आप **फंक्शन निर्माण** भाग और अंतिम ब्रैकेट को हटा सकते हैं और **बस निम्नलिखित उदाहरण में एक JS वनलाइनर चला सकते हैं**:
आप इस **[यहाँ](https://opsecx.com/index.php/2017/02/08/exploiting-node-js-deserialization-bug-for-remote-code-execution/)** वुलनरेबिलिटी को कैसे शोषित करने के बारे में **अधिक जानकारी** पा सकते हैं।
**funcster** का एक महत्वपूर्ण पहलू यह है कि **मानक इनबिल्ट ऑब्जेक्ट्स** की अप्राप्यता; वे पहुंचने योग्य दायरे के बाहर हैं। यह प्रतिबंध किसी भी मानक इनबिल्ट ऑब्जेक्ट्स पर विधियों को आमंत्रित करने की कोशिश करने वाले कोड का निष्पादन रोकता है, जिससे उत्पन्न होने वाली अपवाद जैसे कि `"ReferenceError: console is not defined"` जब आप `console.log()` या `require(something)` जैसे कमांड का उपयोग करते हैं।
इस प्रतिबंध के बावजूद, वैशिष्ट्यपूर्ण दृष्टिकोण को पूरी पहुंच की पुनर्स्थापना संभव है, जिसमें सभी मानक इनबिल्ट ऑब्जेक्ट्स शामिल हैं। इस प्रतिबंध को छलकरने के लिए एक विशिष्ट दृष्टिकोण का उपयोग करके ग्लोबल संदर्भ का सीधा उपयोग करके, यह संभव है। उदाहरण के लिए, निम्नलिखित स्निपेट का उपयोग करके पहुंच पुनः स्थापित की जा सकती है:
**अधिक जानकारी के लिए इस स्रोत को पढ़ें**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**।**
**serialize-javascript** पैकेज को केवल सिरियलाइज़ेशन के उद्देश्य के लिए डिज़ाइन किया गया है, जिसमें कोई भी बिल्ट-इन डिसीरियलाइज़ेशन क्षमताएँ नहीं हैं। उपयोगकर्ताओं को डिसीरियलाइज़ेशन के लिए अपनी खुद की विधि का अमल करने के लिए जिम्मेदार होते हैं। सीरियलाइज़ किए गए डेटा को डिसीरियलाइज़ करने के लिए आधिकारिक उदाहरण द्वारा `eval` का सीधा उपयोग सुझाया गया है:
**अधिक जानकारी के लिए इस स्रोत को पढ़ें**](https://www.acunetix.com/blog/web-security-zone/deserialization-vulnerabilities-attacking-deserialization-in-js/)**.**
Java में, **डेसीरियलाइजेशन कॉलबैक डेसीरियलाइजेशन प्रक्रिया के दौरान क्रियान्वित किए जाते हैं**। हमलावर इस क्रिया का शिकार बन सकते हैं जो दुरुपयोगी पेलोड का निर्माण करते हैं जो इन कॉलबैक को ट्रिगर करते हैं, जिससे हानिकारक क्रियाएँ क्रियान्वित हो सकती हैं।
काले बॉक्स परीक्षण के लिए, विशेष **हस्ताक्षर या "मैजिक बाइट्स"** खोजें जो जावा सीरीयलाइज्ड ऑब्जेक्ट्स को दर्शाते हैं (`ObjectInputStream` से उत्पन्न):
* हेक्साडेसिमल पैटर्न: `AC ED 00 05`।
* बेस64 पैटर्न: `rO0`।
* HTTP प्रतिक्रिया हेडर जिसमें `Content-type` को `application/x-java-serialized-object` सेट किया गया है।
* पूर्व संकुचन को दर्शाने वाला हेक्साडेसिमल पैटर्न: `1F 8B 08 00`।
* पूर्व संकुचन को दर्शाने वाला बेस64 पैटर्न: `H4sIA`।
*`.faces` एक्सटेंशन और `faces.ViewState` पैरामीटर के साथ वेब फ़ाइलें। एक वेब एप्लिकेशन में इन पैटर्न की खोज को जांचने के लिए एक जांच को प्रेरित करना चाहिए जैसा कि [Java JSF ViewState Deserialization](java-jsf-viewstate-.faces-deserialization.md) के पोस्ट में विस्तार से वर्णित है।
### यदि आप जानना चाहते हैं कि एक जावा डिसीरियलाइज़ड अभियांत्रिकी कैसे काम करती है, तो आपको [**बेसिक जावा डिसीरियलाइज़ेशन**](basic-java-deserialization-objectinputstream-readobject.md), [**जावा DNS डिसीरियलाइज़ेशन**](java-dns-deserialization-and-gadgetprobe.md), और [**कॉमन्स कलेक्शन 1 पेलोड**](java-transformers-to-rutime-exec-payload.md) पर नजर डालनी चाहिए।
आप **सभी पुस्तकालयों** की जांच कर सकते हैं जिन्हें वंशवादी माना जाता है और जिनके लिए [**Ysoserial**](https://github.com/frohoff/ysoserial) एक उत्पीड़न प्रदान कर सकता है। या आप [Java-Deserialization-Cheat-Sheet](https://github.com/GrrrDog/Java-Deserialization-Cheat-Sheet#genson-json) पर दिखाए गए पुस्तकालयों की जांच कर सकते हैं।\
आप [**gadgetinspector**](https://github.com/JackOfMostTrades/gadgetinspector) का उपयोग करके उत्पीड़न श्रृंखलाओं की खोज कर सकते हैं जो उत्पीड़न के लिए उपयोग किए जा सकते हैं।\
**gadgetinspector** को चलाते समय (इसे बिल्ड करने के बाद) उसके द्वारा जा रही सभी चेतावनियों/त्रुटियों की चिंता न करें और उसे समाप्त होने दें। यह सभी खोजों को _gadgetinspector/gadget-results/gadget-chains-year-month-day-hore-min.txt_ के तहत लिखेगा। कृपया ध्यान दें कि **gadgetinspector एक उत्पीड़न नहीं बनाएगा और यह गलत सकारात्मक परिणाम दिखा सकता है**।
बर्प एक्सटेंशन [**gadgetprobe**](java-dns-deserialization-and-gadgetprobe.md) का उपयोग करके आप **किस पुस्तकालयों का उपयोग किया जा रहा है** (और किस संस्करण) को पहचान सकते हैं। इस जानकारी के साथ, यह **वंशवाद को उत्पीड़ित करने के लिए एक पेलोड चुनना सरल हो सकता है**।\
[**इसे और अधिक जानने के लिए GadgetProbe पढ़ें**](java-dns-deserialization-and-gadgetprobe.md#gadgetprobe)**।**\
GadgetProbe **`ObjectInputStream` उत्पीड़न** पर ध्यान केंद्रित है।
बर्प एक्सटेंशन [**Java Deserialization Scanner**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner) का उपयोग करके आप ysoserial के साथ उत्पीड़न करने योग्य पुस्तकालयों की **पहचान** कर सकते हैं और उन्हें **उत्पीड़ित** कर सकते हैं।\
[**जानने के लिए इसे Java Deserialization Scanner के बारे में और पढ़ें**](java-dns-deserialization-and-gadgetprobe.md#java-deserialization-scanner)\
Java Deserialization Scanner **`ObjectInputStream`** उत्पीड़न पर ध्यान केंद्रित है।
आप [**Freddy**](https://github.com/nccgroup/freddy) का उपयोग करके **बर्प** में उत्पीड़न संकटों की **पहचान** कर सकते हैं। यह प्लगइन **केवल `ObjectInputStream`** संबंधित संकटों की पहचान करेगा बल्कि **Json** और **Yml** उत्पीड़न पुस्तकालयों से भी vulns की पहचान करेगा। सक्रिय मोड में, यह उन्हें सुनी या DNS पेलोड का उपयोग करके पुष्टि करने की कोशिश करेगा।\
[**आप फ्रेडी के बारे में अधिक जानकारी यहाँ पा सकते हैं।**](https://www.nccgroup.com/us/about-us/newsroom-and-events/blog/2018/june/finding-deserialisation-issues-has-never-been-easier-freddy-the-serialisation-killer/)
सभी यह नहीं है कि सर्वर द्वारा कोई भी वंशवादी पुस्तकालय का उपयोग किया जा रहा है या नहीं। कभी-कभी आप संचित वस्तु के अंदर के डेटा को बदल सकते हैं और कुछ जांचों को छलकर निकाल सकते हैं (शायद एक वेब ऐप्लिकेशन के अंदर व्यवस्थापक विशेषाधिकार प्रदान कर सकते हैं)।\
अगर आपको एक जावा संचित वस्तु मिलती है जो एक वेब एप्लिकेशन में भेजी जा रही है, तो आप [**SerializationDumper**](https://github.com/NickstaDB/SerializationDumper) का उपयोग कर सकते हैं ताकि भेजे जा रहे संचयन वस्तु को एक अधिक मानवीय पठनीय स्वरूप में प्रिंट कर सकें। जानना कि आप कौन से डेटा भेज रहे हैं उसे संशोधित करना और कुछ जांचों को छलकर निकालना सरल होगा।
जावा वंशवादों का उत्पीड़न करने के लिए मुख्य उपकरण [**ysoserial**](https://github.com/frohoff/ysoserial) है ([**यहाँ से डाउनलोड करें**](https://jitpack.io/com/github/frohoff/ysoserial/master-SNAPSHOT/ysoserial-master-SNAPSHOT.jar))। आप [**ysoseral-modified**](https://github.com/pimps/ysoserial-modified) का भी उपयोग कर सकते हैं जो आपको जटिल कमांडों का उपयोग करने देगा (उदाहरण के लिए पाइप्स के साथ)।\
ध्यान दें कि यह उपकरण **`ObjectInputStream`** का उत्पीड़न करने पर **केंद्रित** है।\
मैं **"URLDNS"** पेलोड का उपयोग **RCE** पेलोड से पहले करने की सिफारिश करूंगा ताकि प्रविष्टि संभव है या नहीं यह जांचने के लिए। फिर भी, ध्यान दें कि शायद "URLDNS" पेलोड काम नहीं कर रहा हो लेकिन अन्य RCE पेलोड काम कर रहा हो।
जब **java.lang.Runtime.exec()** के लिए payload बनाते हैं तो आप **विशेष वर्ण** जैसे ">" या "|" का उपयोग नहीं कर सकते हैं ताकि एक क्रिया के आउटपुट को रीडायरेक्ट कर सकें, "$()" का उपयोग करके कमांड को निष्पादित कर सकें या यहाँ तक कि **कमांड को अलग-अलग अर्ग्यूमेंट्स** के साथ अलग करने के लिए **अंतरिक्ष** से अलग नहीं कर सकते हैं (आप `echo -n "hello world"` कर सकते हैं लेकिन आप `python2 -c 'print "Hello world"'` नहीं कर सकते हैं)। Payload को सही ढंग से एन्कोड करने के लिए आप [इस वेबपेज](http://www.jackson-t.ca/runtime-exec-payloads.html) का उपयोग कर सकते हैं।
विन्डोज और लिनक्स के लिए **सभी संभावित कोड निष्पादन** payloads बनाने के लिए अगले स्क्रिप्ट का उपयोग करें और फिर उन्हें संक्रमित वेब पेज पर परीक्षण करें:
आप **इस्तेमाल** कर सकते हैं [**https://github.com/pwntester/SerialKillerBypassGadgetCollection**](https://github.com/pwntester/SerialKillerBypassGadgetCollection) **ysoserial के साथ अधिक उत्पीड़न बनाने के लिए**। इस टूल के बारे में अधिक जानकारी **टॉक के स्लाइड्स** में है जहाँ टूल प्रस्तुत किया गया था: [https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1](https://es.slideshare.net/codewhitesec/java-deserialization-vulnerabilities-the-forgotten-bug-class?next\_slideshow=1)
[**marshalsec** ](https://github.com/mbechler/marshalsec)का उपयोग किया जा सकता है विभिन्न **Json** और **Yml** सिरीकरण पुस्तकालयों को उत्पीड़ित करने के लिए।\
परियोजना को कॉम्पाइल करने के लिए मुझे `pom.xml` में इस **डिपेंडेंसी** को **जोड़ने** की आवश्यकता थी:
इस Java JSON पुस्तकालय के बारे में अधिक जानकारी पढ़ें: [https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html](https://www.alphabot.com/security/blog/2020/java/Fastjson-exceptional-deserialization-vulnerabilities.html)
* यदि आप कुछ ysoserial payloads का परीक्षण करना चाहते हैं तो आप **इस वेब ऐप** को **चला सकते हैं**: [https://github.com/hvqzao/java-deserialize-webapp](https://github.com/hvqzao/java-deserialize-webapp)
- **HTTP अनुरोध**: धारणीकरण पैरामीटर, ViewState, कुकी आदि के प्रबंधन में व्यापक रूप से प्रयुक्त होता है।
- **RMI (Remote Method Invocation)**: Java RMI प्रोटोकॉल, जो पूरी तरह से धारणीकरण पर निर्भर है, जावा एप्लिकेशन में दूरस्थ संचार के लिए एक मूलग्रंथ है।
- **RMI ओवर HTTP**: यह विधि जावा आधारित मोटे क्लाइंट वेब एप्लिकेशन्स द्वारा सामान्य रूप से प्रयुक्त की जाती है, जो सभी ऑब्जेक्ट संचार के लिए धारणीकरण का उपयोग करती है।
- **JMX (Java Management Extensions)**: JMX नेटवर्क के माध्यम से ऑब्जेक्ट्स को भेजने के लिए धारणीकरण का उपयोग करता है।
- **कस्टम प्रोटोकॉल**: जावा में मानक अभ्यास शामिल है जिसमें कच्चे जावा ऑब्जेक्ट्स के प्रेषण का उपयोग किया जाता है, जो आगामी शोषण उदाहरणों में प्रदर्शित किया जाएगा।
**`java.io.ObjectInputStream` को कस्टमाइज़ करना** डेसीरियलाइज़ेशन प्रक्रियाओं को सुरक्षित बनाने के लिए एक व्यावहारिक दृष्टिकोण है। यह विधि उपयुक्त है जब:
**`resolveClass()`** मेथड को ओवरराइड करें ताकि डेसीरियलाइज़ेशन को केवल अनुमति प्राप्त कक्षाओं तक ही सीमित किया जा सके। इससे `Bicycle` कक्षा तक ही डेसीरियलाइज़ेशन की प्रतिबंधित किया जा सकता है, जैसे निम्नलिखित उदाहरण में:
**सुरक्षा में सुधार के लिए जावा एजेंट का उपयोग** एक विकल्प प्रदान करता है जब कोड संशोधन संभव नहीं होता। यह विधि मुख्य रूप से **हानिकारक कक्षाओं को ब्लैकलिस्ट करने** के लिए लागू होती है, जेवीएम पैरामीटर का उपयोग करके:
**सिरीकरण फ़िल्टर्स का लागू करना**: जावा 9 ने **`ObjectInputFilter`** इंटरफेस के माध्यम से सिरीकरण फ़िल्टर्स का परिचय किया, जो डेसीरियलाइज़ किए जाने से पहले सिरीकरण किए जाने वाले ऑब्ज
if (info.references() > MAX_REFERENCES) return Status.REJECTED; // Limit references
if (info.serialClass() != null && !allowedClasses.contains(info.serialClass().getName())) {
return Status.REJECTED; // Restrict to allowed classes
}
return Status.ALLOWED;
};
ObjectInputFilter.Config.setSerialFilter(filter);
```
**बेहतर सुरक्षा के लिए बाह्य पुस्तकालयों का उपयोग करना**: **NotSoSerial**, **jdeserialize**, और **Kryo** जैसी पुस्तकालय जावा डेसीरियलाइज़ेशन को नियंत्रित और मॉनिटर करने के लिए उन्नत सुविधाएं प्रदान करती हैं। ये पुस्तकालय व्हाइटलिस्टिंग या ब्लैकलिस्टिंग क्लासेस, डेसीरियलाइज़ेशन से पहले सिरीयलाइज़ किए गए ऑब्जेक्ट्स का विश्लेषण करने, और कस्टम सीरियलाइज़ेशन रणनीतियों को लागू करने जैसी अतिरिक्त सुरक्षा स्तर प्रदान कर सकती हैं।
**ysoserial.net** में एक **बहुत दिलचस्प पैरामीटर** भी है जो हर एक एक्सप्लॉइट काम कैसे करता है, इसे बेहतर समझने में मदद करता है: `--test`\
यदि आप इस पैरामीटर को इंडिकेट करते हैं तो **ysoserial.net****लोकली एक्सप्लॉइट की कोशिश करेगा,** ताकि आप यह जांच सकें कि आपका पेलोड सही ढंग से काम करेगा।\
यह पैरामीटर मददगार है क्योंकि यदि आप कोड की समीक्षा करते हैं तो आप निम्नलिखित तरह के कोड टुकड़े पाएंगे ([ObjectDataProviderGenerator.cs](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Generators/ObjectDataProviderGenerator.cs#L208)):
इसका मतलब है कि एक्सप्लॉइट का परीक्षण करने के लिए कोड [serializersHelper.JsonNet\_deserialize](https://github.com/pwntester/ysoserial.net/blob/c53bd83a45fb17eae60ecc82f7147b5c04b07e42/ysoserial/Helpers/SerializersHelper.cs#L539) को कॉल करेगा।
**पिछले कोड में उत्पन्न दुरुपयोग के लिए वंशीकरण योग्य है।** इसलिए अगर आप .Net एप्लिकेशन में कुछ समान ढूंढते हैं तो यह संभावना है कि वह एप्लिकेशन भी वंशीकरण के लिए भेद्य है।
इसलिए **`--test`** पैरामीटर हमें समझने में मदद करता है कि **कौन से कोड खंड वंशीकरण दुरुपयोग के लिए भेद्य हैं** जिन्हें **ysoserial.net** बना सकता है।
[**इस पोस्ट को देखें जिसमें बताया गया है कि .Net के \_\_ViewState पैरामीटर का दुरुपयोग कैसे किया जा सकता है**](exploiting-\_\_viewstate-parameter.md)**।** यदि आप **पहले से ही पीड़ित मशीन द्वारा उपयोग किए गए रहस्यों को जानते हैं, [**तो इस पोस्ट को पढ़ें जिसमें कोड कैसे चलाया जा सकता है**](exploiting-\_\_viewstate-knowing-the-secret.md)**।**
- **वंशीकरण करने के लिए उपयोग किए जा सकने वाले प्रकारों की सीमा निर्धारित करें**, .Net प्रकारों के साथ संगहित जोखिमों को समझें, जैसे `System.IO.FileInfo`, जो सर्वर फ़ाइलों की गुणवत्ता को संशोधित कर सकता है, जिससे नकारात्मक सेवा हमलों की ओर ले जा सकता है।
- **जोखिमपूर्ण गुणवत्ता वाले प्रकारों के साथ सतर्क रहें**, जैसे `System.ComponentModel.DataAnnotations.ValidationException` जिसमें उसकी `Value` गुणवत्ता हो, जिसका शोषण किया जा सकता है।
- **वंशीकरण प्रक्रिया पर प्रभाव डालने वाले हमलावरों से बचाव करने के लिए प्रकार निर्माण को सुरक्षित रूप से नियंत्रित करें**, जिससे `DataContractSerializer` या `XmlSerializer` भी भेद्य हो सकते हैं।
- **इंटरनेट एक्सेस वाले कोड से संभावित जोखिमपूर्ण कोड को अलग रखें** ताकि ज्ञात गैजेट्स को उद्घाटित न करें, जैसे WPF एप्लिकेशन में `System.Windows.Data.ObjectDataProvider` को अविश्वसनीय डेटा स्रोतों के लिए अनुप्रयोग करने से बचाएं।
रूबी में, वंशीकरण को **मार्शल** पुस्तकालय के दो विधियों द्वारा सुविधाजनक बनाया गया है। पहला विधि, जिसे **डंप** कहा जाता है, एक ऑब्जेक्ट को बाइट स्ट्रीम में परिवर्तित करने के लिए उपयोग किया जाता है। इस प्रक्रिया को वंशीकरण कहा जाता है। उल्टे, दूसरा विधि, **लोड** नामक है, जिसका उपयोग एक बाइट स्ट्रीम को फिर से एक ऑब्जेक्ट में बदलने के लिए किया जाता है, जिसे वंशीकरण कहा जाता है।
Ruby On Rails को अनुभवित करने के लिए अन्य RCE श्रृंखला: [https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/](https://codeclimate.com/blog/rails-remote-code-execution-vulnerability-explained/)
* यदि आप अपनी कंपनी का विज्ञापन **HackTricks** में देखना चाहते हैं या **HackTricks को PDF में डाउनलोड** करना चाहते हैं, तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!