
Eigenständiges Dienstprogramm zur Erkennung von Diensten auf offenen Ports!
Funktionen • Installation • Verwendung • fingerprintx ausführen • Als Bibliothek verwenden • Warum nicht nmap? • Hinweise • Danksagungen
fingerprintx ist ein Dienstprogramm ähnlich wie httpx, das auch die Diensterkennung für Dienste wie RDP, SSH, MySQL, PostgreSQL, Kafka usw. unterstützt. fingerprintx kann zusammen mit Port-Scannern wie Naabu verwendet werden, um eine Reihe von Ports zu identifizieren, die während eines Port-Scans entdeckt wurden. Beispielsweise möchte ein Ingenieur einen IP-Bereich scannen und dann schnell den Dienst identifizieren, der auf allen entdeckten Ports läuft.



51 Diensterkennungs-Plugins für TCP- und UDP-Protokolle:
Von GitHub
go install github.com/praetorian-inc/fingerprintx/cmd/fingerprintx@latest
Aus dem Quellcode (Go-Version > 1.18)
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# mit 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 .
# und ausführen
docker run --rm fingerprintx -h
docker run --rm fingerprintx -t praetorian.com:80 --json
fingerprintx -h
Die Option -h zeigt alle unterstützten Flags für fingerprintx an.
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
Der fast-Modus versucht nur, den Standarddienst zu identifizieren, der diesem Port für jedes Ziel zugeordnet ist. Wenn beispielsweise praetorian.com:8443 die Eingabe ist, wird nur das https-Plugin ausgeführt. Wenn https nicht auf praetorian.com:8443 läuft, gibt es KEINE Ausgabe. Warum das tun? Es ist eine schnelle Möglichkeit, die meisten Dienste in einer großen Liste von Hosts zu identifizieren (denken Sie an die 80/20-Regel).
Mit einem Ziel:
$ fingerprintx -t 127.0.0.1:8000
http://127.0.0.1:8000
Standardmäßig hat die Ausgabe die Form: SERVICE://HOST:PORT. Für detailliertere Dienstausgaben geben Sie JSON mit dem Flag --json an:
$ 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"}}
Leiten Sie die Ausgabe eines anderen Programms (wie naabu) weiter:
$ naabu 127.0.0.1 -silent 2>/dev/null | fingerprintx
http://127.0.0.1:8000
ftp://127.0.0.1:21
Mit einer Eingabedatei ausführen:
$ cat input.txt | fingerprintx
http://praetorian.com:80
telnet://telehack.com:23
# oder wenn Sie bevorzugen
$ fingerprintx -l input.txt
http://praetorian.com:80
telnet://telehack.com:23
Mit mehr Metadatenausgabe:
$ 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 kann in Ihr Projekt importiert werden, um Dienste auf offenen Ports zu scannen. Beispielcode, wie dies gemacht werden könnte, ist hier im Verzeichnis examples bereitgestellt. Erstellen Sie mit go build scan.go. Eine weitere Datei, die als Referenz beim Importieren von fingerprintx in Ihr eigenes Projekt nützlich sein könnte, ist der Kommandozeilen-Runner.
Nmap ist der Standard für Netzwerkscans. Warum fingerprintx anstelle von nmap verwenden? Die beiden Hauptgründe sind:
fingerprintx arbeitet intelligenter, nicht härter: Das erste Plugin, das gegen einen Server mit offenem Port 8080 ausgeführt wird, ist das http-Plugin. Der Standarddienst-Ansatz verkürzt die Scanzeit im besten Fall. Meistens laufen auf Port 80, 443, 22 die Dienste http, https bzw. ssh – das prüft fingerprintx also zuerst.fingerprintx unterstützt JSON-Ausgabe mit dem Flag --json. Nmap unterstützt zahlreiche Ausgabeoptionen (normal, xml, grep), aber diese sind oft schwer zu parsen und entsprechend zu scripten. fingerprintx unterstützt JSON-Ausgabe, was die Integration mit anderen Tools in Verarbeitungspipelines erleichtert.third_party-Ordner, der die Kryptographie-Bibliotheken von Go importiert?
ssh-Erkennungsmodul identifiziert die verschiedenen kryptografischen Optionen, die vom Server während des Handshakes unterstützt werden. Dabei werden einige nicht exportierte Funktionen verwendet, weshalb die Kryptografiebibliotheken von Go hier mit einer export.go-Datei enthalten sind.Ziel:Port offen ist. Wenn keiner der Ports offen ist, gibt es keine Ausgabe, da auf den Zielen keine Dienste laufen.zgrab2 unterscheidet sich geringfügig von fingerprintx. Bei zgrab2 muss das Protokoll im Voraus angegeben werden: echo praetorian.com | zgrab2 http -p 8000, was voraussetzt, dass Sie bereits wissen, was dort läuft. Bei fingerprintx ist das nicht der Fall: echo praetorian.com:8000 | fingerprintx. Der Ansatz des "Anwendungsschicht"-Protokoll-Scannings ist sehr ähnlich.fingerprintx ist das Werk vieler Menschen, einschließlich unserer großartigen Praktikantenklasse von 2022. Hier ist eine Liste der bisherigen Mitwirkenden:
| DIENST | 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 |