FOFA模糊搜索的正确姿势

▌前言
当初开发模糊搜索功能的初衷是为了解决分词不完整的问题,包括中文字符和英文字符的分词 。这些分词问题可能会导致用户在搜索过程中无法搜到结果 。例如,在搜索“”数据时,一条MySQL的数据中包含""关键词,但是由于系统正确的分词是"",导致大家搜索不到匹配结果 。
令人惊喜的是,在此过程中我们发现,模糊搜索功能其实可以适用于更多特定的搜索场景 。本文即将向各位FOFA工程师介绍模糊搜索的多样玩法,希望为大家带来一些便捷和启发 。
▌使用场景演示
1. 基础使用方法演示
这里我们以域名为例,如host=""的搜索结果,针对其进行模糊匹配搜索 。
host="test.baidu.com"
我们需要的是,主域名为但子域名包含test关键词的资产,test关键词后缀可能有其他信息,那么FOFA的搜索语句就是:
host*="test*.baidu.com"
这时我们继续变更需求,需要主域名为但子域名中包含test关键词的资产,test关键词前后可能有其他字符,那么FOFA的搜索语句就是:
host*="*test*.baidu.com"
再变更一下目标,需要查询主域为但是子域中是test+1个字符的关键词资产,那么FOFA的搜索语句是:
host*="test?.baidu.com"
多个字符,就是添加多个?需要多少就添加多少,比如我需要子域字符为5个的,甚至可以是:
host*="?????.baidu.com"
也可以多次进行模糊搜索,test和.直接模糊匹配,以及后面继续接字符的资产 。
host*="test*.baidu.com.*"
也可以这样搜,我需要所有包含test关键词的域名,不管他在哪个位置,继续变更搜法:
host*="*test*"
当然,这样搜的结果就是范围特别广了,这里只是作为解锁更多搜索方式为大家介绍使用,其实也可以用这样的形式对边缘资产进行搜索 。
2. 聚焦场景演示
我们通过前文已经了解到,他可以解决分词的问题,也了解到了模糊搜索的使用方法 。那我们聚焦一个小场景,为大家展示模糊搜索的使用 。
我们以mysql作为例子:mysql有多个版本存在,先在FOFA上进行搜索:
banner="mysql version"
可以看到近一年有1000多万的数据,这里是搜索了所有的版本的,现在可以使用模糊搜索对于版本进行一个范围区分 。
我们需要5.?.*的所有版本,就可以这样进行搜索:
banner="mysql version" && banner*="5.?.*"
继续缩小范围,我们仅需要版本为5.5.4+类型的数据,那可以这样进行搜索:
banner="mysql version" && banner*="5.5.4*"
通过搜索结果展示,我们成功聚焦到了Mysql :5.5.4*的各种版本,可以继续对目标进行聚焦,方法是一样的 。
3. 更多玩法
SNMP协议有多个版本,我想一次性找全,使用模糊搜索的语法为:
protocol*="snmp*"
突然忘记云服务商的名字,使用模糊搜索,快速找到自己需要的目标:
cloud_name*="Cloud*"
对于已知的搜索结果,模糊搜索端口是四位数的资产 。