漏洞类型: 权限绕过 / 认证绕过(Cookie 伪造)影响范围: 某微盘系统(ThinkPHP 5.0.5 框架)测试环境: 本地复现环境测试地址:
127.0.0.1分析方式: 源码审计 + 本地验证
一、漏洞概述
本文通过对某微盘系统源码进行审计,发现其后台认证逻辑存在一个认证绕过问题。
该系统的后台权限判断完全依赖客户端 Cookie,且服务端用于校验登录状态的 token 是硬编码的固定值。攻击者只需构造一个满足条件的 Cookie,即可绕过正常登录流程,直接进入后台管理功能。
本文仅在本地搭建的测试环境中进行源码分析与漏洞复现,不涉及任何真实目标。
二、测试环境
系统:Windows
运行环境:PHPStudy(PHP 7.x + Apache)
框架:ThinkPHP 5.0.5
数据库:MySQL
访问地址:
http://127.0.0.1:4321三、漏洞发现过程
本次漏洞并非从现成 PoC 入手,而是从后台功能进行源码审计。
首先访问系统后台,抓取请求包。后台入口为:
http://127.0.0.1:4321/index.php/admin/index/index从请求中可以观察到,未登录状态访问后台会跳转到登录页。此时注意到请求中携带了一个 denglu Cookie,这是后台权限判断的关键。
请求方法:GET请求路径:/index.php/admin/index/index关键参数:Cookie: denglu=think:...
根据 ThinkPHP 的模块/控制器/操作路由规则(模块/控制器/方法),定位到后台控制器的基类 Base。
四、源码审计
4.1 权限来源定位
后台所有控制器都继承自 Base 类,认证逻辑统一写在它的构造函数 __construct 里:
classBaseextendsController{public function __construct(){parent::__construct();//验证登录$login = cookie('denglu'); // 权限来源if(!isset($login['userid'])){ // 判断 userid 是否存在$this->error('请先登录!','login/login',1,1);}if(!isset($login['token']) || $login['token'] != md5('bushishuaige')){$this->redirect('login/logout'); // token 硬编码校验}$this->otype = $login['otype']; // 信任 Cookie 中的角色$this->uid = $login['userid']; // 信任 Cookie 中的用户ID}}


4.2 认证判断分析
从代码可以看到完整的认证流程:
Cookie denglu↓判断 userid 是否存在↓判断 token 是否等于 md5(固定字符串)↓认证通过,进入后台
这里存在两个关键问题:
问题一:权限来源完全由客户端 Cookie 决定。$login = cookie('denglu') 直接读取客户端提交的 Cookie,没有任何服务端 Session 兜底。也就是说,攻击者可以完全控制 denglu 的内容。
问题二:token 是硬编码的固定值。$login['token'] != md5('xxxx') 中的校验值被写死在代码里。只要拿到这段源码(或通过其他方式获知该固定字符串),攻击者就能自己算出 md5 值,伪造出合法的 token。
五、漏洞成因
综合源码分析,完整的数据流程如下:
客户端请求↓携带 Cookie denglu↓Base 构造函数读取 cookie('denglu')↓userid 存在 + token == md5(硬编码固定值)↓认证通过,进入后台
漏洞根因在于:后台的登录态完全由客户端可控的 Cookie 决定,且用于校验的 token 是硬编码的固定字符串,可被预测和伪造。
核心问题:
认证依赖客户端 Cookie,无服务端 Session 校验; token 校验值硬编码在源码中,可被预测; 角色( otype)和用户 ID(userid)直接信任 Cookie,可被任意指定。
因此攻击者只要构造一个包含 userid、token、otype 三个字段的 Cookie,即可绕过正常登录流程。
六、本地漏洞复现
在本地测试环境访问后台:
http://127.0.0.1:4321/index.php/admin/index/index未登录时,页面会跳转到登录页。
随后构造 Cookie。ThinkPHP 的 Cookie 为 think: 前缀 + JSON 数组格式,其中 denglu 的值结构为:
denglu = think:{”userid”:”1”,”token”:””,”otype”:”1”}其中:
userid:任意非空值,代表登录用户 ID; token: md5(硬编码固定字符串)的计算结果;otype:管理员角色对应的值。

携带拼接过的Cookie 重新请求后台页面,请求成功后直接进入后台管理界面。
复现结果表明:
正常登录流程↓被绕过↓后台页面成功访问
至此确认该漏洞在本地环境中可以稳定复现。
七、漏洞影响
该问题可能导致未经授权的用户访问后台管理功能。
根据后台实际权限和功能,潜在影响包括:
未授权访问后台管理功能 获取后台业务信息 访问敏感配置 以管理员身份执行未授权业务操作
实际影响需要结合具体后台权限和业务功能进一步评估。
八、修复建议
建议:
避免使用固定、可预测的 Cookie 作为唯一认证依据; 登录成功后重新生成随机的 Session 标识,并在服务端保存会话状态; 后台接口统一进行服务端身份认证,而非信任客户端 Cookie; 对敏感管理操作进一步实施细粒度的权限校验; 移除源码中的硬编码密钥,改用随机生成的密钥并通过配置文件管理。
九、总结
本次通过对某微盘系统后台功能进行源码审计,从请求路由定位到 Base 控制器,再进一步分析 Cookie 处理及后台认证逻辑,最终发现并复现了一个认证绕过问题。
本次分析过程可以概括为:
后台功能↓抓包↓定位路由↓Controller(Base 基类)↓cookie('denglu') 权限来源↓硬编码 token 校验↓发现安全边界问题↓构造 Cookie↓本地复现
通过这种方式,可以在没有现成 PoC 的情况下,从源码中的业务逻辑和安全边界出发发现潜在漏洞。
免责声明:本文仅用于网络安全技术研究与学习,漏洞复现均在本地测试环境进行,请勿用于未经授权的系统。
夜雨聆风




