Shodan 是一款极具特色的搜索引擎,与大众熟知的百度、Google 有着显著的区别。它专注于搜索网络设备,这里所说的网络设备是指那些处于联网状态且拥有 IP 地址的设备,范围十分广泛,甚至包括我们日常使用的手机等。
其工作原理是在服务器端部署了形形色色的扫描器。这些扫描器涵盖了我们在安全见闻中提及的多种类型,例如漏洞扫描器,它能够探测网络设备中可能存在的各种安全漏洞,像软件漏洞、系统配置漏洞等,通过对设备进行全面的漏洞扫描,及时发现潜在的安全风险;硬件扫描器则主要针对像路由器、交换机、处理器等硬件设备进行检测,了解其硬件相关信息,如硬件型号、硬件版本、硬件配置等,以便评估硬件层面的安全性与性能状况;还有目录扫描器,它可以深入挖掘网络设备中的目录结构,查找可能存在的敏感信息或未授权访问路径。这些扫描器如同不知疲倦的卫士,全天候 24 小时持续运行,不间断地对海量的网络设备进行扫描,从而构建起一个庞大且不断更新的网络设备信息数据库。
Shodan 具有诸多优点。其中最为突出的便是其搜索的快速性与便捷性。它能够在极短的时间内获取到大量的扫描结果,尤其是能够迅速捕捉到一些最新出现的扫描结果,而这些结果往往蕴含着极为关键的最新漏洞信息。这对于网络安全研究人员、安全防护团队以及相关技术从业者来说,无疑是一把利器,能够帮助他们及时了解网络设备的安全态势,提前做好防范措施或者针对性的研究工作。然而,它也并非十全十美,其存在的一个明显缺点就是不够实时。尽管它能够快速获取相对较新的信息,但在某些对实时性要求极高的场景下,可能会存在一定的滞后性,无法做到与网络设备状态的完全同步更新。
Shodan 的功能丰富多样。它具备在线查询功能,用户只需在其官方网站的搜索栏中输入相应的查询条件,即可获取相关的网络设备信息。同时,它还提供了离线的客户端,这为用户在本地环境下进行网络设备搜索与分析提供了便利,即使在没有网络连接的情况下,用户也可以利用离线客户端中已缓存的数据进行一定程度的操作与研究。它还能够对特定的 IP 地址进行监控,实时跟踪这些 IP 地址所对应的网络设备的状态变化,及时发现可能出现的异常情况。并且,它可以对网络设备进行深度扫描,精准地找出设备中存在的漏洞、bug 等安全隐患,为修复与防护提供有力依据。此外,Shodan 还支持调用 API 接口,这一特性使得它在信息收集方面具有极大的应用价值。开发人员可以利用 API 接口将 Shodan 的功能集成到自己的应用程序或脚本中,从而实现自动化的信息收集与分析流程,大大提高工作效率与数据处理能力。
下面详细介绍一下 Shodan 的具体使用步骤:
首先是克隆项目。我们需要在命令行中执行 git clone https://github.com/achillean/shodan-python.git 命令。这一操作会从指定的 GitHub 仓库地址将 Shodan 的 Python 相关项目代码克隆到本地计算机中,为后续的使用奠定基础。
克隆完成后,接着要切换目录。通过执行 cd shodan-python 命令进入到克隆下来的项目目录中。需要特别注意的是,后续的一些 Python 相关操作必须在此目录下进行,否则可能会出现找不到相关模块或文件的错误。
进入正确目录后,运行安装脚本。在命令行中输入 python setup.py install ,这一步骤会将 Shodan 的 Python 库以及相关依赖项安装到本地 Python 环境中,使得我们能够在 Python 代码中顺利调用 Shodan 的功能。
安装完成后,需要对 Shodan 进行初始化操作。执行 shodan init api_key 命令,其中 api_key 需要替换为自己在 Shodan 平台注册账号所获取的 API 密钥。这一步骤类似于为我们后续与 Shodan 平台的交互进行身份认证与授权,只有通过正确的 API 密钥初始化,才能顺利使用 Shodan 的各种功能。
初始化完成后,我们可以查看帮助文档来了解 Shodan 的各种命令参数与用法。在命令行中输入 shodan -h ,即可获取详细的帮助信息,包括各种命令的功能介绍、参数说明以及示例等,这对于初次使用或者想要深入了解 Shodan 的用户来说非常有帮助。
例如,我们可以使用 search 命令进行搜索操作。以搜索日本地区的网络设备为例,执行 shodan search --limit 10 country:jp 命令。其中 --limit 10 参数表示此次搜索结果只显示 10 条信息,这样可以避免搜索结果过多而导致信息过载,方便我们快速查看关键信息; country:jp 则指定了搜索的范围为日本地区的网络设备。
如果我们想要指定显示的内容,可以使用 --fields 参数。比如执行 shodan search --limit 10 --fields ip,post country:jp 命令,这样扫描出来的结果将只显示数字 IP 地址和端口信息,有助于我们聚焦于特定的信息需求。
若要输出 IPV4 的 IP 信息和端口信息,可以执行 shodan search --limit 10 country:jp --fields ip_str,port 命令,其中 ip_str 专门用于输出 IPV4 的 IP 信息, port 则表示显示端口信息。
如果我们只想搜索特定端口(如 80 端口)的 IP 地址,可以执行 shodan search --limit 10 --fields ip_str port 80 country:jp 命令,通过 port 80 明确指定了搜索条件为 80 端口。
还可以使用 --color 参数将重点内容标红,以便更直观地查看重要信息。例如执行 shodan search --color --limit 10 --fields ip_str port 3389 countrt:cn city:shenzhen 命令,这里不仅指定了搜索中国深圳地区的 3389 端口(该端口是 Windows 的远程服务端口,较为敏感)的网络设备,还使用 --color 参数将关键信息进行了突出显示。
除了 search 命令,Shodan 还有其他实用的命令。例如 host 命令,执行 shodan host ip (其中 ip 为需要查询的具体 IP 地址)可以查看指定 IP 地址的详细信息。返回的信息非常丰富,包括该 IP 地址所在的国家、所属组织、最后更新时间、开放端口数、可能存在的漏洞(以 CVE 编号形式呈现)以及端口运行情况等,这些信息对于全面评估网络设备的安全性与状态具有重要意义。
另外, myip 命令也很有用,执行 shodan myip 可以获取自身外部可见的 IP 地址,这在某些网络环境检测与定位场景中非常有帮助。
Shodan 还支持多种其他的搜索条件用法。例如 os:windows 7 可以指定搜索操作系统为 Windows 7 的网络设备; has_vuln:True 可以筛选出存在漏洞的网络设备; device:webcarm 表示搜索设备类型为摄像头(其端口一般为 23 或者 21)的网络设备; device:router 则用于搜索路由器设备; tp-link 可用于搜索 web 端的 tp-link 设备; hostname 参数可以指定特定的主机或域名进行搜索,如 hostname:"google" ; org 参数用于指定特定的组织或公司进行搜索,如 org:"google" ; isp 参数则可以指定特定的 ISP 供应商进行搜索,如 isp:"China Telecom" 。通过这些丰富多样的搜索条件与命令组合,用户可以根据自己的需求进行精准的网络设备搜索与信息收集。