内容预览 ≧∀≦ゞ
Shodan高级搜索之冷门技巧
声明
笔记内容参考了B站UP主 泷羽sec 的学习视频,如有侵权,将立即删除。
本笔记旨在促进网络安全学习,任何不当使用均与作者无关,请勿逾越法律红线,否则后果自负。
希望这些内容能对各位师傅有所帮助,欢迎您的点赞和评论!
导语
Shodan 是一个强大的搜索引擎,专注于互联网设备的搜索。与常规搜索引擎不同,Shodan 允许用户通过 IP 地址、端口、服务和其他多种参数搜索设备,帮助安全研究人员、网络管理员和技术爱好者发现和分析全球范围内的联网设备。
➤ 往期回顾
在前几期的文章中,我们详细介绍了 Shodan 的基本用法、命令和进阶技巧,包括如何批量查找并验证漏洞,以及如何发现并解锁隐藏的脆弱资产。这一期,我们将为您补充一些冷门的语法技巧,这些技巧将帮助您更深入地挖掘 Shodan 的潜力,提升搜索的精准度和效率,从而灵活进行设备搜索和信息收集。
冷门模块介绍
Shodan除了常用的搜索和过滤功能外,还提供了一些较为冷门但有时也很实用的模块,以下是几种冷门模块的简要介绍:
Scan 模块
scan
模块支持实时扫描指定的IP或网段,能够主动探测目标的开放端口、服务和其他特性。该模块尤其适用于对关键设备的实时监测,帮助安全团队在信息变更时第一时间掌握情况。下面命令可提交对特定IP地址的扫描请求:
shodan scan submit 123.456.78.90
在实际场景中,通过 scan
模块可以针对新上线的设备或敏感资产开展即时扫描,快速获取其安全状态。
Alert 模块
Shodan的alert
功能允许用户设定监控条件,实时监控符合条件的设备和网络活动,并发送通知。由于此模块使用较少且命令较为复杂,以下将简要介绍其常用操作:
- 创建 Alert
使用shodan alert create
命令设定监控条件及通知邮箱。例如,监控所有运行SSH服务的设备并在发现时发送通知:
shodan alert create "service:ssh" your_email@example.com
- 查看 Alert 列表
查看当前所有Alert,使用以下命令显示Alert的ID、搜索条件、创建时间和状态:
shodan alert list
- 删除 Alert
如需删除某个Alert,使用shodan alert delete
命令并指定Alert的ID。例如,删除ID为123456的Alert:
shodan alert delete 123456
-
接收 Alert 通知
Shodan检测到符合Alert条件的设备或网络活动时,会通过邮件通知用户,邮件内容包括设备的IP地址、端口、操作系统和服务等信息。 -
使用过滤器创建更具体的 Alert
Shodan支持多种过滤器,可用于设定更精准的监控条件。例如,监控特定IP地址范围内的设备:
shodan alert create "net:192.168.1.0/24" your_email@example.com
此命令将监控 192.168.1.0/24
网段内的设备,并发送通知。
Domain 模块
domain
用于查询域名信息,但因为Shodan本身的非实时性,这个参数用起来可能不是很舒服。
Stats 模块
Shodan的stats
模块用于设备状态及版本信息的统计分析。通过--facets
参数,可以指定想要统计的具体信息维度。例如,使用以下命令获取启用SSL/TLS的设备中,不同SSL/TLS协议版本的统计信息:
shodan stats --facets ssl.version has_ssl:true
参数解释
shodan stats
:用于获取统计信息。--facets
:指定统计维度(facet),表示需要获取的特定信息。ssl.version
:统计SSL/TLS协议的版本信息。has_ssl:true
:过滤条件,仅统计启用SSL/TLS协议的设备。
SSL(安全套接层)和TLS(传输层安全协议)用于互联网通信加密保障,以上命令可帮助分析使用不同加密协议的设备数量。
HTTP 高级用法
使用 http.title
搜索网页标题
利用 http.title
关键字,您可以根据网页标题进行搜索,方便查找特定类型的网站。例如:
http.title:"admin panel" # 查找标题中包含 "admin panel" 的网页
使用 http.html
搜索网页内容
通过 http.html
关键字,您可以查找包含特定内容的网页,从而快速定位相关网站。例如:
http.html:"login successful" # 查找网页内容中包含 "login successful" 的网站
使用 http.favicon.hash
搜索网页图标
借助 http.favicon.hash
,您可以根据网页的 favicon 哈希值进行搜索,找到使用相同 favicon 的不同网站。示例:
http.favicon.hash:1234567890 # 查找 favicon 哈希值为 1234567890 的网站
使用 http.waf
筛选特定 WAF
使用 http.waf
关键字,可以筛选使用特定 Web 应用防火墙 (WAF) 的网站。以下是一些示例:
http.waf:"Cloudflare" # 查找使用 Cloudflare WAF 的网站
http.waf:"AWS WAF" # 查找使用 AWS WAF 的网站
http.waf:"safedog" # 查找使用 SafeDog WAF 的网站
使用 http.component
搜索运行特定组件的设备
您还可以使用 http.component
关键字结合端口号来搜索特定组件的设备。例如:
http.component:"nginx" port:80 # 查找运行 Nginx 的设备,并开放 80 端口
其他搜索技巧
使用 net 搜寻网段
通过 net 关键字,您可以精准锁定特定网段内的设备,尤其在教育机构、企业等网络区域明确的环境中更为有效。例如,在教育机构网络中,可以用 net 参数锁定校园网服务器和路由器,快速找到弱点设备。示例:
shodan search --limit 10 --fields ip_str,port net:208.88.84.0/24
使用 org 查找组织资产
org
关键字可用于按组织名称筛选相关 IP 地址,帮助用户聚焦于特定组织的设备。结合 org
和 has_vuln
等参数,可以快速识别目标组织中可能存在安全漏洞的设备,从而提升漏洞检测的精准度。
例如,以下命令用于搜索美国宇航局(NASA)公开的、具有已知漏洞的IP地址:
shodan search org:"NASA" has_vuln:true
利用 API 进行复杂搜索
如果您需要进行更复杂的搜索,Shodan 的 API 能为您提供更灵活的查询选项。以下是使用 Python 进行 Shodan 搜索的示例代码:
import shodan
import json
import time
# Shodan API 密钥
API_KEY = "YOUR_API_KEY"
api = shodan.Shodan(API_KEY)
# 搜索配置
query = 'org:"NASA" ssl:true http.component:"Apache"'
limit = 50 # 设置最大查询结果数
save_to_file = True # 是否将结果保存为文件
# 执行查询并处理结果
try:
print(f"开始执行搜索:{query}")
results = api.search(query, limit=limit)
print(f"共找到 {results['total']} 条匹配结果")
devices = []
# 解析结果并打印关键信息
for result in results['matches']:
device_info = {
"IP": result['ip_str'],
"Port": result['port'],
"Organization": result.get('org', 'N/A'),
"Location": {
"City": result['location'].get('city', 'N/A'),
"Country": result['location'].get('country_name', 'N/A')
},
"Hostnames": result.get('hostnames', []),
"Vulnerabilities": result.get('vulns', []),
"Web Components": result.get('http', {}).get('components', {})
}
devices.append(device_info)
# 打印部分信息
print(f"IP: {device_info['IP']}, Port: {device_info['Port']}, Org: {device_info['Organization']}")
print(f"Location: {device_info['Location']['City']}, {device_info['Location']['Country']}")
print(f"Vulnerabilities: {', '.join(device_info['Vulnerabilities']) if device_info['Vulnerabilities'] else 'None'}")
print(f"Web Components: {device_info['Web Components']}\n")
time.sleep(0.5) # 控制请求频率,避免超出速率限制
# 保存结果到JSON文件
if save_to_file:
filename = "shodan_results.json"
with open(filename, 'w') as file:
json.dump(devices, file, indent=4)
print(f"查询结果已保存到文件:{filename}")
except shodan.APIError as e:
print(f"Shodan API 出错:{e}")
except Exception as e:
print(f"发生错误:{e}")
结语
感谢您阅读本篇文章!如果您对文中内容有任何疑问或建议,欢迎在评论区与我交流!您的点赞和分享将是我继续创作的动力。希望这些技巧能帮助您更有效地利用 Shodan,提升网络安全的研究和分析能力。