Web指纹编写与批量编写思想 – 作者:DSO观星市场部

Web指纹编写与批量编写思想

一、前言

我们通过玩一个小游戏——找不同,来引入话题。

E:\RJ\1观星工作\学习实践\指纹与数字资产管理\找茬1.jpgE:\RJ\1观星工作\学习实践\指纹与数字资产管理\找茬2.jpg

在上述图片中,你一共找到几处不同的地方?6处?7处?

接下来公布正确答案:

E:\RJ\1观星工作\学习实践\指纹与数字资产管理\找茬1.jpgE:\RJ\1观星工作\学习实践\指纹与数字资产管理\正确答案副本.jpg

99%的人一定都至少找到图片中的6处不同,但可能只有1%的人发现了藏在手指上指纹的不同。读到这里可能会有人想,“图片里指纹那么小,谁会注意到?就算注意到了,谁又能那么仔细的看出来两张图的区别?”但正是这最细微的差距,决定了1%和99%的人的区别。

什么是指纹?

指纹,也叫手印,即是表皮上突起的纹线。由于人的指纹是遗传与环境共同作用产生的,因而指纹人人皆有,却各不相同。由于指纹重复率极小,大约150亿分之一,故其称为“人体身份”。人体指纹识别随着科技的发展也越来越广泛的运用在我们的日常生活之中,我们不妨来数数看:每天早上我们通过指纹识别解锁手机、去往单位的路上通过指纹付款购买豆浆和包子作为早饭、到达公司再用指纹打卡上班。仅仅一个早上,我们至少做了3次指纹识别。

E:\RJ\1观星工作\学习实践\指纹与数字资产管理\指纹.jpg

在互联网数字资产管理中,数字资产指纹就是数字资产的“身份”,也是信息系统安全管理工作的基础。通过网络资产探测(指纹)可以在0day爆发时快速匹配到受影响的信息系统;还可以发现违规开放的资产,为安全运营管理提供便利 ,确保安全制度的稳健实施。指纹识别更是基线管理的基础,正如生物指纹对于生物的价值一样,数字资产指纹识别也在数字资产管理中起到了至关重要的作用。

在实际的渗透测试过程中,信息收集是非常重要的基础工作;在信息收集中,指纹识别则信息收集环节中最基础也是最重要的一步,全面、准确的信息收集可以使你在安全检测的时候更加的得心应手。如果把渗透比作探索黑暗迷宫的话,那指纹信息收集就是前期的“跑图”,它可以帮你点亮迷宫的大部分地图。

