Web 指纹识别之路

2020-08-11 16:08:17 浏览数 (1)

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

在攻防环境中信息收集总是非常重要的一个重要环节,多维度信息收集在红队攻防中绘制更完善的攻击面以及攻击思路流程。

背景

资产结合漏洞是一个不错的组合,在发起攻击之前我们事先要了解某一个程序特征,弱点或者是历史存在的缺陷,有利于对目标进行快速了解。文章会对一些有趣的特性进行分享。

识别方法

现有指纹识别方法通常会有对 Header,首页关键字两大类别,这其中包含了指定 Url 路径中的关键字,或者各种 Meta 标签,JS 文件等。

一. Header 数据包中

互联网上有大篇幅内容来鉴别网站应用,分享几个典型字段案例类型。

确定是否使用代理或缓存,可以通过 Header 中 Via 字段做简要判断,如该请求包中使用了 Squid 代理

代码语言:javascript复制
$ 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 字段多为分析目标使用了什么样的服务器中间件

代码语言:javascript复制
$ 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"

代码语言:javascript复制
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".

代码语言:javascript复制
# 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

代码语言:javascript复制
# 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

代码语言:javascript复制
# 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

代码语言:javascript复制
# 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

代码语言:javascript复制
# 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

其他方式

在常见 Header 头部信息中还有大部分信息根据自身配置来确定服务所使用了什么样的指纹如 ETag,Vary,Expires 等,而 IIS 服务器则沒有。

语言识别:

开发语言各有不同,有使用各种语言或者框架开发,大部分语言都有属于自己的一些特性,比如在 Header 请求响应头中会包含

代码语言:javascript复制
X-Powered-By: ASP.NET
X-AspNet-Version: 2.0.50727
Cookie:XXXX

Cookie 命名通常包含了应用程序开发语言的特征

代码语言:javascript复制
后缀                  技术                         服务
---------                  ----------                       ---------------
.pl                        Perl CGI script                  Generic; usually web servers running on Unix
.asp                       Active Server Pages              Microsoft IIS
.aspx                      ASP                              Microsoft .NET
.php                       PHP script                       Generic; usually interfaced with Apache
.cfm                       ColdFusion                       Generic; usually interfaced with Microsoft IIS
.nsf                       Lotus Domino                     Lotus Domino server
.jsp                       Java Server Page                 Various platforms
.do                        Java Struts                      Various platforms

报错收集特征 设法让服务器产生错误,并出现 Debug 模式,从中可以获取相关环境信息,如 IIS 在没有做好报错处理时候会对外展示错误信息,如网站 Web 路径,版本号等

代码语言:javascript复制
Server Error in '/' Application.
--------------------------------------------------------------------------------
SQL Server does not exist or access denied.
Description: An unhandled exception occurred during the execution of the current web request.
Please review the stack trace for more information about the error and where it originated in

或者可以对其进行 SQL 注入,如果有报错的话你很幸运还可以鉴别数据库类型,通过提交不同的注入语句实现。 相关防御技术可以参考 rfc2616 官方文档,文档中描述了如何隐藏规避这些特征。

二 .网页特征

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

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、指纹收集途径

指纹识别定位为红队选手提供攻击指引,在进行安全攻防活动时,我们目前客户是什么样的行业。进行关联分析,按照共同拥有特性可以简单按分类进行统计,如:

代码语言:javascript复制

在收集指纹的时候注意,目标大单位下子单位基本都是一套系统,从销售上来说,一般情况搞定大单位后,在向下推广是非常容易的事情。

可以在公开招投标系统中搜集该单位竞标单位。有那些,进行定向 收集摸索。

2、相似度指纹收集。

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

五 指纹平台

Godeye 指纹在线识别平台,目前拥有 8650 余条应用指纹,近万条之别规则,同时包含防火墙,CDN,重点应用组件应用识别等。

识别速度,为了减少网络环境的不稳定引起的测量误差,先使用爬虫程序批量获取 HTTP 响应,将此样本进行测试 1000 个 Url 目标在 1-2 分钟时间内完成识别。

Godeye 向用户提供用单个,批量识别。现在注册赠送高达 3000 条批量识别任务。

使用入口(点击阅读原文直接注册):

https://www.godeye.vip

0 人点赞