黑暗世界的搜索引擎
什么是 Shodan?
首先,Shodan 是一个搜索引擎,但它与 Google 这种搜索网址的搜索引擎不同,Shodan 是用来搜索网络空间中在线设备的,你可以通过 Shodan 搜索指定的设备,或者搜索特定类型的设备,其中 Shodan 上最受欢迎的搜索内容是:webcam,linksys,cisco,netgear,SCADA等等。
那么 Shodan 是怎么工作的呢?Shodan 通过扫描全网设备并抓取解析各个设备返回的 banner 信息,通过了解这些信息 Shodan 就能得知网络中哪一种 Web 服务器是最受欢迎的,或是网络中到底存在多少可匿名登录的 FTP 服务器。(现在也可以看到shodan也加入了新工具)
基本用法
这里就像是用 Google 一样,在主页的搜索框中输入想要搜索的内容即可,例如下面我搜索 “SSH”:
上图的搜索结果包含两个部分,左侧是大量的汇总数据包括:
- Results map – 搜索结果展示地图
- Top services (Ports) – 使用最多的服务/端口
- Top organizations (ISPs) – 使用最多的组织/ISP
- Top operating systems – 使用最多的操作系统
- Top products (Software name) – 使用最多的产品/软件名称
随后,在中间的主页面我们可以看到包含如下的搜索结果:
- IP 地址
- 主机名
- ISP
- 该条目的收录收录时间
- 该主机位于的国家
- Banner 信息
想要了解每个条目的具体信息,只需要点击每个条目下方的 details 按钮即可。此时,URL 会变成这种格式 https://www.shodan.io/host/[IP]
,所以我们也可以通过直接访问指定的 IP 来查看详细信息。
上图中我们可以从顶部在地图中看到主机的物理地址,从左侧了解到主机的相关信息,右侧则包含目标主机的端口列表及其详细信息。
使用搜索过滤
如果像前面单纯只使用关键字直接进行搜索,搜索结果可能不尽人意,那么此时我们就需要使用一些特定的命令对搜索结果进行过滤,常见用的过滤命令如下所示:
-
hostname
:搜索指定的主机或域名,例如hostname:"google"
-
port
:搜索指定的端口或服务,例如port:"21"
-
country
:搜索指定的国家,例如country:"CN"
-
city
:搜索指定的城市,例如city:"Hefei"
-
org
:搜索指定的组织或公司,例如org:"google"
-
isp
:搜索指定的ISP供应商,例如isp:"China Telecom"
-
product
:搜索指定的操作系统/软件/平台,例如product:"Apache httpd"
-
version
:搜索指定的软件版本,例如version:"1.6.2"
-
geo
:搜索指定的地理位置,参数为经纬度,例如geo:"31.8639, 117.2808"
-
before/after
:搜索指定收录时间前后的数据,格式为dd-mm-yy,例如before:"11-11-15"
-
net
:搜索指定的IP地址或子网,例如net:"210.45.240.0/24"
搜索实例
查找位于合肥的 Apache 服务器:
apache city:"Hefei"
查找位于国内的 Nginx 服务器:
nginx country:"CN"
查找 GWS(Google Web Server) 服务器:
"Server: gws" hostname:"google"
查找指定网段的华为设备:
huawei net:"61.191.146.0/24"
如上通过在基本关键字后增加指定的过滤关键字,能快速的帮助发现我们感兴趣的内容。当然,还有更快速更有意思的方法,那就是点击 Shodan 搜索栏右侧的 “Explore” 按钮,就会得到很多别人分享的搜索语法,你问我别人分享的语法有什么好玩的?那咱们就随便来看看吧:
咱们随便选取一个名为“NetSureveillance Web”的用户分享语法,从下面的描述信息我们基本就能得知这就是一个弱密码的漏洞,为了方便测试让我们把语法在增加一个国家的过滤信息,最终语法如下:
Server: uc-httpd 1.0.0 200 OK Country:"CN"
现在让我们随便选取一个页面进去输入,使用admin账号和空密码就能顺利进入了:)
其他功能
Shodan 不仅可以查找网络设备,它还具有其他相当不错的功能。
Exploits:每次查询完后,点击页面上的 “Exploits” 按钮,Shodan 就会帮我们查找针对不同平台、不同类型可利用的 exploits。当然也可以通过直接访问网址来自行搜索:https://exploits.shodan.io/welcome;
地图:每次查询完后,点击页面上的 “Maps” 按钮,Shodan 会将查询结果可视化的展示在地图当中;
报表:每次查询完后,点击页面上的 “Create Report” 按钮,Shodan 就会帮我们生成一份精美的报表,这是天天要写文档兄弟的一大好帮手啊;
命令行下使用 Shodan
Shodan
是由官方提供的 Python 库的,项目位于:https://github.com/achillean/shodan-python
安装
pip install shodan
或者
git clone https://github.com/achillean/shodan-python.git && cd shodan-python
python setup.py install
安装完后我们先看下帮助信息:
➜ ~ shodan -h
Usage: shodan [OPTIONS] COMMAND [ARGS]...
Options:
-h, --help Show this message and exit.
Commands:
alert Manage the network alerts for your account # 管理账户的网络提示
convert Convert the given input data file into a... # 转换输入文件
count Returns the number of results for a search # 返回查询结果数量
download Download search results and save them in a... # 下载查询结果到文件
honeyscore Check whether the IP is a honeypot or not. # 检查 IP 是否为蜜罐
host View all available information for an IP... # 显示一个 IP 所有可用的详细信息
info Shows general information about your account # 显示账户的一般信息
init Initialize the Shodan command-line # 初始化命令行
myip Print your external IP address # 输出用户当前公网IP
parse Extract information out of compressed JSON... # 解析提取压缩的JSON信息,即使用download下载的数据
scan Scan an IP/ netblock using Shodan. # 使用 Shodan 扫描一个IP或者网段
search Search the Shodan database # 查询 Shodan 数据库
stats Provide summary information about a search... # 提供搜索结果的概要信息
stream Stream data in real-time. # 实时显示流数据
常用示例
init
初始化命令行工具。
➜ ~ shodan init [API_Key]
Successfully initialized
count
返回查询的结果数量。
➜ ~ shodan count microsoft iis 6.0
575862
download
将搜索结果下载到一个文件中,文件中的每一行都是 JSON 格式存储的目标 banner 信息。默认情况下,该命令只会下载1000条结果,如果想下载更多结果需要增加 --limit
参数。
parse
我们可以使用 parse 来解析之前下载数据,它可以帮助我们过滤出自己感兴趣的内容,也可以用来将下载的数据格式从 JSON 转换成 CSV 等等其他格式,当然更可以用作传递给其他处理脚本的管道。例如,我们想将上面下载的数据以CSV格式输出IP地址、端口号和组织名称:
➜ ~ shodan parse --fields ip_str,port,org --separator , microsoft-data.json.gz
host
查看指定主机的相关信息,如地理位置信息,开放端口,甚至是否存在某些漏洞等信息。
search
直接将查询结果展示在命令行中,默认情况下只显示IP、端口号、主机名和HTTP数据。当然我们也可以通过使用 –fields 来自定义显示内容,例如,我们只显示IP、端口号、组织名称和主机名:
➜ ~ shodan search --fields ip_str,port,org,hostnames microsoft iis 6.0
代码中使用 Shodan 库
还是使用上一节讲到的 shodan
库,安装方式这里不在阐述了。同样的,在使用 shodan
库之前需要初始化连接 API,代码如下:
import shodan
SHODAN_API_KEY = "API_Key"
api = shodan.Shodan(SHODAN_API_KEY)
随后,我们就可以搜索数据了,示例代码片如下:
try:
# 搜索 Shodan
results = api.search(\'apache\')
# 显示结果
print \'Results found: %s\' % results[\'total\']
for result in results[\'matches\']:
print result[\'ip_str\']
except shodan.APIError, e:
print \'Error: %s\' % e
这里 Shodan.search()
会返回类似如下格式的 JSON 数据:
{
\'total\': 8669969,
\'matches\': [
{
\'data\': \'HTTP/1.0 200 OK\r\nDate: Mon, 08 Nov 2010 05:09:59 GMT\r\nSer...\',
\'hostnames\': [\'pl4t1n.de\'],
\'ip\': 3579573318,
\'ip_str\': \'89.110.147.239\',
\'os\': \'FreeBSD 4.4\',
\'port\': 80,
\'timestamp\': \'2014-01-15T05:49:56.283713\'
},
...
]
}
常用 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, facets=None, minify=True)
:查询Shodan数据
至此,本文基本告于段落,买了 Shodan Membership 的各位朋友们可以好好的去 Happy 啦。
zoomeye的简单使用(很恐怖的搜索引擎)
Zoomeye:知道创宇的一个搜索引擎
ZoomEye 支持公网设备指纹检索和 Web 指纹检索
网站指纹包括应用名、版本、前端框架、后端框架、服务端语言、服务器操作系统、网站容器、内容管理系统和数据库等。设备指纹包括应用名、版本、开放端口、操作系统、服务名、地理位置等
我们可以利用某一个指纹特点挖掘网络空间中具有同种类型的网站或者是设备
如我们要寻找关于php的网站我们可以直接输入php
我们可以看到在右边还会有webapp,这里会列出php脚本写的一些web应用,我们搜索php,同时可以通过点击左边的webapp里面的项来进行搜索,比如搜索phpmyadmin的程序点击,就可以看到
点开一个可以看到:
我们也可以在左边搜索设备:比如批量摄像头比如海康威视的http-baner为DVRDVS-Webs, 直接搜索就可以找出海康威视的摄像头web管理界面
如果结合弱口令的话很可能进去。恐怖,隐私泄露同时zoomeye也支持一些语法,可以让我们更精确的探索网络空间常见的有:App组件名 ver版本port端口os操作系统还可以有类似googl的语法形式,如搜索某网站的子域名可以:site:xx.com更多语法可以去看zoomeye用户手册Zoomeye也有自己的api,我们可以调用api来达到自动化的挖漏洞。下边在来几个实例:php appedeCMS ver:5.7.48 比如某天某个版本的cms出现了漏洞,你需要去刷一波,这时候你用这个命令就可以找出来这个版本的cms的网站如图
同理其他的cms也是一样的方法其他的搜索的话,自己构造好搜索的语法即可,总之一句话灰常强大,刷洞的时候很是需要啊!
三分钟内找出全网所有“弱鸡”设备?这不是魔法而是FOFA
去年年底,南方不少地区出现了 H7N9(禽流感)的疫情,搞得许多地方人心惶惶,连吃个鸡顾虑半天。
如果这时有人问我:“有没有什么办法,能快速定位全球所有 H7N9 病毒感染者和易感人群?” 我一定觉得他疯了 —— 如果真有这样的办法,病情可能早就控制住了。
可如果换个问题:“在网络世界,一个高危危漏洞爆发,就像现实生活中的疾病那样迅速蔓延,影响成千上万的设备和网站,有没有办法找到这些脆弱的网站和设备,以快速控制危害?”
我会回答:有,而且方法很简单。
三分钟找到全球所有“弱鸡”设备
2017年1月,一场网络瘟疫席卷全球互联网,广泛使用的 Elastic Search 被曝出安全隐患,攻击者利用该隐患可以直接远程删除受害者的数据。短短一个月,全球至少上万台设备遭遇勒索—— 不给钱?先删库,后跑路。
然而,在勒索风波刚开始不久,小编()编辑就收到了白帽汇发来的一份《威胁情报预警:Elasticsearch 勒索事件报告》,上面竟清晰展示了受勒索事件影响的设备在全球的分布情况:
- 全球中受影响最多的为美国4380台,其次是中国第二944台。法国787台,爱尔兰462台,新加坡418台。
- 其中,中国受害的有944台。其中,浙江省受影响最严中,有498台,其次是北京,186台,上海52台,湖南43台,上海42台。
甚至,连每一波勒索者留下的勒索信息以及被勒索设备的一些详细情况都一一说明,报告的末尾还附带了相应的防御策略。
但更令人惊讶的是,小编得知,这样一份全球范围调查、内容详实的安全报告,三分钟就能做出来。
一场网络世界的瘟疫爆发,几分钟之内找到全球范围了可能“感染”的设备,生成一份安全报告进行预警。这究竟是如何做到的?白帽汇COO刘宇告诉小编,这全都得益于他们的“佛法”—— FOFA系统。
FOFA 是什么?
FOFA,按照官方说明,它是个搜索引擎,但并不是一个普通搜索引擎,起码不是普通人能用的搜索引擎。
当我们使用谷歌、百度这类常规搜索引擎时,只需要说人话 —— 输入文字就行,但在 FOFA 搜索引擎里你却“不能说人话”,而必须用程序化的语言,否则 FOFA 可能拒绝和你沟通。
【不说“人话”的FOFA搜索引擎】
当然,为了初次见面更愉快, FOFA 搜索引擎配备了长长的语法说明:
【FOFA系统的查询语法】
当然,FOFA 搜索引擎检索到的内容并不是平常的文字、照片等内容,而是:
- 服务器
- 数据库
- 某个网站管理后台
- 路由器
- 交换机
- 公共ip的打印机
- 网络摄像头
- 门禁系统
- Web服务
- ……
正因如此,FOFA 这类搜索引擎又有另一个名字:网络空间测绘系统。—— 它们就像是现实生活中的卫星地图那样,一点点勾勒出公共网络空间的样子,每一个网站、每一台公共环境下的服务器……当一个高危漏洞爆发,FOFA系统便能向卫星定位地址一样,通过特征迅速找到全网的脆弱设备。
【图片来自谷歌地球卫星图】
“支离破碎”的网络空间
在完美主义者罗永浩的眼中,这是个支离破碎的世界;在FOFA的眼中,网络空间也是支离破碎的世界。当安全人员需要用FOFA系统寻找某些设备时,他需要用“支离破碎”的语言来检索。
比如要找“北京所有教育网站可远程连接的数据库”,你需要在FOFA引擎中输入:
- City=Beijing(城市为北京)
- Host=edu.cn(教育网站)
- Port=3306 (MySQL数据库常用的远程端口)
对于普通人来说,FOFA搜索引擎的查询语法或许难以上手,但刘宇却告诉小编,这正是FOFA系统的一大特点。
刘宇说,所有搜索引擎都会利用非恶意爬虫来采集服务器和网站的公开数据,FOFA也是如此。当它爬取到的设备和网站信息后,会将数据打散成一个个非常细小的特征,让使用者可以像拼积木一样自由组合这些特征,从而有了更大的发挥余地。
【基于特征检索-乱入的表情包】
刘宇打了个比方,当人们去买电脑,不了解电脑配置的人一般倾向于买整机,而极客、发烧友则倾向于单独买来处理器、主板、显卡……然后自己攒机。FOFA就是这样,它将采集到的所有信息用非常细粒度的形式呈现给使用者,让他们自己来自定义检索规则。——极客们都喜欢自己动手、爱折腾,而FOFA就是给极客们用的。
“撒旦”和“佛法”
其实这类“黑客专用”的搜索引擎并非 FOFA 首创,早在 2009 年的世界黑客大会 DEFCON 上,一个名为“Shodan”的网络空间搜索引擎一经公布就掀起了轩然大波。当时人们惊奇地发现,透过一块小小的电脑屏幕,竟能瞬间找到世界另一端的脆弱设备、摄像头、打印机……
于是,一种全新的黑客攻击手法诞生了:
原本攻击者需要利用漏洞扫描器对一个个服务器、网站进行扫描,如今只需要利用 Shodan 搜索引擎,瞬间就能找到成千上万存在同样漏洞的设备,然后在极短的时间内拿下他们。
步枪变成了机关枪,单体攻击变成了AOE(群体伤害),世界范围的地图炮。
很快,Shodan 在舆论导向之下成了邪恶的代名词,媒体惊呼它为“世界上最可怕的搜索引擎”、“黑暗搜索引擎”,甚至连中文名都被译作“撒旦”。
FOFA系统的创造者,白帽汇CEO赵武告诉小编:
Shodan出现之后,许多攻击者不再挨个扫网站漏洞,那样效率太低,他们更喜欢“打时间差”—— 当国外曝出一个高危漏洞后,他们迅速利用 Shodan 找到大量存在漏洞的服务,然后在企业反应过来之前就完成渗透。
在赵武看来,既然攻击者利用网络空间搜索引擎来发现脆弱设备,那么防御者同样能利用它来发现脆弱设备并及时修补,这便促成了FOFA系统的诞生。就像古代行军打仗,地图就在那里,哪一方能运用得当,哪一方就在更容易取得优势。在网络世界里,白帽汇的赵武希望FOFA能成为帮助人们避开网络攻击的那张“地图”。
“ 目前现实情况有些糟糕。”赵武说,“对于许多稍大一些的企业,他们可能有数以千计的设备、服务。具体哪里有台什么样的服务器,装了哪些服务,开了什么端口,这些网络空间资产通常很难梳理清楚。有时一个大企业修补一个漏洞就花好几天,就是因为对自己的网络空间资产梳理不清楚导致的。”
世界总是趋于混乱,就像我们电脑里的文件系统一样,当文件夹层级越来越多,即使文件结构再清晰,也会经常找不到想要的文件。这时就该换个思路,需要通过做标签,搜索的方式来查找。而 FOFA 就可以充当这么一个资产检索和梳理的角色。
当一个漏洞爆发时,在一个企业中,如果防御者能最短的时间内检索到自己的脆弱设备并保护起来,就能最大限度地让自己免遭攻击;在全网范围内,如果能尽快找到这些脆弱设备并联合国家相关安全机构作出预警,就能最快地控制住“网络疫情”,这便是赵武希望完成的事情。
如今每次出现大的漏洞情况,白帽汇总会第一时间出具相关的漏洞情况报道,提醒企业进行安全防范。而他们也告诉小编编辑,FOFA企业版已经积累了数千条规则,帮助不少公司提高了安全防范能力。
在赵武看来,Shodan 之所以被称之为“最可怕的搜索引擎”,一部分原因在于太多人缺乏网络安全意识,让许多私有的服务器、数据库、摄像头被毫不设防地暴露在四通八达的互联网中。
一个搜索引擎本不具有任何破坏力,它的意义在于为网络世界建立了新的连接方式,让原本混沌的网络世界更透明、阳光,这种阳光、透明最初坑让没准备好的人感到不适,但最终它将推动整个行业的正向发展。