fofa
FOFA (Fingerprint Of All) es un motor de búsqueda de ciberespacio desarrollado en China por Baimaohui Security Research Center. Indexa más de 10.000 millones de activos de internet, con cobertura especialmente fuerte en infraestructura asiática y en protocolos industriales. Es más accesible que Shodan en cuentas gratuitas y ofrece un sistema de fingerprinting de aplicaciones (
app=) muy potente.
.png)
Diferencias clave respecto a Shodan
Section titled “Diferencias clave respecto a Shodan”| Característica | FOFA | Shodan |
|---|---|---|
| Cobertura Asia/China | ✅ Superior | ⚠️ Parcial |
Fingerprinting de apps (app=) |
✅ Nativo | ❌ No existe |
| Filtros gratuitos | ✅ Más permisivos | ⚠️ Limitados |
| Cobertura global general | ⚠️ Buena | ✅ Superior |
| Protocolo ICS/OT gratuito | ✅ Sí | ❌ Solo enterprise |
| Hash de favicon | ✅ icon_hash= |
✅ http.favicon.hash: |
| JARM fingerprint | ✅ jarm= |
✅ ssl.jarm: |
| Honeypot detection | ✅ is_honeypot=false |
⚠️ tag:honeypot |
Acceso
Section titled “Acceso”| Método | URL |
|---|---|
| Web UI (inglés) | en.fofa.info |
| Web UI (chino) | fofa.info |
| API REST | https://fofa.info/api/v1/search/all |
| CLI oficial (Go) | github.com/FofaInfo/GoFOFA |
| CLI comunitario | fofax |
Sintaxis de búsqueda
Section titled “Sintaxis de búsqueda”FOFA usa una sintaxis propia basada en pares campo="valor". A diferencia de Shodan (que usa campo:valor), FOFA usa = con comillas.
campo="valor"campo="valor1" && campo2="valor2" # ANDcampo="valor1" || campo2="valor2" # ORcampo="valor1" && campo2!="valor2" # NOT en valor específicoWildcards (fuzzy search):
domain="*.empresa.com" # wildcard al iniciodomain="empresa.*" # wildcard al finalversion="5.?.*" # ? = un carácter, * = variosEn FOFA,
*y?se usan dentro del valor de la búsqueda, no como prefijo del campo.
Operadores y comparadores
Section titled “Operadores y comparadores”| Operador | Significado | Ejemplo |
|---|---|---|
= |
Igual (exact match o fuzzy con wildcards) | title="Login" |
!= |
Distinto de | port!="443" |
&& |
AND lógico | title="nginx" && country="ES" |
|| |
OR lógico | port="80" || port="8080" |
=* |
Fuzzy/wildcard | domain="*.gov.es" |
after= |
Resultados después de fecha | after="2024-01-01" |
before= |
Resultados antes de fecha | before="2024-06-01" |
Filtros generales
Section titled “Filtros generales”Aplicables a cualquier tipo de búsqueda.
| Filtro | Descripción | Ejemplo |
|---|---|---|
ip |
Dirección IP exacta o rango CIDR | ip="1.2.3.4" / ip="192.168.0.0/24" |
port |
Puerto | port="8080" |
domain |
Dominio o subdominio | domain="empresa.es" |
host |
Host completo (incluye puerto) | host="empresa.es:8443" |
title |
Título HTML de la página | title="Dashboard" |
body |
Contenido del cuerpo HTML | body="Powered by" |
header |
Cabeceras HTTP de respuesta | header="X-Powered-By: PHP" |
banner |
Banner completo del servicio | banner="SSH-2.0-OpenSSH" |
protocol |
Protocolo detectado | protocol="https" |
country |
Código de país ISO | country="ES" |
region |
Región/provincia | region="Madrid" |
city |
Ciudad | city="Madrid" |
os |
Sistema operativo | os="Windows Server 2019" |
server |
Servidor web (del header) | server="Apache" |
app |
Aplicación/producto detectado por fingerprint | app="WordPress" |
product |
Nombre de producto (alternativa a app) |
product="nginx" |
version |
Versión del producto | version="2.4.49" |
icp |
Número de registro ICP (China) | icp="京ICP备" |
org |
Organización/ASN | org="Telefonica" |
asn |
Número AS | asn="AS3352" |
is_honeypot |
Filtrar honeypots | is_honeypot=false |
is_domain |
Solo resultados con dominio resuelto | is_domain=true |
is_ipv6 |
Solo IPv6 | is_ipv6=true |
after |
Datos actualizados después de fecha | after="2024-01-01" |
before |
Datos actualizados antes de fecha | before="2024-12-31" |
Filtros por tipo de búsqueda
Section titled “Filtros por tipo de búsqueda”Servidores web y aplicaciones
Section titled “Servidores web y aplicaciones”title="phpMyAdmin" && country="ES"app="WordPress" && country="ES"body="Index of /" && title="Apache"header="X-Powered-By: ThinkPHP"| Filtro | Descripción | Ejemplo |
|---|---|---|
title |
Título HTML | title="Login Panel" |
body |
HTML del body | body="wp-content" |
header |
Cabecera HTTP específica | header="Server: IIS" |
app |
Fingerprint de aplicación (Wappalyzer-like) | app="Drupal" |
server |
Header Server | server="nginx" |
icon_hash |
Hash MurmurHash3 del favicon | icon_hash="-247388890" |
header_hash |
Hash de las cabeceras HTTP | header_hash="-1524283538" |
body_hash |
Hash del cuerpo de la respuesta | body_hash="1234567890" |
status_code |
Código de respuesta HTTP | status_code="200" |
js_name |
Nombre de librería JS detectada | js_name="jquery" |
js_md5 |
MD5 de un fichero JS específico | js_md5="abc123..." |
Truco — icon_hash en FOFA:
import mmh3, requests, base64r = requests.get("https://target.com/favicon.ico")favicon = base64.encodebytes(r.content)print(mmh3.hash(favicon))Busca ese hash con
icon_hash="-123456789"para encontrar todos los activos de un target, incluso los que no aparecen en DNS.
SSL/TLS y certificados
Section titled “SSL/TLS y certificados”cert="empresa.com" && country="ES"cert.subject.org="Target Corp" && is_honeypot=falsecert.issuer.cn="Let's Encrypt" && domain="*.empresa.es"cert.is_valid=false && domain="empresa.com"| Filtro | Descripción | Ejemplo |
|---|---|---|
cert |
Cualquier campo del certificado (búsqueda libre) | cert="empresa" |
cert.subject.org |
Organización del subject | cert.subject.org="Target" |
cert.subject.cn |
Common Name del subject | cert.subject.cn="*.empresa.es" |
cert.issuer.cn |
Common Name del emisor | cert.issuer.cn="DigiCert" |
cert.issuer.org |
Organización del emisor | cert.issuer.org="Let's Encrypt" |
cert.is_valid |
Certificado válido/caducado | cert.is_valid=true |
cert.is_expired |
Certificado caducado explícitamente | cert.is_expired=true |
cert.is_match |
Cert coincide con el dominio | cert.is_match=false |
jarm |
Hash JARM del servidor TLS | jarm="29d29d00029d..." |
tls.version |
Versión TLS/SSL | tls.version="TLSv1" |
Enumeración de activos con wildcards:
cert.subject.cn="*.empresa.com"encuentra todos los activos de una empresa que usen ese certificado wildcard, incluyendo subdominos no enumerados por DNS.
protocol="ssh" && country="ES" && banner="SSH-2.0-OpenSSH_7"app="OpenSSH" && version="7.4" && country="ES"| Filtro | Descripción | Ejemplo |
|---|---|---|
protocol |
Protocolo SSH | protocol="ssh" |
port |
Puerto SSH | port="22" |
banner |
Banner completo del servicio | banner="SSH-2.0-OpenSSH" |
app |
Implementación SSH detectada | app="OpenSSH" |
version |
Versión de OpenSSH | version="8.9p1" |
protocol="ftp" && banner="220" && country="ES"banner="230 Login successful" && banner="anonymous"| Filtro | Descripción | Ejemplo |
|---|---|---|
protocol |
Protocolo FTP | protocol="ftp" |
port |
Puerto FTP | port="21" |
banner |
Banner de respuesta FTP | banner="220 ProFTPD" |
Bases de datos
Section titled “Bases de datos”MongoDB
app="MongoDB" && country="ES"port="27017" && app="MongoDB"Elasticsearch / Kibana
app="Elastic" && port="9200" && country="ES"title="Kibana" && port="5601"app="Kibana" && country="ES"Redis
app="Redis" && country="ES"port="6379" && banner="redis_version"MySQL / MSSQL / PostgreSQL
app="MySQL" && country="ES"app="Microsoft-SQL-Server" && country="ES"app="PostgreSQL" && country="ES"Otras
app="Apache-CouchDB" && country="ES"app="Memcached" && country="ES"app="InfluxDB" && country="ES"| Base de datos | app= value |
Puerto por defecto |
|---|---|---|
| MongoDB | "MongoDB" |
27017 |
| Elasticsearch | "Elastic" |
9200 |
| Kibana | "Kibana" |
5601 |
| Redis | "Redis" |
6379 |
| MySQL | "MySQL" |
3306 |
| MSSQL | "Microsoft-SQL-Server" |
1433 |
| PostgreSQL | "PostgreSQL" |
5432 |
| Memcached | "Memcached" |
11211 |
| CouchDB | "Apache-CouchDB" |
5984 |
| Cassandra | "Cassandra" |
9042 |
Escritorio remoto y gestión
Section titled “Escritorio remoto y gestión”app="Remote-Desktop-Protocol" && country="ES"app="VNC" && country="ES"protocol="rdp" && country="ES"| Servicio | Filtro | Puerto |
|---|---|---|
| RDP | app="Remote-Desktop-Protocol" |
3389 |
| VNC | app="VNC" |
5900 |
| Telnet | protocol="telnet" |
23 |
| WinRM | port="5985" || port="5986" |
5985/5986 |
| IPMI | port="623" |
623 |
| TeamViewer | app="TeamViewer" |
5938 |
| RDP (alt) | title="Remote Desktop" && country="ES" |
— |
Paneles de administración y virtualización
Section titled “Paneles de administración y virtualización”app="Proxmox-Virtual-Environment" && country="ES"app="VMware-ESXi" && country="ES"title="Grafana" && country="ES"app="phpMyAdmin" && country="ES"title="Jupyter Notebook" && country="ES"| Panel | Filtro app/title |
|---|---|
| Proxmox | app="Proxmox-Virtual-Environment" |
| VMware ESXi | app="VMware-ESXi" |
| vCenter | app="VMware-vCenter" |
| Grafana | app="Grafana" |
| Kibana | app="Kibana" |
| phpMyAdmin | app="phpMyAdmin" |
| Jupyter | title="Jupyter Notebook" |
| Jenkins | app="Jenkins" |
| GitLab | app="GitLab" |
| Docker API | port="2375" || port="2376" |
| Kubernetes API | port="6443" && app="Kubernetes" |
| Portainer | app="Portainer" |
| pfSense | title="pfSense" |
ICS/SCADA y sistemas industriales
Section titled “ICS/SCADA y sistemas industriales”Solo para uso en assets propios o con autorización explícita. Infraestructura crítica.
app="Industrial-Control-Products" && country="ES"protocol="modbus" && country="ES"protocol="s7" && country="DE"app="Siemens-S7-PLC"| Protocolo | Filtro | Puerto |
|---|---|---|
| Modbus | protocol="modbus" |
502 |
| Siemens S7 | protocol="s7" / app="Siemens-S7-PLC" |
102 |
| DNP3 | protocol="dnp3" |
20000 |
| BACnet | protocol="bacnet" |
47808 |
| EtherNet/IP | protocol="enip" |
44818 |
| IEC 104 | protocol="iec-104" |
2404 |
| HART-IP | protocol="hart-ip" |
5094 |
| Todos ICS | app="Industrial-Control-Products" |
— |
Ventaja FOFA vs Shodan: el filtro
app="Industrial-Control-Products"es accesible en plan gratuito, mientras que en Shodan el tagicses solo enterprise.
Threat Hunting — C2 e infraestructura maliciosa
Section titled “Threat Hunting — C2 e infraestructura maliciosa”# Cobalt Strike (JARM fingerprint)jarm="07d14d16d21d21d07c42d41d00041d24a458a375eef0c576d23a7bab9a9fb1"
# Cobalt Strike (cert)cert="Major Cobalt Strike"
# Cobalt Strike (título)title="Cobalt Strike"
# Brute Ratel C4jarm="2ad2ad0002ad2ad00042d42d000000ad9bf51cc3f5a1e29e4afa3e701e8a82"
# Gophish (phishing framework)title="gophish" || body="gophish"
# Evilginx2cert="evilginx" || body="X-Evilginx"
# Web shells comunesbody="c99" || body="r57" || body="WSO"body="eval(base64_decode" && body="$_POST"
# Paneles de phishingtitle="Login" && body="Microsoft" && cert.issuer!="Microsoft"| Infraestructura | Filtro FOFA |
|---|---|
| Cobalt Strike | jarm="07d14d16d21d21d..." |
| Cobalt Strike (cert) | cert="Major Cobalt Strike" |
| Brute Ratel | jarm="2ad2ad0002ad..." |
| Gophish | title="gophish" |
| Evilginx | cert="evilginx" |
| Havoc C2 | header="X-Havoc" |
| Sliver C2 | cert.subject.org="multiplayer" |
El sistema app= — fingerprints de FOFA
Section titled “El sistema app= — fingerprints de FOFA”app= es la característica más potente y diferenciadora de FOFA. Usa una base de datos interna de fingerprints para identificar aplicaciones por sus características (títulos, headers, body, certificados, iconos…).
app="WordPress" && country="ES"app="Apache-Struts" && country="ES" # CVE-2017-5638app="Log4j" && country="ES" # CVE-2021-44228app="Spring-Boot" && country="ES"app="Citrix-NetScaler-Gateway" # CVE-2023-3519app="Fortinet-FortiGate"app="Pulse-Secure-VPN"app="F5-BIG-IP"La lista completa de fingerprints está en en.fofa.info/library. Actualmente supera los 10.000 fingerprints.
API REST
Section titled “API REST”BASE: https://fofa.info/api/v1/search/all
# Parámetros:# email= Tu email de cuenta FOFA# key= Tu API key# qbase64= Query en base64# size= Número de resultados (max 10000 por query con F-points)# page= Página de resultados# fields= Campos a devolver (ip,port,host,title,domain,...)# full= true para incluir datos históricos
# Ejemplo cURLcurl "https://fofa.info/api/v1/search/all?email=TU_EMAIL&key=TU_KEY&qbase64=$(echo -n 'app="nginx" && country="ES"' | base64)&size=100&fields=ip,port,host,title"Campos disponibles en la API
Section titled “Campos disponibles en la API”ip, port, protocol, country, country_name, region, city,longitude, latitude, as_number, as_organization,host, domain, os, server, icp, title, jarm, header, banner,cert, base_protocol, link, product, product_category,version, lastupdatetime, cname, icon_hash, certs_valid,cname_domain, body, fid, structinfoQueries con
certobanner→ máx. 2000 resultados/página. Queries conbody→ máx. 500 resultados/página.
GoFOFA — CLI oficial
Section titled “GoFOFA — CLI oficial”# Instalargo install github.com/FofaInfo/GoFOFA/cmd/fofa@latest
# Configurar API keyexport FOFA_KEY="TU_API_KEY"export FOFA_EMAIL="TU_EMAIL"
# Búsqueda básica (100 resultados, deduplicados por defecto)fofa search -s 100 'app="nginx" && country="ES"'
# Campos personalizadosfofa search -f ip,port,host,title,protocol 'title="Login" && country="ES"'
# Exportar a CSVfofa dump -f ip,port,host,title -o resultado.csv 'app="WordPress" && country="ES"'
# Exportar a JSONfofa dump -f ip,port,host -o resultado.json --format json 'port="22" && country="ES"'
# Contar resultados sin consumir cuotafofa count 'app="Apache"'
# Info de un hostfofa host demo.empresa.com
# Calcular icon_hash desde URLfofa icon --open https://target.com/favicon.ico
# Buscar por icon_hash desde fichero localfofa search -if ./favicon.ico
# Buscar por certificado de una URLfofa search -uc https://target.com
# Verificar si hosts están activos (3 reintentos)fofa --checkActive 3 -s 100 --format=json 'port="80" && country="ES"'
# Datos históricos (incluye hosts offline)fofa search --full true -s 100 'app="Joomla"'
# Estadísticas (facets)fofa stats --field country 'app="Apache-Struts"'fofax — CLI comunitario popular
Section titled “fofax — CLI comunitario popular”# Instalargo install github.com/xiecat/fofax/cmd/fofax@latest
# Búsqueda básicafofax -q 'app="APACHE-Solr"'
# Excluir honeypotsfofax -q 'app="Redis"' -e
# Excluir Chinafofax -q 'app="Redis"' -ec
# Obtener solo IPsfofax -q 'port="3389" && country="ES"' -ffi
# Obtener títulos de los dominiosfofax -q 'domain="empresa.com"' -fto
# Fetch JARM de los resultadosfofax -q 'app="Nginx" && country="ES"' -fjo
# Campos customfofax -q 'app="Spring-Boot"' -ff "host,lastupdatetime"FOFA Dorks útiles
Section titled “FOFA Dorks útiles”# Jenkins sin loginapp="Jenkins" && title="Dashboard" && body!="login"
# GitLab expuestoapp="GitLab" && title!="Sign in"
# Paneles Grafanaapp="Grafana" && country="ES"
# Jupyter Notebook sin authtitle="Jupyter Notebook" && body!="password"
# Docker API expuestaport="2375" && protocol="http"
# Kubernetes API sin TLSport="8080" && app="Kubernetes"
# Spring Boot Actuator expuestobody="/actuator" && app="Spring-Boot"
# phpMyAdminapp="phpMyAdmin" && country="ES"
# Hadoop NameNodeapp="Hadoop" && port="50070"
# Elasticsearch sin authapp="Elastic" && port="9200" && country="ES"
# Log4Shell — versiones afectadasapp="Log4j" && version="2.1*"
# Apache Struts (CVE-2017-5638)app="Apache-Struts" && country="ES"
# VMware vCenter (CVE-2021-21985)app="VMware-vCenter"
# Fortinet con credenciales expuestasapp="Fortinet-FortiGate" && body="credentials"
# SMTP open relayprotocol="smtp" && banner="220" && banner="ESMTP" && country="ES"
# Paneles con "admin/admin" en el body (evidencia de config por defecto)body="admin" && title="admin" && app="Router"Comparativa de sintaxis FOFA vs Shodan
Section titled “Comparativa de sintaxis FOFA vs Shodan”| Búsqueda | FOFA | Shodan |
|---|---|---|
| Título web | title="Login" |
http.title:"Login" |
| Cuerpo HTML | body="content" |
http.html:"content" |
| Certificado | cert="empresa" |
ssl:"empresa" |
| País | country="ES" |
country:ES |
| Puerto | port="22" |
port:22 |
| Sistema operativo | os="Windows" |
os:"Windows" |
| Aplicación | app="WordPress" |
❌ (no existe) |
| Favicon hash | icon_hash="-12345" |
http.favicon.hash:-12345 |
| JARM | jarm="07d14..." |
ssl.jarm:07d14... |
| Rango CIDR | ip="192.168.0.0/24" |
net:192.168.0.0/24 |
| Organización | org="Telefonica" |
org:"Telefonica" |
| AND | && |
espacio |
| OR | || |
OR |
| NOT | != |
- |
| Honeypot excluir | is_honeypot=false |
tag:honeypot (negativo: -tag:honeypot) |
Límites por plan
Section titled “Límites por plan”| Plan | Resultados/día | Filtros avanzados | app= |
Honeypot filter | API |
|---|---|---|---|---|---|
| Free (registro) | 1 página (~10) | ⚠️ Limitados | ✅ | ❌ | ❌ |
| Basic (~$9.9/mes) | Ilimitados | ✅ | ✅ | ✅ | ✅ hasta 10K/mes |
| Professional | Ilimitados | ✅ | ✅ | ✅ | ✅ hasta 1M/mes |
| Business/Enterprise | Ilimitados | ✅ | ✅ | ✅ | Sin límite |
Los créditos F-Points se consumen al usar la API para descargas masivas. Las búsquedas en la web no consumen F-Points.
Herramientas de terceros para FOFA
Section titled “Herramientas de terceros para FOFA”| Herramienta | Lenguaje | Descripción |
|---|---|---|
| GoFOFA | Go | CLI oficial de FofaInfo |
| fofax | Go | CLI comunitario con filtros extra |
| FofaMap | Python | CLI con integración Nuclei y MCP |
| fofa_viewer | Java | GUI de escritorio |
| PyFOFA | Python | Wrapper Python para la API |