这个识别程序是本学期在我的职业培训项目。它是做一类似至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的雏形:-)

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




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

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

  1. 使用C#winform编写渗透测试工具--Web指纹识别

    使用C#winform编写渗透测试工具--web指纹识别 本篇文章主要介绍使用C#winform编写渗透测试工具--Web指纹识别.在渗透测试中,web指纹识别是信息收集关键的一步,通常是使用各种工具 ...

  2. 原创工具14Finger-全能web指纹识别与分享平台

    14Finger 功能齐全的Web指纹扫描和分享平台,基于vue3+django前后端分离的web架构,并集成了长亭出品的rad爬虫的功能,内置了一万多条互联网开源的指纹信息. Github:http ...

  3. python web指纹获取加目录扫描加端口扫描加判断robots.txt

    前言: 总结上几次的信息收集构造出来的. 0x01: 首先今行web指纹识别,然后在进行robots是否存在.后面是目录扫描 然后到使用nmap命令扫描端口.(nmap模块在windows下使用会报停 ...

  4. 基于分布式的短文本命题实体识别之----人名识别(python实现)

    目前对中文分词精度影响最大的主要是两方面:未登录词的识别和歧义切分. 据统计:未登录词中中文姓人名在文本中一般只占2%左右,但这其中高达50%以上的人名会产生切分错误.在所有的分词错误中,与人名有关的 ...

  5. uu云验证码识别平台,验证码,验证码识别,全自动验证码识别技术,优优云全自动打码,代答题系统,优优云远程打码平台,uu云打码

    uu云验证码识别平台,验证码,验证码识别,全自动验证码识别技术,优优云全自动打码,代答题系统,优优云远程打码平台,uu云打码 优优云验证码识别答题平台介绍 优优云|UU云(中国公司)是全球唯一领先的智 ...

  6. 移动端车牌识别、行驶证识别OCR为共享汽车APP增添技术色彩

    本文主题:移动端车牌识别.行驶证识别OCR为共享汽车APP增添技术色彩 本文关键词:车牌识别,证件识别,移动端车牌识别,行驶证识别,手机车牌识别,驾驶证识别 近两年,随着共享单车以及共享电车的兴起,有 ...

  7. java web eclipse中项目的加载过程

    java web eclipse中项目的加载过程: Tomcat默认从WEB-INF/目录下加载资源,Eclipse在发布程序的时候,并没有把User Libraries的相关资源拷贝到WEB-INF ...

  8. windows下简单验证码识别——完美验证码识别系统

    此文已由作者徐迪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 讲到验证码识别,大家第一个可能想到tesseract.诚然,对于OCR而言,tesseract确实很强大,自带 ...

  9. VIN码识别/车架号识别独家支持云识别

    VIN码(车架号)对于懂车的人来说并不陌生,不要小看这一串字符,从VIN码中可以读懂车辆的生产厂家.年代.车型.车身型式及代码.发动机代码及组装地点等信息. 一辆汽车的VIN码也是车辆的唯一身份证明, ...

随机推荐

  1. selenium让人摸不着头脑的问题

    selenium让人摸不着头脑的问题 问题一 使用webdriver驱动firefox浏览器时如果不设置参数,默认使用的Firefox的profile和平时打开浏览器使用的firefox不一样,如果要 ...

  2. 每日一小练——高速Fibonacci数算法

    上得厅堂,下得厨房,写得代码,翻得围墙,欢迎来到睿不可挡的每日一小练! 题目:高速Fibonacci数算法 内容:先说说Fibonacci数列,它的定义是数列:f1,f2....fn有例如以下规律: ...

  3. IT谁谁说女子不如男行业

    (联合创始人拉里·佩奇(Larry Page)和Sergey Brin(Sergey Brin)曾经说过:"促进性别平衡对工作的顺利开展.该公司可以有很强的女性团队至关重要,尤其是技术的妇女 ...

  4. hdu 2451 Simple Addition Expression(数位DP )成败在于细节

    亚洲区域赛的题,简单的数位DP题,注重细节. 任何细节都有可能导致wa,所以没有绝对的水题. 把握好细节,此题便A. #include<stdio.h> __int64 getans(__ ...

  5. Maven POM入门

    Super POM(project object model) Maven内置了一个默认的POM(不在项目中,因此不可见),每一个project都会继承自这个默认的POM,因此叫Super POM.除 ...

  6. JQuery开发工具和插件

    最近的研究jquery.为大家介绍几款开发工具.能够帮助你提高开发的效率. 1.Dreamweaver Dreamweaver是建立在WEB站点和应用程序的专业工具. 将可视化工具.应用程序开发功能和 ...

  7. php 汉字转拼音 [包含20902个基本汉字+5059生僻字]

    原文:php 汉字转拼音 [包含20902个基本汉字+5059生僻字] 昨天在转换拼音的时候发现个bug,有好多字都无法转换,不过也不能怪他,毕竟人家的库才8k,应该只有常用的.无奈上网找了下,发现一 ...

  8. 怎样改动SVN的地址

    改动svn地址的目的有两个,一个是更改默认svn路径.还有一个就是svn库server迁移了. 我碰到的是另外一种情况,SVN的IP地址改了,须要这么切换: 在本地配置库副本根文件夹点击鼠标右键--& ...

  9. AJAX基础知识点学�

    1.AJAX(Asynchronous JavaScript and XML)即,异步JavaScript和XML 2.同步/异步差别 同步: ①每次进行整个页面的刷新 ②同步的链接在同一时间仅仅能有 ...

  10. 二叉树3种递归和非递归遍历(Java)

    import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...