工具简介:
一款用于检测常见web软件及版本的框架。支持快速扩展可识别软件种类。
使用说明:
运行环境:linux
在bin目录下,执行
./wafp wafp.conf host port
./wafp:程序名
Wafp.conf:配置文件,包括:
LogFilePath:日志文件的目录
LogLevel: 日志等级
LogFileNum:日志文件最大个数
LogFileSize:日志文件最大大小。采用滚动日志的方式。当日志到达LogFileSize的时候,重新生成一个文件,当文件数达到LogFileNum的时候,删除最旧的文件
PluginPath:各个软件识别配置文件的目录
ResultPath:结果文件存放目录
Host:域名或ip
Port:开放的web端口号。
注:识别后的版本结果存放在ResultPath目录下,以host为文件名,各字段意义:
软件名 版本号 识别规则id 端口
编译说明:
- 软件版本识别框架发送http请求,依赖于openssl库,请确认openssl库安装于/usr/local/ssl目录下。
- 在src目录下make install即可
- 可执行程序位于bin目录下。
软件版本探测规则配置文件说明:
软件版本探测规则通过xml文件的方式进行配置。同时提供可扩展的接口,方便针对特别需求开发相关插件,进行探测服务。
实例:
<pluginappname="apache"> <description></description> <tests> <test type=0 typeid=907000001certainty=90> <url>/</url> <field>server</field> <appregexp>apache</appregexp> <verregexp><![CDATA[[\s]*apache/[\s]*((\d+\.)+\d+)]]></verregexp> </test> <test type=2 typeid=907002001certainty=80> <url>/favicon.ico</url> <md5>71e30c507ca3fa005e2d1322a5aa8fb2</md5> <ver>Redhatapache</ver> </test> <test type=2 typeid=907002002certainty=80> <url>/favicon.ico</url> <md5>dcea02a5797ce9e36f19b7590752563e</md5> <ver>centos/debian/fedoraapache</ver> </test> <test type=2 typeid=907002003certainty=80> <url>/favicon.ico</url> <md5>d99217782f41e71bcaa8e663e6302473</md5> <ver>Redhat/fedoraapache</ver> </test> <test type=3 typeid=907003001certainty=80> <url>/</url> <expectedhttpcode>200</expectedhttpcode> <regexp><![CDATA[<html><body><h1>Itworks!</h1></body></html>]]></regexp> <verregexp><![CDATA[]]></verregexp> </test> </tests> </plugin>
说明:
目前软件及版本识别框架支持三种探测方式,用户可自己集成ITest接口,实现自己的探测方式。
Type | 配置 | 备注说明 | 实现类 | |
0 | <url> | 要访问的url | 通过http返回的banner识别软件版本信息。如apache软件,返回的http头部的server字段可能是Server:Apache/2.4.2 | Src/plugin/CHtmlheaderTest.cpp |
<field> | http返回中的字段名,如server,cookie | |||
<appregexp> | 从返回的字段中通过正则取出软件名 | |||
<verregexp> | 如果返回的字段匹配appregexp,通过verregexp正则取出版本信息,注意,通过正则中最外面的括号获取版本号信息,获取不到为unknown | |||
2 | <url> | 要访问的url | 返回某个url,计算返回内容的md5,此方法最准 | Src/plugin/CMD5Test.cpp |
<md5> | 期望的返回内容的MD5 | |||
<ver> | 如果返回内容命中MD5,则版本为本配置的 | |||
3 | <url> | 要访问的url | 查看返回的内容中是否存在特定的内容,比如Powered by xxx | Src/RegexpTest.cpp |
<expectedhttpcode> | 期望的http返回码 | |||
<regexp> | 在返回的内容中匹配正则,匹配上了,就是存在该软件 | |||
<verregexp> | 通过verregexp正则取出版本信息,注意,通过正则中最外面的括号获取版本号信息,获取不到为unknown |
其他字段说明:
Typeid:唯一标识该版本识别配置的id
Certainty:确认度。同一个软件的识别,可能有多种方法,当多种方法都能识别出来时,根据certainty的大小确认哪个方法更准确。越大越准确。
Description:该配置文件相关说明。
注:
1)如配置的内容存在xml标签,需要使用CDATA包含起来。
转自:http://security.tencent.com/index.php/opensource/detail/7
ps:作者提出了三种不同的方式来识别程序指纹:一是根据某些url返回的头部字段信息;二是根据某些url内容的md5值;三是根据某些url内容进行正则匹配