Shodan Introduction

2020-08-20 10:47:18 浏览数 (1)

世界上最可怕的搜索引擎

全球网络监控的突破口


Shodan现状

关于Shodan已经写了几篇文章了

这几篇文章中设计的知识主要来自于我的老师了,之前我介绍过。

其实国内的论坛或者网站上几乎也就是上面这些内容,

wooyun上看到一篇shodan作者在2009年在DEFCON上发布的文章

Freebuf有一篇文章我认为可以参考

在知乎上大概有几十篇文章吧,遗憾的是很多都是仅仅是通过shodan搜索,之后使用其他的已知漏洞进行攻击。其中也有几篇是比较好的

我买的那么多安全的书中也仅仅有两本介绍了shodan,也没有特别深入的说。


Shodan官方手册

原来官方给出了使用手册,下载需要花至少0.99$,谷歌搜索了很长时间才得到完整版,不过并不是最新版本,因为Shodan在2017年8月23日更新过这本书,而下载到的是2016年的版本,不过修改应该不会太大。

这本书是全英文,没有任何中文版本,所以英语好的小伙伴可以翻译一下,一共92页,我昨天用了一下午翻译完了,不过没有写下来。

书籍购买地址:https://leanpub.com/shodan

我下载到的也提供一下:链接:https://pan.baidu.com/s/1eR21IYA 密码: uc6q

这本书在国内基本找不到,竟然连伟大的淘宝都没有


Shodan计划

Shodan这么伟大的作品不应该仅仅这样介绍就结束。

接下来的几篇文章我会以官方文档为主,其他资料(如上面提到的或者Youtobe上的资料)为辅,全面详细认真的介绍Shodan。

我希望它们会是国内介绍shodan最专业的文章(号角响一点自己才有动力,其实我知道大佬们只是不愿意出来写而已!)

PS: 其实国内在空间搜索上做的也很出色,知道创宇的钟馗之眼等,余弦大大的产品最近好像API又重新使用了

Search

Engine


Shodan介绍

Shodan的工作原理

Shodan是如何工作的呢?

很多人问过的问题,其实很简单,其实并不难

Shodan其实也是一个爬虫。它无差别的去访问各种IP ,之后根据返回的Banner信息 来进行判断目标的基本信息。

Banner

Banner信息可以认为是由目标返回的各种信息,对于Web Server来说,返回的 HTTP的各种头信息,

HTTP/1.1 200 OK

Server: nginx/1.1.19

Date: Sat, 03 Oct 2015 06:09:24 GMT

Content-Type: text/html; charset=utf-8

Content-Length: 6466

Connection: keep-alive

对于RDP应用,那可能就是远程桌面的截图

对于工控设备,它们大多数由自己的协议,所以Banner也是千差万别

例如:Siemens S7industrial control system protocol:

Device Metadata

根据抓取的Banner信息,Shodan 还会抓取一些设备的元信息(metadata),例如地理位置(经纬度),具体方位,主机名,操作系统类型等等很多信息

IPv6

Shodan还会抓取IPv6的设备的信息。

Shodan 数据采集

频率问题

shodan的爬虫是每天24小时不停歇的爬去数据的,所以说我们查询的数据都是实时的,也就是说明天搜索的结果可能就和今天不一样了

分布式爬虫

Shodan的爬虫是分布式的,分布在世界各地的,其实这个也很正常,Shodan官方都在文档里面说了,很多美国管理员直接就禁止中国的IP地址!分布式爬虫可以突破地域限制。这些爬虫主要分布在下面这些地区:

域名解析追踪

• USA (East andWest Coast)

• China

• Iceland

• France

• Taiwan(台湾永远是中国不可分割的一部分)

• Vietnam

• Romania

• Czech Republic

无差别扫描

这些爬虫的算法实现是这样的

  1. 随机生成一个的IP地址
  2. 从Shodan预定义好的端口列表中随机选择一个
  3. 检查这个随机IP的这个端口是否开放,之后获取Banner信息
  4. 不断重复

SSL

Shodan的爬虫会爬所有采用SSL功能的服务,比如HTTPS,爬取的不仅仅是SSL 的认证信息,包括SSL的各种属性信息!

Shodan 究竟是如何在内部进行记录搜索结果的呢?

使用的其实就是Json来进行存储,

说到SSL漏洞,最先想到的可能就是Heartbleed(心脏滴血)漏洞了,下面我就来以这个漏洞来介绍一下这个漏洞是如何搜索并且Shodan是如何存储的。

