Fofax进阶技巧:自定义Fx语法规则与实战应用

张开发
2026/4/12 21:27:53 15 分钟阅读

分享文章

Fofax进阶技巧:自定义Fx语法规则与实战应用
1. 认识Fofax与Fx语法第一次接触Fofax时我完全被它的效率震惊了。这个用Go语言编写的命令行工具就像是给FoFa搜索引擎装上了涡轮增压器。你可能已经熟悉FoFa的基本查询但Fofax带来的Fx语法才是真正的游戏规则改变者。简单来说Fx语法允许你像搭积木一样把各种查询条件组合成可复用的规则模板。想象你每天都要重复查询暴露在公网的Jenkins服务传统方式每次都要输入完整的查询语句。而用Fx语法你可以把这个查询模式保存为一条规则下次只需调用规则名称就能执行完整查询。更棒的是这些规则通过yaml文件管理支持条件组合、变量替换等高级特性。我团队现在维护着200条Fx规则将日常工作的查询效率提升了至少5倍。2. 编写你的第一条Fx规则让我们从最基础的yaml规则模板开始。先运行这个命令生成模板文件fofax -g ~/my_first_rule.yaml打开生成的yaml文件你会看到类似这样的结构id: fx-custom-001 # 规则ID保持唯一性 query: appApache # 基础查询语句 rule_name: Apache服务检测 # 中文规则名 description: 检测公网暴露的Apache服务 # 规则说明 tags: [web, scanner] # 标签用于分类这是我早期写的一条真实规则用于查找配置错误的Nginx服务器id: fx-nginx-misconfig query: servernginx headerserver: nginx bodydirectory listing rule_name: Nginx目录遍历漏洞 description: 检测开启目录列表功能的Nginx服务 tags: [web, vulnerability]保存文件后把它放到~/.config/fofax/rules/目录没有就新建。测试时使用fofax -q fxnginx目录遍历漏洞 -fe3. 高级规则编写技巧当基础规则无法满足需求时Fx语法这些特性会让你事半功倍变量参数化是我最常用的功能。比如这个动态查询不同CMS的规则id: fx-cms-check query: app{{cms_name}} country{{country}} rule_name: CMS检测-{{cms_name}} variables: cms_name: default: WordPress options: [WordPress, Drupal, Joomla] country: default: CN调用时这样传参fofax -q fxCMS检测 cms_nameDrupal countryUS -fe条件组合让规则更智能。这个例子会先检测Web服务再检查是否存在特定漏洞特征id: fx-web-vuln rules: - query: server{{server_type}} name: {{server_type}}服务检测 - query: bodyvulnerability_indicator name: 漏洞特征验证 depends_on: [{{server_type}}服务检测]4. 实战中的规则优化经验在真实漏洞挖掘中我总结出这些黄金法则精准排除干扰项好的规则要像狙击枪而不是散弹枪。比如找暴露的Kibana时加上!cloud排除云服务商的管理界面。多维度验证不要只依赖单一特征。检测Jenkins未授权访问时我通常会组合三个条件query: titleJenkins port8080 bodymanage jenkins !bodyauthentication性能调优大范围扫描时在yaml中添加这些参数能显著提升效率performance: max_pages: 3 # 限制翻页数 timeout: 10s # 单次查询超时 concurrency: 5 # 并发数有个实际案例我们曾用自定义规则在2小时内发现了某央企的200台暴露的Redis实例。关键规则是这样的id: fx-redis-exposed query: port6379 bannerredis countryCN !ip10.|172.|192. rule_name: 国内公网Redis实例 description: 检测未配置防火墙的Redis服务 tags: [database, critical]5. 规则管理与团队协作当规则积累到几十条时你需要考虑这些问题版本控制我们把所有yaml规则文件放在Git仓库用CI/CD自动同步到团队的fofax安装目录。每次修改都有记录还能做code review。分类体系按这个目录结构组织规则找起来特别方便rules/ ├── web/ │ ├── cms.yaml │ └── middleware.yaml ├── infra/ │ ├── database.yaml │ └── cloud.yaml └── vuln/ ├── cve-2023-xxx.yaml └── log4j.yaml质量监控我写了个定时任务每周自动测试所有规则的查询结果。如果某条规则连续返回空结果就会触发告警。这帮助我们发现了很多因服务特征变化而过期的规则。6. 排查规则问题的技巧即使老手也会遇到规则不工作的情况。这是我的排错清单先用-debug参数看原始查询语句fofax -q fx我的规则 -fe -debug检查yaml语法特别是缩进和引号。曾经有个bug花了我两小时最后发现是tab和空格混用。在FoFa官网直接测试查询语句确认不是API本身的问题。对于复杂规则拆分成小段逐步测试。比如先测试条件A再测试AB最后测试完整规则。有个记忆犹新的案例我们的一条Elasticsearch规则突然失效最终发现是因为FoFa的语法从port9200变成了port9200。解决方案是在yaml里加上兼容写法query: (port9200 || port9200) productelasticsearch7. 安全防护与合规建议使用强大工具的同时要牢记遵守数据合规在规则中添加country!CN等条件时确保有合法授权控制扫描频率在yaml中设置合理的interval: 60s防止触发速率限制敏感信息保护不要把包含业务特征的规则文件上传到公开仓库日志审计建议用-log-file参数记录所有查询活动我习惯在关键规则的metadata区域添加负责人和审批信息meta: owner: security-teamcompany.com approved_by: cisocompany.com review_date: 2023-12-31这些年来Fx语法已经成为我们安全运营的核心工具之一。从最初的简单查询到现在覆盖200种资产类型的规则库它显著提升了我们的威胁发现能力。刚开始可能会觉得yaml配置有些复杂但坚持下来后你会发现它带来的效率提升绝对值得投入。最近我们正在试验把Fx规则与内部CMDB联动自动生成资产监控规则这可能是下一个突破点。

更多文章