一、概述
Web框架指纹识别是信息收集过程中的一个重要任务。获悉目标框架的类型必然为测试人员带来极大的优势,如果该框架在之前就被测试过。测试人员不仅可以获得未修补版本中存在的漏洞,还可以了解此框架中特有的错误配置以及已知的文件结构。从而使指纹识别过程显得格外重要。
二、测试方法
黑盒测试
可以查找几个最常见的位置来确定当前框架:
1、HTTP 头 2、cookies 3、HTML源代码 4、特殊文件和文件夹
1、HTTP 头
最基本识别web框架的方式是查看HTTP响应报头中的X-Powered-By字段。许多工具可以用来识别目标的指纹,最简单一个是netcat。
如:
X-Powered-By: Mono //web应用框架是Mono
2、cookies
更可靠的方法是查看HTTP请求包(注意是请求包)特有的Cookies,如:
Cookie: CAKEPHP=sidfiwhefjdcsfowjoef; //web应用框架是CakePHP
常见cookies中可识别框架:
框架 | cookie名 |
Zope | zope3 |
CakePHP | cakephp |
Kohana | kohanasession |
Laravel | laravel_session |
3、HTML 源代码
查看HTML注释、某框架特有的路径、特有的脚本变量等信息。
这些信息大多放在<head> </head>标记之间,<Meta>标记内部、或者页面尾部。
HTML源码中可识别框架:
常见的特征 |
%framework_name% |
powered by |
built upon |
running |
特有的特征
框架 | 关键字 |
Adoble ColdFusion | <!-- START headerTags.cfm |
Microsoft ASP.NET | __VIEWSTATE |
ZK | <!-- ZK |
Business Catalyst | <!-- BC_OBNW --> |
Indexhibit | ndxz-studio |
4、特有文件和目录
每个不同的框架都有特有的文件和目录。在渗透测试过程中,建议测试人员自己搭建相应框架以便更好的理解框架的基础结构,并确定服务器上的遗留文件。
三、加固措施
建议使用多种工具测试并查看日志,从而知道哪些工具可以使得攻击者识别出Web框架。
HTTP头: 检查配置、禁用或混淆所有可能泄露所用技术的HTTP头。
Cookies: 建议通过修改相应的配置文件来改变Cookie名称。
HTML源代码: 删除暴漏框架信息的可视标记、移除不需要的注释、移除Meta和作者标签、css和js脚本文件不存储在与框架有关的文件夹内、页面上禁止使用默认脚本。
特有的文件和目录: 删除服务器上所有不必要和不使用的文件、使用404错误响应来限制从外部访问其他文件。