渗透测试踩点之httprint指纹识别技术

admin 2021年7月14日01:00:50评论131 views字数 12615阅读42分3秒阅读模式

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服务器的响应信息:


Apache 1.3.23 server:Http/1.1 200 OKDate: Mon, 08 Sep 2003 17:10:49 GMTServer: Apache/1.3.23Last-Modified: Mon, 08 Sep 2003 03:48:19 GMTETag: "32417-c4-3e5d8a83"Accept-Ranges: bytesContent-Length: 196Connection: closeContent-Type: text/html




Microsoft IIS 5.0 server:Http/1.1 200 OKServer: Microsoft-IIS/5.0Expires: Mon, 08 Sep 2003 01:41:33 GMTDate: Mon, 08 Sep 2003 16:41:33 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Mon, 08 Sep 2003 15:32:21 GMTETag: "b0aac0542e25c31:89d"Content-Length: 7369




Netscape Enterprise 4.1 server:Http/1.1 200 OKServer: Netscape-Enterprise/4.1Date: Mon, 08 Sep 2003 16:19:04 GMTContent-type: text/htmlLast-modified: Mon, 08 Sep 2002 15:37:56 GMTContent-length: 57Accept-ranges: bytesConnection: 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.1 403 ForbiddenDate: Mon, 08 Sep 2003 02:41:27 GMTServer: Unknown-Webserver/1.0Connection: closeContent-Type: text/html; charset=iso-8859-1


下面是一个使用了ServerMask插件的IIS服务器的例子:


Http/1.1 200 OKServer: Yes we are using ServerMaskDate: Mon, 08 Sep 2003 02:54:17 GMTConnection: Keep-AliveContent-Length: 18273Content-Type: text/htmlSet-Cookie: It works on cookies too=82.3S3.O12.NT2R0RE,4147ON3P,.4OO.; path=/Cache-control: private



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

四. 协议行为

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

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


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


Exp1:基本的Http请求

我们先发送请求HEAD / Http/1.0,然后分析Http响应头里的信息,对头信息里项的排序进行分析.发送的请求命令如下:

C:>nc apache.example.com 80 //回车,下同

HEAD / Http/1.0 //输入后回车,下同
响应信息:

1:Apache 1.3.23


Http/1.1 200 OKDate: Mon, 08 Sep 17:10:49 GMTServer: Apache/1.3.23Last-Modified: Thu, 27 Feb 2003 03:48:19 GMTETag: "32417-c4-3e5d8a83"Accept-Ranges: bytesContent-Length: 196Connection: closeContent-Type: text/html


2:IIS 5.0


Http/1.1 200 OKServer: Microsoft-IIS/5.0Content-Location: Http://iis.example.com/Default.htmDate: Mon, 08 Sep 20:13:52 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Mon, 08 Sep 2003 10:10:50 GMTETag: W/"e0d362a4c335be1:ae1"Content-Length: 133


3:Netscape Enterprise 4.1


Http/1.1 200 OKServer: Netscape-Enterprise/4.1Date: Mon, 08 Sep 2003 06:01:40 GMTContent-type: text/htmlLast-modified: Mon, 08 Sep 2003 01:37:56 GMTContent-length: 57Accept-ranges: bytesConnection: close



比较结果:Apache头信息里的Server和Date项的排序是不同的.

Exp2:Http DELETE请求

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


C:>nc apache.example.com 80DELETE / Http/1.0


响应信息:
1:Apache 1.3.23


Http/1.1 405 Method Not AllowedDate: Mon, 08 Sep 2003 17:11:37 GMTServer: Apache/1.3.23Allow: GET, HEAD, POST, PUT, DELETE, CONNECT, OPTIONS, PATCH, PROPFIND, PROPPATCH,MKCOL, COPY, MOVE, LOCK, UNLOCK, TRACEConnection: closeContent-Type: text/html; charset=iso-8859-1


2:IIS 5.0


Http/1.1 403 ForbiddenServer: Microsoft-IIS/5.0Date: Mon, 08 Sep 2003 20:13:57 GMTContent-Type: text/htmlContent-Length: 3184


