fingerprint-mcp 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +663 -0
- package/README.ar.md +767 -0
- package/README.bn.md +767 -0
- package/README.bs.md +767 -0
- package/README.da.md +767 -0
- package/README.de.md +770 -0
- package/README.el.md +767 -0
- package/README.es.md +769 -0
- package/README.fr.md +769 -0
- package/README.hi.md +767 -0
- package/README.it.md +767 -0
- package/README.ja.md +767 -0
- package/README.ko.md +772 -0
- package/README.md +767 -0
- package/README.no.md +767 -0
- package/README.pl.md +767 -0
- package/README.pt-BR.md +767 -0
- package/README.ru.md +767 -0
- package/README.th.md +767 -0
- package/README.tr.md +767 -0
- package/README.uk.md +767 -0
- package/README.vi.md +767 -0
- package/README.zh-TW.md +768 -0
- package/README.zh.md +768 -0
- package/dist/app/index.d.ts +3 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +614 -0
- package/dist/app/index.js.map +1 -0
- package/dist/composite/analyze.d.ts +3 -0
- package/dist/composite/analyze.d.ts.map +1 -0
- package/dist/composite/analyze.js +59 -0
- package/dist/composite/analyze.js.map +1 -0
- package/dist/composite/correlate.d.ts +3 -0
- package/dist/composite/correlate.d.ts.map +1 -0
- package/dist/composite/correlate.js +184 -0
- package/dist/composite/correlate.js.map +1 -0
- package/dist/composite/enumerate.d.ts +3 -0
- package/dist/composite/enumerate.d.ts.map +1 -0
- package/dist/composite/enumerate.js +94 -0
- package/dist/composite/enumerate.js.map +1 -0
- package/dist/composite/helpers.d.ts +22 -0
- package/dist/composite/helpers.d.ts.map +1 -0
- package/dist/composite/helpers.js +111 -0
- package/dist/composite/helpers.js.map +1 -0
- package/dist/composite/index.d.ts +3 -0
- package/dist/composite/index.d.ts.map +1 -0
- package/dist/composite/index.js +29 -0
- package/dist/composite/index.js.map +1 -0
- package/dist/composite/meta.d.ts +3 -0
- package/dist/composite/meta.d.ts.map +1 -0
- package/dist/composite/meta.js +23 -0
- package/dist/composite/meta.js.map +1 -0
- package/dist/composite/osint.d.ts +3 -0
- package/dist/composite/osint.d.ts.map +1 -0
- package/dist/composite/osint.js +40 -0
- package/dist/composite/osint.js.map +1 -0
- package/dist/composite/recon.d.ts +3 -0
- package/dist/composite/recon.d.ts.map +1 -0
- package/dist/composite/recon.js +131 -0
- package/dist/composite/recon.js.map +1 -0
- package/dist/composite/scan-dns.d.ts +3 -0
- package/dist/composite/scan-dns.d.ts.map +1 -0
- package/dist/composite/scan-dns.js +44 -0
- package/dist/composite/scan-dns.js.map +1 -0
- package/dist/composite/scan-http.d.ts +3 -0
- package/dist/composite/scan-http.d.ts.map +1 -0
- package/dist/composite/scan-http.js +68 -0
- package/dist/composite/scan-http.js.map +1 -0
- package/dist/composite/scan-paths.d.ts +3 -0
- package/dist/composite/scan-paths.d.ts.map +1 -0
- package/dist/composite/scan-paths.js +32 -0
- package/dist/composite/scan-paths.js.map +1 -0
- package/dist/composite/scan-ports.d.ts +3 -0
- package/dist/composite/scan-ports.d.ts.map +1 -0
- package/dist/composite/scan-ports.js +79 -0
- package/dist/composite/scan-ports.js.map +1 -0
- package/dist/composite/scan-services.d.ts +3 -0
- package/dist/composite/scan-services.d.ts.map +1 -0
- package/dist/composite/scan-services.js +111 -0
- package/dist/composite/scan-services.js.map +1 -0
- package/dist/composite/scan-tls.d.ts +3 -0
- package/dist/composite/scan-tls.d.ts.map +1 -0
- package/dist/composite/scan-tls.js +32 -0
- package/dist/composite/scan-tls.js.map +1 -0
- package/dist/composite/scan-waf.d.ts +3 -0
- package/dist/composite/scan-waf.d.ts.map +1 -0
- package/dist/composite/scan-waf.js +35 -0
- package/dist/composite/scan-waf.js.map +1 -0
- package/dist/correlation/index.d.ts +3 -0
- package/dist/correlation/index.d.ts.map +1 -0
- package/dist/correlation/index.js +1044 -0
- package/dist/correlation/index.js.map +1 -0
- package/dist/data/analytics-patterns.d.ts +21 -0
- package/dist/data/analytics-patterns.d.ts.map +1 -0
- package/dist/data/analytics-patterns.js +449 -0
- package/dist/data/analytics-patterns.js.map +1 -0
- package/dist/data/app-signatures.d.ts +52 -0
- package/dist/data/app-signatures.d.ts.map +1 -0
- package/dist/data/app-signatures.js +1143 -0
- package/dist/data/app-signatures.js.map +1 -0
- package/dist/data/c2-signatures.d.ts +54 -0
- package/dist/data/c2-signatures.d.ts.map +1 -0
- package/dist/data/c2-signatures.js +256 -0
- package/dist/data/c2-signatures.js.map +1 -0
- package/dist/data/cloud-ranges.d.ts +34 -0
- package/dist/data/cloud-ranges.d.ts.map +1 -0
- package/dist/data/cloud-ranges.js +628 -0
- package/dist/data/cloud-ranges.js.map +1 -0
- package/dist/data/cookie-patterns.d.ts +28 -0
- package/dist/data/cookie-patterns.d.ts.map +1 -0
- package/dist/data/cookie-patterns.js +225 -0
- package/dist/data/cookie-patterns.js.map +1 -0
- package/dist/data/error-signatures.d.ts +19 -0
- package/dist/data/error-signatures.d.ts.map +1 -0
- package/dist/data/error-signatures.js +321 -0
- package/dist/data/error-signatures.js.map +1 -0
- package/dist/data/favicon-hashes.d.ts +25 -0
- package/dist/data/favicon-hashes.d.ts.map +1 -0
- package/dist/data/favicon-hashes.js +249 -0
- package/dist/data/favicon-hashes.js.map +1 -0
- package/dist/data/h2-signatures.d.ts +50 -0
- package/dist/data/h2-signatures.d.ts.map +1 -0
- package/dist/data/h2-signatures.js +211 -0
- package/dist/data/h2-signatures.js.map +1 -0
- package/dist/data/header-order.d.ts +38 -0
- package/dist/data/header-order.d.ts.map +1 -0
- package/dist/data/header-order.js +185 -0
- package/dist/data/header-order.js.map +1 -0
- package/dist/data/jarm-signatures.d.ts +25 -0
- package/dist/data/jarm-signatures.d.ts.map +1 -0
- package/dist/data/jarm-signatures.js +213 -0
- package/dist/data/jarm-signatures.js.map +1 -0
- package/dist/data/saas-patterns.d.ts +23 -0
- package/dist/data/saas-patterns.d.ts.map +1 -0
- package/dist/data/saas-patterns.js +139 -0
- package/dist/data/saas-patterns.js.map +1 -0
- package/dist/data/sensitive-paths.d.ts +12 -0
- package/dist/data/sensitive-paths.d.ts.map +1 -0
- package/dist/data/sensitive-paths.js +1539 -0
- package/dist/data/sensitive-paths.js.map +1 -0
- package/dist/data/service-banners.d.ts +59 -0
- package/dist/data/service-banners.d.ts.map +1 -0
- package/dist/data/service-banners.js +323 -0
- package/dist/data/service-banners.js.map +1 -0
- package/dist/data/smtp-signatures.d.ts +12 -0
- package/dist/data/smtp-signatures.d.ts.map +1 -0
- package/dist/data/smtp-signatures.js +350 -0
- package/dist/data/smtp-signatures.js.map +1 -0
- package/dist/data/takeover-patterns.d.ts +37 -0
- package/dist/data/takeover-patterns.d.ts.map +1 -0
- package/dist/data/takeover-patterns.js +249 -0
- package/dist/data/takeover-patterns.js.map +1 -0
- package/dist/data/tech-patterns.d.ts +44 -0
- package/dist/data/tech-patterns.d.ts.map +1 -0
- package/dist/data/tech-patterns.js +690 -0
- package/dist/data/tech-patterns.js.map +1 -0
- package/dist/data/waf-signatures.d.ts +21 -0
- package/dist/data/waf-signatures.d.ts.map +1 -0
- package/dist/data/waf-signatures.js +318 -0
- package/dist/data/waf-signatures.js.map +1 -0
- package/dist/dns/index.d.ts +3 -0
- package/dist/dns/index.d.ts.map +1 -0
- package/dist/dns/index.js +1067 -0
- package/dist/dns/index.js.map +1 -0
- package/dist/enum/index.d.ts +3 -0
- package/dist/enum/index.d.ts.map +1 -0
- package/dist/enum/index.js +818 -0
- package/dist/enum/index.js.map +1 -0
- package/dist/h2/index.d.ts +3 -0
- package/dist/h2/index.d.ts.map +1 -0
- package/dist/h2/index.js +414 -0
- package/dist/h2/index.js.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +2444 -0
- package/dist/http/index.js.map +1 -0
- package/dist/identify/index.d.ts +3 -0
- package/dist/identify/index.d.ts.map +1 -0
- package/dist/identify/index.js +447 -0
- package/dist/identify/index.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +165 -0
- package/dist/index.js.map +1 -0
- package/dist/infra/index.d.ts +3 -0
- package/dist/infra/index.d.ts.map +1 -0
- package/dist/infra/index.js +989 -0
- package/dist/infra/index.js.map +1 -0
- package/dist/iot/index.d.ts +3 -0
- package/dist/iot/index.d.ts.map +1 -0
- package/dist/iot/index.js +610 -0
- package/dist/iot/index.js.map +1 -0
- package/dist/meta/index.d.ts +3 -0
- package/dist/meta/index.d.ts.map +1 -0
- package/dist/meta/index.js +442 -0
- package/dist/meta/index.js.map +1 -0
- package/dist/osint/index.d.ts +3 -0
- package/dist/osint/index.d.ts.map +1 -0
- package/dist/osint/index.js +687 -0
- package/dist/osint/index.js.map +1 -0
- package/dist/passive/index.d.ts +3 -0
- package/dist/passive/index.d.ts.map +1 -0
- package/dist/passive/index.js +944 -0
- package/dist/passive/index.js.map +1 -0
- package/dist/path/index.d.ts +3 -0
- package/dist/path/index.d.ts.map +1 -0
- package/dist/path/index.js +878 -0
- package/dist/path/index.js.map +1 -0
- package/dist/protocol/mcp-server.d.ts +4 -0
- package/dist/protocol/mcp-server.d.ts.map +1 -0
- package/dist/protocol/mcp-server.js +32 -0
- package/dist/protocol/mcp-server.js.map +1 -0
- package/dist/protocol/tools.d.ts +3 -0
- package/dist/protocol/tools.d.ts.map +1 -0
- package/dist/protocol/tools.js +5 -0
- package/dist/protocol/tools.js.map +1 -0
- package/dist/service/index.d.ts +3 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +1053 -0
- package/dist/service/index.js.map +1 -0
- package/dist/smtp/index.d.ts +3 -0
- package/dist/smtp/index.d.ts.map +1 -0
- package/dist/smtp/index.js +437 -0
- package/dist/smtp/index.js.map +1 -0
- package/dist/ssh/index.d.ts +3 -0
- package/dist/ssh/index.d.ts.map +1 -0
- package/dist/ssh/index.js +676 -0
- package/dist/ssh/index.js.map +1 -0
- package/dist/tcp/index.d.ts +3 -0
- package/dist/tcp/index.d.ts.map +1 -0
- package/dist/tcp/index.js +369 -0
- package/dist/tcp/index.js.map +1 -0
- package/dist/timing/index.d.ts +3 -0
- package/dist/timing/index.d.ts.map +1 -0
- package/dist/timing/index.js +425 -0
- package/dist/timing/index.js.map +1 -0
- package/dist/tls/index.d.ts +3 -0
- package/dist/tls/index.d.ts.map +1 -0
- package/dist/tls/index.js +1332 -0
- package/dist/tls/index.js.map +1 -0
- package/dist/types/index.d.ts +26 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/cache.d.ts +11 -0
- package/dist/utils/cache.d.ts.map +1 -0
- package/dist/utils/cache.js +35 -0
- package/dist/utils/cache.js.map +1 -0
- package/dist/utils/murmurhash3.d.ts +3 -0
- package/dist/utils/murmurhash3.d.ts.map +1 -0
- package/dist/utils/murmurhash3.js +57 -0
- package/dist/utils/murmurhash3.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +10 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +35 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/require-key.d.ts +2 -0
- package/dist/utils/require-key.d.ts.map +1 -0
- package/dist/utils/require-key.js +8 -0
- package/dist/utils/require-key.js.map +1 -0
- package/dist/waf/index.d.ts +3 -0
- package/dist/waf/index.d.ts.map +1 -0
- package/dist/waf/index.js +767 -0
- package/dist/waf/index.js.map +1 -0
- package/dist/web/index.d.ts +3 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +1366 -0
- package/dist/web/index.js.map +1 -0
- package/package.json +66 -0
package/README.pt-BR.md
ADDED
|
@@ -0,0 +1,767 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<a href="README.md">English</a> |
|
|
3
|
+
<a href="README.zh.md">简体中文</a> |
|
|
4
|
+
<a href="README.zh-TW.md">繁體中文</a> |
|
|
5
|
+
<a href="README.ko.md">한국어</a> |
|
|
6
|
+
<a href="README.de.md">Deutsch</a> |
|
|
7
|
+
<a href="README.es.md">Español</a> |
|
|
8
|
+
<a href="README.fr.md">Français</a> |
|
|
9
|
+
<a href="README.it.md">Italiano</a> |
|
|
10
|
+
<a href="README.da.md">Dansk</a> |
|
|
11
|
+
<a href="README.ja.md">日本語</a> |
|
|
12
|
+
<a href="README.pl.md">Polski</a> |
|
|
13
|
+
<a href="README.ru.md">Русский</a> |
|
|
14
|
+
<a href="README.bs.md">Bosanski</a> |
|
|
15
|
+
<a href="README.ar.md">العربية</a> |
|
|
16
|
+
<a href="README.no.md">Norsk</a> |
|
|
17
|
+
<strong>Português (Brasil)</strong> |
|
|
18
|
+
<a href="README.th.md">ไทย</a> |
|
|
19
|
+
<a href="README.tr.md">Türkçe</a> |
|
|
20
|
+
<a href="README.uk.md">Українська</a> |
|
|
21
|
+
<a href="README.bn.md">বাংলা</a> |
|
|
22
|
+
<a href="README.el.md">Ελληνικά</a> |
|
|
23
|
+
<a href="README.vi.md">Tiếng Việt</a> |
|
|
24
|
+
<a href="README.hi.md">हिन्दी</a>
|
|
25
|
+
</p>
|
|
26
|
+
|
|
27
|
+
<p align="center">
|
|
28
|
+
<br>
|
|
29
|
+
<picture>
|
|
30
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/banner-dark.svg">
|
|
31
|
+
<source media="(prefers-color-scheme: light)" srcset="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/banner-light.svg">
|
|
32
|
+
<img alt="fingerprint-mcp" src="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/banner-dark.svg" width="700">
|
|
33
|
+
</picture>
|
|
34
|
+
</p>
|
|
35
|
+
|
|
36
|
+
<h3 align="center">Fingerprinting digital universal para agentes de IA.</h3>
|
|
37
|
+
|
|
38
|
+
<p align="center">
|
|
39
|
+
TCP, TLS/SSL, SSH, HTTP, DNS, WAF/CDN, IoT, SMTP, sondagem de servicos, JARM, JA4X, hash de favicon, topologia de infraestrutura, deteccao de C2, enriquecimento OSINT — unificados em um unico servidor MCP.<br>
|
|
40
|
+
Seu agente de IA obtem <b>fingerprinting de espectro completo sob demanda</b>, nao 11 ferramentas CLI desconectadas e correlacao manual.
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<br>
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<a href="#o-problema">O Problema</a> •
|
|
47
|
+
<a href="#como-e-diferente">Como e Diferente</a> •
|
|
48
|
+
<a href="#inicio-rapido">Inicio Rapido</a> •
|
|
49
|
+
<a href="#o-que-a-ia-pode-fazer">O que a IA Pode Fazer</a> •
|
|
50
|
+
<a href="#referencia-de-ferramentas-13-ferramentas-103-tecnicas">Ferramentas (13)</a> •
|
|
51
|
+
<a href="#fontes-de-dados-21">Fontes de Dados</a> •
|
|
52
|
+
<a href="#arquitetura">Arquitetura</a> •
|
|
53
|
+
<a href="CHANGELOG.md">Changelog</a> •
|
|
54
|
+
<a href="CONTRIBUTING.md">Contribuir</a>
|
|
55
|
+
</p>
|
|
56
|
+
|
|
57
|
+
<p align="center">
|
|
58
|
+
<a href="https://www.npmjs.com/package/fingerprint-mcp"><img src="https://img.shields.io/npm/v/fingerprint-mcp.svg" alt="npm"></a>
|
|
59
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-AGPL--3.0-blue.svg" alt="Licenca"></a>
|
|
60
|
+
<img src="https://img.shields.io/badge/runtime-Bun-f472b6" alt="Bun">
|
|
61
|
+
<img src="https://img.shields.io/badge/protocol-MCP-8b5cf6" alt="MCP">
|
|
62
|
+
<img src="https://img.shields.io/badge/tools-13-ef4444" alt="13 Ferramentas">
|
|
63
|
+
<img src="https://img.shields.io/badge/techniques-103-f97316" alt="103 Tecnicas">
|
|
64
|
+
</p>
|
|
65
|
+
|
|
66
|
+
<p align="center">
|
|
67
|
+
<img src="https://raw.githubusercontent.com/badchars/fingerprint-mcp/main/.github/demo.gif" alt="demonstracao do fingerprint-mcp" width="800">
|
|
68
|
+
</p>
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## O Problema
|
|
73
|
+
|
|
74
|
+
Fazer o fingerprinting de um servidor hoje significa lidar com uma duzia de ferramentas desconectadas. Voce executa `nmap` para varredura de portas, `testssl.sh` para analise de certificados, `curl -I` para cabecalhos HTTP, `dig` para DNS, `wafw00f` para deteccao de WAF, `ssh-audit` para SSH, uma ferramenta JARM separada, Wappalyzer para deteccao de tecnologias — e depois gasta 30 minutos cruzando manualmente tudo em uma planilha para descobrir o que realmente esta rodando.
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Fluxo de trabalho tradicional de fingerprinting:
|
|
78
|
+
analisar certificados TLS -> testssl.sh / openssl s_client
|
|
79
|
+
capturar cabecalhos HTTP -> curl -I
|
|
80
|
+
detectar tecnologias web -> wappalyzer CLI
|
|
81
|
+
reconhecimento DNS -> dig / nslookup / dnsenum
|
|
82
|
+
varredura de portas -> nmap -sV
|
|
83
|
+
deteccao de WAF -> wafw00f
|
|
84
|
+
auditoria SSH -> ssh-audit
|
|
85
|
+
fingerprinting de servicos -> nmap scripts
|
|
86
|
+
fingerprint JARM -> jarm (ferramenta separada)
|
|
87
|
+
verificar bancos OSINT -> shodan CLI, censys CLI
|
|
88
|
+
correlacionar tudo -> manualmente em uma planilha
|
|
89
|
+
──────────────────────────────
|
|
90
|
+
Total: 11 ferramentas, 30+ minutos, correlacao manual
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
O **fingerprint-mcp** oferece ao seu agente de IA 13 ferramentas compostas que encapsulam 103 tecnicas de fingerprinting em 21 provedores via [Model Context Protocol](https://modelcontextprotocol.io). O agente executa fingerprinting multicamada em paralelo, correlaciona sinais entre as camadas TCP/TLS/HTTP/DNS/SSH, detecta honeypots e infraestrutura C2, e apresenta um panorama de inteligencia unificado — em uma unica conversa.
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Com fingerprint-mcp:
|
|
97
|
+
Voce: "Faca um reconhecimento profundo em target.com"
|
|
98
|
+
|
|
99
|
+
Agente: -> recon {url: "https://target.com", depth: "deep"}
|
|
100
|
+
|
|
101
|
+
-> TLS: nginx/1.24.0 via JARM (3fd21b20d00000...),
|
|
102
|
+
certificado Let's Encrypt, 2 SANs, TLS 1.2+1.3
|
|
103
|
+
-> HTTP: Express.js atras do Cloudflare WAF,
|
|
104
|
+
React SPA, Google Analytics, 14 cabecalhos de seguranca analisados
|
|
105
|
+
-> DNS: registros A/AAAA/MX/TXT, SPF/DKIM/DMARC configurados,
|
|
106
|
+
Slack + Google Workspace detectados via CNAME/MX
|
|
107
|
+
-> Portas: 80, 443, 22 (OpenSSH 9.6), 8080 (servidor de desenvolvimento)
|
|
108
|
+
-> WAF: Cloudflare detectado, IP de origem descoberto via conexao direta
|
|
109
|
+
-> Enumeracao: 12 subdominios via logs CT, wildcard DNS detectado
|
|
110
|
+
-> "target.com roda nginx/1.24.0 com Express.js atras do
|
|
111
|
+
Cloudflare WAF. IP de origem 203.0.113.42 exposto na porta 8080.
|
|
112
|
+
TLS esta corretamente configurado (equivalente a A+), mas o servidor
|
|
113
|
+
de desenvolvimento na porta 8080 nao tem protecao WAF. 3 subdominios
|
|
114
|
+
apontam para infraestrutura desativada — risco potencial de takeover."
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
## Como e Diferente
|
|
120
|
+
|
|
121
|
+
Ferramentas existentes fornecem dados brutos uma camada por vez. O fingerprint-mcp da ao seu agente de IA a capacidade de **raciocinar em todas as camadas de fingerprinting simultaneamente**.
|
|
122
|
+
|
|
123
|
+
<table>
|
|
124
|
+
<thead>
|
|
125
|
+
<tr>
|
|
126
|
+
<th></th>
|
|
127
|
+
<th>Abordagem Tradicional</th>
|
|
128
|
+
<th>fingerprint-mcp</th>
|
|
129
|
+
</tr>
|
|
130
|
+
</thead>
|
|
131
|
+
<tbody>
|
|
132
|
+
<tr>
|
|
133
|
+
<td><b>Interface</b></td>
|
|
134
|
+
<td>11 ferramentas CLI diferentes com formatos de saida distintos</td>
|
|
135
|
+
<td>MCP — agente de IA chama ferramentas de forma conversacional</td>
|
|
136
|
+
</tr>
|
|
137
|
+
<tr>
|
|
138
|
+
<td><b>Tecnicas</b></td>
|
|
139
|
+
<td>Uma ferramenta, uma camada por vez</td>
|
|
140
|
+
<td>103 tecnicas em 21 provedores, executadas em paralelo</td>
|
|
141
|
+
</tr>
|
|
142
|
+
<tr>
|
|
143
|
+
<td><b>Analise TLS</b></td>
|
|
144
|
+
<td>Saida do testssl.sh, parse manual do JARM separadamente</td>
|
|
145
|
+
<td>Agente combina certificado + JARM + JA4X + suites de cifra + SNI + logs CT em uma chamada</td>
|
|
146
|
+
</tr>
|
|
147
|
+
<tr>
|
|
148
|
+
<td><b>Correlacao</b></td>
|
|
149
|
+
<td>Copiar e colar resultados em uma planilha</td>
|
|
150
|
+
<td>Agente correlaciona cruzando: "JARM corresponde a framework C2 conhecido, timing HTTP confirma honeypot"</td>
|
|
151
|
+
</tr>
|
|
152
|
+
<tr>
|
|
153
|
+
<td><b>Bypass de WAF</b></td>
|
|
154
|
+
<td>wafw00f detecta WAF, voce busca manualmente a origem</td>
|
|
155
|
+
<td>Agente detecta WAF, descobre IP de origem e verifica que serve o mesmo conteudo</td>
|
|
156
|
+
</tr>
|
|
157
|
+
<tr>
|
|
158
|
+
<td><b>Chaves API</b></td>
|
|
159
|
+
<td>Necessarias para Shodan, Censys, etc.</td>
|
|
160
|
+
<td>80+ tecnicas ativas funcionam sem nenhuma chave API; chaves desbloqueiam enriquecimento OSINT</td>
|
|
161
|
+
</tr>
|
|
162
|
+
<tr>
|
|
163
|
+
<td><b>Configuracao</b></td>
|
|
164
|
+
<td>Instalar nmap, testssl, wafw00f, ssh-audit, jarm, wappalyzer...</td>
|
|
165
|
+
<td><code>npx fingerprint-mcp</code> — um comando, zero configuracao</td>
|
|
166
|
+
</tr>
|
|
167
|
+
</tbody>
|
|
168
|
+
</table>
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
## Inicio Rapido
|
|
173
|
+
|
|
174
|
+
### Opcao 1: npx (sem instalacao)
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
npx fingerprint-mcp
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
Todas as 80+ tecnicas ativas de fingerprinting funcionam imediatamente. Nenhuma chave API necessaria para fingerprinting de TCP, TLS, SSH, HTTP, DNS, WAF, caminhos, servicos, timing, IoT, SMTP, infraestrutura e aplicacoes.
|
|
181
|
+
|
|
182
|
+
### Opcao 2: Clonar
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
git clone https://github.com/badchars/fingerprint-mcp.git
|
|
186
|
+
cd fingerprint-mcp
|
|
187
|
+
bun install
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Variaveis de ambiente (opcional)
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
# Enriquecimento OSINT (todas opcionais — fingerprinting ativo funciona sem nenhuma chave)
|
|
194
|
+
export SHODAN_API_KEY=your-key # Habilita osint_shodan, ssh_hostkey_lookup
|
|
195
|
+
export CENSYS_API_ID=your-id # Habilita osint_censys (gratis: 250 consultas/mes)
|
|
196
|
+
export CENSYS_API_SECRET=your-secret # Segredo da API Censys
|
|
197
|
+
export SECURITYTRAILS_API_KEY=your-key # Habilita waf_origin, enum_passive_dns
|
|
198
|
+
export VIRUSTOTAL_API_KEY=your-key # Habilita osint_virustotal (gratis: 500 consultas/dia)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Todas as chaves API sao opcionais. Sem elas, voce ainda obtem fingerprinting completo de TCP/TLS/SSH/HTTP/DNS/WAF/caminhos/servicos/timing/IoT/SMTP/infraestrutura/aplicacoes, correlacao, analise passiva, enumeracao e ferramentas meta — 80+ tecnicas que funcionam sondando o alvo diretamente.
|
|
202
|
+
|
|
203
|
+
### Conectar ao seu agente de IA
|
|
204
|
+
|
|
205
|
+
<details open>
|
|
206
|
+
<summary><b>Claude Code</b></summary>
|
|
207
|
+
|
|
208
|
+
```bash
|
|
209
|
+
# Com npx
|
|
210
|
+
claude mcp add fingerprint-mcp -- npx fingerprint-mcp
|
|
211
|
+
|
|
212
|
+
# Com clone local
|
|
213
|
+
claude mcp add fingerprint-mcp -- bun run /path/to/fingerprint-mcp/src/index.ts
|
|
214
|
+
```
|
|
215
|
+
|
|
216
|
+
</details>
|
|
217
|
+
|
|
218
|
+
<details>
|
|
219
|
+
<summary><b>Claude Desktop</b></summary>
|
|
220
|
+
|
|
221
|
+
Adicione em `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
222
|
+
|
|
223
|
+
```json
|
|
224
|
+
{
|
|
225
|
+
"mcpServers": {
|
|
226
|
+
"fingerprint": {
|
|
227
|
+
"command": "npx",
|
|
228
|
+
"args": ["-y", "fingerprint-mcp"],
|
|
229
|
+
"env": {
|
|
230
|
+
"SHODAN_API_KEY": "optional",
|
|
231
|
+
"CENSYS_API_ID": "optional",
|
|
232
|
+
"CENSYS_API_SECRET": "optional",
|
|
233
|
+
"SECURITYTRAILS_API_KEY": "optional",
|
|
234
|
+
"VIRUSTOTAL_API_KEY": "optional"
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
</details>
|
|
242
|
+
|
|
243
|
+
<details>
|
|
244
|
+
<summary><b>Cursor / Windsurf / outros clientes MCP</b></summary>
|
|
245
|
+
|
|
246
|
+
Mesmo formato de configuracao JSON. Aponte o comando para `npx fingerprint-mcp` ou o caminho da sua instalacao local.
|
|
247
|
+
|
|
248
|
+
</details>
|
|
249
|
+
|
|
250
|
+
### Comece a consultar
|
|
251
|
+
|
|
252
|
+
```
|
|
253
|
+
Voce: "Faca o fingerprinting completo de target.com — TLS, stack HTTP, WAF, DNS, portas abertas"
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
E so isso. O agente lida com fingerprinting multicamada, correlacao de sinais e analise de infraestrutura automaticamente.
|
|
257
|
+
|
|
258
|
+
---
|
|
259
|
+
|
|
260
|
+
## O que a IA Pode Fazer
|
|
261
|
+
|
|
262
|
+
### Reconhecimento Rapido
|
|
263
|
+
|
|
264
|
+
```
|
|
265
|
+
Voce: "Reconhecimento rapido em target.com"
|
|
266
|
+
|
|
267
|
+
Agente: -> recon {url: "https://target.com", depth: "quick"}
|
|
268
|
+
|
|
269
|
+
-> TCP: portas 80, 443, 22 abertas
|
|
270
|
+
-> TLS: certificado Let's Encrypt RSA, TLS 1.2+1.3, assinatura nginx JARM
|
|
271
|
+
-> HTTP: nginx/1.24.0, Express.js, React, Cloudflare CDN
|
|
272
|
+
-> DNS: A 203.0.113.42, MX Google Workspace, SPF/DKIM configurado
|
|
273
|
+
-> WAF: Cloudflare detectado (cabecalho cf-ray)
|
|
274
|
+
-> "target.com e um React SPA em Express.js atras do nginx/1.24.0,
|
|
275
|
+
servido pelo Cloudflare CDN. TLS configurado corretamente com
|
|
276
|
+
Let's Encrypt. SSH na porta 22 rodando OpenSSH 9.6. E-mail
|
|
277
|
+
gerenciado pelo Google Workspace com SPF/DKIM/DMARC completo."
|
|
278
|
+
```
|
|
279
|
+
|
|
280
|
+
### Investigacao TLS Profunda
|
|
281
|
+
|
|
282
|
+
```
|
|
283
|
+
Voce: "Analise a configuracao TLS de suspicious-server.com em detalhes"
|
|
284
|
+
|
|
285
|
+
Agente: -> scan_tls {host: "suspicious-server.com"}
|
|
286
|
+
|
|
287
|
+
-> Certificado: autoassinado, CN=localhost, expirado ha 47 dias
|
|
288
|
+
-> JARM: 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
|
|
289
|
+
(corresponde ao perfil padrao do Cobalt Strike)
|
|
290
|
+
-> JA4X: fingerprint corresponde a padrao de framework C2 conhecido
|
|
291
|
+
-> Suites de cifra: aceita cifras fracas (RC4, 3DES)
|
|
292
|
+
-> SNI: responde de forma identica a qualquer valor SNI
|
|
293
|
+
-> Logs CT: certificado nao registrado (nao confiavel publicamente)
|
|
294
|
+
-> "ALTO RISCO: Configuracao TLS indica fortemente infraestrutura C2.
|
|
295
|
+
Certificado autoassinado expirado, fingerprint JARM corresponde ao Cobalt Strike,
|
|
296
|
+
aceita cifras fracas e responde a valores SNI arbitrarios.
|
|
297
|
+
Recomenda-se investigacao imediata e bloqueio."
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Bypass de WAF e Descoberta de Origem
|
|
301
|
+
|
|
302
|
+
```
|
|
303
|
+
Voce: "target.com esta atras de um WAF. Voce consegue encontrar o servidor de origem?"
|
|
304
|
+
|
|
305
|
+
Agente: -> scan_waf {url: "https://target.com"}
|
|
306
|
+
-> scan_dns {domain: "target.com"}
|
|
307
|
+
-> enumerate {domain: "target.com"}
|
|
308
|
+
|
|
309
|
+
-> WAF: Cloudflare (AS13335), pagina de desafio em requisicoes suspeitas
|
|
310
|
+
-> DNS: registro A aponta para IP Cloudflare 104.21.x.x
|
|
311
|
+
-> Subdominios: dev.target.com resolve para 203.0.113.42 (nao-Cloudflare)
|
|
312
|
+
-> Conexao direta a 203.0.113.42:443 retorna o mesmo certificado TLS
|
|
313
|
+
-> Historico SecurityTrails: origem era 203.0.113.42 antes do Cloudflare
|
|
314
|
+
-> "IP de origem encontrado: 203.0.113.42. Descoberto via subdominio
|
|
315
|
+
dev.target.com que contorna o Cloudflare. A origem serve o mesmo
|
|
316
|
+
certificado TLS e responde ao cabecalho Host de target.com.
|
|
317
|
+
A origem nao tem protecao WAF — acesso direto possivel."
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### Descoberta de Servicos em um Host
|
|
321
|
+
|
|
322
|
+
```
|
|
323
|
+
Voce: "Quais servicos estao rodando em 10.0.1.50?"
|
|
324
|
+
|
|
325
|
+
Agente: -> scan_ports {host: "10.0.1.50"}
|
|
326
|
+
-> scan_services {host: "10.0.1.50", ports: [22, 80, 3306, 5432, 6379, 8080]}
|
|
327
|
+
|
|
328
|
+
-> Porta 22: OpenSSH 8.9p1 Ubuntu, chave de host ED25519
|
|
329
|
+
-> Porta 80: Apache/2.4.57, PHP/8.2, WordPress 6.4
|
|
330
|
+
-> Porta 3306: MySQL 8.0.36, autenticacao necessaria
|
|
331
|
+
-> Porta 5432: PostgreSQL 16.1, SSL necessario
|
|
332
|
+
-> Porta 6379: Redis 7.2.4, SEM autenticacao (aberto)
|
|
333
|
+
-> Porta 8080: servidor de desenvolvimento Node.js Express, CORS: *
|
|
334
|
+
-> "CRITICO: Redis na porta 6379 nao tem autenticacao — qualquer pessoa na
|
|
335
|
+
rede pode ler/escrever dados. O servidor de desenvolvimento Express na 8080
|
|
336
|
+
tem CORS wildcard. MySQL e PostgreSQL exigem autenticacao corretamente.
|
|
337
|
+
WordPress esta 2 versoes menores atrasado. Acao imediata necessaria
|
|
338
|
+
para o Redis e a exposicao do servidor de desenvolvimento."
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
---
|
|
342
|
+
|
|
343
|
+
## Referencia de Ferramentas (13 ferramentas, 103 tecnicas)
|
|
344
|
+
|
|
345
|
+
<details open>
|
|
346
|
+
<summary><b>recon — Reconhecimento completo com selecao de tecnicas baseada em profundidade</b></summary>
|
|
347
|
+
|
|
348
|
+
| Parametro | Tipo | Descricao |
|
|
349
|
+
|-----------|------|-----------|
|
|
350
|
+
| `url` | string | URL alvo para fingerprinting |
|
|
351
|
+
| `depth` | `quick` \| `standard` \| `deep` | Profundidade da varredura: quick=5 tecnicas, standard=20, deep=50+ |
|
|
352
|
+
|
|
353
|
+
Orquestra tecnicas de todos os provedores com base no nivel de profundidade. O modo rapido fornece uma visao geral rapida; o modo profundo executa fingerprinting exaustivo incluindo enumeracao, OSINT e correlacao.
|
|
354
|
+
|
|
355
|
+
</details>
|
|
356
|
+
|
|
357
|
+
<details>
|
|
358
|
+
<summary><b>scan_ports — Varredura de portas TCP com deteccao de servicos (3 tecnicas)</b></summary>
|
|
359
|
+
|
|
360
|
+
| Parametro | Tipo | Descricao |
|
|
361
|
+
|-----------|------|-----------|
|
|
362
|
+
| `host` | string | Host alvo (IP ou dominio) |
|
|
363
|
+
| `ports` | number[] | Opcional — portas especificas para varredura (padrao: portas comuns) |
|
|
364
|
+
|
|
365
|
+
| Tecnica | Descricao |
|
|
366
|
+
|---------|-----------|
|
|
367
|
+
| `tcp_probe` | Varredura TCP connect para detectar portas abertas |
|
|
368
|
+
| `tcp_banner` | Captura de banner em portas abertas para identificacao de servicos |
|
|
369
|
+
| `tcp_analysis` | Analise de combinacao de portas e inferencia de servicos |
|
|
370
|
+
|
|
371
|
+
</details>
|
|
372
|
+
|
|
373
|
+
<details>
|
|
374
|
+
<summary><b>scan_tls — Analise completa de TLS/SSL (8 tecnicas)</b></summary>
|
|
375
|
+
|
|
376
|
+
| Parametro | Tipo | Descricao |
|
|
377
|
+
|-----------|------|-----------|
|
|
378
|
+
| `host` | string | Host alvo (IP ou dominio) |
|
|
379
|
+
| `port` | number | Opcional — porta TLS (padrao: 443) |
|
|
380
|
+
|
|
381
|
+
| Tecnica | Descricao |
|
|
382
|
+
|---------|-----------|
|
|
383
|
+
| `tls_certificate` | Parsing de certificado X.509 — sujeito, emissor, SANs, validade, cadeia |
|
|
384
|
+
| `tls_jarm` | Fingerprinting ativo JARM — 10 sondas TLS Client Hello, hash de 62 caracteres |
|
|
385
|
+
| `tls_ja4x` | Fingerprinting passivo JA4X de TLS a partir de propriedades do certificado |
|
|
386
|
+
| `tls_ciphers` | Enumeracao de suites de cifra e analise de forca |
|
|
387
|
+
| `tls_protocols` | Deteccao de versoes de protocolo TLS suportadas (SSLv3 ate TLS 1.3) |
|
|
388
|
+
| `tls_sni` | Teste de comportamento SNI — certificado padrao vs. hostname solicitado |
|
|
389
|
+
| `tls_ct_logs` | Consulta de logs de Certificate Transparency via crt.sh |
|
|
390
|
+
| `tls_ocsp` | Verificacao de grampeamento OCSP e status de revogacao |
|
|
391
|
+
|
|
392
|
+
</details>
|
|
393
|
+
|
|
394
|
+
<details>
|
|
395
|
+
<summary><b>scan_dns — Inteligencia DNS (7 tecnicas)</b></summary>
|
|
396
|
+
|
|
397
|
+
| Parametro | Tipo | Descricao |
|
|
398
|
+
|-----------|------|-----------|
|
|
399
|
+
| `domain` | string | Dominio alvo |
|
|
400
|
+
|
|
401
|
+
| Tecnica | Descricao |
|
|
402
|
+
|---------|-----------|
|
|
403
|
+
| `dns_records` | Enumeracao completa de registros — A, AAAA, MX, NS, TXT, CNAME, SOA |
|
|
404
|
+
| `dns_email_auth` | Analise de registros SPF, DKIM e DMARC |
|
|
405
|
+
| `dns_saas` | Deteccao de SaaS/servicos via padroes CNAME e MX (Slack, Zendesk, etc.) |
|
|
406
|
+
| `dns_server` | Fingerprinting de servidor DNS (BIND, PowerDNS, Cloudflare, etc.) |
|
|
407
|
+
| `dns_takeover` | Deteccao de subdomain takeover via analise de CNAME pendente |
|
|
408
|
+
| `dns_zone` | Tentativa de transferencia de zona (AXFR) |
|
|
409
|
+
| `dns_caa` | Analise de registro CAA para restricoes de autoridade certificadora |
|
|
410
|
+
|
|
411
|
+
</details>
|
|
412
|
+
|
|
413
|
+
<details>
|
|
414
|
+
<summary><b>scan_http — Fingerprinting HTTP/web (29 tecnicas)</b></summary>
|
|
415
|
+
|
|
416
|
+
| Parametro | Tipo | Descricao |
|
|
417
|
+
|-----------|------|-----------|
|
|
418
|
+
| `url` | string | URL alvo |
|
|
419
|
+
|
|
420
|
+
| Tecnica | Provedor | Descricao |
|
|
421
|
+
|---------|----------|-----------|
|
|
422
|
+
| `http_headers` | HTTP | Analise de cabecalhos de resposta e identificacao de servidor |
|
|
423
|
+
| `http_header_order` | HTTP | Fingerprint de ordem de cabecalhos (assinatura de software do servidor) |
|
|
424
|
+
| `http_security_headers` | HTTP | Auditoria de cabecalhos de seguranca (CSP, HSTS, X-Frame-Options, etc.) |
|
|
425
|
+
| `http_cookies` | HTTP | Analise de cookies — flags, prefixos, deteccao de framework |
|
|
426
|
+
| `http_methods` | HTTP | Enumeracao de metodos HTTP permitidos (OPTIONS) |
|
|
427
|
+
| `http_cors` | HTTP | Analise de politica CORS e deteccao de configuracao incorreta |
|
|
428
|
+
| `http_compression` | HTTP | Algoritmos de compressao suportados (gzip, br, zstd) |
|
|
429
|
+
| `http_caching` | HTTP | Analise de cabecalhos de cache (deteccao de CDN, proxy reverso) |
|
|
430
|
+
| `http_etag` | HTTP | Analise de formato ETag para identificacao de backend |
|
|
431
|
+
| `http_error` | HTTP | Fingerprinting de paginas de erro (paginas de erro personalizadas vs. padrao) |
|
|
432
|
+
| `http_redirect` | HTTP | Analise de cadeia de redirecionamento |
|
|
433
|
+
| `http_timing` | HTTP | Linha base de tempo de resposta para perfilamento de desempenho do servidor |
|
|
434
|
+
| `http_favicon` | HTTP | Hash de favicon (MurmurHash3) para identificacao de tecnologia |
|
|
435
|
+
| `http_robots` | HTTP | Parsing de robots.txt e extracao de caminhos proibidos |
|
|
436
|
+
| `http_sitemap` | HTTP | Descoberta de sitemap e extracao de URLs |
|
|
437
|
+
| `http_wellknown` | HTTP | Descoberta de endpoints .well-known (security.txt, openid, etc.) |
|
|
438
|
+
| `web_tech` | Web | Deteccao de tecnologias via padroes HTML/JS/CSS |
|
|
439
|
+
| `web_analytics` | Web | Deteccao de servicos de analytics e rastreamento |
|
|
440
|
+
| `web_sourcemaps` | Web | Descoberta de arquivos source map |
|
|
441
|
+
| `web_websocket` | Web | Deteccao de endpoints WebSocket |
|
|
442
|
+
| `web_graphql` | Web | Deteccao de endpoint GraphQL e introspecao |
|
|
443
|
+
| `web_spa` | Web | Deteccao de framework de aplicacao single-page |
|
|
444
|
+
| `web_cdn` | Web | Deteccao de CDN via cabecalhos de resposta e DNS |
|
|
445
|
+
| `web_meta` | Web | Analise de tags meta HTML (gerador, dicas de framework) |
|
|
446
|
+
| `web_feed` | Web | Descoberta de feeds RSS/Atom |
|
|
447
|
+
| `h2_detect` | HTTP/2 | Deteccao de suporte ao protocolo HTTP/2 |
|
|
448
|
+
| `h2_fingerprint` | HTTP/2 | Fingerprinting de servidor HTTP/2 (SETTINGS, WINDOW_UPDATE) |
|
|
449
|
+
| `h2_h3` | HTTP/2 | Deteccao de suporte HTTP/3 (QUIC) via cabecalho Alt-Svc |
|
|
450
|
+
| `app_cms` | Application | Deteccao de CMS (WordPress, Drupal, Joomla, etc.) |
|
|
451
|
+
|
|
452
|
+
</details>
|
|
453
|
+
|
|
454
|
+
<details>
|
|
455
|
+
<summary><b>scan_paths — Inteligencia de caminhos (5 tecnicas)</b></summary>
|
|
456
|
+
|
|
457
|
+
| Parametro | Tipo | Descricao |
|
|
458
|
+
|-----------|------|-----------|
|
|
459
|
+
| `url` | string | URL alvo |
|
|
460
|
+
| `categories` | string[] | Opcional — categorias a verificar (sensitive, git, debug, api, config) |
|
|
461
|
+
|
|
462
|
+
| Tecnica | Descricao |
|
|
463
|
+
|---------|-----------|
|
|
464
|
+
| `path_sensitive` | Descoberta de arquivos sensiveis (arquivos de backup, arquivos de configuracao, dumps de banco de dados) |
|
|
465
|
+
| `path_robots` | Analise de robots.txt e sitemap.xml para caminhos ocultos |
|
|
466
|
+
| `path_git` | Deteccao de vazamento de repositorio Git (.git/HEAD, .git/config) |
|
|
467
|
+
| `path_debug` | Descoberta de endpoints de debug (phpinfo, server-status, consoles de debug) |
|
|
468
|
+
| `path_api` | Descoberta de versoes de API e endpoints de documentacao |
|
|
469
|
+
|
|
470
|
+
</details>
|
|
471
|
+
|
|
472
|
+
<details>
|
|
473
|
+
<summary><b>scan_waf — Deteccao e fingerprinting de WAF/CDN (4 tecnicas)</b></summary>
|
|
474
|
+
|
|
475
|
+
| Parametro | Tipo | Descricao |
|
|
476
|
+
|-----------|------|-----------|
|
|
477
|
+
| `url` | string | URL alvo |
|
|
478
|
+
|
|
479
|
+
| Tecnica | Descricao |
|
|
480
|
+
|---------|-----------|
|
|
481
|
+
| `waf_detect` | Deteccao de presenca de WAF via analise de cabecalho de resposta e comportamento |
|
|
482
|
+
| `waf_cdn` | Identificacao de provedor CDN (Cloudflare, Akamai, Fastly, etc.) |
|
|
483
|
+
| `waf_fingerprint` | Identificacao de produto WAF e deteccao de versao |
|
|
484
|
+
| `waf_origin` | Descoberta de IP de origem atras de WAF/CDN (requer `SECURITYTRAILS_API_KEY`) |
|
|
485
|
+
|
|
486
|
+
</details>
|
|
487
|
+
|
|
488
|
+
<details>
|
|
489
|
+
<summary><b>scan_services — Sondagem em nivel de servico (12 tecnicas)</b></summary>
|
|
490
|
+
|
|
491
|
+
| Parametro | Tipo | Descricao |
|
|
492
|
+
|-----------|------|-----------|
|
|
493
|
+
| `host` | string | Host alvo (IP ou dominio) |
|
|
494
|
+
| `ports` | number[] | Opcional — portas especificas para sondar |
|
|
495
|
+
| `service` | string | Opcional — servico especifico para sondar (mysql, postgres, redis, ftp, ssh, smtp, vnc, iot) |
|
|
496
|
+
|
|
497
|
+
| Tecnica | Provedor | Descricao |
|
|
498
|
+
|---------|----------|-----------|
|
|
499
|
+
| `ssh_probe` | SSH | Deteccao de versao do protocolo SSH e software |
|
|
500
|
+
| `ssh_algorithms` | SSH | Auditoria de algoritmos SSH (KEX, cifras, MACs, tipos de chave de host) |
|
|
501
|
+
| `ssh_hostkey_lookup` | SSH | Consulta de chave de host SSH via Shodan (requer `SHODAN_API_KEY`) |
|
|
502
|
+
| `svc_mysql` | Service | Deteccao de versao MySQL e fingerprinting de capacidades |
|
|
503
|
+
| `svc_postgres` | Service | Deteccao de versao PostgreSQL e verificacao de suporte SSL |
|
|
504
|
+
| `svc_redis` | Service | Deteccao de versao Redis e status de autenticacao |
|
|
505
|
+
| `svc_ftp` | Service | Analise de banner FTP e verificacao de login anonimo |
|
|
506
|
+
| `svc_vnc_rdp` | Service | Deteccao de servico VNC/RDP e avaliacao de seguranca |
|
|
507
|
+
| `smtp_banner` | SMTP | Analise de banner SMTP e identificacao de MTA |
|
|
508
|
+
| `smtp_starttls` | SMTP | Suporte SMTP STARTTLS e inspecao de certificado |
|
|
509
|
+
| `iot_detect` | IoT | Deteccao de dispositivos IoT via padroes de banner e paginas padrao |
|
|
510
|
+
| `iot_upnp` | IoT | Descoberta de dispositivos UPnP/SSDP na rede local |
|
|
511
|
+
|
|
512
|
+
</details>
|
|
513
|
+
|
|
514
|
+
<details>
|
|
515
|
+
<summary><b>enumerate — Expansao de escopo (8 tecnicas)</b></summary>
|
|
516
|
+
|
|
517
|
+
| Parametro | Tipo | Descricao |
|
|
518
|
+
|-----------|------|-----------|
|
|
519
|
+
| `domain` | string | Dominio alvo |
|
|
520
|
+
|
|
521
|
+
| Tecnica | Descricao |
|
|
522
|
+
|---------|-----------|
|
|
523
|
+
| `enum_subdomains` | Enumeracao de subdominios via multiplos metodos |
|
|
524
|
+
| `enum_wildcard` | Deteccao de wildcard DNS |
|
|
525
|
+
| `enum_tld` | Expansao de TLD (target.com -> target.net, target.org, etc.) |
|
|
526
|
+
| `enum_related` | Descoberta de dominios relacionados via infraestrutura compartilhada |
|
|
527
|
+
| `enum_asn` | Descoberta de vizinhos ASN — outros dominios na mesma rede |
|
|
528
|
+
| `enum_ct` | Extracao de subdominios de logs de Certificate Transparency |
|
|
529
|
+
| `enum_passive_dns` | Historico de DNS passivo (requer `SECURITYTRAILS_API_KEY`) |
|
|
530
|
+
| `enum_scope` | Resumo de escopo e visao geral da superficie de ataque |
|
|
531
|
+
|
|
532
|
+
</details>
|
|
533
|
+
|
|
534
|
+
<details>
|
|
535
|
+
<summary><b>osint — Enriquecimento OSINT (6 tecnicas)</b></summary>
|
|
536
|
+
|
|
537
|
+
| Parametro | Tipo | Descricao |
|
|
538
|
+
|-----------|------|-----------|
|
|
539
|
+
| `target` | string | Endereco IP ou dominio para enriquecer |
|
|
540
|
+
| `type` | `ip` \| `domain` | Opcional — tipo de alvo (auto-detectado se omitido) |
|
|
541
|
+
|
|
542
|
+
| Tecnica | Autenticacao | Descricao |
|
|
543
|
+
|---------|--------------|-----------|
|
|
544
|
+
| `osint_shodan` | `SHODAN_API_KEY` | Consulta de host Shodan — portas abertas, banners, vulnerabilidades, SO |
|
|
545
|
+
| `osint_censys` | `CENSYS_API_ID` + `CENSYS_API_SECRET` | Dados de host Censys — servicos, TLS, sistema autonomo |
|
|
546
|
+
| `osint_reverse_ip` | Nenhuma | Consulta reversa de IP — outros dominios no mesmo IP |
|
|
547
|
+
| `osint_whois` | Nenhuma | Dados de registro WHOIS — registrador, datas, nameservers |
|
|
548
|
+
| `osint_webarchive` | Nenhuma | Historico do Web Archive — primeiro/ultimo snapshot, frequencia de alteracao |
|
|
549
|
+
| `osint_virustotal` | `VIRUSTOTAL_API_KEY` | Relatorio VirusTotal de dominio/IP — deteccoes, categorias, DNS |
|
|
550
|
+
|
|
551
|
+
</details>
|
|
552
|
+
|
|
553
|
+
<details>
|
|
554
|
+
<summary><b>analyze — Analise passiva de fingerprint (3 modos)</b></summary>
|
|
555
|
+
|
|
556
|
+
| Parametro | Tipo | Descricao |
|
|
557
|
+
|-----------|------|-----------|
|
|
558
|
+
| `type` | `headers` \| `html` \| `banner` | Tipo de dado a analisar |
|
|
559
|
+
| `data` | string | Dados brutos para analisar (cole cabecalhos, HTML ou saida de banner) |
|
|
560
|
+
|
|
561
|
+
| Modo | Descricao |
|
|
562
|
+
|------|-----------|
|
|
563
|
+
| `fp_analyze_headers` | Analise passiva de cabecalhos HTTP — deteccao de servidor, framework, proxy sem enviar trafego |
|
|
564
|
+
| `fp_analyze_html` | Analise passiva de HTML — deteccao de tecnologia, identificacao de framework a partir do codigo-fonte |
|
|
565
|
+
| `fp_analyze_banner` | Analise passiva de banner — identificacao de servico a partir de texto bruto de banner |
|
|
566
|
+
|
|
567
|
+
</details>
|
|
568
|
+
|
|
569
|
+
<details>
|
|
570
|
+
<summary><b>correlate — Motor de correlacao multi-sinal (7 modos)</b></summary>
|
|
571
|
+
|
|
572
|
+
| Parametro | Tipo | Descricao |
|
|
573
|
+
|-----------|------|-----------|
|
|
574
|
+
| `type` | `consistency` \| `honeypot` \| `spoofing` \| `compare` \| `topology` \| `c2` \| `identify` | Modo de correlacao |
|
|
575
|
+
| `signals` | object | Sinais de fingerprint para correlacionar (varia por modo) |
|
|
576
|
+
|
|
577
|
+
| Modo | Descricao |
|
|
578
|
+
|------|-----------|
|
|
579
|
+
| `fp_consistency` | Verificacao de consistencia de sinais entre camadas — TCP, TLS, HTTP e DNS concordam? |
|
|
580
|
+
| `fp_honeypot` | Deteccao de honeypot — verifica combinacoes impossiveis de servicos e anomalias comportamentais |
|
|
581
|
+
| `fp_spoofing` | Deteccao de spoofing — identifica discrepancias entre cabecalhos do servidor e comportamento real |
|
|
582
|
+
| `fp_compare` | Comparacao lado a lado dos perfis de fingerprint de dois hosts |
|
|
583
|
+
| `fp_topology` | Mapeamento de topologia de infraestrutura — CDN, balanceador de carga, cadeia de proxy reverso |
|
|
584
|
+
| `fp_c2` | Deteccao de framework C2 via correlacao de JARM, TLS, HTTP e timing |
|
|
585
|
+
| `fp_identify` | Identificacao baseada em hash contra banco de dados de assinaturas conhecidas |
|
|
586
|
+
|
|
587
|
+
</details>
|
|
588
|
+
|
|
589
|
+
<details>
|
|
590
|
+
<summary><b>meta — Configuracao e dados do servidor (3 modos)</b></summary>
|
|
591
|
+
|
|
592
|
+
| Parametro | Tipo | Descricao |
|
|
593
|
+
|-----------|------|-----------|
|
|
594
|
+
| `category` | string | Opcional — filtrar por categoria |
|
|
595
|
+
|
|
596
|
+
| Modo | Descricao |
|
|
597
|
+
|------|-----------|
|
|
598
|
+
| `fp_sources` | Listar todas as fontes de dados disponiveis com configuracao e status de chaves API |
|
|
599
|
+
| `fp_config` | Configuracao do servidor — versao, provedores carregados, contagem de tecnicas |
|
|
600
|
+
| `fp_signatures` | Listagem do banco de dados de assinaturas — JARM, banner, WAF, assinaturas de aplicacoes |
|
|
601
|
+
|
|
602
|
+
</details>
|
|
603
|
+
|
|
604
|
+
---
|
|
605
|
+
|
|
606
|
+
### Uso via CLI
|
|
607
|
+
|
|
608
|
+
```bash
|
|
609
|
+
# Listar todas as ferramentas e tecnicas disponiveis
|
|
610
|
+
npx fingerprint-mcp --list
|
|
611
|
+
|
|
612
|
+
# Executar qualquer ferramenta diretamente
|
|
613
|
+
npx fingerprint-mcp --tool recon '{"url":"https://example.com","depth":"quick"}'
|
|
614
|
+
npx fingerprint-mcp --tool scan_tls '{"host":"example.com"}'
|
|
615
|
+
npx fingerprint-mcp --tool scan_ports '{"host":"10.0.1.50","ports":[22,80,443,3306,8080]}'
|
|
616
|
+
npx fingerprint-mcp --tool scan_dns '{"domain":"example.com"}'
|
|
617
|
+
npx fingerprint-mcp --tool scan_http '{"url":"https://example.com"}'
|
|
618
|
+
npx fingerprint-mcp --tool scan_waf '{"url":"https://example.com"}'
|
|
619
|
+
npx fingerprint-mcp --tool scan_services '{"host":"10.0.1.50","service":"redis"}'
|
|
620
|
+
npx fingerprint-mcp --tool enumerate '{"domain":"example.com"}'
|
|
621
|
+
npx fingerprint-mcp --tool analyze '{"type":"headers","data":"Server: nginx/1.24.0\nX-Powered-By: Express"}'
|
|
622
|
+
npx fingerprint-mcp --tool correlate '{"type":"honeypot","signals":{"jarm":"...","banner":"..."}}'
|
|
623
|
+
npx fingerprint-mcp --tool meta '{}'
|
|
624
|
+
|
|
625
|
+
# Ferramentas OSINT (requerem chaves API)
|
|
626
|
+
SHODAN_API_KEY=your-key npx fingerprint-mcp --tool osint '{"target":"203.0.113.42","type":"ip"}'
|
|
627
|
+
```
|
|
628
|
+
|
|
629
|
+
---
|
|
630
|
+
|
|
631
|
+
## Fontes de Dados (21)
|
|
632
|
+
|
|
633
|
+
| Fonte | Autenticacao | O que fornece |
|
|
634
|
+
|-------|--------------|---------------|
|
|
635
|
+
| Sondagem TCP | Nenhuma | Varredura de portas, captura de banner, deteccao de servicos |
|
|
636
|
+
| Analise TLS/SSL | Nenhuma | Parsing de certificados, fingerprinting JARM, JA4X, enumeracao de cifras, teste SNI |
|
|
637
|
+
| Sondagem SSH | Nenhuma | Versao do protocolo, auditoria de algoritmos, deteccao de software |
|
|
638
|
+
| Analise HTTP | Nenhuma | Fingerprinting de cabecalhos, hash de favicon, analise de cookies, enumeracao de metodos, CORS |
|
|
639
|
+
| Deteccao web | Nenhuma | Deteccao de tecnologias, analytics, source maps, WebSocket, GraphQL, frameworks SPA |
|
|
640
|
+
| Descoberta de caminhos | Nenhuma | Arquivos sensiveis, vazamentos git, endpoints de debug, versoes de API, robots.txt |
|
|
641
|
+
| Resolucao DNS | Nenhuma | Enumeracao de registros, analise de autenticacao de e-mail, deteccao de SaaS, fingerprinting de servidor |
|
|
642
|
+
| Deteccao WAF/CDN | Nenhuma | Identificacao de WAF, deteccao de CDN, fingerprinting de WAF |
|
|
643
|
+
| Analise de timing | Nenhuma | Linha base de tempo de resposta, deteccao de desvio de relogio |
|
|
644
|
+
| HTTP/2 e HTTP/3 | Nenhuma | Deteccao e fingerprinting HTTP/2, descoberta HTTP/3 Alt-Svc |
|
|
645
|
+
| Sondagem SMTP | Nenhuma | Analise de banner SMTP, inspecao STARTTLS |
|
|
646
|
+
| IoT/Embarcados | Nenhuma | Deteccao de dispositivos IoT, descoberta UPnP/SSDP |
|
|
647
|
+
| Deteccao de aplicacoes | Nenhuma | Identificacao de CMS, framework e plataforma de e-commerce |
|
|
648
|
+
| Sondagem de servicos | Nenhuma | Fingerprinting MySQL, PostgreSQL, Redis, FTP, VNC/RDP |
|
|
649
|
+
| Deteccao de infraestrutura | Nenhuma | Identificacao de provedor de nuvem, hospedagem, CDN |
|
|
650
|
+
| Motor de correlacao | Nenhuma | Consistencia de sinais, deteccao de honeypot, deteccao de spoofing, mapeamento de topologia |
|
|
651
|
+
| Motor de identificacao | Nenhuma | Identificacao baseada em hash, deteccao de C2, correspondencia de assinaturas |
|
|
652
|
+
| [Shodan](https://www.shodan.io) | `SHODAN_API_KEY` | Inteligencia de host — portas abertas, banners, vulnerabilidades, deteccao de SO |
|
|
653
|
+
| [Censys](https://censys.io) | `CENSYS_API_ID` | Dados de host — servicos, certificados TLS, informacao de sistema autonomo |
|
|
654
|
+
| [SecurityTrails](https://securitytrails.com) | `SECURITYTRAILS_API_KEY` | Descoberta de origem WAF, historico DNS passivo, registros historicos |
|
|
655
|
+
| [VirusTotal](https://www.virustotal.com) | `VIRUSTOTAL_API_KEY` | Reputacao de dominio/IP, resultados de deteccao, historico DNS, categorias |
|
|
656
|
+
|
|
657
|
+
---
|
|
658
|
+
|
|
659
|
+
## Arquitetura
|
|
660
|
+
|
|
661
|
+
```
|
|
662
|
+
src/
|
|
663
|
+
index.ts # Ponto de entrada CLI (--help, --list, --tool, servidor stdio)
|
|
664
|
+
protocol/
|
|
665
|
+
mcp-server.ts # Configuracao do servidor MCP (transporte stdio)
|
|
666
|
+
tools.ts # Registro de ferramentas — todas as 13 ferramentas compostas registradas aqui
|
|
667
|
+
types/
|
|
668
|
+
index.ts # Tipos compartilhados (ToolDef, ToolContext, ToolResult)
|
|
669
|
+
utils/
|
|
670
|
+
rate-limiter.ts # Limitador de taxa por provedor
|
|
671
|
+
cache.ts # Cache TTL para respostas de API
|
|
672
|
+
require-key.ts # Auxiliar de validacao de chave API
|
|
673
|
+
murmurhash3.ts # MurmurHash3 para hash de favicon
|
|
674
|
+
composite/ # 13 orquestradores de ferramentas compostas
|
|
675
|
+
recon.ts # Orquestrador de reconhecimento completo (quick/standard/deep)
|
|
676
|
+
scan-ports.ts # Composto de varredura de portas
|
|
677
|
+
scan-tls.ts # Composto de analise TLS
|
|
678
|
+
scan-dns.ts # Composto de inteligencia DNS
|
|
679
|
+
scan-http.ts # Composto de fingerprinting HTTP
|
|
680
|
+
scan-paths.ts # Composto de descoberta de caminhos
|
|
681
|
+
scan-waf.ts # Composto de deteccao WAF/CDN
|
|
682
|
+
scan-services.ts # Composto de sondagem de servicos
|
|
683
|
+
analyze.ts # Composto de analise passiva
|
|
684
|
+
correlate.ts # Composto do motor de correlacao
|
|
685
|
+
enumerate.ts # Composto de expansao de escopo
|
|
686
|
+
osint.ts # Composto de enriquecimento OSINT
|
|
687
|
+
meta.ts # Composto meta do servidor
|
|
688
|
+
helpers.ts # Auxiliares compostos compartilhados
|
|
689
|
+
tcp/ # Tecnicas de sondagem TCP (3)
|
|
690
|
+
tls/ # Tecnicas de analise TLS/SSL (8)
|
|
691
|
+
ssh/ # Tecnicas de sondagem SSH (3)
|
|
692
|
+
http/ # Tecnicas de fingerprinting HTTP (16)
|
|
693
|
+
web/ # Tecnicas de deteccao de tecnologias web (9)
|
|
694
|
+
path/ # Tecnicas de descoberta de caminhos (5)
|
|
695
|
+
dns/ # Tecnicas de inteligencia DNS (7)
|
|
696
|
+
waf/ # Tecnicas de deteccao WAF/CDN (4)
|
|
697
|
+
timing/ # Tecnicas de analise de timing (2)
|
|
698
|
+
h2/ # Tecnicas HTTP/2 e HTTP/3 (3)
|
|
699
|
+
smtp/ # Tecnicas de sondagem SMTP (2)
|
|
700
|
+
iot/ # Tecnicas de deteccao IoT/embarcados (2)
|
|
701
|
+
app/ # Tecnicas de deteccao de aplicacoes (3)
|
|
702
|
+
service/ # Tecnicas de sondagem de servicos (5)
|
|
703
|
+
infra/ # Tecnicas de deteccao de infraestrutura (3)
|
|
704
|
+
correlation/ # Motor de correlacao (5)
|
|
705
|
+
identify/ # Motor de identificacao (3)
|
|
706
|
+
passive/ # Analise passiva (3)
|
|
707
|
+
osint/ # Tecnicas de enriquecimento OSINT (6)
|
|
708
|
+
enum/ # Tecnicas de enumeracao (8)
|
|
709
|
+
meta/ # Ferramentas meta (3)
|
|
710
|
+
data/ # Bancos de dados de assinaturas e bibliotecas de padroes
|
|
711
|
+
jarm-signatures.ts # Fingerprints JARM conhecidos (C2, servidores, CDNs)
|
|
712
|
+
waf-signatures.ts # Assinaturas de deteccao de WAF
|
|
713
|
+
service-banners.ts # Padroes de banner de servicos
|
|
714
|
+
tech-patterns.ts # Padroes de deteccao de tecnologias
|
|
715
|
+
favicon-hashes.ts # Valores MurmurHash3 de favicon conhecidos
|
|
716
|
+
c2-signatures.ts # Assinaturas de framework C2
|
|
717
|
+
... # 15+ bancos de dados de assinaturas/padroes
|
|
718
|
+
```
|
|
719
|
+
|
|
720
|
+
**Decisoes de design:**
|
|
721
|
+
|
|
722
|
+
- **13 ferramentas compostas, 103 tecnicas** — O agente chama ferramentas de alto nivel (`recon`, `scan_tls`, `scan_http`). Cada composto orquestra multiplas tecnicas de baixo nivel e retorna resultados correlacionados. Isso reduz o overhead de chamadas de ferramentas enquanto mantem a granularidade.
|
|
723
|
+
- **21 provedores, 1 servidor** — Cada camada de fingerprinting e um modulo independente. O orquestrador composto seleciona tecnicas com base no contexto e profundidade.
|
|
724
|
+
- **Ativo primeiro, OSINT opcional** — 80+ tecnicas funcionam sondando o alvo diretamente com zero chaves API. Provedores OSINT (Shodan, Censys, VirusTotal, SecurityTrails) adicionam enriquecimento, mas nunca sao obrigatorios.
|
|
725
|
+
- **Limitadores de taxa por provedor** — Cada provedor tem sua propria instancia de `RateLimiter`. A sondagem ativa e limitada em taxa para evitar deteccao; APIs OSINT sao calibradas para suas cotas.
|
|
726
|
+
- **Cache TTL** — Registros DNS (10min), resultados OSINT (15min), logs CT (30min) sao armazenados em cache para evitar consultas redundantes durante fluxos de trabalho com multiplas ferramentas.
|
|
727
|
+
- **Degradacao elegante** — Chaves API ausentes nao travam o servidor. Ferramentas OSINT retornam mensagens descritivas: "Defina SHODAN_API_KEY para habilitar consulta de host Shodan."
|
|
728
|
+
- **3 dependencias** — `@modelcontextprotocol/sdk`, `zod` e `cheerio`. Todo I/O de rede via `fetch()` nativo e modulos Node.js `net`/`tls`/`dns`. Sem nmap, sem binarios externos.
|
|
729
|
+
|
|
730
|
+
---
|
|
731
|
+
|
|
732
|
+
## Limitacoes
|
|
733
|
+
|
|
734
|
+
- Ferramentas OSINT (Shodan, Censys, VirusTotal, SecurityTrails) requerem chaves API para suas respectivas tecnicas
|
|
735
|
+
- Nivel gratuito do Censys limitado a 250 consultas/mes
|
|
736
|
+
- Nivel gratuito do VirusTotal limitado a 500 consultas/dia
|
|
737
|
+
- Varredura de portas usa TCP connect (nao varredura SYN) — menos furtivo que nmap, mas nao requer privilegios root
|
|
738
|
+
- Fingerprinting JARM requer acesso TCP direto ao alvo (pode ser bloqueado por firewalls)
|
|
739
|
+
- Descoberta UPnP/SSDP funciona apenas em redes locais
|
|
740
|
+
- Sondagem de servicos (MySQL, PostgreSQL, Redis) conecta, mas nao autentica
|
|
741
|
+
- Enumeracao de subdominios depende de logs CT e fontes passivas (sem forca bruta)
|
|
742
|
+
- Testado em macOS / Linux (Windows nao testado)
|
|
743
|
+
|
|
744
|
+
---
|
|
745
|
+
|
|
746
|
+
## Parte da Suite de Seguranca MCP
|
|
747
|
+
|
|
748
|
+
| Projeto | Dominio | Ferramentas |
|
|
749
|
+
|---------|---------|-------------|
|
|
750
|
+
| [hackbrowser-mcp](https://github.com/badchars/hackbrowser-mcp) | Testes de seguranca baseados em navegador | 39 ferramentas, Firefox, testes de injecao |
|
|
751
|
+
| [cloud-audit-mcp](https://github.com/badchars/cloud-audit-mcp) | Seguranca em nuvem (AWS/Azure/GCP) | 38 ferramentas, 60+ verificacoes |
|
|
752
|
+
| [github-security-mcp](https://github.com/badchars/github-security-mcp) | Postura de seguranca GitHub | 39 ferramentas, 45 verificacoes |
|
|
753
|
+
| [cve-mcp](https://github.com/badchars/cve-mcp) | Inteligencia de vulnerabilidades | 23 ferramentas, 5 fontes |
|
|
754
|
+
| [osint-mcp-server](https://github.com/badchars/osint-mcp-server) | OSINT e reconhecimento | 37 ferramentas, 12 fontes |
|
|
755
|
+
| [darknet-mcp-server](https://github.com/badchars/darknet-mcp-server) | Dark web e inteligencia de ameacas | 66 ferramentas, 16 fontes |
|
|
756
|
+
| **fingerprint-mcp** | **Fingerprinting digital universal** | **13 ferramentas, 103 tecnicas, 21 provedores** |
|
|
757
|
+
|
|
758
|
+
---
|
|
759
|
+
|
|
760
|
+
<p align="center">
|
|
761
|
+
<b>Apenas para testes e avaliacoes de seguranca autorizados.</b><br>
|
|
762
|
+
Sempre certifique-se de ter a devida autorizacao antes de realizar fingerprinting em qualquer alvo.
|
|
763
|
+
</p>
|
|
764
|
+
|
|
765
|
+
<p align="center">
|
|
766
|
+
<a href="LICENSE">Licenca AGPL-3.0</a> • Construido com Bun + TypeScript
|
|
767
|
+
</p>
|