在阳光下没有任何新东西,几乎每个人们均可能想到开发的Web应用程序已经开发出来了。随着世界各地积极开发和部署的大量免费和开源软件项目,应用程序安全测试极可能面临彻底或部分依赖于这些众所周知的应用程序的目标站点(例如Wordpress, phpBB,Mediawiki等)。了解正在测试的Web应用程序组件对测试过程有很大帮助,而且还将大大减小测试期间所需的工做量。这些众所周知的Web应用程序具备已知的HTML标头,cookie和目录结构,能够枚举这些标识符以识别应用程序。php
肯定Web应用程序和版本,以肯定已知漏洞以及在测试期间使用的相应漏洞。css
识别Web应用程序的一种相对可靠的方法是使用特定于应用程序的cookie。html
请考虑如下HTTP请求:python
GET / HTTP / 1.1 用户代理:Mozilla / 5.0(Windows NT 6.2; WOW64; rv:31.0)Gecko / 20100101 Firefox / 31.0 接受:text / html,application / xhtml + xml,application / xml; q = 0.9,* /*;q=0.8 接受语言:en-US,en; q = 0.5 '''Cookie:wp-settings-time-1 = 1406093286; wp-settings-time-2 = 1405988284''' DNT:1 链接:keep-alive 主持人:blog.owasp.org
已自动设置cookie CAKEPHP,它提供有关正在使用的框架的信息。常见cookie名称列表显示在Cpmmon应用程序标识符部分中。可是,能够更改cookie的名称。web
此技术基于在HTML页面源代码中查找某些模式。一般,人们能够找到许多信息,这些信息能够帮助测试人员识别特定的Web应用程序。其中一个常见标记是直接致使应用程序泄露的HTML注释。更常见的是,能够找到某些特定于应用程序的路径,即指向特定于应用程序的css和/或js文件夹的连接。最后,特定的脚本变量也可能指向某个应用程序。正则表达式
从下面的元标记中,能够轻松了解网站及其版本使用的应用程序。注释,特定路径和脚本变量均可以帮助攻击者快速肯定应用程序的实例。数据库
<meta name =“generator”content =“WordPress 3.9.2”/>
更频繁地,此类信息放在<head> </ head>标记之间,<meta>标记中或页面末尾。然而,建议检查整个文档,由于它可用于其余目的,例如检查其余有用的注释和隐藏字段。浏览器
除了从HTML源收集的信息以外,还有另外一种方法能够极大地帮助攻击者高精度地肯定应用程序。每一个应用程序在服务器上都有本身的特定文件和文件夹结构。有人指出,人们能够从HTML页面源看到特定的路径,但有时它们没有明确地显示在那里,仍然驻留在服务器上。安全
为了揭示它们,使用了称为dirbusting的技术。Dirbusting强制目标具备可预测的文件夹和文件名,并监视HTTP响应以计算服务器内容。此信息既可用于查找默认文件,也可用于攻击它们,也可用于对Web应用程序进行指纹识别。Dirbusting能够经过多种方式完成,下面的示例显示了借助于Burp Suite的已定义列表和入侵者功能,对WordPress驱动的目标进行了成功的dirbusting攻击。ruby
咱们能够看到,对于一些特定于WordPress的文件夹(例如,/ wp-includes /,/ wp-admin /和/ wp-content /),HTTP响应是403(禁止),302(找到,重定向到wp-login .php)和200(OK)。这是一个很好的指标,目标是WordPress驱动的。一样能够dirbust不一样的应用程序插件文件夹及其版本。在下面的屏幕截图中,能够看到Drupal插件的典型CHANGELOG文件,该文件提供有关正在使用的应用程序的信息,并公开了易受攻击的插件版本。
提示:在开始dirbusting以前,建议先检查robots.txt文件。有时也能够在那里找到特定于应用程序的文件夹和其余敏感信息。下面的屏幕截图显示了此类robots.txt文件的示例。
每一个特定应用程序的特定文件和文件夹都不一样。建议在渗透测试期间安装相应的应用程序,以便更好地了解所呈现的基础结构以及服务器上可能留下的文件。可是,已经存在几个好的文件列表,一个很好的例子是可预测文件/文件夹的FuzzDB单词列表(http://code.google.com/p/fuzzdb/)。
亚历克 | phpbb3_ |
WordPress的 | WP-设置 |
1C-的Bitrix | BITRIX_ |
AMPcms | AMP |
Django CMS | Django的 |
DotNetNuke的 | DotNetNukeAnonymous |
E107 | e107_tz |
EPiServer | EPiTrace,EPiServer |
涂鸦CMS | graffitibot |
Hotaru CMS | hotaru_mobile |
ImpressCMS | ICMSession |
编号Indico | MAKACSESSION |
InstantCMS | InstantCMS [LOGDATE] |
Kentico CMS | CMSPreferredCulture |
镆铘 | SN4 [12symb] |
TYPO3 | fe_typo_user |
Dynamicweb | Dynamicweb |
轻子 | LEP [some_numeric_value] +的sessionid |
维克斯 | 域名= .wix.com |
VIVVO | VivvoSessionId |
应用 | 关键词 |
---|---|
WordPress的 | <meta name =“generator”content =“WordPress 3.9.2”/> |
亚历克 | <body id =“phpbb” |
Mediawiki的 | <meta name =“generator”content =“MediaWiki 1.21.9”/> |
的Joomla | <meta name =“generator”content =“Joomla! - 开源内容管理”/> |
Drupal的 | <meta name =“Generator”content =“Drupal 7(http://drupal.org)”/> |
DotNetNuke的 | DNN平台 - http://www.dnnsoftware.com |
更多信息https://www.owasp.org/index.php/Web-metadata
下面列出了通常和众所周知的工具。还有许多其余实用程序,以及基于框架的指纹识别工具。
网站:http : //www.morningstarsecurity.com/research/whatweb
目前市场上最好的指纹识别工具之一。包含在默认的Kali Linux版本中。语言:用于指纹识别的Ruby匹配用于:
示例输出显示在下面的屏幕截图中:
网站: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
网站:http:
//wappalyzer.com Wapplyzer是一款Firefox Chrome插件。它仅适用于正则表达式匹配,除了要在浏览器上加载的页面以外不须要任何其余内容。它彻底在浏览器级别工做,并以图标的形式给出结果。虽然有时会出现误报,但在浏览页面后当即使用哪些技术构建目标网站的概念很是方便。
插件的示例输出显示在下面的屏幕截图中。
白皮书
通常建议是使用上述几种工具并检查日志,以更好地了解攻击者确切地帮助披露Web框架的内容。经过在更改隐藏框架轨道后执行屡次扫描,能够实现更高级别的安全性并确保自动扫描没法检测到框架。如下是框架标记位置和一些其余有趣方法的一些具体建议。
检查配置并禁用或混淆全部披露技术使用信息的HTTP标头。这是一篇关于使用Netscaler进行HTTP-header混淆的有趣文章:http: //grahamhosking.blogspot.ru/2013/07/obfuscating-http-header-using-netscaler.html
建议经过更改相应的配置文件来更改cookie名称。
手动检查HTML代码的内容并删除明确指向框架的全部内容。
通常准则:
通常准则:
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)。
通常准则:
一个有趣而有效的方法,涉及从其余框架添加虚假文件和文件夹,以欺骗扫描仪和混淆攻击者。但要当心不要覆盖现有的文件和文件夹,并打破当前的框架!