
¡Utilidad independiente para el descubrimiento de servicios en puertos abiertos!
Características • Instalación • Uso • Ejecutar fingerprintx • Uso como biblioteca • ¿Por qué no nmap? • Notas • Agradecimientos
fingerprintx es una utilidad similar a httpx que también admite el fingerprinting de servicios como RDP, SSH, MySQL, PostgreSQL, Kafka, etc. fingerprintx se puede usar junto con escáneres de puertos como Naabu para identificar el servicio que se ejecuta en un conjunto de puertos detectados durante un escaneo de puertos. Por ejemplo, un ingeniero puede querer escanear un rango de IPs y luego identificar rápidamente el servicio que se ejecuta en todos los puertos descubiertos.



51 plugins de detección de servicios que admiten protocolos TCP y UDP:
Desde Github
go install github.com/praetorian-inc/fingerprintx/cmd/fingerprintx@latest
Desde el código fuente (versión de go > 1.18)
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# con go version > 1.18
$ go build ./cmd/fingerprintx
$ ./fingerprintx -h
Docker
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# construir
docker build -t fingerprintx .
# y ejecutarlo
docker run --rm fingerprintx -h
docker run --rm fingerprintx -t praetorian.com:80 --json
fingerprintx -h
La opción -h mostrará todas las banderas admitidas para fingerprintx.
Uso:
fingerprintx [flags]
ESPECIFICACIÓN DEL OBJETIVO:
Requiere un host y número de puerto o una IP y número de puerto. Se asume que el puerto está abierto.
HOST:PUERTO o IP:PUERTO
EJEMPLOS:
fingerprintx -t praetorian.com:80
fingerprintx -l archivo-de-entrada.txt
fingerprintx --json -t praetorian.com:80,127.0.0.1:8000
Banderas:
--csv formato de salida en csv
-f, --fast modo rápido
-h, --help ayuda para fingerprintx
--json formato de salida en json
-l, --list string archivo de entrada con los objetivos
-o, --output string archivo de salida
-t, --targets strings objetivo o lista de objetivos separados por comas
-w, --timeout int tiempo de espera (milisegundos) (por defecto 500)
-U, --udp ejecutar plugins UDP
-v, --verbose modo verbose
El modo fast solo intentará identificar el servicio predeterminado asociado con ese puerto para cada objetivo. Por ejemplo, si la entrada es praetorian.com:8443, solo se ejecutará el plugin https. Si https no se está ejecutando en praetorian.com:8443, NO habrá salida. ¿Por qué hacer esto? Es una manera rápida de identificar la mayoría de los servicios en una lista grande de hosts (piensa en la regla 80/20).
Con un objetivo:
$ fingerprintx -t 127.0.0.1:8000
http://127.0.0.1:8000
Por defecto, la salida tiene la forma: SERVICIO://HOST:PUERTO. Para obtener una salida de servicio más detallada, especifica JSON con la bandera --json:
$ fingerprintx -t 127.0.0.1:8000 --json
{"ip":"127.0.0.1","port":8000,"service":"http","transport":"tcp","metadata":{"responseHeaders":{"Content-Length":["1154"],"Content-Type":["text/html; charset=utf-8"],"Date":["Mon, 19 Sep 2022 18:23:18 GMT"],"Server":["SimpleHTTP/0.6 Python/3.10.6"]},"status":"200 OK","statusCode":200,"version":"SimpleHTTP/0.6 Python/3.10.6"}}
Redirige la salida de otro programa (como naabu):
$ naabu 127.0.0.1 -silent 2>/dev/null | fingerprintx
http://127.0.0.1:8000
ftp://127.0.0.1:21
Ejecutar con un archivo de entrada:
$ cat input.txt | fingerprintx
http://praetorian.com:80
telnet://telehack.com:23
# o si prefieres
$ fingerprintx -l input.txt
http://praetorian.com:80
telnet://telehack.com:23
Con más metadatos de salida:
$ cat input.txt | fingerprintx --json
{"host":"praetorian.com","ip":"146.148.61.165","port":80,"service":"http","transport":"tcp","metadata":{"responseHeaders":{"Connection":["keep-alive"],"Content-Type":["text/html"],"Date":["Mon, 19 Sep 2022 18:37:55 GMT"],"Etag":["W/\"5e3e263f-1703\""],"Keep-Alive":["timeout=20"],"Server":["nginx"],"Vary":["Accept-Encoding"]},"status":"404 Not Found","statusCode":404,"version":"nginx"}}
{"host":"telehack.com","ip":"64.13.139.230","port":23,"service":"telnet","transport":"tcp","metadata":{"serverData":"fffb03"}}
fingerprintx se puede importar a tu proyecto para escanear servicios en puertos abiertos. En el directorio de ejemplos se proporciona un código de ejemplo sobre cómo hacerlo. Compila con go build scan.go. Otro archivo que puede ser útil como referencia al importar fingerprintx en tu propio proyecto es el ejecutor de línea de comandos.
Nmap es el estándar para el escaneo de redes. ¿Por qué usar fingerprintx en lugar de nmap? Las dos razones principales son:
fingerprintx trabaja de manera más inteligente, no más dura: el primer plugin que se ejecuta contra un servidor con el puerto 8080 abierto es el plugin http. El enfoque de servicio predeterminado reduce el tiempo de escaneo en el mejor de los casos. La mayoría de las veces, los servicios que se ejecutan en los puertos 80, 443, 22 son http, https y ssh, así que eso es lo que fingerprintx verifica primero.fingerprintx admite salida JSON con la bandera --json. Nmap admite numerosas opciones de salida (normal, xml, grep), pero a menudo son difíciles de analizar y scriptear adecuadamente. fingerprintx admite salida JSON, lo que facilita la integración con otras herramientas en tuberías de procesamiento.third_party que importa las bibliotecas criptográficas de Go?
ssh identifica las diversas opciones criptográficas que admite el servidor al recopilar metadatos durante el proceso de handshake. Esto hace uso de algunas funciones no exportadas, por lo que las bibliotecas criptográficas de Go se incluyen aquí con un archivo export.go.objetivo:puerto está abierta. Si ninguno de los puertos está abierto, no habrá salida, ya que no hay servicios ejecutándose en los objetivos.zgrab2 es ligeramente diferente al de fingerprintx. Para zgrab2, el protocolo debe especificarse de antemano: echo praetorian.com | zgrab2 http -p 8000, lo que asume que ya sabes lo que se está ejecutando allí. Para fingerprintx, ese no es el caso: echo praetorian.com:8000 | fingerprintx. El enfoque de escaneo de protocolo de "capa de aplicación" es muy similar.fingerprintx es el trabajo de muchas personas, incluida nuestra gran clase de pasantes de 2022. Aquí hay una lista de colaboradores hasta ahora:
| SERVICIO | TRANSPORTE |
|---|
| Cassandra | TCP |
| ChromaDB | TCP |
| CouchDB | TCP |
| DB2 | TCP |
| DHCP | UDP |
| Diameter | TCP |
| DNS | TCP/UDP |
| Echo | TCP |
| Elasticsearch | TCP |
| Firebird | TCP |
| FTP | TCP |
| HTTP/HTTPS | TCP |
| IMAP | TCP |
| InfluxDB | TCP |
| IPMI | TCP |
| IPSEC | UDP |
| Java RMI | TCP |
| JDWP | TCP |
| Kafka | TCP |
| LDAP | TCP |
| Linux RPC | TCP |
| Memcached | TCP |
| Milvus | TCP |
| Modbus | TCP |
| MongoDB | TCP |
| MQTT | TCP |
| MSSQL | TCP |
| MySQL | TCP |
| Neo4j | TCP |
| NetBIOS-NS | UDP |
| NTP | UDP |
| OpenVPN | UDP |
| OracleDB | TCP |
| Pinecone | TCP |
| POP3 | TCP |
| PostgreSQL | TCP |
| RDP | TCP |
| Redis | TCP |
| Rsync | TCP |
| RTSP | TCP |
| SMB | TCP |
| SMPP | TCP |
| SMTP | TCP |
| SNMP | UDP |
| SNPP | TCP |
| SSH | TCP |
| STUN | UDP |
| Sybase | TCP |
| Telnet | TCP |
| VNC | TCP |