Web指纹识别目的Discuz识别+粗糙的版本演绎

这个识别程序是本学期在我的职业培训项目。它是做一类似至Zoomeye怪东西,然后使用ES集成,为了让搜索引擎寻找。因此,我们必须首先去网上识别相应的能力Web包裹,如果用户输入的关键词:Discuz X3.0。我就要显示出对应版本号的内容才OK。

作为识别子程序,我这里暂且分享一下识别Web组件的思路。

我是从浅谈web指纹识别技术一文中找到的思路。

对于Discuz的站点。第一时间想的就是识别footer了。可是问题在于。做的好的一些站点往往会将“Powered By”字样改动,所以为了配合footer字样进行识别,我使用了robots.txt和比較隐蔽的meta标签来进行共同识别。

而粗略的版本号信息,则是从robots.txt中获取的。

指纹所有放在一起进行管理,方便日后进行指纹的加入:

discuz_feature.py:

这个文件里仅仅有一个字典用来存放对应的指纹信息,我不可能做得非常细(时间不同意啊),所以仅仅有footer信息、robots信息、meta信息三个类型的指纹。

在主程序中直接load这个指纹库就可以,以下就是识别主程序的代码,程序输入为以回车换行切割的域名列表。输出为结果文件,代码例如以下:

#coding=utf-8
import requests
from bs4 import BeautifulSoup
import re
from discuz_feature import matches
'''
Discuz 指纹识别
1.meta数据元识别
2.intext识别
3.robots.txt识别
'''
class DiscuzDetector():
	'''构造方法'''
	def __init__(self,url):
		if url.startswith("http://"):
			self.url = url
		else:
			self.url = "http://%s" % url
		try:
			self.r = requests.get(self.url,timeout=8)
			self.page_content = self.r.content
		except Exception, e:
			print e
			self.r = None
			self.page_content = None

	'''识别meta标签'''
	def meta_detect(self):
		if not self.r:
			return False
		pattern = re.compile(r'<meta name=".*?

" content="(.+)" />')
		infos = pattern.findall(self.page_content)
		conditions = matches['meta'][0] or matches['meta'][1]
		if infos:
			for x in infos:
				if x.count(conditions) != 0:
					return True
					break
		else:
			return False

	'''discuz 版本号识别'''
	def robots_dz_xx_detect(self):
		if not self.r:
			return (False,None)
		robots_url = "%s%s" % (self.url,"/robots.txt")
		robots_content = requests.get(robots_url).content
		if not robots_content:
			return (False,None)
		robots_feature_xx = matches['robots_for_xx']
		robots_feature_Xx = matches['robots_for_Xx']
		robots_list = robots_content.split("\r\n")
		pattern = re.compile(r'# robots\.txt for (.+)')
		version_info = []
		for x in robots_list:
			#假设robots.txt中含有# robots.txt for Discuz! X3 行  则直接推断版本号
			version_info = pattern.findall(x)
			if version_info != [] and robots_content.count("Version" and "Discuz!"):
				if robots_content.count("Version" and "Discuz!"):
					pattern = re.compile(r'# Version (.+)')
					version_number = pattern.findall(str(robots_content))
					if version_number:
						version_info.append(version_number)
				return (True,version_info)
			else:
				#若版本号信息被删除则识别出版本号
				is_xx = (x in robots_feature_xx)
				is_Xx = (x in robots_feature_Xx)
				if is_Xx or is_xx:
					#推断为discuz
					#推断版本号
					if is_Xx == True:
						version_info = 'Discuz Xx'
						return (True,version_info)
					else:
						version_info = 'Discuz xx'
						return (True,version_info)
		#不是discuz
		return (False,None)

	'''检測网页中的discuz字样'''
	def detect_intext(self):
		if not self.r:
			return False
		text_feature = matches['intext'][0] or matches['intext'][1]
		if self.page_content.count(text_feature) != 0:
			return True
		else:
			return False

	'''判别方法'''
	def get_result(self):
		if not self.r:
			return (False,'Not Discuz!')
		is_meta = self.meta_detect()
		res = self.robots_dz_xx_detect()
		is_dz_robots = res[0]
		version_info = res[1]
		print version_info
		is_intext = self.detect_intext()

		if is_meta or is_dz_robots or is_intext:
			#print 'Find Discuz!'
			if version_info:
				# return (True,'Find! Version:%s' % (version_info[0]))
				return (True,'%s' % (version_info[0]))
			else:
				return (True,'Version:Unknown')
		else:
			return (False,'Not Discuz!')

if __name__ == '__main__':

	'''读文件识别'''
	f = open('discuz.txt','r')
	wf = open('results.txt','a')
	file_content = f.read()
	dz_url_list = file_content.split('\n')
	for url in dz_url_list:
		print url
		detector = DiscuzDetector(url)
		ret = detector.get_result()
		print ret
		if ret[0]:
			wf.write("%s\t%s\n" % (url,ret[1]))
		else:
			continue
	wf.close()
	f.close()

里面的discuz.txt就是须要识别的域名列表文件,输出为results.txt。程序运行例如以下:

看来X3.x的版本号用的挺多。

在某些情况下。须要做批量利用,对这个脚本稍加改动就能够帮助识别出域名数据库中的Discuz的网站。

你须要做的仅仅是把漏洞攻击代码作为兴许模块进行攻击就可以。

当然,关于批量利用,使用web指纹识别这样的方法尽管准确性高,可是比較费时间,不适合大规模的扫描,这样的情况下。一般都是Fuzzing跑字典去做。

使用Elasticsearch整合的效果例如以下:

假设希望做的有模有样的话。那么就要加入后面的监控与漏洞攻击模块了。使用RESTful接口做出API是最好的、最灵活的选择,以后会逐渐完好,争取做出zoomeye的雏形:-)

