文章结构
0x00 Preface [前言/简介]
0x01 为什么要实现Web指纹识别
0x02 Web指纹识别的常规应用
0x03 web指纹识别的目标
0x04 指纹识别方式和对应缺陷
按获取元数据方式划分
按照识别特征方式划分
0x05 指纹识别工具对比与推荐
0x06 Whatweb超级增强版介绍
0x07 whatweb超级增强版的使用
0x08 关于指纹插件的可持续发展
0x09 总结与获取
我本次选择解决这个痛点,。
指纹识别是渗透测试时影响漏洞发现超级重要的一环,其最终目标是为了快速和准确的发现服务器的应用软件信息,从而根据这些信息发现站点所存在的漏洞。
根据被识别对象的不同,指纹是被一般分为主机系统指纹识别、端口服务指纹识别、web应用指纹识别等,基本原理都是基于响应中的不同特征进行判断。
本文主要是对Web指纹识别这一常用需求进行针对性的概述和实现可持续的开放性解决方案。
1 通过指纹识别软件判断应用软件的信息,针对不同的版本信息去开放的漏洞数据库查找相应版本的漏洞进行测试
2 当挖掘到某个应用系统存在的0day漏洞时,可以添加该站点的特征指纹,当下一次遇到时,能够更快的拿下目标系统
服务器容器信息 IIS、nginx等
中间件信息 Weblogic、Tomcat等
开发语言信息 Java、PHP、Aspx等
前端框架信息 Vue.js、Html5 等
后端开发框架 Struts2、ThinkPHP、SpringBoot等
CMS应用信息 通达OA、万户OA、教务系统等
waf防火墙信息 AnYu、安全狗等
数据库服务 Mysql、MSSQL、Oracle等
服务器操作系统 Linux、Windows等
其他信息 代理缓存、登录认证需求等
其中数据库服务、操作系统、其他信息等信息需要综合实际情况判断,精确度较其他选项更低,所以web指纹识别更多是实现web服务区到web防火墙这个范围的信息。
和日常最常见的指纹锁一样,所有的指纹识别原理都是获取不同对象的指纹、再利用不同指纹特征的差异性来实现的。
web应用指纹的识别,和其他主机指纹识别、端口协议指纹识别、差异性原理原则上是相同的。
在不能够实现跨协议层次的降维打击时,我们往往只是在WEB层对目标应用请求和响应进特征匹配。
按获取元数据的方式分为:
主动访问,
通过主动向页面发送请求获取响应报文,从其中获取关键的特征信息,从而判定是否属于某个web组件。
被动获取,
在用户浏览网页的过程中被动的获取响应报文,从其中获取关键的特征信息,从而判定是否属于某个web组件。
常见的指纹识别工具都是通过主动访问获取、如Whatweb、TideFinger等
常见浏览器指纹识别插件都是采用被动方式获取、如Wappalyzer、WhatRuns等
主动识别是一个不断请求并匹配的过程,这个过程中需要额外向目标服务器发送很多的请求消息,动静很大,并且随着指纹的增多还会变得十分缓慢。
被动识别插件运行时,不会额外发送请求数据,仅识别当前浏览页面所在的特征信息,会存在很多的遗漏信息。
渗透测试的过程中,往往是使用被动识别插件进行初步识别、再使用主动识别的工具进行轮询特征URL进行主动识别。
轮询过程中会发送大量请求,如何去减少请求次数、在最少的请求次数中匹配出指纹数据,是判断指纹识别工具是否好用的一个度量。
目前主要的解决方案:
1、优先匹配高权重的指纹。
这个权重可以由频率和资产重要性组成。一般为匹配成功的次数。如tidesec
2、被动识别与主动识别结合
先对目标页面进行一次访问,对其响应进行被动规则的匹配。当某些规则匹配成立后,再对可能存在的应用的URL和指纹进行主动访问及匹配。如whartweb
3、多次访问网站拥有的URL
通过对网站页面链接进行爬取,再逐个匹配其中的响应,由于是使用爬虫模拟真实的访问操作,所以一般不会被站点的安全设备所监听,同时也能够更精确的判断应用指纹。如Go语言实现Wappalyzer。
获取到服务器的响应数据后,就需要对响应数据进行指纹匹配,指纹匹配往往是由多种方式集合而成的,在准确性和匹配速度中各有取舍。
按照识别特征的方式分为:
关键字识别,
主要匹配响应包中是否存在某个关键字,常见的有正则匹配、关键字匹配
Hash值识别,
主要匹配响应包中的内容的hash值是否和指纹中的hash值相同,能够非常准确的进行指纹匹配。目前主要由常见的md5 hash和Fofa等搜索工具使用的mmh3 hash两种实现。其中mmh3比md5计算起来更快,md5在历史遗留的指纹规则中更广泛。
扩展的URL和状态码匹配:
主要匹配针对特定URL的进额外的行主动请求是否返回正确的响应状态。由于精确度比较大,往往与其他规则匹配规则一起使用,提高匹配精确度。
扩展的匹配位置选项:
匹配位置选项主要是为了缩小匹配的范围,加快指纹匹配的速度。一般可分为仅响应头范围、仅响应体范围、所有响应范围。
其他匹配方式-算法辅助:
除了以上一些相对明显精确的特征外,还可以使用数学算法来计算各种同款服务器响应行为的相似度用来辅助判断服务器的信息。如httprint
其他匹配方式-图像识别:
对网站的特定图标形状进行识别,由于其牵扯的技术含量更高,计算资源消耗更高、目前没有看到可行的自动化实现方案,更多是肉眼与经验的识别。
各种识别方式的特征计算难度和准确度都有不同程度上的问题,如:
关键字匹配更加的宽泛,也导致识别结果也更加的粗略。
hash匹配更加的精准,但是如果页面存在任何修改都会导致识别出错。
一个好的指纹识别工具,往往需要多种识别方式组合,再依靠个人的经验和测试做决断,才能够更好的识别出一个应用信息。
工具只是思路的一种实现,每一种思路都有其优点和缺点。
不是一定要固定为使用某个工具,而是需要考虑这个工具是否完美实现了自己的想法。
指纹识别的核心是特征库,只有足够的特征才能满足渗透工作中的日常所需。
研究了大量指纹识别工具的资料、最后统计出以下几种带有指纹库的识别工具,并最终选择基于whatweb实现痛点的解决:
Wappalyzer插件
Wappalyzer浏览器插件能够快速识别一个网站用到的前后端技术框架、运行容器、脚本库、还可以检测内容管理系统,电子商务平台,Web框架,服务器软件,分析工具等。其由企业进行长期的维护,并且公开了指纹规则。
Wappalyzer的缺陷:
1、目前已有的指纹库更多是以全球的角度去搜集的,所以针对国内的指纹数据较少,查看指纹规则发现新增指纹也比较复杂。
2、适用被动识别方式进行识别,没有主动识别方式精确,但是与目标服务器交互少。
TideFinger
TideFinger是一个由TideSec编写的python2指纹识别工具,汲取整合了多个web指纹库,结合了多种指纹检测方法,让指纹检测更快捷、准确。
TideFinger在编写合并了大量的指纹规则、优化了提高效率的识别方式。
缺陷是指纹后续很少有进行维护,目前最新的web指纹库还是cms_finger_2019.05
httprint
httprint是一个利用响应中的微小差别进行指纹识别的技术,通过运用统计学原理,组合模糊的逻辑学技术,能很有效的确定Http服务器的类型。
httprint目前已经没有人员进行维护,并且没有发现其开源的代码和算法信息,但这并不影响我们对其的使用。因为Httprint会自动将计算Http指纹信息保存在一个文档里,当发现那些没有在数据库中的指纹信息时,我们可以手动将Http指纹信息加入指纹数据库,下一次就能够自动识别目标服务器了。
httprint的缺陷是只适用于是被服务器和容器的信息,对cms应用等信息没有办法精确精确识别。
whatweb
Whatweb 是一个开源的网站指纹识别软件,能识别的指纹包括 cms 类型、博客平台、网站流量分析软件、javascript 库、网站服务器,还可以从响应中提取版本号、邮箱地址、账户 id、web 框架模块等。支持所有常规类型的匹配规则、并且拥有极强的扩展性。其由开源社区进行长期的维护,拥有1800+多个稳定的规则。
whatweb的缺陷:
1、Whatweb 是基于 ruby 语言开发,在国内了解的人较少,安装新的运行环境也比较麻烦。
2、目前已有的指纹库更多是以全球的角度去搜集的,所以针对国内的指纹数据较少。
根据插件扩展性、匹配规则支持、知名度来选择,我最终选择而来whatweb作为我的指纹识别工具
缺陷1:特征标记【已完善】
whatweb作为一个知名度较高的开源指纹识别工具,其请求头中拥有特定的标志。需要进行修改,使其默认支持动态的请求方式。
缺陷2:运行环境【已完善】
whatweb是使用ruby开发的指纹识别工具,在国内基本Windows的情况下,很少用拥有ruby环境的工程师。因此需要将其封装为一个可执行的文件。
增强1:功能增强【已完善】
在识别特征的方式中提到,目前的部分指纹识别工具也支持mmh3 hash。而whatweb本身仅支持md5的方式,我对其修改实现了mmh3 hash识别方式。
使用方式和md5规则完全一样,会添加:md5规则,就会添加:mmh3规则。
增强2:功能修复【已完善】
另外,测试过程中发现github上最新版的whatweb0.55有bug,
md5值计算出来与实际的md5值不同,对此也进行了修复。
增强3:指纹库增强【已完善】
指纹识别的核心是特征库,只有足够的特征才能满足渗透工作中的日常所需。因此除了whatweb自带的指纹以外,我基本覆盖了所有公开指纹库,转换为指纹识别工具的指纹库,并对所有同名插件,进行了合并处理,对相似名称插件进行了初步分析和合并
【目前全部指纹库5000+】
主要合并了以下工具的指纹库:
tidesec所有指纹-已合并
wappalyzer指纹-已合并
Ehole+Finger+Fscan+glass红队指纹-已合并
WAF指纹识别规则-已合并
常规使用
whatweb http://XXX.com -p WhatWebPathplugins-all
whatweb http://XXX.com -p WhatWebPathplugins-all -a 4
whatweb http://XXX.com -p WhatWebPathplugins-all -a 3
使用tips
可以在目标URL中添加and 1=1 ,/etc/passed等信息用来识别waf
whatweb http://XXX.com?/etc/passed -p WhatWebPathplugins-all
使用方式完全和whatweb是一样的,建议查看以下使用方法。
这是一个需要持续性发展的项目,个人的力量没有办法做到像专业企业一样支持后续的指纹库运维,需要大家一个努力,(提交指纹或者提交站点)
指纹插件如何编写:
方式1:查看whatweb指纹编写说明书,或者随便打开一个插件进行参考编写。
方式2:发送需要添加指纹的系统名称和测试站点给我。【保密测试站点】
后续也会在实际使用过程中对指纹进行增、删、改、优。
本团队任何实战都是经过授权的、任何技术及文件也仅用于学习分享,请勿用于任何非法、违法活动,如有违背请自行承担后果,感谢大家的支持!!!
END
本文始发于微信公众号(NOVASEC):痛点重谈-Web指纹识别与解决方案
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论