SMB Enumeration Checkliste (Cheat Sheet)

SMB Enumeration Checkliste (Cheat Sheet)

Die Enumeration ist ein essentieller Bestandteil eines jeden Penetrationstests. Während meiner OSCP Lernphase habe ich festgestellt, dass die Enumeration von SMB oft nicht so trivial ist, wie sie zunächst erscheint. Je nach Ziel und Randbedingungen sind manche Techniken und Tools mal mehr und mal weniger erfolgreich. Deshalb möchte ich euch hier eine kompakte „SMB Enumeration Checkliste“ bereitstellen, damit ihr bei Bedarf auf diese zurückgreifen könnt.

Selbstverständlich erhebt diese Liste keinen Anspruch auf Vollständigkeit (ohnehin kann eine solche Liste niemals „vollständig“ sein). Sollten euch weitere Tools/Techniken einfallen, so schreibt Sie gerne in die Kommentare – ich werde diese dann liebend gerne mit aufnehmen.

Kurze Randnotiz: Obwohl es technisch gesehen drei verschiedene Dinge sind, werden SMB, Samba und CIFS oft miteinander verwechselt oder sogar Synonym verwendet. Die Geschichte hierzu ist lang und reicht Jahrzehnte in die Vergangenheit. Die Kurzfassung lautet in etwa:

  • SMB (Server Message Block) ist das Protokoll

  • CIFS (Common Internet File System) ist ein alter Dialekt von SMB

  • Samba ist die Linux/Unix Implementierung des SMB-Protokolls

Inhalt

  • Checkliste

    • Hostname / NetBIOS-Name ermitteln

    • SMB Version / OS ermitteln

    • SMB Share (Freigaben) enumerieren

    • SMB Benutzer enumerieren

    • NULL Sessions prüfen

    • Kombinierte Scans

    • Schwachstellen prüfen

    • Share (Freigabe) mounten

  • Tools

  • SMB Versionsübersicht

  • SMB Portübersicht

Checkliste

Hostname / NetBIOS-Name ermitteln

nmblookup -A <ip>
enum4linux -n <ip>
crackmapexec smb <host>

SMB Version / OS ermitteln

smbver.sh <ip>
nmap <host> --script smb-os-discovery.nse
# ngrep starten
sudo ngrep -i -d tun0 's.?a.?m.?b.?a.*[[:digit:]]'

# Anschließend in einem separaten Tab/Terminal:
smbclient -L \\<ip>\<share> -U " "%" "
# Wireshark starten und Mitschnitt beginnen
sudo wireshark

# smbmap ausführen
smbmap -H <host>

# Wireskarh Mitschnitt stoppen und entsprechendem TCP Stream folgen
sudo msfconsole -q -x "use scanner/smb/smb_version; set RHOSTS <host>; run"

SMB Shares (Freigaben) enumerieren

smbmap -H <host>
smbmap -R <share_name> -H <host> # Dateien und Verzeichnisse rekursiv auflisten
smbmap -u '' -p '' -H <host>
smbmap -u guest -p '' -H <host>
echo exit | smbclient -L \\<host>
smbclient \\<ip>\<share> # Detailiertere Ausgabe
smbclient -L //<victim_ip> -N # Nachfrage nach Passwort mit “-N” unterdrücken
nmap --script smb-enum-shares.nse -p445 <host>
nmap --script smb-enum-shares --script-args smbuser=username,smbpass=password -p445 <host>
sudo nmap -sU -sS --script smb-enum-shares.nse -p U:137,T:139 <host>
nbtscan-unixwiz -f <host>

SMB Benutzer enumerieren

nmap -sU -sS --script=smb-enum-users -p U:137,T:139 <host>
python3 /usr/share/doc/python3-impacket/examples/samrdump.py <host>

Null Session prüfen

Als “Null Session” (oder Gastzugänge) werden Sitzungen bezeichnet, welche keine Authentifizierung erfordern und somit einen anonymen Zugang zum entsprechenden Dienst des Servers ermöglichen.

smbmap -H <host>
rpcclient -U "" -N <ip>
smbclient \\<ip>\<share name>
smbclient -L //<ip>

