文档章节

2019测试指南-web应用程序安全测试(二)指纹Web应用程序框架

猪鼻子插葱
 猪鼻子插葱
发布于 03/04 10:00
字数 3007
阅读 20
收藏 0

Web框架[*]指纹识别是信息收集过程的重要子任务。如果这样的框架已经被渗透测试人员测试过,那么了解框架的类型可以自动提供很大的优势。它不仅是未修补版本中的已知漏洞,而且框架和已知文件结构中的特定错误配置使得指纹识别过程如此重要。


几种不同的供应商和Web框架版本被广泛使用。有关它的信息对测试过程有很大帮​​助,也可以帮助改变测试过程。这些信息可以通过仔细分析某些常见位置得出。大多数Web框架在这些位置都有几个标记,可以帮助攻击者发现它们。这基本上是所有自动工具所做的事情,他们从预定义的位置寻找标记,然后将其与已知签名的数据库进行比较。为了更好的准确性,通常使用几种标记。


[*]请注意,本文不区分Web应用程序框架(WAF)和内容管理系统(CMS)。这样做是为了方便在一章中指纹它们。此外,这两个类别都被引用为Web框架。

 

测试目标

定义使用的Web框架的类型,以便更好地理解安全测试方法。

 

如何测试

黑盒测试

要定义当前框架,需要查看几个最常见的位置:

  • HTTP标头
  • 饼干
  • HTML源代码
  • 特定文件和文件夹
  • 文件扩展名
  • 错误信息

HTTP标头

识别Web框架的最基本形式是查看HTTP响应头中的X-Powered-By字段。许多工具可用于指纹目标。最简单的是netcat实用程序。

请考虑以下HTTP请求 - 响应:

$ nc 127.0.0.1 80
HEAD / HTTP / 1.0

HTTP / 1.1 200好的
服务器:nginx / 1.0.14
日期:星期六,2013年9月7日08:19:15 GMT
Content-Type:text / html; charset = ISO-8859-1
连接:关闭
变化:接受编码
X-Powered-By:单声道

