2.5 网站关键信息识别

2.5.1 指纹识别

企业或者开发者为了提高开发效率,很多都会使用已有的内容管理系统(CMS),或者在此基础上做二次开发。CMS种类繁多,开发者水平参差不齐,导致CMS漏洞一度成为Web渗透的重灾区。如果渗透目标使用了CMS作为应用模板,通过信息收集进行CMS识别,获取到CMS的版本信息后,就可以通过此CMS存在的漏洞进行攻击,甚至可以到CMS的官网下载对应版本的CMS进行本地白盒代码审计。

除了CMS存在同类攻击以外,使用相同的框架进行应用开发也可能会由于框架本身存在漏洞导致应用受到攻击,使用相同的中间件或者WAF防护设备也有可能会存在类似的攻击。

常见的指纹识别内容有CMS识别、框架识别、中间件识别、WAF识别。CMS识别一般利用不同的CMS特征来识别,常见的识别方式包括特定关键字识别、特定文件及路径识别、CMS网站返回的响应头信息识别等。

1.特定关键字识别

CMS的首页文件、特定文件可能包含了CMS类型及版本信息,通过访问这些文件,将返回的网页信息(如“Powered by XXCMS”)与扫描工具数据库存储的指纹信息进行正则匹配,判断CMS的类型。

1)Powered by XXCMS识别CMS

访问网站的首页,从返回的信息“Powered by DedeCMS”,可以判断此网站使用的CMS是DedeCMS,关键字识别如图2-29所示。

img

图2‑29 关键字识别

2)meta标签中的content字段

通过meta标签中的content字段识别DedeCMS,如图2-30所示。

img

图2‑30 content字段识别DedeCMS

通过meta标签中的content字段识别WordPress,如图2-31所示。

img

图2‑31 content字段识别WordPress

2.特定文件及路径识别

不同的CMS会有不同的网站结构及文件名称,可以通过特定文件及路径识别CMS。WordPress会有特定的文件路径“/wp-admin”“/wp-includes”等,如图2-32所示的WordPress和如图2-33所示的DedeCMS的“robots.txt”文件可能包含了CMS特定的文件路径,与扫描工具数据库存储的指纹信息进行正则匹配,判断CMS的类型。

img

图2‑32 WordPress

img

图2‑33 DedeCMS

访问特定文件“robots.txt”,就会返回相关Disallow信息,通过特定的文件路径“/wp-admin”“/wp-includes”等判断CMS为WordPress。

访问特定文件“robots.txt”,通过特定路径判断此CMS为DedeCMS。

CMS会有一些JS、CSS、图片等静态文件,这些文件一般不会变化,可以利用这些特定文件的MD5值作为指纹信息来判断CMS的类型,如图2-34所示。

img

图2‑34 通过静态文件MD5值判断CMS

3.响应头信息识别

应用程序会在响应头Server、X-Powered-By、Set-Cookie等字段中返回Banner信息或者自定义的数据字段,通过响应头返回的信息,可以对应用进行识别,有些WAF设备也可以通过响应头信息进行识别判断。当然Banner信息并不一定是完全准确的,应用程序可以自定义自己的Banner信息。

响应头信息识别如图2-35所示,访问安全狗WAF的官网,会在响应头的Set-Cookie中返回“wwwsafedog2”的相关信息,通过此信息即可判断WAF设备的指纹信息。另外,响应头中的Server返回的信息是“nginx”,说明使用的是Nginx中间件。

img

图2‑35 响应头信息识别

4.指纹识别工具

指纹识别常用的工具有WhatWeb、Wappalyzer、御剑等。

1)WhatWeb指纹识别工具

WhatWeb是目前最常使用的指纹识别开源工具之一,它使用Ruby编写,可以识别包括内容管理系统(CMS)、博客平台、中间件、JavaScript库、Web服务框架、网站服务器和嵌入式设备等的Web技术。WhatWeb有1800多个插件,每个插件都可以识别不同的内容。WhatWeb还可以识别版本号、电子邮件地址、账户ID、脚本类型、SQL错误等。

