Web指纹编写与批量编写思想
一、前言
我们通过玩一个小游戏——找不同,来引入话题。
在上述图片中,你一共找到几处不同的地方?6处?7处?
接下来公布正确答案:
99%的人一定都至少找到图片中的6处不同,但可能只有1%的人发现了藏在手指上指纹的不同。读到这里可能会有人想,“图片里指纹那么小,谁会注意到?就算注意到了,谁又能那么仔细的看出来两张图的区别?”但正是这最细微的差距,决定了1%和99%的人的区别。
什么是指纹?
指纹,也叫手印,即是表皮上突起的纹线。由于人的指纹是遗传与环境共同作用产生的,因而指纹人人皆有,却各不相同。由于指纹重复率极小,大约150亿分之一,故其称为“人体身份”。人体指纹识别随着科技的发展也越来越广泛的运用在我们的日常生活之中,我们不妨来数数看:每天早上我们通过指纹识别解锁手机、去往单位的路上通过指纹付款购买豆浆和包子作为早饭、到达公司再用指纹打卡上班。仅仅一个早上,我们至少做了3次指纹识别。
在互联网数字资产管理中,数字资产指纹就是数字资产的“身份”,也是信息系统安全管理工作的基础。通过网络资产探测(指纹)可以在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
记住这个路径 C:\Users\xx\AppData\Roaming\npm\node_modules\wappalyzer之后讲解调试指纹有用
(3) 使用wappalyzer指纹识别
2、指纹识别的几种方式
A、网页中发现关键字
B、特定文件的MD5(主要是静态文件、不一定要是MD5)
C、指定URL的关键字
D、指定URL的TAG模式
3、指纹识别分类
基于Wappalyzer的指纹识别分类 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
指纹分五层 |
4、指纹规则
基于Wappalyzer的指纹规则说明
字段 |
涵义说明 |
备注 |
||
cats |
分类,会有多个分类 |
参见指纹分类表中的分类编号 |
||
icon |
匹配软件官方ICO |
可以不写 |
||
website |
匹配软件官方网站 |
|||
implies |
推断,例如:存在wordpress,一定会存在php mysql。 |
可以不写 |
||
excludes |
排除,存在一个指纹,就肯定不会存在另外一个指纹。 |
可以不写 |
||
js |
匹配<script></script>之间内容 |
<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\下
Wappalyzer的包目录在C:\Users\xx\AppData\Roaming\npm\node_modules\wappalyzer
这里我们重点看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为例子,执行全部的指纹:
如果仅仅是测试cms,不想看到那么其他信息,你可以删除其他指纹,留下我们写好要调试的指纹,这样看起来就很清晰了。
三、实战编写你的第一个web指纹
总的来说,我们要写指纹,首先是要有的放矢,寻找要写web指纹的产品,有了产品目标,再寻找线上的产品样例,然后确定在数字观星Finger-P指纹平台不存在这个产品指纹,随后编写指纹,提交指纹,这就是整个流程。
1、查找线上样例
上shodan:https://shodan.io查找“zentaosid”(禅道)
2、判断观星指纹平台是否存在该指纹(排重)
复制sofa查找到的目标到观星指纹平台,没有该web应用指纹信息,那我们开始编写这个web应用的指纹。
3、观察该web应用
(1)cookie:zentaosid
(2)html
(3)script
4、依据以上特征编写指纹
下面的是依据上面分析来写的,圈出来的信任值只是方便编译时,查看命中哪条记录,等最后调试完成后再按实际情况给信任值。
5、提交到指纹平台。
https://fp.shuziguanxing.com/#/batchAdd
四、批量编写web指纹思想
根据上面对指纹编写的了解,我们知道要编写指纹,大致可以分为五个部分:
1、 寻找产品:寻找通用的产品
2、 寻找线上样例
3、 排重:在数字观星Finger-P指纹平台不存在这个产品指纹
4、 编写指纹
5、 提交指纹
从批量编写的角度,我们可以从这五个部分一一拆分去批量或简化。
1、批量寻找产品:批量寻找通用的产品
我们可以通过类似https://www.oschina.net/project,去批量获取产品名录;或者是批量获取web软件厂商名录再去空间测绘的站点批量收集厂商的产品名录;又或者直接范围较广的关键词在空间测绘引擎中搜索批量获取名单,诸如地名,应用类别名称等关键词。还有更多思路等待各位朋友的发掘。
https://www.oschina.net/project示例:
https://www.cnvd.org.cn/flaw/typelist?typeId=29示例:
某fa示例:
某eye示例:
2、批量寻找线上样例与排重
当第一步完成的时候,批量寻找线上样例这一步也就水到渠成了。直接接入到空间测绘引擎中即可。如果第一步中的产品列表就是从空间测绘引擎中获取的,那么这一步的准确率将会非常的高。但与此同时我们需要考虑排重的问题。可以接到指纹库中查询进行大概率排重。也可以考虑在批量寻找产品的时候,在大方向上避开Finger-P指纹平台上已有的大块,这个需要对Finger-P指纹平台已有指纹的大块有所了解和自行分析。通过避开Finger-P指纹平台上已有的大块来简化排重这一个步骤。
https://fp.shuziguanxing.com/#/fingerprintList
3、批量编写指纹
当你书写了多个以首页特征的web指纹,你会发现,指纹往往会出现在一些比较固定的地方,例如:server头,title,meta信息等,所以我们可以在拿到线上样例之后就获取这些地方的信息,自动化拼接成指纹,后面再人工去快速筛选,处理即可成指纹半成品。还要补充厂商url,以及产品说明等信息,这一步可以对接搜索引擎,为我们减少工作量。
简要代码示例:
注意:有一些类型的指纹是需要多行正则匹配,所以整个流程中,需要人工花时间最多的就是这一步的数据处理。上图的字段已经不全,请按目前的指纹要求进行编写。
4、提交指纹
经过前面的努力,只需要到https://fp.shuziguanxing.com/#/batchAdd的“批量提交”中一次导入几十条,上百条不可谓不痛快,成就感满满。
五、写在最后
本文从web指纹介绍,实战编写第一个web指纹,批量编写web指纹,三步走来带领读者从入门到深入。但本文只是一个思想启发的文章,更多的是希望启蒙读者能开发出更多的思路去编写指纹,从而锻炼到思维和能力。
来源:freebuf.com 2021-03-31 14:13:55 by: DSO观星市场部
请登录后发表评论
注册