用途
该技能用于在渗透测试过程中,系统化地利用 Shodan 作为侦察工具。它覆盖 Shodan 网页界面、命令行界面(CLI)、REST API、搜索过滤器、按需扫描以及网络监控能力,目标是发现暴露的服务、存在漏洞的系统与 IoT 设备。
主要能力
- 主机侦察:查询单个 IP 的详细信息,包括主机名、国家、组织、开放端口等;使用 honeyscore 判断主机是否为蜜罐。
- 搜索查询:支持基础关键词搜索、带过滤器的搜索、结果计数、结果下载与解析。
- 搜索过滤器:涵盖网络(ip、net、hostname、port、asn)、地理(country、city、state、postal、geo)、组织(org、isp)、服务/产品(product、version、os、http.title、http.html、http.status、ssl.cert.subject.cn、ssl)、漏洞(vuln、has_vuln)、截图(has_screenshot、screenshot.label)等类别。
- 按需扫描:提交扫描、监控扫描状态、下载扫描结果、列出可用扫描协议。
- 统计与分析:获取搜索结果统计,支持自定义 facets 并导出 CSV。
- 网络监控:通过网页界面设置监控,添加 IP、范围或域名,配置通知服务与触发事件。
- REST API 与 Python 库:直接调用 API 端点,或使用 shodan Python 库进行搜索与主机查询。
使用方式
前置条件包括:Shodan 账户(免费或付费)、从账户面板获取的 API Key、目标信息(IP、域名或网络范围)、已安装的 Shodan CLI(基于 Python),以及对目标网络进行侦察的书面授权。
安装与初始化:
pip install shodan
# 或
easy_install shodan
# 在 BlackArch/Arch Linux 上
sudo pacman -S python-shodan
shodan init YOUR_API_KEY
shodan info
常用命令示例:
shodan host 1.1.1.1
shodan honeyscore 192.168.1.100
shodan search apache
shodan search --fields ip_str,port,os smb
shodan search product:mongodb
shodan count openssh
shodan download results.json.gz "apache country:US"
shodan parse --fields ip_str,port,hostnames results.json.gz
shodan scan submit 192.168.1.100
shodan scan list
shodan stats nginx
REST API 调用示例:
curl -s "https://api.shodan.io/api-info?key=YOUR_KEY" | jq
curl -s "https://api.shodan.io/shodan/host/1.1.1.1?key=YOUR_KEY" | jq
curl -s "https://api.shodan.io/shodan/host/search?key=YOUR_KEY&query=apache" | jq
Python 库示例:
import shodan
api = shodan.Shodan('YOUR_API_KEY')
results = api.search('apache')
host = api.host('1.1.1.1')
适用场景
- 组织侦察:查找属于目标组织的所有主机,统计其基础设施分布,下载并解析详细数据。
- 漏洞服务发现:查找受特定 CVE 影响的主机(如 BlueKeep、Log4j),查找未授权暴露的 Elasticsearch 等。
- IoT 设备发现:查找暴露的摄像头、工业控制系统、打印机、智能家居设备等。
- SSL/TLS 证书分析:按证书主题、过期状态、自签名等条件搜索。
- 网络范围评估:对 /24 等网段进行搜索、端口分布统计、漏洞查找与数据导出。
- 自动化:使用 Python 脚本对组织进行侦察并汇总 IP、端口与产品信息。
限制
操作边界:速率限制为每秒 1 个请求;扫描结果为异步,不会立即返回;非企业版无法在 24 小时内重复扫描同一 IP;免费账户信用额度有限;部分数据需要付费订阅。
数据新鲜度:Shodan 持续爬取,但数据可能已有数天或数周;按需扫描可提供当前数据但消耗信用额度;历史数据需付费计划。
法律要求:仅对已授权目标进行侦察;被动侦察通常合法但需确认司法管辖区;主动扫描(scan submit)需要授权;需记录所有侦察活动。
信用额度:基础搜索(无过滤器)不消耗查询信用;带过滤器搜索每次消耗 1 查询信用;下载 100 条结果消耗 1 查询信用;生成报告消耗 1 查询信用;扫描 1 个 IP 消耗 1 扫描信用;网络监控消耗取决于计划。
常见问题:未配置 API Key 需运行 shodan init;查询信用耗尽可使用无过滤器查询或等待重置;主机近期被爬取需等待 24 小时;速率超限需在请求间添加 time.sleep(1);搜索结果为空需检查语法或放宽条件;下载文件无法解析需验证格式并重新下载。