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.es.md
ADDED
|
@@ -0,0 +1,769 @@
|
|
|
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
|
+
<strong>Español</strong> |
|
|
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
|
+
<a href="README.pt-BR.md">Português (Brasil)</a> |
|
|
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">Huella digital universal para agentes de IA.</h3>
|
|
37
|
+
|
|
38
|
+
<p align="center">
|
|
39
|
+
TCP, TLS/SSL, SSH, HTTP, DNS, WAF/CDN, IoT, SMTP, sondeo de servicios, JARM, JA4X, hash de favicon, topologia de infraestructura, deteccion de C2, enriquecimiento OSINT — unificados en un unico servidor MCP.<br>
|
|
40
|
+
Tu agente de IA obtiene <b>huella digital de espectro completo bajo demanda</b>, no 11 herramientas CLI desconectadas y correlacion manual.
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<br>
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
46
|
+
<a href="#el-problema">El problema</a> •
|
|
47
|
+
<a href="#en-que-se-diferencia">En que se diferencia</a> •
|
|
48
|
+
<a href="#inicio-rapido">Inicio rapido</a> •
|
|
49
|
+
<a href="#que-puede-hacer-la-ia">Que puede hacer la IA</a> •
|
|
50
|
+
<a href="#referencia-de-herramientas-13-herramientas-103-tecnicas">Herramientas (13)</a> •
|
|
51
|
+
<a href="#fuentes-de-datos-21">Fuentes de datos</a> •
|
|
52
|
+
<a href="#arquitectura">Arquitectura</a> •
|
|
53
|
+
<a href="CHANGELOG.md">Registro de cambios</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="Licencia"></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 herramientas">
|
|
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="Demo de fingerprint-mcp" width="800">
|
|
68
|
+
</p>
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## El problema
|
|
73
|
+
|
|
74
|
+
Hacer fingerprinting de un servidor hoy significa manejar una docena de herramientas desconectadas. Ejecutas `nmap` para escaneo de puertos, `testssl.sh` para analisis de certificados, `curl -I` para cabeceras HTTP, `dig` para DNS, `wafw00f` para deteccion de WAF, `ssh-audit` para SSH, una herramienta JARM separada, Wappalyzer para deteccion de tecnologias — y luego pasas 30 minutos cruzando referencias manualmente en una hoja de calculo para descubrir que esta realmente ejecutandose.
|
|
75
|
+
|
|
76
|
+
```
|
|
77
|
+
Flujo de trabajo tradicional de fingerprinting:
|
|
78
|
+
analizar certificados TLS -> testssl.sh / openssl s_client
|
|
79
|
+
capturar cabeceras HTTP -> curl -I
|
|
80
|
+
detectar tecnologias web -> wappalyzer CLI
|
|
81
|
+
reconocimiento DNS -> dig / nslookup / dnsenum
|
|
82
|
+
escaneo de puertos -> nmap -sV
|
|
83
|
+
deteccion de WAF -> wafw00f
|
|
84
|
+
auditoria SSH -> ssh-audit
|
|
85
|
+
fingerprinting de servicios -> nmap scripts
|
|
86
|
+
huella JARM -> jarm (herramienta separada)
|
|
87
|
+
consultar bases OSINT -> shodan CLI, censys CLI
|
|
88
|
+
correlacionar todo -> manualmente en una hoja de calculo
|
|
89
|
+
──────────────────────────────
|
|
90
|
+
Total: 11 herramientas, 30+ minutos, correlacion manual
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
**fingerprint-mcp** proporciona a tu agente de IA 13 herramientas compuestas que encapsulan 103 tecnicas de fingerprinting de 21 proveedores a traves del [Model Context Protocol](https://modelcontextprotocol.io). El agente ejecuta fingerprinting multicapa en paralelo, correlaciona senales entre capas TCP/TLS/HTTP/DNS/SSH, detecta honeypots e infraestructura C2, y presenta una imagen de inteligencia unificada — todo en una sola conversacion.
|
|
94
|
+
|
|
95
|
+
```
|
|
96
|
+
Con fingerprint-mcp:
|
|
97
|
+
Tu: "Haz un reconocimiento profundo de 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 detras de Cloudflare WAF,
|
|
104
|
+
React SPA, Google Analytics, 14 cabeceras de seguridad analizadas
|
|
105
|
+
-> DNS: registros A/AAAA/MX/TXT, SPF/DKIM/DMARC configurados,
|
|
106
|
+
Slack + Google Workspace detectados via CNAME/MX
|
|
107
|
+
-> Puertos: 80, 443, 22 (OpenSSH 9.6), 8080 (servidor de desarrollo)
|
|
108
|
+
-> WAF: Cloudflare detectado, IP de origen descubierta via conexion directa
|
|
109
|
+
-> Enumeracion: 12 subdominios via registros CT, DNS comodin detectado
|
|
110
|
+
-> "target.com ejecuta nginx/1.24.0 con Express.js detras de
|
|
111
|
+
Cloudflare WAF. La IP de origen 203.0.113.42 esta expuesta en
|
|
112
|
+
el puerto 8080. TLS esta correctamente configurado (equivalente A+),
|
|
113
|
+
pero el servidor de desarrollo en 8080 no tiene proteccion WAF.
|
|
114
|
+
3 subdominios apuntan a infraestructura desmantelada —
|
|
115
|
+
riesgo potencial de apropiacion."
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## En que se diferencia
|
|
121
|
+
|
|
122
|
+
Las herramientas existentes te dan datos sin procesar una capa a la vez. fingerprint-mcp le da a tu agente de IA la capacidad de **razonar simultaneamente a traves de todas las capas de fingerprinting**.
|
|
123
|
+
|
|
124
|
+
<table>
|
|
125
|
+
<thead>
|
|
126
|
+
<tr>
|
|
127
|
+
<th></th>
|
|
128
|
+
<th>Enfoque tradicional</th>
|
|
129
|
+
<th>fingerprint-mcp</th>
|
|
130
|
+
</tr>
|
|
131
|
+
</thead>
|
|
132
|
+
<tbody>
|
|
133
|
+
<tr>
|
|
134
|
+
<td><b>Interfaz</b></td>
|
|
135
|
+
<td>11 herramientas CLI diferentes con formatos de salida distintos</td>
|
|
136
|
+
<td>MCP — agente de IA llama herramientas conversacionalmente</td>
|
|
137
|
+
</tr>
|
|
138
|
+
<tr>
|
|
139
|
+
<td><b>Tecnicas</b></td>
|
|
140
|
+
<td>Una herramienta, una capa a la vez</td>
|
|
141
|
+
<td>103 tecnicas de 21 proveedores, ejecutadas en paralelo</td>
|
|
142
|
+
</tr>
|
|
143
|
+
<tr>
|
|
144
|
+
<td><b>Analisis TLS</b></td>
|
|
145
|
+
<td>Salida de testssl.sh, analizar JARM por separado manualmente</td>
|
|
146
|
+
<td>El agente combina certificado + JARM + JA4X + suites de cifrado + SNI + registros CT en una llamada</td>
|
|
147
|
+
</tr>
|
|
148
|
+
<tr>
|
|
149
|
+
<td><b>Correlacion</b></td>
|
|
150
|
+
<td>Copiar y pegar resultados en una hoja de calculo</td>
|
|
151
|
+
<td>El agente correlaciona: "JARM coincide con framework C2 conocido, timing HTTP confirma honeypot"</td>
|
|
152
|
+
</tr>
|
|
153
|
+
<tr>
|
|
154
|
+
<td><b>Evasion de WAF</b></td>
|
|
155
|
+
<td>wafw00f detecta WAF, buscas el origen manualmente</td>
|
|
156
|
+
<td>El agente detecta WAF, descubre la IP de origen y verifica que sirve el mismo contenido</td>
|
|
157
|
+
</tr>
|
|
158
|
+
<tr>
|
|
159
|
+
<td><b>Claves API</b></td>
|
|
160
|
+
<td>Requeridas para Shodan, Censys, etc.</td>
|
|
161
|
+
<td>80+ tecnicas activas funcionan sin claves API; las claves desbloquean enriquecimiento OSINT</td>
|
|
162
|
+
</tr>
|
|
163
|
+
<tr>
|
|
164
|
+
<td><b>Configuracion</b></td>
|
|
165
|
+
<td>Instalar nmap, testssl, wafw00f, ssh-audit, jarm, wappalyzer...</td>
|
|
166
|
+
<td><code>npx fingerprint-mcp</code> — un comando, cero configuracion</td>
|
|
167
|
+
</tr>
|
|
168
|
+
</tbody>
|
|
169
|
+
</table>
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## Inicio rapido
|
|
174
|
+
|
|
175
|
+
### Opcion 1: npx (sin instalacion)
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
npx fingerprint-mcp
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Las 80+ tecnicas activas de fingerprinting funcionan inmediatamente. No se requieren claves API para TCP, TLS, SSH, HTTP, DNS, WAF, rutas, servicios, temporizado, IoT, SMTP, infraestructura y fingerprinting de aplicaciones.
|
|
182
|
+
|
|
183
|
+
### Opcion 2: Clonar
|
|
184
|
+
|
|
185
|
+
```bash
|
|
186
|
+
git clone https://github.com/badchars/fingerprint-mcp.git
|
|
187
|
+
cd fingerprint-mcp
|
|
188
|
+
bun install
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
### Variables de entorno (opcionales)
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
# Enriquecimiento OSINT (todas opcionales — el fingerprinting activo funciona sin claves)
|
|
195
|
+
export SHODAN_API_KEY=your-key # Habilita osint_shodan, ssh_hostkey_lookup
|
|
196
|
+
export CENSYS_API_ID=your-id # Habilita osint_censys (gratuito: 250 consultas/mes)
|
|
197
|
+
export CENSYS_API_SECRET=your-secret # Secreto de API de Censys
|
|
198
|
+
export SECURITYTRAILS_API_KEY=your-key # Habilita waf_origin, enum_passive_dns
|
|
199
|
+
export VIRUSTOTAL_API_KEY=your-key # Habilita osint_virustotal (gratuito: 500 consultas/dia)
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
Todas las claves API son opcionales. Sin ellas, sigues teniendo TCP/TLS/SSH/HTTP/DNS/WAF/rutas/servicios/temporizado/IoT/SMTP/infraestructura/aplicaciones, correlacion, analisis pasivo, enumeracion y herramientas meta completas — 80+ tecnicas que funcionan sondeando directamente el objetivo.
|
|
203
|
+
|
|
204
|
+
### Conectar con tu agente de IA
|
|
205
|
+
|
|
206
|
+
<details open>
|
|
207
|
+
<summary><b>Claude Code</b></summary>
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Con npx
|
|
211
|
+
claude mcp add fingerprint-mcp -- npx fingerprint-mcp
|
|
212
|
+
|
|
213
|
+
# Con clon local
|
|
214
|
+
claude mcp add fingerprint-mcp -- bun run /path/to/fingerprint-mcp/src/index.ts
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
</details>
|
|
218
|
+
|
|
219
|
+
<details>
|
|
220
|
+
<summary><b>Claude Desktop</b></summary>
|
|
221
|
+
|
|
222
|
+
Agregar a `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
223
|
+
|
|
224
|
+
```json
|
|
225
|
+
{
|
|
226
|
+
"mcpServers": {
|
|
227
|
+
"fingerprint": {
|
|
228
|
+
"command": "npx",
|
|
229
|
+
"args": ["-y", "fingerprint-mcp"],
|
|
230
|
+
"env": {
|
|
231
|
+
"SHODAN_API_KEY": "optional",
|
|
232
|
+
"CENSYS_API_ID": "optional",
|
|
233
|
+
"CENSYS_API_SECRET": "optional",
|
|
234
|
+
"SECURITYTRAILS_API_KEY": "optional",
|
|
235
|
+
"VIRUSTOTAL_API_KEY": "optional"
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
</details>
|
|
243
|
+
|
|
244
|
+
<details>
|
|
245
|
+
<summary><b>Cursor / Windsurf / otros clientes MCP</b></summary>
|
|
246
|
+
|
|
247
|
+
El mismo formato de configuracion JSON. Apunta el comando a `npx fingerprint-mcp` o a tu ruta de instalacion local.
|
|
248
|
+
|
|
249
|
+
</details>
|
|
250
|
+
|
|
251
|
+
### Empezar a consultar
|
|
252
|
+
|
|
253
|
+
```
|
|
254
|
+
Tu: "Haz fingerprinting de todo en target.com — TLS, stack HTTP, WAF, DNS, puertos abiertos"
|
|
255
|
+
```
|
|
256
|
+
|
|
257
|
+
Eso es todo. El agente maneja automaticamente el fingerprinting multicapa, la correlacion de senales y el analisis de infraestructura.
|
|
258
|
+
|
|
259
|
+
---
|
|
260
|
+
|
|
261
|
+
## Que puede hacer la IA
|
|
262
|
+
|
|
263
|
+
### Reconocimiento rapido
|
|
264
|
+
|
|
265
|
+
```
|
|
266
|
+
Tu: "Reconocimiento rapido de target.com"
|
|
267
|
+
|
|
268
|
+
Agente: -> recon {url: "https://target.com", depth: "quick"}
|
|
269
|
+
|
|
270
|
+
-> TCP: puertos 80, 443, 22 abiertos
|
|
271
|
+
-> TLS: certificado RSA Let's Encrypt, TLS 1.2+1.3, firma JARM de nginx
|
|
272
|
+
-> HTTP: nginx/1.24.0, Express.js, React, Cloudflare CDN
|
|
273
|
+
-> DNS: A 203.0.113.42, MX Google Workspace, SPF/DKIM configurados
|
|
274
|
+
-> WAF: Cloudflare detectado (cabecera cf-ray)
|
|
275
|
+
-> "target.com es una SPA React sobre Express.js detras de nginx/1.24.0,
|
|
276
|
+
servida a traves de Cloudflare CDN. TLS correctamente configurado con
|
|
277
|
+
Let's Encrypt. SSH en puerto 22 ejecutando OpenSSH 9.6. Correo
|
|
278
|
+
manejado por Google Workspace con SPF/DKIM/DMARC completo."
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
### Investigacion profunda de TLS
|
|
282
|
+
|
|
283
|
+
```
|
|
284
|
+
Tu: "Analiza la configuracion TLS de suspicious-server.com en detalle"
|
|
285
|
+
|
|
286
|
+
Agente: -> scan_tls {host: "suspicious-server.com"}
|
|
287
|
+
|
|
288
|
+
-> Certificado: autofirmado, CN=localhost, expirado hace 47 dias
|
|
289
|
+
-> JARM: 2ad2ad0002ad2ad00042d42d00000069d641f34fe76acdc05c40262f8815e5
|
|
290
|
+
(coincide con perfil predeterminado de Cobalt Strike)
|
|
291
|
+
-> JA4X: huella coincide con patron de framework C2 conocido
|
|
292
|
+
-> Suites de cifrado: acepta cifrados debiles (RC4, 3DES)
|
|
293
|
+
-> SNI: responde identicamente a cualquier valor SNI
|
|
294
|
+
-> Registros CT: certificado no registrado (no confiable publicamente)
|
|
295
|
+
-> "ALTO RIESGO: La configuracion TLS indica fuertemente infraestructura C2.
|
|
296
|
+
Certificado autofirmado expirado, huella JARM coincide con Cobalt Strike,
|
|
297
|
+
acepta cifrados debiles y responde a valores SNI arbitrarios.
|
|
298
|
+
Se recomienda investigacion inmediata y bloqueo."
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
### Evasion de WAF y descubrimiento de origen
|
|
302
|
+
|
|
303
|
+
```
|
|
304
|
+
Tu: "target.com esta detras de un WAF. Puedes encontrar el servidor de origen?"
|
|
305
|
+
|
|
306
|
+
Agente: -> scan_waf {url: "https://target.com"}
|
|
307
|
+
-> scan_dns {domain: "target.com"}
|
|
308
|
+
-> enumerate {domain: "target.com"}
|
|
309
|
+
|
|
310
|
+
-> WAF: Cloudflare (AS13335), pagina de desafio en solicitudes sospechosas
|
|
311
|
+
-> DNS: registro A apunta a IP de Cloudflare 104.21.x.x
|
|
312
|
+
-> Subdominios: dev.target.com resuelve a 203.0.113.42 (no Cloudflare)
|
|
313
|
+
-> Conexion directa a 203.0.113.42:443 devuelve el mismo certificado TLS
|
|
314
|
+
-> Historico SecurityTrails: origen era 203.0.113.42 antes de Cloudflare
|
|
315
|
+
-> "IP de origen encontrada: 203.0.113.42. Descubierta via subdominio
|
|
316
|
+
dev.target.com que evita Cloudflare. El origen sirve el mismo
|
|
317
|
+
certificado TLS y responde a la cabecera Host de target.com.
|
|
318
|
+
El origen no tiene proteccion WAF — acceso directo posible."
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
### Descubrimiento de servicios en un host
|
|
322
|
+
|
|
323
|
+
```
|
|
324
|
+
Tu: "Que servicios estan ejecutandose en 10.0.1.50?"
|
|
325
|
+
|
|
326
|
+
Agente: -> scan_ports {host: "10.0.1.50"}
|
|
327
|
+
-> scan_services {host: "10.0.1.50", ports: [22, 80, 3306, 5432, 6379, 8080]}
|
|
328
|
+
|
|
329
|
+
-> Puerto 22: OpenSSH 8.9p1 Ubuntu, clave de host ED25519
|
|
330
|
+
-> Puerto 80: Apache/2.4.57, PHP/8.2, WordPress 6.4
|
|
331
|
+
-> Puerto 3306: MySQL 8.0.36, autenticacion requerida
|
|
332
|
+
-> Puerto 5432: PostgreSQL 16.1, SSL requerido
|
|
333
|
+
-> Puerto 6379: Redis 7.2.4, SIN autenticacion (abierto)
|
|
334
|
+
-> Puerto 8080: servidor de desarrollo Node.js Express, CORS: *
|
|
335
|
+
-> "CRITICO: Redis en puerto 6379 no tiene autenticacion — cualquiera
|
|
336
|
+
en la red puede leer/escribir datos. El servidor de desarrollo Express
|
|
337
|
+
en 8080 tiene CORS comodin. MySQL y PostgreSQL requieren correctamente
|
|
338
|
+
autenticacion. WordPress esta 2 versiones menores atrasado.
|
|
339
|
+
Accion inmediata necesaria en Redis y la exposicion del servidor
|
|
340
|
+
de desarrollo."
|
|
341
|
+
```
|
|
342
|
+
|
|
343
|
+
---
|
|
344
|
+
|
|
345
|
+
## Referencia de herramientas (13 herramientas, 103 tecnicas)
|
|
346
|
+
|
|
347
|
+
<details open>
|
|
348
|
+
<summary><b>recon — Reconocimiento completo con seleccion de tecnicas basada en profundidad</b></summary>
|
|
349
|
+
|
|
350
|
+
| Parametro | Tipo | Descripcion |
|
|
351
|
+
|-----------|------|-------------|
|
|
352
|
+
| `url` | string | URL objetivo para fingerprinting |
|
|
353
|
+
| `depth` | `quick` \| `standard` \| `deep` | Profundidad de escaneo: quick=5 tecnicas, standard=20, deep=50+ |
|
|
354
|
+
|
|
355
|
+
Orquesta tecnicas de todos los proveedores basandose en el nivel de profundidad. El modo rapido da una vision general rapida; el modo profundo ejecuta fingerprinting exhaustivo incluyendo enumeracion, OSINT y correlacion.
|
|
356
|
+
|
|
357
|
+
</details>
|
|
358
|
+
|
|
359
|
+
<details>
|
|
360
|
+
<summary><b>scan_ports — Escaneo de puertos TCP con deteccion de servicios (3 tecnicas)</b></summary>
|
|
361
|
+
|
|
362
|
+
| Parametro | Tipo | Descripcion |
|
|
363
|
+
|-----------|------|-------------|
|
|
364
|
+
| `host` | string | Host objetivo (IP o dominio) |
|
|
365
|
+
| `ports` | number[] | Opcional — puertos especificos a escanear (predeterminado: puertos comunes) |
|
|
366
|
+
|
|
367
|
+
| Tecnica | Descripcion |
|
|
368
|
+
|---------|-------------|
|
|
369
|
+
| `tcp_probe` | Escaneo de conexion TCP para detectar puertos abiertos |
|
|
370
|
+
| `tcp_banner` | Captura de banner en puertos abiertos para identificacion de servicios |
|
|
371
|
+
| `tcp_analysis` | Analisis de combinacion de puertos e inferencia de servicios |
|
|
372
|
+
|
|
373
|
+
</details>
|
|
374
|
+
|
|
375
|
+
<details>
|
|
376
|
+
<summary><b>scan_tls — Analisis completo de TLS/SSL (8 tecnicas)</b></summary>
|
|
377
|
+
|
|
378
|
+
| Parametro | Tipo | Descripcion |
|
|
379
|
+
|-----------|------|-------------|
|
|
380
|
+
| `host` | string | Host objetivo (IP o dominio) |
|
|
381
|
+
| `port` | number | Opcional — puerto TLS (predeterminado: 443) |
|
|
382
|
+
|
|
383
|
+
| Tecnica | Descripcion |
|
|
384
|
+
|---------|-------------|
|
|
385
|
+
| `tls_certificate` | Analisis de certificado X.509 — sujeto, emisor, SANs, validez, cadena |
|
|
386
|
+
| `tls_jarm` | Fingerprinting activo JARM — 10 sondas TLS Client Hello, hash de 62 caracteres |
|
|
387
|
+
| `tls_ja4x` | Fingerprinting pasivo TLS JA4X a partir de propiedades del certificado |
|
|
388
|
+
| `tls_ciphers` | Enumeracion de suites de cifrado y analisis de fortaleza |
|
|
389
|
+
| `tls_protocols` | Deteccion de versiones de protocolo TLS soportadas (SSLv3 hasta TLS 1.3) |
|
|
390
|
+
| `tls_sni` | Prueba de comportamiento SNI — certificado predeterminado vs. nombre de host solicitado |
|
|
391
|
+
| `tls_ct_logs` | Consulta de registros de Certificate Transparency via crt.sh |
|
|
392
|
+
| `tls_ocsp` | Grapado OCSP y verificacion de estado de revocacion |
|
|
393
|
+
|
|
394
|
+
</details>
|
|
395
|
+
|
|
396
|
+
<details>
|
|
397
|
+
<summary><b>scan_dns — Inteligencia DNS (7 tecnicas)</b></summary>
|
|
398
|
+
|
|
399
|
+
| Parametro | Tipo | Descripcion |
|
|
400
|
+
|-----------|------|-------------|
|
|
401
|
+
| `domain` | string | Dominio objetivo |
|
|
402
|
+
|
|
403
|
+
| Tecnica | Descripcion |
|
|
404
|
+
|---------|-------------|
|
|
405
|
+
| `dns_records` | Enumeracion completa de registros — A, AAAA, MX, NS, TXT, CNAME, SOA |
|
|
406
|
+
| `dns_email_auth` | Analisis de registros SPF, DKIM y DMARC |
|
|
407
|
+
| `dns_saas` | Deteccion de SaaS/servicios via patrones CNAME y MX (Slack, Zendesk, etc.) |
|
|
408
|
+
| `dns_server` | Fingerprinting de servidor DNS (BIND, PowerDNS, Cloudflare, etc.) |
|
|
409
|
+
| `dns_takeover` | Deteccion de apropiacion de subdominio via analisis de CNAME colgante |
|
|
410
|
+
| `dns_zone` | Intento de transferencia de zona (AXFR) |
|
|
411
|
+
| `dns_caa` | Analisis de registro CAA para restricciones de autoridad de certificacion |
|
|
412
|
+
|
|
413
|
+
</details>
|
|
414
|
+
|
|
415
|
+
<details>
|
|
416
|
+
<summary><b>scan_http — Fingerprinting HTTP/web (29 tecnicas)</b></summary>
|
|
417
|
+
|
|
418
|
+
| Parametro | Tipo | Descripcion |
|
|
419
|
+
|-----------|------|-------------|
|
|
420
|
+
| `url` | string | URL objetivo |
|
|
421
|
+
|
|
422
|
+
| Tecnica | Proveedor | Descripcion |
|
|
423
|
+
|---------|-----------|-------------|
|
|
424
|
+
| `http_headers` | HTTP | Analisis de cabeceras de respuesta e identificacion de servidor |
|
|
425
|
+
| `http_header_order` | HTTP | Huella de orden de cabeceras (firma de software del servidor) |
|
|
426
|
+
| `http_security_headers` | HTTP | Auditoria de cabeceras de seguridad (CSP, HSTS, X-Frame-Options, etc.) |
|
|
427
|
+
| `http_cookies` | HTTP | Analisis de cookies — flags, prefijos, deteccion de framework |
|
|
428
|
+
| `http_methods` | HTTP | Enumeracion de metodos HTTP permitidos (OPTIONS) |
|
|
429
|
+
| `http_cors` | HTTP | Analisis de politica CORS y deteccion de mala configuracion |
|
|
430
|
+
| `http_compression` | HTTP | Algoritmos de compresion soportados (gzip, br, zstd) |
|
|
431
|
+
| `http_caching` | HTTP | Analisis de cabeceras de cache (deteccion de CDN, proxy inverso) |
|
|
432
|
+
| `http_etag` | HTTP | Analisis de formato ETag para identificacion de backend |
|
|
433
|
+
| `http_error` | HTTP | Fingerprinting de paginas de error (personalizadas vs. predeterminadas) |
|
|
434
|
+
| `http_redirect` | HTTP | Analisis de cadena de redireccion |
|
|
435
|
+
| `http_timing` | HTTP | Linea base de temporizado de respuesta para perfilado de rendimiento |
|
|
436
|
+
| `http_favicon` | HTTP | Hash de favicon (MurmurHash3) para identificacion de tecnologia |
|
|
437
|
+
| `http_robots` | HTTP | Analisis de robots.txt y extraccion de rutas prohibidas |
|
|
438
|
+
| `http_sitemap` | HTTP | Descubrimiento de sitemap y extraccion de URLs |
|
|
439
|
+
| `http_wellknown` | HTTP | Descubrimiento de endpoints .well-known (security.txt, openid, etc.) |
|
|
440
|
+
| `web_tech` | Web | Deteccion de tecnologia via patrones HTML/JS/CSS |
|
|
441
|
+
| `web_analytics` | Web | Deteccion de servicios de analitica y seguimiento |
|
|
442
|
+
| `web_sourcemaps` | Web | Descubrimiento de archivos source map |
|
|
443
|
+
| `web_websocket` | Web | Deteccion de endpoints WebSocket |
|
|
444
|
+
| `web_graphql` | Web | Deteccion de endpoints GraphQL e introspeccion |
|
|
445
|
+
| `web_spa` | Web | Deteccion de frameworks de aplicacion de pagina unica |
|
|
446
|
+
| `web_cdn` | Web | Deteccion de CDN via cabeceras de respuesta y DNS |
|
|
447
|
+
| `web_meta` | Web | Analisis de meta tags HTML (generador, pistas de framework) |
|
|
448
|
+
| `web_feed` | Web | Descubrimiento de feeds RSS/Atom |
|
|
449
|
+
| `h2_detect` | HTTP/2 | Deteccion de soporte de protocolo HTTP/2 |
|
|
450
|
+
| `h2_fingerprint` | HTTP/2 | Fingerprinting de servidor HTTP/2 (SETTINGS, WINDOW_UPDATE) |
|
|
451
|
+
| `h2_h3` | HTTP/2 | Deteccion de soporte HTTP/3 (QUIC) via cabecera Alt-Svc |
|
|
452
|
+
| `app_cms` | Application | Deteccion de CMS (WordPress, Drupal, Joomla, etc.) |
|
|
453
|
+
|
|
454
|
+
</details>
|
|
455
|
+
|
|
456
|
+
<details>
|
|
457
|
+
<summary><b>scan_paths — Inteligencia de rutas (5 tecnicas)</b></summary>
|
|
458
|
+
|
|
459
|
+
| Parametro | Tipo | Descripcion |
|
|
460
|
+
|-----------|------|-------------|
|
|
461
|
+
| `url` | string | URL objetivo |
|
|
462
|
+
| `categories` | string[] | Opcional — categorias a verificar (sensitive, git, debug, api, config) |
|
|
463
|
+
|
|
464
|
+
| Tecnica | Descripcion |
|
|
465
|
+
|---------|-------------|
|
|
466
|
+
| `path_sensitive` | Descubrimiento de archivos sensibles (backups, archivos de configuracion, volcados de base de datos) |
|
|
467
|
+
| `path_robots` | Analisis de robots.txt y sitemap.xml para descubrir rutas ocultas |
|
|
468
|
+
| `path_git` | Deteccion de fugas de repositorio Git (.git/HEAD, .git/config) |
|
|
469
|
+
| `path_debug` | Descubrimiento de endpoints de depuracion (phpinfo, server-status, consolas de depuracion) |
|
|
470
|
+
| `path_api` | Descubrimiento de versiones de API y endpoints de documentacion |
|
|
471
|
+
|
|
472
|
+
</details>
|
|
473
|
+
|
|
474
|
+
<details>
|
|
475
|
+
<summary><b>scan_waf — Deteccion y fingerprinting de WAF/CDN (4 tecnicas)</b></summary>
|
|
476
|
+
|
|
477
|
+
| Parametro | Tipo | Descripcion |
|
|
478
|
+
|-----------|------|-------------|
|
|
479
|
+
| `url` | string | URL objetivo |
|
|
480
|
+
|
|
481
|
+
| Tecnica | Descripcion |
|
|
482
|
+
|---------|-------------|
|
|
483
|
+
| `waf_detect` | Deteccion de presencia de WAF via analisis de cabeceras de respuesta y comportamiento |
|
|
484
|
+
| `waf_cdn` | Identificacion de proveedor CDN (Cloudflare, Akamai, Fastly, etc.) |
|
|
485
|
+
| `waf_fingerprint` | Identificacion de producto WAF y deteccion de version |
|
|
486
|
+
| `waf_origin` | Descubrimiento de IP de origen detras de WAF/CDN (requiere `SECURITYTRAILS_API_KEY`) |
|
|
487
|
+
|
|
488
|
+
</details>
|
|
489
|
+
|
|
490
|
+
<details>
|
|
491
|
+
<summary><b>scan_services — Sondeo a nivel de servicio (12 tecnicas)</b></summary>
|
|
492
|
+
|
|
493
|
+
| Parametro | Tipo | Descripcion |
|
|
494
|
+
|-----------|------|-------------|
|
|
495
|
+
| `host` | string | Host objetivo (IP o dominio) |
|
|
496
|
+
| `ports` | number[] | Opcional — puertos especificos a sondear |
|
|
497
|
+
| `service` | string | Opcional — servicio especifico a sondear (mysql, postgres, redis, ftp, ssh, smtp, vnc, iot) |
|
|
498
|
+
|
|
499
|
+
| Tecnica | Proveedor | Descripcion |
|
|
500
|
+
|---------|-----------|-------------|
|
|
501
|
+
| `ssh_probe` | SSH | Deteccion de version de protocolo SSH y software |
|
|
502
|
+
| `ssh_algorithms` | SSH | Auditoria de algoritmos SSH (KEX, cifrados, MACs, tipos de clave de host) |
|
|
503
|
+
| `ssh_hostkey_lookup` | SSH | Busqueda de clave de host SSH via Shodan (requiere `SHODAN_API_KEY`) |
|
|
504
|
+
| `svc_mysql` | Service | Deteccion de version MySQL y fingerprinting de capacidades |
|
|
505
|
+
| `svc_postgres` | Service | Deteccion de version PostgreSQL y verificacion de soporte SSL |
|
|
506
|
+
| `svc_redis` | Service | Deteccion de version Redis y estado de autenticacion |
|
|
507
|
+
| `svc_ftp` | Service | Analisis de banner FTP y verificacion de inicio de sesion anonimo |
|
|
508
|
+
| `svc_vnc_rdp` | Service | Deteccion de servicio VNC/RDP y evaluacion de seguridad |
|
|
509
|
+
| `smtp_banner` | SMTP | Analisis de banner SMTP e identificacion de MTA |
|
|
510
|
+
| `smtp_starttls` | SMTP | Soporte SMTP STARTTLS e inspeccion de certificado |
|
|
511
|
+
| `iot_detect` | IoT | Deteccion de dispositivos IoT via patrones de banner y paginas predeterminadas |
|
|
512
|
+
| `iot_upnp` | IoT | Descubrimiento de dispositivos UPnP/SSDP en red local |
|
|
513
|
+
|
|
514
|
+
</details>
|
|
515
|
+
|
|
516
|
+
<details>
|
|
517
|
+
<summary><b>enumerate — Expansion de alcance (8 tecnicas)</b></summary>
|
|
518
|
+
|
|
519
|
+
| Parametro | Tipo | Descripcion |
|
|
520
|
+
|-----------|------|-------------|
|
|
521
|
+
| `domain` | string | Dominio objetivo |
|
|
522
|
+
|
|
523
|
+
| Tecnica | Descripcion |
|
|
524
|
+
|---------|-------------|
|
|
525
|
+
| `enum_subdomains` | Enumeracion de subdominios via multiples metodos |
|
|
526
|
+
| `enum_wildcard` | Deteccion de DNS comodin |
|
|
527
|
+
| `enum_tld` | Expansion de TLD (target.com -> target.net, target.org, etc.) |
|
|
528
|
+
| `enum_related` | Descubrimiento de dominios relacionados via infraestructura compartida |
|
|
529
|
+
| `enum_asn` | Descubrimiento de vecinos ASN — otros dominios en la misma red |
|
|
530
|
+
| `enum_ct` | Extraccion de subdominios de registros Certificate Transparency |
|
|
531
|
+
| `enum_passive_dns` | Historial DNS pasivo (requiere `SECURITYTRAILS_API_KEY`) |
|
|
532
|
+
| `enum_scope` | Resumen de alcance y vision general de superficie de ataque |
|
|
533
|
+
|
|
534
|
+
</details>
|
|
535
|
+
|
|
536
|
+
<details>
|
|
537
|
+
<summary><b>osint — Enriquecimiento OSINT (6 tecnicas)</b></summary>
|
|
538
|
+
|
|
539
|
+
| Parametro | Tipo | Descripcion |
|
|
540
|
+
|-----------|------|-------------|
|
|
541
|
+
| `target` | string | Direccion IP o dominio a enriquecer |
|
|
542
|
+
| `type` | `ip` \| `domain` | Opcional — tipo de objetivo (autodetectado si se omite) |
|
|
543
|
+
|
|
544
|
+
| Tecnica | Auth | Descripcion |
|
|
545
|
+
|---------|------|-------------|
|
|
546
|
+
| `osint_shodan` | `SHODAN_API_KEY` | Consulta de host Shodan — puertos abiertos, banners, vulnerabilidades, SO |
|
|
547
|
+
| `osint_censys` | `CENSYS_API_ID` + `CENSYS_API_SECRET` | Datos de host Censys — servicios, TLS, sistema autonomo |
|
|
548
|
+
| `osint_reverse_ip` | Ninguna | Busqueda IP inversa — otros dominios en la misma IP |
|
|
549
|
+
| `osint_whois` | Ninguna | Datos de registro WHOIS — registrador, fechas, servidores de nombres |
|
|
550
|
+
| `osint_webarchive` | Ninguna | Historial Web Archive — primer/ultimo snapshot, frecuencia de cambio |
|
|
551
|
+
| `osint_virustotal` | `VIRUSTOTAL_API_KEY` | Informe VirusTotal de dominio/IP — detecciones, categorias, DNS |
|
|
552
|
+
|
|
553
|
+
</details>
|
|
554
|
+
|
|
555
|
+
<details>
|
|
556
|
+
<summary><b>analyze — Analisis pasivo de huellas (3 modos)</b></summary>
|
|
557
|
+
|
|
558
|
+
| Parametro | Tipo | Descripcion |
|
|
559
|
+
|-----------|------|-------------|
|
|
560
|
+
| `type` | `headers` \| `html` \| `banner` | Tipo de datos a analizar |
|
|
561
|
+
| `data` | string | Datos sin procesar a analizar (pegar cabeceras, HTML o salida de banner) |
|
|
562
|
+
|
|
563
|
+
| Modo | Descripcion |
|
|
564
|
+
|------|-------------|
|
|
565
|
+
| `fp_analyze_headers` | Analisis pasivo de cabeceras HTTP — deteccion de servidor, framework, proxy sin enviar trafico |
|
|
566
|
+
| `fp_analyze_html` | Analisis pasivo de HTML — deteccion de tecnologia, identificacion de framework del codigo fuente |
|
|
567
|
+
| `fp_analyze_banner` | Analisis pasivo de banner — identificacion de servicio a partir de texto de banner sin procesar |
|
|
568
|
+
|
|
569
|
+
</details>
|
|
570
|
+
|
|
571
|
+
<details>
|
|
572
|
+
<summary><b>correlate — Motor de correlacion multi-senal (7 modos)</b></summary>
|
|
573
|
+
|
|
574
|
+
| Parametro | Tipo | Descripcion |
|
|
575
|
+
|-----------|------|-------------|
|
|
576
|
+
| `type` | `consistency` \| `honeypot` \| `spoofing` \| `compare` \| `topology` \| `c2` \| `identify` | Modo de correlacion |
|
|
577
|
+
| `signals` | object | Senales de huella a correlacionar (varia segun el modo) |
|
|
578
|
+
|
|
579
|
+
| Modo | Descripcion |
|
|
580
|
+
|------|-------------|
|
|
581
|
+
| `fp_consistency` | Verificacion de consistencia de senales entre capas — coinciden las huellas TCP, TLS, HTTP y DNS? |
|
|
582
|
+
| `fp_honeypot` | Deteccion de honeypot — verifica combinaciones de servicios imposibles y anomalias de comportamiento |
|
|
583
|
+
| `fp_spoofing` | Deteccion de suplantacion — identifica discrepancias entre cabeceras de servidor y comportamiento real |
|
|
584
|
+
| `fp_compare` | Comparacion lado a lado de perfiles de huellas de dos hosts |
|
|
585
|
+
| `fp_topology` | Mapeo de topologia de infraestructura — CDN, balanceador de carga, cadena de proxy inverso |
|
|
586
|
+
| `fp_c2` | Deteccion de framework C2 via correlacion JARM, TLS, HTTP y temporizado |
|
|
587
|
+
| `fp_identify` | Identificacion basada en hash contra base de datos de firmas conocidas |
|
|
588
|
+
|
|
589
|
+
</details>
|
|
590
|
+
|
|
591
|
+
<details>
|
|
592
|
+
<summary><b>meta — Configuracion y datos del servidor (3 modos)</b></summary>
|
|
593
|
+
|
|
594
|
+
| Parametro | Tipo | Descripcion |
|
|
595
|
+
|-----------|------|-------------|
|
|
596
|
+
| `category` | string | Opcional — filtrar por categoria |
|
|
597
|
+
|
|
598
|
+
| Modo | Descripcion |
|
|
599
|
+
|------|-------------|
|
|
600
|
+
| `fp_sources` | Listar todas las fuentes de datos disponibles con configuracion y estado de claves API |
|
|
601
|
+
| `fp_config` | Configuracion del servidor — version, proveedores cargados, conteo de tecnicas |
|
|
602
|
+
| `fp_signatures` | Listado de base de datos de firmas — firmas JARM, banner, WAF, aplicacion |
|
|
603
|
+
|
|
604
|
+
</details>
|
|
605
|
+
|
|
606
|
+
---
|
|
607
|
+
|
|
608
|
+
### Uso de CLI
|
|
609
|
+
|
|
610
|
+
```bash
|
|
611
|
+
# Listar todas las herramientas y tecnicas disponibles
|
|
612
|
+
npx fingerprint-mcp --list
|
|
613
|
+
|
|
614
|
+
# Ejecutar cualquier herramienta directamente
|
|
615
|
+
npx fingerprint-mcp --tool recon '{"url":"https://example.com","depth":"quick"}'
|
|
616
|
+
npx fingerprint-mcp --tool scan_tls '{"host":"example.com"}'
|
|
617
|
+
npx fingerprint-mcp --tool scan_ports '{"host":"10.0.1.50","ports":[22,80,443,3306,8080]}'
|
|
618
|
+
npx fingerprint-mcp --tool scan_dns '{"domain":"example.com"}'
|
|
619
|
+
npx fingerprint-mcp --tool scan_http '{"url":"https://example.com"}'
|
|
620
|
+
npx fingerprint-mcp --tool scan_waf '{"url":"https://example.com"}'
|
|
621
|
+
npx fingerprint-mcp --tool scan_services '{"host":"10.0.1.50","service":"redis"}'
|
|
622
|
+
npx fingerprint-mcp --tool enumerate '{"domain":"example.com"}'
|
|
623
|
+
npx fingerprint-mcp --tool analyze '{"type":"headers","data":"Server: nginx/1.24.0\nX-Powered-By: Express"}'
|
|
624
|
+
npx fingerprint-mcp --tool correlate '{"type":"honeypot","signals":{"jarm":"...","banner":"..."}}'
|
|
625
|
+
npx fingerprint-mcp --tool meta '{}'
|
|
626
|
+
|
|
627
|
+
# Herramientas OSINT (requieren claves API)
|
|
628
|
+
SHODAN_API_KEY=your-key npx fingerprint-mcp --tool osint '{"target":"203.0.113.42","type":"ip"}'
|
|
629
|
+
```
|
|
630
|
+
|
|
631
|
+
---
|
|
632
|
+
|
|
633
|
+
## Fuentes de datos (21)
|
|
634
|
+
|
|
635
|
+
| Fuente | Auth | Que proporciona |
|
|
636
|
+
|--------|------|-----------------|
|
|
637
|
+
| Sondeo TCP | Ninguna | Escaneo de puertos, captura de banner, deteccion de servicios |
|
|
638
|
+
| Analisis TLS/SSL | Ninguna | Analisis de certificados, fingerprinting JARM, JA4X, enumeracion de cifrados, pruebas SNI |
|
|
639
|
+
| Sondeo SSH | Ninguna | Version de protocolo, auditoria de algoritmos, deteccion de software |
|
|
640
|
+
| Analisis HTTP | Ninguna | Fingerprinting de cabeceras, hash de favicon, analisis de cookies, enumeracion de metodos, CORS |
|
|
641
|
+
| Deteccion web | Ninguna | Deteccion de tecnologia, analitica, source maps, WebSocket, GraphQL, frameworks SPA |
|
|
642
|
+
| Descubrimiento de rutas | Ninguna | Archivos sensibles, fugas Git, endpoints de depuracion, versiones de API, robots.txt |
|
|
643
|
+
| Resolucion DNS | Ninguna | Enumeracion de registros, analisis de autenticacion de email, deteccion SaaS, fingerprinting de servidor |
|
|
644
|
+
| Deteccion WAF/CDN | Ninguna | Identificacion de WAF, deteccion de CDN, fingerprinting de WAF |
|
|
645
|
+
| Analisis de temporizado | Ninguna | Linea base de temporizado de respuesta, deteccion de desviacion de reloj |
|
|
646
|
+
| HTTP/2 & HTTP/3 | Ninguna | Deteccion y fingerprinting HTTP/2, descubrimiento HTTP/3 Alt-Svc |
|
|
647
|
+
| Sondeo SMTP | Ninguna | Analisis de banner SMTP, inspeccion STARTTLS |
|
|
648
|
+
| IoT/Embebido | Ninguna | Deteccion de dispositivos IoT, descubrimiento UPnP/SSDP |
|
|
649
|
+
| Deteccion de aplicaciones | Ninguna | Identificacion de CMS, framework y plataforma de comercio electronico |
|
|
650
|
+
| Sondeo de servicios | Ninguna | Fingerprinting de MySQL, PostgreSQL, Redis, FTP, VNC/RDP |
|
|
651
|
+
| Deteccion de infraestructura | Ninguna | Identificacion de proveedor cloud, proveedor de hosting, CDN |
|
|
652
|
+
| Motor de correlacion | Ninguna | Consistencia de senales, deteccion de honeypot, deteccion de suplantacion, mapeo de topologia |
|
|
653
|
+
| Motor de identificacion | Ninguna | Identificacion basada en hash, deteccion C2, coincidencia de firmas |
|
|
654
|
+
| [Shodan](https://www.shodan.io) | `SHODAN_API_KEY` | Inteligencia de host — puertos abiertos, banners, vulnerabilidades, deteccion de SO |
|
|
655
|
+
| [Censys](https://censys.io) | `CENSYS_API_ID` | Datos de host — servicios, certificados TLS, informacion de sistema autonomo |
|
|
656
|
+
| [SecurityTrails](https://securitytrails.com) | `SECURITYTRAILS_API_KEY` | Descubrimiento de origen WAF, historial DNS pasivo, registros historicos |
|
|
657
|
+
| [VirusTotal](https://www.virustotal.com) | `VIRUSTOTAL_API_KEY` | Reputacion de dominio/IP, resultados de deteccion, historial DNS, categorias |
|
|
658
|
+
|
|
659
|
+
---
|
|
660
|
+
|
|
661
|
+
## Arquitectura
|
|
662
|
+
|
|
663
|
+
```
|
|
664
|
+
src/
|
|
665
|
+
index.ts # Punto de entrada CLI (--help, --list, --tool, servidor stdio)
|
|
666
|
+
protocol/
|
|
667
|
+
mcp-server.ts # Configuracion del servidor MCP (transporte stdio)
|
|
668
|
+
tools.ts # Registro de herramientas — las 13 herramientas compuestas registradas aqui
|
|
669
|
+
types/
|
|
670
|
+
index.ts # Tipos compartidos (ToolDef, ToolContext, ToolResult)
|
|
671
|
+
utils/
|
|
672
|
+
rate-limiter.ts # Limitador de tasa por proveedor
|
|
673
|
+
cache.ts # Cache TTL para respuestas API
|
|
674
|
+
require-key.ts # Helper de validacion de clave API
|
|
675
|
+
murmurhash3.ts # MurmurHash3 para hash de favicon
|
|
676
|
+
composite/ # 13 orquestadores de herramientas compuestas
|
|
677
|
+
recon.ts # Orquestador de reconocimiento completo (quick/standard/deep)
|
|
678
|
+
scan-ports.ts # Compuesto de escaneo de puertos
|
|
679
|
+
scan-tls.ts # Compuesto de analisis TLS
|
|
680
|
+
scan-dns.ts # Compuesto de inteligencia DNS
|
|
681
|
+
scan-http.ts # Compuesto de fingerprinting HTTP
|
|
682
|
+
scan-paths.ts # Compuesto de descubrimiento de rutas
|
|
683
|
+
scan-waf.ts # Compuesto de deteccion WAF/CDN
|
|
684
|
+
scan-services.ts # Compuesto de sondeo de servicios
|
|
685
|
+
analyze.ts # Compuesto de analisis pasivo
|
|
686
|
+
correlate.ts # Compuesto de motor de correlacion
|
|
687
|
+
enumerate.ts # Compuesto de expansion de alcance
|
|
688
|
+
osint.ts # Compuesto de enriquecimiento OSINT
|
|
689
|
+
meta.ts # Compuesto de meta del servidor
|
|
690
|
+
helpers.ts # Helpers compartidos de compuestos
|
|
691
|
+
tcp/ # Tecnicas de sondeo TCP (3)
|
|
692
|
+
tls/ # Tecnicas de analisis TLS/SSL (8)
|
|
693
|
+
ssh/ # Tecnicas de sondeo SSH (3)
|
|
694
|
+
http/ # Tecnicas de fingerprinting HTTP (16)
|
|
695
|
+
web/ # Tecnicas de deteccion de tecnologia web (9)
|
|
696
|
+
path/ # Tecnicas de descubrimiento de rutas (5)
|
|
697
|
+
dns/ # Tecnicas de inteligencia DNS (7)
|
|
698
|
+
waf/ # Tecnicas de deteccion WAF/CDN (4)
|
|
699
|
+
timing/ # Tecnicas de analisis de temporizado (2)
|
|
700
|
+
h2/ # Tecnicas HTTP/2 & HTTP/3 (3)
|
|
701
|
+
smtp/ # Tecnicas de sondeo SMTP (2)
|
|
702
|
+
iot/ # Tecnicas de deteccion IoT/embebido (2)
|
|
703
|
+
app/ # Tecnicas de deteccion de aplicaciones (3)
|
|
704
|
+
service/ # Tecnicas de sondeo de servicios (5)
|
|
705
|
+
infra/ # Tecnicas de deteccion de infraestructura (3)
|
|
706
|
+
correlation/ # Motor de correlacion (5)
|
|
707
|
+
identify/ # Motor de identificacion (3)
|
|
708
|
+
passive/ # Analisis pasivo (3)
|
|
709
|
+
osint/ # Tecnicas de enriquecimiento OSINT (6)
|
|
710
|
+
enum/ # Tecnicas de enumeracion (8)
|
|
711
|
+
meta/ # Herramientas meta (3)
|
|
712
|
+
data/ # Bases de datos de firmas y bibliotecas de patrones
|
|
713
|
+
jarm-signatures.ts # Huellas JARM conocidas (C2, servidores, CDNs)
|
|
714
|
+
waf-signatures.ts # Firmas de deteccion WAF
|
|
715
|
+
service-banners.ts # Patrones de banner de servicios
|
|
716
|
+
tech-patterns.ts # Patrones de deteccion de tecnologia
|
|
717
|
+
favicon-hashes.ts # Valores MurmurHash3 de favicon conocidos
|
|
718
|
+
c2-signatures.ts # Firmas de framework C2
|
|
719
|
+
... # 15+ bases de datos de firmas/patrones
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
**Decisiones de diseno:**
|
|
723
|
+
|
|
724
|
+
- **13 herramientas compuestas, 103 tecnicas** — El agente llama herramientas de alto nivel (`recon`, `scan_tls`, `scan_http`). Cada compuesto orquesta multiples tecnicas de bajo nivel y devuelve resultados correlacionados. Esto reduce la sobrecarga de llamadas a herramientas manteniendo la granularidad.
|
|
725
|
+
- **21 proveedores, 1 servidor** — Cada capa de fingerprinting es un modulo independiente. El orquestador compuesto selecciona tecnicas basandose en el contexto y la profundidad.
|
|
726
|
+
- **Activo primero, OSINT opcional** — 80+ tecnicas funcionan sondeando directamente el objetivo sin claves API. Los proveedores OSINT (Shodan, Censys, VirusTotal, SecurityTrails) agregan enriquecimiento pero nunca son requeridos.
|
|
727
|
+
- **Limitadores de tasa por proveedor** — Cada proveedor tiene su propia instancia de `RateLimiter`. El sondeo activo tiene limite de tasa para evitar deteccion; las APIs OSINT estan calibradas a sus cuotas.
|
|
728
|
+
- **Cache TTL** — Registros DNS (10 min), resultados OSINT (15 min), registros CT (30 min) se almacenan en cache para evitar consultas redundantes en flujos de trabajo multi-herramienta.
|
|
729
|
+
- **Degradacion elegante** — La falta de claves API no hace que el servidor se caiga. Las herramientas OSINT devuelven mensajes descriptivos: "Configure SHODAN_API_KEY para habilitar la consulta de host Shodan."
|
|
730
|
+
- **3 dependencias** — `@modelcontextprotocol/sdk`, `zod` y `cheerio`. Toda la E/S de red via `fetch()` nativo y modulos `net`/`tls`/`dns` de Node.js. Sin nmap, sin binarios externos.
|
|
731
|
+
|
|
732
|
+
---
|
|
733
|
+
|
|
734
|
+
## Limitaciones
|
|
735
|
+
|
|
736
|
+
- Las herramientas OSINT (Shodan, Censys, VirusTotal, SecurityTrails) requieren claves API para sus tecnicas respectivas
|
|
737
|
+
- El nivel gratuito de Censys esta limitado a 250 consultas/mes
|
|
738
|
+
- El nivel gratuito de VirusTotal esta limitado a 500 consultas/dia
|
|
739
|
+
- El escaneo de puertos usa TCP connect (no escaneo SYN) — menos sigiloso que nmap pero no requiere privilegios root
|
|
740
|
+
- El fingerprinting JARM requiere acceso TCP directo al objetivo (puede ser bloqueado por firewalls)
|
|
741
|
+
- El descubrimiento UPnP/SSDP solo funciona en redes locales
|
|
742
|
+
- El sondeo de servicios (MySQL, PostgreSQL, Redis) se conecta pero no autentica
|
|
743
|
+
- La enumeracion de subdominios depende de registros CT y fuentes pasivas (sin fuerza bruta)
|
|
744
|
+
- macOS / Linux probados (Windows no probado)
|
|
745
|
+
|
|
746
|
+
---
|
|
747
|
+
|
|
748
|
+
## Parte de la suite de seguridad MCP
|
|
749
|
+
|
|
750
|
+
| Proyecto | Dominio | Herramientas |
|
|
751
|
+
|----------|---------|--------------|
|
|
752
|
+
| [hackbrowser-mcp](https://github.com/badchars/hackbrowser-mcp) | Pruebas de seguridad basadas en navegador | 39 herramientas, Firefox, pruebas de inyeccion |
|
|
753
|
+
| [cloud-audit-mcp](https://github.com/badchars/cloud-audit-mcp) | Seguridad cloud (AWS/Azure/GCP) | 38 herramientas, 60+ verificaciones |
|
|
754
|
+
| [github-security-mcp](https://github.com/badchars/github-security-mcp) | Postura de seguridad GitHub | 39 herramientas, 45 verificaciones |
|
|
755
|
+
| [cve-mcp](https://github.com/badchars/cve-mcp) | Inteligencia de vulnerabilidades | 23 herramientas, 5 fuentes |
|
|
756
|
+
| [osint-mcp-server](https://github.com/badchars/osint-mcp-server) | OSINT y reconocimiento | 37 herramientas, 12 fuentes |
|
|
757
|
+
| [darknet-mcp-server](https://github.com/badchars/darknet-mcp-server) | Dark web e inteligencia de amenazas | 66 herramientas, 16 fuentes |
|
|
758
|
+
| **fingerprint-mcp** | **Huella digital universal** | **13 herramientas, 103 tecnicas, 21 proveedores** |
|
|
759
|
+
|
|
760
|
+
---
|
|
761
|
+
|
|
762
|
+
<p align="center">
|
|
763
|
+
<b>Solo para pruebas y evaluaciones de seguridad autorizadas.</b><br>
|
|
764
|
+
Siempre asegurese de tener la autorizacion adecuada antes de realizar fingerprinting en cualquier objetivo.
|
|
765
|
+
</p>
|
|
766
|
+
|
|
767
|
+
<p align="center">
|
|
768
|
+
<a href="LICENSE">Licencia AGPL-3.0</a> • Construido con Bun + TypeScript
|
|
769
|
+
</p>
|