Wappalyzer的分析和欺骗
字数 1246 2025-08-05 11:39:43
Wappalyzer的分析与欺骗技术详解
一、Wappalyzer基础分析
1. Wappalyzer概述
Wappalyzer是一款流行的网站技术指纹识别工具,能够检测网站使用的服务器软件、编程语言、JavaScript框架、内容管理系统(CMS)、分析工具等技术栈。
2. 基本工作原理
Wappalyzer通过多种方式识别网站技术:
- 分析HTTP响应头(Response Headers)
- 检查网页内容(HTML主体)
- 解析JavaScript和DOM结构
- 检测特定的URL模式
3. 技术识别来源
- Web服务器和编程语言:主要来自响应头或网页内容主体
- JS和DOM分析:通过注入脚本进行特殊检测
二、Wappalyzer源码分析
1. 插件目录结构
_locales/ # 本地化文件,支持多语言
_metadata/ # 插件元数据
css/ # CSS样式文件
html/ # HTML文件(选项页面、弹出页面等)
images/ # 图片资源
js/ # JavaScript脚本(核心功能)
technologies/ # 技术指纹数据库
2. 核心文件分析
(1) wappalyzer.js - 核心功能
- slugify函数:将字符串转换为SEO友好的格式
- getTechnology函数:从指纹库查找技术详细信息
- analyze函数:主要分析入口,定义多种分析方法:
- 一对一(oo)
- 一对多(om)
- 多对多(mm)
(2) utils.js - 工具函数
- 浏览器类型判断
- 回调API转Promise
- 本地存储操作
- 国际化处理
- 消息通信
(3) index.js - 入口文件
- analyzeJs:分析JavaScript技术
- analyzeDom:分析DOM节点识别技术
- loadTechnologies:加载技术和类别数据
(4) content.js - 内容脚本
- inject函数:向页面注入脚本
- getJs函数:获取JS技术指纹
- getDom函数:获取DOM技术指纹
(5) js.js和dom.js - 注入脚本
- 被注入到目标网页中执行
- 通过postMessage与插件通信
- 收集技术指纹数据并返回
三、Wappalyzer欺骗技术
1. 基本欺骗思路
通过Hook技术修改Wappalyzer的执行流程,伪造技术指纹数据。
2. 关键Hook点
- content.js中的inject函数
- window.addEventListener和removeEventListener
- postMessage通信机制
3. 具体欺骗方法
(1) Response指纹伪造
<!-- 简单meta标签伪造 -->
<meta name="generator" content="WordPress 4.7.24" />
(2) JavaScript指纹伪造
// Hook removeEventListener
let rel = removeEventListener;
removeEventListener = (name, func, opt) => {
if (name === "message" && /* 检测Wappalyzer特征 */) {
poc(); // 执行伪造
rel(name, func, opt);
} else {
rel(name, func, opt);
}
};
const poc = () => {
postMessage({
wappalyzer: {
js: [
{name: "Zipify Pages", chain: "ZipifyPages", value: true},
// 更多伪造指纹...
],
},
});
};
(3) DOM指纹伪造
// Hook addEventListener
let rel = addEventListener;
addEventListener = (name, func, opt) => {
if (name === "message" && /* 检测Wappalyzer特征 */) {
rel(name, func, opt);
poc(); // 执行伪造
} else {
rel(name, func, opt);
}
};
const poc = () => {
postMessage({
wappalyzer: {
technologies: [
{
name: "xss",
chains: ["bad.xss"], // 伪造DOM技术
},
],
},
});
};
(4) Self-XSS示例
window.bad = {
get xss() {
alert("xss!");
},
};
4. 指纹数据生成
使用Python脚本从Wappalyzer的技术数据库中提取和筛选指纹数据:
import os
import json
def load_technologies(directory):
"""加载所有技术数据"""
characters = ['_'] + [chr(i) for i in range(ord('a'), ord('z') + 1)]
all_technologies = {}
for character in characters:
file_path = os.path.join(directory, f"{character}.json")
if os.path.exists(file_path):
with open(file_path, 'r') as file:
data = json.load(file)
all_technologies.update(data)
return all_technologies
def filter_technologies(technologies):
"""筛选JS技术指纹"""
js_technologies = []
for name, details in technologies.items():
if "js" in details and details["js"]:
first_chain = list(details["js"].keys())[0]
js_technologies.append({
"name": name,
"chain": first_chain,
"value": True
})
return js_technologies
四、防御与混淆建议
- 代码混淆:对欺骗脚本进行混淆处理
- CDN引入:将关键脚本通过CDN引入
- 动态指纹:定期更换伪造的指纹数据
- 混合真实指纹:在伪造数据中混入部分真实指纹增加可信度
五、总结
Wappalyzer的欺骗技术核心在于理解其工作原理和检测流程,通过Hook关键函数和伪造通信数据实现技术指纹的欺骗。这种技术可以用于安全测试、蜜罐建设等场景,但需注意合法合规使用。