21.14 Python 实现Web指纹识别
在当今的Web安全行业中,识别目标网站的指纹是渗透测试的常见第一步。指纹识别的目的是了解目标网站所使用的技术栈和框架,从而进一步根据目标框架进行针对性的安全测试,指纹识别的原理其实很简单,目前主流的识别方式有下面这几种。
- 识别特定网页中的关键字,比对关键字识别框架:这种方式通过在目标网页的
HTML、CSS、JavaScript代码中搜索特定的关键字或标识,比对这些关键字与已知框架的特征进行识别。例如,如果在网页中发现了特定的JavaScript函数、CSS类名或HTML标签,可以推断目标网站所使用的框架或库,如jQuery、AngularJS等。 - 通过计算特定的相对独立页面的哈希值,比对实现鉴别:这种方式将目标网页的内容进行哈希计算,生成一个唯一的哈希值,并与已知框架的页面哈希值进行比对。如果目标网页的哈希值与某个框架的哈希值匹配,则可以推断目标网站所使用的框架。这种方法适用于那些在不同页面间保持相对稳定的框架,例如单页应用(SPA)。
- 通过指定URL的TAG模式,鉴别目标容器类型:这种方式通过分析目标网站的URL结构或特定的URL参数,来推断目标网站所使用的容器类型或框架。例如,如果URL中包含特定的路径或参数,可以推断目标网站可能是基于某个特定容器,如
WordPress、Drupal等。这种方式常用于识别内容管理系统(CMS)或其他特定的应用程序。
这些指纹识别方式都是通过分析目标网站的特定特征或行为,从中推断所使用的框架或技术。它们可以帮助渗透测试人员了解目标网站的技术栈和框架,从而进行针对性的安全测试和漏洞扫描。本节内容中我们将采用第二种方式通过哈希鉴定来确定目标指纹信息,此种方法需要有完善的特征库,这些库我们可以自行寻找制作,也可以使用已有的库经过转换后获取。
在实现指纹识别之前,我们先要尝试读取到该目标网站的标题信息,该功能实现非常简单,只需要读入页面,并依次取出所需要的"Date","Server","X-Powered-By","title"字段即可,由于代码较为简单此处就直接放出代码部分。
import re,socket,threading,requests
import argparse
header = {'user-agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) LySharkTools'}
def GetIPAddress(domain):
try:
url = str(domain.split("//")[1])
sock = socket.getaddrinfo(url,None)
result = re.findall("(?:[0-9]{1,3}\.){3}[0-9]{1,3}", str(sock[0][4]))
return str(result[0])
except Exception:
pass
def GetServerTitle(url):
try:
address = GetIPAddress(url)
Respon = requests.get(url=url,headers=header,timeout=5)
print("--" * 80)
print(url + " ",end="")
print(address + " ", end="")
if Respon.status_code == 200:
RequestBody = [item for item in Respon.headers]
for item in ["Date","Server","X-Powered-By"]:
if item in RequestBody:
print(Respon.headers[item] + " ",end="")
title = re.findall("<title>.*</title>", Respon.content.decode("utf-8"))
print(title)
except Exception:
pass
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-f","--file",dest="file",help="")
args = parser.parse_args()
# 使用方法: main.py -f url.log
if args.file:
fp = open(args.file,"r")
for item in fp.readlines():
url = item.replace("\n","")
thread = threading.Thread(target=GetServerTitle,args=(url,))
thread.start()
else:
parser.print_help()
这段代码在运行时读者需要准备好需要获取的网站列表,并每行一列放入url.log文件中,通过运行如下图所示的命令即可依次读取到这些网站的服务器信息;