3:Netscape Enterprise 4.1


Http/1.1 401 UnauthorizedServer: Netscape-Enterprise/4.1Date: Mon, 08 Sep 2003 06:03:18 GMTWWW-authenticate: Basic realm="WebServer Server"Content-type: text/htmlConnection: close



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

Exp3:非法Http协议版本请求

这次我们将发送非法的Http协议版本请求,比如GET / Http/3.0请求,事实上Http 3.0是不存在的,发送请求命令:

C:>nc apache.example.com 80

GET / Http/3.0
响应信息:
1:Apache 1.3.23


Http/1.1 400 Bad RequestDate: Mon, 08 Sep 2003 17:12:37 GMTServer: Apache/1.3.23Connection: closeTransfer-Encoding: chunkedContent-Type: text/html; charset=iso-8859-1


2:IIS 5.0


Http/1.1 200 OKServer: Microsoft-IIS/5.0Content-Location: Http://iis.example.com/Default.htmDate: Mon, 08 Sep 2003 20:14:02 GMTContent-Type: text/htmlAccept-Ranges: bytesLast-Modified: Mon, 08 Sep 2003 20:14:02 GMTETag: W/"e0d362a4c335be1:ae1"Content-Length: 133


3:Netscape Enterprise 4.1


Http/1.1 505 Http Version Not SupportedServer: Netscape-Enterprise/4.1Date: Mon, 08 Sep 2003 06:04:04 GMTContent-length: 140Content-type: text/htmlConnection: close



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

Exp4:不正确规则协议请求

这次测试主要是对GET / JUNK/1.0. 请求的响应,发送请求命令:

C:>nc apache.example.com 80

GET / JUNK/1.0
响应信息:
1:Apache 1.3.23


Http/1.1 200 OKDate: Sun, 15 Jun 2003 17:17:47 GMTServer: Apache/1.3.23Last-Modified: Thu, 27 Feb 2003 03:48:19 GMTETag: "32417-c4-3e5d8a83"Accept-Ranges: bytesContent-Length: 196Connection: closeContent-Type: text/html


2:IIS 5.0


Http/1.1 400 Bad RequestServer: Microsoft-IIS/5.0Date: Fri, 01 Jan 1999 20:14:34 GMTContent-Type: text/htmlContent-Length: 87


3:Netscape Enterprise 4.1


<HTML><HEAD><TITLE>Bad request</TITLE></HEAD><BODY><H1>Bad request</H1>Your browser sent a query this server could not understand.</BODY></HTML>



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

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

服务器 头信息项排序 Delete请求 非法版本 不规则协议


Apache/1.3.23 Date, Server 405 400 200MS-IIS/5.0 Server, Date 403 200 400Netscape4.1 Server, Date 401 505 no header


五. 指纹识别工具

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

Microsoft-IIS/5.0


CD2698FD6ED3C295E4B1653082C10D64811C9DC594DF1BD04276E4BB811C9DC50D7645B5811C9DC52A200B4C9D69031D6014C217811C9DC5811C9DC52655F350FCCC535BE2CE6923E2CE6923F2454256E2CE69272576B769E2CE6926CD2698FD6ED3C295E2CE692009DB9B3E6ED3C2956ED3C2956ED3C2956ED3C295E2CE69236ED3C295



Apache/1.3.x


9E431BC86ED3C295811C9DC5811C9DC5050C5D32505FCFE84276E4BB630A04DB0D7645B5970EE6BB811C9DC5CD37187C11DDC7D78398721EB06FE5D78A91CF57FCCC535B6ED3C295FCCC535B811C9DC5E2CE69272576B769E2CE69269E431BC86ED3C295E2CE69262A200B4C811C9DC5811C9DC5811C9DC5811C9DC5811C9DC5811C9DC5



Httprint先把一些Http签名信息保存在一个文档里,然后分析那些由Http服务器产生的结果.

