sir

Web 应用指纹识别总结

[TOC]

References

文献参考:
- Web Application finger printing(2012) https://anantshri.info/articles/web_app_finger_printing.html
- https://www.owasp.org/index.php/Fingerprint_Web_Application_(OTG-INFO-009)
- 一种有效的Web指纹识别方法
- Kcon2012 web application Detector议题: https://github.com/knownsec/KCon/blob/master/2012/WAD(Web%20Application%20Detector).pptx
- 浅谈web指纹识别技术(2012) https://www.freebuf.com/articles/2555.html

工具参考:

  • https://github.com/AliasIO/Wappalyzer
  • https://github.com/urbanadventurer/WhatWeb
  • wad(using Wappalyzer's detection rules) https://github.com/CERN-CERT/WAD
  • cmscan(基于fofa规则的指纹识别工具): https://github.com/cuijianxiong/cmscan https://www.freebuf.com/articles/web/129939.html
  • https://github.com/zerokeeper/WebEye/
  • https://github.com/w-digital-scanner/w11scan

基本识别方法

Web 指纹的四个特征选取:

  1. Header识别:比如Jboss会在头部加上X-Powered-By:Jboss,
  2. 结构特征: Web应用的类型可由其特殊的结构设计准确识别, 该指纹只需要从HTML数据的头部获取。 例如: 如果Web应用的文件路径包含/wp-includes/, 则该Web应用是Wordpress
  3. 静态文件md5值, 因为静态文件基本不会修改,因此其md5值可以较准确的识别出来cms的版本,较为精确,但可能存在漏报.
  4. 简单页面正则匹配: 比如首页的正则/关键字,或者是 robots.txt 中的关键字。

headers 识别
1. Sever字段有PHP/5.3.20,可以概括为表达式:"php/?([\d.]+)?\;version:\1"
2. X-Powered-By字段有同样的内容PHP/5.3.20,也可以使用上面的表达式
3. Set-Cookie中存在PHPSESSID,可以概括为表达式:"PHPSESSID"

对于首页可以分为很多判断标准:

简单页面正则匹配
简单页面可以分为首页以及robots.txt页面

  1. 首页HTML可以从: meta, script, title, href 这四个字段来着手, 这四个字段是这个html字段字段是的子集
href
主要目标:网页源代码中href,src和action所包含的超链接,只识别目标主机名和不带主机名的链接。
meta
比如discuz的meta 识别指纹:
image
  1. robots.txt 页面如果存在可以用正则匹配的方式来匹配关键字,较为准确。

文件结构特征
1. 实际访问的url(因为一般都传递进来网站根目录,有些可能会有跳转)文件结构

示例:用友致远, http://www.ssepec.net
访问后,跳转到http://www.ssepec.net/yyoa/index.jsp,再找几个来访问也是如此,所以总结出url指纹:/yyoa/index.jsp

  1. 某些cms的文件结构: wordpress 的文件结构比如: /wp-admin/, /wp-include/

静态文件md5
一些css,js,logo,ico 文件的md5一般是不会变的,而且可以较为准确的识别出应用的版本。

国外的指纹识别工具

Wappalyzer

Referer:
- 如何使用Wappalyzer API进行Web应用指纹识别 https://paper.tuisec.win/detail/692efdf583a38de
- Developer Documentation:https://www.wappalyzer.com/docs/specification

  1. 语言: js
  2. 网站:https://github.com/AliasIO/Wappalyzer
  3. 特点:

- 1000+ 个cms的指纹
- 主要使用基于正则的匹配模式
- 指纹库是json格式,对国内的cms识别比较友好,方便迁移和整理。

  1. 规则库: src/app.json

JSON 字段:

  • 属性字段(必须)
Field Type desc
cats array 分类id
icon string 应用图标
website string 应用官网
  • 隐含和隔离字段(可选)
Field Type desc
implies string/array 一个应用程序的存在可能意味着另一个应用程序的存在,例如WordpPress意味着PHP也在使用中
excludes string/array 一个应用程序的存在可以排除另一个应用程序的存在

匹配模式(可选)

Field Type desc examples
js object JavaScript方法(区分大小写) { "jQuery.fn.jquery": "" }
headers object HTTP响应头 { "X-Powered-By": "^WordPress$" }
html String/Array HTML source code "]*href=\"index.html"
url String Full URL of the page. "^https?//.+\.wordpress\.com"
meta object HTML meta tags generator. { "generator": "^WordPress$" }
script String Array URLs of JavaScript files included on the page. "jquery\.js"

另外wapplyzer 还提供了api的功能:

  1. 总结: json格式的指纹整理以及分类都特别好, 很方便迁移和跨平台使用,而且wapplyzer本身提供了api供多种语言来调用。

不足之处: 规则完全是基于正则的模式,没有针对特殊url文件结构,或者静态文件这些指纹来判断。

Whatweb

Referer:
- 网站指纹识别 whatweb https://zhuanlan.zhihu.com/p/28017554
- https://github.com/urbanadventurer/WhatWeb/wiki/How-to-develop-WhatWeb-plugins
- https://github.com/urbanadventurer/WhatWeb/wiki/Writing-WhatWeb-Plugins

  1. 语言:ruby
  2. 网站:https://github.com/urbanadventurer/WhatWeb ,
    https://www.whatweb.net/
  3. 特点

- 超过1700多个指纹识别插件,可识别出1700多个应用, 识别方式包括正则,静态文件md5, 特殊文件结构
- 灵活控制发包的速度和识别可信度
- 性能调整,可以控制同时扫描多少个网站
- 多种导出格式: 包括简介格式,详细格式,xml,json等格式。

  1. 插件:

插件类型
- Content Management System
- Javascript Library
- HTTP Server
- Application Framework

4种识别方法:
- 在HTTP头部和简单网页进行正则匹配
- 正则匹配在HTML中的URL格式
- 测试某些特殊文件的的md5
- 测试某些urls的状态存在性。

WhatWeb支持4种方法,但第一种方法在大规模扫描中最有用。
通过权衡网络带宽和时间方面,它也是最有效的

一个识别phpmyadmin的插件指纹如下,一共分为四个部分:Google Dorks, Matches, Passive, Aggressive,通过注释可以知晓其大概功能,Dorks即google hacking搜索, Matches 模式匹配,Passive 对Cookie进行匹配,Aggresive主要是fuzz一些文件的md5。

主要的Matches规则里面就包括了文本模式,正则匹配模式,对header头部的搜索匹配,和对静态文件的md5识别

编写Matches 规则需要理解的一些变量定义如下:

  1. usage:

    ./whatweb [option] url

参数解析:

-l //列出所有的插件

-i --input-file //url文件列表

--log-xml=FILE/--log-json 返回xml/json格式的日志

-a 选项,此参数后边可以跟数字1-4分别对应4个不同的等级。

默认等级为1,,即只发送一次请求

  1. 总结: whatweb 的识别方法感觉较全面合理,基本常见的指纹识别方法都有覆盖到,而且分几个不同的识别模式来控制发包率和可信度。

但whatweb 对国内的网站识别很不友好, 国内一些常见的cms的指纹都没有。另外whatweb使用ruby编写,运行环境不太友好,指纹都是按照ruby插件的形式写成的,不方便整理以及跨语言调用。

Bind Elephant

  1. 语言:python
  2. 网站: https://community.qualys.com/community/blindelephant https://github.com/lokifer/BlindElephant
  3. 特点:

- 支持识别15个web app, 16个drupal的插件,26个wordpress的插件。
- 通过比较静态文件的哈希值来发现(已知)Web应用程序的版本

  1. usage

  1. 总结: 因为他的指纹被加密了,无法获取其具体指纹信息,Bind Elephant主要通过静态文件md5匹配来准确识别web应用的版本,对wordpress和drupa识别比较友好,但可以识别的cms很少,且对国内cms的识别不友好。

nikto

  1. 语言: perl
  2. 网站: https://github.com/sullo/nikto
  3. 特点(只说一下其指纹识别方面的特点):

- 主要有web服务器指纹识别和favicon.ico 的md5对比。
- 300+ 的favicon.ico md5值(2015/12/2最后更新), 200+服务器指纹信息.
4. 指纹库:
\program\databases\db_favicon 和 db_favicon \program\databases\db_server_msgs

db_favicon部分指纹

db_server_msgs部分指纹:

  1. 总结: favicon.ico md5指纹没有及时更新,而且指纹对国内cms不太友好,如果需要用的话需要自己去及时更新国内的一些指纹,服务器指纹仍然用的正则匹配的模式。

国内的一些指纹识别工具

WebEye

  1. 网站: 一个快速简单地识别WEB服务器类型、CMS类型、WAF类型、WHOIS信息、以及语言框架的小脚本 https://github.com/zerokeeper/WebEye/

  2. 特点:

- 基于正则和url文件结构来识别,200+ 条指纹信息
- 可以识别web服务器类型,cms,waf,whois 的一个快速简单的工具(使用协程)

  1. 指纹:

部分代码

w11scan

w11scan是一款分布式的WEB指纹识别系统(包括CMS识别、js框架、组件容器、代码语言、WAF等等),管理员可以在WEB端新增/修改指纹,建立批量的扫描任务,并且支持多种搜索语法。

  1. 网站: 基于url文件以及静态文件hash的一个指纹识别工具:https://github.com/w-digital-scanner/w11scan

  2. 特点:

- 538个cms的指纹,1091条md5 指纹, 且cms指纹基本是国内的cms.
- 每个指纹都会有一个命中率标记,每次识别成功后,相应指纹命中率会增加,使用指纹时优先使用命中率高的指纹。
- 优先使用命中率最高的指纹,其次,将指纹按照访问路径分类排序,再优先使用访问路径次数最多的指纹。
- 一个指纹识别成功后,会停止识别该URL的其他指纹,开始下一个任务。

  1. 指纹库: /backup/w11scan

  1. md5对比方法: 获取网页的content的值后用md5加密,如果是同一个文件,则获取到的md5都是一样的。

要注意的是,如果将文件下载下来,用f.read()来读取到的内容和r.content不一样。

w11scan作为一个批量识别cms功能的工具,采用特殊文件md5对比的指纹识别方法,收集到的有500+个cms的md5 指纹,而且其指纹信息比较适合国内的web应用,可以借鉴一下。

喜欢 0