代码审计-youdiancms最新版getshell漏洞
字数 1144 2025-08-10 00:24:01
YouDianCMS最新版Getshell漏洞分析与利用
漏洞概述
本文详细分析YouDianCMS最新版中存在的两个安全漏洞:未授权SQL注入漏洞和后台getshell漏洞。这两个漏洞可以组合利用,最终实现系统完全控制。
0x01 未授权SQL注入漏洞
漏洞位置
App/Lib/Action/HomeBaseAction.class.php第16行App/Lib/Action/Home/ChannelAction.class.php第732行
漏洞分析
- 系统在
HomeBaseAction.class.php中将用户可控的cookie值赋给了$this->_fromUser - 该值随后在
ChannelAction.class.php中被带入hasVoted函数 - 由于使用ThinkPHP3框架,where条件存在SQL注入漏洞
利用Payload
GET /index.php/Channel/voteAdd HTTP/1.1
Host: localhost
Accept: application/json, text/javascript, */*; q=0.01
X-Requested-With: XMLHttpRequest
Cookie: youdianfu[0]=exp;youdianfu[1]==(select 1 from(select sleep(3))a)
Connection: close
这是一个基于时间的盲注payload,通过sleep(3)函数验证注入存在。
0x02 绕过登录到Getshell过程
0x0201 整体流程
- 通过验证码功能设置任意session
- 碰撞md5使AdminGroupID==1(超级管理员权限)
- 后台修改模板插入PHP代码实现代码执行
0x0202 任意session设置
漏洞位置
App/Lib/Action/BaseAction.class.php 第223行
漏洞分析
- 验证码生成函数参数完全可控,特别是
$verifyName参数 - 函数内部使用
$_SESSION[$verifyName] = md5(...)设置session - 攻击者可控制session键名,但值为系统生成的md5
管理员校验机制
App/Lib/Action/AdminBaseAction.class.php 第7行
isLogin函数仅检查session是否存在checkPurview函数检查AdminGroupID的值- 当
AdminGroupID==1时为超级管理员 - 由于是弱类型比较,可通过md5碰撞获得超级管理员权限
0x0203 后台Getshell
利用方法
- 登录后台后进入模板管理
- 系统对
<?php标签有检测 - 可使用
<?= ?>短标签绕过检测
利用效果
- 修改模板插入恶意PHP代码
- 访问首页即可触发代码执行
防御建议
- 对所有用户输入进行严格过滤和转义
- 修复验证码函数的session设置逻辑
- 加强管理员权限校验,使用强类型比较
- 模板编辑功能增加更严格的内容过滤
- 升级ThinkPHP框架到安全版本
总结
该漏洞链展示了从SQL注入到完全控制系统的完整攻击路径,危害性极高。开发人员应重视此类安全问题,加强代码审计和安全防护措施。