
Автономная утилита для обнаружения сервисов на открытых портах!
Возможности • Установка • Использование • Запуск fingerprintx • Использование в качестве библиотеки • Почему не nmap? • Примечания • Благодарности
fingerprintx — это утилита, аналогичная httpx, которая также поддерживает снятие отпечатков таких сервисов, как RDP, SSH, MySQL, PostgreSQL, Kafka и т.д. fingerprintx можно использовать вместе со сканерами портов, такими как Naabu, для распознавания набора портов, обнаруженных в ходе сканирования. Например, инженер может захотеть просканировать диапазон IP-адресов, а затем быстро распознать сервис, работающий на всех обнаруженных портах.



51 плагин определения сервисов, поддерживающих протоколы TCP и UDP:
| СЕРВИС | ТРАНСПОРТ |
|---|---|
| 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 |
Из GitHub
go install github.com/praetorian-inc/fingerprintx/cmd/fingerprintx@latest
Из исходного кода (go версии > 1.18)
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# с go версией > 1.18
$ go build ./cmd/fingerprintx
$ ./fingerprintx -h
Docker
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# сборка
docker build -t fingerprintx .
# и запуск
docker run --rm fingerprintx -h
docker run --rm fingerprintx -t praetorian.com:80 --json
fingerprintx -h
Опция -h отображает все поддерживаемые флаги для fingerprintx.
Использование:
fingerprintx [flags]
ОПРЕДЕЛЕНИЕ ЦЕЛИ:
Требуется указать хост и номер порта или IP и номер порта. Порт считается открытым.
HOST:PORT или IP:PORT
ПРИМЕРЫ:
fingerprintx -t praetorian.com:80
fingerprintx -l input-file.txt
fingerprintx --json -t praetorian.com:80,127.0.0.1:8000
Флаги:
--csv формат вывода в csv
-f, --fast быстрый режим
-h, --help справка для fingerprintx
--json формат вывода в json
-l, --list string входной файл со списком целей
-o, --output string выходной файл
-t, --targets strings цель или список целей через запятую
-w, --timeout int таймаут (миллисекунды) (по умолчанию 500)
-U, --udp запускать UDP-плагины
-v, --verbose подробный режим
Режим fast (быстрый) будет пытаться распознать только сервис по умолчанию, связанный с данным портом для каждой цели. Например, если на вход подаётся praetorian.com:8443, будет запущен только плагин https. Если https не запущен на praetorian.com:8443, вывода НЕ будет. Зачем это нужно? Это быстрый способ распознать большинство сервисов в большом списке хостов (в духе правила 80/20).
С одной целью:
$ fingerprintx -t 127.0.0.1:8000
http://127.0.0.1:8000
По умолчанию вывод имеет вид: SERVICE://HOST:PORT. Чтобы получить более подробный вывод сервиса, укажите JSON с помощью флага --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