Whatweb 0.5.5.12 完善使用及插件文档

  • A+
所属分类:安全工具


Whatweb 0.5.5.12 完善使用及插件文档




目录
0X00 简介
0X01 增强版主程序使用说明
0X02 增强版主程序重大更新细节

0x03 增强版插件常规开发

0x04 novafinger包装器说明

0x05 总结


△△△点击上方“蓝字”关注我们了解更多精彩






0x00 Preface [前言/简介]


whatweb自开始改造截至目前已更新10个版本以上,

目前版本是0.5.5.12,是最新版,也是最终版,后续只会对插件进行增删和优化。


这个版本后,我已将我目前对指纹识别工具所有的要求和理解都进行了实现。


如果没有其他的同样功能支持的Go版本替代,这应该是最强大的指纹识别工具了。


接下来,跟随whatweb增强版完整的使用说明,描述一下对功能的增强,完成这个项目规划的最后一步。


winezer0/whatweb-plus: whatweb 增强版 及 集合5000+插件 (提供exe版)https://github.com/winezer0/whatweb-plus



0x01 增强版主程序使用说明


ruby下运行必须安装以下模块:gem install mmh3 



kali下安装WhatWeb增强版:1、 卸载WhatWeb  apt-get remove WhatWeb2、 上传WhatWeb增强版到kali /opt 文件夹 (其他文件夹也行, 如果解压失败可以先解压后上传,或使用其他压缩程序打包)(测试使用MobaXterm工具拖动整个文件夹进行上传成功)3、 配置WhatWeb3.1、 添加可执行权限    cd /opt/WhatWeb/    chmod +x whatweb  3.2、 使得WhatWeb可以直接被调用运行    ln -s /opt/WhatWeb/whatweb   /usr/bin4、 更新插件目录,便于自动调用4.1、 先上传插件到文件夹下面    rm -rf /opt/WhatWeb/pluings    mv /opt/WhatWeb/pluings-novasec /opt/WhatWeb/pluings5、 重启一下或刷新环境变量运行WhatWeb进行调用



WhatWeb - Next generation web scanner version 0.5.5.12.
用法: whatweb [选项] 目标
目标选择:URL URL,主机名,IP地址,文件名, CIDR IP段格式(支持多目标逗号分隔)--input-file=文件名, -i 从文件中读取目标,可以使用-i /dev/stdin管道。目标修改:--url-prefix 为目标url添加前缀。(PS:支持单字符串)--url-suffix 为目标url添加后缀。(PS:支持单字符串)--url-pattern 替换目标url中的%insert%串(PS:支持单字符串,源版本BUG已修复)举例:whatweb http://www.baidu.com/%insert%/robots.txt --url-pattern=1111111111 -Z
新增功能请求控制:--no-max-match, -X 新增,忽略匹配:url要求,默认True。--no-min-urls, -Y 新增,关闭最小化访问插件:url,默认True。--no-base-path, -Z 新增,关闭自动访问高频指纹路径,默认True。新增请求控制功能是为了实现尽可能少的访问插件中的URL,对于多个相同的URL只访问一次,并且不影响匹配效果。max-match 开启该功能会忽略对指纹中:url的匹配,并且对同一个指纹中的多个:url进行去重访问,同时不影响匹配效果,(Passive和Aggressive可能不受影响)。min-urls 开启该功能会把插件中的url请求调用到whatweb主流程中,由于主程序做了URL去重,实现所有插件中的URL都不会重复访问,缺陷是多次调用所有插件,会变慢。(Passive和Aggressive可能不受影响)base-path 内置添加高频的指纹路径,如/favicon.ico, /robots.txt,在访问时会只能追加到目标URL后,便于发现指纹问题。对于高频指纹路径可以关闭[-Z],其他两个选项[-X -Y]不建议同时关闭。

