day 17 Shiro&Log4j&SpringBoot
·
我们可以从“识别目的→识别方法→后期应用”三个维度,结合具体案例讲解这些知识点,理解它们在Web安全测试中的核心逻辑:
一、核心逻辑:为什么要做“指纹识别”?
Web应用的“指纹”(CMS、框架、组件)就像人的“身份证”,包含了它的“出身信息”(用什么技术开发、依赖哪些工具)。
核心目的:通过识别这些信息,快速定位可能存在的漏洞——因为不同的CMS、框架、组件有其特有的安全缺陷(如历史漏洞、设计缺陷),相当于“缩小攻击范围”。
二、详细拆解:各类指纹的识别与应用
1. CMS指纹识别(以PHP为主,如SiteFactory、WordPress)
-
什么是CMS:内容管理系统(如企业官网、博客常用的WordPress、Dedecms、SiteFactory),本质是“封装好的PHP源码包”,开发者直接安装即可搭建网站。
-
识别方法(以工具GotoScan/CMSEEK为例):
通过检测网站的特征文件、响应头、页面元素判断:- 特征文件:如/clientfiles/js/public.js(SiteFactory的特有JS文件)、/wp-includes/(WordPress的核心目录);
- 响应头:部分CMS会在X-Powered-By中暴露标识(如X-Powered-By: Dedecms);
- 页面元素:如登录页的LOGO、底部版权信息(如“Powered by WordPress”)。
-
后期应用:
- 漏洞利用:搜索该CMS的已知漏洞(如SiteFactory某版本存在文件上传漏洞、WordPress插件漏洞),直接测试是否可利用;
- 代码审计:下载对应CMS的源码(官网或开源仓库),审计核心文件(如登录逻辑、文件处理模块),寻找未公开的漏洞(如SQL注入、逻辑缺陷)。
2. 开发框架识别(分语言,关联框架特有漏洞)
框架是“开发者封装的代码库”,简化开发(如内置文件上传、用户认证功能),漏洞多与框架的“过滤机制”相关。
(1)Python框架:Django & Flask
-
Django识别特征:
- 响应头/Cookie:包含csrftoken(Django的CSRF防护令牌,如Set-Cookie: csrftoken=xxx);
- 错误页面:默认404/500页面会显示“Django”标识;
- 特有路径:/admin/(Django自带的后台管理路径)。
-
Flask识别特征:
- 错误页面:默认报错页面会显示“Flask”和Python版本信息;
- 响应头:可能包含Server: Werkzeug/0.16.0 Python/3.8.5(Flask依赖的Werkzeug服务器)。
-
后期应用:
- 针对框架漏洞测试(如Django的DEBUG=True导致的信息泄露、Flask的SSTI模板注入漏洞);
- 审计框架使用逻辑(如开发者是否正确关闭DEBUG模式、是否自定义了存在缺陷的路由)。
(2)PHP框架:ThinkPHP & Laravel & Yii
-
ThinkPHP识别特征:
- 响应头:X-Powered-By: ThinkPHP(部分版本会直接暴露);
- 错误页面:默认报错会显示“ThinkPHP”及版本信息(如ThinkPHP 5.0.24);
- 特有参数:部分功能依赖m/c/a参数(如?m=Index&c=User&a=login,对应模块/控制器/方法)。
-
Laravel识别特征:
- Cookie:包含laravel_session(框架默认会话标识);
- 响应头:X-Powered-By: PHP/7.4.3结合路由特征(如/api/、/login的URL设计风格)。
-
Yii识别特征:
- 特有路径:/index.php?r=site/login(Yii的路由参数r);
- 错误页面:会显示“Yii Framework”标识。
-
后期应用:
- 利用框架历史漏洞(如ThinkPHP5的Request::input()方法导致的代码执行漏洞、Laravel的debug模式信息泄露);
- 审计框架二次开发逻辑(如开发者是否绕过了框架的过滤机制,自定义了危险函数)。
(3)Java框架:Spring & Struts2
-
识别特征:
- Spring:响应头可能包含X-Application-Context,特有路径如/actuator/(Spring Boot监控端点);
- Struts2:URL中包含.action后缀(如/login.action),或表单提交路径有struts标识。
-
后期应用:
- 针对框架漏洞(如Struts2的S2-045命令执行、Spring Cloud Gateway的代码注入);
- 检查框架配置(如Spring Boot的actuator是否未授权访问,导致敏感信息泄露)。
3. 开发组件识别(Java为主,聚焦第三方漏洞组件)
组件是“独立的功能模块”(如日志记录、数据解析),常被框架依赖,漏洞具有“通用性”(同一组件漏洞影响所有使用它的应用)。
-
常见组件及识别:
- Shiro:Cookie中包含rememberMe=deleteMe(Shiro的默认会话标识);
- FastJson:响应数据为JSON格式,且可能包含@type字段(FastJson的反序列化特征);
- Log4j:应用日志中包含log4j标识,或依赖包中有log4j-core-x.x.x.jar;
- Solr:特有路径/solr/admin/,页面显示“Apache Solr”标识。
-
后期应用:
- 检测组件版本(如Log4j是否为2.14.1以下版本,存在JNDI注入漏洞);
- 利用组件漏洞(如Shiro的默认密钥导致的反序列化漏洞、FastJson的autoType开启导致的代码执行)。
三、Web架构与漏洞关系(为什么这些识别很重要?)
- 纯手写代码:漏洞多由开发者水平不足导致(如SQL注入、XSS),需直接审计业务代码;
- 基于框架开发:漏洞集中在“框架本身的缺陷”或“开发者误用框架”(如未启用框架的CSRF防护);
- 框架+组件:漏洞来源更复杂(框架漏洞+组件漏洞+二次开发漏洞),需结合三者的识别结果综合测试。
总结
“指纹识别”是Web安全测试的“导航仪”:
- 通过CMS/框架/组件的特征,快速定位可能的漏洞方向;
- 结合其历史漏洞和源码审计,将“盲测”转化为“精准测试”;
- 最终目的是找到可利用的漏洞,完成渗透测试或安全评估。
比如,当识别到目标用“ThinkPHP 5.0.24”,就可以直接测试该版本的代码执行漏洞;识别到“Log4j 2.13.0”,就可以尝试JNDI注入——这就是指纹识别的核心价值。
更多推荐
所有评论(0)