139,445 - Pentesting SMB
Porta 139
Il Sistema di Input/Output di Base della Rete** (NetBIOS)** è un protocollo software progettato per consentire alle 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 in una rete NetBIOS sono raggiunte attraverso i loro nomi NetBIOS, che possono essere lunghi fino a 16 caratteri e spesso sono diversi dal nome del computer. Una sessione NetBIOS tra due applicazioni viene avviata quando un'applicazione (agendo come client) emette un comando per "chiamare" un'altra applicazione (agendo come server) utilizzando la porta TCP 139.
Porta 445
Dal punto di vista tecnico, la Porta 139 è indicata come 'NBT su IP', mentre la Porta 445 è identificata come 'SMB su IP'. L'acronimo SMB sta per 'Server Message Blocks', noto anche modernamente come Common Internet File System (CIFS). Come protocollo di rete a livello applicativo, SMB/CIFS è principalmente utilizzato per consentire l'accesso condiviso a file, stampanti, porte seriali e facilitare vari tipi di comunicazione tra nodi in una rete.
Ad esempio, nel contesto di Windows, si sottolinea che SMB può funzionare direttamente su TCP/IP, eliminando la necessità di NetBIOS su TCP/IP, attraverso l'utilizzo della porta 445. Al contrario, su diversi sistemi, si osserva l'impiego della porta 139, indicando che SMB viene eseguito in concomitanza con NetBIOS su TCP/IP.
SMB
Il protocollo Server Message Block (SMB), 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. Principalmente utilizzato all'interno della serie di sistemi operativi Windows, SMB garantisce la compatibilità all'indietro, consentendo ai dispositivi con versioni più recenti del sistema operativo di Microsoft di interagire senza problemi con quelli che eseguono versioni più vecchie. Inoltre, il progetto Samba offre una soluzione software gratuita che consente l'implementazione di SMB su sistemi Linux e Unix, facilitando così la comunicazione multi-piattaforma 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 in parte indipendente dalla struttura effettiva del server. Le Liste di Controllo degli Accessi (ACL), che definiscono i diritti di accesso, consentono un controllo dettagliato sui permessi degli utenti, inclusi attributi come esegui
, leggi
e accesso completo
. Questi permessi possono essere assegnati a singoli utenti o gruppi, in base alle condivisioni, e sono distinti dai permessi locali impostati sul server.
Condivisione IPC$
L'accesso alla condivisione IPC$ può essere ottenuto tramite una sessione null anonima, 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
Un elenco 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 di destinazione, che è 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 target specificato da target_ip
.
Cos'è NTLM
Se non sai cos'è NTLM o vuoi sapere come funziona e come sfruttarlo, troverai molto interessante questa pagina su NTLM dove viene spiegato come funziona questo protocollo e come puoi trarne vantaggio:
pageNTLMEnumerazione del server
Scansiona una rete alla ricerca di host:
Versione del server SMB
Per cercare possibili exploit alla versione SMB è importante sapere quale versione viene utilizzata. Se queste informazioni non appaiono in altri strumenti utilizzati, è possibile:
Utilizzare il modulo ausiliario MSF _auxiliary/scanner/smb/smb_version
Oppure questo script:
Ricerca exploit
Possibili Credenziali
Nome utente(i) | Password comuni |
(vuoto) | (vuoto) |
guest | (vuoto) |
Administrator, admin | (vuoto), password, administrator, 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
Elenca Utenti, Gruppi e Utenti Loggati
Queste informazioni dovrebbero già essere state raccolte tramite enum4linux e enum4linux-ng
Enumerare gli utenti locali
One-liner Un comando che esegue una singola istruzione in una sola riga di testo.
Metasploit - Elencazione degli utenti locali
Enumerazione di LSARPC e SAMR rpcclient
pagerpcclient 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
Elenco delle cartelle condivise
È sempre consigliabile verificare se è possibile accedere a qualcosa, se non si dispone di credenziali, provare a utilizzare credenziali nulle/utente ospite.
Connetti/Elenca una cartella condivisa
Enumerare manualmente le condivisioni di Windows e connettersi ad esse
Potrebbe essere possibile che tu sia limitato nel visualizzare qualsiasi condivisione 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 manualmente le condivisioni potresti cercare risposte come NT_STATUS_ACCESS_DENIED e NT_STATUS_BAD_NETWORK_NAME, quando si utilizza una sessione valida (ad esempio una sessione nulla o credenziali valide). Queste possono indicare se la condivisione esiste e non hai accesso ad essa o se la condivisione non esiste affatto.
I nomi comuni delle condivisioni per i target Windows sono
C$
D$
ADMIN$
IPC$
PRINT$
FAX$
SYSVOL
NETLOGON
(Nomi comuni delle condivisioni 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 utilizzare strumenti di terze parti
PowerShell
Console CMD
MMC Snap-in (grafico)
explorer.exe (grafico), inserisci \\<ip>\
per vedere le condivisioni non nascoste disponibili.
Montare una cartella condivisa
Scaricare file
Leggi le sezioni precedenti per imparare come connetterti con le credenziali/Pass-the-Hash.
Comandi:
mask: specifica la maschera utilizzata per filtrare i file all'interno della directory (ad esempio, "" per tutti i file)
recurse: attiva la ricorsione (impostazione predefinita: disattivata)
prompt: disattiva la richiesta di nomi file (impostazione predefinita: attivata)
mget: copia tutti i file corrispondenti alla maschera dalla macchina host alla macchina client
(Informazioni dalla pagina di manuale di smbclient)
Ricerca Cartelle Condivise del Dominio
Snaffler****
CrackMapExec spider.
-M spider_plus [--share <share_name>]
--pattern txt
Particolarmente interessanti tra le condivisioni ci sono i file chiamati Registry.xml
in quanto possono contenere password per gli utenti configurati con autologon tramite Group Policy. Oppure i file web.config
in quanto contengono credenziali.
La condivisione SYSVOL è leggibile da tutti gli utenti autenticati nel dominio. Lì potresti trovare molti diversi script batch, VBScript e 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 Esploitation
La configurazione predefinita di un server Samba di solito si trova in /etc/samba/smb.conf
e potrebbe avere alcune configurazioni pericolose:
Impostazione | Descrizione |
| Consentire di elencare le condivisioni disponibili nella condivisione corrente? |
| Vietare la creazione e la modifica dei file? |
| Consentire agli utenti di creare e modificare i file? |
| Consentire la connessione al servizio senza utilizzare una password? |
| Onorare 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 usando Kerberos
Puoi autenticarti a kerberos utilizzando gli strumenti smbclient e rpcclient:
Esegui Comandi
crackmapexec
crackmapexec può eseguire comandi abusando di mmcexec, smbexec, atexec, wmiexec essendo wmiexec il 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 farà riferimento a cmd.exe/powershell.exe e inserirà negli argomenti il payload --tecnica senza file--). Ulteriori informazioni su psexec e smbexec. In kali si trova in /usr/share/doc/python3-impacket/examples/
Utilizzando il parametro -k
è possibile autenticarsi contro kerberos invece di NTLM
wmiexec/dcomexec
Eseguire stealthily una shell di comando senza toccare il disco o eseguire un nuovo servizio utilizzando DCOM tramite porta 135. In kali si trova in /usr/share/doc/python3-impacket/examples/
Utilizzando il parametro -k
è possibile autenticarsi tramite 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/
Riferimento Impacket
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 rilancio SMB
Questo attacco utilizza il toolkit Responder per catturare le sessioni di autenticazione SMB su una rete interna e rilanciarle su una macchina target. Se la sessione di autenticazione è riuscita, ti porterà automaticamente in una shell di sistema. Maggiori informazioni su questo attacco qui.
SMB-Trap
La libreria Windows URLMon.dll prova automaticamente ad autenticarsi all'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 Trapping SMB, piazzare file dannosi su un sistema target (tramite SMB, ad esempio) può provocare un tentativo di autenticazione SMB, consentendo all'hash NetNTLMv2 di essere intercettato con uno strumento come Responder. L'hash può quindi essere craccato offline o utilizzato in un attacco di rilancio SMB.
Comandi Automatici di HackTricks
Last updated