
Автономная утилита для обнаружения сервисов на открытых портах!
Возможности • Установка • Использование • Запуск 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
# с 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
# или, если предпочитаете
$ 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? Две основные причины:
fingerprintx работает умнее, а не усерднее: первый плагин, запускаемый против сервера с открытым портом 8080, — это плагин http. Подход со службой по умолчанию сокращает время сканирования в лучшем случае. В большинстве случаев сервисы, работающие на портах 80, 443, 22, — это http, https и ssh, поэтому fingerprintx проверяет их в первую очередь.fingerprintx поддерживает вывод в формате JSON с помощью флага --json. Nmap поддерживает множество вариантов вывода (нормальный, xml, grep), но их часто сложно парсить и должным образом обрабатывать в скриптах. fingerprintx поддерживает вывод JSON, что упрощает интеграцию с другими инструментами в конвейерах обработки.third_party, которая импортирует библиотеки криптографии Go?
ssh определяет различные криптографические опции, поддерживаемые сервером при сборе метаданных во время рукопожатия. При этом используются несколько неэкспортируемых функций, поэтому библиотеки криптографии Go включены сюда с файлом export.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 |