0x00 引言
在云服务器使用场景越来越多的当下,目标在单个云服务商甚至多个云服务商购买多个云服务器组建内网的情况屡见不鲜,常规通过C段信息收集进行渗透的方式经常不适用。目标公网IP分布极为松散,可能出现在一个或者多个B段上面。如何在已有一个权限的情况下,将内网IP与公网IP进行对应,是笔者在渗透过程中遇到的一大难点。
0x01 SSH指纹
首次通过SSH连接一台服务器时,SSH服务返回其指纹信息,如果确认指纹信息无误,该指纹将保存到~/.ssh/know_hosts中, 服务器IP与指纹一一对应;第二次访问SSH服务时,SSH客户端将对比返回的指纹与~/.ssh/know_hosts是否一致,一致就顺利连接,否则警告可能遭遇到中间人攻击。
图中的 SHA256:5iKUxsMvL5eg****K6eRBQ3MEiu7X7HH0 即 ECDSA 指纹 Hash. 注意到这个值的特殊性,大概率是全球唯一值,因此若目标开放SSH服务到公网,这个值极有可能被网络空间搜索引擎抓取,从而可以利用这个Hash检索出其公网IP.
0x02 利用
获取Hash值,考虑到上述SSH命令获取方式需要交互式shell,在某些场合不太适用,因此可以用ssh-keyscan获取该值:
ssh-keyscan -t ECDSA -p 22 *.*.*.* | ssh-keygen -E sha256 -lf -
计算SHA256,注意到该Hash的编码方式去掉了最后的"="号,需要补足
echo '5iKUxsMvL5egXRs****iu7X7HH0''=' | -d | xxd -p -c 100
目前 Censys.io (https://search.censys.io/data) 支持对该 Sha256 Hash进行直接检索,搜索语法为
services.ssh.server_host_key.fingerprint_sha256=e62294c6c32f2f****2bbb5fb1c7d
成功检索到该Hash对应的公网IP:
0x03 总结
适用场景:
- 已有一个权限,需要获取该权限所在内网IP与公网IP对应关系;
- 适用于公有云环境,且SSH服务暴露在外网,可以无限制访问。
防御方式:
- 严格限制访问SSH服务器的源IP地址;
- SSH更换默认22端口至非常用端口。
本篇文章出自雨笋教育黄院长分享的技术好文,感兴趣的欢迎转发关注!