安全资讯
Shodan互联网上最可怕的搜索引擎
1.暗黑谷歌的由来
有这么一款搜索引擎,它一刻不停的在寻找着所有和互联网关联的PLC、摄像头、红绿灯、打印机、路由器、交换机、服务器、数据库等等各种软硬件服务设施。
它就是shodan,那么shodan到底是什么呢?怎么会有如此大的魔力?首先,Shodan 是一个搜索引擎,但它与 Google 这种搜索网址的搜索引擎不同,Shodan不是在网上搜索网址,而是直接进入互联网探索其背后的信息。
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。Shodan真正值得注意的能力就是能找到几乎所有和互联网相关联的东西。其中最受欢迎的搜索内容是:webcam,linksys,cisco,netgear,SCADA等等。
配合其组合参数,可以做到以下功能:
批量搜索现有漏洞主机
统计感染某木马的主机数量
批量扫描登录入口,并使用弱口令字典进行爆破
批量抓取shell
使用自己的0day打遍天下
写这篇文章是希望能够将这款工具的用途、使用方法、利用技巧进行实战应用。以便使用Shodan搜索引擎进行相关搜索,并利用Shodan的API编写Python脚本,进行批量扫描,将技术应用到渗透测试和安全攻防中,最大限度做好安全防御。
2.Shodan的工作原理
Shodan每隔一段时间就会对全球大约8亿主机进行扫描,通过对返回Banner信息的处理,识别特定主机,并进行分类储存。为了避免因政治、技术等原因导致的扫描信息误差(比如某墙或某些老美服务商对大陆羊毛党的屏蔽等),Shodan的扫描主机至少遍布在全球的8个国家和地区。
那Banner是什么呢?
在探测端口时数据包里存在Banner信息
HTTP/1.1 200 OK Server: nginx/1.16.0 Date: Sat, 18 May 2019 06:56:30 GMT Content-Type: text/html Transfer-Encoding: chunked Connection: keep-alive
这是一个普通的HTTP Banner,可以从上获知服务端使用的是1.16.0版本的nginx。
西门子S7-300工控协议的Banner:
Reserved for operating system: Serial number of memory card: SD D45C6213 Location designation of a module: Module type: CPU 315-2 PN/DP PLC name: S7-300 station_1 Plant identification: OEM ID of a module: Module name: Vestas V27 AS+PITCH Serial number of module: 18382
其中能获取更多的信息。
Shodan的Banner处理机制比较复杂,我们这里只需要知道探测端口是来往的数据包中包含Banner,并包含了主机的部分信息即可。
3.Shodan的查询指南
基本查询
Shodan的参数有很多,这里只介绍简单几种。
hostname:"主机或域名" 如 hostname:"google'' port:"端口或服务" 如 port:"80" ip : "ip地址" 如 ip : "114.114.114.114" net:"IP地址或子网"如 net:"111.112.113.110.0/24" vuln :指定漏洞的cve如 vuln:CVE-2015-8869 但是这个命令最好搭配起来使用,如 country:CN vuln:CVE-2018-0610 os :"操作系统" 如 os:"debian" isp:"ISP供应商" 如 isp:"China Telecom" product:"操作系统/软件/平台" 如 product:"nginx" version:"软件版本" 如 version:"1.16.0" geo:"经纬度" 如 geo:"38°53.707′,77°02.182" country`:"国家" 如 country:"China" city:"城市" 如 city:"shanghai" org:"组织或公司" 如org:"google" before/after:"日/月/年" 如 before:"11/05/2019" after:"11/05/2019" asn : "自治系统号码" 如 asn:"TS1826"
关联查询
搜索上海开放8080端口的主机
Apache city:"shanghai" port:"8080"
搜索IP段为23.238.20.0/24的所有linux主机
os:"linux" net:"23.238.20.0/24"
更多信息使用时可以查看中文说明手册,可点击前往。
其他功能
Shodan 不仅可以查找网络设备,它还具有其他相当不错的功能。
Exploits:每次查询完后,点击页面上的 “Exploits” 按钮,Shodan 就会帮我们查找针对不同平台、不同类型可利用的 exploits。当然也可以通过直接访问网址来自行搜索:https://exploits.shodan.io/welcome;
地图:每次查询完后,点击页面上的 “Maps” 按钮,Shodan 会将查询结果可视化的展示在地图当中;
报表:每次查询完后,点击页面上的 “Create Report” 按钮,Shodan 就会帮我们生成一份精美的报表,这是天天要写文档兄弟的一大好帮手啊;
4.命令行下的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
本文以debian为例,安装完后我们先看下帮助信息:
root@debian:~# 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
初始化命令行工具。
root@debian:~# shodan init [API_Key] #请使用自己账号的API Key Successfully initialized
count
返回查询的结果数量。
root@debian:~# shodan count nginx 1.16.0 81840
download
将搜索结果下载到一个文件中,文件中的每一行都是 JSON 格式存储的目标 banner 信息。默认情况下,该命令只会下载10条结果,如果想下载更多结果需要增加 --limit
参数。
root@debian:~# shodan download nginx 1.16.0 --limit 100 Search query: 1.16.0 Total number of results: 82058 Query credits left: 0 Output file: nginx.json.gz [###---------------------------------] 10% 00:00:31 Notice: fewer results were saved than requested Saved 100 results into file nginx.json.gz
parse
我们可以使用 parse 来解析之前下载数据,它可以帮助我们过滤出自己感兴趣的内容,也可以用来将下载的数据格式从 JSON 转换成 CSV 等等其他格式,当然更可以用作传递给其他处理脚本的管道。例如,我们想将上面下载的数据以CSV格式输出IP地址、端口号和组织名称:
root@debian:~# shodan parse --fields ip_str,port,org --separator , nginx.json.gz 23.239.25.203,80,Linode 85.209.0.11,80, 93.119.176.67,80,0 7 I N T E R N E T . R O 149.202.169.98,80,OVH SAS 138.68.232.31,80,Digital Ocean 195.70.4.97,80,DFI Service SA 47.101.70.248,80,Hangzhou Alibaba Advertising Co.,Ltd. 42.159.196.244,80,Shanghai Blue Cloud Technology Co.,Ltd 142.4.17.163,80,Unified Layer 80.69.173.48,80,UpCloud Cloud Servers 39.100.85.208,80,Hangzhou Alibaba Advertising Co.,Ltd. 156.67.92.27,80,NETRONIK sp. z o.o. 193.112.97.173,80,Tencent cloud computing 47.107.139.162,80,Hangzhou Alibaba Advertising Co.,Ltd. 129.121.192.115,8080,Nexcess.net L.L.C. 162.144.69.141,80,Unified Layer 164.138.216.162,80,SuperHosting.BG Ltd. ......................................... #此处省略N行。
host
查看指定主机的相关信息,如地理位置信息,开放端口,甚至是否存在某些漏洞等信息。
root@debian:~# shodan host 42.159.196.244 42.159.196.244 City: Shanghai Country: China Organization: Shanghai Blue Cloud Technology Co.,Ltd Updated: 2019-05-18T08:13:44.814290 Number of open ports: 2 Vulnerabilities: CVE-2018-15919 CVE-2017-15906 Ports: 22/tcp OpenSSH (7.4) 80/tcp nginx (1.16.0)
search
直接将查询结果展示在命令行中,默认情况下只显示IP、端口号、主机名和HTTP数据。当然我们也可以通过使用 –fields 来自定义显示内容,例如,我们只显示IP、端口号、组织名称和主机名:
root@debian:~# shodan search --fields ip_str,port,org,hostnames nginx 1.16.0 162.144.138.155 80 Unified Layer server.vitaathletics.com 85.209.0.11 80 162.144.196.17 80 Unified Layer server.yen.hlv.mybluehost.me 138.68.232.31 80 Digital Ocean nexo-host.com.ve 212.22.64.245 80 LLC Quadronet timri.ru 38.143.213.84 80 Cogent Communications 212.33.243.127 80 JSC ER-Telecom Holding 212x33x243x127.static-business.perm.ertelecom.ru 64.247.179.214 80 SoftwareWorks Group useast33.myserverhosts.com 120.31.140.112 81 FoShan RuiJiang Science and Tech ns1.eflydns.net;ns2.eflydns.net 80.69.173.48 80 UpCloud Cloud Servers 80-69-173-48.fi-hel1.upcloud.host 85.209.0.76 80 156.67.92.27 80 NETRONIK sp. z o.o. 162.144.201.223 80 Unified Layer server.formacolorytextura.com 193.112.97.173 80 Tencent cloud computing 47.110.78.125 80 Hangzhou Alibaba Advertising Co.,Ltd. 129.121.192.115 8080 Nexcess.net L.L.C. ip-129-121-192-115.local ......................................... #此处省略N行。
5.代码中使用 Shodan 库
上面介绍了 shodan
库的用法,这里描述下如何在python代码中使用 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了。与之相似的料理就是Tor浏览器,这是一个无痕浏览的神器。
Tor浏览器的工作原理就是将你的ip跳到一连串的的代理上,比如:把你的ip地址先从美国跳到加拿大再跳到荷兰、日本、德国、俄罗斯。。。。。下载链接:https://www.torproject.org/download/
其中所有的数据全部都是经过加密处理,目的就是为了掩藏真正访问者的ip,防止被访问者的追踪。有兴趣的可以自行研究下,这里不再过多描述,综上内容纯属攻防和白帽子技术爱好。知己知彼,方能百战不殆。加油吧,少年!未来的某一天,白帽子大牛中你可能也是其中之一。