我们继续实现指纹识别功能,首先利用Requests库将目标页面读入到字符串中,然后调用MD5算法计算出该页面的HASH值并比对,由于特定框架中总是有些页面不会变动,我们则去校验这些页面的HASH值,即可实现对框架的识别,代码很简单这里就直接放出源代码。
import requests
import os,sys,hashlib
import argparse
headers = {'user-agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) LySharkTools'}
def CheckFinger(url,flag,keyworld):
if flag == 0:
ret = requests.get(url=url,headers=headers,timeout=1)
text = ret.text
md5=hashlib.md5()
md5.update(text.encode('utf-8'))
print("目标网页Hash值: {}".format(md5.hexdigest()))
else:
fp = open(keyworld,"r")
for i in fp.readlines():
path = url + eval(i.replace("\n", ""))["Path"]
hash = eval(i.replace("\n", ""))["Hash"]
web = eval(i.replace("\n", ""))["WebServer"]
ret = requests.get(url=path, headers=headers, timeout=1)
if ret.status_code == 200:
text = ret.text
md5 = hashlib.md5()
md5.update(text.encode('utf-8'))
if md5.hexdigest() == hash:
print("目标Hash:{} CMS页面类型:{} ".format(hash,web))
else:
continue
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--mode",dest="mode",help="设置检查类型 [check/get]")
parser.add_argument("-u","--url",dest="url",help="指定需要检测的网站地址")
parser.add_argument("-f","--file",dest="file",help="指定字典数据库 data.json")
args = parser.parse_args()
if args.mode == "get" and args.url:
CheckFinger(args.url,0,args.file)
# 检测目标容器类型: main.py --mode=check -u https://www.xxx.com -f data.json
elif args.mode == "check" and args.url and args.file:
CheckFinger(args.url,1,args.file)
else:
parser.print_help()
这段代码通过使用get方法可获取到特定页面的hash值,例如获取www.lyshark.com网站特定路径的hash值,则可以执行如下命令;

当获取到这些特征后,我们就可以新建database.db文件,并将这些数据保存为特定的格式,如下所示;
{"Path":"/about/index.html","Hash": "9e69dd111c6cc873a1f915ca1a331b06","WebServer":"hexo"}
{"Path":"/index.php","Hash": "2457dd111c6cc32461f915ca17789b06","WebServer":"typecho"}
{"Path":"/index.html","Hash": "7530893af83150dc07461f4bc4cc0de6","WebServer":"oss"}
当特征库完整时,即可使用-f指定特征文件,循环获取是否匹配特征,从而判断web容器使用了那种容器。

