seacms v9.92变量覆盖导致越权

文章详细介绍了SeacmsV9.92版本存在的全局变量覆盖漏洞,该漏洞允许攻击者通过覆盖SESSION和FILES类的变量实现越权,包括如何利用该漏洞修改管理员ID和用户组ID以获取管理员权限。漏洞源于common.php文件的安全检查疏漏,修复方法是完善变量过滤机制。
摘要由CSDN通过智能技术生成

seacms v9.92变量覆盖导致越权

漏洞详情

seacms v9.92 及以前版本均存在全局的变量覆盖漏洞,在common.php文件中未对注册的全局变量做完整的安全检查。这里参考:https://xz.aliyun.com/t/6192和https://www.freebuf.com/articles/web/210902.html 对变量覆盖实现越权操作,来学习代码审计,文章使用的是v9.92版本。

漏洞审计分析

在披露这处变量覆盖导致越权的漏洞之前,其实官方就对这里注册变量加强了安全检查。v9.92版本这里漏掉了 _SESSION、_FILES两类。

在common.php中,先在_RunMagicQuotes将用户提交的参数及其值注册为变量和变量值

在这里插入图片描述

然后提交到foreach函数中检查,过滤掉一些非法类型的变量。在v9.92版本仅仅是漏掉了SESSION、FILES。而在之前的版本中就只过滤了cfg、GLOBALS

v9.92

在这里插入图片描述

v9.2
在这里插入图片描述

我这里没找到V9.92的源码,以V9.2版本演示了

common.php文件有很多页面都包含了,其中的注册全局变量的功能可以说非常常用,加上安全过滤时漏掉SESSION类的变量,只要找到使用 session_start 并包含 include/common.php 文件的地方,就可以覆盖 session

找到cms对管理员登录验证的地方
在这里插入图片描述

这里会对两个参数进行校验,有趣的是用了一个0R,我们只要满足一个条件就可以了

$_SESSION[‘hashstr’]的值是用管理员密码、数据库名和密码在采用MD5加密形成的,这个不好猜(我要是知道就直接登录了,还越权干嘛)

那就只剩下$cuserLogin->getUserID(),跟进这个函数

在这里插入图片描述
在这里插入图片描述

这里只要覆盖 ** S E S S I O N [ ′ s e a a d m i n i d ′ ] ∗ ∗ 就行了。先注册一个普通用户,抓到登录包修改 ∗ ∗ _SESSION['sea_admin_id']**就行了。先注册一个普通用户,抓到登录包修改 ** SESSION[seaadminid]就行了。先注册一个普通用户,抓到登录包修改_SESSION[‘sea_admin_id’]**值为 1

在这里插入图片描述

注意 _SESSION[sea_ckstr] 为小写验证码(必需项)

成功登录

在这里插入图片描述

但登录后权限不如管理员权限大,归属于网站编辑。接着看,找找原因

发现一处鉴权操作

在这里插入图片描述

跟进getUserRank函数

在这里插入图片描述

和userid差不多,这里还得覆盖用户组id

在这里插入图片描述

poc中还得添加一个参数

POST /seacmsv9.2/login.php HTTP/1.1
············
dopost=login&userid=test&pwd=test&validate=TVND&_SESSION[sea_admin_id]=1&_SESSION[sea_group_id]=1&_SESSION[sea_ckstr]=tvnd

在这里插入图片描述

成功越权为管理员

在这里插入图片描述

接着分析"FILES"类的变量覆盖

在common.php中发现,如果存在$_FILES类的变量,就会包含uploadsafe.inc.php

在这里插入图片描述

跟进uploadsafe.inc.php

在这里插入图片描述

这里又发现一处变量覆盖,而且这里没有对$key的值做限制,但要注意这里的if判断。所以如果我们需要覆盖$SESSION['seaadminid'],需要在请求中同时添加对应的其他三个参数,如下图所示,请求中提交如下五个参数可以覆盖session中的seaadminid、seagroupid、以及sea_ckstr(登陆需要使用到的验证码)

_FILES[_SESSION][size]=1&_FILES[_SESSION][tmp_name][sea_admin_id]=1&_FILES[_SESSION][tmp_name][sea_group_id]=1&_FILES[_SESSION][tmp_name][sea_ckstr]=验证码小写&_FILES[_SESSION][type]=img&_FILES[_SESSION][name]=111.jpg

在这里插入图片描述

成功越权

在这里插入图片描述

两种方式其实原理差不多都是覆盖了用户id、用户组id和验证码三个参数。由于uploadsafe.inc.php中可变变量($$key)引起的变量覆盖

Js3suOI-1679561750065)]

两种方式其实原理差不多都是覆盖了用户id、用户组id和验证码三个参数。由于uploadsafe.inc.php中可变变量($$key)引起的变量覆盖

_FILES[_SESSION][tmp_name][sea_admin_id]=1等价于_SESSION[sea_admin_id]=1

seacms海洋cms影视管理系统 v9.1 更新日志 更新日期:2019年2月1日 v9.1 优化:服务器开启OPcache时后台设置兼容性 优化:视频编辑时剧情分类显示方式 优化:剧情分类缓存项 seacms海洋影视管理系统简介 海洋影视管理系统(seacms,海洋cms)是一套专为不同需求的站长而设计的视频点播系统,灵活,方便,人性化设计简单易用是最大的特色,是快速架设视频网站首选,只需5分钟即可建立一个海量的视频讯息的行业网站。 海洋cms采用PHP MYSQL架构,原生PHP代码带来卓越的访问速度和负载能力免去您的后顾之优。海洋cms支持一键转换原max的模板和数据,实现网站无缝迁移到新平台。众多人性化功能设计,超前定时执行任务,让您处理数据得心应手,您只需要专心做内容运营,其它的交给我们。 为符合SEO要求开发大量功能,比如百度结构化数据生成,搜索引擎地图等。全新设计的专题管理,同时支持按分类 扩展分类 剧情分类三种分类模式组合,让网站内容与众不同。简单易用丰富的模板标签,方便网站模板设计制作,让网站更显专业。 海洋cms是基于PHP MySql技术开发的开源CMS,完全开源 、没有任何加密代码,强劲功能、卓越性能、安全健壮。超级易用、模板众多、插件齐全、资源丰富。构架稳健,平滑升级。 seacms海洋影视管理系统前台页面 seacms海洋影视管理系统后台管理 后台路径:域名//admin 用户名与密码:admin(安装时可设置) 后台页面:  相关阅读 同类推荐:站长常用源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值