X-Powered-By字段中,我们了解到Web应用程序框架很可能是Mono。然而,尽管这种方法简单快速,但这种方法在100%的情况下都不起作用。通过适当的配置可以轻松禁用X-Powered-By标头。还有一些技术允许网站对HTTP标头进行模糊处理(请参阅#Remediation一章中的示例)。


因此,在同一个示例中,测试人员可能会错过X-Powered-By标头或获得如下答案:

HTTP / 1.1 200好的
服务器:nginx / 1.0.14
日期:星期六,2013年9月7日08:19:15 GMT
Content-Type:text / html; charset = ISO-8859-1
连接:关闭
变化:接受编码
X-Powered-By:血,汗和眼泪


有时,有更多的HTTP标头指向某个Web框架。在以下示例中,根据来自HTTP请求的信息,可以看到X-Powered-By标头包含PHP版本。但是,X-Generator标头指出使用的框架实际上是Swiftlet,这有助于渗透测试人员扩展他的攻击向量。执行指纹识别时,请始终仔细检查每个HTTP标头是否存在此类泄漏。

HTTP / 1.1 200好的
服务器:nginx / 1.4.1
日期:星期六,2013年9月7日09:22:52 GMT
内容类型:text / html
连接:保持活力
变化:接受编码
X-Powered-By:PHP / 5.4.16-1~dotdeb.1
到期日:1981年11月19日星期四08:52:00 GMT
缓存控制:无存储,无缓存,必须重新验证,后检查= 0,预检查= 0
Pragma:没有缓存
X-Generator:金丝燕

 

饼干

另一种类似且以某种方式更可靠的方法来确定当前的Web框架是特定于框架的cookie。

请考虑以下HTTP请求:

Cakephp cookie.png


已自动设置 cookie CAKEPHP,它提供有关正在使用的框架的信息。常见cookie名称列表在#Cookies_2章节中介绍。限制是相同的 - 可以更改cookie的名称。例如,对于选定的CakePHP框架,可以通过以下配置完成(摘自core.php):

/ **
* CakePHP会话cookie的名称。
*
*请注意会话名称的准则:“会话名称引用
* Cookie和网址中的会话ID。它应该只包含字母数字
*字符。“
* @link http://php.net/session_name
* /
Configure :: write('Session.cookie','CAKEPHP');


但是,与X-Powered-By标头的更改相比,这些更改的可能性更小,因此可以认为这种方法更可靠。

 

HTML源代码

此技术基于在HTML页面源代码中查找某些模式。通常人们可以找到很多信息,这有助于测试人员识别特定的Web框架。其中一个常见的标记是直接导致框架公开的HTML注释。更常见的是,可以找到某些特定于框架的路径,即指向特定于框架的css和/或js文件夹的链接。最后,特定的脚本变量也可能指向某个框架。


从下面的屏幕截图中,可以通过上述标记轻松了解所使用的框架及其版本。注释,特定路径和脚本变量都可以帮助攻击者快速确定ZK框架的实例。

Zk html source.png


更频繁地,此类信息放在<head> </ head>标记之间,<meta>标记中或页面末尾。然而,建议检查整个文档,因为它可用于其他目的,例如检查其他有用的注释和隐藏字段。有时,Web开发人员并不关心隐藏有关所用框架的信息。仍然有可能在页面底部偶然发现这样的事情:

Banshee bottom page.png

文件扩展名

URL可能包含文件扩展名。文件扩展名还可以帮助识别Web平台或技术。

例如,OWASP正在使用PHP

    https://www.owasp.org/index.php?title=Fingerprint_Web_Application_Framework_(OTG-INFO-008)&action=edit§ion=4

以下是一些常见的Web扩展和技术

  • php - PHP
  • aspx - Microsoft ASP.NET
  • jsp - Java Server页面

错误信息

共同框架

饼干

骨架 Cookie名称
Zope的 zope3
CakePHP的 CakePHP的
Kohana的 kohanasession
Laravel laravel_session

 

HTML源代码

一般标记

 %framework_name%
供电
建立在
赛跑

 

特定标记

骨架 关键词
Adobe ColdFusion <! - START headerTags.cfm
Microsoft ASP.NET __VIEWSTATE
ZK <! - ZK
业务催化剂 <! - BC_OBNW - >
Indexhibit ndxz工作室

 

特定文件和文件夹

每个特定框架的特定文件和文件夹都不同。建议在渗透测试期间安装相应的框架,以便更好地了解所呈现的基础结构以及服务器上可能留下的文件。但是,已经存在几个好的文件列表,一个很好的例子是可预测文件/文件夹的FuzzDB单词列表(http://code.google.com/p/fuzzdb/)。

 

工具

下面列出了一般和众所周知的工具。还有许多其他实用程序,以及基于框架的指纹识别工具。

 

WhatWeb

网站:http : //www.morningstarsecurity.com/research/whatweb
目前市场上最好的指纹识别工具之一。包含在默认的Kali Linux版本中。语言:用于指纹识别的Ruby匹配用于:

  • 文本字符串(区分大小写)
  • 常用表达
  • Google Hack数据库查询(有限的关键字集)
  • MD5哈希
  • URL识别
  • HTML标记模式
  • 用于被动和激进操作的自定义ruby代码


示例输出显示在下面的屏幕截图中:

Whatweb-sample.png

 

BlindElephant

网站:https ://community.qualys.com/community/blindelephant
这个伟大的工具基于静态文件校验和的版本差异原则,从而提供非常高质量的指纹识别。语言:Python

成功指纹的示例输出:

pentester $ python BlindElephant.py http:// my_target drupal
Loaded /Library/Python/2.7/site-packages/blindelephant/dbs/drupal.pkl包含145个版本,478个差异化路径和434个版本组。
在http:// my_target上为drupal版本启动BlindElephant指纹 

点击http://my_target/CHANGELOG.txt
文件产生不匹配。错误:检索到的文件与已知指纹不匹配。527b085a3717bd691d47713dff74acf4

点击http://my_target/INSTALL.txt
文件产生不匹配。错误:检索到的文件与已知指纹不匹配。14dfc133e4101be6f0ef5c64566da4a4

点击http://my_target/misc/drupal.js
基于结果的可能版本:7.12,7.13,7.14

点击http://my_target/MAINTAINERS.txt
文件产生不匹配。错误:检索到的文件与已知指纹不匹配。36b740941a19912f3fdbfcca7caa08ca

点击http://my_target/themes/garland/style.css
基于结果的可能版本:7.2,7.3,7.4,7.5,7.6,7.7,7.8,7.9,7.10,7.11,7.12,7.13,7.14

...

指纹识别导致:
7.14


最好的猜测:7.14

 

Wappalyzer

网站:http: 
//wappalyzer.com Wapplyzer是一款Firefox Chrome插件。它仅适用于正则表达式匹配,除了要在浏览器上加载的页面之外不需要任何其他内容。它完全在浏览器级别工作,并以图标的形式给出结果。虽然有时会出现误报,但在浏览页面后立即使用哪些技术构建目标网站的概念非常方便。


插件的示例输出显示在下面的屏幕截图中。

OWASP-wappalyzer.png

 

参考

白皮书

 

整治

一般建议是使用上述几种工具并检查日志,以更好地了解攻击者确切地帮助披露Web框架的内容。通过在更改隐藏框架轨道后执行多次扫描,可以实现更高级别的安全性并确保自动扫描无法检测到框架。以下是框架标记位置和一些其他有趣方法的一些具体建议。

 

HTTP标头

检查配置并禁用或混淆所有披露技术使用信息的HTTP标头。这是一篇关于使用Netscaler进行HTTP-header混淆的有趣文章:http: //grahamhosking.blogspot.ru/2013/07/obfuscating-http-header-using-netscaler.html

 

饼干

建议通过更改相应的配置文件来更改cookie名称。

 

HTML源代码

手动检查HTML代码的内容并删除明确指向框架的所有内容。

一般准则:

  • 确保没有透露框架的可视标记
  • 删除任何不必要的评论(版权,错误信息,特定框架评论)
  • 删除META和发电机标签
  • 使用公司自己的css或js文件,不要将它们存储在特定于框架的文件夹中
  • 如果必须使用默认脚本,请不要在页面上使用默认脚本或对其进行模糊处理。

 

特定文件和文件夹

一般准则:

  • 删除服务器上任何不必要或未使用的文件。这意味着文本文件也公开了有关版本和安装的信息。
  • 限制对其他文件的访问,以便在从外部访问时实现404响应。这可以通过修改htaccess文件并在那里添加RewriteCond或RewriteRule来完成。下面介绍两个常见WordPress文件夹的此类限制的示例。
RewriteCond%{REQUEST_URI} /wp-login\.php$ [OR]
RewriteCond%{REQUEST_URI} / wp-admin / $
RewriteRule $ / http:// your_website [R = 404,L]


但是,这些并不是限制访问的唯一方法。为了使该过程自动化,存在某些特定于框架的插件。WordPress的一个例子是StealthLogin(http://wordpress.org/plugins/stealth-login-page)。

 

其他方法

一般准则:

  • 校验和管理这种方法的目的是击败基于校验和的扫描仪,而不是让它们通过哈希来公开文件。通常,校验和管理有两种方法:
    • 更改这些文件的放置位置(即将它们移动到另一个文件夹,或重命名现有文件夹)
    • 修改内容 - 即使稍微修改也会产生完全不同的哈希值,因此在文件末尾添加单个字节不应该是一个大问题。
  • 控制混乱

    一个有趣而有效的方法,涉及从其他框架添加虚假文件和文件夹,以欺骗扫描仪和混淆攻击者。但要小心不要覆盖现有的文件和文件夹,并打破当前的框架!

© 著作权归作者所有

猪鼻子插葱
粉丝 1
博文 44
码字总数 172746
作品 0
崇明
高级程序员
私信 提问
2019测试指南-web应用程序安全测试(一)

什么是Web应用程序安全测试? 安全测试是通过有条不紊地验证和验证应用程序安全控制的有效性来评估计算机系统或网络的安全性的方法。Web应用程序安全性测试仅侧重于评估Web应用程序的安全性。...

猪鼻子插葱
03/04
54
0
2019测试指南-测试&测试原理

什么是测试? 在Web应用程序的开发生命周期中,需要测试许多东西,但测试实际上意味着什么?Merriam-Webster Dictionary将测试描述为: 进行测试或证明。 进行测试。 根据测试分配站立或评估...

猪鼻子插葱
02/27
91
0
2019测试指南-web应用程序安全测试(二)指纹Web服务器

Web服务器指纹识别是渗透测试仪的关键任务。了解正在运行的Web服务器的版本和类型允许测试人员确定已知的漏洞以及在测试期间使用的相应漏洞。 目前市场上有几种不同的供应商和Web服务器版本。...

猪鼻子插葱
03/04
13
0
2019测试指南-推导安全测试要求

获得安全测试要求 要获得成功的测试程序,必须知道测试目标是什么。这些目标由安全要求指定。本节详细讨论了如何通过从适用的标准和法规以及正面和负面的应用程序要求中获取安全测试的要求来...

猪鼻子插葱
03/04
12
0
2019测试指南-安全测试集成在开发和测试工作流程中

开发工作流程中的安全测试 SDLC开发阶段的安全测试代表了开发人员第一次有机会确保他们开发的各个软件组件在与其他组件集成并内置到应用程序之前进行了安全测试。软件组件可能包含软件工件,...

猪鼻子插葱
03/04
24
0

没有更多内容

加载失败,请刷新页面

加载更多

前端技术之:Prisma Demo服务部署过程记录

安装前提条件: 1、已经安装了docker运行环境 2、以下命令执行记录发生在MackBook环境 3、已经安装了PostgreSQL(我使用的是11版本) 4、Node开发运行环境可以正常工作 首先需要通过Node包管...

popgis
今天
5
0
数组和链表

数组 链表 技巧一:掌握链表,想轻松写出正确的链表代码,需要理解指针获引用的含义: 对指针的理解,记住下面的这句话就可以了: 将某个变量赋值给指针,实际上就是将这个变量的地址赋值给指...

code-ortaerc
今天
4
0
栈-链式(c/c++实现)

上次说“栈是在线性表演变而来的,线性表很自由,想往哪里插数据就往哪里插数据,想删哪数据就删哪数据...。但给线性表一些限制呢,就没那么自由了,把线性表的三边封起来就变成了栈,栈只能...

白客C
今天
41
0
Mybatis Plus service

/** * @author beth * @data 2019-10-20 23:34 */@RunWith(SpringRunner.class)@SpringBootTestpublic class ServiceTest { @Autowired private IUserInfoService iUserInfoS......

一个yuanbeth
今天
5
0
php7-internal 7 zval的操作

## 7.7 zval的操作 扩展中经常会用到各种类型的zval,PHP提供了很多宏用于不同类型zval的操作,尽管我们也可以自己操作zval,但这并不是一个好习惯,因为zval有很多其它用途的标识,如果自己...

冻结not
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部