Spaghetti扫描器源码分析之指纹识别
来源:互联网 发布:淘宝直播销量权重 编辑:程序博客网 时间:2024/06/06 19:54
Spaghetti是一个开源的Web扫描器。看了一下它的介绍,有关于指纹识别的组件。那就看看源码了解一下。
源码上看对指纹的识别,还是对response里面的项进行正则匹配,来进行特定指纹的识别。首先源码里面,定义了一个自己的request处理类,看了一下里面对GET和POST请求的参数都是一样的,也真是诡异,这有啥好封装的。唯一多了一个随机选择User-Agent项,可是这一项源码里面是定义了一个User-Agent的元组,然后利用随机数进行选择某一项。这里其实没有必要,python里面有专门的随机产生User-Agent的包叫fake-useragent。
指纹识别组件里面针对os、server、waf、cms等进行了识别。看下源码checkall.py:
class Checkall:
def __init__(self,agent,proxy,redirect,timeout,url,cookie):self.url = urlself.cookie = cookieself.output = output.Output()self.request = request.Request(agent = agent,proxy = proxy,redirect = redirect,timeout = timeout)def run(self):
self.output.info('Starting fingerprints module...')
try:resp = self.request.send(url = self.url,method = "GET",
payload = None,headers = None,cookies = self.cookie)ser = server.Server(self.url).run(resp.headers)self.output.plus('Server: %s'%ser)os_ = ([x for x in os.Os(resp.headers)])
for x in os_:if x != None:
self.output.plus('Operating system: %s'%x)firewall = ([x for x in waf.Waf(resp.headers,resp.content)])for x in firewall:if x != None:
self.output.plus('Firewall: %s'%x)cms_ = ([x for x in cms.Cms(resp.content)])for x in cms_:if x != None:
self.output.plus('Content Management System (CMS): %s'%x)lang_ = ([x for x in lang.Lang(resp.content,resp.headers)])for x in lang_:if x != None:
self.output.plus('Language: %s'%x)frame = ([x for x in framework.Framework(resp.headers,resp.content)])for x in frame:if x != None:
self.output.plus('Framework: %s'%x)headers.Headers().run(resp.headers)cookie.Cookie().run(resp.headers)
except Exception,e:pass
从源码中可以看到,主要是对http response的header部分和content部分进行特别的正则匹配来进行识别。这个识别还是很粗糙的,因为很多时候http response里面server部分有时候没内容,然后os部分有时候也没有内容。
cms的识别主要对drupal、joomla、magento、wordpress进行了初步识别,都是寻找各个cms中特有的文件。waf部分文件比较多,每个特别waf的特征码不一样吧。
对采用何种编程语言的识别有点意思,也是response header和content部分特别字段的正则匹配。看下python语言的识别。lang/python.py:
class Python:
@staticmethoddef run(content,headers):
_ = Falsefor item in headers.items():_ = re.search(r'python|zope|zserver|wsgi|plone|_ZopeId',item[1],re.I) is not None_ |= re.search(r'\.py$',content) is not Noneif _:
return "Python"break
有些关键词我也不太清楚。
框架的识别看着是把上面几种常见单独弄出来之后,又在framework下面对更多种类的框架进行了识别。这里倒是可以自己增加一些额外的框架识别代码,进行扩充。看下framework/django.py:
class Django:
@staticmethoddef run(headers):
_ = Falsefor item in headers.items():_ = re.search(r'csrftoken=',item[1],re.I) is not Noneif _:
return "Django (Python)"break
感觉识别有点简单,csrftoken确实是django中防止csrf的机制。
作为整体扫描器的一部分,指纹识别这块还是比较简陋的。单纯以这款扫描器来讲,这些指纹信息也只是展示给用户看的,如果后续做针对特定指纹的poc验证,那还是需要做的精细一些的。
指纹识别单独拿出来做的话,还是可以在whatweb的基础上造造轮子吧。
- Spaghetti扫描器源码分析之指纹识别
- Spaghetti扫描器源码分析之爬虫模块
- Spaghetti扫描器源码分析之发现模块
- 指纹识别分析之enroll流程
- 【Python】实现漏洞扫描器之MS15-034漏洞批量扫描+源码分析
- 指纹识别分析之framework初始化流程
- android指纹识别源码
- Scanner扫描器的源码
- 设置指纹识别模块分析
- ios开发之指纹识别
- iOS开发之指纹识别
- iOS开发之指纹识别
- Android6.0之指纹识别
- Android开发 之 指纹识别
- 编译原理之扫描器
- 端口扫描器-源码-易语言
- 端口扫描器-源码-易语言
- Spaghetti Squash
- Sublime Text 3 安装插件
- PAT 甲级 1099. Build A Binary Search Tree (30)
- java 中的多态
- PAT 甲级 1100. Mars Numbers (20)
- Java内存模型学习笔记
- Spaghetti扫描器源码分析之指纹识别
- Mac下CLion使用<bits/stdc++.h>头文件
- Ubuntu中Vim的安装
- 《Python学习手册》学习笔记(2)之第2章Python如何运行程序(关键词:编程语言/Python)
- <C语言>零长数组
- 结构 struct
- 002-fputc按照单个字符写文件
- POJ 1661 Help Jimmy(dp)
- 10.1基本输入输出