1.暗黑谷歌的由来
有这么一款搜索引擎,它一刻不停的在寻找着所有和互联网关联的PLC、摄像头、红绿灯、打印机、路由器、交换机、服务器、数据库等等各种软硬件服务设施。
它就是shodan,那么shodan到底是什么呢?怎么会有如此大的魔力?首先,Shodan 是一个搜索引擎,但它与 Google 这种搜索网址的搜索引擎不同,Shodan不是在网上搜索网址,而是直接进入互联网探索其背后的信息。
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参数还有很多,前提是注册或付费用户:
更多信息使用时可以查看中文说明手册,可点击前往。
其他功能
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,防止被访问者的追踪。有兴趣的可以自行研究下,这里不再过多描述,综上内容纯属攻防和白帽子技术爱好。知己知彼,方能百战不殆。加油吧,少年!未来的某一天,白帽子大牛中你可能也是其中之一。
网友评论