入侵级别:通过攻击级别进行速度/隐身和可靠性之间的权衡控制。--aggression, -a=级别 设置攻击级别。默认值:1。1.隐形 匹配被动规则,为每个目标创建一个HTTP请求,并遵循重定向。3.入侵 促进匹配被动+主动规则,当插件中的有被动规则被匹配,将额外发送主动规则的请求进一步匹配。4.重击 强行匹配被动+主动规则,对每个目标进行大量HTTP请求,所有插件的url会被请求
主动规则:matches数组中有:url开头的规则 和 aggressive do函数。被动规则:matches数组中没有:url开头的规则 和 passive do函数。
HTTP选项:--user-agent, -U=AGENT 替换请求user-agen,源版本特征是WhatWeb/0.5.5,增强版已修改。--header, -H 指定默认头将替换它,指定空值将删除它。增强版增加了动态Host头。--follow-redirect=WHEN 控制是否跟随302重定向,可选`never', `http-only', `meta-only', `same-site', or `always'. 默认是总是跟随302跳转--max-redirects=NUM 最大重定向次数. 默认值:10。
认证选项:--user, -u= HTTP基本认证--cookie, -c=COOKIES 使用Cookie ,格式'name=value; name2=value2'.--cookie-jar=FILE 从文件读取一个Cookie.
代理配置:--proxy, -P 设置HTTP代理服务器和端口 默认端口8080.--proxy-user 设置代理服务器账号密码
插件选项:--list-plugins, -l 列出所有插件。(如果有-p指定插件文件夹会列出文件夹的插件信息(新增))--info-plugins, -I=[SEARCH] 列出所有插件信息. 可选多个关键字搜索(逗号分隔)。(如果有-p指定插件文件夹会列出文件夹的插件信息(新增))--search-plugins=STRING 通过规则里的关键字搜索。(如果有-p指定插件文件夹会列出文件夹的插件信息(新增)),实际上与--info-plugins是同一个选择,只不过支持参数。--plugins, -p=LIST 选择多个插件文件或文件夹中的插件(以逗号分隔),默认选择所有my-plugins和plugins目录的所有插件(注意:代码逻辑导致这个两个文件夹不能删除) 每个元素可以是一个目录、文件或插件名,并且可以有一个[+/-]修饰符 例如: ( +/tmp/moo.rb,+/tmp/foo.rb ) ( title,md5,+./plugins-disabled/ ) ( ./plugins-disabled,-md5 ) ( -p + 是-p +plugins-disabled.的快捷方式,基本没什么用)--grep, -g=STRING|REGEXP 搜索字符串或正则表达式。只显示匹配的结果,例如--grep "hello" --grep "/he[l]*o/" (实际使用时,本参数会先使用正则匹配选择合适的插件,再过滤输出结果)--custom-plugin=DEFINITION 定义一个名为custom-plugin的自定义插件,(原理是生成一个临时插件,然后将规则存放进去,没有什么用途)。 例如: ":text=>'powered by abc'" ":version=>/powered[ ]?by ab[0-9]/" ":ghdb=>'intitle:abc "powered by abc"'" ":md5=>'8666257030b94d3bdb46e05945f60b42'" "{:text=>'powered by abc'}"--dorks=PLUGIN 列出所选插件的谷歌搜索语法,要求插件里面有dorks这一项。
输出: --verbose, -v 详细输出包括插件描述。调试时使用两次--colour,--color=WHEN 控制是否使用颜色。`never', `always', or `auto'.(已修改为总是显示颜色)--quiet, -q 不要显示简要日志。--no-errors 禁用错误消息提示
日志输出:--log-brief=FILE 日志单行摘要输出。--log-verbose=FILE 日志详细输出。--log-errors=FILE 输出错误日志。--log-xml=FILE 输出XML格式日志。--log-json=FILE 输出JSON格式日志。--log-sql=FILE 输出数据库插入语句格式日志。--log-sql-create=FILE 创建SQL数据库表。--log-json-verbose=FILE 输出JSON详细格式。--log-magictree=FILE 输出MagicTree XML 格式.--log-object=FILE 输出Ruby对象检查格式。--log-mongo-database MongoDB数据库的名称。--log-mongo-collection MongoDB集合的名称,默认: whatweb.--log-mongo-host MongoDB主机名或IP地址。默认值:0.0.0.0。--log-mongo-username MongoDB用户名。默认值: nil。--log-mongo-password MongoDB 密码. 默认值: nil.--log-elastic-index 用于elastic存储结果的索引的名称。默认值:whatweb --log-elastic-host 指明elastic http接口的主机:端口. 默认: 127.0.0.1:9200
性能和稳定性选项:PERFORMANCE & STABILITY:--max-threads, -t 并发线程数。默认值:25。--open-timeout 打开时间(秒)。默认值:15。--read-timeout 读取时间(秒)。默认值: 30.--wait=SECONDS 连接之间的等待(秒)。这在使用单个线程时非常有用。
帮助和杂项:--short-help 短的使用帮助。--help, -h 完整的使用帮助--debug 在插件中引发错误。--version, -V 显示详细的版本信息(已修改版本号为0.5.5.12)


