一、 前言
Web指纹是Web服务组件在开发时留下的对其类型及版本进行标识的特殊信息,包括Web服务器指纹、Web运用指纹以及前端框架指纹等。在Web安全测试过程中,收集Web指纹信息也是一个比较重要的步骤;在安全运营过程中,通过指纹识别识别资产的Web信息,这样能更加了解整个资产存在哪些方面的威胁,然后对症检测修补。
网络上开源的Web指纹识别程序很多,如Wappalyzer,Whatweb, wpscan, joomscan等等,在线指纹平台有云悉,还有我们本文重点介绍的数字观星指纹平台
(https://fp.shuziguanxing.com/#/)等。接下来会介绍如何编写以及编译指纹并提交到平台上。
二、 初见
实践是认识事物最快的途径,这里先使用常见的指纹识别工具做简单的指纹识别示范。
1. Whatweb
Whatweb是一个基于Ruby语言的开源网站指纹识别软件,正如它的名字一样,Whatweb能够识别各种关于网站的详细信息包括:CMS类型、博客平台、中间件、Web框架模块、网站服务器、脚本类型、JavaScript库、IP、Cookie等。
在kali下sudo apt install whatweb :
对网站进行指纹识别:
2. 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指纹识别
三、 探究
这里主要探讨如何编写基于Wappalyzer的指纹(参考https://fp.shuziguanxing.com/#/fingerplatinfo)
1. 指纹识别的几种方式
- 网页中发现关键字
- 特定文件的MD5(主要是静态文件、不一定要是MD5)
- 指定URL的关键字
- 指定URL的TAG模式
2. 指纹识别分类
基于Wappalyzer的指纹识别分类
3. 指纹规则
4. 指纹识别例子讲解
"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/"
}
描述:struts组件,分类18(Web框架),匹配html中是否存在action,do后缀,定义可信值50,匹配url中是否有do和action后缀,定义可信值40,匹配html中是否存在“Struts Problem Report”字符串,默认不定义可信值则为100。备注:总体可信值如果超过100,也只会返回100。
5. 简单分析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":{
"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
},
......
}
}
Json文件里面有两部分apps与categories,我们可以发现apps里面的信息跟上面指纹例子特别像,其实我们之后写的指纹就是放在这里面进行识别网站的,categories是指纹的类型,这项可以不用管,只看apps。
6. 调试编写好的指纹
Wappalyzer在执行过程中会调用apps.json文件内容进行指纹匹配。所以我们编写好的指纹放进里面进行调试。
如果你希望只显示你要调试的指纹的话,你可以把apps.json文件备份为apps.json.bak,然后把apps.json中的apps部分里面的内容删除,只放入自己编写的指纹。
以织梦cms为例子,执行全部的指纹:
如果仅仅是测试cms,不想看到其他信息,你可以删除其他指纹,留下我们写好要调试的指纹,这样看起来就很清晰了。
四、 实战
1. 查找目标
上sofa:https://fofa.so查找“禅道”
2. 判断观星指纹平台是否存在该指纹
复制sofa查找到的目标到观星指纹平台,没有该Web应用指纹信息,那我们开始编写这个Web应用的指纹。
3. 观察该Web应用
(1)cookie:zentaosid
(2)html
(3)script
4. 依据以上特征编写指纹
下面的是依据上面分析来写的,圈出来的信任值只是方便编译时,查看命中哪条记录,等最后调试完成后再按实际情况给信任值。
5. 提交到指纹平台
https://fp.shuziguanxing.com/#/batchAdd
五、总结
我们数字观星指纹收录平台中的指纹规则是基于Wappalyzer的,编写的指纹能够通过Wappalyzer调试,写的指纹基本都是正确的。
指纹收录平台收集指纹信息,通过的指纹会依据质量获得相应的星豆,具体信息请看看官方说明:
https://fp.shuziguanxing.com/#/fingerplatinfo,里面还介绍了接收指纹的范围、指纹提交流程、指纹审核流程以及指纹评价标准等。
最后,感谢超哥指导,笔者一介菜鸟,有误之处欢迎指出。