
オープンポートのサービス検出のためのスタンドアロンユーティリティ!
機能 • インストール • 使い方 • fingerprintxの実行 • ライブラリとしての使用 • なぜnmapではないのか? • 注意事項 • 謝辞
fingerprintxは、httpxと似たユーティリティで、RDP、SSH、MySQL、PostgreSQL、Kafkaなどのサービスのフィンガープリンティングもサポートします。fingerprintxは、Naabuなどのポートスキャナーと一緒に使用して、ポートスキャンで特定されたポートのセットをフィンガープリントできます。例えば、エンジニアがIP範囲をスキャンし、見つかったすべてのポートで実行されているサービスを迅速にフィンガープリントしたい場合があります。



51 のサービス検出プラグインが、TCP および UDP プロトコルをサポートしています:
Githubから
go install github.com/praetorian-inc/fingerprintx/cmd/fingerprintx@latest
ソースから (go バージョン > 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
-h オプションは、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
fast モードは、各ターゲットのそのポートに関連付けられたデフォルトサービスに対してのみフィンガープリンティングを試みます。例えば、入力が praetorian.com:8443 の場合、https プラグインのみが実行されます。もし https が praetorian.com:8443 で実行されていない場合、出力はありません。なぜこれを行うのか? 多数のホストリスト(80/20ルール)でほとんどのサービスを迅速にフィンガープリントする方法です。
1つのターゲット:
$ fingerprintx -t 127.0.0.1:8000
http://127.0.0.1:8000
デフォルトでは、出力は SERVICE://HOST:PORT の形式です。より詳細なサービス出力を得るには、--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"}}
別のプログラムから出力をパイプする(naabuなど):
$ naabu 127.0.0.1 -silent 2>/dev/null | fingerprintx
http://127.0.0.1:8000
ftp://127.0.0.1:21
入力ファイルで実行:
$ 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
より多くのメタデータを出力:
$ 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 は、オープンポート上のサービスをスキャンするためにプロジェクトにインポートできます。その方法の例が、examples ディレクトリ に提供されています。ビルドは go build scan.go で行います。fingerprintx を自分のプロジェクトにインポートする際の参考になる別のファイルは、コマンドラインランナー です。
Nmap はネットワークスキャンの標準です。なぜ fingerprintx を nmap の代わりに使うのか? 主な理由は次の2つです:
fingerprintx はよりスマートに動作し、より少ない労力で済みます: ポート8080が開いているサーバーに対して最初に実行されるプラグインはhttpプラグインです。デフォルトサービスアプローチは、最良のシナリオでスキャン時間を短縮します。ほとんどの場合、ポート80、443、22で動作しているサービスはhttp、https、ssh です。そのため、fingerprintx はそれらを最初にチェックします。fingerprintx は --json フラグでjson出力をサポートしています。Nmap は多数の出力オプション(通常、xml、grep)をサポートしていますが、それらは解析や適切なスクリプト作成が難しいことがよくあります。fingerprintx はjson出力をサポートしており、処理パイプライン内の他のツールとの統合を容易にします。third_party フォルダがあり、Go の暗号ライブラリをインポートしているのですか?
target:port 入力が開いていることを前提としています。どのポートも開いていない場合、ターゲット上でサービスが実行されていないため、出力はありません。zgrab2 のコマンドラインの使用方法(およびユースケース)は fingerprintx とは少し異なります。zgrab2 の場合、プロトコルを事前に指定する必要があります: echo praetorian.com | zgrab2 http -p 8000 のように、すでにそこで何が実行されているかを知っていることが前提です。fingerprintx の場合はその必要はありません: echo praetorian.com:8000 | fingerprintx。アプリケーション層プロトコルスキャンのアプローチは非常に似ています。fingerprintx は多くの人々の成果であり、特に2022年の素晴らしいインターンクラスが貢献しています。これまでの貢献者リストは以下の通りです:
| サービス | トランスポート |
|---|
| 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 |