Whatweb 0.5.5.12 完善使用及插件文档



使用示例:
* 扫描 example.com../whatweb example.com* 扫描reddit.com 和slashdot.org 并带有详细输出。./whatweb -v reddit.com slashdot.org*对wired.com的积极扫描可以检测出WordPress的确切版本。./whatweb -a 3 www.wired.com* 快速扫描本地网段,抑制错误whatweb --no-errors 192.168.0.0/24*扫描本地网络的https网站(使用前缀)。whatweb --no-errors --url-prefix https:// 192.168.0.0/24* 在Alexa top1000中扫描跨域策略(使用后缀)。./whatweb -i plugin-development/alexa-top-100.txt --url-suffix /crossdomain.xml -p crossdomain_xml



特别值得提出的是,增强版没有修改和删除任何原来的参数指定,但为了方便使用做了部分指定追加。




0x02 增强版主程序重大更新细节


1、增加@raw_body变量,实现动态的http响应解码,用于解决中文提取乱码。

2、增加多个数组变量,用于判断访问的URL是否重复,实现最少的访问数量和最大的匹配范围。

3、添加(三级)子文件夹插件支持,通过文件夹分类实现插件的不同安全等级分类。

4、修复原版本hash计算不正常的问题,新增新的hash类型规则,:mmh3表示mmh3hash, :allhash可以同时匹配md5hash和mmh3hash。(mmh3的Fofa等用的hash算法)


5、修改了原版本内置的明显请求头特征,如host、useragent等常规请求头。




0x03 增强版插件常规开发

增强版本的插件开发与原版相同,仅仅增加了mmh3hash和allhash两个规则。


此处没有编写字符串提取相关的规则,被提取的规则会被高亮处理,如果有需求可自主学习。


此处没有编写主动和被动函数相关的信息,如有需要可以参考任意带有passive的插件。

匹配模式:regexp        #Ruby格式的正则表达式,注意斜杠是转义字符,所有/需要替换为/。:text          #不分大小写的文本,在代码最后还是被替换成正则匹配。:md5           #HTTP响应正文的MD5哈希值:mmh3          #HTTP响应正文的MMH3哈希值(新增):allhash       #HTTP响应正文的MD5或MMH3哈希值(新增):ghdb          #谷歌黑客搜索格式,支持使用intitle:、inurl:和minus。:tagpattern    #HTML标记名称列表。

匹配规则示例:{ :text => "This page was generated by Generic CMS" },{ :text => "Welcome to GenericServer" },{ :regexp => /This page was generated by Generic CMS< a="">/ },{ :url => "/favicon.ico", :md5 => '12dead87beef7f00d90cafed82babe5' },{ :url => "/favicon.ico", :allhash => '12dead87beef7f00d90cafed82babe5' }, (新增):ghdb => 'intitle:"Generic CMS" login register':certainty => 25 },
搜索范围:search            #表明规则匹配的范围,在响应的哪个部分进行规则匹配"body"        #在响应体搜索 (默认),"headers"     #在响应头搜索"headers[cookie]"  #在指定响应头搜索(此处是cookie)"all"              #同时在响应头和响应体搜索。可与其他匹配模式合并使用。
规则示例:#在响应全文搜索内容:search => "all":text => 'text/html;charset=ISO-8859-1'}, #在全部响应头搜索内容:search => "headers":text => 'text/html;charset=ISO-8859-1'}, #在特定响应头搜索内容#{ :search => "headers[Content-Type]", :text => 'text/html;charset=ISO-8859-1'},:search => "headers[set-cookie]":regexp => /gcookieenericcms=[^;]+;/ },
命名匹配,:name              #匹配一个文本字符串,匹配的名称将出在详细输出中显示。规则示例::name => "Meta generator",  :text => '<meta name="generator" content="(c) by Generic CMS"' },:name => "Whitelabel Error Page" , :text=>"Whitelabel Error Page" }, { :search => "headers[www-authenticate]", :text => 'Basic realm="GenericRouter"' },
URL扩展:status           #匹配响应的HTTP状态:url #指定请求URL,可以与其他变量结合使用,也可以单独使用
规则示例:{:url => "/xxx/xxx/xxx/xxx",:status => 404, XXX=> /YYY/ },{:url => "/xxx/xxx/xxx/xxx", :regexp=>/Whitelabel Error Page|The requested URL was not found on this server/},
URL地址的重点特征:如果输入的:url【以/】开头,将智能拼接到请求域名后。如规则:url => "/xxx/xxx/xxx/xxx" 下匹配http://www.baidu.com/A/B/C,最终访问目的URL http://www.baidu.com/xxx/xxx/xxx/xxx如果输入的:url【不以/】开头,将智能拼接到请求路径的最后一个目录后。如规则:url => "xxx/xxx/xxx/xxx" 下匹配http://www.baidu.com/A/B/C,最终访问目的URL http://www.baidu.com/A/B/xxx/xxx/xxx/xxx除:url和:status外还需要其他的匹配属性才能实现matches规则,matches内仅使用:url和:status是不够的,如果需要这样的实现,建议使用自定义passive等函数。

