
Localizzatore passivo di servizi, uno sniffer Python che identifica server, client, nomi e molto altro
Localizzatore di servizi passivo, uno sniffer python che identifica server, client, nomi e molto altro
Note rapide per iniziare con passer, lo sniffer passivo di servizi. Sei responsabile di ottenere il permesso per sniffare.
Passer può funzionare da una cattura di pacchetti live o da un file pcap (parametro da riga di comando, vedi gli esempi sotto). Riporta i servizi e i client live, le schede ethernet sulla lan, le voci dns, i sistemi operativi e i router - tutto in modo passivo!
Se stai usando windows o i tuoi percorsi ai file di supporto non corrispondono ai miei per qualche altro motivo, fammi sapere dove sono e sarò lieto di aggiornare lo script.
# Install system dependencies
sudo apt-get install arp-scan ettercap-text-only nmap wireshark
# Install python dependencies
sudo pip install -r requirements.txt
# Prevent Scapy from performing DNS lookups
echo 'noenum = [ Resolve(), TCP_SERVICES, UDP_SERVICES ]' >> ~/.scapy_startup.py
# Install system dependencies
sudo yum install arp-scan ettercap nmap wireshark
# Install python dependencies
sudo pip install -r requirements.txt
# Prevent Scapy from performing DNS lookups
echo 'noenum = [ Resolve(), TCP_SERVICES, UDP_SERVICES ]' >> ~/.scapy_startup.py
Per installare scapy, consulta la guida all'installazione.
Passer è disponibile anche come immagine Docker. Se non hai già Docker, ecco un modo rapido e semplice per installarlo su Linux:
curl -fsSL https://get.docker.com | sh -
Altrimenti, segui le istruzioni di installazione per il tuo sistema operativo.
Per la maggior parte degli utilizzi, consigliamo lo script passer incluso in questo repository. Questo script gestirà tutte le
wget https://raw.githubusercontent.com/activecm/passer/master/passer
chmod +x passer
Puoi quindi usare questo script esattamente come faresti in uno qualsiasi degli esempi seguenti. Ad esempio:
./passer -i eth0
# The equivalent without using the included script would be:
docker run --rm --name=passer -i --init --net=host --cap-add=net_raw activecm/passer -i eth0
Per fermare l'esecuzione del passer:
docker stop passer
/path/to/passer.py
Questo intercetta il traffico da tutte le interfacce di rete e invia tutte le righe di output alla tua console.
sudo /path/to/passer.py
o
su - -c '/path/to/passer.py'
/path/to/passer.py -i IfaceName
L'esecuzione di route dovrebbe mostrare alcune interfacce attive che potresti utilizzare.
❕
-iè incompatibile con-r.
/path/to/passer.py -r /path/to/packets.pcap
❕
-rè incompatibile con-i.
cat packetdata.pcap | ./passer.py -r /proc/self/fd/0
zcat packetdata.pcap.gz | ./passer.py -r /proc/self/fd/0
bzcat packetdata.pcap.bz2 | ./passer.py -r /proc/self/fd/0
tcpdump -i eth0 -qtnp -w - | ./passer.py -r /proc/self/fd/0
# etc...
Questo ti permette di catturare pacchetti con qualsiasi strumento in grado di salvare i pacchetti in un file pcap, e successivamente elaborarli con passer su un sistema diverso.
/path/to/passer.py -l /path/to/networkinfo.txt
/path/to/passer.py 2>/dev/null
/path/to/passer.py -h
/path/to/passer.py -u /path/to/oddpackets.pcap
Questo è generalmente destinato al processo di sviluppo; i pacchetti salvati in questo file sono quelli per cui è necessario scrivere le firme. Contributi di pacchetti insoliti, descrizioni di servizi e patch al programma sono accolti con gratitudine.
Questo dovrebbe essere semplice come inserire il filtro BPF tra virgolette singole alla fine della riga di comando. A partire dalla versione 1.16, la libreria sottostante non sembra utilizzare con successo il filtro fornito, ma esiste una soluzione alternativa. Usa tcpdump per eseguire il filtraggio, e passa l'insieme ridotto di pacchetti a passer su stdin, come sopra:
tcpdump -r packets.pcap -w - 'icmp or arp' | ./passer.py -r /proc/self/fd/0
Consulta la sezione "Sample filters" riportata di seguito per alcuni suggerimenti sui filtri da utilizzare sia per la cattura anticipata dei pacchetti sia per lo sniffing in tempo reale.
socket.error: (1, 'Operation not permitted')
Probabilmente stai cercando di sniffare in tempo reale come utente non-root. Accedi come root, usa sudo/su, oppure lavora con file pcap.
Se passer va in crash o non funziona sul tuo sistema, apri una issue che includa il messaggio di errore, se presente, e qualsiasi dettaglio sul tuo sistema operativo.
L'output di Passer va su stdout e, se fornisci il parametro da riga di comando -l /path/to/logfile, anche su quel file. Ecco il formato:
| Type | IPAddr | Proto | State | Optional description (may be empty) |
|---|---|---|---|---|
| 'IP' | IPaddr | 'IP' | dead or live | p0f OS description |
| 'MA' | IPaddr | 'Ethernet' | MacAddr | ManufDescription |
| 'TC' | IPaddr | 'TCP_'Port | closed or open | client description |
| 'TS' | IPaddr | 'TCP_'Port | closed or listening | server description |
| 'UC' | IPaddr | 'UDP_'Port | open or closed | udp client port description |
| 'US' | IPaddr | 'UDP_'Port | open or closed | udp server port description |
| 'DN' | IPaddr | 'A' or 'PTR' | hostname | possible extra info |
| 'RO' | IPaddr | 'TTLEx' | router | possible extra info |
Le righe sono separate da virgole per un facile caricamento in un foglio di calcolo o per l'importazione SQL. Nessuno dei campi dovrebbe contenere virgole. C'è un file di output di esempio su http://www.stearns.org/passer/passer-sample-log.txt .
Ecco alcuni esempi di come ottenere i dati desiderati da queste righe:
cat /var/tmp/passer-log | sort -u | less
cat /var/tmp/passer-log | sort -t, -k2 -u | less
cat /var/tmp/passer-log | sort -u | egrep '(^DN|^RO)' | less
cat /var/tmp/passer-log | sort -u | grep ',192\.168\.0\.17,' | less