可以看到除了中国,至少还有54155台设备遭受着这个漏洞的影响

此时内部存储是这样的

{"opts": {

"heartbleed": "... 174.142.92.126:8443 -VULNERABLEn",

"vulns": ["CVE-2014-0160"]

}

}

如果支持导出密钥,爬虫会添加opts.vulns 的属性:

"opts": {

"vulns": ["CVE-2015-0204"]

}

在爬虫尝试去连接SSL的服务时使用ephemeralDiffie-Hellman ciphers,并且连接成功后,就会记录下面这段信息

Hi

Hi

关于版本信息

正常我们使用浏览器连接SSL 服务的时候,浏览器会与SSL服务器协商两件事

  1. SSL 版本(比如 TLSv1.2)
  2. 使用的密钥

协商归协商,不过Shodan怎么会那么乖乖地去遵守呢?

协商结束后Shodan会发送一个正常协商后的请求,不过在这之后Shodan的爬虫们会尝试各个版本的SSL请求,以确定该服务器到底支持哪些版本的SSL,比如 SSLv2、SSLv3、TLSv1.0、TLSv1.1、TLSv1.2,之后会做如下存储

{"ssl": {

"versions": ["TLSv1", "SSLv3","-SSLv2", "-TLSv1.1", "-TLSv1.2"]

}

}

其中带有 – 号的表示服务器并不支持这个版本

如果我们想要搜索版本为 SSLv2版本的服务器(HTTPS,POP3 with SSL等),我们可以这样进行搜索 ssl.version:sslv2

证书链

SSL 服务中包含一个 ssl.chain属性,这个属性包含证书链上的所有的SSL 证书,证书链是一个证书列表,从 root 到 end-user ,关于证书链我了解的也不多,大家可以参考下面这个地址中的文章进行学习!

http://blog.csdn.net/win15135173776/article/details/61193997

高端一些的信息

之前我们的文章中就介绍过Shodan可以分析网站建设采用的技术,如脚本,框架,数据库,服务器,操作系统等

Shodan采用下面两种方法进行判断

Web Components

对于HTTP 和 HTTPS 来说,Shodan像下面这样存储数据

将网站使用的技术作为Key,之后用另一个字典作为Value。Categories的属性值是网站采用的技术。

Shodan 会将这些都存储在 http.components属性中,上面的信息表明该网站正在运行Drupal内容管理系统,它本身使用jQuery和PHP。

Shodan 的 REST API通过http. Component过滤器来给这些数据赋予了可搜索性,并且可以从http.component,http.component_category两方面进行检索,Shodan的API 接口我会在后面的文章中进行讲述。

当然这两个方面我们也可以用在Web 接口上,比如我们查询一下使用php的服务器吧!

http.component:php

可以看到有1189125 个

那么我们查询一下使用java的吧

那ASP.NET的呢

最近几年Python 增长很快,那就看看有多少Python的网站吧

这回谁多一些就知道了吧!

我们还可以查询一下有多少网站使用了CMS

http.component_category:cms

这里有一点我也比较疑惑,为什么搜索出来的网站似乎都使用了Wordpress,前两页都是这样,难道在Shodan看来wordpress才算是CMS吗???

Cascading

及联

就是说一个设备的Banner信息中显示另一个IP地址运行着某种服务,那么爬虫们就会去确认这个IP及其服务的Banner信息。

比如 mainline DHT 返回的Banner信息是这样的

(Bittorrent 用来追踪客户端的方法,具体查看

https://en.wikipedia.org/wiki/Mainline_DHT)

DHT Nodes

97.94.250.250 58431

150.77.37.22 34149

113.181.97.227 63579

...

之前,Shodan会使用一个爬虫去及联的爬取,直到DHT出现后,Shodan的爬虫遇到及联的情况的时候会启动更多的爬虫去抓取Banner信息

这样同时也带来了管理问题,父爬虫和自爬虫之间如何区别和管理呢?

_shodan.id: Banner的唯一ID,如果一个及联的情况出现,这个ID可以确定子爬虫启动成功了,但是具体发送请求获取Banner信息是否成功就不得而知了!

_shodan.options.referrer: 这个还不太解释,首先这个是Banner的一个ID,我们称这个Banner为Banner A,由Banner A 产生了Banner B ,Banner B 是现在正在产生的Banner,那么这个属性就是用来标记 使Banner B 产生的原因 Bannner A 的,同时就是说 Banner A 是 Banner B 它爹

-END-

0 人点赞