写在前面
在一个本该愉快休息的周末,好奇的我拿起FOFA就是一阵乱搜(其实是雨太大了,没法出去溜达),突然间看到FOFA的一条规则搜索出来的对象其实并不在该规则里面。这时,我的好奇心就按耐不住了,找到FOFA的Boss就是一通咨询,Boss十分热情的帮我找到了FOFA的表姐,表姐细心的答疑解开了我心中的疑惑。
可能是用的搜索姿势比较新奇,表姐说交几个自定义的规则或者一篇文章就有大礼包赠送,这可就难倒我了,问问题我会,让我写文章这可就难倒我了,但是一想到Boss的热情和表姐的耐心细致(还有渴望大礼包而止不住的口水),决定水这么一篇文章。
| 0x01 如何快速入门FOFA |
FOFA作为全球知名的网络空间测绘引擎,其网络空间测绘的广度、深度和准度已经国内领先、世界前列,要不怎么会有FOFA工程师这一新兴职业呢。快速入门FOFA其实是一件很简单的事。
| 1. 学习FOFA查询语法
学习FOFA的使用和学习编程类似,学习编程语言首先输出`Hello world`,然后学习语言的基本语法,会了基本语法就可以将该语言当作工具进行使用,使用FOFA也是如此。打开FOFA的搜索界面,在搜索框下面就是FOFA的查询语法:
点开“查询语法“,就可以详细的看到FOFA的查询语法(官方使用说明最为靠谱),了解基本的查询语法后,用语法在FOFA里面搜一遍,就能对FOFA的查询语法有更深的理解和认识。
| 2. 学习别人怎么用FOFA
三人行必有我师焉,我们可以学习其他FOFA大佬的使用姿势(你不会,可是别人会呀,学一学,别人会的你也会了;你把你会的分享出去了,会的人就更多了,这不是内卷,这是共同进步)
在之前的FOFA版本中,其实有”今日热点搜索“的功能:
但是新版的FOFA已经取消了这个功能,为什么呢?还不是有的大佬太强,搜索姿势很新奇,搜出来的数据太敏感(这就少了一个学习的途径了)
表姐碎碎念:旧版本网站已经弃用,不再维护了,所以产品功能和体验都不及新版本,望大家谨慎选择哦。
今日热点搜索没有了,但是nosec的漏洞预警模块里面有FOFA搜索示例(官方出品,必属精品)。以”Weblogic 多个远程代码执行漏洞”为例,通告里面就有Weblogic的搜索方式
掏出小本本一记,下次就会搜Weblogic喽。
官方出品外,其他大佬的新奇姿势也值得用心学习,主要来源于大佬们的复现文章、文库等。以PeiQi大佬的文库为例,PeiQi大佬就展现了他扎实的FOFA功底,学习大佬的文库时,顺便观摩下大佬的FOFA姿势。
| 3. 关注FOFA的新功能
FOFA处于不断的迭代升级中,新的功能既能体现白帽汇公司的核心能力,也方便用户的使用。例如今年更新的**蜜罐识别与过滤功能、证书特定字段提取/有效性验证、支持搜索网站ICP备案号**三大功能,既能为hvv提供良好支撑,也能帮助用户简化搜索难度,比如蜜罐识别与过滤功能(高级会员以上才可以用,论拥有高级会员的极端重要性)就可以排除无用数据,避免掉坑。关注FOFA的新功能,总能快人一步解锁更多搜索新姿势。
表姐碎碎念:FOFA在前两年并未有大的更新,在今年进行架构升级后,还增加了N多新功能,只要大家用的舒适,我们就值得!(不是内卷,被认可是真开心)
| 0x02 FOFA使用小进阶 |
| 1. 高级搜索突破API限制
FOFA提供搜索数据的功能外,也为用户提供数据获取的接口:使用F币下载和API数据获取。对于使用F币下载而言,F币需要自己充值(貌似不便宜),F币只能整个使用(10,000条结果 = 1F币,6666条结果也要1F币),F币下载的数据包含的内容比较少。此时FOFA的API就可以解决以上这些痛点(为啥痛,因为以前没关注API,掏钱充F币下载数据,花了好多银子)。
使用FOFA的API,用到最多的就是“认证”和“查询接口”(“获取IP标签接口”功能很强,但是只能企业用哇)。“认证”主要验证FOFA用户,填入FOFA注册时的 email 和个人中心的API KEY
查询接口以qbase64的格式请求数据,然后返回json格式的数据,用户可以根据需求选择请求的参数,返回数据为json格式也方便用户进行数据抽取
FOFA的这种数据获取方式极为简单,按照数据获取的格式,可以方便的使用python、java、c#等实现搜索,再配合数据提取和可视化界面,就可以实现一个功能强大的FOFA搜索工具(其他的搜索引擎,要么只能用python实现;要么研究它的python API实现,自己再用其他语言实现搜索,毕竟python打包的exe体积巨大)。
说完FOFA的API,再来谈谈FOFA的数据获取权限,不同级别的用户一次使用API获取的数据也是不同的
对于高级会员而言,一次10000条足够获取相当多的数据,而注册用户需要花费1F币才可以。以高级会员为例,一次性获取的数据超过了10000条,多余部分的数据就会花费F币,此时可以使用高级搜索进行数据拆分。
在谈使用高级语法进行数据拆分之前,先了解下FOFA的高级搜索:可以使用 () , && , || , != 和 == 等符号,如:
title="powered by" && title!="discuz"body="content=WordPress" || (header="X-Pingback" && header="/xm lrpc.php" && body="/wp-includes/") && host="gov.cn"
使用高级搜素配合基础的查询语法可以在搜索时进行数据的筛选和过滤,目前FOFA的搜索框没有长度限制,只要你需求足够大,FOFA就能满足你的需求。
接下来以一个例子实现使用高级搜索进行数据拆分。以
title="Wireless Router" && country="CN"
为例,可以看到有161,984条匹配结果
此时可以再使用`&®ion`的方式进行区域拆分
title="Wireless Router" && country="CN" && region!="TW" && region!="HK" && region!="MO"
可以获取只含大陆地区的数据,共113,977条匹配结果
然后,根据搜索结果中的端口进行拆分,分为:
title="Wireless Router" && country="CN" && region!="TW" && region!="HK" && region!="MO" && port="8443"
和
title="Wireless Router" && country="CN" && region!="TW" && region!="HK" && region!="MO" && port!="8443"
两个部分。此时port!="8443"这一块获取的数据已经减少到14,241条匹配结果,再利用时间进行拆分,分为2021年以后的数据:
title="Wireless Router" && country="CN" && region!="TW" && region!="HK" && region!="MO" && port!="8443" && after="2021-01-01"
和2020年到2021年的数据:
title="Wireless Router" && country="CN" && region!="TW" && region!="HK" && region!="MO" && port!="8443" && after="2020-01-01" && before="2020-12-31"
利用高级搜出配合基础查询语法进行数据的不断拆分,就可以实现查询一次的数据量控制在10,000条以下,而后使用FOFA的API只需循环一下,就可以获取数据量远远超于10,000条的所有数据。
| 2. 换个姿势实现icon搜索
FOFA搜索icon,可以通过上传图片或者搜索图片的hash。icon搜索功能需要会员权限,且上传icon不一定能搜的到(不符合格式的搜不到,图片较大的logo也搜不到),可以换一个姿势实现icon搜索。
以下面的这个交换机设备为例
查看网页源码,可以看到login10.png,即
但是,将该图片上传,使用FOFA的icon功能,搜索不出结果
换个思路,这个login10.png在html页面中通过src调用
可以通过在body中匹配类似的图片引用路径,加上页面的其他特征,就可以通过图片搜索同类设备,如下:
body="src=/login10.png" && body="dispatcher.cgi"
| 3. 使用FOFA挖掘弱口令
弱口令大法好,但是不是所有的弱口令都需要去猜解,人性的弱点不仅仅体现在密码设置中,也可能存在网页源码中嘛。
在前端登录界面的密码框中,一般采用如下的格式:
<input type="password" id="password" name="password"/>
要是密码框里面的value值存在且不为空呢?如:
<input type=password name=pwd value='654321' maxlength=16 size=10>
此时,就可以利用FOFA查看密码为654321的一些对象了:
然后,就可以远程关门(激不激动?)
因为密码框里面的格式比较多样,value的值也多样(弱口令那么多类型),通过变换不同的密码框内容,就可以挖掘不同的弱口令,不知道大家学废了么(即使有弱口令,未授权的事别做,未授权的事别做,未授权的事别做,重要的事情说三遍)
| 4. 使用FOFA发现文件上传接口
在前端进行文件上传时,Form表单需要设置
<form action="****" method="post" enctype="multipart/form-data">
文件选择时,input
标签的格式为:
<input type="file" name="****" />
结合这两个特性,就可以使用FOFA发现页面的文件上传接口,如:
body="method=\"post\" enctype=\"multipart/form-data\"" && body="<input type=\"file\""
就可以通过FOFA搜索出大量的可进行文件上传的接口
随便选择其中一个打开,可以进行文件的上传
大家传个文件试一试?
表姐碎碎念:快看看上面重复3遍的提示
| 0x03 FOFA规则自定义 |
表姐对我说,FOFA的核心能力在于产品识别,而产品识别依赖于FOFA定义的规则。FOFA内置了丰富的规则(app指纹),如何查看FOFA已经实现了的规则和自定义规则呢?
| 1. 查看FOFA的规则
首先,可以在FOFA的“规则列表”和“规则专题”里面查看。规则专题中包含“数据库专题”、“工控专题”和“区块链专题”
规则列表里面是FOFA已经实现了的规则,可以搜索相应的规则名称
可以左右选择类型
也可以点击“查看更多”,获取当前规则类型下的更多规则
其次,可以在FOFA的搜索框中输入关键词,FOFA会列出已经有的规则
| 2.自定义FOFA规则
FOFA面向用户开放了自定义规则,点击用户图像,可以看到“我的规则”,添加规则后,自己定义的规则可以自己使用(这一点贼方便);FOFA后台通过自定义的规则审核后,不用登录就能直接使用规则名称,也就是其他人可以直接使用你定义的规则(表姐说FOFA规则审核贼严,事实证明确实比较严格)。
在“我的规则”里面,点击“添加规则”按钮,就可以开启自定义规则之路,比较重要的内容,都已经重点给标记出来了。
下面,介绍下怎么定义自己的规则。使用FOFA的一个方式就是先粗略再准确,先输入粗略的搜索内容,如下:
此时可以看到title中比较多的是“交换机集中管理系统”,调整搜索的语句为:
title=="交换机集中管理系统"
此时就将搜索的范围进一步缩小(=是直接匹配关键词,没有使用分词;而==则是完全匹配)
但是通过
title=="交换机集中管理系统
搜索出来的对象可能是不同公司的产品。此时如果页面有信息,就可以根据页面的信息确定产品对应的公司,进而使得自定义的规则更加精准。如“交换机集中管理系统”,可能是维盟科技的
也可能是文网亿联科技的
这种页面中包含的信息比较多的,可以直接用页面中的信息来区分不同的公司。如使用
title=="交换机集中管理系统" && body="北京文网亿联科技有限公司"
此时搜索出来就都是文网亿联的交换机集中管理系统(搜索语法中设定的条件越多,搜索应该越准确)。而后,就可以返回到“我的规则”里面,添加自己的规则
规则加了,自己就可以直接用了;至于审核过不过,得看FOFA后台的表哥们有没有时间(表姐说审核通过有奖励,貌似又多了一个FOFA规则师的职业)在页面中看不到产品信息的时候,就需要自己抓包,人工爬虫看看有没有对应的信息(ps:提示一下,FOFA已经在做爬虫功能了,大家可以催促一波,毕竟有压力才有动力,有需求才有方向),如搜索:
title="Wi-Fi Web管理"
随便选择一个打开,发现页面没有任何的信息,也不能查看源码
此时通过BrupSuite抓取数据,再请求
/cgi-bin/login/login.html
看到厂商的信息
如果FOFA上线了爬虫的功能,自定义规则应该会更加的方便。但是对于在页面中看不到任何信息、抓包看不到独有的信息、即使登录以后里面也没有更多信息的产品,无能为力(只能猛男落泪)。
自定义规则后,可修改、可删除,要是再有审核进度就更加完美了
| 0x03 修改FOFA的规则 |
如果觉得自定义FOFA规则不过瘾,那么就来修改FOFA的规则。FOFA的规则那么多,虽然已经做的很好了,但是鸡蛋里面挑骨头,还是可以试一试的。以搜索
app="Ruijie-RG-UAC"
为例,该app对应的应该是:RG-UAC锐捷统一上网行为管理与审计系统,此时搜索的结果为:
通过一键排除蜜罐的功能,可以先排除一波蜜罐的信息
此时在在“网站标题排名处”,可以看到
搜索出来的结果是有除锐捷以外其他厂商的产品。而锐捷统一上网行为管理与审计系统的信息,其实在锐捷产品页面中包含的有
通过查看源码:
根据已有的信息,使用
body="锐捷统一上网行为管理与审计系统"
和使用
(body="锐捷统一上网行为管理与审计系统") && (is_honeypot=false && is_fraud=false)
搜索出来的结果为:
该搜索语句直接排除掉了蜜罐,但是结果比使用
(app="Ruijie-RG-UAC") && (is_honeypot=false && is_fraud=false)
要少一些,可以更进一步,缩小区域,更精准的进行比对。如将区域缩小到Shaanxi
app="Ruijie-RG-UAC" && country="CN" && region="Shaanxi"
的结果为:
body="锐捷统一上网行为管理与审计系统" && country="CN" && region="Shaanxi"
的结果为:
app="Ruijie-RG-UAC" && country="CN" && region="Shaanxi"`比`body="锐捷统一上网行为管理与审计系统" && country="CN" && region="Shaanxi"
多一个搜索的结果,但是多的这一个是锐捷的RG-ACE流控引擎。
因此使用`
body="锐捷统一上网行为管理与审计系统"
来作为Ruijie-RG-UAC规则的规则内容更加合适。
这只是通过比对分析,修改
app="Ruijie-RG-UAC"
规则的一种方式,只要是修改后规则内容更加准确,修改就是有效的。
| 后记 |
我说我很水,表姐说她不信,这篇水文用了我大半天的功夫才完成,既要写文字,还得截图,善良的我还默默的排了排版。FOFA的老板很认真,有问题必有反馈,FOFA表姐也很耐心细致,而且FOFA的高级会员白嫖活动白嫖一波会员很香,提问题还有礼包拿那就更让人心动啦。
言归正传,好的产品厂商需要用心,对于用户的反馈需要聆听,这一点不论是FOFA还是GoBy做的都很好;作为用户而言,反馈自己使用产品中的问题,既能解决心中的疑惑,也可以促进产品的优化和升级。
扎实做技术和产品的公司,值得用户信赖,白帽汇就是这样的公司。
表姐碎碎念:白帽汇的服务价值观“用户至上”,FOFA团队一直在践行这个理念,再次感谢大佬对我们的认可。另外:白嫖会员的活动已经结束咯~见上篇FOFA文章