web指纹是web服务组件在开发时留下的对其类型及版本进行标识的特殊信息,包括web服务器指纹、web运用指纹以及前端框架指纹等。
在web安全测试过程中,收集web指纹信息也是一个比较重要的步骤;在安全运营过程中,通过指纹识别资产的web信息,这样能更加了解整个资产存在哪些方面的威胁,然后对症检测修补。网络上开源的web指纹识别程序很多,如Wappalyzer,whatweb, wpscan, joomscan等等。在线指纹平台有云悉、数字观星指纹平台等。一起来看如何编写以及编译指纹并提交到平台上。
实践是认识事物最快的途径,这里先使用常见的指纹识别工具做简单的指纹识别示范。
Whatweb是一个基于Ruby语言的开源网站指纹识别软件,正如它的名字一样,whatweb能够识别各种关于网站的详细信息包括:CMS类型、博客平台、中间件、web框架模块、网站服务器、脚本类型、JavaScript库、IP、cookie等。
在kali下sudo apt install whatweb :
对网站进行指纹识别:
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的指纹
4、 指纹识别例子讲解
描述:struts组件,分类18(web框架),
匹配html中是否存在action,do后缀,定义可信值50,
匹配URL中是否有do和action后缀,定义可信值40,
匹配html中是否存在“StrutsProblemReport”字符串,
默认不定义可信值则为100。
备注:总体可信值如果超过100,也只会返回100。
“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/”
}
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。
Wappalyzer在执行过程中会调用apps.json文件内容进行指纹匹配。所以我们编写好的指纹放进里面进行调试。
如果你希望只显示你要调试的指纹的话,你可以把apps.json文件备份为apps.json.bak,然后把apps.json中的apps部分里面的内容删除,只放入自己编写的指纹。
以织梦cms为例子,执行全部的指纹:
如果仅仅是测试cms,不想看到那么多其他信息,你可以删除其他指纹,留下我们写好要调试的指纹,这样看起来就很清晰了。
上sofa:https://fofa.so查找“禅道”
复制sofa查找到的目标到观星指纹平台,没有该web应用指纹信息,那我们开始编写这个web应用的指纹。
(1)cookie:zentaosid
(2)html
(3)script
下面的是依据上面分析来写的,圈出来的信任值只是方便编译时,查看命中哪条记录,等最后调试完成后再按实际情况给信任值。
https://fp.shuziguanxing.com/#/batchAdd