当我们发现那些没有例在数据库中的签名信息时,我们可以利用Httprint产生的报告来扩展这个签名数据库,而当Httprint下一次运行时,这些新加的签名信息也就可以使用了.

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

以下是命令行下的帮助文件:

D:>Httprint

Usage: Httprint {-h <host> | -i <input file>} -s <signatures> [... options]

-h <host> 可以是ip地址ip范围,或者是url地址

-i <input file> 一个包含测试地址的文件,默认文件是input.txt

-s <signatures> 一个包含Http签名的文件,默认是signatures.txt

Options:

-o <output file> 默认的报告文件是"Httprintoutput.html".可以自己定义

-tp <ping timeout> Ping超时时间,默认是1000 ms. 最大是30000 ms.

-t <timeout> 连接和读取超时时间,默认是10000 ms. 最大是100000 ms.

-r <retry> 时间. 默认是3次. 最大是30次.

-P0 不Ping主机.

-? 帮助信息.

例子:


Httprint -h http://www.target.com -s signatures.txtHttprint -h Https://www.target.com -s signatures.txtHttprint -h Http://www.target.com:8080/ -s signatures.txtHttprint -h 10.0.1.1-10.0.1.254 -s signatures.txt -o 10_0_1_x.htmlHttprint -i input.txt -s signatures.txt -o output.html



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


D:>Httprint -h Http://www.target.com -s signatures.txtHost: http://www.target.com is alive...Finger Printing on Http://www.target.com:80/Derived Signature:Apache/1.3.26 (Unix)9E431BC86ED3C295811C9DC5811C9DC5050C5D32505FCFE84276E4BBC184CB920D7645B5811C9DC52A200B4C811C9DC511DDC7D78398721E811C9DC5811C9DC5E2CE6923E2CE6923E2CE6923811C9DC568D17AAE2576B769E2CE6926811C9DC5E2CE6923E1CE67B1811C9DC5E2CE6920E2CE69206ED3C2956ED3C295E2CE6920E2CE69206ED3C295811C9DC568D17AAEE2CE6923
Banner Reported: Apache/1.3.26 (Unix)Banner Deduced: Apache/1.3.26Scores:Microsoft-IIS/4.0: 47Microsoft-IIS/5.0: 57Microsoft-IIS/5.0 ASP.NET: 57Microsoft-IIS/5.1: 57Microsoft-IIS/6.0: 75........................... //略去一些Apache/2.0.x: 70Apache/1.3.27: 79Apache/1.3.26: 80Apache/1.3.[4-24]: 78............................ //略去一些Com21 Cable Modem: 49



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

以下是图形界面的抓图:

此主题相关图片如下:

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

此主题相关图片如下:

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


D:>Httprint unknown.example.comReported signature:Protected by ServerMaskCD2698FD6ED3C295811C9DC5811C9DC5811C9DC594DF1BD04276E4BB811C9DC50D7645B5811C9DC5811C9DC59D69031D6014C217811C9DC5811C9DC580FF2CD2FCCC535BE2CE6923E2CE6923811C9DC5E2CE69272576B769E2CE69262CEAB43E6ED3C295FCCC535B811C9DC56ED3C2956ED3C2956ED3C2956ED3C295E2CE69236ED3C295Best Match: Microsoft-IIS/5.0,Microsoft-IIS/5.1Scores:Microsoft-IIS/4.0: 86Microsoft-IIS/5.0: 101Microsoft-IIS/5.1: 101Microsoft-IIS/6.0: 56.............................Apache/1.3.27: 35Apache/1.3.26: 36Apache/1.3.x: 34..............................MiniServ/0.01: 15



尽管服务器使用ServerMask迷惑了响应信息, 但是Httprint仍然精确的判断出它是Microsoft-IIS/5.0或5.1

下载地址:

WEB服务器指纹工具 httprint build 301 (beta)


