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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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

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

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

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

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

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

discuz_feature.py:

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

这个文件里仅仅有一个字典用来存放对应的指纹信息,我不可能做得非常细(时间不同意啊),所以仅仅有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。程序运行例如以下:

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

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

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

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

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

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

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

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

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




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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/116952.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Codeforces 486C Palindrome Transformation(贪心)[通俗易懂]

    Codeforces 486C Palindrome Transformation(贪心)

  • 详解卷积反卷积操作

    详解卷积反卷积操作TransposedConvolution,FractionallyStridedConvolutionorDeconvolution Postedon 2016-10-29反卷积(Deconvolution)的概念第一次出现是Zeiler在2010年发表的论文Deconvolutionalnetworks中,但是并没有指定反卷积这个名字

  • Flask 框架简单入门

    Flask 框架简单入门Flask框架介绍Flask框架什么是Flask?flask是一种基于python,并且依赖于Jinja2模板引擎(提供网页解析)和WerkzeugWSGI服务(pythonweb应用与web服务之间的接口)的一种微型框架。其中:Jinja2模板引擎:通俗来讲就是服务器接收到用户请求之后,将数据传入HTML文件中后,经过模板引擎的渲染将其呈现在网页中响应给用户。WerkzeugWSGI:pythonweb应用程序是一个被调用的对象,它无法直接与web服务器直接建立联系,所以WS

  • 学习双拼必看(最全教程):双拼输入法的心得以及快速入门办法

    学习双拼必看(最全教程):双拼输入法的心得以及快速入门办法1.简单介绍一下双拼2.总共18种双拼方案3.15种双拼方案的具体映射4.顺便提一下双拼口诀的事情5.总结不同平台选择的方案双拼(也称双打)是一种建立在拼音输入法基础上的输入方法,可视为全拼的一种改进,它通过将汉语拼音中每个含多个字母的声母或韵母各自映射到某个按键上,使得每个音都可以用两个按键打出,极大地提高了拼音输入法的输入速度。这种声母或韵母到按键的对应表通常称之为双…

  • linux 内存信息_shell查看内存使用情况

    linux 内存信息_shell查看内存使用情况pmaplddstace要熟悉的几个调试命令!两个查看内存的文件$cat/proc/&lt;pid&gt;/stat|awk'{print$23/1024}’$cat/proc/&lt;pid&gt;/status|grep-ivmsize其中,关于内存的是VSZ和RSS这两个概念manps看看它们的含义:rss       RSS    resident…

    2022年10月28日
  • import java.io 是什么意思_Java IO 详解

    import java.io 是什么意思_Java IO 详解JavaIO详解初学java,一直搞不懂java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结合到java7的最新技术,所以自己来整理一下,有错的话请指正,也希望大家提出宝贵意见。首先看个图:(如果你也是初学者,我相信你看了真个人都不好了,想想java设计者真是煞费苦心啊!)这是javaio比较基本的一些处理流,除此之外我们还会提到一些比较深入的基于i…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号