# Bei folgendem Fehler: "protocol negotiation failed: NT_STATUS_CONNECTION_DISCONNECTED"
smbclient -L //<ip> --option='client min protocol=NT1'
nbtscan -r <host>
crackmapexec smb <IP> -u '' -p '' --shares # Null User
crackmapexec smb <IP> -u 'username' -p 'password' --shares # Gast User
# Windows
net user \\<host>\IPC$ ““ /u:””

Kombinierte Scans

enum4linux -a <ip>
nmap --script=smb-enum* --script-args=unsafe=1 -T5 <host>
nmap --script "safe or smb-enum-*" -p 445 <host>
nmap --script smb-enum-domains.nse,smb-enum-groups.nse,smb-enum-processes.nse,smb-enum-sessions.nse,smb-enum-shares.nse,smb-enum-users.nse,smb-ls.nse,smb-mbenum.nse,smb-os-discovery.nse,smb-print-text.nse,smb-psexec.nse,smb-security-mode.nse,smb-server-stats.nse,smb-system-info.nse <host>
nmap --script=smb2-capabilities,smb-print-text,smb2-security-mode.nse,smb-protocols,smb2-time.nse,smb-psexec,smb-security-mode,smb-server-stats,smb-double-pulsar-backdoor,smb-system-info,smb-enum-groups,smb-enum-processes,smb-enum-shares,smb-enum-users,smb-ls,smb-os-discovery --script-args=unsafe=1 -T5 <host>
nmap -PN -p139,445 -T4 --script 'not brute and not dos and smb-*' -d <host>
nmap -sV -Pn -vv -p 445 --script='(smb*) and not (brute or broadcast or dos or external or fuzzer)' --script-args=unsafe=1 <host>
# Mit Authentifizierung (Benutzer / Passwort)
nmap -sV -Pn -vv -p 445 --script-args smbuser=<benutzer>,smbpass=<passwort> --script='(smb*) and not (brute or broadcast or dos or external or fuzzer)' --script-args=unsafe=1 <host>
# Alle SMB spezifischen NSE Scripte anzeigen
ls -l /usr/share/nmap/scripts/smb*

Schwachstellen prüfen

nmap --script smb-vuln* -p 139,445 <ip>
nmap -n -sV --script vuln <ip>
sudo msfconsole -q -x "use exploit/multi/samba/usermap_scrip; set RHOSTS <host>; set LHOST <lokale_ip>; run"

Share (Freigabe) mounten

mount -t cifs //<ip>/<share> <lokaler_mount_pfad>
mount -t cifs -o username=<user>,password=<pass>,domain=<domain> //<ip>/<share> <lokaler_mount_pfad>
# Freigabe als Gast mounten
sudo mount -t cifs -o rw,guest,vers=1.0 //<ip>/<share> <lokaler_mount_pfad>
# Linux GUI Tool
apt-get install smb4k -y
# Windows
net use Z: \<win-server>\<share> password/user:<domain>\<user> /savecred /p:no

Tools

nmblookup

Bei “nmblookup” handelt es sich um einen «NetBIOS over TCP/IP» Client zum Abfragen von NetBIOS-Namen.

enum4linux

Bei enum4linux handelt es sich um ein in Perl geschriebenes Tool, welches im Grunde „nur“ ein Wrapper um die Samba-Tools smbclient, rpclient, net und nmblookup darstellt. Das Programm führt jedoch entsprechende Funktionalitäten sinnvoll zusammen und bietet so eine schnelle und kompakte Übersicht über das Ziel.

crackmapexec

CrackMapExec (auch bekannt als CME) ist ein Post-Exploitation-Tool, das dabei hilft, die Sicherheit von Active Directory-Netzwerken automatisiert zu überprüfen.

smbver.sh

Ein simples Bash Script von rewardone (github.com/rewardone), welches auf die ersten 8 Pakete eines Null-Logins lauscht und die SMB-Version ermittelt.

#!/bin/sh
#Author: rewardone
#Description:
# Requires root or enough permissions to use tcpdump
# Will listen for the first 8 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 10 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

nmap

Nmap ("Network Mapper") ist freier und quelloffener Scanner zur Auswertung von Zielen in einem Netzwerk. Die Vielzahl seiner Möglichkeiten macht nmap zu einem sehr mächtigen und unverzichtbaren Werkzeug für Pentester.

ngrep