软件名称 WEB服务器指纹工具 httprint最新版本 build 301 (beta)软件大小 793 K更新时间 2005-12-22软件语言 English应用平台 Windows/Linux/Mac/FreeBSD联 系 人 httprint@net-square.com开 发 商 net-square solutions pvt. ltd.软件性质 免费软件(无插件)许可协议 个人、教育、非商业使用免费商业授权请联系上面的E-Mail推荐理由 非商业情况下可以免费使用可用于WEB安全测试时收集WEB应用指纹



软件简介:

  httprint是一个WEB服务器指纹工具。它依赖于Web服务器的特点去准确地识别Web服务器,尽管他们可能通过改变服务器的旗帜字符串(server bannerstrings),或通过类似mod_security或servermask的插件混淆事实。httprint也可用于检测没有服务器旗帜字符串的网络功能设备,如无线接入点,路由器,交换机,电缆调制解调器等等。httprint使用文本签名字符串并且很容易将签名添加到签名数据库中。更多的介绍请查看官方网页:Introduction to HTTP fingerprinting。
特点


* Identification of web servers despite the banner string and anyother obfuscation. httprint can successfully identify the underlyingweb servers when their headers are mangled by either patching thebinary, by modules such as mod_security.c or by commercial products such as ServerMask. Click here to see an example of how httprint detects disguised servers.* Inventorying of web enabled devices such as printers, routers, switches, wireless access points, etc. Click on the sample HTML report.* Customisable web server signature database. To add newsignatures, simply cut and paste the httprint output against unknownservers into the signatures text file.* Confidence Ratings. httprint now picks the best matchesbased on confidence ratings, derived using a fuzzy logic technique,instead of going by the highest weight. More details on thesignificance of confidence ratings can be found in section 8.4 of the Introduction to HTTP fingerprinting paper.* [new] Multi-threaded engine. httprint v301 is acomplete re-write, featuring a multi-threaded scanner, to processmultiple hosts in parallel. This greatly saves scanning time.*multi-threading is not yet supported in the FreeBSD version.* [new] SSL information gathering. httprint nowgathers SSL certificate information, which helps you identify expiredSSL certificates, ciphers used, certificate issuer, and other such SSLrelated details.* [new] Automatic SSL detection. httprint can detectif a port is SSL enabled or not, and can automatically switch to SSLconnections when needed.* Automatic traversal of HTTP 301 and 302 redirects. Manyservers who have transferred their content to other servers send adefault redirect response towards all HTTP requests. httprint nowfollows the redirection and fingerprints the new server pointed to.This feature is enabled by default and can be turned off, if needed.* Ability to import web servers from nmap network scans. httprint can import nmap's xml output files.* Reports in HTML, CSV and XML formats.* Available on Linux, Mac OS X, FreeBSD (command line only) and Win32 (command line and GUI).





下载地址:平台 版本 地址 md5Win32图形/命令行版本301 下载 a66408308c3f540030bbb0d59716b032http://net-square.com/httprint/httprint_win32_301.zipLinux 301 下载 af53704de9c1851bd439cbe3fab3e0adhttp://net-square.com/httprint/httprint_linux_301.zipMac OS X 301 下载 6b188cd60df6eca5409694fa40859f0dhttp://net-square.com/httprint/httprint_macosx_301.zipFreeBSD 301 下载 d5efd9463f671ce92f50ce3222f1774ehttp://net-square.com/httprint/httprint_freebsd_301.zip



版权声明:本文为CSDN博主「god_7z1」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/god_7z1/article/details/6807419


渗透测试踩点之httprint指纹识别技术


一如既往的学习,一如既往的整理,一如即往的分享。感谢支持渗透测试踩点之httprint指纹识别技术

“如侵权请私聊公众号删文”



扫描关注LemonSec

渗透测试踩点之httprint指纹识别技术

觉得不错点个“赞”、“在看”哦渗透测试踩点之httprint指纹识别技术


本文始发于微信公众号(LemonSec):渗透测试踩点之httprint指纹识别技术

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年7月14日01:00:50
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   渗透测试踩点之httprint指纹识别技术https://cn-sec.com/archives/303061.html

发表评论

匿名网友 填写信息