0x01 Shadon
常用命令
- hostname:搜索指定的主机或域名,例如 hostname:"google"
- port:搜索指定的端口或服务,例如 port:"21"
- country:搜索指定的国家,例如 country:"CN"
- city:搜索指定的城市,例如 city:"Hefei"
- org:搜索指定的组织或公司,例如 org:"google"
- isp:搜索指定的ISP供应商,例如 isp:"China Telecom"
- product:搜索指定的操作系统/软件/平台,例如 product:"Apache httpd"
- version:搜索指定的软件版本,例如 version:"1.6.2"
- geo:搜索指定的地理位置,参数为经纬度,例如 geo:"31.8639, 117.2808"
- before/after:搜索指定收录时间前后的数据,格式为dd-mm-yy,例如 before:"11-11-15"
- net:搜索指定的IP地址或子网,例如 net:"210.45.240.0/24"
查找位于合肥的 Apache 服务器:
apache city:"Hefei"
查找位于国内的 Nginx 服务器:
nginx country:"CN"
查找 GWS(Google Web Server) 服务器:
"Server: gws" hostname:"google"
查找指定网段的华为设备:
huawei net:"61.191.146.0/24"
点击 Shodan 搜索栏右侧的 "Explore” 按钮,就会得到很多别人分享的搜索语法,你问我别人分享的语法有什么好玩的?那咱们就随便来看看吧:
咱们随便选取一个名为"NetSureveillance Web”的用户分享语法,从下面的描述信息我们基本就能得知这就是一个弱密码的漏洞,为了方便测试让我们把语法在增加一个国家的过滤信息,最终语法如下:
Server: uc-httpd 1.0.0 200 OK Country:"CN"
现在让我们随便选取一个页面进去输入,使用admin账号和空密码就能顺利进入了:)
其他功能
Shodan 不仅可以查找网络设备,它还具有其他相当不错的功能。
Exploits:每次查询完后,点击页面上的 "Exploits” 按钮,Shodan 就会帮我们查找针对不同平台、不同类型可利用的 exploits。当然也可以通过直接访问网址来自行搜索:https://exploits.shodan.io/welcome;
地图:每次查询完后,点击页面上的 "Maps” 按钮,Shodan 会将查询结果可视化的展示在地图当中;
报表:每次查询完后,点击页面上的 "Create Report” 按钮,Shodan 就会帮我们生成一份精美的报表,这是天天要写文档兄弟的一大好帮手啊;
命令行下使用 Shodan
Shodan 是由官方提供的 Python 库的,项目位于:https://github.com/achillean/shodan-python
安装
1 | pip install shodan |
或者
1 | git clone https://github.com/achillean/shodan-python.git && cd shodan-python |
安装完后我们先看下帮助信息:
1 | ➜ ~ shodan -h |
常用示例
init
初始化命令行工具。
1 | ➜ ~ shodan init [API_Key] |
count
返回查询的结果数量。
1 | ➜ ~ shodan init [API_Key] |
download
将搜索结果下载到一个文件中,文件中的每一行都是 JSON 格式存储的目标 banner 信息。默认情况下,该命令只会下载1000条结果,如果想下载更多结果需要增加 --limit 参数。
1 | shodan download microsoft-data microsoft iis 6.0 |
Parse
我们可以使用 parse 来解析之前下载数据,它可以帮助我们过滤出自己感兴趣的内容,也可以用来将下载的数据格式从 JSON 转换成 CSV 等等其他格式,当然更可以用作传递给其他处理脚本的管道。例如,我们想将上面下载的数据以CSV格式输出IP地址、端口号和组织名称:
1 | shodan parse --fields ip_str,port,org --separator , microsoft-data.json.gz |
host
查看指定主机的相关信息,如地理位置信息,开放端口,甚至是否存在某些漏洞等信息。
search
直接将查询结果展示在命令行中,默认情况下只显示IP、端口号、主机名和HTTP数据。当然我们也可以通过使用 –fields 来自定义显示内容,例如,我们只显示IP、端口号、组织名称和主机名:
1 | ➜ ~ shodan search --fields ip_str,port,org,hostnames microsoft iis 6.0 |
- 代码中使用 Shodan 库
还是使用上一节讲到的 shodan 库,安装方式这里不在阐述了。同样的,在使用 shodan 库之前需要初始化连接 API,代码如下:
1 | import shodan |
随后,我们就可以搜索数据了,示例代码片如下:
1 | try |
这里 Shodan.search() 会返回类似如下格式的 JSON 数据:
1 | { |
常用 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数据
0x02 ZoomEye
2.1 指定搜索的组件以及版本
app:组件名称
ver:组件版本
例如:搜索 apache组件 版本2.4
1 | app:apache ver:2.4 |
2.2 指定搜索的端口
port:端口号
例如:搜索开放了SSH端口的主机
1 | port:22 |
一些服务器可能监听了非标准的端口。要按照更精确的协议进行检索,可以使用service进行过滤。
2.3 指定搜索的操作系统
OS:操作系统名称
例如:搜索Linux操作系统
1 | OS:Linux |
2.4 指定搜索的服务
service:服务名称
例如,搜素SSH服务
1 | Service:SSH |
2.5 指定搜索的地理位置范
country:国家名
city:城市名
例如:
country:China
1 | city:Beijing |
2.6 搜索指定的CIDR网段
CIDR:网段区域
例如:
1 | CIDR:192.168.158.12/24 |
2.7 搜索指定的网站域名
Site:网站域名
例如:
1 | site:www.baidu.com |
2.8 搜索指定的主机名
Hostname:主机名
例如:
1 | hostname:zwl.cuit.edu.cn |
2.9 搜索指定的设备名
Device:设备名
例如:
1 | device:router |
2.10搜索具有特定首页关键词的主机
Keyword:关键词
例如:
1 | keyword:technology |
综合演示
搜索位于美国、主机系统为Linux、开启SSH服务的目标主机:
0x03 Pocsuite
待体验
0x04 Google Hacking
site:cnblogs.com Wh0ale //在网站下查找关键字
intitle:login //查找标题是login的
allintitle:index of //查找所有标题带有index of的
allinurl:forcedownload.php?file= //查找url带有如下关键字的
inurl:/cgi-bin/MANGA/index.cgi
cache:stackoverflow.com //查找快照
filetype:pdf Kali Linux //查找文件格式pdf的
site:cnblogs.com filetype:pdf Linux 域名为cnblogs.com 且文件格式为pdf的
0x05 FOFA
5.1 HTML源代码检索查找IP
上文2.8中提到是基于Banner匹配进行查找的,这方面shodan和zoomeye等网站都可以实现,那么有没有可以搜索网页标题、内容的方法,这样,我就能找到哪些服务器上运行的网站是与我要找的一致,从而能找出真实的服务器IP。在圈子里混,朋友推荐一个新的IOT搜索引擎,跟前面提到的两个相似,叫fofa,WWW.FOFA.SO,其优点是支持HTML源代码检索
举例:找到www.5173.com的真实IP
使用ping命令,返回信息有"49k6959vz6ea10u8.alicloudsec.com (218.11.3.155)",这就是使用了CDN服务的信号,显然是阿里云。
1 | ping http://www.5173.com/ |
正在 Ping 49k6959vz6ea10u8.alicloudsec.com [180.97.163.234] 具有 32 字节的数据:
来自 180.97.163.234 的回复: 字节=32 时间=78ms TTL=43
来自 180.97.163.234 的回复: 字节=32 时间=73ms TTL=43
来自 180.97.163.234 的回复: 字节=32 时间=16ms TTL=43
来自 180.97.163.234 的回复: 字节=32 时间=23ms TTL=43
访问www.5173.com,源代码内显示标题有很特别的内容『网络游戏交易平台|手游交易|装备交易|游戏币交易|帐号交易|点卡充值|代练服务-是国内最权威最安全的游戏交易平台-5173.com』,包含有根域名5173.com,这种title是非常特殊的,用来检索,就能找到WWW.5173.COM的真实IP
然后在fofa中将这个标题内容作为关键词搜索,使用语法『title="网络游戏交易平台|手游交易|装备交易|游戏币交易|帐号交易|点卡充值|代练服务-是国内最权威最安全的游戏交易平台-5173.com"』
在下面的截屏,包含了www.5173.com的真实IP:
最后,访问http://180.97.163.234,如果网站可以打开,内容与www.5173.com是一致的,那么这就是真实IP;如果网站不可以打开,有可能这个是CDN,也有可能是一个虚拟主机服务器。使用 ip=="180.97.163.234"
搜索这个IP上的全部服务和网站,显示全是5173.com结尾的域名,基本确认这是真实ip,且是5173.com的主要网站服务器。
5.2 根据网站信息查IP
寻找某电商的子域名,可以根据其证书,header信息,备案号,页面引用的特定文件等找到相关其子域名。对于一些有cdn的,也可以绕过cdn找到真实IP
5.3 找Burp Suite代理
点进去看下,发现代理记录,这个人访问qq,baidu,sohu的记录都有,还有内网地址,额!看到了他浏览小说的记录,而且能看到cookie!这个抓包工具安全人员用的比较多,详细分析下,没准还能捡个0day!