Ngrep (network grep) ist ein Open Source Netzwerk-Paketanalysator, welcher die pcap-Bibliothek und die GNU regex-Bibliothek verwendet und den Abgleich von Mustern oder regulären Ausdrücken mit dem aktuellen Netzwerkverkehr erlaubt. Dadurch können Datenpaket präzise mitgeschnitten und in einer benutzerfreundlichen Weise angezeigt werden.

smbclient

Einfaches (aber nützliches) Tool für den Zugriff auf SMB/CIFS-Ressourcen eines Servers.

Wireshark

Wireshark ist ein Open Source Netzwerk-Sniffer zur Analyse und Aufbereitung von Datenprotokollen.

smbmap

Mit SMBMap könnt ihr SMB Netzlaufwerke einer Domäne enumerieren. Das Tool unterstützt euch außerdem beim Abfragen von Laufwerksberechtigungen, Freigabeinhalten, Upload-/Download-Funktionalitäten und bei der Ausführung von Remote-Befehlen.

metasploit

Das Metasploit Framework ist das weltweit meistgenutzte Framework für Penetrationstests. Es unterstützt den Penetrationstester unter anderem bei der Überprüfung (und Ausnutzung) von Schwachstellen.

nbtscan-unixwiz

nbtscan-unixwiz basiert auf dem Standard-Windows Tool „nbtstat“ und sucht nach offenen NETBIOS-Nameservern in einem (lokalen oder entfernten) TCP/IP-Netzwerk.

samrdump.py

Hierbei handelt es sich um ein Beispiel-Script aus der Python „Impacket“ Sammlung, welches dabei unterstützt, Informationen mithilfe des SMB Protokolls auszulesen.

rpcclient

Tool zum Ausführen von clientseitigen MS-RPC-Funktionen. Wurde ursprünglich entwickelt, um MSRPC Funktionalitäten in Samba selbst zu testen, wird aber oft auch einfach dazu verwendet, Windows NT-Clients aus einer LINUX/UNIX Umgebung heraus zu verwalten.

nbtscan

NBTscan scannt Netzwerke nach NetBIOS-Namen, indem es NetBIOS-Statusabfragen an jede Adresse im entsprechenden Bereich sendet und die Antworten dann anzeigt.

net user

NET USER kann Benutzerkonten ändern, hinzufügen oder löschen. Werden keine Parameter übergeben, zeigt es eine Liste der Benutzerkonten auf dem Computer an.

smb4k

Smb4K ist ein grafisches Tool für das Einhängen von SMB Freigaben.

net use

Verbindet (oder trennt) einen Computer mit einer freigegebenen Ressource und kann auch persistente Netzverbindungen steuern. Werden keine Parameter übergeben, gibt es eine Liste der aktiven Netzwerkverbindungen zurück.

SMB Versionsübersicht

SMB Version

Windows version

CIFS

Microsoft Windows NT 4.0

SMB 1.0

Windows 2000, Windows XP, Windows Server 2003 and Windows Server 2003 R2

SMB 2.0

Windows Vista und Windows Server 2008

SMB 2.1

Windows 7 und Windows Server 2008 R2

SMB 3.0

Windows 8 und Windows Server 2012

SMB 3.0.2

Windows 8.1 und Windows Server 2012 R2

SMB 3.1.1

Windows 10 und Windows Server 2016

SMB Portübersicht

  • 137 (TCP): netbios-ns # NetBIOS Name Service (Namensdienst)

  • 137 (UDP): netbios-ns

  • 138 (TCP): netbios-dgm # NETBIOS Datagram Service

  • 138 (UDP): netbios-dgm

  • 139 (TCP): netbios-ssn # NETBIOS Session Service

  • 139 (UDP): netbios-ssn

  • 445 (TCP): microsoft-ds


1000 Zeichen übrig


Haftungsausschluss
«Nur wer versteht, wie Angreifer handeln, kann effektive Schutzmaßnahmen treffen.»

Die hier zur Verfügung gestellten Informationen dienen ausschließlich zu Lern- und Forschungszwecken. Der Missbrauch dieser Informationen kann zu strafrechtlichen Konsequenzen führen. Wir raten dringend davon ab und übernehmen keinerlei Haftung für etwaige Schäden.

Folge WhiteHat.de