`
soardragon
  • 浏览: 316798 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

Http指纹识别技术

阅读更多

Http指纹识别技术
Http指纹识别现在已经成为应用程序安全中一个新兴的话题,Http服务器和Http应用程序安全也已经成为网络安全中的重要一部分.从网络管理的立场来看,保持对各种web服务器的监视和追踪使得Http指纹识别变的唾手可得,Http指纹识别可以使得信息系统和安全策略变的自动化,在基于已经设置了审核策略的特殊的平台或是特殊的web服务器上,安全测试工具可以使用Http指纹识别来减少测试所需要的配置.



本文将介绍现有的Http指纹识别技术,同时也将讨论所遇到的一些问题并且拿出可行的解决方案.



一.指纹识别理论



指纹的定义是这样的:1是指任何表面上的指尖印象或者是在指尖上蘸上墨水而在纸上留下的的墨水印象;2是指可以用来识别的东西:如特色、痕迹或特性等揭露起源的东西,表示物体或物质的特色的证据.



指纹识别可以分为两步,一是对指纹进行收集和分类;二是将未知的指纹同被储存在数据库中的指纹进行比较,从而找出最符合的.



当采集指纹的时候,对物体的所有主要特性的抓取是必要的.采集较多的细节,可以对第二步产生很大的帮助.当比较指纹的时候,很有可能有几个指纹是被不合适的匹配的,因为可指纹之间微小的差别很容易使识别产生错误,这也要求指纹识别需要很高的技术.



指纹识别技术现在已经是网络安全的已知技术.操作系统指纹识别在任何的网络评估中是一件通常的工作,现在也有很多操作系统指纹识别技术.操作系统指纹识别为什么能成功?那是因为每个操作系统实现TCP/IP协议时有微小的差别,当前比较流行的是利用TCP/IP堆栈进行后操作系统识别,相关工具比如Nmap;还有的是利用ICMP进行操作系统识别,代表工具如Xprobe.



Http指纹识别的原理大致上也是相同的:记录不同服务器对Http协议执行中的微小差别进行识别.Http指纹识别比TCP/IP堆栈指纹识别复杂许多,理由是定制Http服务器的配置文件、增加插件或组件使得更改Http的响应信息变的很容易,这样使得识别变的困难;然而定制TCP/IP堆栈的行为需要对核心层进行修改,所以就容易识别.



二.Banner获取



查看Http应答头信息是Http指纹识别中最简单也是最基础的,我们可以通过一个Tcp客户端比如netcat来实现,一般我们用的比较多的是telnet到80端口,然后发送命令来得到响应信息,这里我们以netcat来做例子,以下是三个不同Http服务器的响应信息:



1:Apache1.3.23server:
Http/1.1200OK
Date:Mon,08Sep200317:10:49GMT
Server:Apache/1.3.23
Last-Modified:Mon,08Sep200303:48:19GMT
ETag:"32417-c4-3e5d8a83"
Accept-Ranges:bytes
Content-Length:196
Connection:close
Content-Type:text/html




2:MicrosoftIIS5.0server:
Http/1.1200OK
Server:Microsoft-IIS/5.0
Expires:Mon,08Sep200301:41:33GMT
Date:Mon,08Sep200316:41:33GMT
Content-Type:text/html
Accept-Ranges:bytes
Last-Modified:Mon,08Sep200315:32:21GMT
ETag:"b0aac0542e25c31:89d"
Content-Length:7369



3:NetscapeEnterprise4.1server:
Http/1.1200OK
Server:Netscape-Enterprise/4.1
Date:Mon,08Sep200316:19:04GMT
Content-type:text/html
Last-modified:Mon,08Sep200215:37:56GMT
Content-length:57
Accept-ranges:bytes
Connection:close



三.模糊服务器Banner信息



在很多情况下,获取Banner被证明是一种很好的Http指纹识别方法.但是,网络管理员会选择通过配置或者是增加插件来更改或者是模糊服务器的Banner信息.当然,这样的设置确实是自动的阻止了很多对Http服务器的攻击.



要让服务器返回不同的Banner信息的设置是很简单的,象Apache这样的开放源代码的Http服务器,用户可以在源代码里修改Banner信息,然后重起Http服务就生效了;对于没有公开源代码的Http服务器比如微软的IIS或者是Netscape,可以在存放Banner信息的Dll文件中修改,相关的文章有讨论的,这里不再赘述,当然这样的修改的效果还是不错的.



另一种模糊Banner信息的方法是使用插件,这些插件可以提供自定义的Http应答信息.比如ServerMask这个商业软件就可以提供这样的功能,它是IIS服务器的一个插件,ServerMask不仅模糊了Banner信息,而且会对Http应答头信息里的项的序列进行重新组合,从而来模仿Apache这样的服务器,它甚至有能力扮演成任何一个Http服务器来处理每一个请求.这个软件可以在以下地址找到:



Http://www.port80software.com/products/servermask



下面就是一个被自定义Banner信息的Http服务器的例子,Apache服务器被自定义成了未知服务器:
Http/1.1403Forbidden
Date:Mon,08Sep200302:41:27GMT
Server:Unknown-Webserver/1.0
Connection:close
Content-Type:text/html;charset=iso-8859-1



下面是一个使用了ServerMask插件的IIS服务器的例子:
Http/1.1200OK
Server:YesweareusingServerMask
Date:Mon,08Sep200302:54:17GMT
Connection:Keep-Alive
Content-Length:18273
Content-Type:text/html
Set-Cookie:Itworksoncookiestoo=82.3S3.O12.NT2R0RE,4147ON3P,.4OO.;path=/
Cache-control:private



从上面的例子我们可以看到,仅仅从Banner信息来判断Http服务器类型是远远不够的.



四.协议行为



在执行Http协议时,几乎所有的Http服务器都具有它们独特的方法,如果Http请求是合法并且规则的,Http服务器返回的应答信息是符合RFC里的描述的.但是如果我们发送畸形的Http请求,这些服务器的响应信息就不同了,不同服务器对Http协议行为表现的不同就是Http指纹识别技术的基本根据和原理.



大家还是喜欢看例子,那就让我们来举几个不同的例子吧,我们将分析3种不同Http服务对不同请求所返回的响应信息,这些请求是这样的:



1:HEAD/Http/1.0发送基本的Http请求
2:DELETE/Http/1.0发送那些不被允许的请求,比如Delete请求
3:GET/Http/3.0发送一个非法版本的Http协议请求
4:GET/JUNK/1.0发送一个不正确规格的Http协议请求



Exp1:基本的Http请求



我们先发送请求HEAD/Http/1.0,然后分析Http响应头里的信息,对头信息里项的排序进行分析.发送的请求命令如下:
C:\>ncapache.example.com80//回车,下同
HEAD/Http/1.0//输入后回车,下同
响应信息:



1:Apache1.3.23
Http/1.1200OK
Date:Mon,08Sep17:10:49GMT
Server:Apache/1.3.23
Last-Modified:Thu,27Feb200303:48:19GMT
ETag:"32417-c4-3e5d8a83"
Accept-Ranges:bytes
Content-Length:196
Connection:close
Content-Type:text/html



2:IIS5.0
Http/1.1200OK
Server:Microsoft-IIS/5.0
Content-Location:Http://iis.example.com/Default.htm
Date:Mon,08Sep20:13:52GMT
Content-Type:text/html
Accept-Ranges:bytes
Last-Modified:Mon,08Sep200310:10:50GMT
ETag:W/"e0d362a4c335be1:ae1"
Content-Length:133



3:NetscapeEnterprise4.1
Http/1.1200OK
Server:Netscape-Enterprise/4.1
Date:Mon,08Sep200306:01:40GMT
Content-type:text/html
Last-modified:Mon,08Sep200301:37:56GMT
Content-length:57
Accept-ranges:bytes
Connection:close
比较结果:Apache头信息里的Server和Date项的排序是不同的.



Exp2:HttpDELETE请求



这次,我们将发送DELETE/Http/1.0请求,我们将分析不同Http服务器对非法请求的应答信息的不同.发送的请求命令:



C:\>ncapache.example.com80
DELETE/Http/1.0



响应信息:
1:Apache1.3.23
Http/1.1405MethodNotAllowed
Date:Mon,08Sep200317:11:37GMT
Server:Apache/1.3.23
Allow:GET,HEAD,POST,PUT,DELETE,CONNECT,OPTIONS,PATCH,PROPFIND,PROPPATCH,
MKCOL,COPY,MOVE,LOCK,UNLOCK,TRACE
Connection:close
Content-Type:text/html;charset=iso-8859-1



2:IIS5.0
Http/1.1403Forbidden
Server:Microsoft-IIS/5.0
Date:Mon,08Sep200320:13:57GMT
Content-Type:text/html
Content-Length:3184



3:NetscapeEnterprise4.1
Http/1.1401Unauthorized
Server:Netscape-Enterprise/4.1
Date:Mon,08Sep200306:03:18GMT
WWW-authenticate:Basicrealm="WebServerServer"
Content-type:text/html
Connection:close



比较结果:Apache响应的是"405MethodNotAllowed",IIS响应的是"403Forbidden",Netscape响应的是"401Unauthorized",发现对Delete请求,响应的信息是完全不同的.



Exp3:非法Http协议版本请求



这次我们将发送非法的Http协议版本请求,比如GET/Http/3.0请求,事实上Http3.0是不存在的,发送请求命令:
C:\>ncapache.example.com80
GET/Http/3.0
响应信息:
1:Apache1.3.23
Http/1.1400BadRequest
Date:Mon,08Sep200317:12:37GMT
Server:Apache/1.3.23
Connection:close
Transfer-Encoding:chunked
Content-Type:text/html;charset=iso-8859-1



2:IIS5.0
Http/1.1200OK
Server:Microsoft-IIS/5.0
Content-Location:Http://iis.example.com/Default.htm
Date:Mon,08Sep200320:14:02GMT
Content-Type:text/html
Accept-Ranges:bytes
Last-Modified:Mon,08Sep200320:14:02GMT
ETag:W/"e0d362a4c335be1:ae1"
Content-Length:133



3:NetscapeEnterprise4.1
Http/1.1505HttpVersionNotSupported
Server:Netscape-Enterprise/4.1
Date:Mon,08Sep200306:04:04GMT
Content-length:140
Content-type:text/html
Connection:close



比较结果:Apache响应的是"400BadRequest",IIS忽略了这个请求,响应信息是OK,还返回了网站根目录的HTML数据信息,Netscape响应的是"505HttpVersionNotSupported".



Exp4:不正确规则协议请求



这次测试主要是对GET/JUNK/1.0.请求的响应,发送请求命令:
C:\>ncapache.example.com80
GET/JUNK/1.0
响应信息:
1:Apache1.3.23
Http/1.1200OK
Date:Sun,15Jun200317:17:47GMT
Server:Apache/1.3.23
Last-Modified:Thu,27Feb200303:48:19GMT
ETag:"32417-c4-3e5d8a83"
Accept-Ranges:bytes
Content-Length:196
Connection:close
Content-Type:text/html



2:IIS5.0
Http/1.1400BadRequest
Server:Microsoft-IIS/5.0
Date:Fri,01Jan199920:14:34GMT
Content-Type:text/html
Content-Length:87



3:NetscapeEnterprise4.1





Badrequest



Yourbrowsersentaquerythisservercouldnotunderstand.







比较结果:在这里,Apache忽视了不规则的协议"JUNK",还返回了200"OK"和根目录的一些信息,IIS响应的是"400BadRequest",Netscape几乎没有返回Http头信息,相反的却返回了HTML格式的信息来表明这是个错误请求.



测试小结:我们下面列了一个表,我们可以很简单的辨别不同的Http服务器.



服务器头信息项排序Delete请求非法版本不规则协议
Apache/1.3.23Date,Server405400200
MS-IIS/5.0Server,Date403200400
Netscape4.1Server,Date401505noheader



五.指纹识别工具



这里我们将介绍一个Http指纹识别工具Httprint,它通过运用统计学原理,组合模糊的逻辑学技术,能很有效的确定Http服务器的类型.它可以被用来收集和分析不同Http服务器产生的签名,什么是Http签名呢?Http签名通过16进制转为ASCII码如下:



Microsoft-IIS/5.0
CD2698FD6ED3C295E4B1653082C10D64811C9DC594DF1BD04276E4BB811C9DC5
0D7645B5811C9DC52A200B4C9D69031D6014C217811C9DC5811C9DC52655F350
FCCC535BE2CE6923E2CE6923F2454256E2CE69272576B769E2CE6926CD2698FD
6ED3C295E2CE692009DB9B3E6ED3C2956ED3C2956ED3C2956ED3C295E2CE6923
6ED3C295



Apache/1.3.x
9E431BC86ED3C295811C9DC5811C9DC5050C5D32505FCFE84276E4BB630A04DB
0D7645B5970EE6BB811C9DC5CD37187C11DDC7D78398721EB06FE5D78A91CF57
FCCC535B6ED3C295FCCC535B811C9DC5E2CE69272576B769E2CE69269E431BC8
6ED3C295E2CE69262A200B4C811C9DC5811C9DC5811C9DC5811C9DC5811C9DC5
811C9DC5



Httprint先把一些Http签名信息保存在一个文档里,然后分析那些由Http服务器产生的结果.
当我们发现那些没有例在数据库中的签名信息时,我们可以利用Httprint产生的报告来扩展这个签名数据库,而当Httprint下一次运行时,这些新加的签名信息也就可以使用了.



Httprint可以图形界面运行和命令行下运行,可以运行在Windows、Linux和MacOSX平台上.



以下是命令行下的帮助文件:
D:\>Httprint
Usage:Httprint{-h|-i}-s[...options]
-h可以是ip地址ip范围,或者是url地址
-i一个包含测试地址的文件,默认文件是input.txt
-s一个包含Http签名的文件,默认是signatures.txt
Options:
-o默认的报告文件是"Httprintoutput.html".可以自己定义
-tpPing超时时间,默认是1000ms.最大是30000ms.
-t连接和读取超时时间,默认是10000ms.最大是100000ms.
-r时间.默认是3次.最大是30次.
-P0不Ping主机.
-?帮助信息.



例子:
Httprint-hwww.target.com-ssignatures.txt
Httprint-hHttps://www.target.com-ssignatures.txt
Httprint-hHttp://www.target.com:8080/-ssignatures.txt
Httprint-h10.0.1.1-10.0.1.254-ssignatures.txt-o10_0_1_x.html
Httprint-iinput.txt-ssignatures.txt-ooutput.html



使用方法是很简单的,下面是Httprint的一次输出结果:



D:\>Httprint-hHttp://www.target.com-ssignatures.txt
Host:www.target.comisalive...
FingerPrintingonHttp://www.target.com:80/
DerivedSignature:
Apache/1.3.26(Unix)
9E431BC86ED3C295811C9DC5811C9DC5050C5D32505FCFE84276E4BBC184CB92
0D7645B5811C9DC52A200B4C811C9DC511DDC7D78398721E811C9DC5811C9DC5
E2CE6923E2CE6923E2CE6923811C9DC568D17AAE2576B769E2CE6926811C9DC5
E2CE6923E1CE67B1811C9DC5E2CE6920E2CE69206ED3C2956ED3C295E2CE6920
E2CE69206ED3C295811C9DC568D17AAEE2CE6923



BannerReported:Apache/1.3.26(Unix)
BannerDeduced:Apache/1.3.26
Scores:
Microsoft-IIS/4.0:47
Microsoft-IIS/5.0:57
Microsoft-IIS/5.0ASP.NET:57
Microsoft-IIS/5.1:57
Microsoft-IIS/6.0:75
...........................//略去一些
Apache/2.0.x:70
Apache/1.3.27:79
Apache/1.3.26:80
Apache/1.3.[4-24]:78
............................//略去一些
Com21CableModem:49



在上面的例子中,Httprint显示了被测服务器的签名信息,然后将这些信息同数据库中已有的签名进行比较,然后对每一个指纹进行评分,分数最高的也就是最符合的.在这个例子里,"Apache/1.3.26"是最适合的.
以下是图形界面的抓图:

Httprint会产生一个HTML格式的报告,这个报告将对以后的分析产生很大的作用,下面是一个例子的报告:



Httprint的功能是强大的,尽管大家可以用ServerMask这样的软件来模糊指纹,但是仍然可以被Httprint这样利用统计学原理进行识别的的软件打败,下面是一个例子:



D:\>Httprintunknown.example.com
Reportedsignature:
ProtectedbyServerMask
CD2698FD6ED3C295811C9DC5811C9DC5811C9DC594DF1BD04276E4BB811C9DC5
0D7645B5811C9DC5811C9DC59D69031D6014C217811C9DC5811C9DC580FF2CD2
FCCC535BE2CE6923E2CE6923811C9DC5E2CE69272576B769E2CE69262CEAB43E
6ED3C295FCCC535B811C9DC56ED3C2956ED3C2956ED3C2956ED3C295E2CE6923
6ED3C295
BestMatch:Microsoft-IIS/5.0,Microsoft-IIS/5.1
Scores:
Microsoft-IIS/4.0:86
Microsoft-IIS/5.0:101
Microsoft-IIS/5.1:101
Microsoft-IIS/6.0:56
.............................
Apache/1.3.27:35
Apache/1.3.26:36
Apache/1.3.x:34
..............................
MiniServ/0.01:15
尽管服务器使用ServerMask迷惑了响应信息,但是Httprint仍然精确的判断出它是Microsoft-IIS/5.0或5.1

分享到:
评论

相关推荐

    TideFinger潮汐指纹识别

    TideFinger,一个开源的指纹识别小工具,使用了传统和现代检测技术相结合的指纹检测方法,让指纹检测更快捷、准确。 通过分析web指纹的检测对象、检测方法、检测原理及常用工具,设计了一个简易的指纹搜集脚本来协助...

    御剑WEB指纹识别.rar

    "御剑WEB指纹识别"这个标题指的是一个专门用于Web应用程序指纹识别的工具或技术。在网络安全领域,尤其是渗透测试中,指纹识别是确定目标系统类型、版本和配置的重要步骤。"御剑"可能是这个工具的名字,暗示其具有...

    轻量WEB指纹识别.rar

    在网络安全领域,指纹识别技术是一种重要的工具,尤其在渗透测试中扮演着至关重要的角色。这里的“轻量WEB指纹识别”指的是针对Web应用的一种轻量级的识别方法,它旨在通过收集和分析少量的信息来确定Web服务器、...

    御剑WEB指纹识别

    《御剑WEB指纹识别》是一款专门用于网络安全领域的高级工具,其主要功能是通过分析和识别Web服务器的各种特征,从而确定其具体的身份和配置信息。在信息化社会,网络安全日益重要,而Web服务器作为互联网的重要组成...

    御剑WEB指纹识别系统

    4. **研究与教学**:为网络安全研究者和教育工作者提供实用的工具,帮助他们了解和研究Web服务器的指纹识别技术。 总的来说,御剑WEB指纹识别系统是网络安全领域不可或缺的工具之一,它通过深入挖掘Web服务器的指纹...

    御剑WEB指纹识别系统正式版.zip

    【描述】"御剑WEB指纹识别系统正式版.zip" 提供了一个合法的学习环境,旨在帮助用户掌握Web指纹识别技术。重要的是,该软件只能用于教育用途,避免任何违法行为,尊重网络伦理和法律法规。 【标签】“前端”和...

    御剑WEB指纹识别系统正式版(解决报毒)

    1. **Web指纹识别**:Web指纹识别是通过分析HTTP响应头、HTML结构、JavaScript代码、CSS样式等信息,确定Web服务器的类型、操作系统、Web应用程序、插件版本等技术细节的过程。这对于渗透测试和安全审计至关重要,...

    用java编写给予B/S架构的指纹识别系统

    在IT行业中,指纹识别系统是一种基于生物特征的身份验证技术,它利用个人独一无二的指纹细节来确认身份。在本项目中,我们关注的是一个基于B/S(Browser/Server,浏览器/服务器)架构的指纹识别系统,该系统使用Java...

    指纹 识别Demo

    指纹识别技术是现代生物识别技术的一种重要应用,它利用人的指纹独特性来验证个人身份。在本文中,我们将深入探讨指纹识别技术的工作原理、应用场景、系统实现以及与之相关的编程技术。 一、指纹识别工作原理 指纹...

    Website指纹识别攻击与防护技术研究.zip

    随着量子计算的发展和新型攻击手段的出现,网站指纹识别技术可能会面临新的挑战。因此,持续研究和开发新的防御策略至关重要,同时也要关注隐私保护法规的变化,以确保技术应用的合规性。 综上所述,"Website指纹...

    原创工具14Finger-全能web指纹识别与分享平台.doc

    14Finger 全能 Web 指纹识别与分享平台 14Finger 是一个基于 Vue3+Django 前后端分离的 Web 架构的全能 Web 指纹识别与分享平台。它集成了长亭出品的 rad 爬虫的功能,内置了一万多条互联网开源的指纹信息。该平台...

    2019.05-Web指纹识别技术研究与优化实现1

    Web指纹识别技术是一种网络安全技术,用于识别和区分不同的Web服务器、应用程序、内容管理系统(CMS)等,通过收集和分析各种在线特征。这项技术在2019年得到了深入的研究和优化,体现在开源项目如TideFinger上。...

    ZAZAPItService_C#_windowservce_指纹识别算法_指纹采集器_

    在IT领域,指纹识别技术是一种安全验证方法,广泛应用于身份认证、访问控制等场景。本项目"ZAZAPItService"是基于C#语言开发的一个Windows服务,它整合了指纹识别算法,允许Web前端通过调用本地服务接口来实现指纹的...

    指纹识别技术在门禁系统中应用解决方案

    指纹识别技术在门禁系统中应用解决方案 旧的下载地址: http://d.download.csdn.net/down/705927/owenleng 我下载后看了一点不值10分!

    Python-TideFinger指纹识别小工具汲取整合了多个web指纹库结合了多种指纹检测方法让指纹检测更快捷准确

    在网络安全领域,指纹识别是至关重要的,它能够帮助我们识别和分析目标网站或服务的特性,从而更好地理解其背后的运行环境、技术栈以及潜在的安全风险。TideFinger的独特之处在于它综合了多个现有的Web指纹库,并...

    基于wappalyzer指纹库、chromedp框架对网站进行指纹识别.zip

    "基于wappalyzer指纹库、chromedp框架对网站进行指纹识别"这一标题揭示了我们要探讨的核心技术领域。Wappalyzer是一款知名的浏览器扩展,用于识别网站所使用的技术栈,包括Web服务器、CMS(内容管理系统)、...

    人脸与指纹识别系统之间接口

    本项目聚焦于“人脸与指纹识别系统之间接口”,这是一个涉及生物特征识别技术的重要领域,主要目标是实现这两种识别技术的有效整合。 首先,人脸识别系统基于人的面部特征进行身份验证,它利用摄像头捕获图像,通过...

    中控指纹识别 B/S WEB .NET 源码demo(针对Chrome)

    总的来说,"中控指纹识别 B/S WEB .NET 源码demo"是一个结合了.NET技术、ActiveX控件和生物识别技术的Web应用实例,对于想要在Web环境中集成指纹识别功能的开发者来说,这是一个宝贵的参考资料。

Global site tag (gtag.js) - Google Analytics