其他
用第三方互联网扫描数据被动排查暴露在公网的主机、端口与服务
在不接触目标的前提下,用 Shodan/Censys 等扫描平台数据查清一个组织暴露在互联网上的资产、端口、服务与设备。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 56/100 ×0.15
适用场景
用第三方互联网扫描数据被动排查暴露在公网特定
解决思路
- 按手上已有的线索选择平台:有 IP 用 Shodan host 查询或免费的 InternetDB 端点;有网段或 ASN 用 Shodan 的 net:/asn: 加端口分面;有 CDN 后面的主机名用 Censys 的证书到主机关联;有证书或特征页面用 favicon hash 和证书 subject/serial 搜索;有组织名用 Shodan 的 org: 或 Censys 的 autonomous_system;对覆盖度存疑时换第二个传感器不同的平台交叉验证。
- 用 Shodan CLI 操作:shodan init <api-key> 初始化;shodan host 203.0.113.10 查单个 IP 的全部已知信息;shodan search --fields ip_str,port,org,hostnames 'ssl.cert.subject.CN:example.com' 搜索;shodan count 'net:203.0.113.0/24' 做不消耗结果额度的计数;shodan stats --facets port,org 'net:203.0.113.0/24' 看网段形态;shodan download results.json.gz 'asn:AS64500 port:3389' 下载;shodan parse --fields ip_str,port,product results.json.gz 解析。
- 对单个 IP 用免费无鉴权接口:curl -s https://internetdb.shodan.io/203.0.113.10 | jq . 获取 ports、hostnames、cpes、vulns。
- 掌握 Shodan 常用过滤器:net:、port:、hostname:、asn:、org:、isp:、country:、city:、product:、version:、os:、http.title:、http.html:、http.status:、http.favicon.hash:、ssl.cert.subject.CN:、ssl.cert.issuer.CN:、ssl.cert.expired:、ssl.jarm:、ssl:、tag:、vuln:、has_screenshot:,以及 before:/after: 限定扫描日期;注意 vuln: 等需要付费档位。
- 用 Censys 的结构化字段路径语法(services.port、services.service_name、services.http.response.html_title、services.tls.certificates.leaf_data.subject_dn、dns.names、autonomous_system.asn、location.country)配合 and/or/not 组合查询;API v2 用 https://search.censys.io/api/v2/hosts/search?q=… 和 https://search.censys.io/api/v2/hosts/{ip},以 API-ID/secret 做 basic auth。
- 当 Shodan 和 Censys 查不到时,再试 FOFA、ZoomEye、Netlas、Onyphe、BinaryEdge、LeakIX,它们索引的互联网切片不同,非西方扫描器尤其能覆盖前两家遗漏的主机。
- 解读结果时逐条检查扫描时间戳:Shodan 记录带时间戳,Censys 带 last-observed 时间;不同端口和地址空间的复扫频率不同,记录可能已过期数天甚至数月,报告时写“observed on <date>”而不是“is”。
- 区分观测事实与自述信息:开放端口和 TLS 证书是观测事实;产品名和版本来自主机自己发送的 banner,可能撒谎,也可能因发行版回补补丁但未改版本号而不准。
- 把 CVE 标签当作推断而非结论:它来自版本字符串与漏洞库的匹配,只是报告线索,绝不等于可利用性确认,回补修复会让它在两个方向上频繁出错。
- 注意记录中的主机名来自反向 DNS 和证书,可能属于该 IP 的前一个租户。
- 用 favicon hash 做横向扩展:Shodan 索引站点 favicon 的 MurmurHash3(对 base64 编码的图标字节计算,FOFA 的 icon_hash 构造相同),因为 favicon 通常随应用发布而非按主机配置,搜这个 hash 能找到所有运行同一设备、框架或目标自有门户的主机,跨越无关的 IP、ASN 和域名,是找同一产品散落实例的最佳手段。
- 用 TLS 证书做横向扩展:搜索证书的 subject CN、subject organization 或 serial number,找到所有提供该证书的主机;证书 serial 对每个签发者唯一,serial 匹配几乎是精确身份;Shodan 也提供证书指纹过滤器,先查文档确认它期望哪种哈希,不要猜。
- 用 JARM 和 TLS 栈指纹聚类:JARM 对服务器在一组 TLS 握手下的响应做哈希,指纹的是 TLS 栈而非证书,可聚类设备、负载均衡器和 C2 框架;它不唯一对应某个组织,只作为缩小搜索范围的过滤器,不是标识符。
- 用响应体指纹搜索:从目标页面取一个独特字符串(跟踪 ID、异常版权行、自定义 header、构建哈希),用 http.html: 搜索,找到其他提供同一应用的主机,包括 staging 副本和 CDN 背后的源站。
- 找 CDN 背后的源站,按可靠性排序的被动路径:1) 在 CDN 的 ASN 之外搜索目标的 TLS 证书,源站常直接提供真实证书;2) 搜索独特的 HTTP body 字符串或 favicon hash 并过滤掉 CDN ASN;3) 从 who-owns-this-domain 读采用 CDN 之前的历史 DNS,源站迁移频率比人们以为的低;4) 检查设计上绕过代理的服务:MX 主机、ftp、cpanel、direct、origin,以及同一网段上的非 HTTP 端口;5) 读 SPF 的 ip4: 机制,组织会授权自己的发信主机,有时就是 Web 源站。
- 把候选源站当作假设:用目标的 Host 头发请求确认属于对目标的主动操作,需要授权;且配置正确的源站会拒绝非 CDN 流量,确认失败并不能否定候选。
- 警惕数据陈旧的双向影响:关闭的端口可能在扫描时是开的,开放的端口可能此后已关闭;没有结果不等于没有服务,扫描器并不覆盖每个地址的每个端口。
- 识别蜜罐污染:故意暴露的诱饵会抬高有趣服务的结果数;迹象包括单主机上不合理的服务组合、极大量的开放端口、多个无关产品都用默认 banner、托管在研究导向的网段;Shodan 在 https://api.shodan.io/labs/honeyscore/{ip}?key= 提供 honeyscore 估计,只当提示而非定论。
- 意识到目标可以反制扫描器:扫描器源地址是公开的,防御方可以专门对它们返回伪造 banner,高价值目标有时会这么做。
- 不要把 org: 和 isp: 当作所有权:它们是网络注册信息,在云网段上指向云厂商,在转售空间上指向转售商;仅凭 org: 归因会把邻居暴露的数据库报成目标的。
- 注意共享主机和共享 IP:一个 IP 可能服务数百个无关站点,那里的端口和漏洞属于该主机,不一定属于你的目标。
- 处理截图和 banner 中的个人数据:暴露的仪表盘和摄像头索引的是真实的人,一旦保存就成为数据保护问题。
- 记住平台之间会互相矛盾,且各免费档位都有截断:单平台搜不到只说明一个传感器网络没看到。
- 按置信度分级:已确认暴露 = 同一 IP 同一端口上的同一服务出现在两个独立扫描平台,或同一平台跨多个扫描日期出现,且该 IP 通过目标可证明控制的证书或按名称重新分配给目标的网段与目标绑定;可能 = 在通过 favicon hash、body 字符串匹配或反向 DNS 关联到目标的 IP 上的单次近期观测,或跨平台匹配但未独立确认所有权的 IP;未确认 = 仅靠 org:/isp: 归因、共享主机 IP、单条陈旧记录、无其他证据的 CVE 标签,或具有蜜罐特征的主机。
- 绝不通过连接服务来提升置信度等级;为每条发现记录平台、查询语句、扫描时间戳和记录标识符。
- 参考已完成的示例流程:目标 example-fintech.test 的 apex 解析到 Cloudflare,于是从 find-hidden-subdomains 取证书 subject CN 并搜索提供它的主机,得到三个命中(两个 Cloudflare 地址、一个欧洲托管商 ASN 中开放 443 和 22 的主机,后者是可能的源站);把它的 favicon hash 反查得到另外六台主机,四台是目标的区域门户,两台是无关公司(该 favicon 是框架自带的通用图标),说明在把 hash 匹配当归因前要先确认 favicon 是否真的独特;对源站 /29 做 net: 查询发现第二台主机开放 3306 且有 MySQL banner(四个月前扫描,可能已消失但可作为观测报告);该网段的 RIR 记录显示重新分配给了目标的法定名称,这才把“有正确证书的 IP”变成归因;到此为止,不要连接 3306,不要向源站发送 Host 头,把两者连同日期和查询一起报告,并把重新分配的网段交回 who-owns-this-domain。
- 遵守法律与 ToS:查询扫描平台是合法的被动研究;对结果采取行动才是界线——连接暴露的数据库、打开管理面板、查看暴露的摄像头画面、从开放共享中取文件,在多数司法管辖区可能构成计算机滥用法下的未授权访问,没有密码不是抗辩理由;发现只授权你报告(给 RIR 记录中的滥用联系人或相关 CERT),仅此而已;扫描平台条款也限制数据再分发,报告中引用发现而非重新发布数据集;含个人数据的截图和 banner 适用 ETHICS.md 中的最小化规则。
适用边界 · 注意事项
- 需要确认目标当前实时状态时——扫描数据都是过去的快照,且扫描器不覆盖每个地址的每个端口,没有结果不等于服务不存在。
- 需要主动验证或利用发现时——连接暴露的数据库、管理面板、摄像头或开放共享可能构成未授权访问,且用 Host 头确认源站属于对目标的主动操作,需先获授权。
- 仅凭 org:/isp: 字段或共享主机 IP 做资产归因时——这些是网络注册信息而非所有权,云网段指向云厂商、转售空间指向转售商,共享 IP 上的端口和漏洞不一定属于目标。