CVE漏洞中文网

0DayBank一个专门收集整理全球互联网漏洞的公开发布网站
  1. 首页
  2. 百科
  3. 正文

指纹识别技术

2017年5月23日 812点热度 0人点赞 0条评论
  • 首页
  • 分类阅读
  • 文库
  • 专栏
  • 公开课
  • 商城
  • 漏洞盒子
注册 | 登录
投稿

浅谈web指纹识别技术

kelz2012-05-30共878529人围观 ,发现 27 个不明物体WEB安全文章

目前网络上开源的web指纹识别程序很多,如Wapplyzer,BlindElephant,plecost,w3af,whatweb, wpscan, joomscan等等,基本都是国外的,使用的时候因各方面因素会有一些限制,在某些特定环境下需要自己定制指纹识别工具,本文会浅析这些指纹识别程序的原理以及如何编写一个web应用指纹识别程序,完全没有技术含量,有不妥的地方还望各种SM。

0×01:识别的几种方式

目前常见的web应用指纹识别主要有以下几种方式,泽总已经总结的很明确了。

1:网页中发现关键字

2:特定文件的MD5(主要是静态文件、不一定要是MD5)

3:指定URL的关键字

4:指定URL的TAG模式

以上4种模式结合起来识别的话正确率一般在95%以上,除非个别BT的站点修改的体无完肤,如meta、文件路径、css等都删除了或故意修改成其他的webapp等,那我只能说你屌爆了。

0×02:识别方式详解

一般应用程序在html、js、css等文件中多多少少会包含一些特征码,这跟ips、waf等产品的特性有点类似,有特征码匹配模式。比如wordpress如果没有特细隐藏的话,在robots.txt中会包含wp-admin之类,首页index.php中会包含generator=wordpress 3.xx,后面为版本号,页面中会包含wp-content路径等等。
这几条都是存在网页中的关键字。其他的应用也有类似的例子,如discuz、dedecms、phpwind等在页面中都会发现一些固定的特征码。特征码如何查找这里不详细说明了,下期会有文章详细说明如何批量查找特征码,接下来先介绍一下几款常见的web应用指纹识别程序。

1:Wapplyzer

Wapplyzer是基于正则表达式来识别web应用的,如下图:

仔细看看Wapplyzer的规则其实很简单,挑一条看看,如下:

