前 言
信息收集为渗透测试环节一个非常重要的阶段,它关系到后序列策划攻击的成功性。快速收集目标服务信息则需要测试人员熟练运用指纹识别技术。
指纹识别概念
组件是网络空间最小单元,Web应用程序、数据库、中间件等都属于组件。指纹是组件上能标识对象类型的一段特征信息,用来在渗透测试信息收集环节中快速识别目标服务。互联网随时代的发展逐渐成熟,大批应用组件等产品在厂商的引导下走向互联网,这些应用程序因功能性、易用性被广大用户所采用。大部分应用组件存在足以说明当前服务名称和版本的特征,识别这些特征获取当前服务信息,从而进行一系列渗透测试工作。
指纹识别方式
网上描述指纹识别方式的文章很多,以下是我在实际测试中使用的几种方式
1.特殊文件的md5值匹配
2.请求响应主体内容或头信息的关键字匹配
3.请求响应主体内容或头信息的正则匹配
4.基于Url关键字识别
5.基于TCP/IP请求协议识别服务指纹
指纹识别详解
相关厂商下的cms(内容管理系统)程序文件包含说明当前cms名称及版本的特征码,如Discuz官网下robots.txt文件。
2.计算网站所使中间件或cms目录下静态文件的md5值,md5码可以唯一地代表原信息的特征。静态文件包括html、js、css、image等,建立在站点静态文件存在的情况下访问,如 Dedecms 官网下网站根目录URL“/img/buttom_logo.gif”图片文件。
3.请求访问外网端口映射设备,获取其响应头信息。根据相关规则,匹配特征字符。如请求天融信V**设备外网映射URL获取响应头信息。
4.TCP/IP协议簇通信交互,IP用来把逻辑地址分配到网络机器,TCP使用网络公认方式传送IP数据包。网络上的通信交互均通过TCP/TP协议簇进行,操作系统也必须实现该协议。操作系统根据不同数据包做出不同反应。如Nmap检测操作系统工具通过向目标主机发送协议数据包并分析其响应信息进行操作系统指纹识别工作。
5.Socket,又称为“套接字”,应用程序可以通过“套接字”向网络发出请求或者应答网络请求。Socket对TCP/TP协议进行封装,是一个通信链的句柄。扫描网络中数据存储服务,利用Socket编程接口,获取网络字符输出流,进行指纹识别工作。下面是我写的一个例子。
上图为Nmap服务识别文件中的一段mssql数据库的指纹信息,以下为mssql数据库各版本信息。
我在本地搭建了一个mssql2008数据库,使用java自带的socket api,socket请求192.168.1.107的mssql数据库服务,获取socket字符输出流。把hex字符转换为10进制字符,同时获取socket 字符输入流进行单字节转码,生成一串16进制字符(去除后4位字符)。这串16进制字符用以识别msssql数据库版本。下面是此例子的识别结果。
由图可见,socket发送网络请求,并识别出mssql数据库及版本信息。
指纹识别的例子有很多,大部分都是以指纹识别方式中的几种为主,在此就不详细说明了。
指纹识别工具
像国外一些开源指纹识别工具一样,如whatweb、wapplyzer等,我们也开发了一款指纹识别工具“大禹”。“大禹”为一款c/s结构jar文件工具,只需本地安装java环境,设置相关参数就可以使用,具体参数详解请看下文。
下载地址:https://github.com/Ms0x0/Dayu
开源工具使用说明:
-u 一个域名或IP,如果输入更多域名或IP使用‘,’分隔;
-r 读取本地域名或IP文件地址;
-t 输入一个线程数量,默认线程为50;
-p 设置一个请求端口,默认端口为80;
-s 设置一个请求协议,默认请求协议为http.(http、https);
-h 查看使用帮助;
-o 输出识别结果到本地文件;
-m 选择一个常规识别模式,默认使用模式为1;(1:快速识别一条指纹 2:获取命中率高的指纹 3:得到所有匹配的指纹)
–http-request 设置一个自定义请求URL;
–http-response 设置一个自定义关键字符。(支持正则表达式字符,注意字符大小写,自定义枚举指纹字符)
注:自定义识别模式参数为 –http-request /robots.txt –http-response discuz,不能和-m 常规识别模式一起使用。-u和-r参数不能同时使用。常规识别模式为3个选择项,模式1为匹配指纹库快速获取一条识别指纹;模式2为获取命中率高的指纹;(原理为假如一个url在识别的过程中同时命中2条dedecms指纹、1条discuz指纹、1条phpcms指纹,我们这时候优先选择识别为dedecms程序,这种情况很少出现,但是也作为考虑方面); 模式3为人工分析,获取所有匹配命中的指纹进行分析输出识别结果。详情请看github开源说明文档。
上图为“大禹”指纹识别情况,识别速度、识别准确率视情况而定,指纹库以及网络请求都是指纹识别的要素。
指纹识别平台
于是,有了下面的“Web”平台,这个平台就是一个开源的指纹库,包含操作系统,硬件设备,web,中间件,应用程序等指纹,因为是开源的,所以大家可以直接下载数据库,这样以后小伙伴写一些神器的时候,就可以直接导入了。
作者:巴不得1个CMS有20个指纹,这样识别更精准了……
“大禹”指纹识别工具因本地化、指纹库手动更新等原因给大家带来不便,因此我们线上推出了破晓团队-天蝎指纹识别平台,以“大禹”工具程序为基础,我们进行结构修改,完成在线指纹识别功能。
平台地址:http://www.secbug.org:8080/ 匿名用户:路人甲 密码:lurenjia
指纹平台说明如下:
平台首页说明
查询使用ecshop程序的站点
平台部分指纹说明
数据库结构说明 :
User(用户表):保存用户基本信息,包括用户昵称、用户密码、注册IP、当前状态等;
Recognitiontype(识别类型表):保存平台识别方式信息,包括ID、识别方式名称;
Programtype(程序类型表):保存程序类型信息,包括ID、程序类型名称;
Manufacturer(厂商表):保存厂商相关信息,包括ID、厂商公司名称、厂商官网地址、用户表主键Id等;
Fingerprint(指纹表):保存指纹相关信息,包括程序名称、识别url、识别内容、识别版本、厂商表主键ID、用户表主键ID等;
Job(任务表):保存任务启动相关信息,包括阶段性进度、创建时间、当前状态等;
Result(结果表):保存识别结果信息,包括识别路径、任务表主键Id、指纹表主键Id等。
以上数据库结构详情请看github上的README文件。
平台无需登录即可查看厂商列表以及使用查询功能,平台用户注册后,可上传或选择厂商添加自己的指纹,同时打开个人中心查看上传厂商或指纹状态信息,英雄榜实时排名,记录用户提交情况。奖励情况请查看平台说明。
在线指纹识别平台和“大禹”本地识别工具各有各的优势,大家视自身情况为主。
全文结言
指纹识别离不开指纹库的强大,我们在追求指纹开源的同时,也希望大家能积极在我们平台上提交指纹。目前已有几位大牛在支持我们的想法,在此感谢@0nise @borther @Catsay @北风飘然,当然还有不留名的路人甲人士。
希望更多的安全圈的朋友能够一起来完善,做出一个真正国内可用, 好用的,属于大家的平台,是我们的目标!