匹配函数passive and aggressive#可以在插件中编写passive do和aggressive后函数,实现定制Ruby代码来获得更多的控制#支持有被动功能和主动功能。#被动函数将始终执行主动性函数:url和aggressive do只会有时执行在主动级别3中,如果找到匹配,则执行主动函数在主动级别4,主动函数总是执行插件中可用的变量:@body #响应体@headers #响应头@cookies #响应Cookie@status #响应状态码@base_uri #请求URI@md5sum #文件MD5值@tagpattern #标签匹配@ip #响应IP

规则示例:aggressive do #主动匹配@variables[:my_var] += 1# 创建一个匹配数组。这将返回相当于上面的matches[]块的内容m = []# ruby代码开始编写规则m << if XXXXXXXXXXXXXXXXXXXXX# 返回匹配数组,即使它是空的mend

动态变量-$RANDSTR变量{ :url=>$RANDSTR+$RANDSTR+$RANDSTR, :regexp=>/Whitelabel Error Page|The requested URL was not found on this server/},新增$RANDSTR变量,用于生成相同的随机字符串限制,间接缩小URL访问量。




0x04 novafinger包装器说明

novafinger.py是对whatweb增强版本的Python3命令行包装。
程序特征:1、主要用于输出格式优化和后续增加其他功能。2、除使用-wh用于调用whatweb的-h参数外,复用whatweb所有原生参数,3、添加--log-csv参数,用于生成json并导出为csv格式,并增加IP地址位置的解析。
扫描配置:请先修改novafinger-lib目录下novafinger.conf的whatweb的调用方式,例如可以直接命令行whatweb调用可以直接设置为whatweb或None
[whatweb]whatweb_cmd = whatweb.exe (windows下使用这个是OK的)#whatweb_cmd = ruby WhatWebwhatwebwhatweb_options = None

使用方法:python novafinger.py -h #查看novafinger帮助信息python novafinger.py -wh #查看嵌套的whatweb帮助信息python novafinger.py http://www.baidu.com/wwww -p plugins -a 4 #进行插件扫描
注意:基本复用whatweb所有原生参数




0x05 Summary 总结

1、本程序由NOVASEC团队【酒零】基于whatweb 0.5.5进行修改,不可用于任何商业和违法攻击行为。


2、主程序已更新完毕,后续主程序不再进行大的版本调整。


3、后续会对插件进行分类和增删改查,但按照目前的情况为了程序的持续发展,将只对提交BUG、指纹需求、指纹插件的反馈者进行发布,具体请联系NOVASEC公众号运营人员。



5、本团队任何实战都是已授权的、任何技术及工具也仅用于学习分享,请勿用于任何非法、违法活动,如有违背请自行承担后果,感谢大家的支持!!!


6、本团队一贯秉承Free共享的精神,但是也有大家的小愿望,因此本团队所有分享工具,严禁不经过授权的公开分享,被关注就是对我们付出的精力做的最大的支持。

本文始发于微信公众号(NOVASEC):Whatweb 0.5.5.12 完善使用及插件文档

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: