前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shodan Introduction

Shodan Introduction

作者头像
意大利的猫
发布2020-08-20 10:47:18
8070
发布2020-08-20 10:47:18
举报
文章被收录于专栏:漫流砂漫流砂

世界上最可怕的搜索引擎

全球网络监控的突破口


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 -VULNERABLE\n",

"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-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 NOP Team 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档