WhatWeb可以在其官网“https://www.morningstarsecurity.com/research/whatweb”下载使用,WhatWeb的使用比较简单,在命令后直接加URL即可,WhatWeb也支持复杂参数功能的使用,更多的使用方式可以参考其官网的Wiki介绍,网址为“https://github.com/ urbanadventurer/WhatWeb/wiki”。

使用WhatWeb对目标网站进行指纹识别如图2-36所示,发现使用的是Joomla[1.5]的CMS,然后又通过高级参数的使用发现更准确的版本信息为Joomla[1.5,1.5.19-1.5.22]。

img

图2‑36 使用WhatWeb对目标网站进行指纹识别

2)Wappalyzer指纹识别工具

Wappalyzer是一个开源的跨平台实用程序,可发现网站指纹,能够识别1200多种不同的Web技术。它可以检测CMS系统、Web框架、服务器软件等。

Wappalyzer用JavaScript编写,下载地址为“https://www.wappalyzer.com/download”。它可以作为独立应用程序运行,也可以作为模块包含在较大的应用程序中,Wappalyzer还可以作为插件在浏览器中运行,支持的浏览器有Chrome、FireFox、Edge等。

访问WordPress的官网时Wappalyzer在浏览器中识别出来的指纹信息如图2-37所示。

img

图2‑37 指纹信息

2.5.2 敏感路径探测

敏感路径探测是信息收集非常重要的一部分,通过敏感路径探测可以获取很多由于错误配置而泄露的文件、默认文件、测试文件、备份文件等,这些文件里面可能存在了很多数据库配置、应用程序配置等敏感信息。

常见的敏感路径探测文件有robots文件、phpinfo文件、DS文件、备份文件、上传页面、后台登录页面、sitemap.xml文件、WEB-INF/web.xml文件等。

敏感路径探测主要使用工具探测,比较常用的工具有御剑、BurpSuite、wwwscan等,扫描效果主要取决于使用的字典,当然与工具也有一定关系,比如,有的网站会判断头信息,使用BurpSuite等具有可以自定义HTTP头功能的工具会更准确。

使用BurpSuite可以扫描目录,BurpSuite有Intruder模块,将抓到的数据包的路径设置为变量,将目录文件的字典添加为Payload,然后不断遍历,达到目录暴力破解的目的。

将抓到的数据包的路径设置为变量,如图2-38所示。

img

图2‑38 设置路径为变量

将目录文件的字典添加为Payload,注意将最下面的“Payload-Encoding”去掉对勾,否则可能会将Payload的“/”等特殊字符进行URL编码。Payload参数设置如图2-39所示。

img

图2‑39 Payload参数设置

单击“Start-attack”按钮,遍历完字典中的路径后,对状态进行排序,状态码为200和301的都是真实存在的路径,如图2-40所示。

img

图2‑40 状态码为200和301的路径

2.5.3 互联网信息收集

通过互联网进行信息收集是信息收集的方式之一,互联网信息收集包含历史漏洞信息收集、SVN&GIT信息收集、网盘信息收集等。

1.历史漏洞信息收集

针对攻击目标历史漏洞的查找是攻防渗透中必不可少的工作之一,很多第三方网站历史漏洞会被披露得比较详细,包含完整的漏洞利用过程、漏洞利用完成后可以获取的信息及获取的权限,以此可以判断攻击目标经常出现问题的功能有哪些,通过其描述可能获取其网站真实的物理路径信息、真实IP信息、CMS等重要信息。攻击者甚至还可以通过此历史漏洞点进行再次尝试,如果攻击目标的管理员没有获取相关信息,不知道已经被人攻击,或者收到了相关信息没能及时修复或者直接忽略了此漏洞,攻击者就可以直接利用此历史漏洞发起攻击,或者利用已经上传的后门程序进行攻击。有的管理员可能接到漏洞公告后及时修复了此漏洞或者添加了新的防护策略,攻击者也可以尝试绕过攻击。在实际的攻防中利用历史漏洞进行二次攻击的案例比比皆是。

2.SVN&GIT信息收集