'WordPress':             { cats: { 1:  1, 2: 11 }, meta: { 'generator': /WordPress/i }, html: /

 

2:plecost

plecost是基于python架构,利用了Beautiful Soup 来解析html、xml文件识别网站使用的插件及版本。要了解plecost的原理,必须先知道Beautiful Soup是干啥用的,简单科普下Beautiful Soup:

Beautiful Soup 是一个 Python HTML/XML 处理器,设计用来快速地转换网页抓取。以下的特性支撑着 Beautiful Soup:

  • Beautiful Soup 不会选择 即使你给他一个损坏的标签。 他产生一个转换DOM树,尽可能和你原文档内容含义一致 。这种措施通常能够你搜集数据的需求。
  • Beautiful Soup 提供一些简单的方法以及类Python语法 来查找、查找、修改一颗转换树:一个工具集帮助你解析一棵树并释出你需要的内容。你不需要为每一个应用创建自己的解析工具。
  • Beautiful Soup 自动将送进来的文档转换为 Unicode 编码 而且在输出的时候转换为 UTF-8,。 除非这个文档没有指定编码方式或者Beautiful Soup 没能自动检测编码,你需要手动指定编码方式,否则你不需要考虑编码的问题。

再看看plecost代码,如下图:

加载并读取wp_plugin_list.txt,利用urlopen探测目标url是否存在该插件。Plecos编写插件也非常方便,在wp_plugin_list.txt里面写上插件名称、最新版本号和cve即可。

3:whatweb

whatweb是一个web应用程序指纹识别工具,可以鉴别出内容管理系统(CMS)、博客平台、统计分析软件、javascript库、服务器和其他更多Web程序。whatweb拥有超过900个插件,插件是用来鉴别Web应用系统的。因此,开发者呼吁更多的人帮助开发插件,不用担心作者声称插件是十分容易编写的。
可以说whatweb是目前网络上比较强大的一款应用识别程序了。它支持正则表达式、md5 hash匹配、url识别、HTML标记模式、蜘蛛爬行等等。

Whatweb插件编写需要理解一些变量的定义,通过下面的例子就可以看出个大概,如下:

Plugin.define "Plone" do
author "Andrew Horton"
version "0.2"
description "CMS http://plone.org"
examples %w| www.norden.org www.trolltech.com www.plone.net www.smeal.psu.edu|

dorks [
'"powered by plone"'
]

matches [
{:name=>"meta generator tag",
:regexp=>//},

{:name=>"plone css",
:regexp=>/(@import url|text\/css)[^>]*portal_css\/.*plone.*css(\)|")/}, #"

{:name=>"plone javascript",
:regexp=>/src="[^"]*ploneScripts[0-9]+.js"/}, #"

{:text=>'
‘}, {:name=>”div tag, visual-portal-wrapper”, :certainty=>75, :text=>’

‘}, ] def passive m=[] #X-Caching-Rule-Id: plone-content-types #X-Cache-Rule: plone-content-types m << {:name=>”X-Caching-Rule-Id: plone-content-types” } if @meta["x-caching-rule-id"] =~ /plone-content-types/i m << {:name=>”X-Cache-Rule: plone-content-types” } if @meta["x-cache-rule"] =~ /plone-content-types/i m end end

{:name=>”meta generator tag”,  : 包含匹配的文件名称,这个文件必须是网站中唯一存在的文件。

:regexp=>是包含的要匹配的模式,它是一个正则表达式,可以有以下选项:

:regexp 标准的ruby正则表达式

:text  字符

:ghdb google hack数据库,包含以下几个模式

inurl: 包含的字符串在url

intitle: 包含的字符串在title

filetype: 包含的文件名,如PDF, JPG, RB等

:md5 请求页面的md5 hash值

:tagpattern html标签

:version 可以设置正则表达式或直接字符串匹配

:string    可以设置正则表达式或直接字符串匹配

:filepath可以设置正则表达式或直接字符串匹配,通常显示系统错误或配置文件等

:account 经常用在登陆页面或用户列表等

:module 可以设置正则表达式或直接字符串匹配,如网络设备可能使用了一个ruby模块等

:model 可以设置正则表达式或直接字符串匹配

:firmware 可以设置正则表达式或直接字符串匹配,设备的固件版本

了解了以上选项我们可以写出一个简单的识别discuz的插件,如下:

Plugin.define "discuz" do
author "freebuf@gmail.com" # 2012-05-28
version "0.1"
description "discuz - homepage: http://www.discuz.net/"

# Examples #
examples %w|
www.discuz.net|

matches [

# Version detection # Powered by text
{ :version=>// },
{ :version=>/

Powered by .*Discuz!.*([Xx\d\.]+)\s*/ }, # HTML Comment { :text=>'discuz_uid' }, ] end 

运行如下图:

更多whatweb插件开发参考:whatweb

0×03:如何编写web指纹识别程序

现在网络上做指纹识别用的最多的是BeautifulSoup,这个插件上面已经介绍过了,并且很多web应用指纹识别程序使用了该插件,这里就不多介绍了,今天主要介绍下另外一个框架:scrapy

Scrapy,Python开发的一个快速,高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结  Scrapy Pthyon爬虫框架 logo[1]构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试。

Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseSpider、sitemap爬虫等,最新版本又提供了web2.0爬虫的支持。

Scrapy 使用 Twisted 这个异步网络库来处理网络通讯,架构清晰,并且包含了各种中间件接口,可以灵活的完成各种需求。整体架构如下图所示:

绿线是数据流向,首先从初始 URL 开始,Scheduler 会将其交给 Downloader 进行下载,下载之后会交给 Spider 进行分析,Spider 分析出来的结果有两种:一种是需要进一步抓取的链接,例如之前分析的“下一页”的链接,这些东西会被传回 Scheduler ;另一种是需要保存的数据,它们则被送到 Item Pipeline 那里,那是对数据进行后期处理(详细分析、过滤、存储等)的地方。另外,在数据流动的通道里还可以安装各种中间件,进行必要的处理。

如果想做一个好的准确的,非常牛逼的web指纹识别,自然少不了爬虫机制,而做一个爬虫主要分两部分:

一:下载 Web 页面,有许多问题需要考虑,如何最大程度地利用本地带宽,如何调度针对不同站点的 Web 请求以减轻对方服务器的负担等。一个高性能的 Web Crawler 系统里,DNS 查询也会成为急需优化的瓶颈。

二:一些“行规”需要遵循(例如 robots.txt)。而获取了网页之后的分析过程也是非常复杂的,Internet 上的东西千奇百怪,各种错误百出的 HTML 页面都有,要想全部分析清楚几乎是不可能的事;另外,随着 AJAX 的流行,如何获取由 Javascript 动态生成的内容成了一大难题;除此之外,Internet 上还有有各种有意或无意出现的Spider Trap ,如果盲目的跟踪超链接的话,就会陷入 Trap 中万劫不复了

不过,其实并没有多少人需要做像 Google 那样通用的 Crawler ,我们做一个 Crawler 就是为了去爬特定的某个网站来进行指纹识别,所谓知己知彼,百战不殆,我们可以事先对需要爬的网站结构做一些分析,事情就变得容易多了。通过分析,选出有价值的链接进行跟踪,然后再进行指纹识别。这样就可以避免很多不必要的链接或者 Spider Trap。

举个例子,我们添加一个discuz的识别程序,
Discuz我简单例了2个特征码如下:
页面中meta标签的generator属性为Discuz
robots.txt 里面也会有版本信息

OK,以上2个特征码已经能简单识别该应用了,我们利用scrapy来提取数据并识别应用。scrapy提取数据主要用到了XPath,它有提供两个XPath选择器,HtmlXPathSelector和XmlXPathSelector,一个用于HTML,一个用于XML,XPath选择器有三个方法:

  • select(xpath): 返回一个相对于当前选中节点的选择器列表(一个XPath可能选到多个节点)
  • extract(): 返回选择器(列表)对应的节点的字符串(列表)
  • re(regex): 返回正则表达式匹配的字符串(分组匹配)列表

了解了以上方法,写起来就比较简单了,下面举个非常简单的例子:

from scrapy.spider import BaseSpider
from scrapy.selector import HtmlXPathSelector
from scrapy.utils.url import urljoin_rfc,urllib,re

class XSSSpider(BaseSpider):
	name="freebuf"
	allowed_domains=["freebuf.com"]
	start_urls=["http://forum.freebuf.com"]

	def parse(self, response):
		hxs = HtmlXPathSelector(response)
		c = hxs.select('//meta[@name="generator"]/@content').extract()
		urls = urljoin_rfc(response.url,"robots.txt")
		t = urllib.urlopen(urls)
		#print a
		a = re.findall("[Dd]iscuz.*",t.read())
		if (a or c):
				print "Web application details : Discuz"
		else:
			print "Web application version not found!"

到主项目目录运行:scrapy crawl freebuf

以上只是个简单的例子,当然你也可以多种条件结合到一起写成插件的方式调用,如下:

FreebuF["WordPress"] = {
  '//meta[ () name="generator" and starts-with(@content,"WordPress")]',
  '//head/link[ () rel="stylesheet" and @type="text/css" and contains( @href, "/wp-content/")]',
  '//div[ () id="content"]/div[ () class="post" and starts-with(@id, "post-") and div[ () class="posttitle"] and div[
() class="postmeta"] and div[ () class="postbody"] and div[ () class="postfooter"]]',
}

0×04:后续的一些思考

简单的web应用识别不会涉及到爬虫机制,但是如果需其他更详尽的信息以及更准确的识别web应用,以及后期扩展其他功能,不可缺少的是爬虫机制,而爬虫也直接影响到程序的执行效率、速度是否够快,识别是否准确等。这里就涉及到大规模递归抓取了,如果使用scrapy来做爬虫的话,可能要修改scrapy来处理以下几个问题:

1:快速的link extractor

python的SGMLParser实在是太慢了,使用SgmlLinkExtractor会让爬虫把大部分的时间都浪费在解析网页上,最好自己写一个link extractor,也可以用正则表达式来写link extractor,速度快,问题是不理解html语义,会把注释里的链接也包含进来。另外基于javascript重定向url也要在这里提取出来。

2:Spider Trap

因为spider trap一般是由动态网页实现的,最简单的方案就是先通过url是否包含”?”来判断一个网页是否是动态网页,然后取得不包含参数的url地址,对这个地址进行计数,设置一个阈值,超过阈值之后不再抓取。

3:增量抓取

一个针对多个网站的爬虫很难一次性把所有网页爬取下来,并且网页也处于不断更新的状态中,爬取是一个动态的过程,爬虫支持增量的抓取是很必要的。

4:快速识别
爬虫抓取数据的时候我们可以定位抓取的数据为js、css、html等,也可指定特定的文件夹文件名称,如gif、jpg、 png之类。

参考文章:

http://anantshri.info/articles/web_app_finger_printing.html
http://luoq.net/ais/1181/
http://www.biaodianfu.com/scrapy-architecture.html
http://blog.pluskid.org/?p=366

kelz

kelz64 篇文章等级: 7级
|
|
  • 上一篇:在线订单站的一些渗透思路和后门
  • 下一篇:Flash跨域策略文件crossdomain.xml安全配置详解

这些评论亮了

  • thanks(8级)FreeBuf常务处主任回复
    小道消息说freebuf后面会出国内应用的指纹扫描工具? :lol:
    )15(亮了
  • phper回复
    nice!借楼求扫国内应用指纹的工具
    )10(亮了
  • shine回复
    期待后续文章
    )9(亮了
  • pnig0s(7级)FreeBuf技术处书记回复
    Freebuf没用过任何自动化采集,所有发布的文章都是人工编辑的,来源:原创、外部投递,精品资源的转发,国外资源自主翻译,转载的内容我们也都附上来源。你说的P站是?
    )9(亮了
  • amxku回复
    小玩意儿用scrapy,有点杀鸡用牛刀的感觉,呵呵
    )7(亮了
发表评论

已有 26 条评论

  • phper 2012-05-30回复1楼

    nice!借楼求扫国内应用指纹的工具

    亮了(10)
  • pnig0s (7级)FreeBuf技术处书记 2012-05-30回复2楼

    well done~kz总 :cool:

    亮了(4)
  • shine 2012-05-30回复3楼

    期待后续文章

    亮了(9)
  • thanks (8级)FreeBuf常务处主任 2012-05-30回复4楼

    小道消息说freebuf后面会出国内应用的指纹扫描工具? :lol:

    亮了(15)
  • amxku 2012-05-30回复5楼

    小玩意儿用scrapy,有点杀鸡用牛刀的感觉,呵呵

    亮了(7)
    • pnig0s (7级)FreeBuf技术处书记 2012-05-30回复

      不过初期使用Scrapy的话,便于后期将多个指纹识别插件整合。

      亮了(7)
  • isfor 2012-05-30回复6楼

    mark

    亮了(3)
  • first 2012-05-31回复7楼

    我表示我看不懂,但是觉得很牛逼的样子

    亮了(3)
  • shaun (1级)白帽子,web安全,欢迎与我交流 2012-05-31回复8楼

    学习了,感谢分享~

    亮了(3)
  • 安静 (1级) 2012-05-31回复9楼

    beach的站之前有过一次。

    亮了(3)
    • kelz (7级)FreeBuf保安队队长 2012-05-31回复

      有点怀念大B的菊花了

      亮了(3)
    • phper 2012-05-31回复

      菊友会?

      亮了(3)
  • anlfi (5级) 2012-05-31回复10楼

    自己添加个别还好
    但是大部分的指纹添加
    肯定需要其他方法 比如采集生成一类的程序
    批量生成指纹 不然就只能识别几个 靠人工添加实在不现实

    亮了(3)
    • kelz (7级)FreeBuf保安队队长 2012-05-31回复

      恩,后期会详细说下如何批量获取特征码

      亮了(4)
  • anlfi (5级) 2012-05-31回复11楼

    这个主题应该只是含有指纹识别的内容
    而中心因该是http://resources.infosecinstitute.com/web-analysis-bt-5/
    分析工具 学习工具 然后自己编写适合自己的工具
    “如何开发whatweb插件,弄个discuz识别插件自己试一试,说出whatweb的成功和不足之处等等,whatweb研究透了,还可以思考:如果让我做一个web应用指纹识别产品我应该怎样去实现它?”
    等开源软件都有这样的特点 你可以加强修改 使攻击更加灵活快捷有效 才是学习的目的

    亮了(4)
    • kelz (7级)FreeBuf保安队队长 2012-05-31回复

      工具都很简单,关键是自己能熟悉程序的流程、原理,可以自己实现其中的功能。这也是我写这篇文章的初衷。

      亮了(3)
  • anlfi (5级) 2012-05-31回复12楼

    “还要研究工具,修改工具,定制属于自己的工具,开发工具等等。借鉴一切可以借鉴的东西,把一切可以借鉴的东西变成自己的东西。”好吧我觉得 P站与freebuf 其实都很像 不知道谁采集谁的 不过P站要先一点

    亮了(3)
    • pnig0s (7级)FreeBuf技术处书记 2012-05-31回复

      Freebuf没用过任何自动化采集,所有发布的文章都是人工编辑的,来源:原创、外部投递,精品资源的转发,国外资源自主翻译,转载的内容我们也都附上来源。你说的P站是?

      亮了(9)
      • malayke (3级) 2013-06-04回复

        @pnig0s  scrapy怎么安装?

        亮了(4)
  • v0dga (1级) 2012-06-01回复13楼

    个人觉得 发现web程序是第一步 之后还有确定版本 确定插件。。

    亮了(7)
  • darkray (4级)广结天下豪友. 2012-06-07回复14楼

    指纹库很重要,和path字典一样,是个积累的过程.这个需要大家一起来聚合了.

    亮了(5)
  • malayke (3级) 2013-06-04回复15楼

    scrapy 怎么安装啊,谷歌了一下 步骤很繁琐~

    亮了(6)
  • malayke (3级) 2013-06-05回复16楼

    scrapy 安装教程在这里:http://www.youtube.com/watch?v=eEK2kmmvIdw

    亮了(6)
  • malayke (3级) 2013-06-05回复17楼

    Scrapy 介绍: http://url.cn/Fa3dC2
    Scrapy 安装方法:http://url.cn/FcVlI1

    亮了(4)
  • xxzapml (1级) 2015-08-10回复18楼

    识别方式的第3条和第4条分别是什么含义(指定URL的关键字,指定URL的TAG模式)?大神能不能举例详细说明下,小弟没想明白。

    亮了(0)
  • 2863482451 (1级) 2015-09-22回复19楼

    求指纹库。不然怎么扩展工具

    亮了(0)

必须您当前尚未登录。登陆?注册

必须(保密)

表情插图

取消

kelz

kelz

FreeBuf保安队队长

64 篇文章87 条评论

相关阅读

  • 浅析国内指纹识别技术(附带小工具)
  • PHP网站渗透中的奇技淫巧:检查相等时的漏洞
  • Backtrack5 R3实用新工具分析(下)
  • FreeBuf公开课:轻松的方式科普什么是SQL注入攻击(第三集)
  • CVE-2012-1172:PHP Corrupted $_FILES indices lead to security concern

特别推荐

关注我们 分享每日精选文章

不容错过

  • 黑客题材电影:算法(ALGORITHM)嘎巴嘎巴2014-12-09
  • 安全搜索引擎Shodan(搜蛋)命令行模式使用TIPSaz0ne2015-06-18
  • [CVE-2013-1763]Linux内核3.3-3.8本地提权漏洞LinuxSpace2013-03-11
  • LastPass再曝多枚高危漏洞,用户账号信息存在被盗风险ArthurKiller2016-07-28

FREEBUF

  • 免责声明
  • 关于我们
  • 加入我们

广告及服务

  • 寻求报道
  • 广告合作
  • 联系我们
  • 友情链接

关注我们

  • 官方微信
  • 新浪微博
  • 腾讯微博
  • Twitter

赞助商

Copyright © 2013 WWW.FREEBUF.COM All Rights Reserved 沪ICP备13033796号

css.php

正在加载中...

0daybank

标签: 暂无
最后更新:2017年5月23日

小助手

这个人很懒,什么都没留下

点赞
< 上一篇
下一篇 >

文章评论

您需要 登录 之后才可以评论

COPYRIGHT © 2024 www.pdr.cn CVE漏洞中文网. ALL RIGHTS RESERVED.

鲁ICP备2022031030号

联系邮箱:wpbgssyubnmsxxxkkk@proton.me