
¡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:
| 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 |
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