一个软件开发试行后,最关键的问题就是能够有效地实现对软件版本系统的控制,版本控制是项目开发与管理的标准做法,能追踪项目从开始到结束的整个过程,对编程人员而言,版本控制技术是团队协作开发的桥梁,有助于多人同步进行大型程序开发。常用的版本控制工具有SVN和GIT。很多开发人员在进行代码发布时由于操作不规范有可能将整个代码泄露,攻击者利用泄露的代码信息可以进行白盒代码审计,发现存在的漏洞;有的代码中可能会存储连接数据库的配置文件,如果数据库的访问权限没有被严格控制,攻击者就可以通过配置文件中的数据库用户名、密码信息对数据库进行攻击;代码中还可能会存在邮件服务器等其他配置信息,都会造成严重的后果。

1)SVN代码泄露

SVN代码泄露的本质原因是操作不当,例如使用“Checkout”将项目拉到本地时,会在项目目录生成一个名称为“.svn”的隐藏文件,SVN代码泄露如图2-41所示,“.svn”的“pristine”文件夹里包含了整个项目的所有文件备份。若发布代码时直接将整个项目拷贝到网站根目录,并且没有删掉隐藏的“.svn”文件,或直接使用“Checkout”将项目拉到网站根目录发布站点,然后没有删除隐藏的“.svn”文件,都将会导致SVN代码泄露。

img

图2‑41 SVN代码泄露

若想测试目标站点有没有SVN代码泄露,最简单的方式就是直接访问“.svn”,确认其是否存在。如果在测试环境中发布站点时没有删除“.svn”文件,可以直接在目标URL后面加上“.svn”访问,确认是否存在漏洞,发现存在内容也就证明存在SVN代码泄露漏洞,测试目标站点如图2-42所示。

img

图2‑42 测试目标站点

然后可以使用Seay-SVN和SvnExploit等工具利用此漏洞,下面以SvnExploit为例进行介绍。SvnExploit是一款SVN源代码利用工具,支持SVN<1.7版本和SVN>1.7版本的SVN源代码泄露,下载地址为“https://github.com/admintony/svnExploit”。运行命令“python SvnExploit.py -u http://url/.svn/ --dump”可以下载源码,源码存放在当前目录的“dbs”文件夹下,下载源码如图2-43所示。

img

图2‑43 下载源码

2)GIT代码泄露

与Seay-SVN类似,GIT也是一个版本控制软件,导致漏洞产生的主要原因也是操作不当,下面介绍一种导致GIT代码泄露的场景。

先通过一个简单实例来看一下GIT能做什么。下载并安装好GIT后可以先到网站根目录下运行“git init”命令,将当前目录作为GIT仓库,这时会在当前目录生成名为“.git”的隐藏文件,在这里可以认为“.git”文件就是GIT仓库,运行“git add *”命令将所有文件添加到GIT仓库,然后运行命令“git commit -m "注释"”将所有文件提交到仓库,GIT的使用如图2-44所示。

img

图2‑44 GIT的使用

这时若不小心将“index.php”删除了,可以使用GIT回滚,先运行命令“git log”查看日志,然后运行命令“git reset --hard c71694c8c557696606b1742f5964356aaa199cf3”回滚到上一版本,发现“index.php”恢复了,GIT回滚如图2-45所示。

img

图2‑45 GIT回滚

可以发现使用GIT进行版本控制很方便,但是发布网站的时候“.git”文件若没有删除则会导致GIT代码泄露,测试目标站点是否存在GIT代码泄露可以直接访问“.git”文件看其是否存在,测试目标站点GIT泄露如图2-46所示。

img

图2‑46 测试目标站点GIT泄露

然后使用工具GitHack利用此漏洞,GitHack的下载地址为“https://github.com/ lijiejie/GitHack”。运行“python GitHack.py http://url/.git/”命令下载源码,GIT漏洞利用如图2-47所示。

img

图2‑47 GIT漏洞利用

3.网盘信息收集

很多开发或者运维人员的安全意识不够高,为了文件的传输方便将代码或者其他含有敏感信息的文件传输到网盘中,如果将网盘中的文件进行了无密码分享,或者网盘本身存在漏洞,再或者网盘的密码泄露,都有可能导致严重的代码信息泄露,一般通过第三方的网盘搜索网站进行网盘信息收集。