这篇文章是在2021年中旬记录的,提到了平安夜p牛的直播中对渗透测试的讨论。为了避免遗漏重要信息并忘记测试某些部分,渗透测试最好有一个检查清单。同时,使用检查清单还可以方便地利用自己喜欢的编程语言进行自动化。我突然想起了这篇关于信息收集的文章,所以我想分享一下。
-
获取真实IP
为了保证网络的稳定和快速传输,网站服务提供商会在不同位置设置节点服务器,并通过CDN(内容分发网络)技术将网络请求分发到最佳节点服务器上。如果网站启用了CDN加速,就无法通过域名获取真实IP。为了收集目标的真实IP信息,需要绕过CDN查询其真实IP。 -
判断是否使用CDN
在收集目标IP信息之前,首先要确定目标网站是否启用了CDN。一般可以通过不同地方的主机使用ping域名和nslookup域名解析两种方法来判断。通过查看返回的IP是否多个来判断网站是否使用了CDN。如果返回的IP信息是多个不同的IP,那么可能使用了CDN技术。
使用ping域名判断是否使用CDN
直接使用ping域名来判断,如果返回的回显地址是cname.vercel-dns.com,很明显使用了CDN技术。
使用不同主机ping域名判断是否使用CDN
如果自己在多个地方都有主机可以ping域名,就可以根据返回的IP信息进行判断。互联网上有很多公开的服务可以进行多地ping来判断是否使用了CDN。
使用nslookup域名解析判断是否使用CDN
通过系统自带的nslookup命令对域名进行解析,如果Name字段直接指向cname.vercel-dns.com,那么显然使用了CDN技术。
- 绕过CDN获取真实IP
查询子域名
由于CDN加速需要支付费用,很多网站只对主站进行CDN加速,而子域名没有进行CDN加速。子域名可能与主站位于同一服务器或同一C段网络中。可以通过查询子域名的IP信息来辅助判断主站的真实IP信息。
查询历史DNS记录
通过查询与IP绑定的历史DNS记录,有可能发现之前的真实IP信息。常用的第三方服务网站有:
使用国外主机请求域名
部分国内CDN加速服务商只对国内线路进行CDN加速,而国外线路没有加速。可以通过国外主机来探测真实的IP信息。探测方式有两种,一种是利用已有的国外主机直接进行探测;另一种是利用公开的多地ping服务(其中包括国外的探测节点),利用国外探测节点返回的信息来判断真实的IP信息。
网站信息泄露漏洞
利用网站存在的漏洞和信息泄露,可以获取真实的IP信息。例如,在phpinfo页面中,有一个SERVER_ADDR字段会显示主机的真实IP。另外,通过利用目标网站的邮箱注册、找回密码或RSS订阅等功能,接收到的邮件中查看邮件源码,也可以获得目标的真实IP。
目标网站APP应用
如果目标网站有自己的App,可以尝试使用Burp Suite等流量抓包工具来捕获App的请求,可能会找到目标的真实IP。
- 旁站查询(IP反查)
旁站是指与攻击目标位于同一服务器上的不同网站。在获取目标的真实IP的情况下,如果攻击目标没有可利用的漏洞,可以通过查找旁站的漏洞攻击旁站,然后通过提权获取服务器的最高权限,进而攻击目标。
旁站信息收集也称为IP反查,主要有以下方式:
使用Nmap扫描获取旁站信息,使用命令对目标IP进行全端口扫描,确保识别到每个可能开放的端口服务。
使用第三方服务获取旁站信息,如在线网站和搜索引擎等。
可以利用搜索引擎语法来实现查询,如使用bing或fofa等。
- C段主机查询
C段主机是指与目标服务器位于同一C段网络的服务器。攻击目标的C段存活主机是信息收集的重要步骤,许多企业的内部服务器可能位于同一C段网络中。在很难找到攻击目标服务器互联网漏洞的情况下,可以通过攻击C段主机获取对C段主机的控制权,进入企业内网。在企业的内网安全隔离和安全防护不如互联网防护健全的情况下,可以通过C段主机进行内网渗透,绕过互联网的防护,对目标进行攻击。但是这种攻击方式容易偏离目标。
使用Nmap扫描C段,使用命令nmap -sn x.x.x.x/24,对目标IP的C段主机进行存活扫描,根据扫描结果可以判断目标IP的C段还有哪些主机存活。
使用搜索引擎语法收集C段信息,如使用Google等。
使用本地C段扫描工具,其中一些工具不仅限于C段扫描。
- 子域名查询
子域名是父域名的下一级,例如blog.zjun.info和tools.zjun.info是zjun.info的子域名。一般来说,企业对主站域名的应用有较完善的防护措施,无论是应用本身的漏洞发现和修复,还是安全设备相关的防护都更及时和到位。而企业可能有多个、几十个甚至更多的子域名应用,由于子域名数量较多,企业子域名应用的防护可能没有主站及时。当攻击者在主站域名找不到突破口时,可以进行子域名的信息收集,然后通过子域名的漏洞进行迂回攻击。子域名信息收集主要包括枚举发现子域名、搜索引擎发现子域名、第三方聚合服务发现子域名、证书透明性信息发现子域名、DNS域传送发现子域名等方式。
枚举发现子域名
子域名收集可以通过枚举的方式进行,需要一个好的字典,字典中包含常见子域名的名称,增加枚举的成功率。常用的子域名暴力破解工具有:
搜索引擎发现子域名
使用搜索引擎语法,如Google或百度等。
第三方聚合服务发现子域名
使用第三方聚合平台,如Netcraft、Virustotal、ThreatCrowd、DNSdumpster和ReverseDNS等,获取子域名信息。
证书透明性信息发现子域名
证书透明性(Certificate Transparency,CT)是Google的一个公开项目,通过让域名所有者、CA和域名用户审查SSL证书的发行和存在,来纠正基于证书的威胁。可以利用证书透明性进行域名信息收集,一般使用CT日志搜索引擎进行域名信息收集。
本地工具:使用本地工具进行子域名查询。
-
端口扫描
最常用的工具是nmap,其次可能还会使用masscan。常见端口及对应服务可以参考端口表。 -
目录探测
在信息收集中,目录扫描是一个重要的步骤,可以帮助我们获取网站的测试页面、后台地址、常见第三方高危组件路径等信息。但是目前大多数网站都有云WAF、主机防护等,对于频繁访问的IP会进行封禁处理。对于云WAF,找到网站的真实IP是非常关键的,其他情况下,可以修改开源工具代码,利用IP代理池或控制访问频率的方式进行探测。
常用的目录扫描工具有:
IP代理池推荐:
- 指纹识别
常见的指纹识别内容包括CMS识别、框架识别、中间件识别和WAF识别。CMS识别一般利用不同CMS的特征来识别,常见的识别方式包括特定关键字识别、特定文件和路径识别以及CMS网站返回的响应头信息识别等。
服务器信息收集可以利用nmap进行服务版本识别和操作系统信息识别。
CMS识别的目的是方便利用已公开的漏洞进行渗透测试,甚至可以下载对应版本的CMS进行本地白盒代码审计。
特定关键字识别:通过访问特定文件,如首页文件和特定文件,可以获取包含CMS类型和版本信息的网页信息,并与扫描工具数据库中的指纹信息进行正则匹配,判断CMS类型。
特定文件和路径识别:不同的CMS会有不同的网站结构和文件名称,可以通过特定文件和路径识别CMS。例如,WordPress会有特定的文件路径,如/wp-admin和/wp-includes等。有些CMS的robots.txt文件也可能包含CMS特定的文件路径,可以与扫描工具数据库中的指纹信息进行正则匹配,判断CMS类型。
指纹识别工具:常用的指纹识别工具有:
-
Google hacking
通过使用Google搜索引擎的高级搜索语法,可以发现一些敏感信息和漏洞。这种技术被称为Google hacking。 -
社会工程学信息收集
主要是收集目标企业单位的关键员工、供应商和合作伙伴等相关信息。通过社会工程学,可以了解目标企业的人员组织结构,并通过分析人员组织结构,判断关键人员并对其进行社会工程学鱼叉式钓鱼攻击。收集到的相关信息还可以进行社会工程学库查询或制作字典,用于相关应用系统的暴力破解。
whois信息:通过whois命令或在线工具查询域名的IP和所有者等信息。
- 社会工程学
社会工程学收集的信息包括网络ID(现用和曾用)、真实姓名、手机号码、电子邮箱、出生日期、身份证号码、银行卡、支付宝账号、QQ号码、微信号码、家庭地址、注册网站(贴吧、微博、人人网等)等信息。在目标相关网页中可能存在招聘信息、客服联系等,可以利用招聘或客服聊天的方式进行钓鱼攻击或植入木马。
搜集到相关的人员信息后,可以制作社会工程学字典,有在线或本地工具可用。
除了制作社会工程学字典进行暴力破解外,还可以使用已知信息进行社会工程学库查询。由于涉及敏感信息,不提供链接,但在Telegram等软件中有大量免费或付费的社会工程学查询工具。
最后,补充一个信息收集在线工具集合网站: