WhatWeb是一个开源的网站指纹识别软件。
WhatWeb可识别Web技术,包括内容管理系统(CMS),博客平台,统计/分析包,Javascript库,服务器和嵌入式设备。
WhatWeb有超过1000个插件,每个插件都能识别不同的东西。WhatWeb还标识版本号,电子邮件地址,账户ID,Web框架模块,SQL错误等。
Whatweb是基于ruby语言开发,因此可以安装在具备ruby环境的系统中,目前支持Windows/Max OSX/Linux。
注:kali linux下已经集成了此工具
debian/ubtuntu系统下
apt-get install whatweb //可自动解决以来问题
redhat/centos系统下
yum update
yum install ruby ruby-devel rubygems
wget http://www.morningstarsecurity.com/downloads/whatweb-0.4.7.tar.gz
tar xzvf whatweb-0.4.7.tar.gz
cd whatweb-0.4.7
./whatweb url
用法:whatweb 域名
-i 指定要扫描的文件
-v 详细显示扫描的结果
-a 指定运行级别
whatweb 域名
我们可以通过将很多要扫描的域名放在文件内,然后扫描时指定该文件即可。
使用命令:whatweb -i /root/target.txt
whatweb -v 域名
whatweb有一个-aggression(简写为-a)参数,此参数后边可以跟数字1-4,分别对应4个不同的等级。
whatweb -a 等级 域名 (可以和-v参数结合使用
注:默认参数为1
whatweb --no-errors -t 255 内网网段 (可以和-a和-v参数结合使用
whatweb www.baidu.com --log-xml=baidu.xml
其他格式导出文件同理:
--log-brief=FILE 简单的记录,每个网站只记录一条返回信息
--log-verbose=FILE 详细输出
--log-xml=FILE 返回xml格式的日志
--log-json=FILE 以json格式记录日志
--log-json-verbose=FILE 记录详细的json日志
--log-magictree=FILE xml的树形结构
--log-object=FILE ruby对象格式
--log-mongo-database mongo数据库格式
注:json格式需要安装json依赖sudo gem install json
Mongo格式需要安装mongo依赖sudo gem install json
whatweb -l
查看插件的具体信息
whatweb --info-plugins="插件名"
插件的开发语言为ruby,所以插件为.rb格式,插件的保存目录为/usr/share/whatweb/plugins,可以查看别人是怎么写插件的。
whatweb对国内的网站识别不是很友好,我们可以自己写插件,兼容更多国内的网站。
whatweb的官方模板:
Plugin.define "Plugin-Template" do
author "Enter Your Name"
version "0.1"
description "Describe what the plugin identifies. Include the homepage of the software package"
examples %w| include-some.net example-websites.com here.com |
\# a comment block here is a good place to make notes for yourself and others
\# There are four types of matches: regexp, text, ghdb
\# Matches are enclosed in {} brackets and separated by commas
matches [
{:name=>"a brief description of the match, eg. powered by in footer",
:certainty=>100, # 100 is certain, 75 is probably and 25 is maybe. if omitted, it defaults to 100.
:regexp=>/This page was generated by http://www.genericcms.com\/en\/products\/generic-cms\/">Generic CMS<\/a>/ },
{:name=>"title",
:certainty=>75,
:text=>"Generic Homepage " }
]
end
语法解释:
第一行定义的为插件的名字,可以直接在命令行中使用。
命令行测试:
./whatweb -p drupal www.example.com
第二行作者,第三行版本,第四行插件描述,第五行,插件所使用网站的例子
第五行是一个matchs列表,也是whatweb的关键,里边定义了一些匹配规则
{:name=>”meta generator tag”, : 包含匹配的文件名称,这个文件必须是网站中唯一存在的文件。
:regexp=> 是包含的要匹配的模式,它是一个正则表达式,可以有以下选项:
:regexp标准的 ruby 正则表达式
:text 字符
:ghdb google hack 数据库,包含以下几个模式
inurl:包含的字符串在 url
intitle:包含的字符串在 title
filetype:包含的文件名,如 PDF, JPG, RB 等
:md5 请求页面的 md5 hash 值
:tagpattern html 标签
:version 可以设置正则表达式或直接字符串匹配
:string 可以设置正则表达式或直接字符串匹配
:filepath 可以设置正则表达式或直接字符串匹配,通常显示系统错误或配置文件等
:account 经常用在登陆页面或用户列表等
:module 可以设置正则表达式或直接字符串匹配,如网络设备可能使用了一个ruby 模块等
:model 可以设置正则表达式或直接字符串匹配
:firmware 可以设置正则表达式或直接字符串匹配,设备的固件版本
了解以上选项我们可以写出一个简单的识别dedecms的插件,如下
Plugin.define "DedeCMS" do
author "xxxxx"
version "0.1"
description "dedecms - homepage:http://www.dedecms.com/"
# Examples #
examples %w|
www.dedecms.com|
matches [
# Version detection # Powered by text
{:name=>"Powered by DedeCms",
:regexp=>/Powered by .*DedeCMS.*/}
]
end
如图所示: