
Localizador pasivo de servicios, un sniffer en Python que identifica servidores, clientes, nombres y mucho más
Localizador de servicios pasivo, un rastreador de python que identifica servidores, clientes, nombres y mucho más
Notas rápidas para empezar con passer, el rastreador de servicios pasivo. Eres responsable de obtener permiso para rastrear.
Passer puede funcionar a partir de una captura de paquetes en vivo o desde un archivo pcap (parámetro de línea de comandos, ver ejemplos abajo). Reporta servicios y clientes en vivo, tarjetas ethernet en la lan, entradas dns, sistemas operativos, y routers - ¡todo de forma pasiva!
Si estás usando windows o tus rutas a los archivos de soporte no coinciden con las mías por alguna otra razón, avísame dónde están y con gusto actualizaré el 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
Para instalar scapy, consulta la guía de instalación.
Passer también se distribuye como una imagen de Docker. Si aún no tienes Docker, aquí tienes una forma rápida y sencilla de instalarlo en Linux:
curl -fsSL https://get.docker.com | sh -
De lo contrario, sigue las instrucciones de instalación para tu sistema operativo.
Para la mayoría de los usos, recomendamos el script passer incluido en este repositorio. Este script se encargará de todo lo específico de docker
wget https://raw.githubusercontent.com/activecm/passer/master/passer
chmod +x passer
A continuación, puedes usar este script tal como lo harías en cualquiera de los ejemplos siguientes. Por ejemplo:
./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
Para detener la ejecución de passer:
docker stop passer
/path/to/passer.py
Esto captura el tráfico de todas las interfaces de red y envía todas las líneas de salida a tu consola.
sudo /path/to/passer.py
o
su - -c '/path/to/passer.py'
/path/to/passer.py -i IfaceName
Ejecutar route debería mostrar algunas interfaces activas que podrías usar.
❕
-ies incompatible con-r.
/path/to/passer.py -r /path/to/packets.pcap
❕
-res incompatible 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...
Esto te permite capturar paquetes con cualquier herramienta que pueda guardar paquetes en un archivo pcap, y posteriormente procesarlos con passer en un sistema diferente.
/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
Esto está generalmente pensado para el proceso de desarrollo; los paquetes guardados en este archivo son aquellos a los que se les deben escribir firmas. Las contribuciones de paquetes inusuales, descripciones de servicios y parches al programa son aceptadas con gratitud.
Esto debería ser tan simple como colocar el filtro BPF entre comillas simples al final de la línea de comandos. A partir de la versión 1.16, la biblioteca subyacente no parece utilizar con éxito el filtro proporcionado, pero existe una solución alternativa. Use tcpdump para realizar el filtrado y entregue el conjunto reducido de paquetes a passer por stdin, como se indicó anteriormente:
tcpdump -r packets.pcap -w - 'icmp or arp' | ./passer.py -r /proc/self/fd/0
Consulta la sección "Sample filters", a continuación, para ver algunas sugerencias de filtros que puedes usar tanto para capturar paquetes con antelación como para la captura en vivo.
socket.error: (1, 'Operation not permitted')
Probablemente estés intentando hacer sniffing en vivo como un usuario no root. Inicia sesión como root, usa sudo/su, o trabaja con archivos pcap.
Si passer falla o no funciona en tu sistema, por favor abre un issue que incluya el mensaje de error, si lo hay, y cualquier detalle sobre tu sistema operativo.
La salida de Passer va a stdout, y si proporcionas el parámetro de línea de comandos -l /path/to/logfile, también a ese archivo. Este es el 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 |
Las líneas están separadas por comas para facilitar su carga en una hoja de cálculo o su importación a SQL. Ninguno de los campos debe contener comas. Hay un archivo de salida de ejemplo en http://www.stearns.org/passer/passer-sample-log.txt .
Aquí hay algunos ejemplos de cómo obtener los datos que deseas a partir de estas líneas:
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