网络探测指对计算机网络或 DNS 服务器进行扫描,获取有效的地址、活动端口号、主机操作系统类型和安全弱点的攻击方式。
0×01 前言
什么是网络探测
网络探测指对计算机网络或 DNS 服务器进行扫描,获取有效的地址、活动端口号、主机操作系统类型和安全弱点的攻击方式。
0×02 网络探测技术分类
网络环境信息包括网络拓扑结构、主机、主机开放的网络服务以及存在的漏洞等,对网络环境信息的获取工具可以按照其是否对目标发起主动的探测分为两大类:主动探测与被动探测。
主动探测是传统的扫描方式,它是通过给目标主机发送特定的包并收集回应包来取得相关信息的,从而确定其操作系统、开启的端口以及存在的漏洞等信息(无响应本身也是信息,表明可能存在过滤设备将探测包或探测回应包过滤了)。属于此类的开源工具有 nmap 和 nessus。主动扫描的优势在于通常能较快获取信息,准确性也比较高。缺点在于一方面易于被发现,很难掩盖扫描痕迹;另一方面要成功实施主动扫描通常需要突破防火墙,但突破防火墙是很困难的。
被动探测是通过监听网络包来取得信息。根据数据包中包含的指纹提取对应的一些网络环境信息,属于此类的开源工具有 p0f(被动操作系统辨识工具)和 pads(被动网络服务发现工具)。被动扫描一般只需要监听网络流量而不需要主动发送网络包,也不易受防火墙影响。该探测技术的主要优点是对它的检测几乎是不可能的。而其主要缺点在于速度较慢而且准确性较差,当目标不产生网络流量时,就无法得知目标的任何信息。
0×03 FOFA 网络空间探测引擎
1 概述
FOFA 是白帽汇推出的一款网络空间资产搜索引擎。 它能够帮助企业客户迅速进行网络资产匹配、加快后续工作进程。 例如进行漏洞影响范围分析、应用分布统计、应用流行度排名统计等。
2 查询语法
直接输入查询语句,将从标题,html 内容,http 头信息,url 字段中搜索
- title=”abc” 从标题中搜索 abc。
例:标题中有北京的网站 - header=”abc” 从 http 头中搜索 abc。
例:jboss 服务器 - body=”abc” 从 html 正文中搜索 abc。
例:正文包含 Hacked by - domain=”qq.com” 搜索根域名带有 qq.com 的网站。
例: 根域名是 qq.com 的网站 - host=”.gov.cn” 从 url 中搜索.gov.cn,注意搜索要用 host 作为名称。例: 政府网站, 教育网站
- port=”443” 查找对应 443 端口的资产。
例: 查找对应 443 端口的资产 - ip=”1.1.1.1” 从 ip 中搜索包含 1.1.1.1 的网站,注意搜索要用 ip 作为名称。
例: 查询 IP 为 220.181.111.1 的网站; 如果想要查询网段,可以是:ip=”220.181.111.1/24”,例如查询 IP 为 220.181.111.1 的 C 网段资产 - protocol=”https” 搜索指定协议类型(在开启端口扫描的情况下有效)。
例: 查询 https 协议资产 - city=”Hangzhou” 搜索指定城市的资产。
例: 搜索指定城市的资产 - region=”Zhejiang” 搜索指定行政区的资产。
例: 搜索指定行政区的资产 - country=”CN” 搜索指定国家(编码)的资产。
例: 搜索指定国家(编码)的资产 - cert=”google” 搜索证书(https 或者 imaps 等)中带有 google 的资产。
例: 搜索证书(https 或者 imaps 等)中带有 google 的资产 - banner=users && protocol=ftp 搜索 FTP 协议中带有 users 文本的资产。
例: 搜索 FTP 协议中带有 users 文本的资产 - type=service 搜索所有协议资产,支持 subdomain 和 service 两种。例: 搜索所有协议资产
- os=windows 搜索 Windows 资产。
例: 搜索 Windows 资产 - server==”Microsoft-IIS/7.5” 搜索 IIS 7.5 服务器。
例: 搜索 IIS 7.5 服务器 - app=”海康威视-视频监控” 搜索海康威视设备,更多 app 规则。例: 搜索海康威视设备
- after=”2017” && before=”2017-10-01” 时间范围段搜索。例: 时间范围段搜索,注意: after 是大于并且等于,before 是小于,这里 after=”2017” 就是日期大于并且等于 2017-01-01 的数据,而 before=”2017-10-01” 则是小于 2017-10-01 的数据
- asn=”19551” 搜索指定 asn 的资产。
例: 搜索指定 asn 的资产 - org=”Amazon.com, Inc.” 搜索指定 org(组织)的资产。
例: 搜索指定 org(组织)的资产 - base_protocol=”udp” 搜索指定 udp 协议的资产。
例: 搜索指定 udp 协议的资产 - is_ipv6=true 搜索 ipv6 的资产,只接受 true 和 false。
例: 搜索 ipv6 的资产 - is_domain=true 搜索域名的资产,只接受 true 和 false。
例: 搜索域名的资产 - ip_ports=”80,443” 或者 ports=”80,443” 搜索同时开放 80 和 443 端口的 ip 资产(以 ip 为单位的资产数据)。
例: 搜索同时开放 80 和 443 端口的 ip - ip_ports==”80,443” 或者 ports==”80,443” 搜索同时开放 80 和 443 端口的 ip 资产(以 ip 为单位的资产数据)。
例: 搜索只开放 80 和 443 端口的 ip - ip_country=”CN” 搜索中国的 ip 资产(以 ip 为单位的资产数据)。例: 搜索中国的 ip 资产
- ip_region=”Zhejiang” 搜索指定行政区的 ip 资产(以 ip 为单位的资产数据)。
例: 搜索指定行政区的资产 - ip_city=”Hangzhou” 搜索指定城市的 ip 资产(以 ip 为单位的资产数据)。
例: 搜索指定城市的资产 - ip_after=”2019-01-01” 搜索 2019-01-01 以后的 ip 资产(以 ip 为单位的资产数据)。
例: 搜索 2019-01-01 以后的 ip 资产 - ip_before=”2019-01-01” 搜索 2019-01-01 以前的 ip 资产(以 ip 为单位的资产数据)。
例: 搜索 2019-01-01 以前的 ip 资产
高级搜索:
可以使用括号 和 && || !=等符号,如
title=”powered by” && title!=discuz
title!=”powered by” && body=discuz
( body=”content=”WordPress” || (header=”X-Pingback” && header=”/xmlrpc.php” && body=”/wp-includes/“) ) && host=”gov.cn”
新增完全匹配的符号,可以加快搜索速度,
比如查找 qq.com 所有 host,可以是 domain”qq.com”
3 API 调用
查询接口
输入下列请求所需的 qbase64,返回 json 数据格式
字段名 | 类型 | 内容 |
---|---|---|
qbase64 | string | 经过 base64 编码后的查询语法,支持 domain,host,ip,header,body,title,运算符支持== = != =~ |
page | integer | 每页返回记录数,普通用户默认为 10000 条,vip 用户默认为 100 条,最大可设置为 10000 条 |
size | integer | 每页返回记录数,普通用户默认为 10000 条,vip 用户默认为 100 条,最大可设置为 10000 条 |
fields | string | 【可选参数】字段列表,默认为 host,用逗号分隔多个参数,如(fields=ip,title),可选的列表有:host title ip domain port country province city country_name header server protocol banner cert isp as_number as_organization latitude longitude lastupdatetime 注意:country 是国家代码,例如 CN, country_name 是国家名称 |
full | boolean | 默认为 false,是否搜索全部数据,默认和页面搜索一样,只能搜索一年内的数据,指定为 true 搜索全部数据 |
接口返回
字段名 | 类型 | 内容 |
---|---|---|
mode | string | 查询模式:mode 返回为”normal”代表普通查询(q=words),mode 返回为”extended”代表高级查询(如 q=domain=fofa.so,q=title=fofa,采用高级条件搜索) |
page | integer | 当前请求页的页数 |
size | integer | 请求返回结果的个数 |
results | array | 请求返回结果的详情数组 |
返回示例
1 | # 正确返回结果 |
1 | #错误返回 |
4 代码实现
0×04 SHODAN 搜索引擎
1 概述
Shodan 是一个搜索互联网连接设备的搜索引擎,不同于谷歌、必应、百度这些搜索引擎。用户可以在 Shodan 上使用 Shodan 搜索语法查找连接到互联网的摄像头、路由器、服务器等设备信息。在渗透测试中,是个很不错的神器。
2 查询语法
字段 | 解释 | 例子 |
---|---|---|
hostname | 搜索指定的主机或域名 | hostname:”sina.com” |
port | 搜索指定的端口 | port:”80” |
country | 搜索指定的国家 | country:”China” |
city | 搜索指定的城市 | city:”Beijing” |
product | 搜索指定的操作系统/软件 | product:”apache” |
version | 搜索指定的软件版本 | version:”7.1.4” |
net | 搜索指定的 IP 地址或子网 | net:”117.44.67.0/24” |
3 API 调用
HTTPS ://api.shodan.io/shodan/host/search?key={YOUR_API_KEY}&query={query}&facets={facets}
key
注册账号,获得 API Key
query
Shodan 搜索查询。
所提供的字符串用于搜索 Shodan 中的标语数据库,并带有附加选项以使用“ filter:value”格式在搜索查询中提供过滤器。
例如,以下搜索查询将找到位于德国的 Apache Web 服务器:”apache country:DE”。
当前支持以下过滤器:
facets
用逗号分隔的属性列表,以获取摘要信息。属性名称也可以采用”property:count”的格式,其中”count”是将为属性返回的构面数(即”country:100”将获得搜索查询的前 100 个国家/地区)。当前支持以下方面:
返回例子
1 |
|
4 代码调用
常用 Shodan 库函数
- shodan.Shodan(key) :初始化连接 API
- Shodan.count(query, facets=None):返回查询结果数量
- Shodan.host(ip, history=False):返回一个 IP 的详细信息
- Shodan.ports():返回 Shodan 可查询的端口号
- Shodan.protocols():返回 Shodan 可查询的协议
- Shodan.services():返回 Shodan 可查询的服务
- Shodan.queries(page=1, sort=’timestamp’, order=’desc’):查询其他用户分享的查询规则
- Shodan.scan(ips, force=False):使用 Shodan 进行扫描,ips 可以为字符或字典类型
- Shodan.search(query, page=1, limit=None, offset=None, ufacets=None, minify=True):查询 Shodan 数据
0×04 ZOOMEYE 搜索引擎
1 概述
ZoomEye 平台为广大网络研究爱好者和极客们提供了强大的 Restful API,通过它能够更好的与平台相连接,使用 ZoomEye 平台提供的资源, 构建有意思的应用。 所以尽情发挥你的想象力吧,精彩的网络空间,等待你去探索。
2 查询语法
https://api.zoomeye.org/{}/search?query={}&page={}&facet={}“
名称 | 类型 | 说明 | 是否必须 | 示例 |
---|---|---|---|---|
query | string | 查询关键词 | 必须 | port:80 nginx |
page | integer | 翻页参数(默认为 1) | 可选 | 7 |
facets | string | 统计项目。如果为多个,使用逗号分隔各个统计项 | 可选 | app,device |
3 API 调用
主机设备搜索过滤器
名称 | 类型 | 说明 | 示例 |
---|---|---|---|
app | string | 应用,产品 | app: ProFTD |
ver | string | 版本 | ver:2.1 |
device | string | 设备类型 | device:router |
os | string | 操作系统 | os:windows |
service | string | 服务类型 | service:http |
ip | string | IP 地址 | ip:192.168.1.1 |
cidr | string | CIDR 格式地址 | cidr:192.168.1.1/24 |
hostname | string | 主机名称 | hostname:google.com |
port | string | 端口号 | port:80 |
city | string | 城市名称 | city:beijing |
country | string | 国家名称 | country:china |
asn | string | ASN 号码 | asn:8978 |
Web 应用搜索过滤器
名称 | 类型 | 说明 | 示例 |
---|---|---|---|
app | string | Web 应用信息 | webapp:wordpres |
header | string | HTTP headers | header:server |
keywords | string | meta 属性关键词 | keywords:baidu.com |
desc | string | HTTP description 属性 | desc:hello |
title | string | HTTP Title 标题信息 | title: baidu |
ip | string | IP 地址 | ip:192.168.1.1 |
site | string | site 搜索 | site:baidu.com |
city | string | 城市名称 | city:beijing |
country | string | 国家名称 | country:china |
返回值
名称 | 类型 | 说明 |
---|---|---|
matches | string | 结果集 |
facets | string | 统计结果 |
total | string | 结果总数 |
响应示例
1 |
|
HOST 固定属性
WEB 固定属性
4 代码调用
0×05 探测资产对比
字段 | 说明 | zoomeye | fofa | shodan |
---|---|---|---|---|
ip | IP 地址 | ip | ip | ip_str |
asn | ASN 号 | geoinfo.asn | as_number | asn |
city | 城市 | geoinfo.city | city | location.city |
province | 省 | province | ||
country_code | 国家码 | geoinfo.country.code | country | location.country_code |
country | 国家名 | geoinfo.country.name | country_name | location.country_name |
continent_code | 洲际码 | geoinfo.continent.code | ||
continent_name | 洲际名 | geoinfo.continent.name | ||
latitude | 纬度 | geoinfo.location.latitude | latitude | location.latitude |
longitude | 经度 | geoinfo.location.longitude | longitude | location.longitude |
port | 端口号 | port | port | port |
banner | 端口指纹信息 | banner | banner | data |
server | 产品名称 | portinfo.app | server | product |
hostname | 主机名 | portinfo.hostname | host | hostnames |
os | 操作系统名称 | portinfo.os | os | |
version | 产品,应用版本信息 | portinfo.version | ||
info | 额外信息 | portinfo.info | ||
device | 设备类型 | portinfo.device | tags | |
title | 标题 | title | ||
domain | 域名 | domain | domains | |
header | http 头 | header | ||
protocol | 协议 | protocol | transport | |
cert | 证书 | cert | ||
isp | 互联网供应商 | isp | isp | |
lastupdatetime | 最后更新时间 | lastupdatetime | timestamp | |
org | 组织 | as_organization | org | |
组织代码 | as_number |