网络资产信息收集主要是针对目标服务器IP地址进行端口扫描、服务识别、漏洞扫描等操作,IP地址来源可以根据本章2.2节、2.3节中所讲的方法获得。
不同的端口提供不同的服务。得到目标计算机开放的端口情况,也就了解了目标计算机提供哪些服务。端口检测是为了识别服务。进行端口扫描最好的方式是使用Nmap。
Nmap全称为Network Mapper,最早是Linux下的网络扫描和嗅探工具包。其基本功能有三个,一是探测一组主机是否在线;二是扫描主机端口,探查其所提供的网络服务;三是推断主机所用的操作系统。Nmap允许用户自行定制扫描策略,还可以将Nmap所有探测结果记录到各种格式的日志中,便于进一步分析操作。
在Kali Linux中,打开终端,执行“nmap f5.ink”命令,进行端口扫描,如图2-17所示。
(注意:本例中f5.ink为测试靶机,是笔者的个人服务器,因此可以进行扫描。扫描属于攻击行为,严禁未经授权扫描他人的服务器!)
图2-17 Nmap扫描
通过扫描可以看到,该靶机开放的端口及对应的服务。这个示例使用“nmap f5.ink”进行扫描。系统默认是对常见的端口进行扫描,如果需要进行全端口扫描,可以使用参数“-p 1-65535”进行指定。
C段是指子网掩码为255.255.255.0的IP地址段,例如IP地址为1.1.1.100的C段地址,其范围为1.1.1.1到1.1.1.254,注意C段与C类网络不同。
C段扫描需要首先确定资产,再进行全端口扫描。因为对未授权的单位进行渗透属于违法行为,所以如需进行C段扫描,需要先扫描Web服务对应的80(HTTP)端口,然后根据扫描到的Web服务查看网站是否属于授权单位资产范围。如果属于授权单位资产范围,再进行全端口扫描;如果不属于授权单位资产范围,则停止下一步的渗透测试。
可以使用C段扫描工具httpscan对80端口进行扫描,使用命令如下:python3 httpscan.py-t ip,如图2-18所示(-httpscan.zip)。
切记:在未授权的情况下禁止扫描!
图2-18 C段扫描
通常,一个服务器会开放不止一个服务供用户使用,有时企业为了方便远程调度资源,还可能会在服务器上安装例如VPN、代理、管理平台入口点等服务。
在端口检测一节中我们讲到,不同的端口对应了不同的服务,所以通过扫描出的开放端口的情况,可以初步猜测出端口对应的服务类型。但是对于一些比较敏感的服务,通常不会使用常见端口,所以需要进行全端口扫描。而在全端口扫描的过程中,只能确定是否开启端口,无法知晓具体运行的是什么服务,因此还需进一步对服务进行确定。可以借助“nmap f5.ink-sV”命令的-sV参数,实现服务识别功能,如图2-19所示。
图2-19 服务识别
Web应用信息包括:CMS信息、框架信息、应用开发的语言、后台地址、网站弱口令等。Web应用信息收集并不会对服务器发送攻击流量,可以理解为正常的访问,只不过是从访问的流量包中提取出关键信息。但如果使用脚本进行信息收集,脚本请求频率过高时,会对服务器造成“DDoS攻击”。
接下来将详细介绍这几种Web应用信息收集。
1.CMS信息收集
CMS是Content Management System的缩写,意为“内容管理系统”,它是企业信息化建设和电子政务的新宠,是一个相对较新的应用系统。对于CMS,业界还没有一个统一的定义,不同的机构对此有不同的解释。
针对CMS的信息收集又称作“指纹识别”。在Web渗透测试过程中,Web指纹识别是信息收集环节中一个比较重要的步骤,通过一些开源工具对CMS系统进行检测,判断其是公开CMS还是进行了二次开发的CMS,这是至关重要的。借此能够准确地获取CMS类型、Web服务组件类型及版本信息,这些信息可以帮助测试者快速有效地验证已知漏洞。有了目标的CMS信息,就可以利用相关漏洞进行概念验证测试、代码审计等。
测试者可以利用What CMS网站进行在线识别。下面以WordPress CMS和Discuz CMS的官方网站为例说明其做法,这两个CMS都是业内主流网站建设的CMS,这两个CMS的官方网站也是使用其自身CMS搭建的,在官网网页的底部可观察到其标识信息,如图2-20所示。通过对这两个CMS官网进行识别,可以检验CMS在线识别网站识别的准确性。
图2-20 Discuz官网底部标识
在线网站What CMS识别出Discuz,如图2-21所示。
图2-21 在线识别
在线网站What CMS识别出WordPress,如图2-22所示。
图2-22 CMS在线识别网站识别WordPress
2.框架信息识别
从上述示例中可以看到,利用What CMS能够成功识别CMS类型,但是无法识别Shiro、Struts2、Spring等框架。
例如,以下笔者个人搭建的测试用靶机,其框架为Shiro。利用What CMS进行识别的结果为:Java、Nginx,但是却没有识别出框架类型,如图2-23所示。除了Shiro,Struts2、Spring等框架也很难被识别。
图2-23 CMS在线识别网站未能识别框架
在这种情况下,通过在线网站进行框架识别的方式就行不通了,并且目前也没有非常有效能识别出框架类型的开源工具。比较有效的方法是通过框架自身的一些特征对框架进行识别。以下是一些框架特征,仅供参考。
· Shiro框架特征。
Apache Shiro是一个强大且易用的Java安全框架。
向一个网站发送请求数据包,如果在返回数据包中带有rememberMe参数说明是Shiro框架。测试方法为,发送rememberMe=1,因为Shiro会校验rememberMe的值,当校验结果错误时就会返回“rememberMe=deleteMe”。在返回的数据包中如果看到rememberMe参数这个Shiro特征,则说明是Shiro框架,如图2-24所示。
图2-24 rememberMe值
· Struts2框架特征。
Apache Struts是一个免费的开源MVC框架。
Struts2的特征比较隐晦,常见的判断的方法有三种:
第一种是需要根据响应数据包的头部信息得到Struts2版本,从而确定其为Struts2框架;
第二种是Struts2框架的网站在URL中可能带有portal,例如http://xxx.xxx/portal/index这种形式,可以根据这一特征进行判断;
第三种是Struts2后缀可能为do、action等,可以根据这些后缀进行判断。
当判断出网站框架类型可能为Struts2后,再利用针对性的检测工具进行框架识别。这里介绍的工具是struts2_check(-struts2_check-master.zip),使用命令为“python struts2_hunt_v2.py URL链接”(URL链接为需要检测的目标)。
以一个URL中带有portal的网站为例。根据URL中带有portal这一特征,可以判断出该网站使用的框架可能为Struts2,于是利用struts2_check工具对其进行针对性检测。使用命令“python struts2_hunt_v2.py http://xxxx/portal/”进行识别。运行命令后,检测到返回success标志,如图2-25所示,即可证明该网站使用框架为Struts2。
图2-25 识别出Struts2框架
· Spring框架特征。
Spring是目前非常受欢迎的Java框架之一。
Spring的特征也比较难发现,可以通过默认404页面来判断。“Whitelabel Error Page”为默认的Spring404页面,如图2-26所示。
图2-26 Spring404页面
关于在识别出框架后如何进行漏洞利用的内容,我们会在第3章中详细描述,这里读者只需要先掌握如何收集这些信息。确定这些Web应用信息,有助于在后续渗透测试中进行有针对性的漏洞利用。
3.后台地址收集
在Web应用信息收集中,除了需要识别CMS、识别框架外,得到网站的后台地址也同样重要。当测试者用获得的一些管理员信息生成密码字典,同时知道后台登录路径时,就可以尝试通过爆破管理员的密码登录后台。利用Burp Suite中的Intruder密码爆破模块,可以实现管理员登录的用户名密码爆破。
接下来以FeiFeiCMS为例,演示测试者从获取后台地址到爆破出管理员密码,实现后台登录的全过程。
首先,利用dirsearch工具扫描网站的后台地址(-dirsearch-master.zip)。将dirsearch工具包下载解压缩后,需要先进入文件夹中安装该工具所需的Python依赖库,命令为“python3-m pip install-r requirements.txt”,如图2-27所示。
图2-27 安装dirsearch需要的依赖库
在Python依赖库安装完成后,即可使用该工具进行目录扫描。执行“python3 dirsearch.py-u"http://10.2.2.4/"”命令,如图2-28所示。
图2-28 dirsearch目录扫描
通过扫描结果可以发现疑似后台登录的地址:/admin.php,如图2-29所示。
图2-29 发现后台地址
打开后台地址,需要管理员登录,如图2-30所示。这时如果测试者能够爆破出管理员密码,就能够成功登录后台。
图2-30 后台页面
使用Burp Suite抓取登录的流量包,如图2-31所示,尝试进行密码爆破。
图2-31 抓取流量
选择“Send to Intruder”,将抓取到的流量发送到Intruder(爆破)模块,如图2-32所示。
图2-32 发送到Intruder模块
选择Intruder|Positions选项,在Positions模块中选择需要爆破的位置后,单击“Add”按钮,对密码进行爆破,如图2-33所示。
图2-33 设置爆破位置
接着在“Payloads”模块中,选择Top1000弱口令密码本爆破密码(-top1000_pass words.txt),选择完成后单击“Start attack”按钮开始爆破测试,如图2-34所示。
图2-34 开始爆破测试
在爆破的结果中发现一个“Status”状态码和“Length”响应数据包长度与其他爆破结果都不同的值“admin888”,如图2-35所示,猜测其可能为正确密码。
图2-35 爆破成功
于是尝试用账号“admin”、密码“admin888”进行登录,并成功登录后台,如图2-36所示。
图2-36 登录后台
在这个案例中,测试者通过目录扫描发现后台地址,再通过常见的弱口令或者通过目标信息收集生成的社会工程学字典进行密码爆破,最终登录后台。可见信息收集在渗透测试过程中的重要性,因此做好信息收集能够让渗透测试事半功倍。
漏洞扫描是指基于漏洞数据库,通过扫描等手段对指定的计算机系统进行安全脆弱性的检测,最终发现可利用漏洞的一种安全检测(渗透测试)行为。
可以利用漏洞扫描器Goby进行漏洞扫描(-goby-win-x64-1.8.230.zip)。
打开Goby界面,输入扫描范围,如图2-37所示。这里我们是对测试靶场的C段进行扫描的。这里的C段是从前期的信息收集中已经确定的渗透资产范围,如果所渗透资产范围的IP地址并不连续,那么逐行添加IP地址即可。在端口一栏中选择“全端口”扫描,这个扫描过程大概会持续半小时。
图2-37 Goby界面
扫描完成后得到了Goby的扫描结果,如图2-38所示。
图2-38 Goby扫描结果
选择扫描结果中的漏洞部分,可以看到Goby工具检测出的所有漏洞,如图2-39所示,同时Goby提供了利用漏洞直接执行命令的功能。
图2-39 漏洞检测
选择一个漏洞,执行“whoami”命令进行验证,发现回显成功,如图2-40所示。说明命令执行漏洞存在,并且可以执行相关命令。根据whoami的结果“root”判断出这是一个Linux操作系统。
图2-40 漏洞验证
除了利用Goby工具进行漏洞扫描外,还可以通过已知的产品名称搜索可能存在的漏洞,再去对这些漏洞逐一尝试,如图2-41所示。
图2-41 漏洞资料网站
Google Hacking,有时也被称为Google Dorking,是一种利用谷歌搜索的高级使用方式进行信息收集的技术。这个概念最早在2000年由黑客Johnny Long提出并推广,一系列关于Google Hacking的内容被他写在了 Google Hacking For Penetration Testers 一书中,并受到媒体和大众的关注。在极客大会DEFCON 13的演讲中,Johnny创造并使用了“Googledork”这个词,指的是“被Google透露了信息的愚蠢、无能的人们”。这是为了使人们注意到,用户的信息能被搜索到并不是Google的问题,而是用户自身在安装程序时无意识的错误配置造成的。
随着时间的推移,“dork”这个词成为了“定位敏感信息的搜索”这个行为的简称。Google Hacking常用语法有site、intitle、inurl、filetype等,其他比较冷门的语法读者可以自行深入了解。
· 用“site”操作符可以在特定的网站中指定搜索内容,比如搜索site:apple.com,返回的内容就只会是apple.com这个域名或者其子域名下的内容。
· 用“intitle”操作符可以搜索网页的标题,标题指的是在HTML中的title标签的内容。比如搜索intitle:"Index of"会返回所有title标签中含有关键字短语“Index of”的搜索结果。
· 用“inurl”操作符可以搜索网页URL中包含指定关键字的内容。
·“filetype”操作符用来指定文件类型,也就是指定搜索文件的后缀名。比如搜索filetype:php,将会返回以php为结尾的URL。此操作符往往会与其他高级操作符配合使用,以达到更精确的搜索结果。
例如,如果需要查找关于某企业目录遍历的网站,那么可以利用“谷歌语法”格式进行搜索,如图2-42所示。
图2-42 谷歌语法搜索
在搜索结果中可以找到存在目录遍历的网站,如图2-43所示。
图2-43 存在目录遍历
网络空间搜索引擎能够爬取互联网上所有联网的资产信息,并采集端口服务信息内容,同时还能用“模糊识别”方式找到存在漏洞的网站。主流的搜索引擎有Shodan、ZoomEye、SUMAP、FOFA等。
1.Shodan
Shodan是互联网上一款功能强大的搜索引擎,如图2-44所示。与谷歌不同的是,Shodan不是在网上搜索网址,而是直接进入互联网背后的通道。每个月Shodan都会在大约5亿个服务器上日夜不停地收集信息,一刻不停地寻找所有和互联网关联的服务器、摄像头、打印机、路由器等设备。
Shodan通过扫描整个互联网上的网络资产收集大量信息,包括端口的Banner内容。Shodan可以搜索的内容包含:报文头、报文体。
图2-44 Shodan
2.ZoomEye
ZoomEye的中文名为“钟馗之眼”,如图2-45所示。它是一款网络空间搜索引擎。ZoomEye部分地借鉴了Shodan的设计思想。在ZoomEye上线后,很多人将ZoomEye称为中国版的Shodan,但实际上ZoomEye和Shodan还是存在差别的:ZoomEye侧重于Web层面的网络资产发现,而Shodan则侧重于主机层面的资产发现。
图2-45 ZoomEye
3.SUMAP
SUMAP(如图2-46所示)全称为“全球网络空间超级雷达”。整体SUMAP项目包括:SUMAP大数据搜索平台、SUMAP探测引擎、SUMAP漏洞扫描引擎、基于机器学习模型的智能资产标签化管理等。SUMAP每日都会进行数据更新,实时同步最新探测内容,做到数据联动。
图2-46 SUMAP
4.FOFA
FOFA(如图2-47所示)是一款网络空间资产搜索引擎。它能够帮助用户迅速进行网络资产匹配、加快后续工作进程,例如进行漏洞影响范围分析、应用分布统计、应用流行度排名统计等。
图2-47 FOFA
我们以SUMAP为例演示网络空间搜索引擎的使用。用SUMAP搜索:“data:‘大学’”,如图2-48所示,就可以检索出所有含有“大学”的网站。
图2-48 SUMAP使用
其他搜索引擎的语法,读者可以根据各网站提供的查询语法功能具体学习。