另外,转载请注明出处啊大哥们!





版权声明:本文博主原创文章。博客,未经同意不得转载。

时间: 2024-11-08 05:10:33

Web指纹识别目的Discuz识别+粗糙的版本演绎的相关文章

Web指纹识别之Discuz识别+粗略版本判断

这个识别程序是本学期我的专业实训上的一个项目,就是做一个类似于Zoomeye的东西,然后使用ES进行整合,从而做出搜索引擎的模样.那么首先就要有能力去网上识别出相应的Web组件,如用户输入关键词:Discuz X3.0,我就要显示出相应版本的内容才OK.作为识别子程序,我这里暂且分享一下识别Web组件的思路. 我是从浅谈web指纹识别技术一文中找到的思路.对于Discuz的网站,第一时间想的就是识别footer了,但是问题在于,做的好的一些网站往往会将"Powered By"字样修改,

移动端车牌识别(前端识别、后端识别)的区别分析

关键词:移动端车牌识别.ocr车牌识别技术.车牌识别技术.车牌识别sdk.移动端车牌识别sdk.手机端车牌识别.安卓车牌识别.安卓端车牌识别技术.移动端车牌识别sdk(前端识别) 移动端前端车牌识别OCR技术是为促进人工智能化建设研发而来的SDK应用.此应用基于Android.ios平台,手机.PDA.安卓系统带200万像素以上的摄像头均适用,该移动端前端车牌识别技术sdk.Android平台提供Jar包,IOS平台提供.a静态库,从拍照识别车牌为基础,一步步研发出并且是首创出视频流OCR识别,

营业执照识别/营业执照OCR识别API

关键词:营业执照识别 营业执照云识别 营业执照ocr识别 营业执照ocr识别API 安卓营业执照识别 ios营业执照识别 营业执照识别/营业执照OCR识别API是一款基于服务器平台开发的营业执照OCR识别服务程序,支持主流Windows.Linux 服务器平台.用户通过前端上传营业执照图像,在服务器端完成识别后,返回标准XML识别结果,供后端解析. 企业可将营业执照识别/营业执照OCR识别API部署在自有服务器上(云服务器或本地服务器),2 个小时即可完成安装部署,非常简单: 营业执照识别/营业

百度DMLC分布式深度机器学习开源项目(简称“深盟”)上线了如xgboost(速度快效果好的Boosting模型)、CXXNET(极致的C++深度学习库)、Minerva(高效灵活的并行深度学习引擎)以及Parameter Server(一小时训练600T数据)等产品,在语音识别、OCR识别、人脸识别以及计算效率提升上发布了多个成熟产品。

