1.4 渗透测试的具体方法
为了让读者直观地理解上述内容,下面来看一个渗透测试案例。
1.明确目标
明确目标是整个渗透测试实施的基础,通过与客户沟通后确定渗透测试的目的以及范围,有时客户会提供完整、明确的目标范围,但多数情况下客户所提供的渗透测试范围并不完善,仅仅是给了一个主站域名,本案例就是这样。
2.信息搜集
信息搜集得完善与否将会严重影响后续渗透测试的速度与深度。要搜集的信息主要包括目标的IP地址、网段、域名和端口。
当拿到渗透测试目标的域名后,首先,我们需要判断域名是否存在CDN(Content Delivery Network,内容分发网络),主要解决因传输距离和不同运营商节点造成网络速度性能低下的问题。说得简单点,就是设置一组在不同运营商之间的对接节点上的高速缓存服务器,把用户经常访问的静态数据资源(例如静态的html、css、js图片等文件)直接缓存到节点服务器上,当用户再次请求时,会直接分发到离用户近的节点服务器上响应给用户,当用户需要数据时,才会从远程Web服务器上响应,这样可以大大提高网站的响应速度及用户体验。
案例公司的网站主服务器部署在A地,当有一个用户在B地进行访问的时候,由于B地与A地的地理位置差距较大,便会造成网站可用性降低。此时,若是使用了CDN的服务,CDN的中心服务器便会将在A地的网络主站服务器的内容,通过中心平台下发到距离B地较近的CDN服务器中,当B地的用户需要访问此网站服务时,通过域名去访问将会访问到CDN的服务,而CDN将会把相应服务器中网站的内容发送给B地的用户,这样挑选离用户更加靠近的服务器进行内容分发,将会大大地提高网站的可用性。
现阶段,大型网站多数都使用了CDN服务。判断目标网站是否使用了CDN服务将会减少不必要的资源浪费。因为当目标是公司的真正网站时,如果没有分辨出真实网站与CDN,将会造成后续的渗透测试全部实施到了CDN服务器,而没有真的渗透到客户的网站。而判断目标网站是否使用了CDN,可以使用在线的网站http://ping.chinaz.com/实现,通过该网站对域名进行监测,因为CDN的主要目的是将内容分发到网络,所以如果目标网站使用了CDN,那么在不同的地理位置去ping网站域名所得到的IP地址必然是不一样的,如图1-2所示。
图1-2 CDN监测
如果查询出来的IP地址数量大于一个时,说明这些IP地址并不是真实的服务器地址。当查询出来的是2~3个IP地址,同时这2~3个IP地址属于同一个地址的不同运营商时,很可能这2~3个IP地址都是服务器的出口地址,而该服务器部署在内网中,使用了不同运营商的映射进行互联网访问。如果IP地址有多个,并且分布在不同的地区时,基本可以确定网站就是使用了CDN的服务。
如何绕过CDN来获取网站的真实IP信息呢?大致有如下几个步骤:
1)通过内部邮箱来获取网站真实IP。大多数情况下,邮件服务系统都是部署在公司内部的,并且没有经过CDN的解析,可以通过目标网站的邮箱注册或者订阅邮件等功能,让网站的邮箱服务器给自己的邮箱服务器发送邮件。查看邮件的原始邮件头,其中会包含邮件服务器的IP地址,如图1-3所示。
图1-3 邮件头
2)查看域名的历史解析记录。当目标网站的域名使用时间较长时,可能在目标网站刚刚使用的时候并没有绑定CDN的服务,CDN的服务是后来加上的。那么在DNS服务器的历史解析记录中就可能存在目标网站服务器未使用CDN时的真实IP地址,可以通过EXAMPLE网站(https://dnsdb.io/zh-cn)进行查询,如图1-4所示。
3)子域名地址查询。CDN的服务收费并不算便宜,所以有许多站长出于省钱的目的,只会为网站的主站和部分流量较大的子站购买CDN的服务,而目标网站服务器可能有许多细小子站或者旁站与目标网站服务器部署在同一台机器或者C段网段上,这时只需要知道子站或者旁站的IP地址,就可以猜解出网站的真实IP地址。
4)国外地址访问。国内的CDN服务主要是针对国内的用户访问进行服务,对于国外的访问,则没有多少国内CDN服务商会进行服务。由此,我们通过使用国外的服务器或地址访问目标网站服务,便可得到真实的目标IP地址。也可以使用以下的国外在线代理网站(见公众号链接1-1)进行检测,如图1-5所示。
图1-4 DNS解析记录
图1-5 外国地址访问
5)主域名查询。以前,CDN使用者习惯只对WWW域名使用CDN,优点是这样使用CDN的服务,在维护网站时会更加方便,不需要等待CDN的缓存。所以也可以试一试将目标网站服务器的WWW去掉,直接ping网站,查看IP是否有变化。
6)Nslookup查询。通过查询域名的NS、MX、TXT记录,有可能找到真实的目标网站IP地址。NS记录是指域名服务器的记录,用来指定域名由哪台服务器进行解析,使用命令nslookup-qt=ns xxx.com。MX记录mail服务的权重值,当mail服务器先对域名进行解析时,会查找MX记录,找到权重值较小的服务器进行连通,使用命令nslookup-qt=mx xxx.com。TXT记录一般是为某一条记录设置说明,使用命令nslookup-qt=txt xxx.com。
搜集完网站的真实IP后,还需要对网站域名的whois信息进行搜集。whois是用来记录域名注册的所有者信息的传输协议。换句话说,whois就是用来记录所查询的域名是否已经被注册了,记录了注册域名的详细信息,如域名所有人、域名注册商等。whois的查询方法可以通过命令行接口进行查询。现在出现了一些网页接口简化的线上查询工具页面(网址为http://whois.chinaz.com/),能够一次向不同的数据库进行查询,如图1-6所示。
图1-6 whois查询
当我们确定了目标客户公司的具体信息时,可以去网络上查询与该公司有关的信息,如公司的邮箱、邮箱格式、公司员工姓名、公司人员配置等任何与之相关的信息。同时,也可以到GitHub、码云等互联网代码托管平台查找与之相关的敏感信息。人是一个组织中最薄弱的环节,会有一些粗心的程序员或其他员工将公司的代码上传后,没有做脱敏处理,导致已上传的代码可能包含数据库连接信息、密码,甚至网站源代码等信息。
如果目标网站系统并非自主研发的,就很有可能是使用了一些CMS建站系统,如phpcms、eshop、wordpress、dedecms、disuz、phpweb、dvbbs、thinkphp等构建的。对网站进行指纹识别,将会识别出网站所使用的CMS信息。利用搜集到的CMS信息可以去查找相关的历史漏洞。进行指纹识别可使用下面的网站(网址为http://www.yunsee.cn/finger.html),如图1-7所示。
图1-7 指纹识别
3.漏洞探测
在搜集完需要的信息之后就可以进行下一步操作:漏洞探测。漏洞探测的目的是找出可能存在的漏洞,然后进行分析验证。一般是通过自动扫描工具结合人工操作以及之前所搜集的信息去挖掘漏洞。现今使用得比较广泛的漏洞扫描工具有AWVS(Acunetix Web Vulnerability Scanne)、NESSUS、AppScan等。
·AWVS是一款较知名的漏洞扫描工具,通过网络爬虫来测试网站的安全性,监测安全漏洞,使用也较为简单。
·NESSUS是一款全球使用人数非常多的系统漏洞扫描和分析软件,提供了完整的主机漏洞扫描服务,且随时更新漏洞数据库,具有家用版本和商用版本。
·AppScan安装在Windows系统上,可以对网站等Web应用进行自动化漏洞扫描和安全测试。
4.漏洞验证
漏洞探测完成后需要进行漏洞验证,验证所发现的漏洞是否真实存在,对于目标网站系统能够造成多大的危害。在这个过程中需要做到小心谨慎,对于可能造成的危害较大的漏洞,要防患于未然,有条件时最好在本地搭建一个与实际环境相同的环境进行验证,以免给客户造成经济损失。也可以利用公开的资源,例如,在乌云镜像站中查找对应的历史漏洞进行分析。在在线网站里查找乌云知识库镜像(见公众号链接1-2)或者自己动手搭建一个乌云镜像站(见公众号链接1-3),如图1-8所示。还可以通过Google Hacking进行搜索,或者查看厂商的预警漏洞的验证。
图1-8 乌云镜像站
验证确实存在漏洞后,再进行信息分析,需要分析漏洞位置以及如何利用,分析相同漏洞的案例,然后进行精准测试。在此过程中可能会遇到网站安全防护机制,如防火墙、杀毒软件等的拦截,需要绕过此类安全防护软件再进行进一步的利用。漏洞利用成功后就打开了目标网站服务的缺口,进而获得所需信息,即前期沟通包含的内容,如网络架构、域控服务器等信息。
至此,一次完整的渗透测试基本告一段落,后续需要进行信息整理,包括整个渗透测试的思路、分析、成果,并编写成渗透测试报告,给客户提出针对漏洞的修复意见和办法。