- A+
Wappalyzer的功能是识别单个uri的指纹,其原理就是给指定URI发送HTTP请求,获取响应头与响应体并按指纹规则进行匹配。这也是web应用指纹识别最基础的部分,除此之外,还有指纹置信度计算(如何去处伪造指纹,多种指纹特征如何综合判断,隐藏指纹信息如何提取),整个站点的指纹识别还涉及到有效爬虫抓取,分布式计算等问题,这些都不在本文内容中。
Wappalyzer是一款浏览器插件,通过Wappalyzer可以识别出网站采用了那种web技术。它能够检测出CMS和电子商务系统、留言板、javascript框架,主机面板,分析统计工具和其它的一些web系统。ThecompanybehindWappalyzer还能够收集web程序的一些信息用于统计分析,揭示出各种web系统的使用率即增长情况。实际Wappalyzer就是一个指纹识别工具。更多信息请点击:
官方地址:
特别注意:html全文匹配的规则一定要谨慎编写
(4) meta特征
响应html页面中诸如<meta name="version" content="neblog-1.0"/>中的名字name:内容content对,多个规则用逗号隔开,例如
(5) script特征
响应html页面中诸如<script type="text/javascript" src="http://b1.bst.126.net/newpage/r/j/ec.js?v=1413881655525"></script>src中中url内容,多个规则用逗号隔开,例如
不支持规则文件中APP版本号与置信度的获取
对非utf8的中文编码可能会存在问题
较之PHP版本,使用qr正则预编译处理,可以提前发现正则的问题,这是我选择该语言版本的主要原因。
(接下来的php版本就能让你知道正则不预编译处理有多坑了!)
脚本的功能:
(1)指纹识别结果按JSON格式返回,以便后续指纹信息入库等处理
(2)支持批量uri查询
(3)支持指定自定义JSON格式的指纹规则文件
(默认的指纹文件放置在/usr/lib/perl5/WWW/apps.json,具体的路径会因cpan模块的安装路径有区别
可以使用perl-V察看@INC变量来确定路径,或者更暴力的find吧)
安装:
clone https://github.com/tanjiti/FingerPrint.git
运行:
(1)获取单个uri的指纹
返回结果
"www.xxx.com":{
"blogs":[
"WordPress"
],
"web-servers":[
"Nginx"
],
"cdn":[
"CloudFlare"
],
"cms":[
"WordPress"
],
"font-scripts":[
"GoogleFontAPI"
],
"javascript-frameworks":[
"jQuery"
],
"javascript-graphics":[
"JavascriptInfovisToolkit"
]
}
}
(2) 从文件读取url列表进行批量指纹识别,并将结果输出到文件中
结果输出到url.txt__fingerprint文件里
"Discuz!":{
"website":"www.discuz.net/forum.php",
"cats":[1],
"meta":{"generator":"Discuz"},
"headers":{"Set-Cookie":"_lastact.*_sid|_sid.*_lastact|_sid.*smile|smile.*_sid"},
"url":"/uc_server[/$]|uc_client[/$]",
"html":"Poweredby(?:Discuz!|<ahref=\"http://www\\.discuz\\.net/\"|UCenter)",
"implies":"php"
},
"PHP":{
"website":"php.net",
"cats":[27],
"headers":{"Server":"php/?([\\d.]+)?\\;confidence:40\\;version:\\1","X-Powered-By":"php/?([\\d.]+)?\\;confidence:40\\;version:\\1","Set-Cookie":"PHPSESSID"},
"url":"\\.php(?:$|\\?)"
}
}
原理
同perl版本,区别有两点:
1.HTTP请求部分:较之perl使用LWP发送HTTP请求,php使用curl发送HTTP请求
2.规则匹配部分:指纹规则的匹配部分使用javascript语法,然后通过php的v8js模块来解析。(为什么要这样做呢?当返回响应体内容很多,指纹正则写的很烂的时候,会卡死在规则匹配这一过程中,现在的规则下sina,163等大站基本卡死!)
运行
PHP版的接口已经能直接使用了,只是需要替换规则文件,囧
pecl install channel://pecl.php.net/v8js-0.1.3
echo extension=v8js.so >> /etc/php5/cli/php.ini
验证是否安装成功
v8js -----------OK
cp -R Wappalyzer/drivers/php/* .
cp Wappalyzer/share/js/wappalyzer.js js/
cp Wappalyzer/share/apps.json . (指纹规则文件) 该规则文件的正则编写的有问题,所以我使用的以前版本的规则文件cp /usr/lib/perl5/WWW/apps.json .
php版指纹识别程序结构如下:
Wappalyzer.php
WappalyzerException.php
js/driver.js js/wappalyzer.js
apps.json 指纹规则文件
输出格式为
应用名,版本号,置信度,app类型(比perl版本多了对版本号,置信度的获取)
JavascriptInfovisToolkit,,100%,javascript-graphics
jQuery,,100%,javascript-frameworks
Nginx,,100%,web-servers
PHP,5.5.9,100%,programming-languages
Ubuntu,,100%,operating-systems
WordPress, 4.0,100%,cms,blogs
接下来的优化输出为json格式与批量处理uri同perl版本。
最后寄言,一定一定要写好正则,
参考信息
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