21.14 Python 实现Web指纹识别的更多相关文章
- 使用C#winform编写渗透测试工具--Web指纹识别
使用C#winform编写渗透测试工具--web指纹识别 本篇文章主要介绍使用C#winform编写渗透测试工具--Web指纹识别.在渗透测试中,web指纹识别是信息收集关键的一步,通常是使用各种工具 ...
- Web指纹识别目的Discuz识别+粗糙的版本演绎
这个识别程序是本学期在我的职业培训项目.它是做一类似至Zoomeye怪东西,然后使用ES集成,为了让搜索引擎寻找.因此,我们必须首先去网上识别相应的能力Web包裹,如果用户输入的关键词:Discuz ...
- 原创工具14Finger-全能web指纹识别与分享平台
14Finger 功能齐全的Web指纹扫描和分享平台,基于vue3+django前后端分离的web架构,并集成了长亭出品的rad爬虫的功能,内置了一万多条互联网开源的指纹信息. Github:http ...
- python web指纹获取加目录扫描加端口扫描加判断robots.txt
前言: 总结上几次的信息收集构造出来的. 0x01: 首先今行web指纹识别,然后在进行robots是否存在.后面是目录扫描 然后到使用nmap命令扫描端口.(nmap模块在windows下使用会报停 ...
- Web服务器指纹识别工具httprint
Web服务器指纹识别工具httprint 在Web渗透测试中,准确判断服务器的类型直接影响后期渗透测试的成功率.Kali Linux提供了专门的Web服务器指纹识别工具Httprint.该工具根据 ...
- Web应用程序指纹识别工具BlindElephant
Web应用程序指纹识别工具BlindElephant BlindElephant是一款Web应用程序指纹识别工具.该工具可以读取目标网站的特定静态文件,计算其对应的哈希值,然后和预先计算出的哈希值 ...
- python安全编程之指纹识别
什么是cms CMS是Content Management System的缩写,意为"内容管理系统",这是百度百科的解释,意思是相当于网站的建站模板,整个网站架构已经集成好了,只需 ...
- WAF指纹识别和XSS过滤器绕过技巧
[译文] -- “Modern Web Application Firewalls Fingerprinting and Bypassing XSS Filters” 0x1 前言 之前在乌云drop ...
- Python Django(WEB电商项目构建)
(坚持每一天,就是成功) Python Django Web框架,Django是一个开放源代码的Web应用框架,由Python写成.采用了MTV的框架模式,即模型M,模板T和视图V组成. 安装Pyth ...
- Kali Linux渗透测试实战 2.2 操作系统指纹识别
目录 2.2 操作系统指纹识别 2.2.1 Banner抓取 2.2.2 TCP 和 ICMP 常规指纹识别技术 TCP数据报格式 ICMP首部格式 TTL与TCP窗口大小 FIN探测 BOGUS f ...
随机推荐
- 解密Prompt系列1. Tunning-Free Prompt:GPT2 & GPT3 & LAMA & AutoPrompt
借着ChatGPT的东风,我们来梳理下prompt范式的相关模型.本系列会以A Systematic Survey of Prompting Methods in Natural Language P ...
- DevEco中被忽略的实用功能
近期,我一直在业余时间研究纯血鸿蒙(HarmonyOS)App的开发,所使用的IDE是华为官方的DevEco Studio 3.1.1. 随着使用时间的增长,我发现了几个特别容易被忽略,但又特别实用的 ...
- CDS 重命名失败
当创建CDS视图,名称命名错误,后将视图名称更改后,激活报错(例如,第一次创建的视图名称为ZVWM014,后改为ZVMM014) SQL view ZVWM014 cannot be renamed ...
- Java 时间戳和时间相互转换 日期时间和字符串相互转换 日期时间相减差值 日期时间增加指定天数
Java 时间戳和时间相互转换 日期时间和字符串相互转换 日期时间相减差值 日期时间增加指定天数 代码: package com.sux.demo; import java.text.ParseExc ...
- 图扑 HT for Web 手机端运维管理系统
随着信息技术的快速发展,网络技术的应用涉及到人们生活的方方面面.其中,手机运维管理系统可提供数字化.智能化的方式,帮助企业和组织管理监控企业的 IT 环境,提高运维效率.降低维护成本.增强安全性.提升 ...
- 清洁低碳环保新能源,3D 光伏与光热发电站可视化
前言 碳达峰.碳中和成为今年两会"热词",在国家政府工作报告中指出,扎实做好碳达峰.碳中和各项工作,制定 2030 年前碳排放达峰行动方案,优化产业结构和能源结构,实现低碳环保节能 ...
- Intellij IDEA安装与配置教程(Windows版)
Intellij IDEA(简称IDEA)是Java语言的集成开发环境,在业界公认为是一款优秀的Java开发工具.分为Community社区版(免费)和Untimate终极版(付费). IDEA是一款 ...
- uni-app安卓手机无法连接到调试服务
uni-app连接安卓真机,发现接口调不通,打开Hbuilder下方的调试.可查看失败原因:如下图 解决方法:电脑变热点,手机连这个热点,就能解决手机和pc在同一局域网.具体操作,参照以下网站: ht ...
- wireshark 抓包使用
本文为博主原创,转载请注明出处: 在项目开发过程当中,尤其在联调和测试功能的使用,经常会用到抓包,用抓包进行问题的定位. 所以记录一下wireshark的使用,如何抓包,分析,保存等. wiresha ...
- SD Host控制器微架构设计
微架构设计思路 ahb_slave_if中的寄存器可以在datasheet中进行描述 sd_clk - 时钟产生模块的接口描述 sd_data_fsm和sd_cmd_fsm - 状态机描述 发送时序需 ...