FOFA(技巧)是个好东西,真希望人人都有
0x01 前言
本文将介绍FOFA,探讨其在网络安全中的作用。将讨论FOFA的功能、语法和实践,文末包含彩蛋福利。
0x02 FOFA?
FOFA是一款网络空间测绘的搜索引擎,旨在帮助用户以搜索的方式查找公网上的互联网资产。简单的来说就是网络安全中的”谷歌”,不同的是,这些数据不仅包括像谷歌一样的网页,还包括像摄像头、打印机、数据库、操作系统等资产。
网络空间测绘可以被认为是网络空间的“地图”。就像谷歌地图或高德地图通过卫星图像对地形进行测绘,网络空间测绘也是通过技术探针对全球网络资产进行探测。但fofa是基于IP和端口去发现资产,因此有些资产是发现不了的,类似于二级目录下的网页大概率会被收录不了。
0x03 基础语法
基础语法在FOFA官网处,这里全部贴过来做个保留,可以直接跳过这个部分,等到用到的时候再查阅
高级搜索
逻辑连接符 | 具体含义 |
---|---|
= | 匹配,当设置为="" 时,可查询不存在字段或者值为空的情况。 |
== | 完全匹配,当设置为=="" 时,可查询存在且值为空的情况。 |
&& | 与 |
ll | 或 |
!= | 不匹配,当设置为!="" 时,可查询值为空的情况。 |
*= | 模糊匹配,使用* 或者? 进行搜索,比如banner*="mys??" (个人版及以上可用)。 |
() | 确认查询优先级,括号内容优先级最高。 |
关于建站软件的搜索语法请参考:组件列表
基础类(General)
语法 | 例句 | 描述 |
---|---|---|
IP | ip=" 1.1.1.1" ip= " 220.181.111.1/24" ip= " IPv6" |
分别通过单一IPv4地址、IPv4C段、单一IPv6地址进行查询 |
端口 | port=" 6379" |
通过端口号进行查询 |
域名 | domain=" qq.com" |
通过根域名进行查询 |
主机 | host=" .fofa.info" |
通过主机名进行查询 |
操作系统 | os=" centos" |
通过操作系统进行查询 |
服务器 | server=" Microsoft-IIS/10" |
通过服务器进行查询 |
自治系统号 | asn=" 19551" |
通过自治系统号进行搜索 |
组织 | org=" LLCBaxet" |
通过所属组织进行查询 |
是否拥有域名 | is_domain=true is_domain=false |
筛选拥有域名的资产/筛选没有域名的资产 |
是否为IPv6 | is_ipv6=true is_ipv6=false |
筛选是IPv6的资产/筛选是IPv4的资产 |
标记类(SpecialLabel)
语法 | 例句 | 用途说明 |
---|---|---|
app | app=" Microsoft-Exchange" |
通过FOFA整理的规则进行查询 |
fid | fid=" sSXXGNUO2FefBTcCLIT/2Q==" |
通过FOFA聚合的站点指纹进行查询 |
product | product=" NGINX" |
通过FOFA标记的产品名进行查询 |
category | category=" 服务" |
通过FOFA标记的分类进行查询 |
type | type=" service" type= " subdomain" |
筛选协议资产 筛选服务(网站类)资产 |
cloud_name | cloud_name=" Aliyundun" |
通过云服务商进行查询 |
is_cloud | is_cloud=true is_cloud=false |
筛选是云服务的资产 筛选不是云服务的资产 |
is_fraud | is_fraud=true is_fraud=false |
筛选是仿冒垃圾站群的资产 筛选不是仿冒垃圾站群的资产 |
is_honeypot | is_honeypot=true is_honeypot=false |
筛选是蜜罐的资产 筛选不是蜜罐的资产 |
协议类(type=service)
语法 | 例句 | 用途说明 |
---|---|---|
protocol | protocol=" quic" |
通过协议名称进行查询 |
banner | banner=" users" |
通过协议返回信息进行查询 |
base_protocol | base_protocol=" udp" base_protocol= " tcp" |
查询传输层为udp协议的资产 查询传输层为tcp协议的资产 |
网站类(type=subdomain)
语法 | 例句 | 用途说明 |
---|---|---|
title | title=" beijing" |
通过网站标题进行查询 |
header | header=" elastic" |
通过响应标头进行查询 |
header_hash | header_hash=" 1258854265" |
通过http/https响应头计算的hash值进行查询 |
body | body=" 网络空间测绘" |
通过HTML正文进行查询 |
body_hash | body_hash=" -2090962452" |
通过HTML正文计算的hash值进行查询 |
js_name | js_name=" js/jquery.js" |
通过HTML正文包含的JS进行查询 |
js_md5 | js_md5=" 82ac3f14327a8b7ba49baa208d4eaa15" |
通过JS源码进行查询 |
cname | cname=" ap21.inst.siteforce.com" |
通过别名记录进行查询 |
cname_domain | cname_domain=" siteforce.com" |
通过别名记录解析的主域名进行查询 |
icon_hash | icon_hash=" -247388890" |
通过网站图标的hash值进行查询 |
status_code | status_code=" 402" |
筛选服务状态为402的服务(网站)资产 |
icp | icp=" 京ICP证030173号" |
通过HTML正文包含的ICP备案号进行查询 |
sdk_hash | sdk_hash==" Mkb4Ms4R96glv/T6TRzwPWh3UDatBqeF" |
通过网站嵌入的第三方代码计算的hash值进行查询 |
地理位置(Location)
语法 | 例句 | 用途说明 |
---|---|---|
country | country=" CN" country= " 中国" |
通过国家的简称代码或中文名称进行查询 |
region | region=" Zhejiang" region= " 浙江" |
通过省份/地区的英文名称或中文名称进行查询 |
city | city=" Hangzhou" |
通过城市英文名称进行查询 |
证书类
语法 | 例句 | 用途说明 |
---|---|---|
cert | cert=" baidu" |
通过证书进行查询 |
cert.subject | cert.subject=" OracleCorporation" |
通过证书的持有者进行查询 |
cert.issuer | cert.issuer=" DigiCert" |
通过证书的颁发者进行查询 |
cert.subject.org | cert.subject.org=" OracleCorporation" |
通过证书持有者的组织进行查询 |
cert.subject.cn | cert.subject.cn=" baidu.com" |
通过证书持有者的通用名称进行查询 |
cert.issuer.org | cert.issuer.org=" cPanel,Inc." |
通过证书颁发者的组织进行查询 |
cert.issuer.cn | cert.issuer.cn=" SynologyInc.CA" |
通过证书颁发者的通用名称进行查询 |
cert.is_valid | cert.is_valid=true cert.is_valid=false |
筛选证书有效性的资产 |
cert.is_match | cert.is_match=true cert.is_match=false |
筛选证书和域名匹配性的资产 |
cert.is_expired | cert.is_expired=true cert.is_expired=false |
筛选证书过期状态的资产 |
jarm | jarm=" 15af977ce25de452b96affa2addb1036" |
通过JARM指纹进行查询 |
tls.version | tls.version=" TLS1.3" |
通过tls的协议版本进行查询 |
tls.ja3s | tls.ja3s=" 15af977ce25de452b96affa2addb1036" |
通过tls的ja3s指纹进行查询 |
时间类(Lastupdatetime)
语法 | 例句 | 用途说明 |
---|---|---|
after | after=" 2023-01-01" |
筛选某一时间之后有更新的资产 |
before | before=" 2023-12-01" |
筛选某一时间之前有更新的资产 |
after&before | after=" 2023-01-01" &&before=" 2023-12-01" |
筛选某一时间区间有更新的资产 |
独立IP语法
独立IP系列语法,不可和上面其他语法共用
语法 | 例句 | 用途说明 |
---|---|---|
port_size | port_size=" 6" |
筛选开放端口数量等于6个的独立IP |
port_size_gt | port_size_gt=" 6" |
筛选开放端口数量大于6个的独立IP |
port_size_lt | port_size_lt=" 12" |
筛选开放端口数量小于12个的独立IP |
ip_ports | ip_ports=" 80,161" |
筛选同时开放不同端口的独立IP |
ip_country | ip_country=" CN" |
通过国家的简称代码进行查询独立IP |
ip_region | ip_region=" Zhejiang" |
通过省份/地区英文名称进行查询独立IP |
ip_city | ip_city=" Hangzhou" |
通过城市英文名称进行查询独立IP |
ip_after | ip_after=" 2021-03-18" |
筛选某一时间之后有更新的独立IP |
ip_before | ip_before=" 2019-09-09" |
筛选某一时间之前有更新的独立IP |
0x04 奇淫技巧
划重点,这里结合实战经验介绍一下常用的FOFA用法
批量发现资产
在平时的漏洞挖掘中,若发现漏洞,都可以尝试通过FOFA搜索,因为这个模板很有可能是一些通用的建站模板,这里举一个之前挖的EDUsrc案例,开局是一个APP如图,还有一个注册功能,图片没体现出来:
注册后,来到个人中心,绕过ssl pinning后抓包,修改UserId
参数越权遍历出全系统用户信息,泄露身份证,手机号等,至此高危到手:
通过数据包获取到了域名为:target.com
,直接访问到了一个APP的下载页面:
F12查看网页特征,直接FOFA搜索网页特征body="为全体师生提供咨询、生活....综合服务"
,这个地方要根据实际的情况选择语法进行搜索,比如搜索特别的js名称,favicon.ico
等,最终通过FOFA搜到资产,刷到了60+Rank分
说明一下,下载的第一个APP有注册功能,有的相同APP但没有注册功能,在刷分过程中遇到这种情况怎么办,:
- 1、开发者删除了前端页面的注册功能,但是通过其他APP的注册页面获取到数据包,替换域名请求也是能够直接注册的。
- 2、跳过注册,直接替换越权数据包中的域名,如果目标APP开发者对认证信息使用弱校验,凭证通用也是能够验证通过的。
- 3、通过信息收集去获取帐号。
关于这个打法,企业src也是适用的,若你在A网站发现了未授权漏洞,你通过FOFA规则搜索出来的资产也大概率是存在未授权漏洞的,这个时候就能赏金乘n了。
发现脆弱资产
这是某次运营商众测,通过FOFA搜索目标网站的favicon
图标,即:icon_hash="1471194169"
,逐个点击通过Burpsuite的插件被动扫描成功捡漏BurpShiroPassiveScan,使用ShiroAttack2命令执行:
后面发现打偏了,只能CNVD+1了:
找福利
通过FOFA找福利网站,这里以ChatGPT为例,由于需要魔法上网才能使用,所以很多人选择搭建一些第三方的ChatGPT平台,比如这个项目:
chatgpt-web
通过FOFA语法找到网站特征:
GET到类似网站fid="qRHEiUKnaLogboLxIe3H1w=="
:
实际应用中,是需要花点心思构造网站特征,语法越详细搜索到资产越符合要求。
其他操作
除了这些操作,还可以利用fofa:
- 找DVWA靶场:
title="DVWA"
- SQLi-LABS靶场:
title="SQL Injections"
- 看看黑客们都用啥工具:
body="Directory listing for /" && body="dirsearch"
,这里工具可以替换为BurpSuite等 - 阿里云key:
body="AccessKeyId" && body="AccessKeySecret" && body="Expiration"
0x05 彩蛋放送
彩蛋一
最近搭建了一个FOFA在线查询WEB版本,可以供一些没有开通FOFA会员的师傅使用,当然还是建议有条件的师傅去官网开通会员支持华顺信安:
关注公众号回复:FOFA,即可获取,限前50位师傅哈
彩蛋二
活动内容:用FOFA找到博客真实IP
活动网址:sanshiok.com
奖励内容:前三位师傅分别奖励💰33,22,11现金红包奖励
参与方式:直接将你找到的真实IP发送给公众号,每位师傅只能回答一次,要三思噢
免责声明
免责声明:本博客的内容仅供合法、正当、健康的用途,切勿将其用于违反法律法规的行为。如因此导致任何法律责任或纠纷,本博客概不负责。谢谢您的理解与配合!