
Utilitaire autonome pour la découverte de services sur les ports ouverts !
Fonctionnalités • Installation • Utilisation • Exécution de fingerprintx • Utilisation comme bibliothèque • Pourquoi pas nmap ? • Notes • Remerciements
fingerprintx est un utilitaire similaire à httpx qui prend également en charge l'identification de services tels que RDP, SSH, MySQL, PostgreSQL, Kafka, etc. fingerprintx peut être utilisé aux côtés de scanners de ports comme Naabu pour identifier un ensemble de ports découverts lors d'un scan de ports. Par exemple, un ingénieur peut souhaiter scanner une plage IP puis identifier rapidement le service exécuté sur tous les ports découverts.



51 plugins de détection de services prenant en charge les protocoles TCP et UDP :
Depuis Github
go install github.com/praetorian-inc/fingerprintx/cmd/fingerprintx@latest
Depuis les sources (go version > 1.18)
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# with go version > 1.18
$ go build ./cmd/fingerprintx
$ ./fingerprintx -h
Docker
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# build
docker build -t fingerprintx .
# and run it
docker run --rm fingerprintx -h
docker run --rm fingerprintx -t praetorian.com:80 --json
fingerprintx -h
L'option -h affichera tous les indicateurs pris en charge pour fingerprintx.
Usage:
fingerprintx [flags]
TARGET SPECIFICATION:
Requires a host and port number or ip and port number. The port is assumed to be open.
HOST:PORT or IP:PORT
EXAMPLES:
fingerprintx -t praetorian.com:80
fingerprintx -l input-file.txt
fingerprintx --json -t praetorian.com:80,127.0.0.1:8000
Flags:
--csv output format in csv
-f, --fast fast mode
-h, --help help for fingerprintx
--json output format in json
-l, --list string input file containing targets
-o, --output string output file
-t, --targets strings target or comma separated target list
-w, --timeout int timeout (milliseconds) (default 500)
-U, --udp run UDP plugins
-v, --verbose verbose mode
Le mode fast tentera uniquement d'identifier le service par défaut associé à ce port pour chaque cible. Par exemple, si praetorian.com:8443 est l'entrée, seul le plugin https sera exécuté. Si https n'est pas exécuté sur praetorian.com:8443, il n'y aura AUCUNE sortie. Pourquoi faire cela ? C'est un moyen rapide d'identifier la plupart des services dans une grande liste d'hôtes (pensez à la règle des 80/20).
Avec une cible :
$ fingerprintx -t 127.0.0.1:8000
http://127.0.0.1:8000
Par défaut, la sortie est sous la forme : SERVICE://HOST:PORT. Pour obtenir une sortie de service plus détaillée, spécifiez JSON avec l'option --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"}}
Redirigez la sortie d'un autre programme (comme naabu) :
$ naabu 127.0.0.1 -silent 2>/dev/null | fingerprintx
http://127.0.0.1:8000
ftp://127.0.0.1:21
Exécution avec un fichier d'entrée :
$ cat input.txt | fingerprintx
http://praetorian.com:80
telnet://telehack.com:23
# or if you prefer
$ fingerprintx -l input.txt
http://praetorian.com:80
telnet://telehack.com:23
Avec plus de métadonnées en sortie :
$ 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 peut être importé dans votre projet pour scanner les services sur les ports ouverts. Un exemple de code illustrant comment procéder est fourni ici dans le répertoire examples. Compilez avec go build scan.go. Un autre fichier pouvant servir de référence lors de l'importation de fingerprintx dans votre propre projet est l'exécuteur en ligne de commande.
Nmap est la référence pour le scan réseau. Pourquoi utiliser fingerprintx à la place de nmap ? Les deux raisons principales sont :
fingerprintx travaille plus intelligemment, pas plus fort : le premier plugin exécuté sur un serveur avec le port 8080 ouvert est le plugin http. L'approche par service par défaut réduit le temps de scan dans le meilleur des cas. La plupart du temps, les services exécutés sur les ports 80, 443, 22 sont http, https et ssh — c'est donc ce que fingerprintx vérifie en premier.fingerprintx prend en charge la sortie json avec l'option --json. Nmap prend en charge de nombreuses options de sortie (normal, xml, grep), mais elles sont souvent difficiles à analyser et à script correctement. fingerprintx prend en charge la sortie json ce qui facilite l'intégration avec d'autres outils dans des pipelines de traitement.third_party qui importe les bibliothèques de cryptographie Go ?
ssh identifie les différentes options cryptographiques prises en charge par le serveur lors de la collecte des métadonnées pendant le processus de handshake. Cela utilise quelques fonctions non exportées, c'est pourquoi les bibliothèques de cryptographie Go sont incluses ici avec un fichier export.go.target:port est ouverte. Si aucun des ports n'est ouvert, il n'y aura pas de sortie car aucun service n'est exécuté sur les cibles.zgrab2 est légèrement différente de celle de fingerprintx. Pour zgrab2, le protocole doit être spécifié à l'avance : echo praetorian.com | zgrab2 http -p 8000, ce qui suppose que vous savez déjà ce qui s'y exécute. Pour fingerprintx, ce n'est pas le cas : echo praetorian.com:8000 | fingerprintx. L'approche de scan au niveau applicatif est très similaire.fingerprintx est le travail de nombreuses personnes, y compris notre grande promotion de stagiaires de 2022. Voici une liste des contributeurs à ce jour :
| SERVICE | TRANSPORT |
|---|
| 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 |