139,445 - Pentesting SMB
Port 139
Il Network Basic Input Output System** (NetBIOS)** è un protocollo software progettato per consentire a applicazioni, PC e desktop all'interno di una rete locale (LAN) di interagire con l'hardware di rete e facilitare la trasmissione di dati attraverso la rete. L'identificazione e la localizzazione delle applicazioni software che operano su una rete NetBIOS avvengono attraverso i loro nomi NetBIOS, che possono avere una lunghezza massima di 16 caratteri e sono spesso distinti dal nome del computer. Una sessione NetBIOS tra due applicazioni viene avviata quando un'applicazione (che funge da client) emette un comando per "chiamare" un'altra applicazione (che funge da server) utilizzando TCP Port 139.
Port 445
Tecnicamente, la Porta 139 è riferita come ‘NBT over IP’, mentre la Porta 445 è identificata come ‘SMB over IP’. L'acronimo SMB sta per ‘Server Message Blocks’, che è anche modernamente conosciuto come il Common Internet File System (CIFS). Come protocollo di rete a livello applicativo, SMB/CIFS è principalmente utilizzato per abilitare l'accesso condiviso a file, stampanti, porte seriali e facilitare varie forme di comunicazione tra nodi su una rete.
Ad esempio, nel contesto di Windows, si evidenzia che SMB può operare direttamente su TCP/IP, eliminando la necessità di NetBIOS su TCP/IP, attraverso l'utilizzo della porta 445. Al contrario, su sistemi diversi, si osserva l'impiego della porta 139, indicando che SMB viene eseguito in congiunzione con NetBIOS su TCP/IP.
SMB
Il Server Message Block (SMB) protocol, che opera in un modello client-server, è progettato per regolare l'accesso ai file, alle directory e ad altre risorse di rete come stampanti e router. Utilizzato principalmente all'interno della serie di sistemi operativi Windows, SMB garantisce la compatibilità retroattiva, consentendo ai dispositivi con versioni più recenti del sistema operativo Microsoft di interagire senza problemi con quelli che eseguono versioni più vecchie. Inoltre, il progetto Samba offre una soluzione software gratuita, consentendo l'implementazione di SMB su sistemi Linux e Unix, facilitando così la comunicazione cross-platform tramite SMB.
Le condivisioni, che rappresentano parti arbitrarie del file system locale, possono essere fornite da un server SMB, rendendo la gerarchia visibile a un client parzialmente indipendente dalla struttura effettiva del server. Le Access Control Lists (ACLs), che definiscono i diritti di accesso, consentono un controllo dettagliato sui permessi degli utenti, inclusi attributi come execute
, read
e full access
. Questi permessi possono essere assegnati a singoli utenti o gruppi, in base alle condivisioni, e sono distinti dai permessi locali impostati sul server.
IPC$ Share
L'accesso alla condivisione IPC$ può essere ottenuto tramite una sessione anonima null, consentendo l'interazione con i servizi esposti tramite named pipes. L'utilità enum4linux
è utile a questo scopo. Utilizzata correttamente, consente di acquisire:
Informazioni sul sistema operativo
Dettagli sul dominio principale
Una compilazione di utenti e gruppi locali
Informazioni sulle condivisioni SMB disponibili
La politica di sicurezza del sistema effettiva
Questa funzionalità è fondamentale per gli amministratori di rete e i professionisti della sicurezza per valutare la postura di sicurezza dei servizi SMB (Server Message Block) su una rete. enum4linux
fornisce una visione completa dell'ambiente SMB del sistema target, essenziale per identificare potenziali vulnerabilità e garantire che i servizi SMB siano adeguatamente protetti.
Il comando sopra è un esempio di come enum4linux
potrebbe essere utilizzato per eseguire un'enumerazione completa contro un obiettivo specificato da target_ip
.
Cos'è NTLM
Se non sai cos'è NTLM o vuoi sapere come funziona e come abusarne, troverai molto interessante questa pagina su NTLM dove viene spiegato come funziona questo protocollo e come puoi trarne vantaggio:
NTLMEnumerazione del Server
Scansiona una rete cercando host:
Versione del server SMB
Per cercare possibili exploit per la versione SMB, è importante sapere quale versione viene utilizzata. Se queste informazioni non appaiono in altri strumenti utilizzati, puoi:
Usare il modulo ausiliario MSF _auxiliary/scanner/smb/smb_version
Oppure questo script:
Cerca exploit
Credenziali Possibili
Nome utente | Password comuni |
(vuoto) | (vuoto) |
ospite | (vuoto) |
Amministratore, admin | (vuoto), password, amministratore, admin |
arcserve | arcserve, backup |
tivoli, tmersrvd | tivoli, tmersrvd, admin |
backupexec, backup | backupexec, backup, arcada |
test, lab, demo | password, test, lab, demo |
Forza Bruta
Informazioni sull'Ambiente SMB
Ottenere Informazioni
Enumerare Utenti, Gruppi e Utenti Connessi
Queste informazioni dovrebbero già essere raccolte da enum4linux e enum4linux-ng
Enumerare gli utenti locali
Oneliner
Metasploit - Enumerare gli utenti locali
Enumerare LSARPC e SAMR rpcclient
rpcclient enumerationConnessione GUI da linux
Nel terminale:
xdg-open smb://cascade.htb/
Nella finestra del browser di file (nautilus, thunar, ecc)
smb://friendzone.htb/general/
Enumerazione delle cartelle condivise
Elenca le cartelle condivise
È sempre consigliato controllare se puoi accedere a qualcosa; se non hai credenziali, prova a utilizzare null credentials/guest user.
Connetti/Elenca una cartella condivisa
Enumerare manualmente le condivisioni di Windows e connettersi ad esse
Potrebbe essere possibile che tu sia limitato nella visualizzazione delle condivisioni della macchina host e quando provi a elencarle sembra che non ci siano condivisioni a cui connettersi. Pertanto, potrebbe valere la pena provare a connettersi manualmente a una condivisione. Per enumerare le condivisioni manualmente, potresti voler cercare risposte come NT_STATUS_ACCESS_DENIED e NT_STATUS_BAD_NETWORK_NAME, quando utilizzi una sessione valida (ad es. sessione nulla o credenziali valide). Questi possono indicare se la condivisione esiste e non hai accesso ad essa o se la condivisione non esiste affatto.
I nomi di condivisione comuni per i target Windows sono
C$
D$
ADMIN$
IPC$
PRINT$
FAX$
SYSVOL
NETLOGON
(Nomi di condivisione comuni da Network Security Assessment 3rd edition)
Puoi provare a connetterti a esse utilizzando il seguente comando
per questo script (utilizzando una sessione nulla)
esempi
Enumerare le condivisioni da Windows / senza strumenti di terze parti
PowerShell
CMD console
MMC Snap-in (grafico)
explorer.exe (grafico), inserisci \\<ip>\
per vedere le condivisioni disponibili non nascoste.
Montare una cartella condivisa
Scarica file
Leggi le sezioni precedenti per imparare come connetterti con credenziali/Pass-the-Hash.
Comandi:
mask: specifica la maschera utilizzata per filtrare i file all'interno della directory (ad es. "" per tutti i file)
recurse: attiva la ricorsione (predefinito: disattivato)
prompt: disattiva la richiesta per i nomi dei file (predefinito: attivato)
mget: copia tutti i file che corrispondono alla maschera dall'host alla macchina client
(Informazioni dalla manpage di smbclient)
Ricerca di Cartelle Condivise nel Dominio
Snaffler****
CrackMapExec spider.
-M spider_plus [--share <share_name>]
--pattern txt
Specialmente interessanti tra le condivisioni sono i file chiamati Registry.xml
poiché possono contenere password per gli utenti configurati con autologon tramite Group Policy. O i file web.config
poiché contengono credenziali.
La condivisione SYSVOL è leggibile da tutti gli utenti autenticati nel dominio. Qui puoi trovare molti diversi batch, VBScript e script PowerShell. Dovresti controllare gli script al suo interno poiché potresti trovare informazioni sensibili come password.
Leggi il Registro
Potresti essere in grado di leggere il registro utilizzando alcune credenziali scoperte. Impacket reg.py
ti consente di provare:
Post Exploitation
La configurazione predefinita di un server Samba si trova solitamente in /etc/samba/smb.conf
e potrebbe avere alcune configurazioni pericolose:
Impostazione | Descrizione |
| Consentire l'elenco delle condivisioni disponibili nella condivisione attuale? |
| Vietare la creazione e la modifica di file? |
| Consentire agli utenti di creare e modificare file? |
| Consentire la connessione al servizio senza utilizzare una password? |
| Rispettare i privilegi assegnati a SID specifici? |
| Quali permessi devono essere assegnati ai file appena creati? |
| Quali permessi devono essere assegnati alle directory appena create? |
| Quale script deve essere eseguito al login dell'utente? |
| Quale script deve essere eseguito quando lo script viene chiuso? |
| Dove deve essere memorizzato l'output dello script magico? |
Il comando smbstatus
fornisce informazioni sul server e su chi è connesso.
Autenticazione utilizzando Kerberos
Puoi autenticarti a kerberos utilizzando gli strumenti smbclient e rpcclient:
Eseguire Comandi
crackmapexec
crackmapexec può eseguire comandi abusando di qualsiasi mmcexec, smbexec, atexec, wmiexec, con wmiexec come metodo predefinito. Puoi indicare quale opzione preferisci utilizzare con il parametro --exec-method
:
Entrambe le opzioni creeranno un nuovo servizio (utilizzando \pipe\svcctl tramite SMB) nella macchina vittima e lo utilizzeranno per eseguire qualcosa (psexec caricherà un file eseguibile nella condivisione ADMIN$ e smbexec punterà a cmd.exe/powershell.exe e metterà negli argomenti il payload --tecnica senza file--). Ulteriori informazioni su psexec e smbexec. In kali si trova in /usr/share/doc/python3-impacket/examples/
Usando parameter-k
puoi autenticarti contro kerberos invece di NTLM
wmiexec/dcomexec
Esegui silenziosamente una shell di comando senza toccare il disco o avviare un nuovo servizio utilizzando DCOM tramite port 135. In kali si trova in /usr/share/doc/python3-impacket/examples/
Utilizzando parameter-k
puoi autenticarti contro kerberos invece di NTLM
Esegui comandi tramite il Task Scheduler (utilizzando \pipe\atsvc tramite SMB). In kali si trova in /usr/share/doc/python3-impacket/examples/
Impacket reference
https://www.hackingarticles.in/beginners-guide-to-impacket-tool-kit-part-1/
Forzare le credenziali degli utenti
Questo non è raccomandato, potresti bloccare un account se superi il numero massimo di tentativi consentiti
Attacco di relay SMB
Questo attacco utilizza il toolkit Responder per catturare le sessioni di autenticazione SMB su una rete interna e rilanciarle a una macchina target. Se la sessione di autenticazione ha successo, ti porterà automaticamente in una shell di sistema. Ulteriori informazioni su questo attacco qui.
SMB-Trap
La libreria Windows URLMon.dll tenta automaticamente di autenticarsi con l'host quando una pagina cerca di accedere a qualche contenuto tramite SMB, ad esempio: img src="\\10.10.10.10\path\image.jpg"
Questo avviene con le funzioni:
URLDownloadToFile
URLDownloadToCache
URLOpenStream
URLOpenBlockingStream
Che sono utilizzate da alcuni browser e strumenti (come Skype)
SMBTrap utilizzando MitMf
Furto di NTLM
Simile al SMB Trapping, piantare file dannosi su un sistema target (via SMB, ad esempio) può provocare un tentativo di autenticazione SMB, consentendo di intercettare l'hash NetNTLMv2 con uno strumento come Responder. L'hash può quindi essere decifrato offline o utilizzato in un attacco di relay SMB.
Comandi automatici HackTricks
Last updated