fofa-query-syntax

star 829

生成、改写并校验 FOFA 查询语句。用于用户提到 FOFA、资产测绘、语法速查、查询语句编写、语句纠错、条件组合优化时。

xiecat By xiecat schedule Updated 3/6/2026

name: fofa-query-syntax description: 生成、改写并校验 FOFA 查询语句。用于用户提到 FOFA、资产测绘、语法速查、查询语句编写、语句纠错、条件组合优化时。

FOFA Query Syntax

使用范围

  • 仅允许使用该文件中存在的字段(key)。
  • 当用户要求“写 FOFA 语句 / 改写语句 / 检查语法 / 给出等价查询”时,优先应用本 Skill。

语法基线

  • 基础条件写法:field="value"
  • 取反条件写法:field!="value"(仅当字段支持 not_equal)。
  • 条件连接:使用 && / || 进行组合。
  • 布尔字段按示例使用:如 is_domain=true
  • 时间字段值格式:YYYY-MM-DD
  • 同源 IP 函数字段按示例调用:ip_filter(...)ip_exclude(...)

运算符能力规则(必须遵守)

按约束使用运算符:

  • equal + not_equal + fuzzy_search(可用 =!=、模糊)
    port, domain, host, os, server, asn, org, cloud_name, protocol, title, header_hash, js_name, js_md5, cname, cname_domain, icp, cert.subject, cert.issuer, cert.subject.org, cert.subject.cn, cert.issuer.org, cert.issuer.cn, cert.domain, jarm, tls.ja3s
  • equal + not_equal(可用 =!=
    ip, fid, product, product.version, category, banner, banner_hash, banner_fid, base_protocol, header, body, body_hash, icon_hash, status_code, sdk_hash, country, region, city, cert, tls.version, cert.sn, port_size
  • equal only(仅可 =
    is_domain, is_ipv6, app, type, is_cloud, is_fraud, is_honeypot, cert.is_equal, cert.is_valid, cert.is_match, cert.is_expired, cert.not_after.after, cert.not_after.before, cert.not_before.after, cert.not_before.before, after, before, after&before, ip_filter(), ip_exclude(), port_size_gt, port_size_lt, ip_ports, ip_country, ip_region, ip_city, ip_after, ip_before

如果用户给了不被支持的写法(例如对 equal only 字段使用 !=),必须改写为合法表达式并说明改写原因。

字段分组速查(按 category.group)

  • group 0 资产基础
    ip, port, domain, host, os, server, asn, org, is_domain, is_ipv6
  • group 1 应用与资产分类
    app, fid, product, product.version, category, type, cloud_name, is_cloud, is_fraud, is_honeypot
  • group 2 协议与横幅
    protocol, banner, banner_hash, banner_fid, base_protocol
  • group 3 Web 内容与页面特征
    title, header, header_hash, body, body_hash, js_name, js_md5, cname, cname_domain, icon_hash, status_code, icp, sdk_hash
  • group 4 地理信息
    country, region, city
  • group 5 证书信息
    cert, cert.subject, cert.issuer, cert.subject.org, cert.subject.cn, cert.issuer.org, cert.issuer.cn, cert.domain, cert.is_equal, cert.is_valid, cert.is_match, cert.is_expired, jarm, tls.version, tls.ja3s, cert.sn, cert.not_after.after, cert.not_after.before, cert.not_before.after, cert.not_before.before
  • group 6 时间筛选
    after, before, after&before
  • group 7 同源 IP 与独立 IP 聚合
    ip_filter(), ip_exclude(), port_size, port_size_gt, port_size_lt, ip_ports, ip_country, ip_region, ip_city, ip_after, ip_before

权限提醒规则

若命中以下字段,输出时追加版本提示:

  • (个人版及以上)
    banner_hash, banner_fid, header_hash, cert.is_equal, cert.is_valid, cert.is_match, cert.is_expired, after, before
  • (专业版及以上)
    is_fraud, is_honeypot
  • (商业版及以上)
    sdk_hash, ip_filter(), ip_exclude(), port_size, port_size_gt, port_size_lt, ip_ports, ip_country, ip_region, ip_city, ip_after, ip_before

助手工作流(生成/改写/校验)

按以下顺序执行,不跳步:

  1. 明确目标
    • 提取用户目标(找什么资产、在什么范围、排除什么)。
  2. 映射字段
    • 从分组速查选择字段,优先语义最直接字段。
  3. 选择运算符
    • 严格按“运算符能力规则”选择 = / != / 模糊。
  4. 组装语句
    • 先给 1 条主查询,再给 1-2 条等价改写(更宽/更窄)。
  5. 语法自检
    • 检查未知字段、非法运算符、明显冲突(如同字段互斥值)。
  6. 输出说明
    • 简述每个条件含义;有权限字段时附版本提醒。

信息不充分时的处理

  • 若用户目标缺少关键维度(目标类型/地理范围/时间范围/排除条件),先补问 1-2 个关键问题再生成。
  • 若用户明确要求“直接给查询”,可先给一版可执行语句,并标注默认假设。
  • 默认假设优先级:
    • 默认使用 = 写法,不擅自使用 !=
    • 默认不加时间范围,除非用户明确要求“最近/历史”。
    • 默认不使用付费字段,除非用户主动要求或场景强依赖。

自然语言到字段映射规则

  • “独立 IP / 同 IP 多端口 / 旁站”优先映射 group 7ip_filter(), ip_exclude(), port_size*, ip_ports
  • “网站标题/正文/响应头/图标”优先映射 group 3title, body, header, icon_hash 等。
  • “证书主体/签发者/证书有效性/过期”优先映射 group 5cert.*
  • “资产更新时间范围”优先映射 group 6after, before(优先,不建议使用 after&before)。
  • “国家/省份/城市”优先使用:
    • 一般资产:country, region, city
    • 独立 IP 聚合:ip_country, ip_region, ip_city

冲突与风险检测清单

在“语法检查”中至少检查以下项:

  • 字段拼写冲突:如 product_version(应为 product.version)。
  • 运算符冲突:equal only 字段误用 !=
  • 类型冲突:布尔字段写成字符串("true")。
  • 时间冲突:after 晚于 before
  • 语义冲突:同字段在同一逻辑分支出现互斥条件(如 is_ipv6=true && is_ipv6=false)。
  • 权限风险:命中付费字段但未提醒版本门槛。

输出质量标准

  • 至少返回 1 条“主查询”+ 1 条“等价改写”。
  • 解释每个条件的筛选意图,不只给语句本身。
  • 改写版本应体现“更宽”或“更窄”的差异,而不是仅改写排版。
  • 发生纠错时,必须同时给“原写法 -> 修正写法 -> 修正原因”。

输出模板

主查询:
<query>

等价改写:
1) <query_variant_1>
2) <query_variant_2>

