Contents

观星Finger-P指纹平台指纹编写

0x00 前言

最近,数字观星和谷安联合主办了一个活动,奖品比较丰厚,还有甜品能帮上应届求职,不免有些心动,但原来从没有接触过指纹编写,就在文档和大佬指点下开始尝试了,如今也刚好达到了40条,顺便记录下心路历程。

数字观星Finger-P指纹平台

0x01 啥是指纹?

数字观星Finger-P指纹平台是基于Wappalyzer针对于web指纹识别的平台,在此文中指纹特指web指纹。Web指纹是web服务组件在开发时留下的对其类型及版本进行标识的特殊信息,包括web服务器指纹、web运用指纹以及前端框架指纹等。在web安全测试过程中,收集web指纹信息也是一个比较重要的步骤;在安全运营过程中,通过指纹识别识别资产的web信息,这样能更加了解整个资产存在哪些方面的威胁,然后对症检测修补,提升安全工作的效率。网络上开源的web指纹识别程序很多,如Wappalyzer,whatweb, wpscan, joomscan等等,也有云悉等在线指纹平台。

这里简单展示火狐插件Wappalyzer对本网站的指纹信息检测。

观星Finger-P指纹平台接收指纹(网站默认首页能识别)的范围包括CMS应用指纹、WEB中间件指纹、首页能识别的应用指纹、国内外的其它web应用指纹等。

指纹应用层级

**应用层:**主要是各种web应用系统以及前端js框架等,比如dedecms、xxx应用系统、邮件系统等;
**支撑层:**主要是语言、后端框架等,比如java、php、struts、spring等;
**服务层:**主要是服务和应用,以及协议,包含openssh、apahce、tomcat、ssl、ntp、icmp等;
**系统层:**主要指操作系统,包含Linux、unix、centos、Ubuntu、Windows等;
**硬件层:**主要是硬件设备为主,包含路由器、交换机、防火墙、VPN、waf(现在不区分软waf)、以及物联网等设备;

基于Wappalyzer的指纹识别分类

指纹识别的几种方式

A、网页中发现关键字(比如CopyRight、电话号、应用名称等。)

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

C、指定URL的关键字

D、指定URL的TAG模式

0x02 Wappalyzer的安装与使用

Wappalyzer是基于正则表达式来识别web应用,它的功能是识别单个url的指纹,其原理就是给指定URI发送HTTP请求,获取响应头与响应体并按指纹规则进行匹配。它也是一款浏览器插件,能识别出网站采用了那种web技术,能够检测出CMS和电子商务系统、留言板、javascript框架,主机面板,分析统计工具和其它的一些web系统。

(1)Wappalyzer的安装与使用需要基于Node.js,需要注意的是官方的帮助文档中提及Nodejs V10/12 已经不支持采用TLS 1.0以前协议的HTTPS站点,建议使用V8版本来进行测试。

(2)通过Node.js安装wappalyzer

<code>npm i wappalyzer</code>

(3)使用wappalyzer指纹识别

cmd打开命令行,使用wappalyzer 目的网站命令来进行指纹识别。

或者通过调用wappalyzer模块识别指纹信息node ./node_modules/wappalyzer/cli.js 目的网站

Wappalyze执行文件在C:\Users\xx\AppData\Roaming\npm\,Wappalyzer的包目录在C:\Users\xx\AppData\Roaming\npm\node_modules\wappalyzer,重点是apps.json(即为technologies.json),这个文件记录的是整个的指纹规则,json文件里面有两部分apps(technologies)与categories,写的指纹就是放在这里面进行识别网站的,categories是指纹的类型,这项可以不用管,只看apps(technologies)。

0x03 指纹规则

基于Wappalyzer的指纹规则说明

指纹编写样例

