Web指纹识别
这几天在做一些指纹识别的工作,因为有实时性要求,考虑层面主要是源码识别,另一个方面则是流量识别。这里以Resin为例记录一下实验过程。
0x01 指纹识别
常见方式
特定文件
一些网站的特定图片/JS/CSS等静态文件,如favicon.ico、css、logo.ico、js等一般不会修改,通过爬虫对这些文件进行抓取,可比对md5值,如果和规则库中的md5一致,则说明是同一CMS。这种方式速度比较快,误报率相对低一些,但也不排除有些二次开发的CMS会修改这些文件。正常页面或错误网页中包含的关键字
先访问首页或特定页面如robots.txt等,通过正则匹配某些关键字,如Discuz、dedecms等。此外,可以构造错误页面,根据报错信息来判断使用的CMS或者中间件信息,如tomcat的报错页面等。
请求头信息的关键字匹配
根据网站response返回头信息进行关键字匹配,如Wappalyzer和whatweb就是通过banner信息来快速识别指纹,之前fofa的web指纹库很多都是使用的这种方法,效率非常高,基本请求一次就可以,但搜集这些规则可能会耗时很长,而且这些banner信息有些容易被改掉。
根据response header一般有以下几种识别方式:(1)查看http响应报头的X-Powered-By字段来识别;
(2)根据Cookies来进行判断,如一些waf会在返回头中包含一些信息,如Safedog等;
(3)根据header中的Server信息来判断,如Mod_Security、nginx-wallarm等;
(4)根据www-authenticate进行判断,一些路由交换设备可能存在这个字段,如huawei、h3c等设备。
URL包含的路径特征等
通过规则库去探测是否有相应目录,或者根据爬虫结果对链接url进行分析,文件中目录进行检测等等方式,通过url地址或者对robots.txt来判别是否使用了某CMS,比如wordpress默认存在wp-includes和wp-admin目录,织梦默认管理后台为dede目录,weblogic可能包含wlsconsole等URL关键特征。
常见的指纹识别工具
WhatWeb
Whatweb是一个基于Ruby的开源指纹识别工具,它能够识别的网站信息包括:CMS类型、博客平台、中间件、web框架、服务器、脚本类型、JavaScript库、IP、cookies等。
Wappalyzer
Wappalyzer是一个跨平台网站分析工具,可以帮助开发者、安全研究者检测网页使用了什么技术。Wappalyzer的功能可检测JavaScript框架/CMS内容管理系统/Web服务器和已安装的分析工具等。
Whatruns
Whatruns和Wappalyzer类似,可直接在chrome应用商城安装。在与Wappalyzer的对比上,它可以显示托管CDN、wordpress插件等,拥有丰富的插件支持。
0x02 Resin
在做最近的工作过程中,需要搭建环境对传输数据进行指纹提取,接下来记录了构建应用Docker及脱敏后指纹提取的简单思路。
要创建一个基于java:latest的resin镜像,首先要按照jdk的环境,之后便可创建resin镜像了。
下载一个基础镜像:docker pull java:latest,下载成功后docker info查看镜像信息。
将在官网下载的resin-4.0.64放在Users/repo/cms/resin目录下
官网下载地址编辑Dockerfile
在resin目录下创建、编辑Dockerfile内容,内容如下:1
2
3
4
5
6
7
8cd Users/repo/cms/resin
vim Dockerfile
# Dockerfile
FROM java:latest
ADD resin-4.0.64 /Users/repo/cms/resin/resin4
EXPOSE 8080
CMD ["/Users/repo/cms/resin/resin4/bin/resin.sh","console"]创建
build.sh启动脚本
给构造的镜像起名为 resin4,内容如下。运行build.sh脚本,可通过docker images查看已创建的resin4镜像。1
2
3# -t:镜像名称
# .是指定Dockerfile的位置在当前目录
docker build -t resin4:latest .基于镜像启动容器
通过docker ps查看容器运行状况,启动后可正常访问1
docker run --name test -d -p 18081:8080 resin4:latest

- 在resin中部署web项目
将web项目pro打包到/Users/repo/cms/resin目录,并将项目挂载到resin的虚拟目录中。1
docker run --name proCMS -d -p 18082:8080 -v /Users/repo/cms/resin/pro:/Users/repo/cms/resin/resin4/webapps/ROOT resin4:latest

- Resin指纹识别
对于resin,分别抓包和审计源码,采集如报文cgi/resin-admin等敏感目录访问报文,提取特征从而进行指纹识别。
举例:1
2
3
4
5
6
7
8
9# Resin特定文件
resin.ico
# Resin请求头
re.search('\/resin-admin', request.header)
# Resin关键字
re.search("Resin® Default Home Page", response.content)
re.search("Server:\sResin\/\d", response.header)
# URL
re.search("\/resin-admin", request.cgi)
0x03 参考链接
- 本文链接:https://fr4nk404.github.io/2018/06/01/Web指纹识别/
- 版权声明:Copyright © 2019 fr4nk404's Blog. Powered by Hexo. Theme by Cho.