34

GitHub - fate0/webanalyzer: webanalyzer wip

 5 years ago
source link: https://github.com/fate0/webanalyzer
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

README.md

webanalyzer

安装

pip install -U webanalyzer

使用

命令行

webanalyzer -u "http://www.fatezero.org"

usage:

[*] webanalyzer --help
Usage: webanalyzer [OPTIONS]

Options:
  -u, --url TEXT                  Target  [required]
  -a, --aggression INTEGER RANGE  Aggression mode, 1 enable custom plugins
                                  aggression mode, 2 enable all plugins
                                  aggression mode
  -U, --user-agent TEXT           Custom user agent
  -H, --header TEXT               Pass custom header LINE to serve
  -r, --disallow-redirect         Disallow redirect
  -l, --list-plugins              List the plugins
  -v, --verbose INTEGER           Verbose level
  --help                          Show this message and exit.

类库

作为类库使用

import webanalyzer

w = webanalyzer.WebAnalyzer()

w.headers = {
    "User-Agent": "custom ua",
    "header-key": "header-value"
}

w.allow_redirect = True
w.aggression = 0
r = w.start("http://www.fatezero.org")

print(r)

规则编写

基础信息

例子:

{
    "name": "wordpress",
    "author": "fate0",
    "version": "0.1.0",
    "description": "wordpress 是世界上最为广泛使用的博客系统",
    "website": "http://www.wordpress.org/",
    "matches": [],
    "condition": "0 and 1 and not 2",
    "implies": "PHP",
    "excludes": "Apache"
}

描述:

FIELD TYPE DESCRIPTION EXAMPLE REQUIRED name string 组件名称 wordpress true author string 作者名 fate0 false version string 插件版本 0.1.0 false description string 组件描述 wordpress 是世界上最为广泛使用的博客系统 false website string 组件网站 http://www.wordpress.org/ false matches array 规则 [{"regexp": "wordpress"}] true condition string 规则组合条件 0 and 1 and not 2 false implies string/array 依赖的其他组件 PHP false excludes string/array 肯定不依赖的其他组件 Apache false

规则信息

例子:

[
    {
        "name": "rule name"
        "search": "all",
        "text": "wordpress"
    }
]

描述:

FIELD TYPE DESCRIPTION EXAMPLE name string 规则名称 rulename search string 搜索的位置,可选值为 all, headers, body, script, cookies, headers[key], meta[key], cookies[key] body regexp string 正则表达式 wordpress.* text string 明文搜索 wordpress version string 匹配的版本号 0.1 offset int regexp 中版本搜索的偏移 1 certainty int 确信度 75 md5 string 目标文件的 md5 hash 值 beb816a701a4cee3c2f586171458ceec url string 需要请求的 url /properties/aboutprinter.html status int 请求 url 的返回状态码,默认是 200 400

返回信息

例子:

[
    {
        "name": "4images",
        "version": "1.1",
        "certainty": 100,
        "origin": "custom"
    }
]

描述:

FIELD TYPE DESCRIPTION EXAMPLE REQUIRED name string 组件名称 wordpress true version string 插件版本 0.1.0 false certainty int 确信度 75 false origin string 插件来源 custom false

检测逻辑

  • 如果 match 中存在 url 字段,plugin 是属于 custom 类型且 aggression 开启,则请求 url 获取相关信息
  • 根据 search 字段选取搜索位置
  • 根据 regexp/text 进行文本匹配,或者 status 匹配状态码,或者 md5 匹配 body 的 hash 值
  • 如果 match 中存在 version 就表明规则直接出对应版本,如果存在 offset 就表明需要从 regexp 中匹配出版本
  • 如果 rule 中存在 condition,则根据 condition 判断规则是否匹配,默认每个 match 之间的关系为 or

Q & A

  • WhatWeb 的规则如何转换成 webanalyzer 的规则?

可以看下 tools/whatweb.rb 代码,实际上我这并没有成功转换全部规则,依旧有部分 passive, aggressive 函数规则以及其他规则并没去转换, 不过成功转换比例占大多数。

  • Wappalyzer 的规则如何转换成 webanalyzer 的规则?

可以看下 tools/wappalyzer.py 代码,因为 Wappalyzer 的规则本来就是 json 格式,所以比较容易转换,但是依旧有部分字段我没有保留在我的规则中。

  • 为什么使用 json 作为规则格式?

更通用,即便更换编程语言,也可以继续复用本来的规则。

  • 和 WhatWeb、Wappalyzer 的区别?

WhatWeb 的规则使用 ruby 编写,在规则方面,其他编程语言很难复用,也只能通过子进程的方式调用 WhatWeb。 Wappalyzer 更多的作为一个浏览器插件使用。

  • 如何同步 WhatWeb、Wappalyzer 的规则?

可以看下 .travis.yml,通过 travis-ci 达到每天自动同步规则,每周自动同步至 pypi 。

  • 为什么只支持 Python3.6 以及以上的 Python 版本?

因为有些正则规则使用了 (?-flag:...) 这样的写法,然而在 https://docs.python.org/3/whatsnew/3.6.html#re 才开始支持。

  • License 为什么是 GPL-2.0 ?

因为 WhatWeb 就是 GPL-2.0,虽然我没有抄代码,但是规则是通过 WhatWeb 转换过来的,虽然不确定会不会传染, 为了保险起见就设置成和 WhatWeb 一样的 License 。

引用


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK