**

Web 指纹识别

**
攻击者最常用的方法是首先覆盖目标的网络存在并枚举尽可能多的信息。利用此信息,攻击者可以製定出准确的攻击方案,这将有效利用目标主机正在使用的软件类型/版本中的漏洞。

在攻防环境中信息收集总是非常重要的一个重要环节,多维度信息收集在红队攻防中绘制更完善的攻击面以及攻击思路流程。
识别方法
现有指纹识别方法通常会有对 Header,首页关键字两大类别,这其中包含了指定 Url 路径中的关键字,或者各种 Meta 标签,JS 文件等。
1. Header 数据包中
确定是否使用代理或缓存,可以通过 Header 中 Via 字段做简要判断,如该请求包中使用了 Squid 代理
$ nc www.godeye.vip 80 GET / HTTP/1.0 ``HTTP/1.0 400 Bad Request Server: Squid/2.5-DEVEL Mime-Version: 1.0 Date: Wed, 14 Mar 2020 09:18:26 GMT Content-Type: text/html Via: 1.0 proxy.godeye.vip.com:65535 (Squid/2.5-Devel) Proxy-Connection: close Authorization 字段可判断程序是否需要登录认证:Authorization = "Authorization" ":" credentials 关于 Cookie 有部分开发者会定义自己的 Cookie 字段,如 JeecmsSession=“xxxxx” 或者 cookies=“phpcms_xxxx” Server 字段多为分析目标使用了什么样的服务器中间件

$ nc www.test.com 80
GET / HTTP/1.0
HTTP/1.1 302 Found
Cache-Control: private
Content-Type: text/html; charset=utf-8
Location: /en/us/default.aspx
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Sat, 14 Jul 2020 15:22:26 GMT
Connection: keep-alive
Content-Length: 136

在 RFC 文档中提供了约 40 个字段信息可参考,对各个字段进行信息描述:https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html
状态码特征
状态码中包含的信息可以作为指纹的一部分,可以用此来鉴别服务器指纹,防火墙指纹等等

当请求一个不存在页面时 Apache 与 IIS 返回响应是截然不同

Apache 报错返回 “Not Found”

Apache 1.3.29
# nc target1.com 80
HEAD /non-hack-file.txt HTTP/1.0
HTTP/1.1 404 Not Found
Date: Mon, 07 Jun 2020 14:31:03 GMT
Server: Apache/1.3.29 (Unix) mod_perl/1.29
Connection: close
Content-Type: text/html; charset=iso-8859-1

Microsoft IIS/5.0 返回 “Object Not Found”.

# nc godeye.vip 80
HEAD /hack-test-file.txt HTTP/1.0
HTTP/1.1 404 Object Not Found
Server: Microsoft-IIS/5.0
Date: Mon, 07 Jun 2020 14:41:22 GMT
Content-Length: 461
Content-Type: text/html

Date 位置不同
Apache服务器始终将“ Date”标头放置在“ Server”标头之前,而Microsoft-IIS具有相反的顺序。
Apache

# nc target1.com 80
HEAD / HTTP/1.0
HTTP/1.1 200 OK
Date: Mon, 07 Jun 2020 15:21:24 GMT
Server: Apache/1.3.29 (Unix) mod_perl/1.29

Microsoft-IIS/4.0

# nc target2.com 80
HEAD / HTTP/1.0
HTTP/1.1 404 Object Not Found
Server: Microsoft-IIS/4.0
Date: Mon, 07 Jun 2020 15:22:54 GMT
...

OPTIONS 方法不同
当在 HTTP 请求中发送 OPTIONS 方法时,在“Allow”头中返回给定 URI 允许的方法列表。Apache 只返回“允许”头,而 IIS 也包括“公共”头。

在Apache中:

Apache 1.3.29

# nc target1.com 80
OPTIONS * HTTP/1.0
HTTP/1.1 200 OK
Date: Mon, 07 Jun 2020 16:21:58 GMT
Server: Apache/1.3.29 (Unix) mod_perl/1.29
Content-Length: 0
Allow: GET, HEAD, OPTIONS, TRACE
Connection: close

Microsoft-IIS/5.0

# nc target2.com 80
OPTIONS * HTTP/1.0
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Mon, 7 Jun 2004 12:21:38 GMT
Content-Length: 0
Accept-Ranges: bytes
DASL: <DAV:sql>
DAV: 1, 2
Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
Allow: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
Cache-Control: private

二 .网页特征
指纹识别在网页特征中我们常常会关注

1、[Html 中关键字 ]

2、[Robots.txt,Readme.txt,license .txt]

3、[网页中各个标签]

4、[网站目录,网页注释 ]

5、[静态文件 Hash,静态文件命名习惯 ]

6、[图标中 Hash]

7、[匹配通用关键字 “Powered”,“xx公司开发”] 等等
在网页特征识别中可能会存在指纹误报问题,解决这个误报第一是指纹质量,第二,多维度条件匹配。Url 内容匹配会导致向目标服务器发送大量路径请求信息探测,这样情况可以部署多节点服务器配合代理 IP 进行不断替换。

三 识别速度
1、算法实现,通过算法提升指纹识别速度。

2、策略实现。将指纹按照开发语言进行分类,请求网站获取 Header 头部内容 X-Powered-By: ASP.NET 或者 Set-cookie:Aspsessionid 判断程序开发语言为 ASP 或 ASPX,进入到 ASP 指纹分类,进行识别。类似的方法可以尽可能减少发包频率,避免被 Ban 掉。

3、其他

四 发现未知指纹

1、指纹收集途径

指纹识别定位为红队选手提供攻击指引,在进行安全攻防活动时,我们目前客户是什么样的行业。进行关联分析,按照共同拥有特性可以简单按分类进行统计。在收集指纹的时候注意,目标大单位下子单位基本都是一套系统,从销售上来说,一般情况搞定大单位后,在向下推广是非常容易的事情。可以在公开招投标系统中搜集该单位竞标单位。有那些,进行定向 收集摸索。

2、相似度指纹收集。

通过爬虫对大量行业系统进行静态资源爬取,通过程序计算 Hash 值,在经过大量模拟抓取后,对已有 Hash 值进行匹配得知那些相似系统,在根据相关信息收集定位该系统开发商。

五 指纹平台

Godeye,zoomeye,shodan等。