A differenza di quanto avviene per le attività passive in questo caso è previsto che si eseguano azioni che possono sollecitare il target. In un contesto di PenTesting non è necessariamente un problema ma in attività di Adversarial Simulation e Red Teaming se cose cambiano e molte delle azioni che sono descritte in questo post potrebbero non essere realisticamente usabili o richiederebbero una certa cautela.

In questo post si iniziano ad usare diversi tools che potete trovare installati su Kali come su Parrot Security, ma a seguito di una interessante discussione di oggi (03 agosto 2023) sul canale Telegram BitHorn ho deciso di introdurre delle alternative durante l’esposizione degli appunti. In particolare ho predisposto una VM ed un Laptop (di recupero) con una distro linux debian-based su cui pretisporre i tools a cui aggiungere script che possiamo crearci in autonomia.

DNS Enumeration

Il tema lo abbiamo toccato anche durante le azioni passive e di base l’obiettivo è analizzare la zona DNS in cerca di informazioni di dettaglio sugli host ed i servizi esposti, partendo dalle richieste base per risolvere l’IP address per poi inddagare i record base: A/AAAA Record, Name Server, Mail Exchange, Pointer Record, Canonical Name e Text. Tra i comandi più semplici da usare c’è host, presente praticamente in tutti i sistemi unix-like (quindi anche su OSX):

DNS query

In python è possibile usare la libreria dns.resolver per eseguire query DNS e formattare un po’ gli output. Qualche esempio lo riporto sulla repo GitHub dedicata al tema.

E’ da considerare che non possiamo fare una questi per ottenere una lista dei CNAME, cosa che sarebbe molto comoda per cercare host appartenenti al target. Possiamo però fare uno script che tenti di risolvere una sequenza di domini di terzo livello (es: mail.roccosicilia.com, test.roccosicilia.com, …).

# brute forcing
bflist = ["www", "mail", "email", "exchange"]
for r in bflist:
    try:
        ip = socket.gethostbyname(f"{r}.{domain}")
        print("| {} | {} | {}".format('-', f"{r}.{domain}", ip))
    except:
        print("| {} | {} | {}".format('-', f"{r}.{domain}", '-'))

Nota: lo script dnsenum.py nella repo GitHub ha una prozione di codice dedicata a questa esigenza.

Solitamente le aziende non utilizzanno molti provider, è abbastanza probabile che molti degli host che trovaremo nella zona DNS, anche tramite brute forcing, appartengano ad un numero limitato di reti. Nel momeno in cui riusciamo ad individuare una specifica subnet pubblica possiamo verificare la presensa di PTR records. Anche in questo caso possiamo fare un piccolo script che automatizzi la richiesta host verso un IP:

esempio con comando host

Il blocco di codice in python potrebbe essere qualcosa di simile (sempre disponibile nello stesso script):

blocco dello script dnsenum.py

Oltre a quello che possiamo costruirci con le nostre mani sono disponibili dei tools nella nostra linux box o sulla nostra kali. In particola dnsenum e dnsrecon sono disponibili anche nella repo di Debian 11 e consentono di raccogliere informazioni sulle zone DNS.

Parto con dnsrecon che di base è in grado di eseguire query DNS e può essere utilizzato anche per eseguire un brute force suo subdomain passandogli una lista di parole. Kali ne ha una comona in /usr/share/dnsenum/dns.txt:

output di dnsrecon

Personalmente trovo più comodo dnsenum che integra il brute forcing senza specificare la richiesta ed ha un output già strutturato per mettere in evidenza eventuali elementi interessanti. Si tratta comunque di dettagli e non è da dimenticare il fatto che queste informazioni sono facilmente reperibili con tools molto semplici come dig o nslookup. Sono inoltre transformation integrate in Maltego dove abbiamo la possibilità di mettere in relazione molte informazioni provenienti da diverse fonti.

Port Scanning

Sulla base del tipo di servizio esposto da un host è possibile dedurre molte informazioni sul target. Il port scanning di base ci dice quali porte TCP e UDP sono disponibili sull’host target e da questo elemento possiamo poi partire per identificare l’applicazione in ascopo sulla porta.

Senza dilungarsi troppo sul tema, il tool ampiamente utilizzato a tal fine è NMAP di cui esiste una montagna di documentazione in rete. Un dettaglio che vorrei citare in questa occasione è in relazione all’utilizzo del port scanner in combinazione con WireShark: la scansione di per se da in output una interpretazione delle risposte ottenute dall’host, osservando il dettaglio di traffico con WireShark è possibile raccogliere qualche dato in più rispetto alla mera interpretazione di NMAP.

Sul fronte operativo non è da disdegnare l’utilizzo di custom script per eseguire scansioni specifiche. Utilizzando moduli python come socket o scapy è possibile craftare sessioni e pacchetti (anche UDP con scapy) da inviare ad un host target ed analizzarne le risposte.

SMB Enumeration

SMB (tcp port 445) e NetBION (tcp port 139) sono protocollo utilizzati dai sistemi operativi Microsoft per la comunicazione tra i nodi della rete. Nalla verifica delle risposte a specifiche scansioni con NMAP o altri tools (es: nbtscan) è possibile dedurre diverse informazioni tra cui la versione del sistema operativo utilizzato dal sistema target.

Anche in contesti di post-exploitation è molto utile indagare e raccogliere informazioni tramite il servizio SMB. Comandi molto semplici come net view sono in grado di dare molte informazioni sulla struttura della rete in termini di risorse condivide come le share di rete.

Altri protocolli e servizi

Sempre utili da indagare sono i protocolli relativi a:

  • Servizi di posta elettronica come SMTP, protocollo che solitamente indica la presenza di mail server o componenti del servizio.
  • Servizi di gestione dell’infrastruttura di rete come SNMP che, se configurato in modo non corretto, consente di chiedere agli apparati di rete molte delle configurazioni attive.
  • Servizi di pubblicazione HTTP come Apache, IIS, Nginx. Solitamente attivi sulle porte standard per il mondo applicativo/web (80, 443, 8080, …) possono presentare header con informazioni peculiare in relazione al sistema operativo in uso.

In generale è opportuno rilevare e documentare ogni servizio esposto dal sistema target in modo da ottenere un quadro completo del sistema che si sta approcciando per poi valutare quali manovre è possibile fare per interagire con i servizi esposti a caccia di una potenziale vulnerabilità.

Una risposta a “[PenTestStudy] Active Info. Gathering”

Scrivi una risposta a Concetti di hacking etico per team IT: Intro e Reconnaissance. – Rocco Sicilia Cancella risposta

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

sono Rocco

… e questo è mio sito personale dove condivido idee, riflessioni ed esperienze su hacking e sicurezza informatica.

Let’s connect