WhatWeb使用
简介
WhatWeb是一个开源的网站指纹识别软件。
WhatWeb可识别Web技术,包括内容管理系统(CMS),博客平台,统计/分析包,Javascript库,服务器和嵌入式设备。
WhatWeb有超过1000个插件,每个插件都能识别不同的东西。WhatWeb还标识版本号,电子邮件地址,账户ID,Web框架模块,SQL错误等。
特性
拥有超过1700+个插件
若网站返回302,会跳转到重定向的网站
可以根据服务器返回的响应头确定网站使用的服务器类型,web中间件类型,cookie信息
可以从网站的源代码中确定网站使用了哪些JavaScript库
可以通过页面hash,path等确定网站使用的cms版本
查询网站ip及所属国家
多种日志格式:XML,JSON,MagicTree,RubyObject,MongoDB
可定制化HTTP头
可进行基础的认证设置
支持批量扫描网站
安装
Whatweb是基于ruby语言开发,因此可以安装在具备ruby环境的系统中,目前支持Windows/Max OSX/Linux。
注:kali linux下已经集成了此工具
debian/ubtuntu系统下
apt-get install whatweb //可自动解决以来问题
redhat/centos系统下
yum updateyum install ruby ruby-devel rubygemswget http://www.morningstarsecurity.com/downloads/whatweb-0.4.7.tar.gztar xzvf whatweb-0.4.7.tar.gzcd whatweb-0.4.7./whatweb url
使用
用法:whatweb 域名
-i 指定要扫描的文件
-v 详细显示扫描的结果
-a 指定运行级别
常规扫描
whatweb 域名
批量扫描
我们可以通过将很多要扫描的域名放在文件内,然后扫描时指定该文件即可。
使用命令:whatweb -i /root/target.txt
详细回显扫描
whatweb -v 域名
强度扫描等级控制
whatweb有一个-aggression(简写为-a)参数,此参数后边可以跟数字1-4,分别对应4个不同的等级。
stealthy 每个目标发送一次http请求,并且会跟随重定向
unused 不可用(从2011年开始,此参数就是在开发状态
aggressive 每个目标发送少量的http请求,这些请求时根据参数为1时结果确定的
heavy 每个目标会发送大量的http请求,会去尝试每一个插件
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对国内的网站识别不是很友好,我们可以自己写插件,兼容更多国内的网站。
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=>"<title>Generic Homepage</title>" } ] end
语法解释:
第一行定义的为插件的名字,可以直接在命令行中使用。
命令行测试:
./whatweb -p drupal www.example.com
第二行作者,第三行版本,第四行插件描述,第五行,插件所使用网站的例子
第五行是一个matchs列表,也是whatweb的关键,里边定义了一些匹配规则
{:name=>”meta generator tag”, : 包含匹配的文件名称,这个文件必须是网站中唯一存在的文件。
:regexp=> 是包含的要匹配的模式,它是一个正则表达式,可以有以下选项:
:regexp标准的 ruby 正则表达式:text 字符:ghdb google hack 数据库,包含以下几个模式inurl:包含的字符串在 urlintitle:包含的字符串在 titlefiletype:包含的文件名,如 PDF, JPG, RB 等:md5 请求页面的 md5 hash 值:tagpattern html 标签:version 可以设置正则表达式或直接字符串匹配:string 可以设置正则表达式或直接字符串匹配:filepath 可以设置正则表达式或直接字符串匹配,通常显示系统错误或配置文件等:account 经常用在登陆页面或用户列表等:module 可以设置正则表达式或直接字符串匹配,如网络设备可能使用了一个ruby 模块等:model 可以设置正则表达式或直接字符串匹配:firmware 可以设置正则表达式或直接字符串匹配,设备的固件版本
了解以上选项我们可以写出一个简单的识别dedecms的插件,如下
Plugin.define "DedeCMS" doauthor "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