百度为何开源深度机器学习平台? 有一系列领先优势的百度却选择开源其深度机器学习平台,为何交底自己的核心技术?深思之下,却是在面对业界无奈时的远见之举. 5月20日,百度在github上开源了其深度机器学习平台.此番发布的深度机器学习开源平台属于"深盟"的开源组织,其核心开发者来自百度深度学习研究院(IDL),微软亚洲研究院.华盛顿大学.纽约大学.香港科技大学,卡耐基·梅陇大学等知名公司和高校. 通过这一开源平台,世界各地的开发者们可以免费获得更优质和更容易使用的分布式机器学习算法源码,

警务系统中证件识别和车牌识别解决方案

一. 应用背景: 警察或者交警基本上都是在室外或者街头工作,在移动互联的时代,已经能够很好的解决治安维稳当中的移动办公执法的问题.智能手机.平板和特制手持设备都成为日常生活和工作的比不缺少的产品,警务通(又叫移动警察)在治安维稳的工作中应用而生,并得到了大范围的普及.由于治安维稳的工作都是不是在办公室,传统的执法工作,,都是大量的人员排查和手工证件录入和手工车牌录入,给工作增加了大量的繁琐工作,是工作人员不能够把注意力集中在工作重点上,耗费大量的人力物力时间去录入各种证件和车牌.为解决此录入问题

Vin码识别/车架号识别为APP功能增添亮点

Vin码识别/车架号识别,顾名思义,就是识别车辆的Vin码,也就是做车架号解析,Vin码识别/车架号识别利用的是ocr识别技术,支持视频流获取图像,自动触发识别,另Vin码识别/车架号识别sdk支持安卓和ios主流操作平台,便于集成,一般三五个钟,就能把识别核心集成到app里面. Vin码(Vehicle Identification Number)车架号,作为车辆的身份证,具有唯一性,不可重复性,属于独一无二的应用.从Vin码里可以解读出车辆的很多信息:像发动机型号.生产厂商.生产日期.组装地

eparking篇:Vin码识别车架号识别为什么这么受汽车市场欢迎?

核心内容:汽车Vin码识别车架号识别系统可支持Android4.0以上.IOS7.0以上支持平台:可支持二次开发,提供Android开发JAR包,IOS平台静态库开发包:支持视频预览ocr识别模式:可项目授权,并且可进行接口开发测试.在汽车保险.汽修保养app平台.二手车交易.汽车融资租赁.4S店车辆管理以及维修保养等行业中得到了很好的应用,因此,汽车Vin码识别车架号识别软件在汽车市场非常的受欢迎...... Vin是英文Vehicle Identification Number(车辆识别码)

解析Vin码识别/车架号识别的识别过程

相信大家对Vin码识别/车架号识别的识别过程都很感兴趣吧,今天来简单的给大家介绍一下! 第一步.汽车Vin码识别/车架号识别图像的输入以及预处理.通过图像的裁切校正.二值化对图片进行初步的处理,把前景作为黑色,背景作为白色有利于计算机更好的识别处理. 第二步.汽车Vin码识别/车架号识别,进行字符切割,减少拍照过程中由于角度等问题造成的字迹粘连等问题.字符识别从图片中提取想要的信息,以特征提取为主,由于文字的位移,笔画的粗细,断笔,粘连,旋转等因素的影响,极大影响特征的提取的难度,尤其是Vin码

VIN码识别/车架号识别/车辆唯一编码识别/车辆信息识别提取

对于有车一族的朋友来说,日常接触比较多的是车牌.行驶证.驾驶证,而知道VIN码/车架号码的比较少. 其实,对于车辆来说,VIN码/车架号码非常重要,它就像人的身份证一样,VIN码/车架号码是车辆唯一的身份证明. VIN码/车架号码由17位字母和数字混合而成,从车辆VIN码/车架号码可以解析出非常多的信息,如车辆的生产厂家.年代.车型.车身型式及代码.发动机代码及组装地点等. 正是由于它的重要作用,在许多地方都可以看到VIN码/车架号码的存在.如车辆前风挡玻璃.发动机铭牌.行驶证.机动车合格证.机