所以,不论对于攻击方还是防守方,数字资产的指纹信息的收集都是非常重要的。(PS:业内某大佬说,“黑掉全世界的第一步就是搜集指纹”。所以想成为黑客或者想要学习黑客技术的同学们,就把指纹收集当成你“伟大”壮举的第一步吧!

二、web指纹介绍

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

数字观星Finger-P指纹平台是基于Wappalyzer针对于web指纹识别的平台,下面我们将从介绍Wappalyzer,指纹(下面的web指纹将均简称为指纹)的识别方式,指纹分类,指纹规则,指纹识别例子讲解,分析Wappalyzer的执行,调试编写好的指纹,让读者了解如何入门指纹编写。

1、Wappalyzer

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

(1)       node.js环境的安装,官网下载地址https://nodejs.org/en/

(2)       通过Node.js安装wappalyzer

img6

记住这个路径 C:\Users\xx\AppData\Roaming\npm\node_modules\wappalyzer之后讲解调试指纹有用

(3)       使用wappalyzer指纹识别

img7

2、指纹识别的几种方式

A、网页中发现关键字

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

C、指定URL的关键字

D、指定URL的TAG模式

3、指纹识别分类

基于Wappalyzer的指纹识别分类

分类编号

分类名称

中文名称

备注说明

1

CMS

内容管理系统

例如:wordpress

2

Message Boards

留言板

例如:phpBB

3

Database Managers

数据库管理

例如:phpMyAdmin

4

Documentation Tools

文件工具

例如:GitBook

5

Widgets

窗口小部件

例如:Facebook

6

Ecommerce

电子商务

例如:Wikinggruppen

7

Photo Galleries

照片画廊

例如:phpAlbum

8

Wikis

例如:ikiwiki

9

Hosting Panels

主机控制板

例如:cPanel

10

Analytics

分析统计

例如:Webtrends

11

Blogs

博客

例如:Typecho

12

JavaScript Frameworks

JavaScript框架

例如:SoundManager

13

Issue Trackers

问题跟踪

例如:Redmine

14

Video Players

视频播放器

例如:Asciinema

15

Comment Systems

评论系统

例如:Question2Answer

16

Captchas

验证码

例如:Mollom

17

Font Scripts

字体脚本

例如:Ionicons

18

Web Frameworks

Web框架

例如:Includable

19

Miscellaneous

其它

例如:Twitter Emoji (Twemoji)

20

Editors

编辑器

例如:FrontPage

21

LMS

学习管理系统

例如:Dokeos

22

Web Servers

Web服务

例如:Apache

23

Cache Tools

缓存工具

例如:wpCache

24

Rich Text Editors

富文本编辑器

例如:TinyMCE

25

JavaScript Graphics

JavaScript图形插件

例如:Timeplot

26

Mobile Frameworks

移动框架

例如:Mobify

27

Programming Languages

开发语言

例如:Go

28

Operating Systems

操作系统

例如:Gentoo

29

Search Engines

搜索引擎

例如:Fact Finder

30

Web Mail

Web邮件

例如:SquirrelMail

31

CDN

CDN

例如:Netlify

32

Marketing Automation

自动化营销

例如:Marketo

33

Web Server Extensions

Web服务器扩展

例如:mod_wsgi

34

Databases

数据库

例如:Mysql

35

Maps

地图

例如:Ushahidi

36

Advertising Networks

广告网络

例如:Titan

37

Network Devices

网络设备

例如:Moxa

38

Media Servers

媒体服务器

例如:MediaTomb

39

Webcams

网络摄像头

例如:MOBOTIX

40

Printers

打印机

例如:Dell

41

Payment Processors

付款处理器

例如:Stripe

42

Tag Managers

标签管理

例如:Google Tag Manager

43

Paywalls

付费

例如:Piano Solo

44

Build CI Systems

持续集成系统

例如:Jenkins

45

Control Systems

控制系统

例如:Schneider

46

Remote Access

远程访问

例如:ShellInABox

47

Dev Tools

开发工具

例如:Phabricator

48

Network Storage

网络存储

例如:Synology DiskStation

49

Feed Readers

Feed阅读器

例如:Planet

50

Document Management Systems

文档管理系统

例如:MHonArc

51

Landing Page Builders

引导页

例如:ApexPages

52

Live Chat

在线聊天

例如:Aircall

53

CRM

客户关系管理

例如:Salesforce

54

SEO

引擎优化

例如:Yoast SEO

55

Accounting

会计

例如:Akaunting

56

Cryptominer

挖矿程序

例如:ProjectPoi

57

Static Site Generator

静态网站生成器

例如:Hugo

58

User Onboarding

聊天机器人软件

例如:instabot

59

JavaScript Libraries

JavaScript库

例如:jQuery

60

Containers

容器

例如:Docker

61

SaaS

SaaS

例如:Amazon ECS

62

PaaS

PaaS

例如:Amazon Web Services

63

IaaS

IaaS

例如:LocalFocus

64

Reverse Proxy

反向代理

例如:Nginx

65

Load Balancer

负载均衡

例如:Amazon ELB

1000

Service Banner

服务版本

例如:SSH

1001

Securities Web

证券行业web

例如:thinkive云投顾

1002

Securities Remote Access

证券行业远程访问

例如:同花顺

1003

APIs

API接口

例如:RESTful

1004

Web Management Interface

Web管理端

例如:管理后台

1005

Router and Switch and VPN

路由器、交换机、VPN

例如:Cisco、Huawei、Sangfor

1006

Security Application Products

安全应用产品

例如:防火墙、防病毒、上网行为管理等

1007

Office Software

办公软件

例如:OA、财务软件

1008

IoT

物联网

例如:IoT设备

1009

Application Services

应用服务

例如:FTP、Telnet、SSH、RDP等

1010

Trojan Backdoor

木马后门

例如:Backdoor

1011

Application Frameworks

应用框架

例如:spring

1012

Protocols

协议

例如:3CX Tunnel Protocol

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

4、指纹规则

基于Wappalyzer的指纹规则说明

字段

涵义说明

备注

cats

分类,会有多个分类

参见指纹分类表中的分类编号

icon

匹配软件官方ICO

可以不写

website

匹配软件官方网站

implies

推断,例如:存在wordpress,一定会存在php mysql。

可以不写

excludes

排除,存在一个指纹,就肯定不会存在另外一个指纹。

可以不写

js

匹配<script></script>之间内容
例如:”js”:{“js_test”: “(.*)\\;version:\\1”}

<script>
var js_test = “shuziguanxing”;
</script>

headers

匹配response返回的头信息

html

匹配html返回内容

要求必须精准,否则误报很高

url

匹配传递URL中的数据

要求必须精准,否则误报很高

cookies

匹配头信息cookie内容

meta

匹配<meta>标签中的参数和数据

script

<script src=匹配数据></script>

confidence

信心值,百分制,例如:50

“js”: { “Mage”: “\\;confidence:50” }

version

版本匹配信息

“script”: “jquery-([0-9.]+)\.js\\;version:\\1”

product

产品名称匹配

“html”: “天融信(.*)</title>\\;product:\\1”,

支持子表达式

\\1

返回第一个匹配数据

\\1?a:

如果第一个匹配数据存在,则返回a,否则返回空

\\1?a:b

如果第一个匹配数据存在,则返回a,否则返回b

\\1?:b

如果第一个匹配数据存在,则返回空,否则返回b

xxoo\\1

返回xxoo+第一个匹配数据

description

指纹应用描述

非必填,比如nginx,Nginx 是一个高性能的HTTP和反向代理web服务器。

_fingerprint_test_url

测试指纹是否准确的URL

必填项,比如通过网站检测指纹。

5、指纹识别例子讲解

“Struts”:{

“cats”:[

18

],

“description”:” Apache Struts是一个用于开发Java EE网络应用程序的开放源代码网页应用程序架构。”,

“html”:”(?:href|action|src)\\s*?=\\s*?( ?:\”|’)[^http|https]\\s*?( [^’\”]*?\\.(?:action|do))\\;confidence:50″,

“layer”:2,

“url”:”(/.*\\.do$|/.*\\.action$)”,

“website”:”http://struts.apache.org/”

“_fingerprint_test_url”:”https://www.shuziguanxing.com/”

}

描述:struts组件,分类18(web框架),匹配html中是否存在action,do后缀,定义可信值50,匹配URL中是否有do和action后缀,description是简单描述这个应用,layer是指这个应用属于5层中的那一层,该应用数据支撑层,_fingerprint_test_url为指纹识别测试的URL,默认不定义可信值则为100。备注:总体可信值如果超过100,也只会返回100。

6、简单分析wappalyzer的执行过程

Wappalyze执行文件在C:\Users\xx\AppData\Roaming\npm\下

img8

Wappalyzer的包目录在C:\Users\xx\AppData\Roaming\npm\node_modules\wappalyzer

img9

这里我们重点看apps.json文件,apps.json文件是个什么东西呢?apps.json记录的是整个的指纹规则,之后我们自己编写的指纹就是要放进这里调试。

看下里面是一个怎么样的构造:

{

“$schema”:”../schema.json”,

“apps”:{

“.NET”:{

“cats”:[

22

],

“description”:””,

“html”:”content=\”Visual Basic .NET 7.1″,

“layer”:1,

“website”:”https://www.iis.net”

},

“04WebServer”:{

“cats”:[

22

],

“description”:””,

“headers”:{

“Server”:”04WebServer/?([\\d\\.]+)?\\;version:\\1″

},

“layer”:3,

“website”:”http://www.soft3304.net/”

}

}

“categories”:{

“1”:{

“name”:”CMS”,

“priority”:1

},

……

}

}

Json文件里面有两部分apps与categories,我们可以发现apps里面的信息跟上面指纹例子特别像,其实我们之后写的指纹就是放在这里面进行识别网站的,categories是指纹的类型,这项可以不用管,只看apps。

7、调试编写好的指纹

Wappalyzer在执行行过程中会调用apps.json文件内容进行指纹匹配。所以我们编写好的指纹放进里面进行调试。

如果你希望只显示你要调试的指纹的话,你可以把apps.json文件备份为apps.json.bak,然后把apps.json中的apps部分里面的内容删除,只放入自己编写的指纹。

以织梦cms为例子,执行全部的指纹:

img10

如果仅仅是测试cms,不想看到那么其他信息,你可以删除其他指纹,留下我们写好要调试的指纹,这样看起来就很清晰了。

img11

img12

三、实战编写你的第一个web指纹

总的来说,我们要写指纹,首先是要有的放矢,寻找要写web指纹的产品,有了产品目标,再寻找线上的产品样例,然后确定在数字观星Finger-P指纹平台不存在这个产品指纹,随后编写指纹,提交指纹,这就是整个流程。

img13

1、查找线上样例

上shodan:https://shodan.io查找“zentaosid”(禅道)

img14

2、判断观星指纹平台是否存在该指纹(排重)

复制sofa查找到的目标到观星指纹平台,没有该web应用指纹信息,那我们开始编写这个web应用的指纹。

img15

3、观察该web应用

(1)cookie:zentaosid

img16

(2)html

img17

img18

(3)script

img19

img20

4、依据以上特征编写指纹

下面的是依据上面分析来写的,圈出来的信任值只是方便编译时,查看命中哪条记录,等最后调试完成后再按实际情况给信任值。

img21

img22img23

5、提交到指纹平台。

https://fp.shuziguanxing.com/#/batchAdd

img24

四、批量编写web指纹思想

根据上面对指纹编写的了解,我们知道要编写指纹,大致可以分为五个部分:

1、                      寻找产品:寻找通用的产品

2、                      寻找线上样例

3、                      排重:在数字观星Finger-P指纹平台不存在这个产品指纹

4、                      编写指纹

5、                      提交指纹

img25

从批量编写的角度,我们可以从这五个部分一一拆分去批量或简化。

1、批量寻找产品:批量寻找通用的产品

我们可以通过类似https://www.oschina.net/project,去批量获取产品名录;或者是批量获取web软件厂商名录再去空间测绘的站点批量收集厂商的产品名录;又或者直接范围较广的关键词在空间测绘引擎中搜索批量获取名单,诸如地名,应用类别名称等关键词。还有更多思路等待各位朋友的发掘。

https://www.oschina.net/project示例:

img26

https://www.cnvd.org.cn/flaw/typelist?typeId=29示例:

img27

https://www.shodan.io/示例:

img28

某fa示例:

img29

img30

某eye示例:

img31

2、批量寻找线上样例与排重

当第一步完成的时候,批量寻找线上样例这一步也就水到渠成了。直接接入到空间测绘引擎中即可。如果第一步中的产品列表就是从空间测绘引擎中获取的,那么这一步的准确率将会非常的高。但与此同时我们需要考虑排重的问题。可以接到指纹库中查询进行大概率排重。也可以考虑在批量寻找产品的时候,在大方向上避开Finger-P指纹平台上已有的大块,这个需要对Finger-P指纹平台已有指纹的大块有所了解和自行分析。通过避开Finger-P指纹平台上已有的大块来简化排重这一个步骤。

https://fp.shuziguanxing.com/#/fingerprintList

img32

3、批量编写指纹

当你书写了多个以首页特征的web指纹,你会发现,指纹往往会出现在一些比较固定的地方,例如:server头,title,meta信息等,所以我们可以在拿到线上样例之后就获取这些地方的信息,自动化拼接成指纹,后面再人工去快速筛选,处理即可成指纹半成品。还要补充厂商url,以及产品说明等信息,这一步可以对接搜索引擎,为我们减少工作量。

简要代码示例:

img33

注意:有一些类型的指纹是需要多行正则匹配,所以整个流程中,需要人工花时间最多的就是这一步的数据处理。上图的字段已经不全,请按目前的指纹要求进行编写。

4、提交指纹

经过前面的努力,只需要到https://fp.shuziguanxing.com/#/batchAdd的“批量提交”中一次导入几十条,上百条不可谓不痛快,成就感满满。

img34

五、写在最后

本文从web指纹介绍,实战编写第一个web指纹,批量编写web指纹,三步走来带领读者从入门到深入。但本文只是一个思想启发的文章,更多的是希望启蒙读者能开发出更多的思路去编写指纹,从而锻炼到思维和能力。

来源:freebuf.com 2021-03-31 14:13:55 by: DSO观星市场部

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论