代码审计-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行

漏洞分析

  1. 系统在HomeBaseAction.class.php中将用户可控的cookie值赋给了$this->_fromUser
  2. 该值随后在ChannelAction.class.php中被带入hasVoted函数
  3. 由于使用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 整体流程

  1. 通过验证码功能设置任意session
  2. 碰撞md5使AdminGroupID==1(超级管理员权限)
  3. 后台修改模板插入PHP代码实现代码执行

0x0202 任意session设置

漏洞位置

App/Lib/Action/BaseAction.class.php 第223行

漏洞分析

  1. 验证码生成函数参数完全可控,特别是$verifyName参数
  2. 函数内部使用$_SESSION[$verifyName] = md5(...)设置session
  3. 攻击者可控制session键名,但值为系统生成的md5

管理员校验机制

App/Lib/Action/AdminBaseAction.class.php 第7行

  1. isLogin函数仅检查session是否存在
  2. checkPurview函数检查AdminGroupID的值
  3. AdminGroupID==1时为超级管理员
  4. 由于是弱类型比较,可通过md5碰撞获得超级管理员权限

0x0203 后台Getshell

利用方法

  1. 登录后台后进入模板管理
  2. 系统对<?php标签有检测
  3. 可使用<?= ?>短标签绕过检测

利用效果

  1. 修改模板插入恶意PHP代码
  2. 访问首页即可触发代码执行

防御建议

  1. 对所有用户输入进行严格过滤和转义
  2. 修复验证码函数的session设置逻辑
  3. 加强管理员权限校验,使用强类型比较
  4. 模板编辑功能增加更严格的内容过滤
  5. 升级ThinkPHP框架到安全版本

总结

该漏洞链展示了从SQL注入到完全控制系统的完整攻击路径,危害性极高。开发人员应重视此类安全问题,加强代码审计和安全防护措施。

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 这是一个基于时间的盲注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注入到完全控制系统的完整攻击路径,危害性极高。开发人员应重视此类安全问题,加强代码审计和安全防护措施。