语法检查:
- 字段合法性:通过/不通过(原因)
- 运算符合法性:通过/不通过(原因)
- 条件冲突:无/有(说明)

说明:
- 条件解释...
- 版本权限提醒(如有)...

代表性示例

  • 基础网络资产
    • ip="1.1.1.1"
    • port="6379"
    • domain="qq.com"
  • Web 指纹与内容
    • title="beijing" && body="网络空间测绘"
    • header_hash="1258854265" && icon_hash="-247388890"
  • 证书场景
    • cert.subject="Oracle Corporation" && cert.is_valid=true
    • cert.not_after.before="2025-03-01"
  • 时间场景
    • after="2023-01-01" && before="2023-12-01"
  • 同源 IP 场景
    • ip_filter(banner="SSH-2.0-OpenSSH_6.7p2") && ip_filter(icon_hash="-1057022626")
    • ip_filter(banner="SSH-2.0-OpenSSH_6.7p2" && asn="3462") && ip_exclude(title="EdgeOS")

纠错规则

  • 未知字段:提示“字段不存在,并给最接近候选字段。
  • 运算符不合法:改写为支持形式(如 != 改为 = 并调整逻辑)。
  • 布尔值误写为字符串:改为 true/false(不加引号)。
  • 时间格式错误:改为 YYYY-MM-DD
  • after&before 标记为不推荐:优先改写为 after="..." && before="..."

纠错输出格式(固定)

发现问题:
1) <原写法>

修正建议:
1) <修正写法>

原因:
- <对应 grammar 能力限制或字段定义>

约束

  • 不虚构字段和能力。
  • 不假设未声明的函数或语法糖。
  • 如果需求超出 FOFA 字段能力,明确指出限制并给可执行近似方案。

参考资料

  • 完整字段目录、能力矩阵、权限门槛见 reference.md
Install via CLI
npx skills add https://github.com/xiecat/fofax --skill fofa-query-syntax
Repository Details
star Stars 829
call_split Forks 79
navigation Branch main
article Path SKILL.md
More from Creator