
Utilitário independente para descoberta de serviços em portas abertas!
Funcionalidades • Instalação • Uso • Executando fingerprintx • Uso como biblioteca • Por que não nmap? • Notas • Agradecimentos
fingerprintx é um utilitário semelhante ao httpx que também suporta a identificação de serviços como RDP, SSH, MySQL, PostgreSQL, Kafka, etc. fingerprintx pode ser usado em conjunto com scanners de porta como Naabu para identificar um conjunto de portas descobertas durante uma varredura de portas. Por exemplo, um engenheiro pode querer escanear uma faixa de IP e, em seguida, identificar rapidamente o serviço em execução em todas as portas descobertas.



51 plugins de detecção de serviço suportando protocolos TCP e UDP:
A partir do Github
go install github.com/praetorian-inc/fingerprintx/cmd/fingerprintx@latest
A partir do código-fonte (go versão > 1.18)
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# com go versão > 1.18
$ go build ./cmd/fingerprintx
$ ./fingerprintx -h
Docker
$ git clone [email protected]:praetorian-inc/fingerprintx.git
$ cd fingerprintx
# construir
docker build -t fingerprintx .
# e executar
docker run --rm fingerprintx -h
docker run --rm fingerprintx -t praetorian.com:80 --json
fingerprintx -h
A opção -h exibirá todas as flags suportadas pelo 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
O modo fast tentará identificar apenas o serviço padrão associado àquela porta para cada alvo. Por exemplo, se praetorian.com:8443 for a entrada, apenas o plugin https será executado. Se https não estiver rodando em praetorian.com:8443, NÃO haverá saída. Por que fazer isso? É uma maneira rápida de identificar a maioria dos serviços em uma grande lista de hosts (pense na regra 80/20).
Com um alvo:
$ fingerprintx -t 127.0.0.1:8000
http://127.0.0.1:8000
Por padrão, a saída está no formato: SERVICE://HOST:PORT. Para obter uma saída de serviço mais detalhada, especifique JSON com a flag --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"}}
Encanar a saída de outro programa (como naabu):
$ naabu 127.0.0.1 -silent 2>/dev/null | fingerprintx
http://127.0.0.1:8000
ftp://127.0.0.1:21
Executar com um arquivo de entrada:
$ cat input.txt | fingerprintx
http://praetorian.com:80
telnet://telehack.com:23
# ou se preferir
$ fingerprintx -l input.txt
http://praetorian.com:80
telnet://telehack.com:23
Com mais metadados na saída:
$ 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 pode ser importado para seu projeto para escanear serviços em portas abertas. Um exemplo de código de como fazer isso é fornecido aqui no diretório de exemplos. Compile com go build scan.go. Outro arquivo que pode ser útil como referência ao importar fingerprintx para seu próprio projeto é o executor de linha de comando.
Nmap é o padrão para varredura de rede. Por que usar fingerprintx em vez do nmap? As duas principais razões são:
fingerprintx trabalha de forma mais inteligente, não mais pesada: o primeiro plugin executado contra um servidor com a porta 8080 aberta é o plugin http. A abordagem de serviço padrão reduz o tempo de varredura no melhor caso. Na maioria das vezes, os serviços rodando nas portas 80, 443, 22 são http, https e ssh — então é isso que fingerprintx verifica primeiro.fingerprintx suporta saída JSON com a flag --json. O Nmap suporta várias opções de saída (normal, xml, grep), mas muitas vezes são difíceis de analisar e scriptar adequadamente. O fingerprintx suporta saída JSON, o que facilita a integração com outras ferramentas em pipelines de processamento.third_party que importa as bibliotecas de criptografia do Go?
ssh identifica as várias opções criptográficas suportadas pelo servidor ao coletar metadados durante o processo de handshake. Isso faz uso de algumas funções não exportadas, por isso as bibliotecas de criptografia do Go estão incluídas aqui com um arquivo export.go.target:port está aberta. Se nenhuma das portas estiver aberta, não haverá saída, pois não há serviços rodando nos alvos.zgrab2 é ligeiramente diferente do fingerprintx. Para o zgrab2, o protocolo deve ser especificado antecipadamente: echo praetorian.com | zgrab2 http -p 8000, o que pressupõe que você já sabe o que está rodando lá. Para o fingerprintx, esse não é o caso: echo praetorian.com:8000 | fingerprintx. A abordagem de varredura de protocolo na "camada de aplicação" é muito semelhante.fingerprintx é obra de muitas pessoas, incluindo nossa excelente turma de estagiários de 2022. Aqui está uma lista de colaboradores até agora:
| SERVIÇO | TRANSPORTE |
|---|
| 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 |