"Struts": {
 "cats": [ "18"],
 "html":"(href|action|src).*?=.*?(action|do)\\;confidence:50",
  "url": "/.*\\.do$|/.*\\.action$\\;confidence:40",
  "html": "Struts Problem Report",
  "website": "http://struts.apache.org/",
  "_fingerprint_note":"Apache Struts是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。",
  "_fingerprint_test_url":"https://www.shuziguanxing.com/"
}
  1. 应用名称struts组件
  2. 分类18(web框架)
  3. 匹配html中是否存在action,do后缀,定义可信值50
  4. layer是指这个应用属于5层中的那一层,该应用属于数据支撑层
  5. 匹配URL中是否有do和action后缀,定义可信值40
  6. 匹配html中是否存在“Struts Problem Report”字符串
  7. website为应用官网地址
  8. _fingerprint_note是简单描述这个应用
  9. _fingerprint_test_url为指纹识别测试的URL

默认不定义可信值则为100。总体可信值如果超过100,也只会返回100。

Wappalyzer测试的编写样例

{   "$schema":
"../schema.json",   
"apps":{                      
 "1C-Bitrix":{         
  "cats":[  1  ],       
   "headers":{
      "Set-Cookie":"BITRIX_",            
      "X-Powered-CMS":"Bitrix Site Manager"  
   },         
    "html":"(?:<link[^>]+components/bitrix(?:src|href)=\"/bitrix/(?:js|templates))",    
    "icon":"1C-Bitrix.png",  
    "implies":"PHP",   
    "script":"1c-bitrix",          
    "website":"http://www.1c-bitrix.ru"   },     },   
    "categories":{     "1":
      {  "name":"CMS",     "priority":1       },                       ......    
}}

apps

  1. 应用名1C-Bitrix
  2. 匹配Headers特征
  3. 匹配html
  4. 匹配icon
  5. 包含PHP的所有指纹信息
  6. 匹配Script
  7. website为应用官网地址

categories

  1. 编号
  2. 名称
  3. 优先级

上述样例中用到了一些正则表达式,这在指纹编写过程中可以提升指纹的质量,比如将年份2021换成\d{4}

0x04 实战编写

(1)寻找要写web指纹的产品

这里需要用到一些工具,SodanFofaZoomEye,可以通过类似https://www.oschina.net/project或者https://www.cnvd.org.cn/flaw/typelist?typeId=29去批量获取产品名录;或者是批量获取web软件厂商名录再去空间测绘的站点批量收集厂商的产品名录;又或者直接范围较广的关键词在空间测绘引擎中搜索批量获取名单,诸如地名,应用类别名称等关键词。俗话说,万事开头难,这一步是整个指纹编写最难搞的一步。

(2)寻找线上样例与排重

可以直接到指纹库中查询进行大概率排重。也可以考虑在批量寻找产品的时候,在大方向上避开Finger-P指纹平台上已有的大块,这个需要对Finger-P指纹平台已有指纹的大块有所了解和自行分析。通过避开Finger-P指纹平台上已有的大块来简化排重这一个步骤。出现“此域名指纹不存在!”或者现有的指纹信息中没有对应产品。

(3)观察该web应用

按照我微不足道的经验来说,Web应用系列的产品中html是最容易看出来的,一般藏在<title><p><div><meta>等标签中。

其次是cookiescript

其他的按照指纹规则搜集。

(4)依据以上特征提交指纹到平台****

 平台提供两种方式:表单提交和批量提交,初学者建议采用表单提交,熟练后批量提交很爽快。

首先看一下表单的页面。

应用层级对应0x01的内容。

识别方式默认是首页特征(即为HTML中的内容),对应指纹的识别方式。

指纹种类默认是Web Server(Web 服务),可根据需要多选或修改,一般默认就足够的。

批量提交的指纹撰写方式可具体参考下列文档。

小雪 | 宜学以致用写指纹 忌不积硅步绘资产

小雪 | 宜指纹学习以致用 忌只看少练基础功

Finger-P指纹平台活动技术指南 : Web指纹编写与批量编写思想

官方帮助文档